Finished all multiblocks, Fusion Reactor

This commit is contained in:
TheDarkDnKTv 2021-03-03 00:43:12 +02:00
parent d62fee0644
commit 27bbc3f4f2
15 changed files with 419 additions and 279 deletions

View file

@ -173,6 +173,7 @@ public enum Materials {
FieryBlood ( -1, GT_ItemTextures.SET_NONE , 1|2 |64 , 255, 255, 255, 0, 5, 2048, 0, 0, 0, 0, false, false, 1, 1, 1, Dyes.dyeRed ), FieryBlood ( -1, GT_ItemTextures.SET_NONE , 1|2 |64 , 255, 255, 255, 0, 5, 2048, 0, 0, 0, 0, false, false, 1, 1, 1, Dyes.dyeRed ),
Firestone ( -1, GT_ItemTextures.SET_NONE , 0 , 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeOrange ), Firestone ( -1, GT_ItemTextures.SET_NONE , 0 , 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeOrange ),
Fluorite ( -1, GT_ItemTextures.SET_NONE , 1 |8 , 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeGreen ), Fluorite ( -1, GT_ItemTextures.SET_NONE , 1 |8 , 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeGreen ),
// TODO remove this shit
FoolsRuby ( 512, GT_ItemTextures.SET_RUBY , 1 |4|8 , 255, 100, 100, 127, 0, 0, 0, 0, 0, 0, false, true, 3, 1, 1, Dyes.dyeRed ), FoolsRuby ( 512, GT_ItemTextures.SET_RUBY , 1 |4|8 , 255, 100, 100, 127, 0, 0, 0, 0, 0, 0, false, true, 3, 1, 1, Dyes.dyeRed ),
Force ( 521, GT_ItemTextures.SET_DIAMOND , 1|2|4|8 |64|128 , 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeYellow ), Force ( 521, GT_ItemTextures.SET_DIAMOND , 1|2|4|8 |64|128 , 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeYellow ),
Forcicium ( 518, GT_ItemTextures.SET_DIAMOND , 1 |4|8|16 , 50, 50, 70, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeGreen ), Forcicium ( 518, GT_ItemTextures.SET_DIAMOND , 1 |4|8|16 , 50, 50, 70, 0, 0, 0, 0, 0, 0, 0, false, false, 3, 1, 1, Dyes.dyeGreen ),

View file

@ -2,6 +2,7 @@ package gregtechmod.api.metatileentity.implementations;
import java.util.List; import java.util.List;
import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.recipe.RecipeLogic; import gregtechmod.api.recipe.RecipeLogic;
import gregtechmod.api.recipe.RecipeMap; import gregtechmod.api.recipe.RecipeMap;
import gregtechmod.api.util.GT_Utility; import gregtechmod.api.util.GT_Utility;
@ -41,6 +42,11 @@ public abstract class BaseMultiFluidWorkable extends BaseMultiWorkable {
@Override // Fuck this shit, called before i init fluid IO @Override // Fuck this shit, called before i init fluid IO
protected void initRecipeLogic(RecipeMap<?> map) {} protected void initRecipeLogic(RecipeMap<?> map) {}
@Override
public boolean spaceForOutput(Recipe recipe) {
return super.spaceForOutput(recipe); // TODO FIX FLUIDS CHECK!
}
@Override @Override
public void saveNBTData(NBTTagCompound aNBT) { public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT); super.saveNBTData(aNBT);

View file

@ -99,7 +99,7 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
} }
} }
@Override // TODO did not check for fluid output slots, not needed yet @Override
public boolean spaceForOutput(Recipe recipe) { public boolean spaceForOutput(Recipe recipe) {
List<ItemStack> outputSlots = this.getOutputItems(); List<ItemStack> outputSlots = this.getOutputItems();
List<ItemStack> allOutputs = recipe.getAllOutputs(); List<ItemStack> allOutputs = recipe.getAllOutputs();
@ -123,7 +123,7 @@ public abstract class BasicFluidWorkable extends GT_MetaTileEntity_BasicTank imp
} }
for (FluidStack fluid : recipe.getFluidOutputs()) { for (FluidStack fluid : recipe.getFluidOutputs()) {
int amount = this.fill(fluid.copy(), false); int amount = this.fill(fluid.copy(), false); // TODO FIX FLUID CHECK!
if (amount < fluid.amount) { if (amount < fluid.amount) {
return false; return false;
} }

View file

@ -104,7 +104,7 @@ public abstract class MTEWorkableMultiblock extends MetaTileEntityMultiblock imp
} }
} }
for (FluidStack fluid : recipe.getFluidOutputs()) { for (FluidStack fluid : recipe.getFluidOutputs()) { // TODO fix this fluid check!
int amount = this.fill(fluid.copy(), false); int amount = this.fill(fluid.copy(), false);
if (amount < fluid.amount) { if (amount < fluid.amount) {
return false; return false;

View file

@ -544,7 +544,7 @@ public abstract class MetaTileEntityMultiblock extends MetaTileEntity {
} }
} }
return false; return getBaseMetaTileEntity().hasInventoryBeenModified();
} }
public boolean addEnergyOutput(int aEU) { public boolean addEnergyOutput(int aEU) {

View file

@ -8,7 +8,6 @@ import java.util.function.Predicate;
import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.interfaces.IRecipeWorkable; import gregtechmod.api.interfaces.IRecipeWorkable;
import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.util.GT_Log; import gregtechmod.api.util.GT_Log;
import gregtechmod.api.util.GT_Utility; import gregtechmod.api.util.GT_Utility;
@ -27,6 +26,7 @@ public class RecipeLogic {
public WeakReference<IRecipeWorkable> metaTileEntity; public WeakReference<IRecipeWorkable> metaTileEntity;
public final RecipeMap<?> recipeMap; public final RecipeMap<?> recipeMap;
public int MAX_FLUID_STACK = 16_000;
public int batterySlot = 5; public int batterySlot = 5;
/** Custom fucntion called every recipe progress time update, if you want to speed up machine because of some factor, just increase the value up */ /** Custom fucntion called every recipe progress time update, if you want to speed up machine because of some factor, just increase the value up */
protected IntUnaryOperator progressTimeManipulator = i -> i; protected IntUnaryOperator progressTimeManipulator = i -> i;
@ -96,6 +96,8 @@ public class RecipeLogic {
wasNoEnergy = true; wasNoEnergy = true;
triggerMachine(false); triggerMachine(false);
} }
} else {
previousRecipe = null;
} }
} }
} }
@ -213,11 +215,20 @@ public class RecipeLogic {
GT_Log.log.error("Output overflow detected! Left items: " + amount + " for output stack: " + recipeOut); GT_Log.log.error("Output overflow detected! Left items: " + amount + " for output stack: " + recipeOut);
} }
MetaTileEntity mte = (MetaTileEntity) getMachine(); List<FluidStack> fluidOutputs = getMachine().getFluidOutputs();
for (FluidStack fluid : recipe.getFluidOutputs()) { for (FluidStack fluid : recipe.getFluidOutputs()) {
int amount = mte.fill(fluid.copy(), true); int amount = fluid.amount;
if (amount > 0) for (int i = 0; amount > 0 && i < fluidOutputs.size(); i++) {
GT_Log.log.error("Output overflow detected! Left fluid: " + amount + " for output stack: " + fluid); FluidStack stackInSlot = fluidOutputs.get(i);
if (GT_Utility.isFluidStackValid(stackInSlot) && stackInSlot.isFluidEqual(fluid)) {
int tmp = Math.min(MAX_FLUID_STACK, stackInSlot.amount + fluid.amount);
amount -= tmp - stackInSlot.amount;
stackInSlot.amount = tmp;
} else if (stackInSlot == null) {
fluidOutputs.set(i, fluid.copy());
amount = 0;
}
}
} }
stuttering = false; stuttering = false;

