aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2022-08-19 20:24:45 +0800
committerGitHub <noreply@github.com>2022-08-19 14:24:45 +0200
commit27528655ee23e1ac615af90d60babb62d49f794d (patch)
treef9715e96ea1e2dd5fb640917910161eb6577d66e /src
parent7597429b5f2bc30122c29028de0f95ea4fe47eaa (diff)
downloadGT5-Unofficial-27528655ee23e1ac615af90d60babb62d49f794d.tar.gz
GT5-Unofficial-27528655ee23e1ac615af90d60babb62d49f794d.tar.bz2
GT5-Unofficial-27528655ee23e1ac615af90d60babb62d49f794d.zip
partial autoplace integration (#182)
* partial autoplace integration * fix crashes if gt++ not present * fix drawText now being an instance method Co-authored-by: Martin Robertz <dream-master@gmx.net> Former-commit-id: 838a1fb2da6699820c939af733732a6276f26c50
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java43
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java11
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java38
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java29
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java185
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java76
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java30
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java53
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java29
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java7
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java19
-rw-r--r--src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/CoilAdder.java70
-rw-r--r--src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/StructureDefinitions.java52
13 files changed, 361 insertions, 281 deletions
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java
index db331896ca..a84ff69ad7 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java
@@ -27,6 +27,8 @@ import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.Circ
import com.github.bartimaeusnek.bartworks.util.BWRecipes;
import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference;
import com.github.bartimaeusnek.bartworks.util.BW_Util;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
@@ -43,6 +45,7 @@ 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 net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.StatCollector;
@@ -54,10 +57,12 @@ import java.util.HashSet;
import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS;
import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTieredMixed;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static gregtech.api.enums.GT_HatchElement.*;
import static gregtech.api.enums.Textures.BlockIcons.*;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
-public class GT_TileEntity_CircuitAssemblyLine extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_TileEntity_CircuitAssemblyLine> {
+public class GT_TileEntity_CircuitAssemblyLine extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_TileEntity_CircuitAssemblyLine> implements ISurvivalConstructable {
private static final int CASING_INDEX = 16;
@@ -75,21 +80,17 @@ public class GT_TileEntity_CircuitAssemblyLine extends GT_MetaTileEntity_Enhance
{"g", "l", "g"},
{"b", "I", "b"},
}))
- .addElement('G', ofChain(
- ofHatchAdder(GT_TileEntity_CircuitAssemblyLine::addEnergyInputToMachineList, CASING_INDEX, 1), //grate machine casings
- ofBlock(GregTech_API.sBlockCasings3, 10)))
+ .addElement('G', buildHatchAdder(GT_TileEntity_CircuitAssemblyLine.class)
+ .atLeast(Energy).casingIndex(CASING_INDEX).dot(1).buildAndChain(GregTech_API.sBlockCasings3, 10))
.addElement('g', ofGlassTieredMixed((byte)4, (byte)127, 5))
.addElement('l', ofBlock(GregTech_API.sBlockCasings2, 5)) //assembling line casings
- .addElement('b', ofChain(
- ofHatchAdder(GT_TileEntity_CircuitAssemblyLine::addMaintenanceToMachineList, CASING_INDEX, 2),
- ofHatchAdder(GT_TileEntity_CircuitAssemblyLine::addInputHatchToMachineList, CASING_INDEX, 2),
- ofBlock(GregTech_API.sBlockCasings2, 0)
- ))
- .addElement('i', ofHatchAdder(GT_TileEntity_CircuitAssemblyLine::addInputToMachineList, CASING_INDEX, 3))
- .addElement('I', ofChain(
- ofHatchAdder(GT_TileEntity_CircuitAssemblyLine::addInputToMachineList, CASING_INDEX, 4),
- ofHatchAdder(GT_TileEntity_CircuitAssemblyLine::addOutputToMachineList, CASING_INDEX, 4)
- ))
+ .addElement('b', buildHatchAdder(GT_TileEntity_CircuitAssemblyLine.class)
+ .atLeast(InputHatch, Maintenance).casingIndex(CASING_INDEX).dot(2).buildAndChain(GregTech_API.sBlockCasings2, 0)
+ )
+ .addElement('i', InputBus.newAny(CASING_INDEX, 3))
+ .addElement('I', buildHatchAdder(GT_TileEntity_CircuitAssemblyLine.class)
+ .atLeast(InputHatch, InputBus, OutputBus).casingIndex(CASING_INDEX).dot(2).buildAndChain(GregTech_API.sBlockCasings2, 0)
+ )
.build();
@Override
@@ -377,6 +378,20 @@ public class GT_TileEntity_CircuitAssemblyLine extends GT_MetaTileEntity_Enhance
for(int i = 1; i < tLength; ++i) {
this.buildPiece(STRUCTURE_PIECE_NEXT, stackSize, hintsOnly, -i, 0, 0);
}
+ }
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ if (mMachine) return -1;
+ int built;
+ built = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 0, 0, 0, elementBudget, source, actor, false, true);
+ if (built >= 0) return built;
+ int tLength = Math.min(stackSize.stackSize + 1, 7);
+
+ for (int i = 1; i < tLength; ++i) {
+ built = survivialBuildPiece(STRUCTURE_PIECE_NEXT, stackSize, -i, 0, 0, elementBudget, source, actor, false, true);
+ if (built >= 0) return built;
+ }
+ return -1;
}
}
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java
index 67dfc7de26..8df3503dd0 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java
@@ -29,6 +29,8 @@ import com.github.bartimaeusnek.bartworks.server.container.BW_Container_Windmill
import com.github.bartimaeusnek.bartworks.util.BW_Util;
import com.gtnewhorizon.structurelib.StructureLibAPI;
import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import cpw.mods.fml.common.FMLCommonHandler;
@@ -51,6 +53,7 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -69,7 +72,7 @@ import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
import static gregtech.api.enums.GT_Values.V;
-public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_TileEntity_Windmill> {
+public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_TileEntity_Windmill> implements ISurvivalConstructable {
private static final IIcon[] iIcons = new IIcon[2];
private static final IIconContainer[] iIconContainers = new IIconContainer[2];
@@ -661,4 +664,10 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock
public void construct(ItemStack itemStack, boolean b) {
buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 3, 11, 0);
}
+
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ if (mMachine) return -1;
+ return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 11, 0, elementBudget, source, actor, false, true);
+ }
}
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java
index 3bebfa21e1..ccc4fddfb5 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java
@@ -25,11 +25,12 @@ package com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega;
import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass;
import com.github.bartimaeusnek.bartworks.API.LoaderReference;
import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler;
-import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference;
import com.github.bartimaeusnek.bartworks.util.BW_Util;
import com.github.bartimaeusnek.bartworks.util.Pair;
import com.github.bartimaeusnek.crossmod.tectech.helper.TecTechUtils;
import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import cpw.mods.fml.common.Optional;
@@ -46,6 +47,7 @@ import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -60,22 +62,35 @@ import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTI
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput;
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
+import static gregtech.api.enums.GT_HatchElement.*;
+import static gregtech.api.enums.GT_HatchElement.Maintenance;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.Textures.BlockIcons.*;
import static gregtech.api.util.GT_StructureUtility.*;
-import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
@Optional.Interface(iface = "com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti", modid = "tectech", striprefs = true)
-public class GT_TileEntity_MegaBlastFurnace extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaBlastFurnace> {
+public class GT_TileEntity_MegaBlastFurnace extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaBlastFurnace> implements ISurvivalConstructable {
private static final int CASING_INDEX = 11;
private static final IStructureDefinition<GT_TileEntity_MegaBlastFurnace> STRUCTURE_DEFINITION = StructureDefinition.<GT_TileEntity_MegaBlastFurnace>builder()
.addShape("main", createShape())
- .addElement('t', ofHatchAdderOptional(GT_TileEntity_MegaBlastFurnace::addOutputHatchToTopList, CASING_INDEX, 1, GregTech_API.sBlockCasings1, CASING_INDEX))
- .addElement('m', ofHatchAdder(GT_TileEntity_MegaBlastFurnace::addMufflerToMachineList, CASING_INDEX, 2))
+ .addElement('=', StructureElementAirNoHint.getInstance())
+ .addElement('t',
+ buildHatchAdder(GT_TileEntity_MegaBlastFurnace.class)
+ .atLeast(OutputHatch.withAdder(GT_TileEntity_MegaBlastFurnace::addOutputHatchToTopList).withCount(t -> t.mPollutionOutputHatches.size()))
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(GregTech_API.sBlockCasings1, CASING_INDEX)
+ )
+ .addElement('m', Muffler.newAny(CASING_INDEX, 2))
.addElement('C', ofCoil(GT_TileEntity_MegaBlastFurnace::setCoilLevel, GT_TileEntity_MegaBlastFurnace::getCoilLevel))
.addElement('g', BorosilicateGlass.ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glasTier = t, te -> te.glasTier))
- .addElement('b', ofHatchAdderOptional(GT_TileEntity_MegaBlastFurnace::addBottomHatch, CASING_INDEX, 3, GregTech_API.sBlockCasings1, CASING_INDEX))
+ .addElement('b', buildHatchAdder(GT_TileEntity_MegaBlastFurnace.class)
+ .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, TTEnabledEnergyHatchElement.INSTANCE)
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(GregTech_API.sBlockCasings1, CASING_INDEX)
+ )
.build();
private static String[][] createShape() {
@@ -93,7 +108,7 @@ public class GT_TileEntity_MegaBlastFurnace extends GT_TileEntity_MegaMultiBlock
raw[1] = new String[15];
String allGlass = "ggggggggggggggg";
String allCoil = "gCCCCCCCCCCCCCg";
- String middleLine = "gC-----------Cg";
+ String middleLine = "gC===========Cg";
raw[1][0] = allGlass;
raw[1][1] = allCoil;
raw[1][13] = allCoil;
@@ -380,6 +395,15 @@ public class GT_TileEntity_MegaBlastFurnace extends GT_TileEntity_MegaMultiBlock
buildPiece("main", stackSize, hintsOnly, 7, 17, 0);
}
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ if (mMachine) return -1;
+ int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);
+ glasTier = 0;
+ setCoilLevel(HeatingCoilLevel.None);
+ return survivialBuildPiece("main", stackSize, 7, 17, 0, realBudget, source, actor, false, true);
+ }
+
public void setCoilLevel(HeatingCoilLevel aCoilLevel) {
mCoilLevel = aCoilLevel;
}
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java
index dcb1c3fc9d..ba8a34ae72 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java
@@ -28,6 +28,8 @@ import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler;
import com.github.bartimaeusnek.bartworks.util.BW_Util;
import com.github.bartimaeusnek.bartworks.util.Pair;
import com.github.bartimaeusnek.crossmod.tectech.helper.TecTechUtils;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import cpw.mods.fml.common.Optional;
@@ -42,6 +44,7 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -55,13 +58,15 @@ import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.ha
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.enums.GT_HatchElement.*;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.Textures.BlockIcons.*;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
@Optional.Interface(iface = "com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti", modid = "tectech", striprefs = true)
-public class GT_TileEntity_MegaChemicalReactor extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaChemicalReactor> {
+public class GT_TileEntity_MegaChemicalReactor extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaChemicalReactor> implements ISurvivalConstructable {
private byte glasTier;
@@ -187,7 +192,13 @@ public class GT_TileEntity_MegaChemicalReactor extends GT_TileEntity_MegaMultiBl
buildPiece(STRUCTURE_PIECE_MAIN,aStack,aHintsOnly,2,2,0);
}
- // -------------- TEC TECH COMPAT ----------------
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ if (mMachine) return -1;
+ int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);
+ return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 0, realBudget, source, actor, false, true);
+ }
+// -------------- TEC TECH COMPAT ----------------
@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
@@ -230,13 +241,17 @@ public class GT_TileEntity_MegaChemicalReactor extends GT_TileEntity_MegaMultiBl
}))
.addElement('p', ofBlock(GregTech_API.sBlockCasings8, 1))
.addElement('t', ofBlock(GregTech_API.sBlockCasings8, 0))
- .addElement('d', ofChain(
- ofHatchAdder(GT_TileEntity_MegaChemicalReactor::addInputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaChemicalReactor::addOutputToMachineList, CASING_INDEX, 1),
+ .addElement('d', buildHatchAdder(GT_TileEntity_MegaChemicalReactor.class)
+ .atLeast(InputBus, InputHatch, OutputBus, OutputHatch)
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(GregTech_API.sBlockCasings8, 0)
+ )
+ .addElement('r', Maintenance.newAny(CASING_INDEX, 2))
+ .addElement('e', ofChain(
+ TTEnabledEnergyHatchElement.INSTANCE.newAny(CASING_INDEX, 3),
ofBlock(GregTech_API.sBlockCasings8, 0)
))
- .addElement('r', ofHatchAdder(GT_TileEntity_MegaChemicalReactor::addMaintenanceToMachineList, CASING_INDEX, 2))
- .addElement('e', ofHatchAdderOptional(GT_TileEntity_MegaChemicalReactor::addEnergyInputToMachineList, CASING_INDEX, 3, GregTech_API.sBlockCasings8, 0))
.addElement('c', ofBlock(GregTech_API.sBlockCasings4, 7))
.addElement('g', BorosilicateGlass.ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glasTier = t, te -> te.glasTier))
.build();
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java
index 4ad99f1626..2415f4c9b4 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java
@@ -26,15 +26,14 @@ import com.github.bartimaeusnek.bartworks.API.LoaderReference;
import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler;
import com.github.bartimaeusnek.bartworks.util.*;
import com.github.bartimaeusnek.crossmod.tectech.helper.TecTechUtils;
-import com.gtnewhorizon.structurelib.StructureLibAPI;
-import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
-import com.gtnewhorizon.structurelib.structure.IStructureElement;
-import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.*;
import cpw.mods.fml.common.Optional;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Textures;
import gregtech.api.gui.GT_GUIContainer_MultiMachine;
+import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -43,10 +42,10 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
-import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import java.util.ArrayList;
@@ -56,94 +55,90 @@ import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTI
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput;
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static gregtech.api.enums.GT_HatchElement.*;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.Textures.BlockIcons.*;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
@Optional.Interface(iface = "com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti", modid = "tectech", striprefs = true)
-public class GT_TileEntity_MegaDistillTower extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaDistillTower> {
+public class GT_TileEntity_MegaDistillTower extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaDistillTower> implements ISurvivalConstructable {
protected static final int CASING_INDEX = 49;
protected static final String STRUCTURE_PIECE_BASE = "base";
protected static final String STRUCTURE_PIECE_LAYER = "layer";
- private static final IStructureDefinition<GT_TileEntity_MegaDistillTower> STRUCTURE_DEFINITION = StructureDefinition.<GT_TileEntity_MegaDistillTower>builder()
+ protected static final String STRUCTURE_PIECE_TOP_HINT = "top";
+ private static final IStructureDefinition<GT_TileEntity_MegaDistillTower> STRUCTURE_DEFINITION;
+
+ static {
+ IHatchElement<GT_TileEntity_MegaDistillTower> layeredOutputHatch = OutputHatch
+ .withCount(GT_TileEntity_MegaDistillTower::getCurrentLayerOutputHatchCount)
+ .withAdder(GT_TileEntity_MegaDistillTower::addLayerOutputHatch);
+ STRUCTURE_DEFINITION = StructureDefinition.<GT_TileEntity_MegaDistillTower>builder()
.addShape(STRUCTURE_PIECE_BASE, transpose(new String[][]{
- {"bbbbbbb~bbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb"},
+ {"bbbbbbb~bbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb"},
}))
.addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][]{
- {"lllllllllllllll", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lllllllllllllll"},
- {"lllllllllllllll", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "lllllllllllllll"},
- {"lllllllllllllll", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "lllllllllllllll"},
- {"lllllllllllllll", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "lllllllllllllll"},
- {"lllllllllllllll", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "l-------------l", "lllllllllllllll"},
+ {"lllllllllllllll", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
}))
- .addElement('b', ofChain(
- ofHatchAdder(GT_TileEntity_MegaDistillTower::addEnergyInputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaDistillTower::addOutputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaDistillTower::addInputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaDistillTower::addMaintenanceToMachineList, CASING_INDEX, 1),
- onElementPass(GT_TileEntity_MegaDistillTower::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1))
- ))
- .addElement('l', ofChain(
- ofHatchAdder(GT_TileEntity_MegaDistillTower::addEnergyInputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaDistillTower::addLayerOutputHatch, CASING_INDEX, 2),
- ofHatchAdder(GT_TileEntity_MegaDistillTower::addMaintenanceToMachineList, CASING_INDEX, 1),
- onElementPass(GT_TileEntity_MegaDistillTower::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1))
- ))
- // this one is too complex and cannot be expressed with a combination of existing IStructureElement
- .addElement('c', new IStructureElement<GT_TileEntity_MegaDistillTower>() {
- @Override
- public boolean check(GT_TileEntity_MegaDistillTower t, World world, int x, int y, int z) {
- if (world.isAirBlock(x, y, z)) {
- if (t.mTopState < 1) {
- t.mTopState = 0;
- return true;
- }
- // definitely top - cannot be air
- return false;
- }
- // from here on we must be looking at a top layer, since it's not air
- if (t.mTopState == 0)
- // must be air but failed, so no
- return false;
- t.mTopState = 1;
- // hatch adder
- TileEntity tileEntity = world.getTileEntity(x, y, z);
- if (tileEntity instanceof IGregTechTileEntity) {
- IGregTechTileEntity entity = (IGregTechTileEntity) tileEntity;
- if (t.addLayerOutputHatch(entity, CASING_INDEX)) {
- t.onTopLayerFound(false);
- return true;
- }
- }
- // block adder
- if(world.getBlock(x, y, z) == GregTech_API.sBlockCasings4 && world.getBlockMetadata(x, y, z) == 1) {
- t.onTopLayerFound(true);
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public boolean spawnHint(GT_TileEntity_MegaDistillTower t, World world, int x, int y, int z, ItemStack trigger) {
- if (trigger.stackSize == 1)
- StructureLibAPI.hintParticle(world, x, y, z, GregTech_API.sBlockCasings4, 1);
- return true;
- }
-
- @Override
- public boolean placeBlock(GT_TileEntity_MegaDistillTower t, World world, int x, int y, int z, ItemStack trigger) {
- if (trigger.stackSize == 1) {
- world.setBlock(x, y, z, GregTech_API.sBlockCasings4, 1, 3);
- return true;
- }
- world.setBlockToAir(x, y, z);
- return false;
- }
- }
- )
+ .addShape(STRUCTURE_PIECE_TOP_HINT, transpose(new String[][]{
+ {"lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
+ {"lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "l=============l", "lllllllllllllll"},
+ }))
+ .addElement('=', StructureElementAirNoHint.getInstance())
+ .addElement('b', buildHatchAdder(GT_TileEntity_MegaDistillTower.class)
+ .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, TTEnabledEnergyHatchElement.INSTANCE)
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(onElementPass(GT_TileEntity_MegaDistillTower::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1)))
+ )
+ .addElement('l', buildHatchAdder(GT_TileEntity_MegaDistillTower.class)
+ .atLeast(layeredOutputHatch, Maintenance, TTEnabledEnergyHatchElement.INSTANCE)
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(onElementPass(GT_TileEntity_MegaDistillTower::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1)))
+ )
+ .addElement('c', (IStructureElementCheckOnly<GT_TileEntity_MegaDistillTower>) (t, world, x, y, z) -> {
+ if (world.isAirBlock(x, y, z)) {
+ if (t.mTopState < 1) {
+ t.mTopState = 0;
+ return true;
+ }
+ // definitely top - cannot be air
+ return false;
+ }
+ // from here on we must be looking at a top layer, since it's not air
+ if (t.mTopState == 0)
+ // must be air but failed, so no
+ return false;
+ t.mTopState = 1;
+ // hatch adder
+ TileEntity tileEntity = world.getTileEntity(x, y, z);
+ if (tileEntity instanceof IGregTechTileEntity) {
+ IGregTechTileEntity entity = (IGregTechTileEntity) tileEntity;
+ if (t.addLayerOutputHatch(entity, CASING_INDEX)) {
+ t.onTopLayerFound(false);
+ return true;
+ }
+ }
+ // block adder
+ if (world.getBlock(x, y, z) == GregTech_API.sBlockCasings4 && world.getBlockMetadata(x, y, z) == 1) {
+ t.onTopLayerFound(true);
+ return true;
+ } else {
+ return false;
+ }
+ })
.build();
+ }
+
protected final List<List<GT_MetaTileEntity_Hatch_Output>> mOutputHatchesByLayer = new ArrayList<>();
protected int mHeight;
protected int mCasing;
@@ -169,6 +164,10 @@ public class GT_TileEntity_MegaDistillTower extends GT_TileEntity_MegaMultiBlock
mCasing++;
}
+ protected int getCurrentLayerOutputHatchCount() {
+ return mOutputHatchesByLayer.size() < mHeight ? 0 : mOutputHatchesByLayer.get(mHeight - 1).size();
+ }
+
protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
if (aTileEntity == null || aTileEntity.isDead() || !(aTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Hatch_Output))
return false;
@@ -228,7 +227,7 @@ public class GT_TileEntity_MegaDistillTower extends GT_TileEntity_MegaMultiBlock
.addOutputBus("Any bottom layer casing")
.addOutputHatch("2-11x Output Hatches (One per Output Layer except bottom layer)")
.addStructureInfo("An \"Output Layer\" consists of 5 layers!")
- .addStructureHint("This Mega Multiblock is too big to have its structure hologram displayed fully.")
+ .addStructureHint("The interior of this Mega Multiblock's hologram is empty, it should be all air.")
.toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS);
return tt;
}
@@ -256,7 +255,7 @@ public class GT_TileEntity_MegaDistillTower extends GT_TileEntity_MegaMultiBlock
// check each layer
while (mHeight < 12 && checkPiece(STRUCTURE_PIECE_LAYER, 7, mHeight * 5, 0) && !mTopLayerFound) {
- if (mOutputHatchesByLayer.get(mHeight - 1).isEmpty())
+ if (mOutputHatchesByLayer.size() < mHeight || mOutputHatchesByLayer.get(mHeight - 1).isEmpty())
// layer without output hatch
return false;
mTopState = -1;
@@ -270,7 +269,29 @@ public class GT_TileEntity_MegaDistillTower extends GT_TileEntity_MegaMultiBlock
@Override
public void construct(ItemStack stackSize, boolean hintsOnly) {
- // no op, to big to be displayed
+ buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0);
+ int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height
+ for (int i = 1; i < tTotalHeight - 1; i++) {
+ buildPiece(STRUCTURE_PIECE_LAYER, stackSize, hintsOnly, 1, i, 0);
+ }
+ buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 1, tTotalHeight - 1, 0);
+ }
+
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ if (mMachine) return -1;
+ int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);
+ mHeight = 0;
+ int built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 1, 0, 0, realBudget, source, actor, false, true);
+ if (built >= 0) return built;
+ int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height
+ for (int i = 1; i < tTotalHeight - 1; i++) {
+ mHeight = i;
+ built = survivialBuildPiece(STRUCTURE_PIECE_LAYER, stackSize, 1, i, 0, realBudget, source, actor, false, true);
+ if (built >= 0) return built;
+ }
+ mHeight = tTotalHeight;
+ return survivialBuildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, 1, tTotalHeight - 1, 0, realBudget, source, actor, false, true);
}
@Override
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java
index 1c2cf770e8..4dd55c15f6 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java
@@ -7,20 +7,33 @@ import com.github.bartimaeusnek.bartworks.util.MegaUtils;
import com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti;
import com.github.bartimaeusnek.crossmod.tectech.helper.TecTechUtils;
import com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered.LowPowerLaser;
+import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti;
+import com.google.common.collect.ImmutableList;
+import com.gtnewhorizon.structurelib.StructureLibAPI;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
+import com.gtnewhorizon.structurelib.structure.IStructureElement;
import cpw.mods.fml.common.Optional;
+import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.*;
import gregtech.api.util.GT_Utility;
+import gregtech.api.util.IGT_HatchAdder;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.function.Consumer;
+import static gregtech.api.enums.GT_HatchElement.Energy;
import static gregtech.api.enums.GT_Values.V;
@Optional.Interface(iface = "com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti", modid = "tectech", striprefs = true)
@@ -293,4 +306,67 @@ public abstract class GT_TileEntity_MegaMultiBlockBase<T extends GT_TileEntity_M
return 10000;
}
+ protected enum TTEnabledEnergyHatchElement implements IHatchElement<GT_TileEntity_MegaMultiBlockBase<?>> {
+ INSTANCE;
+
+ private static final List<? extends Class<? extends IMetaTileEntity>> mteClasses;
+
+ static {
+ ImmutableList.Builder<Class<? extends IMetaTileEntity>> builder = ImmutableList.<Class<? extends IMetaTileEntity>>builder()
+ .addAll(Energy.mteClasses());
+ if (LoaderReference.tectech)
+ builder.add(GT_MetaTileEntity_Hatch_EnergyMulti.class);
+ mteClasses = builder.build();
+ }
+
+ @Override
+ public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
+ return mteClasses;
+ }
+
+ @Override
+ public IGT_HatchAdder<? super GT_TileEntity_MegaMultiBlockBase<?>> adder() {
+ return GT_TileEntity_MegaMultiBlockBase::addEnergyInputToMachineList;
+ }
+
+ @Override
+ public long count(GT_TileEntity_MegaMultiBlockBase<?> t) {
+ return t.mEnergyHatches.size() + t.TTTunnels.size() + t.TTMultiAmp.size();
+ }
+ }
+
+ protected static class StructureElementAirNoHint<T> implements IStructureElement<T> {
+ private static final StructureElementAirNoHint<?> INSTANCE = new StructureElementAirNoHint<>();
+ @SuppressWarnings("unchecked")
+ public static <T> IStructureElement<T> getInstance() {
+ return (IStructureElement<T>) INSTANCE;
+ }
+ private StructureElementAirNoHint() {}
+ @Override
+ public boolean check(T o, World world, int x, int y, int z) {
+ return world.isAirBlock(x, y, z);
+ }
+
+ @Override
+ public boolean spawnHint(T o, World world, int x, int y, int z, ItemStack trigger) {
+ if (world.blockExists(x, y, z) && ! world.isAirBlock(x, y, z))
+ // hint if this is obstructed. in case *someone* ever finish the transparent rendering
+ StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), StructureLibAPI.HINT_BLOCK_META_AIR);
+ return true;
+ }
+
+ @Override
+ public boolean placeBlock(T o, World world, int x, int y, int z, ItemStack trigger) {
+ world.setBlockToAir(x, y, z);
+ return true;
+ }
+
+ @Override
+ public PlaceResult survivalPlaceBlock(T o, World world, int x, int y, int z, ItemStack trigger, IItemSource s, EntityPlayerMP actor, Consumer<IChatComponent> chatter) {
+ if (check(o, world, x, y, z)) return PlaceResult.SKIP;
+ if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, actor)) return PlaceResult.REJECT;
+ world.setBlock(x, y, z, Blocks.air, 0, 2);
+ return PlaceResult.ACCEPT;
+ }
+ }
}
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java
index 9b75d55332..f0885a48f6 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java
@@ -28,6 +28,8 @@ import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler;
import com.github.bartimaeusnek.bartworks.util.BW_Util;
import com.github.bartimaeusnek.bartworks.util.Pair;
import com.github.bartimaeusnek.crossmod.tectech.helper.TecTechUtils;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import cpw.mods.fml.common.Optional;
@@ -45,6 +47,7 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -57,12 +60,14 @@ import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTI
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput;
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static gregtech.api.enums.GT_HatchElement.InputHatch;
+import static gregtech.api.enums.GT_HatchElement.Maintenance;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.Textures.BlockIcons.*;
import static gregtech.api.util.GT_StructureUtility.*;
@Optional.Interface(iface = "com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti", modid = "tectech", striprefs = true)
-public class GT_TileEntity_MegaOilCracker extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaOilCracker> {
+public class GT_TileEntity_MegaOilCracker extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaOilCracker> implements ISurvivalConstructable {
private static final int CASING_INDEX = 49;
private static final String STRUCTURE_PIECE_MAIN = "main";
private static final IStructureDefinition<GT_TileEntity_MegaOilCracker> STRUCTURE_DEFINITION = StructureDefinition.<GT_TileEntity_MegaOilCracker>builder()
@@ -78,20 +83,19 @@ public class GT_TileEntity_MegaOilCracker extends GT_TileEntity_MegaMultiBlockBa
}))
.addElement('c', ofCoil(GT_TileEntity_MegaOilCracker::setCoilLevel, GT_TileEntity_MegaOilCracker::getCoilLevel))
.addElement('p', ofBlock(GregTech_API.sBlockCasings4, 1))
- .addElement('l', ofChain(
+ .addElement('l', ofChain( // TODO figure out what to do with this
ofHatchAdder(GT_TileEntity_MegaOilCracker::addLeftHatchToMachineList, CASING_INDEX, 2)
))
.addElement('r', ofChain(
ofHatchAdder(GT_TileEntity_MegaOilCracker::addRightHatchToMachineList, CASING_INDEX, 3)
))
- .addElement('m', ofChain(
- ofHatchAdder(GT_TileEntity_MegaOilCracker::addEnergyInputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaOilCracker::addMaintenanceToMachineList, CASING_INDEX, 1),
- ofBlock(GregTech_API.sBlockCasings4, 1)
- ))
- .addElement('M', ofChain(
- ofHatchAdder(GT_TileEntity_MegaOilCracker::addMiddleInputToMachineList, CASING_INDEX, 4)
- ))
+ .addElement('m', buildHatchAdder(GT_TileEntity_MegaOilCracker.class)
+ .atLeast(TTEnabledEnergyHatchElement.INSTANCE, Maintenance)
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(GregTech_API.sBlockCasings4, 1)
+ )
+ .addElement('M', InputHatch.withAdder(GT_TileEntity_MegaOilCracker::addMiddleInputToMachineList).newAny(CASING_INDEX, 4))
.addElement('g', BorosilicateGlass.ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glasTier = t, te -> te.glasTier))
.build();
private byte glasTier;
@@ -242,6 +246,12 @@ public class GT_TileEntity_MegaOilCracker extends GT_TileEntity_MegaMultiBlockBa
buildPiece(STRUCTURE_PIECE_MAIN,aStack,aHintsOnly,6,6,0);
}
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ if (mMachine) return -1;
+ int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);
+ return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 6, 6, 0, realBudget, source, actor, false, true);
+ }
// -------------- TEC TECH COMPAT ----------------
@Override
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java
index 2353fc2a4f..451d698234 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java
@@ -27,6 +27,8 @@ import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler;
import com.github.bartimaeusnek.bartworks.util.BW_Util;
import com.github.bartimaeusnek.bartworks.util.Pair;
import com.github.bartimaeusnek.crossmod.tectech.helper.TecTechUtils;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import cpw.mods.fml.common.Optional;
@@ -39,6 +41,7 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -49,12 +52,13 @@ import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTI
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput;
import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static gregtech.api.enums.GT_HatchElement.*;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.Textures.BlockIcons.*;
import static gregtech.api.util.GT_StructureUtility.*;
@Optional.Interface(iface = "com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti", modid = "tectech", striprefs = true)
-public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaVacuumFreezer> {
+public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaVacuumFreezer> implements ISurvivalConstructable {
public GT_TileEntity_MegaVacuumFreezer(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
@@ -76,28 +80,28 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
private static final IStructureDefinition<GT_TileEntity_MegaVacuumFreezer> STRUCTURE_DEFINITION = StructureDefinition.<GT_TileEntity_MegaVacuumFreezer>builder()
.addShape(STRUCTURE_PIECE_MAIN, transpose(new String[][]{
{"ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccc~ccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
- {"ccccccccccccccc", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "c-------------c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccc~ccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
+ {"ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc"},
{"ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc"}
}))
- .addElement('c', ofChain(
- ofHatchAdder(GT_TileEntity_MegaVacuumFreezer::addEnergyInputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaVacuumFreezer::addMaintenanceToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaVacuumFreezer::addOutputToMachineList, CASING_INDEX, 1),
- ofHatchAdder(GT_TileEntity_MegaVacuumFreezer::addInputToMachineList, CASING_INDEX, 1),
- onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings2, 1))
- ))
+ .addElement('=', StructureElementAirNoHint.getInstance())
+ .addElement('c', buildHatchAdder(GT_TileEntity_MegaVacuumFreezer.class)
+ .atLeast(TTEnabledEnergyHatchElement.INSTANCE, InputHatch, InputBus, OutputHatch, OutputBus, Maintenance)
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings2, 1)))
+ )
.build();
@@ -132,6 +136,13 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
}
@Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ if (mMachine) return -1;
+ int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);
+ return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 7, 0, realBudget, source, actor, false, true);
+ }
+
+ @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return GT_Recipe.GT_Recipe_Map.sVacuumRecipes;
}
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java
index 7890af3d54..7c1cffa640 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java
@@ -34,6 +34,7 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import gregtech.nei.GT_NEI_DefaultHandler;
+import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StatCollector;
@@ -65,44 +66,44 @@ public class BW_NEI_BioVatHandler extends GT_NEI_DefaultHandler {
int tSpecial;
if (recipeDesc == null) {
if (tEUt != 0) {
- GT_NEI_DefaultHandler.drawText(10, lines[0], this.trans("152", "Total: ") + GT_Utility.formatNumbers((long) tDuration * (long) tEUt) + " EU", -16777216);
- GT_NEI_DefaultHandler.drawText(10, lines[1], this.trans("153", "Usage: ") + GT_Utility.formatNumbers(tEUt) + " EU/t", -16777216);
+ drawText(10, lines[0], this.trans("152", "Total: ") + GT_Utility.formatNumbers((long) tDuration * (long) tEUt) + " EU", -16777216);
+ drawText(10, lines[1], this.trans("153", "Usage: ") + GT_Utility.formatNumbers(tEUt) + " EU/t", -16777216);
if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
- GT_NEI_DefaultHandler.drawText(10, lines[2], this.trans("154", "Voltage: ") + GT_Utility.formatNumbers(tEUt / this.mRecipeMap.mAmperage) + " EU", -16777216);
- GT_NEI_DefaultHandler.drawText(10, lines[3], this.trans("155", "Amperage: ") + GT_Utility.formatNumbers(this.mRecipeMap.mAmperage), -16777216);
+ drawText(10, lines[2], this.trans("154", "Voltage: ") + GT_Utility.formatNumbers(tEUt / this.mRecipeMap.mAmperage) + " EU", -16777216);
+ drawText(10, lines[3], this.trans("155", "Amperage: ") + GT_Utility.formatNumbers(this.mRecipeMap.mAmperage), -16777216);
} else {
- GT_NEI_DefaultHandler.drawText(10, lines[2], this.trans("156", "Voltage: unspecified"), -16777216);
- GT_NEI_DefaultHandler.drawText(10, lines[3], this.trans("157", "Amperage: unspecified"), -16777216);
+ drawText(10, lines[2], this.trans("156", "Voltage: unspecified"), -16777216);
+ drawText(10, lines[3], this.trans("157", "Amperage: unspecified"), -16777216);
}
}
if (tDuration > 0) {
- GT_NEI_DefaultHandler.drawText(10, lines[4], this.trans("158", "Time: ") + GT_Utility.formatNumbers(0.05d * tDuration) + this.trans("161", " secs"), -16777216);
+ drawText(10, lines[4], this.trans("158", "Time: ") + GT_Utility.formatNumbers(0.05d * tDuration) + this.trans("161", " secs"), -16777216);
}
tSpecial = ((GT_NEI_DefaultHandler.CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue;
int[] tSpecialA = GT_TileEntity_BioVat.specialValueUnpack(tSpecial);
- GT_NEI_DefaultHandler.drawText(10, lines[5], StatCollector.translateToLocal("nei.biovat.0.name") + " " + tSpecialA[0], -16777216);
+ drawText(10, lines[5], StatCollector.translateToLocal("nei.biovat.0.name") + " " + tSpecialA[0], -16777216);
if (tSpecialA[1] == -100 && GT_Mod.gregtechproxy.mLowGravProcessing) {
- GT_NEI_DefaultHandler.drawText(10, lines[7], this.trans("159", "Needs Low Gravity"), -16777216);
+ drawText(10, lines[7], this.trans("159", "Needs Low Gravity"), -16777216);
} else if (tSpecialA[1] == -200 && GT_Mod.gregtechproxy.mEnableCleanroom) {
- GT_NEI_DefaultHandler.drawText(10, lines[7], this.trans("160", "Needs Cleanroom"), -16777216);
+ drawText(10, lines[7], this.trans("160", "Needs Cleanroom"), -16777216);
} else if (tSpecialA[1] == -300 && GT_Mod.gregtechproxy.mEnableCleanroom) {
- GT_NEI_DefaultHandler.drawText(10, lines[7], this.trans("160", "Needs Cleanroom & LowGrav"), -16777216);
+ drawText(10, lines[7], this.trans("160", "Needs Cleanroom & LowGrav"), -16777216);
} else if (tSpecialA[1] == -400) {
- GT_NEI_DefaultHandler.drawText(10, lines[7], this.trans("216", "Deprecated Recipe"), -16777216);
+ drawText(10, lines[7], this.trans("216", "Deprecated Recipe"), -16777216);
} else if (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre) || GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost)) {
- GT_NEI_DefaultHandler.drawText(10, lines[6], (tSpecialA[2] == 1 ? StatCollector.translateToLocal("nei.biovat.1.name") : StatCollector.translateToLocal("nei.biovat.2.name")) + this.mRecipeMap.mNEISpecialValuePre + GT_Utility.formatNumbers(tSpecialA[3] * this.mRecipeMap.mNEISpecialValueMultiplier) + this.mRecipeMap.mNEISpecialValuePost, -16777216);
+ drawText(10, lines[6], (tSpecialA[2] == 1 ? StatCollector.translateToLocal("nei.biovat.1.name") : StatCollector.translateToLocal("nei.biovat.2.name")) + this.mRecipeMap.mNEISpecialValuePre + GT_Utility.formatNumbers(tSpecialA[3] * this.mRecipeMap.mNEISpecialValueMultiplier) + this.mRecipeMap.mNEISpecialValuePost, -16777216);
}
} else {
tSpecial = 0;
for (String descLine : recipeDesc) {
- GT_NEI_DefaultHandler.drawText(10, 73 + 10 * tSpecial, descLine, -16777216);
+ drawText(10, 73 + 10 * tSpecial, descLine, -16777216);
++tSpecial;
}
}
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java
index da7f880c98..f3fc7ea816 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java
@@ -42,6 +42,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.OreDictionary;
@@ -96,11 +97,13 @@ public class CircuitImprintLoader {
CircuitImprintLoader.recipeTagMap.put(CircuitImprintLoader.getTagFromStack(outputs[0]), circuitRecipe.copy());
- if (circuitRecipe.mFluidInputs[0].isFluidEqual(Materials.SolderingAlloy.getMolten(0))||circuitRecipe.mFluidInputs[0].isFluidEqual(new FluidStack(FluidRegistry.getFluid("molten.indalloy140"), 0))) {
+ Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null ? FluidRegistry.getFluid("molten.indalloy140") : FluidRegistry.getFluid("molten.solderingalloy");
+
+ if (circuitRecipe.mFluidInputs[0].isFluidEqual(Materials.SolderingAlloy.getMolten(0))||circuitRecipe.mFluidInputs[0].isFluidEqual(new FluidStack(solderIndalloy, 0))) {
GT_Recipe newRecipe = CircuitImprintLoader.reBuildRecipe(circuitRecipe);
if (newRecipe != null)
BWRecipes.instance.getMappingsFor(BWRecipes.CIRCUITASSEMBLYLINE).addRecipe(newRecipe);
- addCutoffRecipeToSets(toRem,toAdd,circuitRecipe);
+ addCutoffRecipeToSets(toRem,toAdd,circuitRecipe);
} else {
if (circuitRecipe.mEUt > BW_Util.getTierVoltage(ConfigHandler.cutoffTier))
toRem.add(circuitRecipe);
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java
index 2395109d8b..aa66db2fc1 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java
@@ -26,8 +26,10 @@ import com.github.bartimaeusnek.bartworks.API.BioVatLogicAdder;
import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass;
import com.github.bartimaeusnek.bartworks.MainMod;
import com.gtnewhorizon.structurelib.StructureLibAPI;
+import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureElement;
import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement;
+import com.gtnewhorizon.structurelib.structure.StructureUtility;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OreDictNames;
import gregtech.api.enums.ToolDictNames;
@@ -42,6 +44,7 @@ import gregtech.api.util.*;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.EnumRarity;
@@ -49,6 +52,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
+import net.minecraft.util.IChatComponent;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -62,9 +66,11 @@ import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.*;
import java.util.function.BiConsumer;
+import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain;
import static gregtech.api.enums.GT_Values.*;
@SuppressWarnings({"unused","RedundantSuppression"})
@@ -679,7 +685,8 @@ public class BW_Util {
}
public static <T> IStructureElement<T> ofGlassTiered(byte mintier, byte maxtier, byte notset, BiConsumer<T, Byte> setter, Function<T, Byte> getter, int aDots){
- return new IStructureElementNoPlacement<T>(){
+ return new IStructureElement<T>() {
+ private final IStructureElement<T> placementDelegate = BorosilicateGlass.ofBoroGlass(notset, mintier, maxtier, setter, getter);
@Override
public boolean check(T te, World world, int x, int y, int z) {
if(world.isAirBlock(x, y, z))
@@ -703,6 +710,16 @@ public class BW_Util {
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), aDots - 1);
return true;
}
+
+ @Override
+ public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ return placementDelegate.placeBlock(t, world, x, y, z, trigger);
+ }
+
+ @Override
+ public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, IItemSource s, EntityPlayerMP actor, Consumer<IChatComponent> chatter) {
+ return placementDelegate.survivalPlaceBlock(t, world, x, y, z, trigger, s, actor, chatter);
+ }
};
}
diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/CoilAdder.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/CoilAdder.java
deleted file mode 100644
index 8e3dab2566..0000000000
--- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/CoilAdder.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2018-2020 bartimaeusnek
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package com.github.bartimaeusnek.crossmod.tectech.helper;
-
-import com.github.technus.tectech.TecTech;
-import com.github.technus.tectech.mechanics.structure.IStructureElement;
-import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM;
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.HeatingCoilLevel;
-import gregtech.api.interfaces.IHeatingCoil;
-import net.minecraft.block.Block;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-
-public class CoilAdder<MultiBlock extends GT_MetaTileEntity_MultiblockBase_EM & IHasCoils> implements IStructureElement<MultiBlock> {
-
- private CoilAdder(){}
-
- @SuppressWarnings("rawtypes")
- private static final CoilAdder INSTANCE = new CoilAdder();
-
- @SuppressWarnings("unchecked")
- public static <MultiBlock extends GT_MetaTileEntity_MultiblockBase_EM & IHasCoils> CoilAdder<MultiBlock> getINSTANCE() {
- return INSTANCE;
- }
-
- @Override
- public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
- Block coil = world.getBlock(x, y, z);
- if (!(coil instanceof IHeatingCoil))
- return false;
- int meta = world.getBlockMetadata(x, y, z);
- HeatingCoilLevel heat = ((IHeatingCoil) coil).getCoilHeat(meta);
- if (multiBlock.getCoilHeat() == HeatingCoilLevel.None)
- multiBlock.setCoilHeat(heat);
- return multiBlock.getCoilHeat() == heat;
- }
-
- @Override
- public boolean placeBlock(MultiBlock MultiBlock, World world, int x, int y, int z, ItemStack trigger) {
- world.setBlock(x, y, z, GregTech_API.sBlockCasings5, 0, 2);
- return true;
- }
-
- @Override
- public boolean spawnHint(MultiBlock MultiBlock, World world, int x, int y, int z, ItemStack trigger) {
- TecTech.proxy.hint_particle(world, x, y, z, GregTech_API.sBlockCasings5, 0);
- return true;
- }
-} \ No newline at end of file
diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/StructureDefinitions.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/StructureDefinitions.java
deleted file mode 100644
index 7e1b225a2a..0000000000
--- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/helper/StructureDefinitions.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2018-2020 bartimaeusnek
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package com.github.bartimaeusnek.crossmod.tectech.helper;
-
-import static com.github.technus.tectech.mechanics.structure.StructureUtility.transpose;
-
-public enum StructureDefinitions {
- CUBE_NO_MUFFLER(transpose(
- new String[][]{
- {"VVV", "VVV", "VVV"},
- {"V~V", "V-V", "VVV"},
- {"VVV", "VVV", "VVV"}
- }))
- ,
- CUBE_MUFFLER(transpose(
- new String[][]{
- {"VVV", "VMV", "VVV"},
- {"V~V", "V-V", "VVV"},
- {"VVV", "VVV", "VVV"}
- }))
- ;
-
- private final String[][] definition;
-
- public String[][] getDefinition() {
- return definition;
- }
-
- StructureDefinitions(String[][] definition) {
- this.definition = definition;
- }
-}