diff options
author | Mary <33456283+FourIsTheNumber@users.noreply.github.com> | 2024-07-18 04:58:35 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-18 15:58:35 +0700 |
commit | 1103e0d46bf6c4a7dc96fdabbb76628b0b8ca3a8 (patch) | |
tree | 5028aab9a20d65cdf7e7d3ac88a4dea91116971f /src/main/java | |
parent | de36e0a3fb2035c862b282440b23f4a6e2b6d392 (diff) | |
download | GT5-Unofficial-1103e0d46bf6c4a7dc96fdabbb76628b0b8ca3a8.tar.gz GT5-Unofficial-1103e0d46bf6c4a7dc96fdabbb76628b0b8ca3a8.tar.bz2 GT5-Unofficial-1103e0d46bf6c4a7dc96fdabbb76628b0b8ca3a8.zip |
Add a multiblock for Fluid Canner/Canner (#2729)
* Ported changes from canner-dev branch because I have thoroughly messed up my branch management.
* Renamed multi, fixed textures, spotless
Diffstat (limited to 'src/main/java')
6 files changed, 306 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java index bb5bf1f3e7..f7314f6059 100644 --- a/src/main/java/gregtech/api/enums/GT_Values.java +++ b/src/main/java/gregtech/api/enums/GT_Values.java @@ -650,6 +650,7 @@ public class GT_Values { public static final String AuthorQuerns = "Author: " + EnumChatFormatting.RED + "Querns"; public static final String AuthorSilverMoon = "Author: " + EnumChatFormatting.AQUA + "SilverMoon"; public static final String AuthorTheEpicGamer274 = "Author: " + "TheEpicGamer274"; + public static final String AuthorFourIsTheNumber = "Author: " + EnumChatFormatting.LIGHT_PURPLE + "FourIsTheNumber"; // 7.5F comes from GT_Tool_Turbine_Large#getBaseDamage() given huge turbines are the most efficient now. public static double getMaxPlasmaTurbineEfficiencyFromMaterial(Materials material) { diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index 03446092fc..0aa953483f 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -1451,6 +1451,8 @@ public enum ItemList implements IItemContainer { Machine_Multi_LargeChemicalReactor, + Machine_Multi_Canner, + Machine_LV_Miner, Machine_MV_Miner, Machine_HV_Miner, diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index d32cb781e2..73e79e4452 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -315,6 +315,7 @@ public enum MetaTileEntityIDs { WIREMILL_IV(355), PCB_FACTORY_CONTROLLER(356), NANO_FORGE_CONTROLLER(357), + MULTI_CANNER_CONTROLLER(360), CENTRIFUGE_LV(361), CENTRIFUGE_MV(362), CENTRIFUGE_HV(363), diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index c448ecd654..05689c1148 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -313,6 +313,11 @@ public class Textures { MACHINE_CASING_VENT, MACHINE_CASING_VENT_T2, + OVERLAY_FRONT_MULTI_CANNER, + OVERLAY_FRONT_MULTI_CANNER_ACTIVE, + OVERLAY_FRONT_MULTI_CANNER_ACTIVE_GLOW, + OVERLAY_FRONT_MULTI_CANNER_GLOW, + MACHINE_CASING_RADIATIONPROOF, MACHINE_CASING_ADVANCEDRADIATIONPROOF, MACHINE_CASING_FIREBOX_BRONZE, diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiCanner.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiCanner.java new file mode 100644 index 0000000000..d678c6df1f --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiCanner.java @@ -0,0 +1,291 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GT_HatchElement.*; +import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_GLOW; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTech_API; +import gregtech.api.enums.Textures; +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.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; +import gregtech.common.blocks.GT_Block_Casings2; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class GT_MetaTileEntity_MultiCanner + extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_MetaTileEntity_MultiCanner> implements ISurvivalConstructable { + + private boolean fluidMode = false; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition<GT_MetaTileEntity_MultiCanner> STRUCTURE_DEFINITION = StructureDefinition + .<GT_MetaTileEntity_MultiCanner>builder() + .addShape( + STRUCTURE_PIECE_MAIN, + (transpose( + new String[][] { { " AAA ", " AAAAA ", "AAAAAAA", "AAAAAAA", "AAAAAAA", " AAAAA ", " AAA " }, + { " ", " B B ", " BAAAB ", " A A ", " BAAAB ", " B B ", " " }, + { " ", " B B ", " BA~AB ", " A A ", " BAAAB ", " B B ", " " }, + { " ", " B B ", " BAAAB ", " A A ", " BAAAB ", " B B ", " " }, + { " AAA ", " AAAAA ", "AAAAAAA", "AAAAAAA", "AAAAAAA", " AAAAA ", " AAA " } }))) + .addElement( + 'A', + buildHatchAdder(GT_MetaTileEntity_MultiCanner.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, InputHatch, OutputHatch) + .casingIndex(((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0)) + .dot(1) + .buildAndChain( + onElementPass( + GT_MetaTileEntity_MultiCanner::onCasingAdded, + ofBlock(GregTech_API.sBlockCasings2, 0)))) + .addElement('B', ofBlock(GregTech_API.sBlockCasings2, 13)) + .build(); + + public GT_MetaTileEntity_MultiCanner(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public GT_MetaTileEntity_MultiCanner(String aName) { + super(aName); + } + + @Override + public IStructureDefinition<GT_MetaTileEntity_MultiCanner> getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_MultiCanner(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)) }; + } + return rTexture; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Canner/Fluid Canner") + .addInfo("Controller Block for the TurboCan Pro") + .addInfo("Use screwdriver to switch mode") + .addInfo("200% the speed of single block machines of the same voltage") + .addInfo("Gains 8 parallels per voltage tier") + .addInfo(EnumChatFormatting.BLUE + "It's uncanny!") + .addInfo(AuthorFourIsTheNumber) + .addSeparator() + .beginStructureBlock(7, 5, 7, true) + .addController("Front Center") + .addCasingInfoMin("Solid Steel Machine Casing", 85, false) + .addCasingInfoExactly("Steel Pipe Casing", 24, false) + .addInputBus("Any Solid Steel Casing", 1) + .addOutputBus("Any Solid Steel Casing", 1) + .addInputHatch("Any Solid Steel Casing", 1) + .addOutputHatch("Any Solid Steel Casing", 1) + .addEnergyHatch("Any Solid Steel Casing", 1) + .addMaintenanceHatch("Any Solid Steel Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 2, 2); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 2, 2, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + mEnergyHatches.clear(); + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 2, 2)) return false; + if (mCasingAmount < 85) return false; + + // All checks passed! + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + public int getMaxParallelRecipes() { + return (8 * GT_Utility.getTier(this.getMaxInputVoltage())); + } + + @Override + public RecipeMap<?> getRecipeMap() { + return fluidMode ? RecipeMaps.fluidCannerRecipes : RecipeMaps.cannerRecipes; + } + + @Nonnull + @Override + public Collection<RecipeMap<?>> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.fluidCannerRecipes, RecipeMaps.cannerRecipes); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("fluidMode", fluidMode); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + fluidMode = aNBT.getBoolean("fluidMode"); + super.loadNBTData(aNBT); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + fluidMode = !fluidMode; + if (fluidMode) { + PlayerUtils.messagePlayer(aPlayer, "Now running in Fluid Canning Mode."); + } else { + PlayerUtils.messagePlayer(aPlayer, "Now running in Canning Mode."); + } + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setBoolean("mode", fluidMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List<String> currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.MULTI_CANNER.mode." + (tag.getBoolean("mode") ? 1 : 0)) + + EnumChatFormatting.RESET); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } +} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java index d1196552c6..31d917e868 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java @@ -261,6 +261,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.MULTIBLOCK_PUMP_MKI_CONTROLLE import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKIII_CONTROLLER; import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKII_CONTROLLER; import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKIV_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTI_CANNER_CONTROLLER; import static gregtech.api.enums.MetaTileEntityIDs.MULTI_SMELTER_CONTROLLER; import static gregtech.api.enums.MetaTileEntityIDs.NANO_FORGE_CONTROLLER; import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_EV; @@ -561,6 +562,7 @@ import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbin import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_HPSteam; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Plasma; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Steam; +import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_MultiCanner; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_MultiFurnace; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_NanoForge; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OilCracker; @@ -1035,6 +1037,10 @@ public class GT_Loader_MetaTileEntities implements Runnable { // TODO CHECK CIRC ItemList.Machine_Multi_DroneCentre.set( new GT_MetaTileEntity_DroneCentre(Drone_Centre.ID, "multimachine_DroneCentre", "Drone Centre") .getStackForm(1)); + + ItemList.Machine_Multi_Canner.set( + new GT_MetaTileEntity_MultiCanner(MULTI_CANNER_CONTROLLER.ID, "multimachine.canner", "TurboCan Pro") + .getStackForm(1)); } private static void registerSteamMachines() { |