77import com .minecolonies .api .util .ItemStackUtils ;
88import com .minecolonies .api .util .constant .Constants ;
99import com .minecolonies .api .util .constant .translation .ToolTranslationConstants ;
10+ import net .minecraft .core .registries .BuiltInRegistries ;
1011import net .minecraft .network .chat .Component ;
1112import net .minecraft .resources .ResourceLocation ;
1213import net .minecraft .world .entity .EquipmentSlot ;
@@ -86,73 +87,64 @@ public class ModEquipmentTypes
8687
8788 sword = register ("sword" ,
8889 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_SWORD ))
89- .setIsEquipment ((itemStack , equipmentType ) -> canPerformDefaultActions (itemStack , ToolActions .DEFAULT_SWORD_ACTIONS ) || Compatibility .isTinkersWeapon (
90- itemStack ))
91- .setEquipmentLevel ((itemStack , equipmentType ) -> {
92- if (Compatibility .isTinkersWeapon (itemStack ))
93- {
94- return Compatibility .getToolLevel (itemStack );
95- }
96- else if (itemStack .getItem () instanceof final TieredItem tieredItem )
97- {
98- return tieredItem .getTier ().getLevel ();
99- }
100- return -1 ;
101- })
90+ .setIsEquipment ((itemStack , equipmentType ) -> canPerformDefaultActions (itemStack , ToolActions .DEFAULT_SWORD_ACTIONS )
91+ || Compatibility .isTinkersWeapon (itemStack )
92+ || Compatibility .isCustomWeapon (itemStack ))
93+ .setEquipmentLevel (ModEquipmentTypes ::vanillaToolLevel )
10294 .build ());
10395
10496 bow = register ("bow" ,
10597 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_BOW ))
10698 .setIsEquipment ((itemStack , equipmentType ) -> itemStack .getItem () instanceof BowItem )
107- .setEquipmentLevel ((itemStack , equipmentType ) -> durabilityBasedLevel ( itemStack , Items . BOW . getMaxDamage () ))
99+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel ( itemStack ))
108100 .build ());
109101
110102 fishing_rod = register ("rod" ,
111103 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_FISHING_ROD ))
112104 .setIsEquipment ((itemStack , equipmentType ) -> canPerformDefaultActions (itemStack , ToolActions .DEFAULT_FISHING_ROD_ACTIONS ))
113- .setEquipmentLevel ((itemStack , equipmentType ) -> durabilityBasedLevel ( itemStack , Items . FISHING_ROD . getMaxDamage () ))
105+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel ( itemStack ))
114106 .build ());
115107
116108 shears = register ("shears" ,
117109 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_SHEARS ))
118110 .setIsEquipment ((itemStack , equipmentType ) -> canPerformDefaultActions (itemStack , ToolActions .DEFAULT_SHEARS_ACTIONS ))
119- .setEquipmentLevel ((itemStack , equipmentType ) -> durabilityBasedLevel ( itemStack , Items . SHEARS . getMaxDamage () ))
111+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel ( itemStack ))
120112 .build ());
121113
122114 shield = register ("shield" ,
123115 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_SHIELD ))
124116 .setIsEquipment ((itemStack , equipmentType ) -> canPerformDefaultActions (itemStack , ToolActions .DEFAULT_SHIELD_ACTIONS ))
125- .setEquipmentLevel ((itemStack , equipmentType ) -> durabilityBasedLevel ( itemStack , Items . SHIELD . getMaxDamage () ))
117+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel ( itemStack ))
126118 .build ());
127119
128120 helmet = register ("helmet" ,
129121 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_HELMET ))
130122 .setIsEquipment ((itemStack , equipmentType ) -> itemStack .getItem () instanceof ArmorItem armor && EquipmentSlot .HEAD .equals (armor .getEquipmentSlot ()))
131- .setEquipmentLevel ((itemStack , equipmentType ) -> ItemStackUtils . getArmorLevel (itemStack ))
123+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel (itemStack ))
132124 .build ());
133125
134126 leggings = register ("leggings" ,
135127 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_LEGGINGS ))
136128 .setIsEquipment ((itemStack , equipmentType ) -> itemStack .getItem () instanceof ArmorItem armor && EquipmentSlot .LEGS .equals (armor .getEquipmentSlot ()))
137- .setEquipmentLevel ((itemStack , equipmentType ) -> ItemStackUtils . getArmorLevel (itemStack ))
129+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel (itemStack ))
138130 .build ());
139131
140132 chestplate = register ("chestplate" ,
141133 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_CHEST_PLATE ))
142134 .setIsEquipment ((itemStack , equipmentType ) -> itemStack .getItem () instanceof ArmorItem armor && EquipmentSlot .CHEST .equals (armor .getEquipmentSlot ()))
143- .setEquipmentLevel ((itemStack , equipmentType ) -> ItemStackUtils . getArmorLevel (itemStack ))
135+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel (itemStack ))
144136 .build ());
145137
146138 boots = register ("boots" ,
147139 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_BOOTS ))
148140 .setIsEquipment ((itemStack , equipmentType ) -> itemStack .getItem () instanceof ArmorItem armor && EquipmentSlot .FEET .equals (armor .getEquipmentSlot ()))
149- .setEquipmentLevel ((itemStack , equipmentType ) ->ItemStackUtils . getArmorLevel (itemStack ))
141+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel (itemStack ))
150142 .build ());
151143
152144 flint_and_steel = register ("flintandsteel" ,
153145 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_LIGHTER ))
154146 .setIsEquipment ((itemStack , equipmentType ) -> itemStack .getItem () instanceof FlintAndSteelItem )
155- .setEquipmentLevel ((itemStack , equipmentType ) -> durabilityBasedLevel ( itemStack , Items . FLINT_AND_STEEL . getMaxDamage () ))
147+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel ( itemStack ))
156148 .build ());
157149
158150 lead = register ("lead" ,
@@ -164,9 +156,8 @@ else if (itemStack.getItem() instanceof final TieredItem tieredItem)
164156 spear = register ("spear" ,
165157 builder -> builder .setDisplayName (Component .translatable (ToolTranslationConstants .TOOL_TYPE_SPEAR ))
166158 .setIsEquipment ((itemStack , equipmentType ) -> itemStack .is (ModItems .spear ))
167- .setEquipmentLevel ((itemStack , equipmentType ) -> durabilityBasedLevel ( itemStack , ModItems . spear . getMaxDamage () ))
159+ .setEquipmentLevel ((itemStack , equipmentType ) -> Compatibility . getItemLevel ( itemStack ))
168160 .build ());
169-
170161 }
171162
172163 /**
@@ -203,15 +194,11 @@ private static RegistryObject<EquipmentTypeEntry> register(final String id, fina
203194 */
204195 public static int vanillaToolLevel (final ItemStack itemStack , final EquipmentTypeEntry equipmentType )
205196 {
206- if (Compatibility .isTinkersTool (itemStack , equipmentType ))
197+ if (Compatibility .isTinkersTool (itemStack , equipmentType ) || Compatibility . isTinkersWeapon ( itemStack ) )
207198 {
208199 return Compatibility .getToolLevel (itemStack );
209200 }
210- else if (itemStack .getItem () instanceof final TieredItem tieredItem ) // most tools
211- {
212- return tieredItem .getTier ().getLevel ();
213- }
214- return -1 ;
201+ return Compatibility .getItemLevel (itemStack );
215202 }
216203
217204 /**
@@ -230,6 +217,63 @@ public static int durabilityBasedLevel(ItemStack itemStack, int vanillaItemDurab
230217 return Math .min (itemStack .getMaxDamage () / vanillaItemDurability , 5 );
231218 }
232219
220+ /**
221+ * Populate the tier registry with every item currently in the game.
222+ * Called once during FMLCommonSetupEvent via MineColonies.preInit.
223+ */
224+ @ SuppressWarnings ("null" )
225+ public static void initRegisterEquipmentTiers ()
226+ {
227+ final int bowRef = new ItemStack (Items .BOW ).getMaxDamage ();
228+ final int rodRef = new ItemStack (Items .FISHING_ROD ).getMaxDamage ();
229+ final int shearsRef = new ItemStack (Items .SHEARS ).getMaxDamage ();
230+ final int shieldRef = new ItemStack (Items .SHIELD ).getMaxDamage ();
231+ final int flintRef = new ItemStack (Items .FLINT_AND_STEEL ).getMaxDamage ();
232+ final int tridentRef = new ItemStack (Items .TRIDENT ).getMaxDamage ();
233+
234+ for (final Item item : BuiltInRegistries .ITEM )
235+ {
236+ final ItemStack dummy = new ItemStack (item );
237+
238+ if (item instanceof final TieredItem tiered )
239+ {
240+ Compatibility .registerItemTierIfAbsent (item , tiered .getTier (), (int ) tiered .getTier ().getAttackDamageBonus ());
241+ }
242+ else if (item instanceof ArmorItem )
243+ {
244+ final int level = ItemStackUtils .getArmorLevel (dummy );
245+ if (level > 0 )
246+ {
247+ Compatibility .registerItemTierIfAbsent (item , level );
248+ }
249+ }
250+ else if (item instanceof BowItem )
251+ {
252+ Compatibility .registerItemTierIfAbsent (item , durabilityBasedLevel (dummy , bowRef ));
253+ }
254+ else if (canPerformDefaultActions (dummy , ToolActions .DEFAULT_FISHING_ROD_ACTIONS ))
255+ {
256+ Compatibility .registerItemTierIfAbsent (item , durabilityBasedLevel (dummy , rodRef ));
257+ }
258+ else if (canPerformDefaultActions (dummy , ToolActions .DEFAULT_SHEARS_ACTIONS ))
259+ {
260+ Compatibility .registerItemTierIfAbsent (item , durabilityBasedLevel (dummy , shearsRef ));
261+ }
262+ else if (canPerformDefaultActions (dummy , ToolActions .DEFAULT_SHIELD_ACTIONS ))
263+ {
264+ Compatibility .registerItemTierIfAbsent (item , durabilityBasedLevel (dummy , shieldRef ));
265+ }
266+ else if (item instanceof FlintAndSteelItem )
267+ {
268+ Compatibility .registerItemTierIfAbsent (item , durabilityBasedLevel (dummy , flintRef ));
269+ }
270+ else if (item instanceof TridentItem )
271+ {
272+ Compatibility .registerItemTierIfAbsent (item , durabilityBasedLevel (dummy , tridentRef ));
273+ }
274+ }
275+ }
276+
233277 /**
234278 * Determine whether an item stack can perform the default actions of a given tool.
235279 *
0 commit comments