aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorYang Xizhi <60341015+GlodBlock@users.noreply.github.com>2021-12-25 02:05:52 +0800
committerGitHub <noreply@github.com>2021-12-24 19:05:52 +0100
commit07745f72ffbd2ecd2724549093857851930f9137 (patch)
treebba7741ba05168d82fc426ddc04b861c43ecbb28 /src/main
parent9b7d225b93fb15efc958786fb90c923b20d8752f (diff)
downloadGT5-Unofficial-07745f72ffbd2ecd2724549093857851930f9137.tar.gz
GT5-Unofficial-07745f72ffbd2ecd2724549093857851930f9137.tar.bz2
GT5-Unofficial-07745f72ffbd2ecd2724549093857851930f9137.zip
tt support for pa (#833)
* tt support for pa * remove anti pattern. clear up duplicated code fragments * fix copy pasting error * add vanilla energy hatch back Co-authored-by: Glease <4586901+Glease@users.noreply.github.com>
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java23
-rw-r--r--src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java71
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java34
3 files changed, 121 insertions, 7 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
index 431abe4a3c..85eebe5070 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
@@ -10,6 +10,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.GT_ExoticEnergyInputHelper;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
@@ -55,6 +56,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
public ArrayList<GT_MetaTileEntity_Hatch_Muffler> mMufflerHatches = new ArrayList<>();
public ArrayList<GT_MetaTileEntity_Hatch_Energy> mEnergyHatches = new ArrayList<>();
public ArrayList<GT_MetaTileEntity_Hatch_Maintenance> mMaintenanceHatches = new ArrayList<>();
+ protected final List<GT_MetaTileEntity_Hatch> mExoticEnergyHatches = new ArrayList<>();
public GT_MetaTileEntity_MultiBlockBase(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional, 2);
@@ -885,6 +887,15 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
if (isValidMetaTileEntity(tHatch)) tHatch.updateSlots();
}
+ protected static <T extends GT_MetaTileEntity_Hatch> T identifyHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex, Class<T> clazz) {
+ if (aTileEntity == null) return null;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (!clazz.isInstance(aMetaTileEntity)) return null;
+ T hatch = clazz.cast(aMetaTileEntity);
+ hatch.updateTexture(aBaseCasingIndex);
+ return hatch;
+ }
+
public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
if (aTileEntity == null) return false;
IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
@@ -939,6 +950,18 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
return false;
}
+ public boolean addExoticEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch && GT_ExoticEnergyInputHelper.isExoticEnergyInput(aMetaTileEntity)) {
+ GT_MetaTileEntity_Hatch hatch = (GT_MetaTileEntity_Hatch) aMetaTileEntity;
+ hatch.updateTexture(aBaseCasingIndex);
+ return mExoticEnergyHatches.add(hatch);
+ }
+ return false;
+ }
+
public boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
if (aTileEntity == null) return false;
IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
diff --git a/src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java b/src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java
new file mode 100644
index 0000000000..3de3d42f14
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java
@@ -0,0 +1,71 @@
+package gregtech.api.util;
+
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity;
+
+public class GT_ExoticEnergyInputHelper {
+ /**
+ * The Valid Types of TecTech Hatch List.
+ */
+ private static final List<Class<?>> sExoticEnergyHatchType = new ArrayList<>();
+
+ static {
+ tryRegister("com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti");
+ tryRegister("com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel");
+ }
+
+ public static void register(Class<? extends GT_MetaTileEntity_Hatch> clazz) {
+ if (!GT_MetaTileEntity_Hatch.class.isAssignableFrom(clazz))
+ throw new IllegalArgumentException(clazz.getName() + " is not a subclass of " + GT_MetaTileEntity_Hatch.class.getName());
+ sExoticEnergyHatchType.add(clazz);
+ }
+
+ public static void tryRegister(String className) {
+ Class<?> clazz;
+ try {
+ clazz = Class.forName(className);
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ if (!GT_MetaTileEntity_Hatch.class.isAssignableFrom(clazz))
+ throw new IllegalArgumentException(clazz.getName() + " is not a subclass of " + GT_MetaTileEntity_Hatch.class.getName());
+ sExoticEnergyHatchType.add(clazz);
+ }
+
+ public static boolean drainEnergy(long aEU, Collection<? extends GT_MetaTileEntity_Hatch> hatches) {
+ for (GT_MetaTileEntity_Hatch tHatch : hatches) {
+ long tDrain = Math.min(tHatch.getBaseMetaTileEntity().getStoredEU(), aEU);
+ tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(tDrain, false);
+ aEU -= tDrain;
+ }
+ return aEU <= 0;
+ }
+
+ public static boolean isExoticEnergyInput(IMetaTileEntity aHatch) {
+ for (Class<?> clazz : sExoticEnergyHatchType) {
+ if (clazz.isInstance(aHatch))
+ return true;
+ }
+ return false;
+ }
+
+ public static long getMaxInputVoltageMulti(Collection<? extends GT_MetaTileEntity_Hatch> hatches) {
+ long rVoltage = 0;
+ for (GT_MetaTileEntity_Hatch tHatch : hatches)
+ if (isValidMetaTileEntity(tHatch)) rVoltage += tHatch.getBaseMetaTileEntity().getInputVoltage();
+ return rVoltage;
+ }
+
+ public static long getMaxInputAmpsMulti(Collection<? extends GT_MetaTileEntity_Hatch> hatches) {
+ long rAmp = 0;
+ for (GT_MetaTileEntity_Hatch tHatch : hatches)
+ if (isValidMetaTileEntity(tHatch)) rAmp += tHatch.getBaseMetaTileEntity().getInputAmperage();
+ return rAmp;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
index cd86334bc0..34cef4315c 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
@@ -10,11 +10,9 @@ import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_CubicMultiBlockBase;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.metatileentity.implementations.*;
import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_ExoticEnergyInputHelper;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_ProcessingArray_Manager;
import gregtech.api.util.GT_Recipe;
@@ -31,6 +29,7 @@ import net.minecraftforge.fluids.FluidStack;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
@@ -90,6 +89,11 @@ public class GT_MetaTileEntity_ProcessingArray extends GT_MetaTileEntity_CubicMu
}
@Override
+ public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ return super.addToMachineList(aTileEntity, aBaseCasingIndex) || addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex);
+ }
+
+ @Override
public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
if (aSide == aFacing) {
if (aActive) return new ITexture[]{
@@ -419,12 +423,22 @@ public class GT_MetaTileEntity_ProcessingArray extends GT_MetaTileEntity_CubicMu
return false;
}
+ @Override
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ mExoticEnergyHatches.clear();
+ return super.checkMachine(aBaseMetaTileEntity, aStack);
+ }
+
+ @Override
+ public boolean drainEnergyInput(long aEU) {
+ return GT_ExoticEnergyInputHelper.drainEnergy(aEU, getExoticAndNormalEnergyHatchList());
+ }
@Override
public String[] getInfoData() {
long storedEnergy=0;
long maxEnergy=0;
- for(GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) {
+ for(GT_MetaTileEntity_Hatch tHatch : mExoticEnergyHatches) {
if (isValidMetaTileEntity(tHatch)) {
storedEnergy+=tHatch.getBaseMetaTileEntity().getStoredEU();
maxEnergy+=tHatch.getBaseMetaTileEntity().getEUCapacity();
@@ -441,9 +455,9 @@ public class GT_MetaTileEntity_ProcessingArray extends GT_MetaTileEntity_CubicMu
StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " +
EnumChatFormatting.RED + GT_Utility.formatNumbers(-mEUt) + EnumChatFormatting.RESET + " EU/t",
StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " +
- EnumChatFormatting.YELLOW + GT_Utility.formatNumbers(getMaxInputVoltage()) + EnumChatFormatting.RESET + " EU/t(*2A) " +
+ EnumChatFormatting.YELLOW + GT_Utility.formatNumbers(GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList())) + EnumChatFormatting.RESET + " EU/t(*" + GT_ExoticEnergyInputHelper.getMaxInputAmpsMulti(getExoticAndNormalEnergyHatchList()) + "A) " +
StatCollector.translateToLocal("GT5U.machines.tier") + ": " +
- EnumChatFormatting.YELLOW + VN[GT_Utility.getTier(getMaxInputVoltage())] + EnumChatFormatting.RESET,
+ EnumChatFormatting.YELLOW + VN[GT_Utility.getTier(GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList()))] + EnumChatFormatting.RESET,
StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " +
EnumChatFormatting.RED + (getIdealStatus() - getRepairStatus()) + EnumChatFormatting.RESET + " " +
StatCollector.translateToLocal("GT5U.multiblock.efficiency") + ": " +
@@ -457,4 +471,10 @@ public class GT_MetaTileEntity_ProcessingArray extends GT_MetaTileEntity_CubicMu
};
}
+ public List<GT_MetaTileEntity_Hatch> getExoticAndNormalEnergyHatchList() {
+ List<GT_MetaTileEntity_Hatch> tHatches = new ArrayList<>();
+ tHatches.addAll(mExoticEnergyHatches);
+ tHatches.addAll(mEnergyHatches);
+ return tHatches;
+ }
}