Skip to content

Commit aeb1ad8

Browse files
authored
fix(compat): adding try catch to the initRegisterEquipmentTiers() to prevent other mods from crashing minecolonies loading. (#11707)
1 parent 210576d commit aeb1ad8

1 file changed

Lines changed: 61 additions & 38 deletions

File tree

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

Lines changed: 61 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.minecolonies.api.compatibility.Compatibility;
55
import com.minecolonies.api.equipment.registry.EquipmentTypeEntry;
66
import com.minecolonies.api.items.ModItems;
7+
import com.minecolonies.api.util.Log;
78
import com.minecolonies.api.util.ItemStackUtils;
89
import com.minecolonies.api.util.constant.Constants;
910
import com.minecolonies.api.util.constant.translation.ToolTranslationConstants;
@@ -224,52 +225,74 @@ public static int durabilityBasedLevel(ItemStack itemStack, int vanillaItemDurab
224225
@SuppressWarnings("null")
225226
public static void initRegisterEquipmentTiers()
226227
{
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();
228+
int bowRef = 0;
229+
int rodRef = 0;
230+
int shearsRef = 0;
231+
int shieldRef = 0;
232+
int flintRef = 0;
233+
int tridentRef = 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+
tridentRef = new ItemStack(Items.TRIDENT).getMaxDamage();
242+
}
243+
catch (Exception e)
244+
{
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+
}
233248

234249
for (final Item item : BuiltInRegistries.ITEM)
235250
{
236-
final ItemStack dummy = new ItemStack(item);
237-
238-
if (item instanceof final TieredItem tiered)
251+
try
239252
{
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)
253+
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, ToolActions.DEFAULT_FISHING_ROD_ACTIONS))
273+
{
274+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, rodRef));
275+
}
276+
else if (canPerformDefaultActions(dummy, ToolActions.DEFAULT_SHEARS_ACTIONS))
277+
{
278+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, shearsRef));
279+
}
280+
else if (canPerformDefaultActions(dummy, ToolActions.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));
287+
}
288+
else if (item instanceof TridentItem)
289+
{
290+
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, tridentRef));
248291
}
249292
}
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)
293+
catch (Exception e)
271294
{
272-
Compatibility.registerItemTierIfAbsent(item, durabilityBasedLevel(dummy, tridentRef));
295+
Log.getLogger().error("Failed to register equipment tiers for item: " + BuiltInRegistries.ITEM.getKey(item), e);
273296
}
274297
}
275298
}

0 commit comments

Comments
 (0)