View file

@ -1002,6 +1002,12 @@ public class GT_Utility {
return null; return null;
} }
public static FluidStack copy(FluidStack fluid, int amount) {
fluid = fluid.copy();
fluid.amount = amount;
return fluid;
}
public static List<ItemStack> copy(Collection<ItemStack> stacks) { public static List<ItemStack> copy(Collection<ItemStack> stacks) {
return stacks.stream().map(ItemStack::copy).collect(Collectors.toList()); return stacks.stream().map(ItemStack::copy).collect(Collectors.toList());
} }

View file

@ -18,7 +18,7 @@ import gregtechmod.common.recipe.maps.ScannerRecipeMap;
* *
*/ */
public class RecipeMaps { public class RecipeMaps {
public static final RecipeMap<SimpleRecipeFactory> FUSION_REACTOR = new RecipeMap<>(0, 0, 0, 0, 2, 2, 1, 1, new SimpleRecipeFactory()); public static final RecipeMap<SimpleRecipeFactory> FUSION_REACTOR = new RecipeMap<>(0, 2, 0, 1, 0, 2, 0, 1, new SimpleRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> CENTRIFUGE = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); public static final RecipeMap<SimpleRecipeFactory> CENTRIFUGE = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> ELECTROLYZER = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); public static final RecipeMap<SimpleRecipeFactory> ELECTROLYZER = new RecipeMap<>(0, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory());
public static final RecipeMap<SimpleRecipeFactory> GRINDER = new RecipeMap<>(1, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory()); public static final RecipeMap<SimpleRecipeFactory> GRINDER = new RecipeMap<>(1, 2, 1, 4, 0, 1, 0, 0, new SimpleRecipeFactory());

View file

@ -25,7 +25,7 @@ public class IC2RecipeMap extends DummyRecipeMap {
@Override @Override
public Recipe findRecipe(List<ItemStack> input, List<FluidStack> fluidInputs) { public Recipe findRecipe(List<ItemStack> input, List<FluidStack> fluidInputs) {
for (ItemStack in : input) { // TODO find items for (ItemStack in : input) {
if (GT_Utility.isStackValid(in)) { if (GT_Utility.isStackValid(in)) {
ItemStack inValid = in.copy(); ItemStack inValid = in.copy();
List<ItemStack> results = recipeGetter.apply(inValid); List<ItemStack> results = recipeGetter.apply(inValid);

View file

@ -2,14 +2,24 @@ package gregtechmod.common.tileentities.machines.multi;
import gregtechmod.api.GregTech_API; import gregtechmod.api.GregTech_API;
import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.interfaces.IRecipeWorkable;
import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
import gregtechmod.api.metatileentity.implementations.MetaTileEntityMultiblock;
import gregtechmod.api.recipe.Recipe; import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.recipe.RecipeLogic;
import gregtechmod.api.util.GT_Log;
import gregtechmod.api.util.GT_Utility; import gregtechmod.api.util.GT_Utility;
import gregtechmod.api.util.InfoBuilder; import gregtechmod.api.util.InfoBuilder;
import gregtechmod.api.util.InventoryHandler;
import gregtechmod.api.util.InventoryHandlerList;
import gregtechmod.api.util.ListAdapter;
import gregtechmod.api.util.WeakList;
import gregtechmod.common.recipe.RecipeMaps;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -18,23 +28,32 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity { public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity implements IRecipeWorkable {
public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mUpdate = 0, mStartUpCheck = 100; /* STRUCTURE STATUS */
private ItemStack mOutputItem1; protected boolean structComplete = false;
public boolean mMachine = true; protected boolean needCheckStruct = true;
private ArrayList<IGregTechTileEntity> mPlasmaExtractors = new ArrayList<IGregTechTileEntity>(); protected int MAX_FLUID_STACK = 16_000;
private ArrayList<IGregTechTileEntity> mEnergyInjectors = new ArrayList<IGregTechTileEntity>();
private ArrayList<IGregTechTileEntity> mPrimaryInjectors = new ArrayList<IGregTechTileEntity>(); protected RecipeLogic recipeLogic;
private ArrayList<IGregTechTileEntity> mSecondaryInjectors = new ArrayList<IGregTechTileEntity>();
private WeakList<GT_MetaTileEntity_BasicTank> mPlasmaExtractors = new WeakList<>();
private WeakList<GT_MetaTileEntity_BasicTank> mPlasmaInjectors = new WeakList<>();
private WeakList<IGregTechTileEntity> mEnergyInjectors = new WeakList<>();
protected List<FluidStack> fluidInputs = null;
protected List<FluidStack> fluidOutputs = null;
protected List<ItemStack> itemInputs = null;
protected List<ItemStack> itemOutputs = null;
public GT_MetaTileEntity_FusionComputer(int aID, String mName) { public GT_MetaTileEntity_FusionComputer(int aID, String mName) {
super(aID, mName); super(aID, mName);
recipeLogic = new FusionRecipeLogic();
} }
public GT_MetaTileEntity_FusionComputer() { public GT_MetaTileEntity_FusionComputer() {
recipeLogic = new FusionRecipeLogic();
} }
@Override public boolean isSimpleMachine() {return false;} @Override public boolean isSimpleMachine() {return false;}
@ -45,8 +64,6 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity {
@Override public int getEUVar() {return getStoredEU();} @Override public int getEUVar() {return getStoredEU();}
@Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 143);} @Override public void onRightclick(EntityPlayer aPlayer) {getBaseMetaTileEntity().openGUI(aPlayer, 143);}
@Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;} @Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
@Override public int getProgresstime() {return mProgresstime;}
@Override public int maxProgresstime() {return mMaxProgresstime;}
@Override public int increaseProgress(int aProgress) {return aProgress;} @Override public int increaseProgress(int aProgress) {return aProgress;}
@Override @Override
@ -59,135 +76,91 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity {
return aSide != getBaseMetaTileEntity().getFrontFacing(); return aSide != getBaseMetaTileEntity().getFrontFacing();
} }
@Override
public void saveNBTData(NBTTagCompound aNBT) {
aNBT.setInteger("mEUt", mEUt);
aNBT.setInteger("mProgresstime", mProgresstime);
aNBT.setInteger("mMaxProgresstime", mMaxProgresstime);
if (mOutputItem1 != null) {
NBTTagCompound tNBT = new NBTTagCompound();
mOutputItem1.writeToNBT(tNBT);
aNBT.setTag("mOutputItem1", tNBT);
}
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
mUpdate = 100;
mEUt = aNBT.getInteger("mEUt");
mProgresstime = aNBT.getInteger("mProgresstime");
mMaxProgresstime = aNBT.getInteger("mMaxProgresstime");
NBTTagCompound tNBT1 = (NBTTagCompound)aNBT.getTag("mOutputItem1");
if (tNBT1 != null) {
mOutputItem1 = GT_Utility.loadItem(tNBT1);
}
}
private void setComputerOf(MetaTileEntity aMetaTileEntity, boolean setreset) { private void setComputerOf(MetaTileEntity aMetaTileEntity, boolean setreset) {
if (aMetaTileEntity != null) { if (aMetaTileEntity != null) {
if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionInjector) { if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionInjector) {
((GT_MetaTileEntity_FusionInjector)aMetaTileEntity).mFusionComputer = setreset?getBaseMetaTileEntity():null; ((GT_MetaTileEntity_FusionInjector)aMetaTileEntity).setComputer(setreset?getBaseMetaTileEntity():null);
if (setreset) if (setreset)
if (aMetaTileEntity.getBaseMetaTileEntity().getYCoord() > getBaseMetaTileEntity().getYCoord()) mPlasmaInjectors.add((GT_MetaTileEntity_FusionInjector)aMetaTileEntity);
mPrimaryInjectors.add(aMetaTileEntity.getBaseMetaTileEntity());
else
mSecondaryInjectors.add(aMetaTileEntity.getBaseMetaTileEntity());
} }
if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionEnergyInjector) { if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionEnergyInjector) {
((GT_MetaTileEntity_FusionEnergyInjector)aMetaTileEntity).mFusionComputer = setreset?getBaseMetaTileEntity():null; ((GT_MetaTileEntity_FusionEnergyInjector)aMetaTileEntity).setComputer(setreset?getBaseMetaTileEntity():null);
if (setreset) if (setreset)
mEnergyInjectors.add(aMetaTileEntity.getBaseMetaTileEntity()); mEnergyInjectors.add(aMetaTileEntity.getBaseMetaTileEntity());
} }
if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionExtractor) { if (aMetaTileEntity instanceof GT_MetaTileEntity_FusionExtractor) {
((GT_MetaTileEntity_FusionExtractor)aMetaTileEntity).mFusionComputer = setreset?getBaseMetaTileEntity():null; ((GT_MetaTileEntity_FusionExtractor)aMetaTileEntity).setComputer(setreset?getBaseMetaTileEntity():null);
if (setreset) if (setreset)
mPlasmaExtractors.add(aMetaTileEntity.getBaseMetaTileEntity()); mPlasmaExtractors.add((GT_MetaTileEntity_FusionExtractor)aMetaTileEntity);
} }
} }
} }
private void reset() { private void reset() {
for (IGregTechTileEntity tTileEntity : mPlasmaExtractors ) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false); for (GT_MetaTileEntity_BasicTank tTileEntity : mPlasmaExtractors ) setComputerOf(tTileEntity, false);
for (IGregTechTileEntity tTileEntity : mPrimaryInjectors ) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false); for (GT_MetaTileEntity_BasicTank tTileEntity : mPlasmaInjectors ) setComputerOf(tTileEntity, false);
for (IGregTechTileEntity tTileEntity : mSecondaryInjectors) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false);
for (IGregTechTileEntity tTileEntity : mEnergyInjectors ) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false); for (IGregTechTileEntity tTileEntity : mEnergyInjectors ) setComputerOf((MetaTileEntity)tTileEntity.getMetaTileEntity(), false);
mPlasmaExtractors = new ArrayList<IGregTechTileEntity>(); mPlasmaExtractors.clear();
mPrimaryInjectors = new ArrayList<IGregTechTileEntity>(); mPlasmaInjectors.clear();
mSecondaryInjectors = new ArrayList<IGregTechTileEntity>(); mEnergyInjectors.clear();
mEnergyInjectors = new ArrayList<IGregTechTileEntity>();
fluidInputs = null;
fluidOutputs = null;
itemInputs = null;
itemOutputs = null;
} }
@Override @Override
public void onMachineBlockUpdate() { public void onMachineBlockUpdate() {
mUpdate = 100; needCheckStruct = true;
} }
@Override @Override
public void onPostTick() { public void onPostTick() {
if (getBaseMetaTileEntity().isServerSide()) { if (getBaseMetaTileEntity().isServerSide()) {
if (mUpdate--==0 || mStartUpCheck==0) { if (getBaseMetaTileEntity().isServerSide()) {
mMachine = checkMachine(); if (needCheckStruct) {
} reset();
if (mStartUpCheck-- < 0) { structComplete = checkMachine();
if (mMaxProgresstime > 0) { needCheckStruct = false;
if (mMachine && decreaseStoredEU(-mEUt)) {
if (++mProgresstime>mMaxProgresstime) { if (structComplete) {
addOutput(mOutputItem1); fluidInputs = new InventoryHandlerList<>(mPlasmaInjectors.stream().map(extr -> new ListAdapter<>(extr.mFluid)).collect(Collectors.toList()));
mOutputItem1 = null; fluidOutputs = new InventoryHandlerList<>(mPlasmaExtractors.stream().map(extr -> new ListAdapter<>(extr.mFluid)).collect(Collectors.toList()));
mProgresstime = 0; itemInputs = new InventoryHandlerList<>(mPlasmaInjectors.stream().map(extr -> new ListAdapter<>(extr.mInventory, extr.getInputSlot(), extr.getInputSlot())).collect(Collectors.toList()));
mMaxProgresstime = 0; itemOutputs = new InventoryHandlerList<>(mPlasmaExtractors.stream().map(extr -> new ListAdapter<>(extr.mInventory, extr.getOutputSlot(), extr.getOutputSlot())).collect(Collectors.toList()));
if (getBaseMetaTileEntity().isAllowedToWork()) checkRecipe(); }
} } else if (!structComplete && getBaseMetaTileEntity().getTimer() % 600 == 0) {
} else { needCheckStruct = true;
addOutput(mOutputItem1); }
mOutputItem1 = null;
mProgresstime = 0; if (structComplete) {
mMaxProgresstime = 0; recipeLogic.update();
} } else recipeLogic.stop();
} else {
if (getBaseMetaTileEntity().isAllowedToWork()) checkRecipe();
}
getBaseMetaTileEntity().setActive(mMaxProgresstime > 0);
} }
} }
} }
private boolean checkRecipe() { public boolean hasInventoryBeenModified() {
if (!mMachine) return false; for (GT_MetaTileEntity_BasicTank hatch : mPlasmaInjectors) {
ItemStack input1 = getPrimaryInput(); if (MetaTileEntityMultiblock.isValidMetaTileEntity(hatch)) {
ItemStack input2 = getSecondaryInput(); if (hatch.getBaseMetaTileEntity().hasInventoryBeenModified()) {
Recipe tRecipe = Recipe.findEqualRecipe(false, false, Recipe.sFusionRecipes, input1, input2); return true;
if (tRecipe != null && consumeInput(tRecipe.mInputs[0], tRecipe.mInputs[1], getBaseMetaTileEntity().isActive()?0:tRecipe.mStartEU)) { }
mMaxProgresstime = tRecipe.mDuration; }
mEUt = tRecipe.mEUt; }
mOutputItem1 = GT_Utility.copy(tRecipe.getOutput(0));
return true; for (GT_MetaTileEntity_BasicTank hatch : mPlasmaExtractors) {
} if (MetaTileEntityMultiblock.isValidMetaTileEntity(hatch)) {
return false; if (hatch.getBaseMetaTileEntity().hasInventoryBeenModified()) {
} return true;
}
private ItemStack getPrimaryInput() { }
for (IGregTechTileEntity tTileEntity : mPrimaryInjectors) { }
if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) {
ItemStack rStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial(); return getBaseMetaTileEntity().hasInventoryBeenModified();
if (rStack != null) return rStack; }
}
}
return null;
}
private ItemStack getSecondaryInput() {
for (IGregTechTileEntity tTileEntity : mSecondaryInjectors) {
if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) {
ItemStack rStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial();
if (rStack != null) return rStack;
}
}
return null;
}
private int getStoredEU() { private int getStoredEU() {
int rEU = 0; int rEU = 0;
@ -211,73 +184,6 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity {
return false; return false;
} }
private boolean consumeInput(ItemStack aInput1, ItemStack aInput2, int aEU) {
if (aInput1 != null && aInput2 != null) {
if (aEU <= 0 || getStoredEU() >= aEU) {
for (IGregTechTileEntity tTileEntity : mPrimaryInjectors) {
if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) {
ItemStack tStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial();
if (tStack != null) {
if (GT_Utility.areStacksEqual(tStack, aInput1) && tStack.stackSize >= aInput1.stackSize) {
for (IGregTechTileEntity tTileEntity2 : mSecondaryInjectors) {
if (tTileEntity2.getMetaTileEntity() != null && tTileEntity2.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) {
if (((GT_MetaTileEntity_FusionInjector)tTileEntity2.getMetaTileEntity()).consumeMaterial(aInput2)) {
return decreaseStoredEU(aEU) && ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).consumeMaterial(aInput1);
}
}
}
return false;
}
}
}
}
for (IGregTechTileEntity tTileEntity : mSecondaryInjectors) {
if (tTileEntity.getMetaTileEntity() != null && tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) {
ItemStack tStack = ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).getMaterial();
if (tStack != null) {
if (GT_Utility.areStacksEqual(tStack, aInput1) && tStack.stackSize >= aInput1.stackSize) {
for (IGregTechTileEntity tTileEntity2 : mPrimaryInjectors) {
if (tTileEntity2.getMetaTileEntity() != null && tTileEntity2.getMetaTileEntity() instanceof GT_MetaTileEntity_FusionInjector) {
if (((GT_MetaTileEntity_FusionInjector)tTileEntity2.getMetaTileEntity()).consumeMaterial(aInput2)) {
return decreaseStoredEU(aEU) && ((GT_MetaTileEntity_FusionInjector)tTileEntity.getMetaTileEntity()).consumeMaterial(aInput1);
}
}
}
return false;
}
}
}
}
}
}
return false;
}
private void addOutput(ItemStack aOutput) {
if (aOutput == null) return;
FluidStack tLiquid = GT_Utility.getFluidForFilledItem(aOutput);
if (tLiquid == null) {
for (IGregTechTileEntity tTileEntity : mPlasmaExtractors) {
ItemStack tStack = tTileEntity.getStackInSlot(1);
if (tStack == null) {
tTileEntity.setInventorySlotContents(1, GT_Utility.copy(aOutput));
return;
}
if (GT_Utility.areStacksEqual(tStack, aOutput) && tStack.stackSize + aOutput.stackSize <= tStack.getMaxStackSize()) {
tStack.stackSize+=aOutput.stackSize;
return;
}
}
} else {
for (IGregTechTileEntity tTileEntity : mPlasmaExtractors) {
if (((MetaTileEntity)tTileEntity.getMetaTileEntity()).fill(tLiquid, false) == tLiquid.amount) {
((MetaTileEntity)tTileEntity.getMetaTileEntity()).fill(tLiquid, true);
return;
}
}
}
}
@Override @Override
public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) {
if (aSide != aFacing) return aActive?20:19; if (aSide != aFacing) return aActive?20:19;
@ -287,9 +193,10 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity {
@Override @Override
public Map<String, List<Object>> getInfoData() { public Map<String, List<Object>> getInfoData() {
return InfoBuilder.create() return InfoBuilder.create()
.newKey("sensor.progress.percentage", mProgresstime * 100.0D / mMaxProgresstime) .newKey("sensor.progress.percentage", recipeLogic.getDisplayProgress() * 100.0D / recipeLogic.getDisplayMaxProgress())
.newKey("sensor.progress.secs", mProgresstime / 20) .newKey("sensor.progress.secs", recipeLogic.getDisplayProgress() / 20)
.newKey("sensor.progress.secs", mMaxProgresstime / 20) .newKey("sensor.progress.secs.1", recipeLogic.getDisplayMaxProgress() / 20)
.newKey("nei.extras.eu_total", GT_Utility.parseNumberToString(getStoredEU()))
.build(); .build();
} }
@ -555,4 +462,210 @@ public class GT_MetaTileEntity_FusionComputer extends MetaTileEntity {
if (tObject == null || !(tObject instanceof MetaTileEntity)) return null; if (tObject == null || !(tObject instanceof MetaTileEntity)) return null;
return (MetaTileEntity)tObject; return (MetaTileEntity)tObject;
} }
@Override
public void startProcess() {}
@Override
public void endProcess() {}
@Override
public void stutterProcess() {}
@Override
public boolean allowToCheckRecipe() {
return true;
}
@Override
public boolean spaceForOutput(Recipe recipe) {
for (FluidStack fluid : recipe.getFluidOutputs()) {
int amount = fluid.amount;
for (int i = 0; amount > 0 && i < fluidOutputs.size(); i++) {
FluidStack stackInSlot = fluidOutputs.get(i);
if (GT_Utility.isFluidStackValid(stackInSlot) && stackInSlot.isFluidEqual(fluid)) {
int tmp = Math.min(MAX_FLUID_STACK, stackInSlot.amount + fluid.amount);
amount -= tmp - stackInSlot.amount;
} else if (stackInSlot == null) amount = 0;
}
if (amount > 0) // Could not work fine, need check
return false;
}
return true;
}
@Override
public List<ItemStack> getInputItems() {
if (structComplete && itemInputs != null) {
return itemInputs;
}
return new InventoryHandler<>(2);
}
@Override
public List<ItemStack> getOutputItems() {
if (structComplete && itemOutputs != null) {
return itemOutputs;
}
return new InventoryHandler<>(1);
}
@Override
public List<FluidStack> getFluidInputs() {
if (structComplete && fluidInputs != null) {
return fluidInputs;
}
return new InventoryHandler<>(2);
}
@Override
public List<FluidStack> getFluidOutputs() {
if (structComplete && fluidOutputs != null) {
return fluidOutputs;
}
return new InventoryHandler<>(1);
}
@Override
public void saveNBTData(NBTTagCompound aNBT) {
recipeLogic.saveToNBT(aNBT);
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
recipeLogic.loadFromNBT(aNBT);
}
private class FusionRecipeLogic extends RecipeLogic {
private boolean firstStart = true;
protected FusionRecipeLogic() {
super(RecipeMaps.FUSION_REACTOR, GT_MetaTileEntity_FusionComputer.this);
}
@Override
public boolean update() {
boolean success = false;
IGregTechTileEntity base = getMachine().getBaseMetaTileEntity();
GT_MetaTileEntity_FusionComputer machine = (GT_MetaTileEntity_FusionComputer)getMachine();
overclockersCount = base.getOverclockerUpgradeCount();
if (base.isAllowedToWork()) {
if (progressTime > 0) {
int tmp = progressTime;
success = updateRecipeProgress();
if (tmp == 0 && !success) {
throw new IllegalStateException();
}
}
if (progressTime == 0) {
if (machine.hasInventoryBeenModified() || base.hasWorkJustBeenEnabled() || success || base.getTimer() % 600 == 0 || wasNoEnergy) {
if (machine.getStoredEU() >= machine.getMinimumStoredEU() - 100) {
trySerachRecipe();
wasNoEnergy = false;
} else {
previousRecipe = null;
wasNoEnergy = true;
triggerMachine(false);
}
} else {
previousRecipe = null;
}
}
}
return success;
}
@Override
protected boolean updateRecipeProgress() {
if (((GT_MetaTileEntity_FusionComputer)getMachine()).decreaseStoredEU(EUt)) {
if ((progressTime += progressTimeManipulator.applyAsInt((int)Math.pow(2, overclockersCount))) >= maxProgressTime) {
progressTime = 0;
maxProgressTime = 0;
EUt = 0;
endRecipe(previousRecipe);
getMachine().endProcess();
return true;
}
} else stop();
return false;
}
@Override
protected void trySerachRecipe() {
if (getMachine().allowToCheckRecipe()) {
if (previousRecipe != null) {
if (match(previousRecipe)) {
startRecipe(previousRecipe);
} else {
previousRecipe = null;
triggerMachine(false);
}
} else {
firstStart = true;
Recipe resRec = findRecipe();
if (resRec != null)
startRecipe(resRec);
firstStart = false;
}
}
}
@Override
protected void startRecipe(Recipe recipe) {
if (getMachine().spaceForOutput(recipe) && firstStart ? ((GT_MetaTileEntity_FusionComputer)getMachine()).decreaseStoredEU(recipe.getEUtoStart()) : true) {
previousRecipe = recipe;
maxProgressTime = recipe.getDuration();
progressTime = 1;
EUt = recipe.getEUt();
if (consumeInputs(recipe)) {
triggerMachine(true);
getMachine().startProcess();
} else {
GT_Log.log.catching(new IllegalStateException("Error state detected! RecipeMap passed recipe, but it's not matching! Report about this!!!"));
EUt = 0;
progressTime = 0;
maxProgressTime = 0;
previousRecipe = null;
}
} else stop();
}
@Override
public void stop() {
super.stop();
getMachine().getBaseMetaTileEntity().disableWorking();
triggerMachine(false);
firstStart = true;
}
@Override
public void saveToNBT(NBTTagCompound data) {
super.saveToNBT(data);
NBTTagCompound data1 = data.getCompoundTag("RecipeLogic");
data1.setBoolean("firstStart", firstStart);
data.setTag("RecipeLogic", data1);
}
@Override
public void loadFromNBT(NBTTagCompound data) {
super.loadFromNBT(data);
NBTTagCompound data1 = data.getCompoundTag("RecipeLogic");
firstStart = data1.getBoolean("firstStart");
}
}
} }

View file

@ -2,54 +2,25 @@ package gregtechmod.common.tileentities.machines.multi;
import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public class GT_MetaTileEntity_FusionEnergyInjector extends MetaTileEntity { public class GT_MetaTileEntity_FusionEnergyInjector extends MTEFusionBus {
public IGregTechTileEntity mFusionComputer;
public GT_MetaTileEntity_FusionEnergyInjector(int aID, String mName) { public GT_MetaTileEntity_FusionEnergyInjector(int aID, String mName) {
super(aID, mName); super(aID, mName);
} }
public GT_MetaTileEntity_FusionEnergyInjector() { public GT_MetaTileEntity_FusionEnergyInjector() {}
}
@Override public boolean isSimpleMachine() {return false;}
@Override public boolean isFacingValid(byte aFacing) {return false;}
@Override public boolean isEnetInput() {return true;} @Override public boolean isEnetInput() {return true;}
@Override public boolean isInputFacing(byte aSide) {return true;} @Override public boolean isInputFacing(byte aSide) {return true;}
@Override public int maxEUInput() {return 8192;} @Override public int maxEUInput() {return 8192;}
@Override public int maxEUStore() {return 10000000;} @Override public int maxEUStore() {return 10000000;}
@Override public int maxRFStore() {return maxEUStore();}
@Override public int maxSteamStore() {return maxEUStore();}
@Override public int getInvSize() {return 0;} @Override public int getInvSize() {return 0;}
@Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
@Override @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_FusionEnergyInjector(); return new GT_MetaTileEntity_FusionEnergyInjector();
} }
@Override
public void saveNBTData(NBTTagCompound aNBT) {
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
}
@Override
public void onPostTick() {
if (getBaseMetaTileEntity().isServerSide()) {
getBaseMetaTileEntity().setActive(mFusionComputer!=null&&mFusionComputer.isActive());
}
}
@Override @Override
public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) {
@ -60,14 +31,4 @@ public class GT_MetaTileEntity_FusionEnergyInjector extends MetaTileEntity {
public String getDescription() { public String getDescription() {
return "metatileentity.GT_Fusion_Energy.tooltip"; return "metatileentity.GT_Fusion_Energy.tooltip";
} }
@Override
public boolean allowPullStack(int aIndex, byte aSide, ItemStack aStack) {
return false;
}
@Override
public boolean allowPutStack(int aIndex, byte aSide, ItemStack aStack) {
return false;
}
} }

