5858import com .google .common .collect .ImmutableSet ;
5959import com .google .common .collect .Multimap ;
6060import it .unimi .dsi .fastutil .objects .ObjectOpenHashSet ;
61+ import org .jetbrains .annotations .ApiStatus ;
6162import org .jetbrains .annotations .NotNull ;
6263import org .jetbrains .annotations .Nullable ;
6364import org .jetbrains .annotations .Range ;
6465
6566import java .util .ArrayList ;
66- import java .util .Arrays ;
6767import java .util .Collections ;
6868import java .util .HashSet ;
6969import java .util .List ;
70- import java .util .Objects ;
7170import java .util .Set ;
7271import java .util .function .IntSupplier ;
7372import java .util .function .Supplier ;
7675
7776public class ItemGTToolbelt extends ItemGTTool implements IDyeableItem {
7877
79- protected final static Set <String > VALID_OREDICTS = new ObjectOpenHashSet <>();
80-
8178 public ItemGTToolbelt (String domain , String id , Supplier <ItemStack > markerItem , IToolBehavior ... behaviors ) {
8279 super (domain , id , -1 ,
8380 new ToolDefinitionBuilder ().behaviors (behaviors ).cannotAttack ().attackSpeed (-2.4F ).build (),
@@ -153,14 +150,6 @@ else if (selected.getItem() instanceof IGTTool tool) {
153150 } else return Collections .emptyList ();
154151 }
155152
156- public static boolean isToolbeltableOredict (String oredict ) {
157- return VALID_OREDICTS .contains (oredict );
158- }
159-
160- public void registerValidOredict (String oredict ) {
161- VALID_OREDICTS .add (oredict );
162- }
163-
164153 @ Override
165154 public float getDestroySpeed (@ NotNull ItemStack stack , @ NotNull IBlockState state ) {
166155 ItemStack selected = getHandler (stack ).getSelectedStack ();
@@ -220,7 +209,7 @@ public int getHarvestLevel(@NotNull ItemStack stack, @NotNull String toolClass,
220209 ItemStack selected = getHandler (stack ).getSelectedStack ();
221210 if (!selected .isEmpty ()) {
222211 return selected .getItem ().getHarvestLevel (stack , toolClass , player , blockState );
223- } else return super . getHarvestLevel (stack , toolClass , player , blockState );
212+ } else return definition$ getHarvestLevel (stack , toolClass , player , blockState );
224213 }
225214
226215 @ NotNull
@@ -283,7 +272,7 @@ public int getDamage(@NotNull ItemStack stack) {
283272 ItemStack selected = getHandler (stack ).getSelectedStack ();
284273 if (!selected .isEmpty ()) {
285274 return selected .getItem ().getDamage (selected );
286- } else return super . getDamage (stack );
275+ } else return definition$ getDamage (stack );
287276 }
288277
289278 @ Override
@@ -299,7 +288,7 @@ public void setDamage(@NotNull ItemStack stack, int damage) {
299288 ItemStack selected = getHandler (stack ).getSelectedStack ();
300289 if (!selected .isEmpty ()) {
301290 selected .getItem ().setDamage (selected , damage );
302- } else super . setDamage (stack , damage );
291+ } else definition$ setDamage (stack , damage );
303292 }
304293
305294 @ Override
@@ -442,6 +431,10 @@ public void changeSelectedToolHotkey(int slot, ItemStack stack) {
442431 new PacketToolbeltSelectionChange (handler .selectedSlot ));
443432 }
444433
434+ /**
435+ * For use by {@link PacketToolbeltSelectionChange} only!
436+ */
437+ @ ApiStatus .Internal
445438 public void setSelectedTool (int slot , ItemStack stack ) {
446439 ToolStackHandler handler = getHandler (stack );
447440 if (slot < 0 || slot >= handler .getSlots ())
@@ -471,7 +464,8 @@ public void setSelectedTool(int slot, ItemStack stack) {
471464 if (result == EnumActionResult .PASS ) {
472465 ItemStack stack = player .getHeldItem (hand );
473466 ToolStackHandler handler = getHandler (stack );
474- if (handler .getSelectedSlot () == -1 && world .getTileEntity (pos ) instanceof MetaTileEntityHolder holder &&
467+ if (handler .getSelectedStack ().isEmpty () &&
468+ world .getTileEntity (pos ) instanceof MetaTileEntityHolder holder &&
475469 holder .getMetaTileEntity () instanceof MetaTileEntityMaintenanceHatch maintenance ) {
476470 maintenance .fixMaintenanceProblemsWithToolbelt (player , this , stack );
477471 return EnumActionResult .SUCCESS ;
@@ -573,10 +567,8 @@ public NBTTagCompound serializeNBT() {
573567
574568 @ Override
575569 public void deserializeNBT (NBTTagCompound nbt ) {
576- // make sure we can load all the slots, no matter what we're supposed to be limited to.
577- int minsize = nbt .hasKey ("Size" ) ? nbt .getInteger ("Size" ) : 0 ;
578570 // .copy() prevents double damage ticks in singleplayer
579- this .getHandler (minsize ).deserializeNBT (nbt .copy ());
571+ this .getHandler (slotCountSupplier . getAsInt () ).deserializeNBT (nbt .copy ());
580572 }
581573
582574 protected ToolStackHandler getHandler (int minsize ) {
@@ -611,7 +603,6 @@ protected static class ToolStackHandler extends ItemStackHandler {
611603 protected final ItemTool [] tools = new ItemTool [this .getSlots ()];
612604 protected final IGTTool [] gtTools = new IGTTool [this .getSlots ()];
613605 protected final Set <String > toolClasses = new ObjectOpenHashSet <>();
614- public final Set <String > oreDicts = new ObjectOpenHashSet <>();
615606
616607 private boolean passthrough = true ;
617608
@@ -646,7 +637,7 @@ public void disablePassthrough() {
646637
647638 public @ NotNull ItemStack getSelectedStack () {
648639 if (getSelectedSlot () == -1 ) return ItemStack .EMPTY ;
649- else return this .stacks . get (getSelectedSlot ());
640+ else return this .getStackInSlot (getSelectedSlot ());
650641 }
651642
652643 public Set <String > getToolClasses (boolean defaultEmpty ) {
@@ -715,14 +706,6 @@ protected void updateSlot(int slot) {
715706 }
716707
717708 protected void update () {
718- this .oreDicts .clear ();
719- Arrays .stream (gtTools ).filter (Objects ::nonNull ).map (igtTool -> {
720- Set <String > set = new ObjectOpenHashSet <>(igtTool .getSecondaryOreDicts ());
721- set .add (igtTool .getOreDictName ());
722- return set ;
723- }).forEach (this .oreDicts ::addAll );
724- this .oreDicts .retainAll (VALID_OREDICTS );
725-
726709 this .toolClasses .clear ();
727710 for (int i = 0 ; i < this .getSlots (); i ++) {
728711 if (tools [i ] != null ) this .toolClasses .addAll (tools [i ].getToolClasses (stacks .get (i )));
0 commit comments