diff options
Diffstat (limited to 'src/main/java/gregtech/common')
8 files changed, 232 insertions, 161 deletions
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java index c0cdee78a3..a142259438 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java @@ -227,10 +227,10 @@ public class GT_Cover_ItemFilter extends GT_CoverBehaviorBase<GT_Cover_ItemFilte }, widget -> widget .setToggleTexture( - GT_UITextures.OVERLAY_BUTTON_WHITELIST, - GT_UITextures.OVERLAY_BUTTON_BLACKLIST) - .addTooltip(0, GT_Utility.trans("124.1", "Blacklist Mode")) - .addTooltip(1, GT_Utility.trans("125.1", "Whitelist Mode")) + GT_UITextures.OVERLAY_BUTTON_BLACKLIST, + GT_UITextures.OVERLAY_BUTTON_WHITELIST) + .addTooltip(0, GT_Utility.trans("125.1", "Whitelist Mode")) + .addTooltip(1, GT_Utility.trans("124.1", "Blacklist Mode")) .setPos(spaceX * 0, spaceY * 0)) .addFollower( new CoverDataFollower_SlotWidget<>(filterInvHandler, 0, true), diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java index 1711529de2..67c38fad9e 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java @@ -10,12 +10,11 @@ import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; import gregtech.api.render.TextureFactory; -public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer implements IAddUIWidgets { +public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer { private static final int[] tickRate = { 400, 200, 100, 20, 4, 1, 1, 1, 1, 1, 1, 1, 1 }; private static final int[] maxStacks = { 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 128 }; @@ -28,7 +27,7 @@ public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer impl aTier, 28, new String[] { "Buffers up to 27 Item Stacks", "Use Screwdriver to regulate output stack size", - "Does not consume energy to move Item", getTickRateDesc(aTier) }); + getTickRateDesc(aTier) }); } public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, @@ -120,14 +119,15 @@ public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer impl @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - addEmitEnergyButton(builder); - addEmitRedstoneButton(builder); + super.addUIWidgets(builder, buildContext); + addSortStacksButton(builder); + addEmitRedstoneIfFullButton(builder); addInvertRedstoneButton(builder); addStockingModeButton(builder); builder.widget( new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(69, true)) - .setPos(80, 60) - .setSize(69, 22)); + .setPos(98, 60) + .setSize(51, 22)); addMainUI(builder); } diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java index a5b495d73d..b6f1d53604 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java @@ -9,23 +9,22 @@ import net.minecraftforge.common.util.ForgeDirection; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.SlotGroup; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_FilterBase; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Utility; -public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer implements IAddUIWidgets { +public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_FilterBase { - public boolean bIgnoreNBT = false; - public boolean bInvertFilter = false; + private static final int NUM_FILTER_SLOTS = 9; + private static final String IGNORE_NBT_TOOLTIP = "GT5U.machines.ignore_nbt.tooltip"; + private boolean ignoreNbt = false; public GT_MetaTileEntity_Filter(int aID, String aName, String aNameRegional, int aTier) { super( @@ -34,8 +33,7 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer implement aNameRegional, aTier, 19, - new String[] { "Filters up to 9 different Items", "Use Screwdriver to regulate output stack size", - "Does not consume energy to move Item" }); + new String[] { "Filters up to 9 different Items", "Use Screwdriver to regulate output stack size" }); } public GT_MetaTileEntity_Filter(String aName, int aTier, int aInvSlotCount, String aDescription, @@ -69,22 +67,15 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer implement } @Override - public boolean isValidSlot(int aIndex) { - return aIndex < 9; - } - - @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); - aNBT.setBoolean("bInvertFilter", this.bInvertFilter); - aNBT.setBoolean("bIgnoreNBT", this.bIgnoreNBT); + aNBT.setBoolean("bIgnoreNBT", this.ignoreNbt); } @Override public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); - this.bInvertFilter = aNBT.getBoolean("bInvertFilter"); - this.bIgnoreNBT = aNBT.getBoolean("bIgnoreNBT"); + this.ignoreNbt = aNBT.getBoolean("bIgnoreNBT"); } @Override @@ -93,78 +84,25 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer implement if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack)) { return false; } - if (this.bInvertFilter) { - for (byte i = 9; i < 18; i = (byte) (i + 1)) { - if (GT_Utility.areStacksEqual(this.mInventory[i], aStack, this.bIgnoreNBT)) { + if (this.invertFilter) { + for (int i = 0; i < NUM_FILTER_SLOTS; i++) { + if (GT_Utility.areStacksEqual(this.mInventory[FILTER_SLOT_INDEX + i], aStack, this.ignoreNbt)) { return false; } } return true; } - return GT_Utility.areStacksEqual(this.mInventory[(aIndex + 9)], aStack, this.bIgnoreNBT); - } - - @Override - protected void handleRedstoneOutput(IGregTechTileEntity aBaseMetaTileEntity) { - if (bRedstoneIfFull) { - int emptySlots = 0; - for (int i = 0; i < 9; i++) { - if (mInventory[i] == null) ++emptySlots; - } - if (!bInvert) emptySlots = 9 - emptySlots; - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) emptySlots); - } - } else { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); - } - } + return GT_Utility.areStacksEqual(this.mInventory[(FILTER_SLOT_INDEX + aIndex)], aStack, this.ignoreNbt); } @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - addEmitEnergyButton(builder); - addEmitRedstoneButton(builder); - addInvertRedstoneButton(builder); - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - bInvertFilter = !bInvertFilter; - if (bInvertFilter) { - GT_Utility.sendChatToPlayer( - widget.getContext() - .getPlayer(), - GT_Utility.trans("124", "Invert Filter")); - } else { - GT_Utility.sendChatToPlayer( - widget.getContext() - .getPlayer(), - GT_Utility.trans("125", "Don't invert Filter")); - } - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_INVERT_FILTER) - .setPos(61, 62) - .setSize(18, 18)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - bIgnoreNBT = !bIgnoreNBT; - if (bIgnoreNBT) { - GT_Utility.sendChatToPlayer( - widget.getContext() - .getPlayer(), - GT_Utility.trans("126", "Ignore NBT")); - } else { - GT_Utility.sendChatToPlayer( - widget.getContext() - .getPlayer(), - GT_Utility.trans("127", "NBT has to match")); - } - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_NBT) - .setPos(79, 62) - .setSize(18, 18)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_WHITE.apply(9, false)) - .setPos(6, 19) - .setSize(9, 24)) + super.addUIWidgets(builder, buildContext); + addAllowNbtButton(builder); + builder.widget( + new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_WHITE.apply(9, false)) + .setPos(6, 19) + .setSize(9, 24)) .widget( new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_BLUE.apply(24, true)) .setPos(71, 19) @@ -179,8 +117,8 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer implement .setSize(54, 54)) .widget( SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(9) - .endAtSlot(17) + .startFromSlot(FILTER_SLOT_INDEX) + .endAtSlot(FILTER_SLOT_INDEX + NUM_FILTER_SLOTS - 1) .phantom(true) .applyForWidget( widget -> widget.disableShiftInsert() @@ -190,8 +128,17 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer implement .widget( SlotGroup.ofItemHandler(inventoryHandler, 3) .startFromSlot(0) - .endAtSlot(8) + .endAtSlot(NUM_INVENTORY_SLOTS - 1) .build() .setPos(97, 4)); } + + private void addAllowNbtButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> ignoreNbt, + val -> ignoreNbt = val, + GT_UITextures.OVERLAY_BUTTON_NBT, + () -> mTooltipCache.getData(IGNORE_NBT_TOOLTIP))); + } } diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index 1f4117acc9..58b7fa57df 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -17,13 +17,12 @@ import gregtech.api.enums.Textures; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Utility; -public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer implements IAddUIWidgets { +public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer { private byte[] itemsPerSide = new byte[6]; private ForgeDirection currentSide = ForgeDirection.DOWN; @@ -37,7 +36,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer aTier, 28, new String[] { "Distributes Items between different Machine Sides", "Default Items per Machine Side: 0", - "Use Screwdriver to increase/decrease Items per Side", "Does not consume energy to move Item" }); + "Use Screwdriver to increase/decrease Items per Side" }); } public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, @@ -193,8 +192,8 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - addEmitEnergyButton(builder); - addEmitRedstoneButton(builder); + super.addUIWidgets(builder, buildContext); + addEmitRedstoneIfFullButton(builder); addInvertRedstoneButton(builder); builder.widget( new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(87, true)) diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java index f8e54f9edf..4df9ca55b7 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java @@ -3,26 +3,47 @@ package gregtech.common.tileentities.automation; import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER; import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER_GLOW; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import org.jetbrains.annotations.NotNull; import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import codechicken.nei.recipe.RecipeCatalysts; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IRecipeLockable; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SpecialFilter; +import gregtech.api.multitileentity.MultiTileEntityContainer; +import gregtech.api.multitileentity.MultiTileEntityItemInternal; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; import gregtech.common.blocks.GT_Item_Machines; +import gregtech.loaders.preload.GT_Loader_MultiTileEntities; public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFilter { + private static final String TT_machineType = "GT5U.MBTT.MachineType"; + private static final String REPRESENTATION_SLOT_TOOLTIP = "GT5U.recipe_filter.representation_slot.tooltip"; + private static final String EMPTY_REPRESENTATION_SLOT_TOOLTIP = "GT5U.recipe_filter.empty_representation_slot.tooltip"; public GT_Recipe.GT_Recipe_Map mRecipeMap; + private List<ItemStack> filteredMachines = Collections.emptyList(); + public int mRotationIndex = 0; public GT_MetaTileEntity_RecipeFilter(int aID, String aName, String aNameRegional, int aTier) { super( @@ -30,8 +51,7 @@ public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFil aName, aNameRegional, aTier, - new String[] { "Filters 1 Recipe Type", "Use Screwdriver to regulate output stack size", - "Does not consume energy to move Item" }); + new String[] { "Filters 1 Recipe Type", "Use Screwdriver to regulate output stack size" }); } public GT_MetaTileEntity_RecipeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, @@ -45,20 +65,70 @@ public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFil } @Override - public void clickTypeIcon(boolean aRightClick, ItemStack aHandStack) { - if (!aRightClick) { - IMetaTileEntity mte = GT_Item_Machines.getMetaTileEntity(aHandStack); - if (mte instanceof GT_MetaTileEntity_BasicMachine machine) { - GT_Recipe.GT_Recipe_Map recipeList = machine.getRecipeList(); - if (recipeList != null) { - mInventory[SPECIAL_SLOT_INDEX] = machine.getStackForm(1); - mRecipeMap = recipeList; - return; - } + public void clickTypeIcon(boolean rightClick, ItemStack heldStack) { + mRecipeMap = getItemStackMachineRecipeMap(heldStack); + if (mRecipeMap != null) { + filteredMachines = getFilteredMachines(mRecipeMap); + } else { + filteredMachines = Collections.emptyList(); + mInventory[FILTER_SLOT_INDEX] = null; + } + mRotationIndex = -1; + } + + private static GT_Recipe.GT_Recipe_Map getItemStackMachineRecipeMap(ItemStack stack) { + if (stack != null) { + IMetaTileEntity metaTileEntity = GT_Item_Machines.getMetaTileEntity(stack); + if (metaTileEntity != null) { + return getMetaTileEntityRecipeMap(metaTileEntity); + } else if (stack.getItem() instanceof MultiTileEntityItemInternal) { + return getMuTeRecipeMap(stack); } - mInventory[SPECIAL_SLOT_INDEX] = null; - mRecipeMap = null; } + return null; + } + + private static GT_Recipe.GT_Recipe_Map getMetaTileEntityRecipeMap(IMetaTileEntity metaTileEntity) { + if (metaTileEntity instanceof GT_MetaTileEntity_BasicMachine machine) { + return machine.getRecipeList(); + } else if (metaTileEntity instanceof IRecipeLockable recipeLockable) { + return recipeLockable.getRecipeMap(); + } + return null; + } + + private static GT_Recipe.GT_Recipe_Map getMuTeRecipeMap(@NotNull ItemStack stack) { + MultiTileEntityContainer muTeEntityContainer = GT_Loader_MultiTileEntities.MACHINE_REGISTRY + .getNewTileEntityContainer(stack); + if (muTeEntityContainer != null && muTeEntityContainer.mTileEntity instanceof IRecipeLockable recipeLockable) { + return recipeLockable.getRecipeMap(); + } + return null; + } + + private static List<ItemStack> getFilteredMachines(GT_Recipe.GT_Recipe_Map recipeMap) { + return RecipeCatalysts.getRecipeCatalysts(recipeMap.mNEIName) + .stream() + .map(positionedStack -> positionedStack.item) + .collect(Collectors.toList()); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if ((!getBaseMetaTileEntity().isServerSide()) || ((aTick % 8L != 0L) && mRotationIndex != -1)) return; + if (this.filteredMachines.isEmpty()) { + if (mRecipeMap != null) { + // This should succeed after a few ticks when NEI is fully loaded. + filteredMachines = getFilteredMachines(mRecipeMap); + } else { + return; + } + } + this.mInventory[FILTER_SLOT_INDEX] = GT_Utility.copyAmount( + 1L, + this.filteredMachines.get(this.mRotationIndex = (this.mRotationIndex + 1) % this.filteredMachines.size())); + if (this.mInventory[FILTER_SLOT_INDEX] == null) return; } @Override @@ -99,7 +169,40 @@ public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFil } @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new FakeSyncWidget.StringSyncer( + () -> this.mRecipeMap == null ? "" : this.mRecipeMap.mUniqueIdentifier, + (id) -> this.mRecipeMap = GT_Recipe.GT_Recipe_Map.sIndexedMappings.getOrDefault(id, null))); + } + + @Override protected List<Text> getEmptySlotTooltip() { - return Collections.singletonList(Text.localised("GT5U.recipe_filter.representation_slot.tooltip")); + return Collections.singletonList(Text.localised(EMPTY_REPRESENTATION_SLOT_TOOLTIP)); + } + + @Override + public Function<List<String>, List<String>> getItemStackReplacementTooltip() { + if (mRecipeMap != null) { + List<String> tooltip = assembleItemStackReplacementTooltip(mRecipeMap); + return list -> tooltip; + } + return super.getItemStackReplacementTooltip(); + } + + @NotNull + private List<String> assembleItemStackReplacementTooltip(GT_Recipe.GT_Recipe_Map recipeMap) { + List<String> tooltip = new ArrayList<>(); + tooltip.add( + StatCollector.translateToLocal(TT_machineType) + ": " + + EnumChatFormatting.YELLOW + + StatCollector.translateToLocal(recipeMap.mUnlocalizedName) + + EnumChatFormatting.RESET); + if (recipeMap.mRecipeItemMap.size() > 0) { + tooltip.add("Filter size: §e" + recipeMap.mRecipeItemMap.size() + "§r"); + } + tooltip.addAll(mTooltipCache.getData(REPRESENTATION_SLOT_TOOLTIP).text); + return tooltip; } } diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java index 3fa296f9a2..08d3d32512 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java @@ -21,13 +21,12 @@ import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Utility; -public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer implements IAddUIWidgets { +public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer { public int[] mTargetSlots = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; private boolean charge = false, decharge = false; @@ -40,7 +39,7 @@ public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer implem aTier, 20, new String[] { "Filters up to 9 different Items", "Allows Item-specific output stack size", - "Allows Item-specific output slot", "Does not consume energy to move Item" }); + "Allows Item-specific output slot" }); } public GT_MetaTileEntity_Regulator(String aName, int aTier, int aInvSlotCount, String aDescription, @@ -173,7 +172,7 @@ public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer implem @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - addEmitEnergyButton(builder); + super.addUIWidgets(builder, buildContext); builder.widget(createChargerSlot(43, 62)); builder.widget( new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(84, true)) diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java index 4687b62fa1..9a1d2d7dcf 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java @@ -30,7 +30,7 @@ public class GT_MetaTileEntity_SuperBuffer extends GT_MetaTileEntity_ChestBuffer aTier, 257, new String[] { "Buffers up to 256 Item Stacks", "Use Screwdriver to regulate output stack size", - "Does not consume energy to move Item", getTickRateDesc(aTier) }); + getTickRateDesc(aTier) }); } public GT_MetaTileEntity_SuperBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java index ee79766e30..56ce5877ea 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java @@ -4,15 +4,17 @@ import static gregtech.api.enums.GT_Values.W; import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_TYPEFILTER; import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_TYPEFILTER_GLOW; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; +import java.util.function.Function; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import gregtech.api.enums.OrePrefixes; import gregtech.api.interfaces.ITexture; @@ -26,6 +28,7 @@ import gregtech.api.util.GT_Utility; public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilter { + private static final String REPRESENTATION_SLOT_TOOLTIP = "GT5U.type_filter.representation_slot.tooltip"; public int mRotationIndex = 0; public OrePrefixes mPrefix = OrePrefixes.ore; @@ -50,8 +53,7 @@ public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilte aName, aNameRegional, aTier, - new String[] { "Filters 1 Item Type", "Use Screwdriver to regulate output stack size", - "Does not consume energy to move Item" }); + new String[] { "Filters 1 Item Type", "Use Screwdriver to regulate output stack size" }); } public GT_MetaTileEntity_TypeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, @@ -87,34 +89,44 @@ public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilte @Override public void clickTypeIcon(boolean aRightClick, ItemStack aHandStack) { if (getBaseMetaTileEntity().isServerSide()) { - ItemData data = GT_OreDictUnificator.getAssociation(aHandStack); - if (data != null && data.hasValidPrefixData()) { - this.mPrefix = data.mPrefix; - this.mRotationIndex = -1; - return; + if (aHandStack != null) { + copyHeldItemPrefix(aHandStack); + } else { + cyclePrefix(aRightClick); } - for (int i = 0; i < OrePrefixes.values().length; i++) { - if (this.mPrefix == OrePrefixes.values()[i]) { - for (this.mPrefix = null; this.mPrefix == null; this.mPrefix = OrePrefixes.values()[i]) { - if (aRightClick) { - do { - i--; - if (i < 0) { - i = OrePrefixes.values().length - 1; - } - } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); - } else { - do { - i++; - if (i >= OrePrefixes.values().length) { - i = 0; - } - } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); - } - if (!OrePrefixes.values()[i].mPrefixedItems.isEmpty() - && OrePrefixes.values()[i].mPrefixInto == OrePrefixes.values()[i]) - mPrefix = OrePrefixes.values()[i]; + } + } + + private void copyHeldItemPrefix(ItemStack handStack) { + ItemData data = GT_OreDictUnificator.getAssociation(handStack); + if (data != null && data.hasValidPrefixData()) { + this.mPrefix = data.mPrefix; + this.mRotationIndex = -1; + } + } + + private void cyclePrefix(boolean aRightClick) { + for (int i = 0; i < OrePrefixes.values().length; i++) { + if (this.mPrefix == OrePrefixes.values()[i]) { + for (this.mPrefix = null; this.mPrefix == null; this.mPrefix = OrePrefixes.values()[i]) { + if (aRightClick) { + do { + i--; + if (i < 0) { + i = OrePrefixes.values().length - 1; + } + } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); + } else { + do { + i++; + if (i >= OrePrefixes.values().length) { + i = 0; + } + } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); } + if (!OrePrefixes.values()[i].mPrefixedItems.isEmpty() + && OrePrefixes.values()[i].mPrefixInto == OrePrefixes.values()[i]) + mPrefix = OrePrefixes.values()[i]; } } this.mRotationIndex = -1; @@ -126,16 +138,15 @@ public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilte super.onPreTick(aBaseMetaTileEntity, aTick); if ((!getBaseMetaTileEntity().isServerSide()) || ((aTick % 8L != 0L) && mRotationIndex != -1)) return; if (this.mPrefix.mPrefixedItems.isEmpty()) { - this.mInventory[SPECIAL_SLOT_INDEX] = null; + this.mInventory[FILTER_SLOT_INDEX] = null; return; } - this.mInventory[SPECIAL_SLOT_INDEX] = GT_Utility.copyAmount( + this.mInventory[FILTER_SLOT_INDEX] = GT_Utility.copyAmount( 1L, this.mPrefix.mPrefixedItems .get(this.mRotationIndex = (this.mRotationIndex + 1) % this.mPrefix.mPrefixedItems.size())); - if (this.mInventory[SPECIAL_SLOT_INDEX] == null) return; - if (this.mInventory[SPECIAL_SLOT_INDEX].getItemDamage() == W) this.mInventory[9].setItemDamage(0); - this.mInventory[SPECIAL_SLOT_INDEX].setStackDisplayName(this.mPrefix.toString()); + if (this.mInventory[FILTER_SLOT_INDEX] == null) return; + if (this.mInventory[FILTER_SLOT_INDEX].getItemDamage() == W) this.mInventory[9].setItemDamage(0); } @Override @@ -162,11 +173,23 @@ public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilte } @Override - protected List<String> getItemExtraTooltip() { - return Arrays.asList( - EnumChatFormatting.DARK_GRAY - + StatCollector.translateToLocal("GT5U.type_filter.representation_slot.tooltip.0"), - EnumChatFormatting.DARK_GRAY - + StatCollector.translateToLocal("GT5U.type_filter.representation_slot.tooltip.1")); + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new FakeSyncWidget.StringSyncer( + () -> this.mPrefix.toString(), + (prefix) -> this.mPrefix = OrePrefixes.getPrefix(prefix, this.mPrefix))); + } + + @Override + protected Function<List<String>, List<String>> getItemStackReplacementTooltip() { + return (itemTooltip) -> { + List<String> replacementTooltip = new ArrayList<>(); + replacementTooltip.add("Filter set to " + mPrefix.mRegularLocalName); + replacementTooltip.add("Ore prefix: §e" + mPrefix + "§r"); + replacementTooltip.add("Filter size: §e" + mPrefix.mPrefixedItems.size() + "§r"); + replacementTooltip.addAll(mTooltipCache.getData(REPRESENTATION_SLOT_TOOLTIP).text); + return replacementTooltip; + }; } } |
