From 8739ecfe19ee37f2e4b5faff48ec3eb3e8538ebd Mon Sep 17 00:00:00 2001 From: Pelotrio <45769595+Pelotrio@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:50:28 +0200 Subject: Add non-autopull version of stocking input bus/hatch --- src/main/java/gregtech/api/enums/ItemList.java | 2 + .../java/gregtech/api/enums/MetaTileEntityIDs.java | 6 +- .../GT_MetaTileEntity_Hatch_InputBus_ME.java | 95 ++++++++++++++++------ .../machines/GT_MetaTileEntity_Hatch_Input_ME.java | 83 +++++++++++++------ .../preload/GT_Loader_MetaTileEntities.java | 28 ++++++- 5 files changed, 156 insertions(+), 58 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index 30eda5b677..4250ada9c9 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -2000,7 +2000,9 @@ public enum ItemList implements IItemContainer { VOLUMETRIC_FLASK, + Hatch_Input_Bus_ME_Basic, Hatch_Input_Bus_ME, + Hatch_Input_ME_Basic, Hatch_Input_ME, Hatch_CraftingInput_Bus_ME, Hatch_CraftingInput_Bus_ME_ItemOnly, diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index 003ff381f7..ace5f620d4 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -599,12 +599,14 @@ public enum MetaTileEntityIDs { LONG_DISTANCE_PIPELINE_FLUID(2700), LONG_DISTANCE_PIPELINE_ITEM(2701), OUTPUT_BUS_ME(2710), - INPUT_BUS_ME(2711), - INPUT_HATCH_ME(2712), + INPUT_BUS_ME_ADVANCED(2711), + INPUT_HATCH_ME_ADVANCED(2712), OUTPUT_HATCH_ME(2713), CRAFTING_INPUT_ME(2714), CRAFTING_INPUT_ME_BUS(2715), CRAFTING_INPUT_SLAVE(2716), + INPUT_HATCH_ME(2717), + INPUT_BUS_ME(2718), CHEST_BUFFER_ULV(9230), CHEST_BUFFER_LV(9231), CHEST_BUFFER_MV(9232), diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java index a23916dcc8..9a48d9ee64 100644 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java +++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java @@ -3,6 +3,7 @@ package gregtech.common.tileentities.machines; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH_ACTIVE; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; @@ -82,37 +83,34 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch private final ItemStack[] shadowInventory = new ItemStack[SLOT_COUNT]; private final int[] savedStackSizes = new int[SLOT_COUNT]; private boolean processingRecipe = false; + private final boolean autoPullAvailable; private boolean autoPullItemList = false; private int minAutoPullStackSize = 1; private static final int CONFIG_WINDOW_ID = 10; private boolean additionalConnection = false; - public GT_MetaTileEntity_Hatch_InputBus_ME(int aID, String aName, String aNameRegional) { + public GT_MetaTileEntity_Hatch_InputBus_ME(int aID, boolean autoPullAvailable, String aName, String aNameRegional) { super( aID, aName, aNameRegional, - 3, + autoPullAvailable ? 6 : 3, SLOT_COUNT * 2 + 2, - new String[] { "Advanced item input for Multiblocks", "Retrieves directly from ME", - "Keeps 16 item types in stock", - "Auto-Pull from ME mode will automatically stock the first 16 items in the ME system, updated every 5 seconds.", - "Toggle by right-clicking with screwdriver, or use the GUI.", - "Use the GUI to limit the minimum stack size for Auto-Pulling.", - "Change ME connection behavior by right-clicking with wire cutter.", - "Configuration data can be copy+pasted using a data stick." }); + getDescriptionArray(autoPullAvailable)); + this.autoPullAvailable = autoPullAvailable; disableSort = true; } - public GT_MetaTileEntity_Hatch_InputBus_ME(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { + public GT_MetaTileEntity_Hatch_InputBus_ME(String aName, boolean autoPullAvailable, int aTier, + String[] aDescription, ITexture[][][] aTextures) { super(aName, aTier, SLOT_COUNT * 2 + 2, aDescription, aTextures); + this.autoPullAvailable = autoPullAvailable; disableSort = true; } @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_InputBus_ME(mName, mTier, mDescriptionArray, mTextures); + return new GT_MetaTileEntity_Hatch_InputBus_ME(mName, autoPullAvailable, mTier, mDescriptionArray, mTextures); } @Override @@ -214,6 +212,10 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } private void setAutoPullItemList(boolean pullItemList) { + if (!autoPullAvailable) { + return; + } + autoPullItemList = pullItemList; if (!autoPullItemList) { for (int i = 0; i < SLOT_COUNT; i++) { @@ -272,6 +274,10 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch @Override public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!autoPullAvailable) { + return; + } + setAutoPullItemList(!autoPullItemList); aPlayer.addChatMessage( new ChatComponentTranslation( @@ -523,7 +529,11 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { final SlotWidget[] aeSlotWidgets = new SlotWidget[16]; - buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); + + if (autoPullAvailable) { + buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); + } + builder.widget( SlotGroup.ofItemHandler(inventoryHandler, 4) .startFromSlot(0) @@ -607,8 +617,10 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch .widget( new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_DOUBLE) .setPos(82, 30) - .setSize(12, 12)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + .setSize(12, 12)); + + if (autoPullAvailable) { + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { if (clickData.mouseButton == 0) { setAutoPullItemList(!autoPullItemList); } else if (clickData.mouseButton == 1 && !widget.isClient()) { @@ -631,18 +643,19 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch StatCollector.translateToLocal("GT5U.machines.stocking_bus.auto_pull.tooltip.2"))) .setSize(16, 16) .setPos(80, 10)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullItemList, this::setAutoPullItemList)) - .widget(TextWidget.dynamicString(() -> { - boolean isActive = isActive(); - boolean isPowered = isPowered(); - boolean isBooting = isBooting(); - EnumChatFormatting color = (isActive && isPowered) ? EnumChatFormatting.GREEN - : EnumChatFormatting.DARK_RED; - return color + WailaText.getPowerState(isActive, isPowered, isBooting); - }) - .setTextAlignment(Alignment.Center) - .setSize(90, 9) - .setPos(43, 84)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullItemList, this::setAutoPullItemList)); + } + + builder.widget(TextWidget.dynamicString(() -> { + boolean isActive = isActive(); + boolean isPowered = isPowered(); + boolean isBooting = isBooting(); + EnumChatFormatting color = (isActive && isPowered) ? EnumChatFormatting.GREEN : EnumChatFormatting.DARK_RED; + return color + WailaText.getPowerState(isActive, isPowered, isBooting); + }) + .setTextAlignment(Alignment.Center) + .setSize(90, 9) + .setPos(43, 84)) .widget( new SlotWidget(inventoryHandler, getManualSlot()) // ghost slots are prioritized over manual slot @@ -692,6 +705,11 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch @Override public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (!autoPullAvailable) { + super.getWailaBody(itemStack, currenttip, accessor, config); + return; + } + NBTTagCompound tag = accessor.getNBTData(); boolean autopull = tag.getBoolean("autoPull"); int minSize = tag.getInteger("minStackSize"); @@ -709,8 +727,31 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch @Override public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) { + if (!autoPullAvailable) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + return; + } + tag.setBoolean("autoPull", autoPullItemList); tag.setInteger("minStackSize", minAutoPullStackSize); super.getWailaNBTData(player, tile, tag, world, x, y, z); } + + private static String[] getDescriptionArray(boolean autoPullAvailable) { + List strings = new ArrayList<>(8); + strings.add("Advanced item input for Multiblocks"); + strings.add("Retrieves directly from ME"); + strings.add("Keeps 16 item types in stock"); + + if (autoPullAvailable) { + strings.add( + "Auto-Pull from ME mode will automatically stock the first 16 items in the ME system, updated every 5 seconds."); + strings.add("Toggle by right-clicking with screwdriver, or use the GUI."); + strings.add("Use the GUI to limit the minimum stack size for Auto-Pulling."); + } + + strings.add("Change ME connection behavior by right-clicking with wire cutter."); + strings.add("Configuration data can be copy+pasted using a data stick."); + return strings.toArray(new String[0]); + } } diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java index 55718456f2..718691c6a3 100644 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java +++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java @@ -3,6 +3,7 @@ package gregtech.common.tileentities.machines; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_FLUID_HATCH; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_FLUID_HATCH_ACTIVE; +import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; import java.util.Iterator; @@ -94,6 +95,7 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In @Nullable protected AENetworkProxy gridProxy = null; + private final boolean autoPullAvailable; protected boolean autoPullFluidList = false; protected int minAutoPullAmount = 1; protected boolean processingRecipe = false; @@ -102,29 +104,20 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In protected static final FluidStack[] EMPTY_FLUID_STACK = new FluidStack[0]; - public GT_MetaTileEntity_Hatch_Input_ME(int aID, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - 3, - 1, - new String[] { "Advanced fluid input for Multiblocks", "Retrieves directly from ME", - "Keeps 16 fluid types in stock", - "Auto-Pull from ME mode will automatically stock the first 16 fluid in the ME system, updated every 5 seconds.", - "Toggle by right-clicking with screwdriver, or use the GUI.", - "Use the GUI to limit the minimum stack size for Auto-Pulling.", - "Change ME connection behavior by right-clicking with wire cutter.", - "Configuration data can be copy+pasted using a data stick." }); - } - - public GT_MetaTileEntity_Hatch_Input_ME(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + public GT_MetaTileEntity_Hatch_Input_ME(int aID, boolean autoPullAvailable, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, autoPullAvailable ? 6 : 3, 1, getDescriptionArray(autoPullAvailable)); + this.autoPullAvailable = autoPullAvailable; + } + + public GT_MetaTileEntity_Hatch_Input_ME(String aName, boolean autoPullAvailable, int aTier, String[] aDescription, + ITexture[][][] aTextures) { super(aName, 1, aTier, aDescription, aTextures); + this.autoPullAvailable = autoPullAvailable; } @Override public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Input_ME(mName, mTier, mDescriptionArray, mTextures); + return new GT_MetaTileEntity_Hatch_Input_ME(mName, autoPullAvailable, mTier, mDescriptionArray, mTextures); } @Override @@ -334,6 +327,10 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In } private void setAutoPullFluidList(boolean pullFluidList) { + if (!autoPullAvailable) { + return; + } + autoPullFluidList = pullFluidList; if (!autoPullFluidList) { Arrays.fill(storedFluids, null); @@ -498,6 +495,10 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In @Override public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!autoPullAvailable) { + return; + } + setAutoPullFluidList(!autoPullFluidList); aPlayer.addChatMessage( new ChatComponentTranslation( @@ -584,7 +585,9 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); + if (autoPullAvailable) { + buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); + } builder.widget( SlotGroup.ofFluidTanks( @@ -687,11 +690,8 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In .build() .setPos(new Pos2d(97, 9))); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_DOUBLE) - .setPos(82, 30) - .setSize(12, 12)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (autoPullAvailable) { + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { if (clickData.mouseButton == 0) { setAutoPullFluidList(!autoPullFluidList); } else if (clickData.mouseButton == 1 && !widget.isClient()) { @@ -715,7 +715,13 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In StatCollector.translateToLocal("GT5U.machines.stocking_hatch.auto_pull.tooltip.2"))) .setSize(16, 16) .setPos(80, 10)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullFluidList, this::setAutoPullFluidList)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullFluidList, this::setAutoPullFluidList)); + } + + builder.widget( + new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_DOUBLE) + .setPos(82, 30) + .setSize(12, 12)) .widget(TextWidget.dynamicString(() -> { boolean isActive = isActive(); boolean isPowered = isPowered(); @@ -781,6 +787,11 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In @Override public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (!autoPullAvailable) { + super.getWailaBody(itemStack, currenttip, accessor, config); + return; + } + NBTTagCompound tag = accessor.getNBTData(); boolean autopull = tag.getBoolean("autoPull"); int minSize = tag.getInteger("minAmount"); @@ -798,9 +809,31 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In @Override public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) { + if (!autoPullAvailable) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + return; + } + tag.setBoolean("autoPull", autoPullFluidList); tag.setInteger("minAmount", minAutoPullAmount); super.getWailaNBTData(player, tile, tag, world, x, y, z); } + private static String[] getDescriptionArray(boolean autoPullAvailable) { + List strings = new ArrayList<>(8); + strings.add("Advanced fluid input for Multiblocks"); + strings.add("Retrieves directly from ME"); + strings.add("Keeps 16 fluid types in stock"); + + if (autoPullAvailable) { + strings.add( + "Auto-Pull from ME mode will automatically stock the first 16 fluid in the ME system, updated every 5 seconds."); + strings.add("Toggle by right-clicking with screwdriver, or use the GUI."); + strings.add("Use the GUI to limit the minimum stack size for Auto-Pulling."); + } + + strings.add("Change ME connection behavior by right-clicking with wire cutter."); + strings.add("Configuration data can be copy+pasted using a data stick."); + return strings.toArray(new String[0]); + } } 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 971bafc8f8..fb5cafc259 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java @@ -151,6 +151,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_IV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_LV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_LuV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ME; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ME_ADVANCED; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_MV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_UHV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ULV; @@ -162,6 +163,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_IV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_LV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_LuV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ME; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ME_ADVANCED; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_MV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UHV; import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ULV; @@ -2315,12 +2317,30 @@ public class GT_Loader_MetaTileEntities implements Runnable { // TODO CHECK CIRC ItemList.Hatch_Output_Bus_ME.set( new GT_MetaTileEntity_Hatch_OutputBus_ME(OUTPUT_BUS_ME.ID, "hatch.output_bus.me", "Output Bus (ME)") .getStackForm(1L)); + ItemList.Hatch_Input_Bus_ME_Basic.set( + new GT_MetaTileEntity_Hatch_InputBus_ME( + INPUT_BUS_ME.ID, + false, + "hatch.input_bus.me.basic", + "Stocking Input Bus (ME)").getStackForm(1L)); ItemList.Hatch_Input_Bus_ME.set( - new GT_MetaTileEntity_Hatch_InputBus_ME(INPUT_BUS_ME.ID, "hatch.input_bus.me", "Stocking Input Bus (ME)") - .getStackForm(1L)); + new GT_MetaTileEntity_Hatch_InputBus_ME( + INPUT_BUS_ME_ADVANCED.ID, + true, + "hatch.input_bus.me", + "Advanced Stocking Input Bus (ME)").getStackForm(1L)); + ItemList.Hatch_Input_ME_Basic.set( + new GT_MetaTileEntity_Hatch_Input_ME( + INPUT_HATCH_ME.ID, + false, + "hatch.input.me.basic", + "Stocking Input Hatch (ME)").getStackForm(1L)); ItemList.Hatch_Input_ME.set( - new GT_MetaTileEntity_Hatch_Input_ME(INPUT_HATCH_ME.ID, "hatch.input.me", "Stocking Input Hatch (ME)") - .getStackForm(1L)); + new GT_MetaTileEntity_Hatch_Input_ME( + INPUT_HATCH_ME_ADVANCED.ID, + true, + "hatch.input.me", + "Advanced Stocking Input Hatch (ME)").getStackForm(1L)); ItemList.Hatch_Output_ME.set( new GT_MetaTileEntity_Hatch_Output_ME(OUTPUT_HATCH_ME.ID, "hatch.output.me", "Output Hatch (ME)") .getStackForm(1L)); -- cgit