diff options
| author | Technus <daniel112092@gmail.com> | 2017-12-30 14:41:48 +0100 |
|---|---|---|
| committer | Technus <daniel112092@gmail.com> | 2017-12-30 14:41:48 +0100 |
| commit | dafe0cdaa493797c87463619828932acd138922b (patch) | |
| tree | 9614e0f1746b6ddcfb1d58f29ba3974b2d63f8df /src | |
| parent | 701be18f07ad3562a059cf934c00fa2fb2bb53ef (diff) | |
| download | GT5-Unofficial-dafe0cdaa493797c87463619828932acd138922b.tar.gz GT5-Unofficial-dafe0cdaa493797c87463619828932acd138922b.tar.bz2 GT5-Unofficial-dafe0cdaa493797c87463619828932acd138922b.zip | |
Commands fixes changes.
Diffstat (limited to 'src')
18 files changed, 458 insertions, 75 deletions
diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 21c8d6dd39..9a4e803f67 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -2,6 +2,8 @@ package com.github.technus.tectech; import com.github.technus.tectech.auxiliary.Reference; import com.github.technus.tectech.auxiliary.TecTechConfig; +import com.github.technus.tectech.elementalMatter.core.commands.ListEM; +import com.github.technus.tectech.elementalMatter.core.commands.GiveEM; import com.github.technus.tectech.loader.MainLoader; import com.github.technus.tectech.loader.ModGuiHandler; import com.github.technus.tectech.proxy.CommonProxy; @@ -97,6 +99,10 @@ public class TecTech { @Mod.EventHandler public void serverLoad(FMLServerStartingEvent pEvent) { + if(DEBUG_MODE) { + pEvent.registerServerCommand(new GiveEM()); + pEvent.registerServerCommand(new ListEM()); + } } @Mod.EventHandler diff --git a/src/main/java/com/github/technus/tectech/Util.java b/src/main/java/com/github/technus/tectech/Util.java index e8786e4b84..c699077110 100644 --- a/src/main/java/com/github/technus/tectech/Util.java +++ b/src/main/java/com/github/technus/tectech/Util.java @@ -5,7 +5,6 @@ import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.GregTech_API; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_ItemStack; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; import net.minecraft.block.Block; @@ -911,7 +910,7 @@ public final class Util { return (testedValue&setBits)==setBits; } - public static class TT_ItemStack { + public static class TT_ItemStack implements Comparable<TT_ItemStack>{ public final Item mItem; public final int mStackSize; public final int mMetaData; @@ -925,40 +924,43 @@ public final class Util { public TT_ItemStack(ItemStack aStack) { if(aStack==null){ mItem=null; - mStackSize=0; - mMetaData=0; + mStackSize=mMetaData=0; }else{ mItem=aStack.getItem(); mStackSize=aStack.stackSize; - mMetaData=aStack.getItemDamage(); + mMetaData=Items.feather.getDamage(aStack); } } - public TT_ItemStack(int aHashCode) { - this(GT_Utility.intToStack(aHashCode)); - } - - public final ItemStack toStack() { - return this.mItem == null?null:new ItemStack(this.mItem, 1, this.mMetaData); - } - - public final boolean isStackEqual(ItemStack aStack) { - return GT_Utility.areStacksEqual(this.toStack(), aStack); - } - - public final boolean isStackEqual(GT_ItemStack aStack) { - return GT_Utility.areStacksEqual(this.toStack(), aStack.toStack()); + @Override + public int compareTo(TT_ItemStack o) { + if(mMetaData>o.mMetaData) return 1; + if(mMetaData<o.mMetaData) return -1; + if(mStackSize>o.mStackSize) return 1; + if(mStackSize<o.mStackSize) return -1; + if(mItem!=null && o.mItem!=null) return mItem.getUnlocalizedName().compareTo(o.mItem.getUnlocalizedName()); + if(mItem==null && o.mItem==null) return 0; + if(mItem!=null) return 1; + return -1; } + @Override public boolean equals(Object aStack) { return aStack == this || (aStack instanceof TT_ItemStack && - (((TT_ItemStack) aStack).mItem == this.mItem && - ((TT_ItemStack) aStack).mMetaData == this.mMetaData)); + ((mItem==((TT_ItemStack) aStack).mItem) || ((TT_ItemStack) aStack).mItem.getUnlocalizedName().equals(this.mItem.getUnlocalizedName())) && + ((TT_ItemStack) aStack).mStackSize == this.mStackSize && + ((TT_ItemStack) aStack).mMetaData == this.mMetaData); } + @Override public int hashCode() { - return GT_Utility.stackToInt(this.toStack()); + return (mItem!=null?mItem.getUnlocalizedName().hashCode():0) ^ (mMetaData << 16) ^ (mStackSize<<24); + } + + @Override + public String toString() { + return Integer.toString(hashCode())+' '+(mItem==null?"null":mItem.getUnlocalizedName())+' '+mMetaData+' '+mStackSize; } } } diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java index e513240dac..3d29927a6c 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java @@ -121,7 +121,7 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme return nbt; } - public static iElementalDefinition fromNBT(NBTTagCompound nbt) { + public static dComplexAspectDefinition fromNBT(NBTTagCompound nbt) { cElementalDefinitionStack[] stacks = new cElementalDefinitionStack[nbt.getInteger("i")]; for (int i = 0; i < stacks.length; i++) { stacks[i] = cElementalDefinitionStack.fromNBT(nbt.getCompoundTag(Integer.toString(i))); diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/commands/GiveEM.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/commands/GiveEM.java new file mode 100644 index 0000000000..36a41ca323 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/commands/GiveEM.java @@ -0,0 +1,159 @@ +package com.github.technus.tectech.elementalMatter.core.commands; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.elementalMatter.core.cElementalInstanceStackMap; +import com.github.technus.tectech.elementalMatter.core.cElementalMutableDefinitionStackMap; +import com.github.technus.tectech.elementalMatter.core.stacks.cElementalDefinitionStack; +import com.github.technus.tectech.elementalMatter.core.stacks.cElementalInstanceStack; +import com.github.technus.tectech.elementalMatter.core.templates.cElementalDefinition; +import com.github.technus.tectech.elementalMatter.core.templates.cElementalPrimitive; +import com.github.technus.tectech.elementalMatter.core.templates.iElementalDefinition; +import com.github.technus.tectech.thing.item.DebugElementalInstanceContainer_EM; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static com.github.technus.tectech.auxiliary.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.elementalMatter.definitions.primitive.cPrimitiveDefinition.nbtE__; + +/** + * Created by danie_000 on 30.12.2017. + */ +public class GiveEM implements ICommand { + ArrayList<String> aliases=new ArrayList<>(); + + public GiveEM(){ + aliases.add("em_give"); + aliases.add("give_em"); + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if (sender instanceof EntityPlayerMP && !sender.getEntityWorld().isRemote) { + if(args.length < 3) { + sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); + }else{ + TecTech.Logger.info("Spawninig EM for "+((EntityPlayerMP) sender).getDisplayName()+" - "+Arrays.toString(args)); + + ArrayList<String> list=new ArrayList<>(); + list.addAll(Arrays.asList(args)); + String energy=list.remove(0); + + cElementalDefinitionStack def= getDefinitionStack(list); + cElementalInstanceStack instanceStack=new cElementalInstanceStack(def,1,0,Long.parseLong(energy)); + + sender.addChatMessage(new ChatComponentText(instanceStack.definition.getSymbol()+" - "+instanceStack.definition.getName())); + + cElementalInstanceStackMap instanceMap=new cElementalInstanceStackMap(instanceStack); + + ItemStack itemStack=new ItemStack(DebugElementalInstanceContainer_EM.INSTANCE); + NBTTagCompound contents=new NBTTagCompound(); + contents.setTag("info", instanceMap.getInfoNBT()); + contents.setTag("content", instanceMap.toNBT()); + itemStack.setTagCompound(contents); + + ((EntityPlayerMP) sender).inventory.addItemStackToInventory(itemStack); + } + } + } + + private cElementalDefinitionStack getDefinitionStack(ArrayList<String> args){ + if(args.get(0).equals("<")){ + args.remove(0); + return null; + } + long amount=Long.parseLong(args.remove(0)); + try{ + int id=Integer.parseInt(args.get(0)); + args.remove(0); + iElementalDefinition primitive=cElementalPrimitive.getBindsPrimitive().get(id); + return new cElementalDefinitionStack(primitive,amount); + }catch (NumberFormatException e){ + byte clazz = (byte) args.remove(0).charAt(0); + Method constructor = cElementalDefinition.getBindsComplex().get(clazz); + + cElementalMutableDefinitionStackMap stacks=new cElementalMutableDefinitionStackMap(); + while(args.size()>0){ + cElementalDefinitionStack tempStack=getDefinitionStack(args); + if(tempStack==null) { + break; + }else { + stacks.putUnify(tempStack); + } + } + + try { + return ((iElementalDefinition) constructor.invoke(null, stacks.toNBT())).getStackForm(amount); + } catch (Exception e1) { + if (DEBUG_MODE) { + e.printStackTrace(); + } + return nbtE__.getStackForm(amount); + } + } + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } + + @Override + public List<String> getCommandAliases() { + return aliases; + } + + @Override + public String getCommandName() { + return aliases.get(0); + } + + @Override + public List<String> addTabCompletionOptions(ICommandSender sender, String[] args) { + if(args.length==2){ + return completionsForClassOrID(); + } + return null; + } + + private List<String> completionsForClassOrID(){ + ArrayList<String> strings=new ArrayList<>(8); + Map<Byte,Method> binds= cElementalDefinition.getBindsComplex(); + for (Map.Entry<Byte,Method> e:binds.entrySet()) { + strings.add(String.valueOf((char)e.getKey().byteValue())); + } + Map<Integer, cElementalPrimitive> bindsBO = cElementalPrimitive.getBindsPrimitive(); + for (Map.Entry<Integer,cElementalPrimitive> e:bindsBO.entrySet()) { + strings.add(String.valueOf(e.getKey().byteValue())); + } + return strings; + } + + @Override + public String getCommandUsage(ICommandSender p_71518_1_) { + return "em_give energy count classOrId (count classOrId , ... <) if complex"; + } + + @Override + public int compareTo(Object o) { + if(o instanceof ICommand){ + return getCommandName().compareTo(((ICommand) o).getCommandName()); + } + return 0; + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/commands/ListEM.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/commands/ListEM.java new file mode 100644 index 0000000000..2d296c1c9c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/commands/ListEM.java @@ -0,0 +1,96 @@ +package com.github.technus.tectech.elementalMatter.core.commands; + +import com.github.technus.tectech.elementalMatter.core.templates.cElementalDefinition; +import com.github.technus.tectech.elementalMatter.core.templates.cElementalPrimitive; +import com.github.technus.tectech.elementalMatter.core.templates.iElementalDefinition; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by danie_000 on 30.12.2017. + */ +public class ListEM implements ICommand { + ArrayList<String> aliases=new ArrayList<>(); + + public ListEM(){ + aliases.add("em_list"); + aliases.add("list_em"); + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if (!sender.getEntityWorld().isRemote) { + if(args.length == 0) { + sender.addChatMessage(new ChatComponentText(" Available Classes: tag - name")); + Map<Byte,Method> binds= cElementalDefinition.getBindsComplex(); + for (Map.Entry<Byte,Method> e:binds.entrySet()) { + sender.addChatMessage(new ChatComponentText(String.valueOf((char)e.getKey().byteValue())+" - "+e.getValue().getReturnType().getSimpleName())); + } + }else if(args.length==1){ + sender.addChatMessage(new ChatComponentText(" Available Primitives: symbol - name")); + if(args[0].equals(String.valueOf((char)cElementalPrimitive.nbtType))){ + Map<Integer, cElementalPrimitive> bindsBO = cElementalPrimitive.getBindsPrimitive(); + for (Map.Entry<Integer,cElementalPrimitive> e:bindsBO.entrySet()) { + sender.addChatMessage(new ChatComponentText(e.getKey() + " - "+e.getValue().getName())); + } + }else{ + sender.addChatMessage(new ChatComponentText("Complex definition - needs contents")); + } + }else{ + sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); + } + } + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } + + @Override + public List<String> getCommandAliases() { + return aliases; + } + + @Override + public String getCommandName() { + return aliases.get(0); + } + + @Override + public List<String> addTabCompletionOptions(ICommandSender sender, String[] args) { + if(args.length==0){ + Map<Byte,Method> binds= cElementalDefinition.getBindsComplex(); + ArrayList<String> strings=new ArrayList<>(binds.size()); + for (Map.Entry<Byte,Method> e:binds.entrySet()) { + strings.add(String.valueOf((char)e.getKey().byteValue())+' '+e.getValue().getReturnType().getSimpleName()); + } + return strings; + } + return null; + } + + @Override + public String getCommandUsage(ICommandSender p_71518_1_) { + return "em_list (optional class tag)"; + } + + @Override + public int compareTo(Object o) { + if(o instanceof ICommand){ + return getCommandName().compareTo(((ICommand) o).getCommandName()); + } + return 0; + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalDefinition.java index 6ae32c00c3..505bb5ab48 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalDefinition.java @@ -25,13 +25,17 @@ public abstract class cElementalDefinition extends iElementalDefinition { protected static void addCreatorFromNBT(byte shortcutNBT, Method constructorFromNBT,byte classID) { if(nbtCreationBind.put(shortcutNBT, constructorFromNBT)!=null) { - throw new Error("Duplicate NBT shortcut! " + shortcutNBT); + throw new Error("Duplicate NBT shortcut! " + shortcutNBT + " used for NBT based creation"); } if(!classSet.add(classID)) { - throw new Error("Duplicate Class ID! " + classID); + throw new Error("Duplicate Class ID! " + classID + " used for class comparison"); } } + public static Map<Byte, Method> getBindsComplex(){ + return nbtCreationBind; + } + @Override public final cElementalDefinition clone() { return this;//IMMUTABLE @@ -96,7 +100,7 @@ public abstract class cElementalDefinition extends iElementalDefinition { } @Override - public final cElementalDefinitionStack getStackForm(int i) { + public final cElementalDefinitionStack getStackForm(long i) { return new cElementalDefinitionStack(this,i); } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java index b6a877a024..ab571e9d4c 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java @@ -25,9 +25,13 @@ import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileE * EXTEND THIS TO ADD NEW PRIMITIVES, WATCH OUT FOR ID'S!!! (-1 to 32 can be assumed as used) */ public abstract class cElementalPrimitive extends cElementalDefinition { - private static final byte nbtType = (byte) 'p'; + public static final byte nbtType = (byte) 'p'; - public static final Map<Integer, iElementalDefinition> bindsBO = new HashMap<>(); + private static final Map<Integer, cElementalPrimitive> bindsBO = new HashMap<>(); + + public static Map<Integer, cElementalPrimitive> getBindsPrimitive() { + return bindsBO; + } public final String name; public final String symbol; @@ -173,8 +177,8 @@ public abstract class cElementalPrimitive extends cElementalDefinition { return nbt; } - public static iElementalDefinition fromNBT(NBTTagCompound content) { - iElementalDefinition primitive = bindsBO.get(content.getInteger("c")); + public static cElementalPrimitive fromNBT(NBTTagCompound content) { + cElementalPrimitive primitive = bindsBO.get(content.getInteger("c")); return primitive == null ? null__ : primitive; } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java index 034c90c72e..23d2df06a8 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java @@ -64,12 +64,12 @@ public abstract class iElementalDefinition implements Comparable<iElementalDefin public abstract NBTTagCompound toNBT(); - public abstract cElementalDefinitionStack getStackForm(int i); + public abstract cElementalDefinitionStack getStackForm(long i); @Override public abstract iElementalDefinition clone(); - final int compareClassID(iElementalDefinition obj) { + final /*default*/ int compareClassID(iElementalDefinition obj) { return (int) getClassType() - obj.getClassType(); } } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java index df795bd9ed..4fc6594a40 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java @@ -361,19 +361,19 @@ public final class dAtomDefinition extends cElementalDefinition { int element = Math.abs(this.element); boolean negative = element < 0; try { - return (negative ? "~" : "") + nomenclature.Symbol[element] + " N:" + neutralCount + " I:" + (neutralCount+element) + " C: " + getCharge(); + return (negative ? "~" : "") + nomenclature.Symbol[element] + " N:" + neutralCount + " I:" + (neutralCount+element) + " C:" + getCharge(); } catch (Exception e) { if (DEBUG_MODE) { e.printStackTrace(); } try { int s100 = element / 100, s1 = element / 10 % 10, s10 = element % 10; - return (negative ? "~" : "") + nomenclature.SymbolIUPAC[10 + s100] + nomenclature.SymbolIUPAC[s10] + nomenclature.SymbolIUPAC[s1] + " N:" + neutralCount + " I:" + (neutralCount+element) + " C: " + getCharge(); + return (negative ? "~" : "") + nomenclature.SymbolIUPAC[10 + s100] + nomenclature.SymbolIUPAC[s10] + nomenclature.SymbolIUPAC[s1] + " N:" + neutralCount + " I:" + (neutralCount+element) + " C:" + getCharge(); } catch (Exception E) { if (DEBUG_MODE) { e.printStackTrace(); } - return (negative ? "~" : "") + "? N:" + neutralCount + " I:" + (neutralCount+element) + " C: " + getCharge(); + return (negative ? "~" : "") + "? N:" + neutralCount + " I:" + (neutralCount+element) + " C:" + getCharge(); } } } @@ -1295,7 +1295,7 @@ public final class dAtomDefinition extends cElementalDefinition { return nbt; } - public static iElementalDefinition fromNBT(NBTTagCompound nbt) { + public static dAtomDefinition fromNBT(NBTTagCompound nbt) { cElementalDefinitionStack[] stacks = new cElementalDefinitionStack[nbt.getInteger("i")]; for (int i = 0; i < stacks.length; i++) { stacks[i] = cElementalDefinitionStack.fromNBT(nbt.getCompoundTag(Integer.toString(i))); diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java index 29d583d613..34fa55bb04 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java @@ -346,7 +346,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi return nbt; } - public static iElementalDefinition fromNBT(NBTTagCompound nbt) { + public static dHadronDefinition fromNBT(NBTTagCompound nbt) { cElementalDefinitionStack[] stacks = new cElementalDefinitionStack[nbt.getInteger("i")]; for (int i = 0; i < stacks.length; i++) { stacks[i] = cElementalDefinitionStack.fromNBT(nbt.getCompoundTag(Integer.toString(i))); diff --git a/src/main/java/com/github/technus/tectech/loader/BloodyRecipeLoader.java b/src/main/java/com/github/technus/tectech/loader/BloodyRecipeLoader.java index 67e1eef9a1..38f6610e48 100644 --- a/src/main/java/com/github/technus/tectech/loader/BloodyRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/BloodyRecipeLoader.java @@ -21,6 +21,8 @@ import net.minecraftforge.fluids.FluidStack; public class BloodyRecipeLoader implements Runnable { @Override public void run() { + //todo fix recipes (of assembler) + //Quantum Glass GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ CustomItemList.eM_Containment.get(1), @@ -377,7 +379,7 @@ public class BloodyRecipeLoader implements Runnable { GT_MetaTileEntity_EM_machine.registerBehaviour(new Behaviour_Centrifuge(11),ItemList.Machine_IV_Centrifuge.get(32)); GT_MetaTileEntity_EM_machine.registerBehaviour(new Behaviour_Centrifuge(12),ItemList.Machine_IV_Centrifuge.get(64)); } - + GT_MetaTileEntity_EM_machine.registerBehaviour(new Behaviour_ElectromagneticSeparator(6),ItemList.Machine_IV_ElectromagneticSeparator.get(1)); try { GT_MetaTileEntity_EM_machine.registerBehaviour(new Behaviour_ElectromagneticSeparator(7),ItemList.valueOf("Machine_LuV_ElectromagneticSeparator").get(1)); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index 896746b359..ffe9b45a94 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -95,7 +95,7 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock } @Override - public boolean checkRecipe_EM(ItemStack itemStack) {//TODO implement by item quantization, implement instance quantization + public boolean checkRecipe_EM(ItemStack itemStack) {//TODO implement instance quantization if (GregTech_API.sPostloadFinished) { ArrayList<ItemStack> storedInputs = getStoredInputs(); ItemStack[] inI = storedInputs.toArray(new ItemStack[storedInputs.size()]); @@ -104,10 +104,10 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock //ITEM STACK quantization aItemQuantizationInfo aIQI = bTransformationInfo.itemQuantization.get(new aItemQuantizationInfo(is, false, null)); if (aIQI == null) { - aIQI = bTransformationInfo.itemQuantization.get(new aItemQuantizationInfo(is, true, null)); + aIQI = bTransformationInfo.itemQuantization.get(new aItemQuantizationInfo(is, true, null));//todo check if works? } if (aIQI == null) { - //ORE DICT quantization + //ORE DICT quantization //todo fix for uranium? int[] oreIDs = OreDictionary.getOreIDs(is); for (int ID : oreIDs) { if (DEBUG_MODE) { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index 4672640770..eab87fe71a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -385,9 +385,9 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa }else if(objectsScanned!=null && CustomItemList.scanContainer.isStackEqual(mInventory[1], false, true)){ ElementalDefinitionScanStorage_EM.setContent(mInventory[1],objectsScanned,scanComplexity); } - quantumStuff(false); objectResearched=null; totalComputationRemaining =0; + quantumStuff(false); } @Override @@ -434,16 +434,16 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa @Override public void onRemoval() { - super.onRemoval(); quantumStuff(false); + super.onRemoval(); } @Override public void stopMachine() { + quantumStuff(false); super.stopMachine(); totalComputationRequired = totalComputationRemaining =0; objectResearched=null; - quantumStuff(false); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java index be582e1d87..c1ca644c56 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java @@ -11,6 +11,7 @@ import java.util.Arrays; import java.util.Comparator; import static com.github.technus.tectech.Util.V; +import static com.github.technus.tectech.auxiliary.TecTechConfig.DEBUG_MODE; /** * Created by danie_000 on 24.12.2017. @@ -98,21 +99,24 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.Behavi cElementalInstanceStack[] stacks = input.values(); - float inputMass = input.getMass(); + double inputMass = 0; + for (cElementalInstanceStack stack : stacks) { + inputMass += Math.abs(stack.getMass()); + } float excessMass = 0; - while (inputMass > maxCapacity || -inputMass > maxCapacity) { + while (inputMass > maxCapacity) { cElementalInstanceStack randomStack = stacks[TecTech.Rnd.nextInt(stacks.length)]; int amountToRemove = TecTech.Rnd.nextInt((int) randomStack.getAmount()) + 1; randomStack.amount -= amountToRemove;//mutates the parent InstanceStackMap if (randomStack.amount <= 0) { input.remove(randomStack.definition); } - float mass = randomStack.getDefinition().getMass() * amountToRemove; + float mass = Math.abs(randomStack.getDefinition().getMass()) * amountToRemove; excessMass += mass; inputMass -= mass; } - inputMass = Math.abs(inputMass); + inputMass = Math.abs(input.getMass()); double RCF = getRCF(checkedAndFixedParameters[0]); if (inputMass * RCF > maxForce) return new MultiblockControl<>(excessMass);//AND THEN IT EXPLODES @@ -149,7 +153,13 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.Behavi for (cElementalInstanceStack stack : stacks) { absMassPerOutput += Math.abs(stack.getMass()); } + if(DEBUG_MODE){ + TecTech.Logger.info("absMass "+absMassPerOutput); + } absMassPerOutput /= fractionCount; + if(DEBUG_MODE){ + TecTech.Logger.info("absMassPerOutput "+absMassPerOutput); + } nextFraction: for (int fraction = 0; fraction < fractionCount - 1; fraction++) { @@ -157,7 +167,13 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.Behavi for (int stackNo = 0; stackNo < stacks.length; stackNo++) { if (stacks[stackNo] != null) { double stackMass = Math.abs(stacks[stackNo].getMass()); - long amount = (long) (Math.abs(stacks[stackNo].definition.getMass()) / remaining); + long amount = (long) (remaining/Math.abs(stacks[stackNo].definition.getMass())); + //if(DEBUG_MODE){ + // TecTech.Logger.info("stackMass "+stackMass); + // TecTech.Logger.info("defMass "+stacks[stackNo].definition.getMass()); + // TecTech.Logger.info("remaining "+remaining); + // TecTech.Logger.info("amountToMoveAvailable "+amount+"/"+stacks[stackNo].amount); + //} if (stackMass == 0) { addRandomly(stacks[stackNo], outputs, fractionCount); stacks[stackNo] = null; @@ -170,6 +186,11 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.Behavi cElementalInstanceStack clone = stacks[stackNo].clone(); clone.amount = amount; outputs[fraction].putReplace(clone); + stacks[stackNo].amount-=amount; + //if(DEBUG_MODE){ + // TecTech.Logger.info("remainingAfter "+remaining); + // TecTech.Logger.info("amountCloneAfter "+clone.amount+"/"+stacks[stackNo].amount); + //} } else { continue nextFraction; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java index 82d8c0d535..1d28db92c8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java @@ -25,7 +25,7 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ tier=(byte) desiredTier; ticks =Math.max(20,(1<<(12-desiredTier))*20); maxCapacity= dAtomDefinition.getSomethingHeavy().getMass()*(2<<tier); - maxCharge=144*(1<<(tier-6)); + maxCharge=144*(1<<(tier-5)); switch (tier){ case 12: precisionFull=1; @@ -55,9 +55,13 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ precisionFull=12; precisionMinimal =3; break; + case 5: + precisionFull=24; + precisionMinimal =6; + break; default: precisionFull= precisionMinimal =Byte.MAX_VALUE; } - offsetMax=1<<(tier*2); + offsetMax=1<<((tier-8)<<1); } @Override @@ -124,7 +128,7 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ te.setStatusOfParameterIn(1,0,GT_MetaTileEntity_MultiblockBase_EM.STATUS_OK); }else if(offset>=-offsetMax){ te.setStatusOfParameterIn(1,0,GT_MetaTileEntity_MultiblockBase_EM.STATUS_LOW); - }else if(offset<-offset){ + }else if(offset<-offsetMax){ te.setStatusOfParameterIn(1,0,GT_MetaTileEntity_MultiblockBase_EM.STATUS_TOO_LOW); check=false; }else { @@ -137,27 +141,29 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ @Override public MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] checkedAndFixedParameters) { - cElementalInstanceStackMap input = inputs[0]; if (input == null || input.isEmpty()) return null;//nothing in only valid input cElementalInstanceStack[] stacks = input.values(); - float inputMass = input.getMass(); + double inputMass = 0; + for (cElementalInstanceStack stack : stacks) { + inputMass += Math.abs(stack.getMass()); + } float excessMass = 0; - while (inputMass > maxCapacity || -inputMass > maxCapacity) { + while (inputMass > maxCapacity) { cElementalInstanceStack randomStack = stacks[TecTech.Rnd.nextInt(stacks.length)]; int amountToRemove = TecTech.Rnd.nextInt((int) randomStack.getAmount()) + 1; randomStack.amount -= amountToRemove;//mutates the parent InstanceStackMap if (randomStack.amount <= 0) { input.remove(randomStack.definition); } - float mass = randomStack.getDefinition().getMass() * amountToRemove; + float mass = Math.abs(randomStack.getDefinition().getMass()) * amountToRemove; excessMass += mass; inputMass -= mass; } - long totalCharge=input.getCharge(); + long totalCharge=Math.abs(input.getCharge()); if (totalCharge>maxCharge) return new MultiblockControl<>(excessMass);//AND THEN IT EXPLODES int mEut=(int)(((double)totalCharge/(double) maxCharge)*V[tier]); @@ -170,15 +176,15 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ outputs[i] = new cElementalInstanceStackMap(); } + double offsetIn=checkedAndFixedParameters[2]; double precisionFullIn=checkedAndFixedParameters[0]; double precisionMinimalIn=checkedAndFixedParameters[1]; - double levelsCount=precisionFullIn-precisionMinimalIn+1; - double offset=checkedAndFixedParameters[2]; + double levelsCountPlus1=precisionFullIn-precisionMinimalIn+1; //take all from hatch handler and put into new map - this takes from hatch to inner data storage stacks = input.takeAllToNewMap().values();//cleanup stacks for(cElementalInstanceStack stack:stacks){ - double charge=stack.definition.getCharge()-offset; + double charge=stack.definition.getCharge()-offsetIn; if(charge<precisionMinimalIn && charge>-precisionMinimalIn){ outputs[1].putReplace(stack); }else if(charge>=precisionFullIn){ @@ -186,7 +192,7 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ }else if(charge<=-precisionFullIn){ outputs[0].putReplace(stack); }else{ - long amount=(long)(stack.amount*((Math.abs(charge)-precisionMinimalIn+1)/levelsCount)); + long amount=(long)(stack.amount*((Math.abs(charge)-precisionMinimalIn+1)/levelsCountPlus1));//todo check if(amount>=stack.amount){ if(charge>0){ outputs[2].putReplace(stack); @@ -208,6 +214,6 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ } } - return new MultiblockControl<>(outputs, mEut, 1, 0, 10000, mTicks, 0, excessMass); + return new MultiblockControl<>(outputs, mEut, 1+((int)Math.abs(offsetIn))/3, 0, 10000, mTicks, 0, excessMass); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Mixer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Scanner.java index e8b1d7027f..020a71da5c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Mixer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Scanner.java @@ -6,9 +6,9 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockCont /** * Created by danie_000 on 24.12.2017. */ -public class Behaviour_Mixer implements GT_MetaTileEntity_EM_machine.Behaviour { +public class Behaviour_Scanner implements GT_MetaTileEntity_EM_machine.Behaviour { final int tier; - public Behaviour_Mixer(int tier){ + public Behaviour_Scanner(int tier){ this.tier=tier; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index a73548f63c..0936c1ad1e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -1,19 +1,26 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.TecTech; import com.github.technus.tectech.Util; import com.github.technus.tectech.elementalMatter.core.cElementalInstanceStackMap; +import com.github.technus.tectech.recipe.TT_recipe; import com.github.technus.tectech.thing.block.QuantumGlassBlock; +import com.github.technus.tectech.thing.block.QuantumStuffBlock; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; +import gregtech.api.enums.ItemList; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_ItemStack; import gregtech.common.blocks.GT_Block_Machines; import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; import java.util.BitSet; import java.util.HashMap; @@ -30,14 +37,24 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa public static final String machine = "EM Machinery"; //region structure - private static final String[][] shape = new String[][]{{"B0", "A ", "0 - 0", "A ", "B0",}, {"A000", "00000", "00.00", "00000", "A000",}, {"A121", "1C1", "2C2", "1C1", "A121",}, {"A131", "1C1", "3C3", "1C1", "A131",}, {"A121", "1C1", "2C2", "1C1", "A121",}, {"A000", "00000", "00A00", "00000", "A000",}, {"B0", "A!!!", "0!\"!0", "A!!!", "B0",},}; + private static final String[][] shape = new String[][]{ + {"B0", "A ", "0 - 0", "A ", "B0",}, + {"A000", "00000", "00.00", "00000", "A000",}, + {"A121", "1C1", "2C2", "1C1", "A121",}, + {"A131", "1C1", "3C3", "1C1", "A131",}, + {"A121", "1C1", "2C2", "1C1", "A121",}, + {"A000", "00000", "00A00", "00000", "A000",}, + {"B0", "A!!!", "0!!!0", "A!!!", "B0",},}; private static final Block[] blockType = new Block[]{sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 0, 5, 6}; - private static final String[] addingMethods = new String[]{"addClassicToMachineList", "addElementalToMachineList", "addElementalInputToMachineList"}; - private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4}; - private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; - private static final byte[] blockMetaFallback = new byte[]{0, 4, 4}; - private static final String[] description = new String[]{EnumChatFormatting.AQUA + "Hint Details:", "1 - Classic Hatches or High Power Casing", "2 - Elemental Hatches or Molecular Casing", "2 - Elemental Input Hatch",}; + private static final String[] addingMethods = new String[]{"addClassicToMachineList", "addElementalToMachineList"}; + private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; + private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; + private static final byte[] blockMetaFallback = new byte[]{0, 4}; + private static final String[] description = new String[]{ + EnumChatFormatting.AQUA + "Hint Details:", + "1 - Classic Hatches or High Power Casing", + "2 - Elemental Hatches or Molecular Casing",}; //endregion public GT_MetaTileEntity_EM_machine(int aID, String aName, String aNameRegional) { @@ -74,9 +91,41 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa } @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + if(aBaseMetaTileEntity.isServerSide()) { + quantumStuff(aBaseMetaTileEntity.isActive()); + } + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if(aBaseMetaTileEntity.isActive() && (aTick & 0x2)==0 && aBaseMetaTileEntity.isClientSide()){ + int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX*2+aBaseMetaTileEntity.getXCoord(); + int yDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetY*2+aBaseMetaTileEntity.getYCoord(); + int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ*2+aBaseMetaTileEntity.getZCoord(); + aBaseMetaTileEntity.getWorld().markBlockRangeForRenderUpdate(xDir,yDir,zDir,xDir,yDir,zDir); + } + } + + @Override + public void onRemoval() { + quantumStuff(false); + super.onRemoval(); + } + + @Override public boolean checkRecipe_EM(ItemStack itemStack) { - Behaviour currentBehaviour = GT_MetaTileEntity_EM_machine.map.get(new GT_ItemStack(itemStack)); + Behaviour currentBehaviour = GT_MetaTileEntity_EM_machine.map.get(new Util.TT_ItemStack(itemStack)); + //TecTech.Logger.info("Looking for "+new Util.TT_ItemStack(itemStack).toString()); if (currentBehaviour == null) { + setStatusOfParameterIn(0,0,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); + setStatusOfParameterIn(0,1,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); + setStatusOfParameterIn(1,0,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); + setStatusOfParameterIn(1,1,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); + setStatusOfParameterIn(2,0,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); + setStatusOfParameterIn(2,1,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); + setStatusOfParameterIn(3,0,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); + setStatusOfParameterIn(3,1,GT_MetaTileEntity_MultiblockBase_EM.STATUS_UNUSED); return false; } //mux input @@ -137,7 +186,15 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa mMaxProgresstime = control.getMaxProgressTime(); eRequiredData = control.getRequiredData(); mEfficiencyIncrease = control.getEffIncrease(); - return polluteEnvironment(control.getPollutionToAdd()); + boolean polluted=polluteEnvironment(control.getPollutionToAdd()); + quantumStuff(polluted); + return polluted; + } + + @Override + protected void afterRecipeCheckFailed() { + quantumStuff(false); + super.afterRecipeCheckFailed(); } @Override @@ -175,10 +232,17 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa outputEM[i] = null; } } + quantumStuff(false); //all other are handled by base multi block code - cleaning is automatic } @Override + public void stopMachine() { + quantumStuff(false); + super.stopMachine(); + } + + @Override protected void parametersLoadDefault_EM() {//default routing table setParameterPairIn_ClearOut(4, false, 1, 2);//I setParameterPairIn_ClearOut(5, false, 3, 4);//I @@ -263,11 +327,9 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa private static final HashMap<Util.TT_ItemStack, Behaviour> map = new HashMap<>(); - public static void registerBehaviour(Behaviour behaviour, Util.TT_ItemStack is) { - map.put(is, behaviour); - } public static void registerBehaviour(Behaviour behaviour, ItemStack is) { map.put(new Util.TT_ItemStack(is), behaviour); + TecTech.Logger.info("Registered EM machine behaviour "+behaviour.getClass().getSimpleName()+' '+new Util.TT_ItemStack(is).toString()); } public interface Behaviour { @@ -275,4 +337,23 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa MultiblockControl<cElementalInstanceStackMap[]> process(cElementalInstanceStackMap[] inputs, double[] checkedAndFixedParameters); } + + private void quantumStuff(boolean shouldExist){ + IGregTechTileEntity base=getBaseMetaTileEntity(); + if(base!=null && base.getWorld()!=null) { + int xDir = ForgeDirection.getOrientation(base.getBackFacing()).offsetX * 2+base.getXCoord(); + int yDir = ForgeDirection.getOrientation(base.getBackFacing()).offsetY * 2+base.getYCoord(); + int zDir = ForgeDirection.getOrientation(base.getBackFacing()).offsetZ * 2+base.getZCoord(); + Block block = base.getWorld().getBlock(xDir, yDir, zDir); + if (shouldExist) { + if(block != null && block.getMaterial()== Material.air) { + base.getWorld().setBlock(xDir, yDir, zDir, QuantumStuffBlock.INSTANCE, 0, 2); + } + } else { + if (block instanceof QuantumStuffBlock) { + base.getWorld().setBlock(xDir, yDir, zDir, Blocks.air, 0, 2); + } + } + } + } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo index b255c2013c..7059fdf6fd 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/other todo @@ -34,3 +34,5 @@ iterative halflife formula: =prev qty* 2^(-t diff / t half) + +actual ion cannons |
