aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java14
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java113
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java9
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java133
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java7
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java2
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java107
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;
+ };
}
}