View file

@ -1,5 +1,7 @@
package gregtechmod.common.tileentities.machines.multi; package gregtechmod.common.tileentities.machines.multi;
import java.lang.ref.WeakReference;
import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
@ -7,7 +9,7 @@ import net.minecraft.entity.player.EntityPlayer;
public class GT_MetaTileEntity_FusionExtractor extends GT_MetaTileEntity_BasicTank { public class GT_MetaTileEntity_FusionExtractor extends GT_MetaTileEntity_BasicTank {
public IGregTechTileEntity mFusionComputer; private WeakReference<IGregTechTileEntity> mFusionComputer;
public GT_MetaTileEntity_FusionExtractor(int aID, String mName) { public GT_MetaTileEntity_FusionExtractor(int aID, String mName) {
super(aID, mName); super(aID, mName);
@ -35,12 +37,23 @@ public class GT_MetaTileEntity_FusionExtractor extends GT_MetaTileEntity_BasicTa
@Override public boolean displaysItemStack() {return true;} @Override public boolean displaysItemStack() {return true;}
@Override public boolean displaysStackSize() {return true;} @Override public boolean displaysStackSize() {return true;}
@Override @Override
public void onPostTick() { public void onPostTick() {
if (getBaseMetaTileEntity().isServerSide() && getBaseMetaTileEntity().getTimer()%20==0) { if (getBaseMetaTileEntity().isServerSide()) {
getBaseMetaTileEntity().setActive(mFusionComputer!=null&&mFusionComputer.isActive()); if (mFusionComputer != null && mFusionComputer.get() != null) {
if (mFusionComputer.get().isInvalidTileEntity()) {
mFusionComputer.clear();
getBaseMetaTileEntity().setActive(false);
} else if (getBaseMetaTileEntity().isActive() != mFusionComputer.get().isActive()) {
getBaseMetaTileEntity().setActive(!getBaseMetaTileEntity().isActive());
}
}
} }
} }
public void setComputer(IGregTechTileEntity computer) {
mFusionComputer = new WeakReference<>(computer);
}
@Override @Override
public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) {

View file

@ -1,17 +1,16 @@
package gregtechmod.common.tileentities.machines.multi; package gregtechmod.common.tileentities.machines.multi;
import gregtechmod.api.enums.GT_Items; import java.lang.ref.WeakReference;
import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.util.GT_Utility;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class GT_MetaTileEntity_FusionInjector extends GT_MetaTileEntity_BasicTank { public class GT_MetaTileEntity_FusionInjector extends GT_MetaTileEntity_BasicTank {
public IGregTechTileEntity mFusionComputer; private WeakReference<IGregTechTileEntity> mFusionComputer;
public GT_MetaTileEntity_FusionInjector(int aID, String mName) { public GT_MetaTileEntity_FusionInjector(int aID, String mName) {
super(aID, mName); super(aID, mName);
@ -41,41 +40,20 @@ public class GT_MetaTileEntity_FusionInjector extends GT_MetaTileEntity_BasicTan
@Override @Override
public void onPostTick() { public void onPostTick() {
if (getBaseMetaTileEntity().isServerSide() && getBaseMetaTileEntity().getTimer()%20==0) { if (getBaseMetaTileEntity().isServerSide()) {
getBaseMetaTileEntity().setActive(mFusionComputer!=null&&mFusionComputer.isActive()); if (mFusionComputer != null && mFusionComputer.get() != null) {
} if (mFusionComputer.get().isInvalidTileEntity()) {
} mFusionComputer.clear();
getBaseMetaTileEntity().setActive(false);
public ItemStack getMaterial() { } else if (getBaseMetaTileEntity().isActive() != mFusionComputer.get().isActive()) {
if (mInventory[getInputSlot()] == null) { getBaseMetaTileEntity().setActive(!getBaseMetaTileEntity().isActive());
ItemStack tStack = GT_Utility.fillFluidContainer(mFluid[0], GT_Items.Cell_Empty.get(1));
if (tStack == null) return null;
tStack.stackSize = mFluid[0].amount / GT_Utility.getFluidForFilledItem(tStack).amount;
return tStack;
}
return mInventory[getInputSlot()];
}
public boolean consumeMaterial(ItemStack aStack) {
if (aStack == null) return false;
if (mFluid[0] == null || !GT_Utility.containsFluid(aStack, mFluid[0]) || GT_Utility.getFluidForFilledItem(aStack).amount * aStack.stackSize > mFluid[0].amount) {
if (mInventory[0] != null && GT_Utility.areStacksEqual(mInventory[0], aStack) && mInventory[0].stackSize >= aStack.stackSize) {
ItemStack tOutputCells = GT_ModHandler.getEmptyCell(GT_ModHandler.getCapsuleCellContainerCount(aStack));
if (tOutputCells != null && tOutputCells.stackSize > 0) {
if (mInventory[1] == null) {
mInventory[1] = tOutputCells;
} else if (GT_Utility.areStacksEqual(mInventory[1], tOutputCells)) {
mInventory[1].stackSize = Math.min(mInventory[1].getMaxStackSize(), mInventory[1].stackSize + tOutputCells.stackSize);
}
} }
getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize);
return true;
} }
} else {
mFluid[0].amount -= (GT_Utility.getFluidForFilledItem(aStack).amount * aStack.stackSize);
return true;
} }
return false; }
public void setComputer(IGregTechTileEntity computer) {
mFusionComputer = new WeakReference<>(computer);
} }
@Override @Override

View file

@ -0,0 +1,52 @@
package gregtechmod.common.tileentities.machines.multi;
import java.lang.ref.WeakReference;
import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.metatileentity.MetaTileEntity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
/**
* @author TheDarkDnKTv
*
*/
public abstract class MTEFusionBus extends MetaTileEntity {
private WeakReference<IGregTechTileEntity> mFusionComputer;
public MTEFusionBus(int aID, String aBasicName) {
super(aID, aBasicName);
}
public MTEFusionBus() {}
@Override public boolean isSimpleMachine() {return false;}
@Override public boolean isAccessAllowed(EntityPlayer aPlayer) {return true;}
@Override public boolean isFacingValid(byte aFacing) {return false;}
@Override public int maxRFStore() {return maxEUStore();}
@Override public int maxSteamStore() {return maxEUStore();}
@Override public void saveNBTData(NBTTagCompound aNBT) {}
@Override public void loadNBTData(NBTTagCompound aNBT) {}
@Override public boolean allowPullStack(int aIndex, byte aSide, ItemStack aStack) { return false; }
@Override public boolean allowPutStack(int aIndex, byte aSide, ItemStack aStack) { return false; }
@Override
public void onPostTick() {
if (getBaseMetaTileEntity().isServerSide()) {
if (mFusionComputer != null && mFusionComputer.get() != null) {
if (mFusionComputer.get().isInvalidTileEntity()) {
mFusionComputer.clear();
getBaseMetaTileEntity().setActive(false);
} else if (getBaseMetaTileEntity().isActive() != mFusionComputer.get().isActive()) {
getBaseMetaTileEntity().setActive(!getBaseMetaTileEntity().isActive());
}
}
}
}
public void setComputer(IGregTechTileEntity computer) {
mFusionComputer = new WeakReference<>(computer);
}
}

View file

@ -158,11 +158,10 @@ public class GT_MachineRecipeLoader implements Runnable
RecipeMaps.CANINNING.factory().EUt(1).duration(100).inputs(new ItemStack(Items.lava_bucket), GT_Items.Cell_Empty.get(1L)).outputs(GT_Items.Cell_Lava.get(1L), new ItemStack(Items.bucket, 1)).buildAndRegister(); RecipeMaps.CANINNING.factory().EUt(1).duration(100).inputs(new ItemStack(Items.lava_bucket), GT_Items.Cell_Empty.get(1L)).outputs(GT_Items.Cell_Lava.get(1L), new ItemStack(Items.bucket, 1)).buildAndRegister();
RecipeMaps.CANINNING.factory().EUt(1).duration(100).inputs(new ItemStack(Items.water_bucket), GT_Items.Cell_Empty.get(1L)).outputs(GT_Items.Cell_Water.get(1L), new ItemStack(Items.bucket, 1)).buildAndRegister(); RecipeMaps.CANINNING.factory().EUt(1).duration(100).inputs(new ItemStack(Items.water_bucket), GT_Items.Cell_Empty.get(1L)).outputs(GT_Items.Cell_Water.get(1L), new ItemStack(Items.bucket, 1)).buildAndRegister();
//TODO!!! RecipeMaps.FUSION_REACTOR.factory().EUt(4096).startEU(40000000).duration(128).inputs(GT_Utility.copy(Materials.Deuterium.mGas, 1000), GT_Utility.copy(Materials.Tritium.mGas, 1000)).output(GT_Utility.copy(Materials.Helium.mPlasma, 1000)).buildAndRegister();
// RecipeMaps.FUSION_REACTOR.factory().EUt(-4096).startEU(40000000).duration(128).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Deuterium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tritium, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1L)).buildAndRegister(); RecipeMaps.FUSION_REACTOR.factory().EUt(2048).startEU(60000000).duration(128).inputs(GT_Utility.copy(Materials.Deuterium.mGas, 1000), GT_Utility.copy(Materials.Helium_3.mGas, 1000)).output(GT_Utility.copy(Materials.Helium.mPlasma, 1000)).buildAndRegister();
// RecipeMaps.FUSION_REACTOR.factory().EUt(-2048).startEU(60000000).duration(128).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Deuterium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium_3, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1L)).buildAndRegister(); RecipeMaps.FUSION_REACTOR.factory().EUt(32768).startEU(150000000).duration(512).inputs(GT_Utility.copy(Materials.Lithium.mFluid, 1000), GT_Utility.copy(Materials.Tungsten.mSolid, 1000)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 1L)).buildAndRegister();
// RecipeMaps.FUSION_REACTOR.factory().EUt(-32768).startEU(150000000).duration(512).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Lithium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tungsten, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 1L)).buildAndRegister(); RecipeMaps.FUSION_REACTOR.factory().EUt(32768).startEU(100000000).duration(512).inputs(GT_Utility.copy(Materials.Beryllium.mSolid, 1000), GT_Utility.copy(Materials.Tungsten.mSolid, 1000)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)).buildAndRegister();
// RecipeMaps.FUSION_REACTOR.factory().EUt(-32768).startEU(100000000).duration(512).inputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Beryllium, 1L), GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tungsten, 1L)).output(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)).buildAndRegister();
RecipeMaps.IMPLOSION_COMPRESSOR.factory().EUt(1).duration(800).setShaped(true).input(GregTech_API.getGregTechMaterial(4, 1)).input(GT_ModHandler.getIC2Item("industrialTnt", 8)).outputs(GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Iridium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L)).buildAndRegister(); RecipeMaps.IMPLOSION_COMPRESSOR.factory().EUt(1).duration(800).setShaped(true).input(GregTech_API.getGregTechMaterial(4, 1)).input(GT_ModHandler.getIC2Item("industrialTnt", 8)).outputs(GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Iridium, 1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L)).buildAndRegister();
RecipeMaps.IMPLOSION_COMPRESSOR.factory().EUt(1).duration(800).setShaped(true).input(GT_Items.IC2_Compressed_Coal_Chunk.get(1)).input(GT_ModHandler.getIC2Item("industrialTnt", 8)).outputs(GT_Items.IC2_Industrial_Diamond.get(1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L)).buildAndRegister(); RecipeMaps.IMPLOSION_COMPRESSOR.factory().EUt(1).duration(800).setShaped(true).input(GT_Items.IC2_Compressed_Coal_Chunk.get(1)).input(GT_ModHandler.getIC2Item("industrialTnt", 8)).outputs(GT_Items.IC2_Industrial_Diamond.get(1L), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 4L)).buildAndRegister();