Skip to content

Commit 24d0b55

Browse files
authored
fix(compat): added try catch in initRegisterEquipmentTiers() to to prevent other mods from crashing minecolonies registration. Now all errors show up nicely in the log. (#11705)
1 parent 8199d70 commit 24d0b55

1 file changed

Lines changed: 56 additions & 33 deletions

File tree

src/main/java/com/minecolonies/api/equipment/ModEquipmentTypes.java

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.minecolonies.api.equipment;
22

33
import com.minecolonies.api.IMinecoloniesAPI;
4+
import com.minecolonies.api.util.Log;
45
import com.minecolonies.api.compatibility.Compatibility;
56
import com.minecolonies.api.equipment.registry.EquipmentTypeEntry;
67
import com.minecolonies.api.items.ModItems;
@@ -225,47 +226,69 @@ public static int durabilityBasedLevel(ItemStack itemStack, int vanillaItemDurab
225226
@SuppressWarnings("null")
226227
public static void initRegisterEquipmentTiers()
227228
{
228-
final int bowRef = new ItemStack(Items.BOW).getMaxDamage();
229-
final int rodRef = new ItemStack(Items.FISHING_ROD).getMaxDamage();
230-
final int shearsRef = new ItemStack(Items.SHEARS).getMaxDamage();
231-
final int shieldRef = new ItemStack(Items.SHIELD).getMaxDamage();
232-
final int flintRef = new ItemStack(Items.FLINT_AND_STEEL).getMaxDamage();
229+
int bowRef = 0;
230+
int rodRef = 0;
231+
int shearsRef = 0;
232+
int shieldRef = 0;
233+
int flintRef = 0;
234+
try
235+
{
236+
bowRef = new ItemStack(Items.BOW).getMaxDamage();
237+
rodRef = new ItemStack(Items.FISHING_ROD).getMaxDamage();
238+
shearsRef = new ItemStack(Items.SHEARS).getMaxDamage();
239+
shieldRef = new ItemStack(Items.SHIELD).getMaxDamage();
240+
flintRef = new ItemStack(Items.FLINT_AND_STEEL).getMaxDamage();
241+
}
242+
catch (Exception e)
243+
{
244+
// In case something goes wrong with fetching durability references, we can still continue and just won't have durability based tiers for those items.
245+
Log.getLogger().error("Failed to fetch getMaxDamage references for equipment tier registration, durability based tiers for certain items will not be registered.", e);
246+
return;
247+
}
248+
233249

234250
for (final Item item : BuiltInRegistries.ITEM)
235251
{
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)
252+
try
243253
{
244-
final int level = ItemStackUtils.getArmorLevel(dummy);
245-
if (level > 0)
254+
final ItemStack dummy = new ItemStack(item);
255+
256+
if (item instanceof final TieredItem tiered)
246257
{
247-
Compatibility.registerItemTierIfAbsent(item, level);
258+
Compatibility.registerItemTierIfAbsent(item, tiered.getTier(), (int) tiered.getTier().getAttackDamageBonus());
259+
}
260+
else if (item instanceof ArmorItem)
261+
{
262+
final int level = ItemStackUtils.getArmorLevel(dummy);
263+
if (level > 0)
264+
{
265+
Compatibility.registerItemTierIfAbsent(item, level);
266+
}
267+
}
268+
else if (item instanceof BowItem)
269+
{
270+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, bowRef));
271+
}
272+
else if (canPerformDefaultActions(dummy, ItemAbilities.DEFAULT_FISHING_ROD_ACTIONS))
273+
{
274+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, rodRef));
275+
}
276+
else if (canPerformDefaultActions(dummy, ItemAbilities.DEFAULT_SHEARS_ACTIONS))
277+
{
278+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, shearsRef));
279+
}
280+
else if (canPerformDefaultActions(dummy, ItemAbilities.DEFAULT_SHIELD_ACTIONS))
281+
{
282+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, shieldRef));
283+
}
284+
else if (item instanceof FlintAndSteelItem)
285+
{
286+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, flintRef));
248287
}
249288
}
250-
else if (item instanceof BowItem)
251-
{
252-
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, bowRef));
253-
}
254-
else if (canPerformDefaultActions(dummy, ItemAbilities.DEFAULT_FISHING_ROD_ACTIONS))
255-
{
256-
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, rodRef));
257-
}
258-
else if (canPerformDefaultActions(dummy, ItemAbilities.DEFAULT_SHEARS_ACTIONS))
259-
{
260-
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, shearsRef));
261-
}
262-
else if (canPerformDefaultActions(dummy, ItemAbilities.DEFAULT_SHIELD_ACTIONS))
263-
{
264-
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, shieldRef));
265-
}
266-
else if (item instanceof FlintAndSteelItem)
289+
catch (Exception e)
267290
{
268-
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, flintRef));
291+
Log.getLogger().error("Failed to register equipment tiers for item: " + BuiltInRegistries.ITEM.getKey(item), e);
269292
}
270293
}
271294
}

0 commit comments

Comments
 (0)