Finished all multiblocks, Fusion Reactor
This commit is contained in:
parent
d62fee0644
commit
27bbc3f4f2
15 changed files with 419 additions and 279 deletions
|
@ -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 ),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue