aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2022-08-12 12:02:46 +0800
committerGlease <4586901+Glease@users.noreply.github.com>2022-08-12 12:02:46 +0800
commit4328a7a2b2f1c5a9979ba295a22c0358a590914f (patch)
tree77dbb19cc3f6be72473f4c0d179482cedf7a7cfc
parent3097b56456f969ec8b008c32fe9761910f07cf6f (diff)
downloadGT5-Unofficial-4328a7a2b2f1c5a9979ba295a22c0358a590914f.tar.gz
GT5-Unofficial-4328a7a2b2f1c5a9979ba295a22c0358a590914f.tar.bz2
GT5-Unofficial-4328a7a2b2f1c5a9979ba295a22c0358a590914f.zip
partial autoplace integration
-rw-r--r--dependencies.gradle2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java54
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java66
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java44
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java24
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java130
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java115
7 files changed, 392 insertions, 43 deletions
diff --git a/dependencies.gradle b/dependencies.gradle
index 265d368702..4689997e66 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -3,7 +3,7 @@
dependencies {
shadowImplementation('com.github.GTNewHorizons:AVRcore:master-SNAPSHOT')
- compile('com.github.GTNewHorizons:GT5-Unofficial:5.09.40.84:dev')
+ compile('com.github.GTNewHorizons:GT5-Unofficial:5.09.40.89:dev')
compile('com.github.GTNewHorizons:Yamcl:0.5.82:dev')
compile('com.github.GTNewHorizons:NotEnoughItems:2.2.15-GTNH:dev')
compile('com.github.GTNewHorizons:CodeChickenLib:1.1.5.3:dev')
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java
index 16fcf2618c..eac3bb4dd9 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java
@@ -10,11 +10,14 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_Rend
import com.github.technus.tectech.util.CommonValues;
import com.github.technus.tectech.util.TT_Utility;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.util.Vec3Impl;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -22,12 +25,16 @@ import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.IGT_HatchAdder;
import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
@@ -36,6 +43,7 @@ import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStat
import static com.github.technus.tectech.util.CommonValues.MULTI_CHECK_AT;
import static com.github.technus.tectech.util.CommonValues.V;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
import static net.minecraft.util.StatCollector.translateToLocal;
@@ -43,7 +51,7 @@ import static net.minecraft.util.StatCollector.translateToLocal;
/**
* Created by danie_000 on 17.12.2016.
*/
-public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable {
+public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockBase_EM implements ISurvivalConstructable {
//region variables
private final ArrayList<GT_MetaTileEntity_Hatch_Rack> eRacks = new ArrayList<>();
@@ -87,8 +95,11 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB
.addElement('B', ofBlock(sBlockCasingsTT, 1))
.addElement('C', ofBlock(sBlockCasingsTT, 2))
.addElement('D', ofBlock(sBlockCasingsTT, 3))
- .addElement('A', ofHatchAdderOptional(GT_MetaTileEntity_EM_computer::addToMachineList, textureOffset + 1, 1, sBlockCasingsTT, 1))
- .addElement('E', ofHatchAdderOptional(GT_MetaTileEntity_EM_computer::addRackToMachineList, textureOffset + 3, 2, sBlockCasingsTT, 3))
+ .addElement('A', classicHatches(textureOffset + 1, 1, sBlockCasingsTT, 1))
+ .addElement('E', ofChain(
+ RackHatchElement.INSTANCE.newAny(textureOffset + 3, 2),
+ ofBlock(sBlockCasingsTT, 3)
+ ))
.build();
//endregion
@@ -407,6 +418,24 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB
}
@Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ int built;
+ built = survivialBuildPiece("front", stackSize, 1, 2, 0, elementBudget, source, actor, false, true);
+ if (built > 0) return built;
+ built = survivialBuildPiece("cap", stackSize, 1, 2, -1, elementBudget, source, actor, false, true);
+ if (built > 0) return built;
+
+ byte offset = -2;
+ for (int rackSlices = Math.min(stackSize.stackSize, 12); rackSlices > 0; rackSlices--) {
+ built = survivialBuildPiece("slice", stackSize, 1, 2, offset--, elementBudget, source, actor, false, true);
+ if (built > 0) return built;
+ }
+ built = survivialBuildPiece("cap", stackSize, 1, 2, offset--, elementBudget, source, actor, false, true);
+ if (built > 0) return built;
+ return survivialBuildPiece("back", stackSize, 1, 2, offset, elementBudget, source, actor, false, true);
+ }
+
+ @Override
public IStructureDefinition<GT_MetaTileEntity_EM_computer> getStructure_EM() {
return STRUCTURE_DEFINITION;
}
@@ -415,4 +444,23 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB
public String[] getStructureDescription(ItemStack stackSize) {
return description;
}
+
+ private enum RackHatchElement implements IHatchElement<GT_MetaTileEntity_EM_computer> {
+ INSTANCE;
+
+ @Override
+ public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
+ return Collections.singletonList(GT_MetaTileEntity_Hatch_Rack.class);
+ }
+
+ @Override
+ public IGT_HatchAdder<? super GT_MetaTileEntity_EM_computer> adder() {
+ return GT_MetaTileEntity_EM_computer::addRackToMachineList;
+ }
+
+ @Override
+ public long count(GT_MetaTileEntity_EM_computer t) {
+ return t.eRacks.size();
+ }
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java
index 00efac0828..ae4f288e77 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java
@@ -10,16 +10,21 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEnt
import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture;
import com.github.technus.tectech.util.CommonValues;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.IGT_HatchAdder;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
@@ -27,6 +32,9 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
@@ -35,10 +43,10 @@ import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBloc
import static com.github.technus.tectech.util.CommonValues.V;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
-import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static net.minecraft.util.StatCollector.translateToLocal;
-public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable {
+public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockBase_EM implements ISurvivalConstructable {
//region variables
private final ArrayList<GT_MetaTileEntity_Hatch_OutputDataItems> eStacksDataOutputs = new ArrayList<>();
private final ArrayList<IInventory> eDataAccessHatches = new ArrayList<>();
@@ -61,8 +69,15 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB
}))
.addElement('A', ofBlock(sBlockCasingsTT, 1))
.addElement('B', ofBlock(sBlockCasingsTT, 2))
- .addElement('C', ofHatchAdderOptional(GT_MetaTileEntity_EM_dataBank::addClassicToMachineList, textureOffset, 1, sBlockCasingsTT, 0))
- .addElement('D', ofHatchAdderOptional(GT_MetaTileEntity_EM_dataBank::addDataBankHatchToMachineList, textureOffset + 1, 2, sBlockCasingsTT, 1))
+ .addElement('C', classicHatches(textureOffset, 1, sBlockCasingsTT, 0))
+ .addElement('D', buildHatchAdder(GT_MetaTileEntity_EM_dataBank.class)
+ .atLeast(DataBankHatches.OutboundConnector, DataBankHatches.InboundConnector)
+ .casingIndex(textureOffset + 1)
+ .dot(2)
+ .buildAndChain(
+ DataBankHatches.DataStick.newAny(textureOffset + 1, 2),
+ ofBlock(sBlockCasingsTT, 1)
+ ))
.build();
//endregion
@@ -195,6 +210,11 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB
}
@Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ return survivialBuildPiece("main", stackSize, 2, 1, 0, elementBudget, source, actor, false, true);
+ }
+
+ @Override
public IStructureDefinition<GT_MetaTileEntity_EM_dataBank> getStructure_EM() {
return STRUCTURE_DEFINITION;
}
@@ -203,4 +223,42 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB
public String[] getStructureDescription(ItemStack stackSize) {
return description;
}
+
+ private enum DataBankHatches implements IHatchElement<GT_MetaTileEntity_EM_dataBank> {
+ DataStick(GT_MetaTileEntity_Hatch_DataAccess.class) {
+ @Override
+ public long count(GT_MetaTileEntity_EM_dataBank t) {
+ return t.eDataAccessHatches.size();
+ }
+ },
+ OutboundConnector(GT_MetaTileEntity_Hatch_OutputDataItems.class) {
+ @Override
+ public long count(GT_MetaTileEntity_EM_dataBank t) {
+ return t.eStacksDataOutputs.size();
+ }
+ },
+ InboundConnector(GT_MetaTileEntity_Hatch_InputDataItems.class) {
+ @Override
+ public long count(GT_MetaTileEntity_EM_dataBank t) {
+ return t.eDataAccessHatches.size();
+ }
+ };
+
+ private final List<? extends Class<? extends IMetaTileEntity>> mteClasses;
+
+ @SafeVarargs
+ DataBankHatches(Class<? extends IMetaTileEntity>... mteClasses) {
+ this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses));
+ }
+
+ @Override
+ public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
+ return mteClasses;
+ }
+
+ @Override
+ public IGT_HatchAdder<? super GT_MetaTileEntity_EM_dataBank> adder() {
+ return GT_MetaTileEntity_EM_dataBank::addDataBankHatchToMachineList;
+ }
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
index 744d79779f..e95519432c 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
@@ -7,10 +7,13 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEnt
import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture;
import com.github.technus.tectech.util.CommonValues;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -18,10 +21,7 @@ import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
-import gregtech.api.util.GT_LanguageManager;
-import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
-import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.*;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
@@ -32,18 +32,24 @@ import net.minecraft.util.EnumChatFormatting;
import org.apache.commons.lang3.reflect.FieldUtils;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.List;
import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT;
import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_crafting.crafter;
+import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.DynamoMulti;
+import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.EnergyMulti;
import static com.github.technus.tectech.thing.metaTileEntity.multi.em_machine.GT_MetaTileEntity_EM_machine.machine;
import static com.github.technus.tectech.util.CommonValues.V;
import static com.github.technus.tectech.util.CommonValues.VN;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
+import static gregtech.api.enums.GT_HatchElement.*;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
import static net.minecraft.util.StatCollector.translateToLocal;
@@ -52,7 +58,7 @@ import static net.minecraft.util.StatCollector.translateToLocalFormatted;
/**
* Created by danie_000 on 17.12.2016.
*/
-public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable {
+public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockBase_EM implements ISurvivalConstructable {
//region variables
private final ArrayList<GT_MetaTileEntity_Hatch_Holder> eHolders = new ArrayList<>();
private GT_Recipe.GT_Recipe_AssemblyLine tRecipe;
@@ -88,8 +94,8 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
.addElement('A', ofBlock(sBlockCasingsTT, 1))
.addElement('B', ofBlock(sBlockCasingsTT, 2))
.addElement('C', ofBlock(sBlockCasingsTT, 3))
- .addElement('D', ofHatchAdderOptional(GT_MetaTileEntity_EM_research::addClassicToMachineList, textureOffset + 1, 1, sBlockCasingsTT, 1))
- .addElement('E', ofHatchAdder(GT_MetaTileEntity_EM_research::addHolderToMachineList, 3, 2))
+ .addElement('D', classicHatches(textureOffset + 1, 1, sBlockCasingsTT, 1))
+ .addElement('E', HolderHatchElement.INSTANCE.newAny(3, 2))
.build();
//endregion
@@ -584,6 +590,11 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
}
@Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ return survivialBuildPiece("main", stackSize, 1, 3, 4, elementBudget, source, actor, false, true);
+ }
+
+ @Override
public IStructureDefinition<GT_MetaTileEntity_EM_research> getStructure_EM() {
return STRUCTURE_DEFINITION;
}
@@ -592,4 +603,23 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
public String[] getStructureDescription(ItemStack stackSize) {
return description;
}
+
+ private enum HolderHatchElement implements IHatchElement<GT_MetaTileEntity_EM_research> {
+ INSTANCE;
+
+ @Override
+ public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
+ return Collections.singletonList(GT_MetaTileEntity_Hatch_Holder.class);
+ }
+
+ @Override
+ public IGT_HatchAdder<? super GT_MetaTileEntity_EM_research> adder() {
+ return GT_MetaTileEntity_EM_research::addHolderToMachineList;
+ }
+
+ @Override
+ public long count(GT_MetaTileEntity_EM_research t) {
+ return t.eHolders.size();
+ }
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java
index c2fe22e88d..8428856f3f 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java
@@ -7,6 +7,8 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEnt
import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture;
import com.github.technus.tectech.util.CommonValues;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -15,6 +17,7 @@ import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
@@ -23,15 +26,20 @@ import net.minecraft.util.ResourceLocation;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT;
+import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.DynamoMulti;
+import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.EnergyMulti;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
import static gregtech.api.GregTech_API.sBlockCasings1;
+import static gregtech.api.enums.GT_HatchElement.Dynamo;
+import static gregtech.api.enums.GT_HatchElement.Energy;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
import static net.minecraft.util.StatCollector.translateToLocal;
/**
* Created by danie_000 on 17.12.2016.
*/
-public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable {
+public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_MultiblockBase_EM implements ISurvivalConstructable {
//region structure
private static final String[] description = new String[]{
EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":",
@@ -45,10 +53,11 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo
{"111", "111", "111",},
})
.addElement('0', ofBlock(sBlockCasings1, 15))
- .addElement('1', ofChain(
- ofHatchAdder(GT_MetaTileEntity_EM_transformer::addEnergyIOToMachineList, textureOffset, 1),
- onElementPass(t -> t.casingCount++, ofBlock(sBlockCasingsTT, 0))
- ))
+ .addElement('1', buildHatchAdder(GT_MetaTileEntity_EM_transformer.class)
+ .atLeast(Energy, EnergyMulti, Dynamo, DynamoMulti)
+ .casingIndex(textureOffset)
+ .dot(1)
+ .buildAndChain(onElementPass(t -> t.casingCount++, ofBlock(sBlockCasingsTT, 0))))
.build();
private int casingCount = 0;
@@ -173,6 +182,11 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo
}
@Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ return survivialBuildPiece("main", stackSize, 1, 1, 0, elementBudget, source, actor, false, true);
+ }
+
+ @Override
public String[] getStructureDescription(ItemStack stackSize) {
return description;
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java
index c625686793..30ac2fd8f8 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java
@@ -18,40 +18,67 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_Rend
import com.github.technus.tectech.util.CommonValues;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
-import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
+import com.gtnewhorizon.structurelib.StructureLibAPI;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.IStructureElement;
+import com.gtnewhorizon.structurelib.structure.StructureUtility;
+import com.gtnewhorizon.structurelib.util.ItemStackPredicate;
import com.gtnewhorizon.structurelib.util.Vec3Impl;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.metatileentity.implementations.*;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.IGT_HatchAdder;
+import gregtech.common.blocks.GT_Item_Machines;
import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
+import org.apache.commons.lang3.tuple.Pair;
-import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0;
+import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.DynamoMulti;
+import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.EnergyMulti;
+import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.Param;
import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*;
import static com.github.technus.tectech.util.CommonValues.V;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static gregtech.api.enums.GT_HatchElement.*;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
import static java.lang.Math.min;
import static net.minecraft.util.StatCollector.translateToLocal;
-public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable, ITeslaConnectable {
+public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements ISurvivalConstructable, ITeslaConnectable {
//Interface fields
private final Multimap<Integer, ITeslaConnectableSimple> teslaNodeMap = MultimapBuilder.treeKeys().linkedListValues().build();
private final HashSet<ThaumSpark> sparkList = new HashSet<>();
@@ -131,15 +158,59 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
.addElement('A', ofBlock(sBlockCasingsBA0, 6))
.addElement('B', ofBlock(sBlockCasingsBA0, 7))
.addElement('C', ofBlock(sBlockCasingsBA0, 8))
- .addElement('D', defer(t -> ofBlock(sBlockCasingsBA0, t.getCoilWindingMeta())))
- .addElement('E', ofHatchAdderOptional(GT_MetaTileEntity_TM_teslaCoil::addCapacitorToMachineList, textureOffset + 16 + 6, 1, sBlockCasingsBA0, 6))
- .addElement('F', ofHatchAdder(GT_MetaTileEntity_TM_teslaCoil::addFrameToMachineList, 0, 2))
- .build();
+ .addElement('D', ofBlocksTiered(
+ (block, meta) -> block != sBlockCasingsBA0 ? -1 : meta <= 5 ? meta : meta == 9 ? 6 : -1,
+ IntStream.range(0, 6).map(tier -> tier == 5 ? 9 : tier).mapToObj(meta -> Pair.of(sBlockCasingsBA0, meta)).collect(Collectors.toList()),
+ -1,
+ (t, v) -> t.mTier = v,
+ t -> t.mTier))
+ .addElement('E', buildHatchAdder(GT_MetaTileEntity_TM_teslaCoil.class)
+ .atLeast(CapacitorHatchElement.INSTANCE, EnergyMulti, Energy, DynamoMulti, Dynamo, InputHatch, OutputHatch, Param, Maintenance)
+ .dot(1)
+ .casingIndex(textureOffset + 16 +6)
+ .buildAndChain(sBlockCasingsBA0, 6))
+ .addElement('F', new IStructureElement<GT_MetaTileEntity_TM_teslaCoil>() {
+ private IIcon[] mIcons;
+
+ @Override
+ public boolean check(GT_MetaTileEntity_TM_teslaCoil t, World world, int x, int y, int z) {
+ TileEntity tBase = world.getTileEntity(x, y, z);
+ if (tBase instanceof BaseMetaPipeEntity) {
+ BaseMetaPipeEntity tPipeBase = (BaseMetaPipeEntity) tBase;
+ if (tPipeBase.isInvalidTileEntity()) return false;
+ return tPipeBase.getMetaTileEntity() instanceof GT_MetaPipeEntity_Frame;
+ }
+ return false;
+ }
- public int getCoilWindingMeta() {
- Vec3Impl xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 1));
- return this.getBaseMetaTileEntity().getMetaIDOffset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2());
- }
+ @Override
+ public boolean spawnHint(GT_MetaTileEntity_TM_teslaCoil t, World world, int x, int y, int z, ItemStack trigger) {
+ if (mIcons == null) {
+ mIcons = new IIcon[6];
+ Arrays.fill(mIcons, Materials._NULL.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex].getIcon());
+ }
+ StructureLibAPI.hintParticleTinted(world, x, y, z, mIcons, Materials._NULL.mRGBa);
+ return true;
+ }
+
+ @Override
+ public boolean placeBlock(GT_MetaTileEntity_TM_teslaCoil t, World world, int x, int y, int z, ItemStack trigger) {
+ ItemStack tFrameStack = GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1);
+ if (!GT_Utility.isStackValid(tFrameStack) || !(tFrameStack.getItem() instanceof ItemBlock))
+ return false;
+ ItemBlock tFrameStackItem = (ItemBlock) tFrameStack.getItem();
+ return tFrameStackItem.placeBlockAt(tFrameStack, null, world, x, y, z, 6, 0, 0, 0, Items.feather.getDamage(tFrameStack));
+ }
+
+ @Override
+ public PlaceResult survivalPlaceBlock(GT_MetaTileEntity_TM_teslaCoil t, World world, int x, int y, int z, ItemStack trigger, IItemSource source, EntityPlayerMP actor, Consumer<IChatComponent> chatter) {
+ if (check(t, world, x, y, z)) return PlaceResult.SKIP;
+ ItemStack tFrameStack = source.takeOne(s -> GT_Item_Machines.getMetaTileEntity(s) instanceof GT_MetaPipeEntity_Frame, true);
+ if (tFrameStack == null) return PlaceResult.REJECT;
+ return StructureUtility.survivalPlaceBlock(tFrameStack, ItemStackPredicate.NBTMode.IGNORE_KNOWN_INSIGNIFICANT_TAGS, null, false, world, x, y, z, source, actor, chatter);
+ }
+ })
+ .build();
//endregion
//region parameters
@@ -346,22 +417,17 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
@Override
public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) {
for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) {
- if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) {
+ if (isValidMetaTileEntity(cap)) {
cap.getBaseMetaTileEntity().setActive(false);
}
}
eCapacitorHatches.clear();
- Vec3Impl xyzOffsets;
- xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 1));
- mTier = iGregTechTileEntity.getMetaIDOffset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2());
- if (mTier == 9) {
- mTier = 6;
- }//Hacky remap because the ZPM coils were added later
+ mTier = -1;
if (structureCheck_EM("main", 3, 16, 0)) {
for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) {
- if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) {
+ if (isValidMetaTileEntity(cap)) {
cap.getBaseMetaTileEntity().setActive(iGregTechTileEntity.isActive());
}
}
@@ -715,6 +781,11 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
}
@Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ return survivialBuildPiece("main", stackSize, 3, 16, 0, elementBudget, source, actor, false, true);
+ }
+
+ @Override
public String[] getStructureDescription(ItemStack stackSize) {
return description;
}
@@ -812,4 +883,23 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
}
return false;
}
+
+ private enum CapacitorHatchElement implements IHatchElement<GT_MetaTileEntity_TM_teslaCoil> {
+ INSTANCE;
+
+ @Override
+ public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
+ return Collections.singletonList(GT_MetaTileEntity_Hatch_Capacitor.class);
+ }
+
+ @Override
+ public IGT_HatchAdder<? super GT_MetaTileEntity_TM_teslaCoil> adder() {
+ return GT_MetaTileEntity_TM_teslaCoil::addCapacitorToMachineList;
+ }
+
+ @Override
+ public long count(GT_MetaTileEntity_TM_teslaCoil gt_metaTileEntity_tm_teslaCoil) {
+ return gt_metaTileEntity_tm_teslaCoil.eCapacitorHatches.size();
+ }
+ }
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java
index b74ac5023a..33dc1270d3 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java
@@ -16,24 +16,27 @@ import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider;
import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
import com.gtnewhorizon.structurelib.alignment.enumerable.Flip;
import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.IStructureElement;
import com.gtnewhorizon.structurelib.util.Vec3Impl;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.BaseTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.*;
-import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
-import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.*;
import gregtech.common.GT_Pollution;
+import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -43,6 +46,9 @@ import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE;
import static com.github.technus.tectech.loader.TecTechConfig.POWERLESS_MODE;
@@ -50,6 +56,7 @@ import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texture
import static com.github.technus.tectech.util.CommonValues.*;
import static com.github.technus.tectech.util.DoubleCount.div;
import static com.github.technus.tectech.util.TT_Utility.getTier;
+import static gregtech.api.enums.GT_HatchElement.*;
import static java.lang.Math.min;
/**
@@ -226,6 +233,17 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt
getExtendedFacing(), baseMetaTileEntity.getXCoord(), baseMetaTileEntity.getYCoord(),
baseMetaTileEntity.getZCoord(), horizontalOffset, verticalOffset, depthOffset, hintsOnly);
}
+
+ protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, int depthOffset, int elementsBudget, IItemSource source, EntityPlayerMP actor, boolean check) {
+ final IGregTechTileEntity tTile = getBaseMetaTileEntity();
+ return getStructure_EM_Internal().survivalBuild(this, trigger, piece, tTile.getWorld(), getExtendedFacing(), tTile.getXCoord(), tTile.getYCoord(), tTile.getZCoord(), horizontalOffset, verticalOffset, depthOffset, elementsBudget, source, actor, check);
+ }
+
+ protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, int depthOffset, int elementsBudget, IItemSource source, EntityPlayerMP actor, boolean check, boolean checkIfPlaced) {
+ int built = survivialBuildPiece(piece, trigger, horizontalOffset, verticalOffset, depthOffset, elementsBudget, source, actor, check);
+ if (checkIfPlaced && built > 0) checkStructure(true, getBaseMetaTileEntity());
+ return built;
+ }
//endregion
//region METHODS TO OVERRIDE - general functionality, recipe check, output
@@ -2573,4 +2591,95 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt
return false;
}
//endregion
+
+ protected static <T extends GT_MetaTileEntity_MultiblockBase_EM> IStructureElement<T> classicHatches(int casingIndex, int dot, Block casingBlock, int casingMeta) {
+ return GT_HatchElementBuilder.<T>builder()
+ .atLeast(InputBus, InputHatch, OutputHatch, OutputBus, Maintenance, Muffler, HatchElement.EnergyMulti, HatchElement.DynamoMulti, HatchElement.InputData, HatchElement.OutputData, HatchElement.Uncertainty)
+ .casingIndex(casingIndex)
+ .dot(dot)
+ .buildAndChain(casingBlock, casingMeta);
+ }
+
+ protected static <T extends GT_MetaTileEntity_MultiblockBase_EM> IStructureElement<T> allHatches(int casingIndex, int dot, Block casingBlock, int casingMeta) {
+ return GT_HatchElementBuilder.<T>builder()
+ .atLeast(InputBus, InputHatch, OutputHatch, OutputBus, Maintenance, Muffler, HatchElement.EnergyMulti, HatchElement.DynamoMulti, HatchElement.InputData, HatchElement.OutputData, HatchElement.Uncertainty, HatchElement.InputElemental, HatchElement.OutputElemental, HatchElement.OverflowElemental)
+ .casingIndex(casingIndex)
+ .dot(dot)
+ .buildAndChain(casingBlock, casingMeta);
+ }
+
+ public enum HatchElement implements IHatchElement<GT_MetaTileEntity_MultiblockBase_EM> {
+ InputElemental(GT_MetaTileEntity_MultiblockBase_EM::addElementalInputToMachineList, GT_MetaTileEntity_Hatch_InputElemental.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eInputHatches.size();
+ }
+ },
+ OutputElemental(GT_MetaTileEntity_MultiblockBase_EM::addElementalOutputToMachineList, GT_MetaTileEntity_Hatch_OutputElemental.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eOutputHatches.size();
+ }
+ },
+ OverflowElemental(GT_MetaTileEntity_MultiblockBase_EM::addElementalMufflerToMachineList, GT_MetaTileEntity_Hatch_OverflowElemental.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eMufflerHatches.size();
+ }
+ },
+ Param(GT_MetaTileEntity_MultiblockBase_EM::addParametrizerToMachineList, GT_MetaTileEntity_Hatch_Param.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eParamHatches.size();
+ }
+ },
+ Uncertainty(GT_MetaTileEntity_MultiblockBase_EM::addUncertainToMachineList, GT_MetaTileEntity_Hatch_Uncertainty.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eUncertainHatches.size();
+ }
+ },
+ EnergyMulti(GT_MetaTileEntity_MultiblockBase_EM::addEnergyInputToMachineList, GT_MetaTileEntity_Hatch_EnergyMulti.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eEnergyMulti.size();
+ }
+ },
+ DynamoMulti(GT_MetaTileEntity_MultiblockBase_EM::addDynamoToMachineList, GT_MetaTileEntity_Hatch_DynamoMulti.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eDynamoMulti.size();
+ }
+ },
+ InputData(GT_MetaTileEntity_MultiblockBase_EM::addDataConnectorToMachineList, GT_MetaTileEntity_Hatch_InputData.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eInputData.size();
+ }
+ },
+ OutputData(GT_MetaTileEntity_MultiblockBase_EM::addDataConnectorToMachineList, GT_MetaTileEntity_Hatch_OutputData.class) {
+ @Override
+ public long count(GT_MetaTileEntity_MultiblockBase_EM t) {
+ return t.eOutputData.size();
+ }
+ },
+ ;
+ private final List<Class<? extends IMetaTileEntity>> mteClasses;
+ private final IGT_HatchAdder<GT_MetaTileEntity_MultiblockBase_EM> adder;
+
+ @SafeVarargs
+ HatchElement(IGT_HatchAdder<GT_MetaTileEntity_MultiblockBase_EM> adder, Class<? extends IMetaTileEntity>... mteClasses) {
+ this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses));
+ this.adder = adder;
+ }
+
+ @Override
+ public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
+ return mteClasses;
+ }
+
+ public IGT_HatchAdder<? super GT_MetaTileEntity_MultiblockBase_EM> adder() {
+ return adder;
+ }
+ }
}