aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kubatech/tileentity
diff options
context:
space:
mode:
authorkuba6000 <kuba.123123.6000@gmail.com>2023-10-28 12:29:23 +0200
committerMartin Robertz <dream-master@gmx.net>2023-10-30 08:24:22 +0100
commite3e8a30e7d40dbbcf3f7426b580c5b9c4e7e5218 (patch)
tree0a0f788c63f9bf04461d18d4852d35cb5792e62d /src/main/java/kubatech/tileentity
parent3d1a46d04bb92ac5558f5938d6d5eb9e4ee9b4d9 (diff)
downloadGT5-Unofficial-e3e8a30e7d40dbbcf3f7426b580c5b9c4e7e5218.tar.gz
GT5-Unofficial-e3e8a30e7d40dbbcf3f7426b580c5b9c4e7e5218.tar.bz2
GT5-Unofficial-e3e8a30e7d40dbbcf3f7426b580c5b9c4e7e5218.zip
Start working on moving DEFC from EMT
Diffstat (limited to 'src/main/java/kubatech/tileentity')
-rw-r--r--src/main/java/kubatech/tileentity/TeaAcceptorTile.java2
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java266
2 files changed, 267 insertions, 1 deletions
diff --git a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java
index a2952117ea..1addb1a887 100644
--- a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java
+++ b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java
@@ -54,7 +54,7 @@ import kubatech.api.enums.ItemList;
import kubatech.api.tea.TeaNetwork;
import kubatech.api.utils.StringUtils;
import kubatech.loaders.ItemLoader;
-import kubatech.loaders.block.KubaBlock;
+import kubatech.loaders.block.kubablock.KubaBlock;
public class TeaAcceptorTile extends TileEntity
implements IInventory, ITileWithModularUI, KubaBlock.IModularUIProvider {
diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java
new file mode 100644
index 0000000000..696413ee55
--- /dev/null
+++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java
@@ -0,0 +1,266 @@
+package kubatech.tileentity.gregtech.multiblock;
+
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
+import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC;
+import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE;
+import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW;
+import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW;
+import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
+import static kubatech.api.Variables.StructureHologram;
+import static kubatech.api.Variables.buildAuthorList;
+
+import java.util.Arrays;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.jetbrains.annotations.NotNull;
+
+import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.logic.ProcessingLogic;
+import gregtech.api.recipe.check.CheckRecipeResult;
+import gregtech.api.recipe.check.CheckRecipeResultRegistry;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_OverclockCalculator;
+import gregtech.api.util.GT_ParallelHelper;
+import gregtech.api.util.GT_Recipe;
+import kubatech.Tags;
+import kubatech.api.implementations.KubaTechGTMultiBlockBase;
+import kubatech.loaders.BlockLoader;
+import kubatech.loaders.DEFCRecipes;
+
+public class GT_MetaTileEntity_DEFusionCrafter extends KubaTechGTMultiBlockBase<GT_MetaTileEntity_DEFusionCrafter> {
+
+ private static final int CASING_INDEX = (1 << 7) + (15 + 48);
+ private int mTierCasing = 0;
+ private int mFusionTierCasing = 0;
+ private int mCasing = 0;
+
+ @SuppressWarnings("unused")
+ public GT_MetaTileEntity_DEFusionCrafter(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GT_MetaTileEntity_DEFusionCrafter(String aName) {
+ super(aName);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_DEFusionCrafter(mName);
+ }
+
+ private static final String STRUCTURE_PIECE_MAIN = "main";
+ private static final List<Pair<Block, Integer>> fusionCasingTiers = Arrays
+ .asList(Pair.of(GregTech_API.sBlockCasings4, 6), Pair.of(GregTech_API.sBlockCasings4, 8));
+ private static final List<Pair<Block, Integer>> coreTiers = Arrays.asList(
+ Pair.of(BlockLoader.defcCasingBlock, 1),
+ Pair.of(BlockLoader.defcCasingBlock, 2),
+ Pair.of(BlockLoader.defcCasingBlock, 3),
+ Pair.of(BlockLoader.defcCasingBlock, 4),
+ Pair.of(BlockLoader.defcCasingBlock, 5));
+ private static final IStructureDefinition<GT_MetaTileEntity_DEFusionCrafter> STRUCTURE_DEFINITION = StructureDefinition
+ .<GT_MetaTileEntity_DEFusionCrafter>builder()
+ .addShape(
+ STRUCTURE_PIECE_MAIN,
+ transpose(
+ new String[][] { // spotless:off
+ { "nnnnn", "nnnnn", "nnnnn", "nnnnn", "nnnnn" },
+ { " ", " F ", " FfF ", " F ", " " },
+ { " ", " F ", " FfF ", " F ", " " },
+ { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" },
+ { " ", " F ", " FfF ", " F ", " " },
+ { " ", " F ", " FfF ", " F ", " " },
+ { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" },
+ { " ", " F ", " FfF ", " F ", " " },
+ { " ", " F ", " FfF ", " F ", " " },
+ { "NN~NN", "NNNNN", "NNNNN", "NNNNN", "NNNNN" }
+ })) // spotless:on
+ .addElement(
+ 'N',
+ ofChain(
+ onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 0)),
+ ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addEnergyInputToMachineList, CASING_INDEX, 1),
+ ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addInputToMachineList, CASING_INDEX, 1),
+ ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addOutputToMachineList, CASING_INDEX, 1),
+ ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addMaintenanceToMachineList, CASING_INDEX, 1)))
+ .addElement('n', onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 0)))
+ .addElement('f', ofBlock(GregTech_API.sBlockCasings4, 7))
+ .addElement('F', ofBlocksTiered((Block b, int m) -> {
+ if (b != GregTech_API.sBlockCasings4 || (m != 6 && m != 8)) return -2;
+ return m == 6 ? 1 : 2;
+ }, fusionCasingTiers, -1, (e, i) -> e.mFusionTierCasing = i, e -> e.mFusionTierCasing))
+ .addElement('R', ofBlocksTiered((Block b, int m) -> {
+ if (b != BlockLoader.defcCasingBlock || m < 1 || m > 5) return -2;
+ return m;
+ }, coreTiers, -1, (e, i) -> e.mTierCasing = i, e -> e.mTierCasing))
+ .build();
+
+ @Override
+ public IStructureDefinition<GT_MetaTileEntity_DEFusionCrafter> getStructureDefinition() {
+ return STRUCTURE_DEFINITION;
+ }
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ mCasing = 0;
+ mTierCasing = -1;
+ mFusionTierCasing = -1;
+ if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 9, 0)) return false;
+ if (mCasing < 19) return false;
+ if (mTierCasing == -2 || mFusionTierCasing == -2) return false;
+ if (mTierCasing > 3 && mFusionTierCasing < 2) return false;
+ return mMaintenanceHatches.size() == 1;
+ }
+
+ @Override
+ protected GT_Multiblock_Tooltip_Builder createTooltip() {
+ GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Fusion Crafter")
+ .addInfo("Controller Block for the Draconic Evolution Fusion Crafter")
+ .addInfo(buildAuthorList("kuba6000", "Prometheus0000"))
+ .addInfo("Machine can be overclocked by using casings above the recipe tier:")
+ .addInfo("Recipe time is divided by number of tiers above the recipe")
+ .addInfo("Normal EU OC still applies !")
+ .addInfo(StructureHologram)
+ .addSeparator()
+ .beginStructureBlock(5, 10, 5, false)
+ .addController("Front bottom center")
+ .addCasingInfoMin("Naquadah Alloy Fusion Casing", 19, false)
+ .addOtherStructurePart("Fusion Coil Block", "Center pillar")
+ .addOtherStructurePart("Fusion Machine Casing", "Touching Fusion Coil Block at every side")
+ .addOtherStructurePart("Tiered Fusion Casing", "Rings (5x5 hollow) at layer 4 and 7")
+ .addStructureInfo("Bloody Ichorium for tier 1, Draconium for tier 2, etc")
+ .addStructureInfo("To use tier 3 + you have to use fusion casing MK II")
+ .addInputBus("Any bottom casing", 1)
+ .addInputHatch("Any bottom casing", 1)
+ .addOutputBus("Any bottom casing", 1)
+ .addOutputHatch("Any bottom casing", 1)
+ .addEnergyHatch("Any bottom casing", 1)
+ .addMaintenanceHatch("Any bottom casing", 1)
+ .toolTipFinisher(Tags.MODNAME);
+ return tt;
+ }
+
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
+ int colorIndex, boolean aActive, boolean aRedstone) {
+ if (side == facing) {
+ if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder()
+ .addIcon(OVERLAY_TELEPORTER_ACTIVE)
+ .extFacing()
+ .build(),
+ TextureFactory.builder()
+ .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW)
+ .extFacing()
+ .glow()
+ .build() };
+ return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder()
+ .addIcon(OVERLAY_TELEPORTER)
+ .extFacing()
+ .build(),
+ TextureFactory.builder()
+ .addIcon(OVERLAY_TELEPORTER_GLOW)
+ .extFacing()
+ .glow()
+ .build() };
+ }
+ if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder()
+ .addIcon(MACHINE_CASING_MAGIC_ACTIVE)
+ .extFacing()
+ .build(),
+ TextureFactory.builder()
+ .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW)
+ .extFacing()
+ .glow()
+ .build() };
+ return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder()
+ .addIcon(MACHINE_CASING_MAGIC)
+ .extFacing()
+ .build(),
+ TextureFactory.builder()
+ .addIcon(MACHINE_CASING_MAGIC_GLOW)
+ .extFacing()
+ .glow()
+ .build() };
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public GT_Recipe.GT_Recipe_Map getRecipeMap() {
+ return DEFCRecipes.sFusionCraftingRecipes;
+ }
+
+ @Override
+ protected ProcessingLogic createProcessingLogic() {
+ return new ProcessingLogic() {
+
+ @NotNull
+ @Override
+ protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) {
+ return recipe.mSpecialValue <= mTierCasing ? CheckRecipeResultRegistry.SUCCESSFUL
+ : CheckRecipeResultRegistry.NO_RECIPE;
+ }
+
+ @Override
+ protected double calculateDuration(@NotNull GT_Recipe recipe, @NotNull GT_ParallelHelper helper,
+ @NotNull GT_OverclockCalculator calculator) {
+ return Math.max(
+ 1d,
+ super.calculateDuration(recipe, helper, calculator) / ((mTierCasing - recipe.mSpecialValue) + 1));
+ }
+ };
+ }
+
+ public int getMaxEfficiency(ItemStack aStack) {
+ return 10000;
+ }
+
+ public int getPollutionPerTick(ItemStack aStack) {
+ return 0;
+ }
+
+ public int getDamageToComponent(ItemStack aStack) {
+ return 0;
+ }
+
+ public boolean explodesOnComponentBreak(ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public void construct(ItemStack itemStack, boolean b) {
+ buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 9, 0);
+ }
+
+ @Override
+ public boolean supportsVoidProtection() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsInputSeparation() {
+ return true;
+ }
+
+}