aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorDianeXD <dianelzx@outlook.com>2022-10-23 19:21:26 +0800
committerDianeXD <dianelzx@outlook.com>2022-10-23 19:21:26 +0800
commit8a3c6b95b4cd377bf1744bbfbd0de5d952fd7dca (patch)
tree3ff5741838d2f4cc814946796826d02c2dbf4cb1 /src/main/java
parentfc64e68748e20a9bc72f554d72bae7f64f308b2d (diff)
downloadGT5-Unofficial-8a3c6b95b4cd377bf1744bbfbd0de5d952fd7dca.tar.gz
GT5-Unofficial-8a3c6b95b4cd377bf1744bbfbd0de5d952fd7dca.tar.bz2
GT5-Unofficial-8a3c6b95b4cd377bf1744bbfbd0de5d952fd7dca.zip
Autoplace support
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/common/tileentities/GTMTE_TFFT.java85
1 files changed, 65 insertions, 20 deletions
diff --git a/src/main/java/common/tileentities/GTMTE_TFFT.java b/src/main/java/common/tileentities/GTMTE_TFFT.java
index 6f1af4bd80..84581ca290 100644
--- a/src/main/java/common/tileentities/GTMTE_TFFT.java
+++ b/src/main/java/common/tileentities/GTMTE_TFFT.java
@@ -8,8 +8,9 @@ import static java.lang.Math.min;
import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass;
import com.gtnewhorizon.structurelib.StructureLibAPI;
import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor;
-import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
-import com.gtnewhorizon.structurelib.structure.IStructureElement;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.*;
+import com.gtnewhorizon.structurelib.util.ItemStackPredicate;
import common.Blocks;
import gregtech.api.enums.Textures;
import gregtech.api.fluid.FluidTankGT;
@@ -30,7 +31,6 @@ import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
@@ -43,7 +43,7 @@ import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
-public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_TFFT> {
+public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_TFFT> implements ISurvivalConstructable {
public enum Field {
T1(1_000_000L, 1), // LV
@@ -55,7 +55,7 @@ public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_T
T6(2_048_000_000L, 132), // LuV
T7(131_072_000_000L, 429), // UV
T8(8_388_608_000_000L, 1430), // UEV
- T9(536_870_912_000_000L, 4862), // UIV
+ T9(536_870_912_000_000L, 4862), // UMV
T10(1_099_511_627_776_000_000L, 0); // UXV
@@ -80,9 +80,16 @@ public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_T
private enum TFFTMultiHatch implements IHatchElement<GTMTE_TFFT> {
INSTANCE;
+ private final List<? extends Class<? extends IMetaTileEntity>> mteClasses;
+
+ @SafeVarargs
+ TFFTMultiHatch(Class<? extends IMetaTileEntity>... mteClasses) {
+ this.mteClasses = Arrays.asList(mteClasses);
+ }
+
@Override
public List<? extends Class<? extends IMetaTileEntity>> mteClasses() {
- return Collections.singletonList(GTMTE_TFFT.class);
+ return mteClasses;
}
@Override
@@ -117,6 +124,9 @@ public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_T
private static final String STRUCTURE_PIECE_TOP = "top";
private static final String STRUCTURE_PIECE_MID = "mid";
private static final String STRUCTURE_PIECE_BOTTOM = "bottom";
+
+ // height channel for height.
+ // field channel for field
private static final IStructureDefinition<GTMTE_TFFT> STRUCTURE_DEFINITION =
IStructureDefinition.<GTMTE_TFFT>builder()
.addShape(
@@ -191,6 +201,41 @@ public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_T
world.setBlock(x, y, z, TFFT_FIELD, getHint(trigger), 3);
return true;
}
+
+ @Override
+ public PlaceResult survivalPlaceBlock(
+ GTMTE_TFFT t,
+ World world,
+ int x,
+ int y,
+ int z,
+ ItemStack trigger,
+ AutoPlaceEnvironment env) {
+ if (check(t, world, x, y, z)) return PlaceResult.SKIP;
+ int fieldTier = getHint(trigger);
+ ItemStack result = env.getSource()
+ .takeOne(
+ s -> s != null
+ && s.stackSize >= 0
+ && s.getItem() == TFFT_FIELD_ITEM
+ && s.getItemDamage() != CASING_META
+ && s.getItemDamage() <= fieldTier,
+ true);
+ if (result == null) return PlaceResult.REJECT;
+
+ return StructureUtility.survivalPlaceBlock(
+ result,
+ ItemStackPredicate.NBTMode.EXACT,
+ null,
+ true,
+ world,
+ x,
+ y,
+ z,
+ env.getSource(),
+ env.getActor(),
+ env.getChatter());
+ }
}))
.build();
@@ -291,6 +336,8 @@ public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_T
.addOtherStructurePart(
"Multi I/O Hatches", "Instead of any casing or glass, has to touch storage field block")
.addStructureInfo("Use MIOH with conduits or fluid storage busses to see all fluids at once.")
+ .addSubChannelUsage("field", "Maximum Field Tier")
+ .addSubChannelUsage("height", "Height of structure")
.toolTipFinisher("KekzTech");
return tt;
}
@@ -303,19 +350,18 @@ public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_T
buildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, hintsOnly, 2, 2, -layer);
}
- // @Override
- // public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
- // if (mMachine) return -1;
- // int build = survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, 2, 0, elementBudget, env, false, true);
- // if (build >= 0) return build;
- // int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1);
- // for (int i = -1; i >= 1 - layer; i--) {
- // survivialBuildPiece(STRUCTURE_PIECE_MID, stackSize, 2, 2, i, elementBudget, env, false, true);
- // if (build >= 0) return build;
- // }
- // return survivialBuildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, 2, 2, -layer, elementBudget, env, false,
- // true);
- // }
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
+ if (mMachine) return -1;
+ int build = survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, 2, 0, elementBudget, env, false, true);
+ if (build >= 0) return build;
+ int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1);
+ for (int i = -1; i >= 1 - layer; i--) {
+ build = survivialBuildPiece(STRUCTURE_PIECE_MID, stackSize, 2, 2, i, elementBudget, env, false, true);
+ if (build >= 0) return build;
+ }
+ return survivialBuildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, 2, 2, -layer, elementBudget, env, false, true);
+ }
@Override
public boolean isCorrectMachinePart(ItemStack aStack) {
@@ -549,7 +595,6 @@ public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase<GTMTE_T
if (aMetaTileEntity instanceof GTMTE_TFFTHatch) {
if (this.tfftHatch != null) return false;
this.tfftHatch = (GTMTE_TFFTHatch) aMetaTileEntity;
- this.tfftHatch.updateTexture(aBaseCasingIndex);
return true;
}
}