From a9065fe7af46087fd4aa4cff4fd968c9b7b85ecf Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 3 Dec 2024 22:03:35 -0500 Subject: [PATCH 1/5] Add an easier way for MTEs to be added to creative tabs --- .../api/metatileentity/MetaTileEntity.java | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index b0648610103..b2122ad2757 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -100,6 +100,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArraySet; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.ApiStatus; @@ -107,6 +108,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -166,6 +168,10 @@ public abstract class MetaTileEntity implements ISyncedTileEntity, CoverHolder, @Nullable private UUID owner = null; + private final Set additionalCreativeTabs = new ObjectArraySet<>(); + private boolean showsInSearchTab = true; + private boolean showsInGTCreativeTab = true; + protected MetaTileEntity(@NotNull ResourceLocation metaTileEntityId) { this.metaTileEntityId = metaTileEntityId; this.registry = GregTechAPI.mteManager.getRegistry(metaTileEntityId.getNamespace()); @@ -362,7 +368,9 @@ public void getSubItems(CreativeTabs creativeTab, NonNullList subItem * MachineItemBlock#addCreativeTab(CreativeTabs) */ public boolean isInCreativeTab(CreativeTabs creativeTab) { - return creativeTab == CreativeTabs.SEARCH || creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES; + if (showsInSearchTab && creativeTab == CreativeTabs.SEARCH) return true; + if (showsInGTCreativeTab && creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES) return true; + return additionalCreativeTabs.contains(creativeTab); } public String getItemSubTypeId(ItemStack itemStack) { @@ -1661,4 +1669,31 @@ public AENetworkProxy getProxy() { @Method(modid = Mods.Names.APPLIED_ENERGISTICS2) public void gridChanged() {} + + /** + * Add MTE to a creative tab. Ensure that the creative tab has been registered via + * {@link gregtech.api.block.machines.MachineItemBlock#addCreativeTab(CreativeTabs) + * MachineItemBlock#addCreativeTab(CreativeTabs)} beforehand. + */ + public void addAdditionalCreativeTabs(CreativeTabs creativeTab) { + Preconditions.checkNotNull(creativeTab, "creativeTab"); + if (creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES || creativeTab == CreativeTabs.SEARCH) { + GTLog.logger.error("Adding {} as additional creative tab is redundant.", creativeTab.tabLabel, + new IllegalArgumentException()); + } + + additionalCreativeTabs.add(creativeTab); + } + + public Set getAdditionalCreativeTabs() { + return Collections.unmodifiableSet(additionalCreativeTabs); + } + + public void removeFromSearchTab() { + showsInSearchTab = false; + } + + public void removeFromGTCreativeTab() { + showsInGTCreativeTab = false; + } } From 7d0ab01fe8a00185c2ee61fb8d31f2f2241ca5c1 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 3 Dec 2024 22:12:38 -0500 Subject: [PATCH 2/5] Simpler check --- .../java/gregtech/api/metatileentity/MetaTileEntity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index b2122ad2757..b4d002d4988 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -368,9 +368,9 @@ public void getSubItems(CreativeTabs creativeTab, NonNullList subItem * MachineItemBlock#addCreativeTab(CreativeTabs) */ public boolean isInCreativeTab(CreativeTabs creativeTab) { - if (showsInSearchTab && creativeTab == CreativeTabs.SEARCH) return true; - if (showsInGTCreativeTab && creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES) return true; - return additionalCreativeTabs.contains(creativeTab); + return (showsInSearchTab && creativeTab == CreativeTabs.SEARCH) || + (showsInGTCreativeTab && creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES) || + additionalCreativeTabs.contains(creativeTab); } public String getItemSubTypeId(ItemStack itemStack) { From e8c7fd7ad0089ac3eee3287e55644982860309ce Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 3 Dec 2024 23:17:42 -0500 Subject: [PATCH 3/5] Cleanup and add missing early return --- .../api/metatileentity/MetaTileEntity.java | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index b4d002d4988..f3c7f583e07 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -168,9 +168,12 @@ public abstract class MetaTileEntity implements ISyncedTileEntity, CoverHolder, @Nullable private UUID owner = null; - private final Set additionalCreativeTabs = new ObjectArraySet<>(); - private boolean showsInSearchTab = true; - private boolean showsInGTCreativeTab = true; + private final Set creativeTabs = new ObjectArraySet<>(); + + { + creativeTabs.add(CreativeTabs.SEARCH); + creativeTabs.add(GTCreativeTabs.TAB_GREGTECH_MACHINES); + } protected MetaTileEntity(@NotNull ResourceLocation metaTileEntityId) { this.metaTileEntityId = metaTileEntityId; @@ -368,9 +371,7 @@ public void getSubItems(CreativeTabs creativeTab, NonNullList subItem * MachineItemBlock#addCreativeTab(CreativeTabs) */ public boolean isInCreativeTab(CreativeTabs creativeTab) { - return (showsInSearchTab && creativeTab == CreativeTabs.SEARCH) || - (showsInGTCreativeTab && creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES) || - additionalCreativeTabs.contains(creativeTab); + return creativeTabs.contains(creativeTab); } public String getItemSubTypeId(ItemStack itemStack) { @@ -1677,23 +1678,27 @@ public void gridChanged() {} */ public void addAdditionalCreativeTabs(CreativeTabs creativeTab) { Preconditions.checkNotNull(creativeTab, "creativeTab"); - if (creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES || creativeTab == CreativeTabs.SEARCH) { - GTLog.logger.error("Adding {} as additional creative tab is redundant.", creativeTab.tabLabel, + if (creativeTabs.contains(creativeTab)) { + GTLog.logger.error("{} is already in the creative tab {}.", this, creativeTab.tabLabel, new IllegalArgumentException()); + return; } - additionalCreativeTabs.add(creativeTab); + creativeTabs.add(creativeTab); } - public Set getAdditionalCreativeTabs() { - return Collections.unmodifiableSet(additionalCreativeTabs); - } + public void removeFromCreativeTab(CreativeTabs creativeTab) { + Preconditions.checkNotNull(creativeTab, "creativeTab"); + if (!creativeTabs.contains(creativeTab)) { + GTLog.logger.error("{} is not in the creative tab {}.", this, creativeTab.tabLabel, + new IllegalArgumentException()); + return; + } - public void removeFromSearchTab() { - showsInSearchTab = false; + creativeTabs.remove(creativeTab); } - public void removeFromGTCreativeTab() { - showsInGTCreativeTab = false; + public Set getCreativeTabs() { + return Collections.unmodifiableSet(creativeTabs); } } From 15559af771487c0c5e0eaf946a0920321bf9c502 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Sun, 5 Jan 2025 22:31:42 -0500 Subject: [PATCH 4/5] Do not allow MTEs to be removed from the creative search tab. --- .../java/gregtech/api/metatileentity/MetaTileEntity.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index f3c7f583e07..55c5ef6366c 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -1689,6 +1689,11 @@ public void addAdditionalCreativeTabs(CreativeTabs creativeTab) { public void removeFromCreativeTab(CreativeTabs creativeTab) { Preconditions.checkNotNull(creativeTab, "creativeTab"); + if (creativeTab == CreativeTabs.SEARCH) { + GTLog.logger.error("Cannot remove MTEs from the creative search tab!", + new IllegalArgumentException()); + return; + } if (!creativeTabs.contains(creativeTab)) { GTLog.logger.error("{} is not in the creative tab {}.", this, creativeTab.tabLabel, new IllegalArgumentException()); From afccc5396b1c0f135695c7d0bb3716e6366a3f19 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Sun, 5 Jan 2025 22:46:47 -0500 Subject: [PATCH 5/5] Do not allow GT MTEs to be removed from the GT machines tab. --- .../java/gregtech/api/metatileentity/MetaTileEntity.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 55c5ef6366c..8f2171b3a73 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -1690,10 +1690,15 @@ public void addAdditionalCreativeTabs(CreativeTabs creativeTab) { public void removeFromCreativeTab(CreativeTabs creativeTab) { Preconditions.checkNotNull(creativeTab, "creativeTab"); if (creativeTab == CreativeTabs.SEARCH) { - GTLog.logger.error("Cannot remove MTEs from the creative search tab!", + GTLog.logger.error("Cannot remove MTEs from the creative search tab.", new IllegalArgumentException()); return; } + if (creativeTab == GTCreativeTabs.TAB_GREGTECH_MACHINES && + metaTileEntityId.getNamespace().equals(GTValues.MODID)) { + GTLog.logger.error("Cannot remove GT MTEs from the GT machines tab.", new IllegalArgumentException()); + return; + } if (!creativeTabs.contains(creativeTab)) { GTLog.logger.error("{} is not in the creative tab {}.", this, creativeTab.tabLabel, new IllegalArgumentException());