From b95d777e54bbd1b500f07ab8866644bd34c51dec Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 13 Aug 2025 14:52:38 -0400 Subject: [PATCH 01/11] Add support for the Blood Iron Caps from Blood Arsenal. They now reduce the LP cost for the blood cores' regen and cause the Weakness 3 effect when used as a weapon just like the Alchemical Caps. Blood Wood Cores already match the .startsWith("blood") for the Weakness check and have their own logic for blood iron caps, so nothing needs to be changed to support them. --- src/main/java/fox/spiteful/forbidden/FMEventHandler.java | 3 ++- .../fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java | 3 ++- .../fox/spiteful/forbidden/items/wands/BloodWandUpdate.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java index 1a11cca..a435afa 100644 --- a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java +++ b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java @@ -498,7 +498,8 @@ public void onGetHurt(LivingHurtEvent event) { if (event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) { ItemStack equip = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem(); if (equip != null && equip.getItem() instanceof ItemWandCasting) { - if (((ItemWandCasting) equip.getItem()).getCap(equip).getTag().equals("alchemical") + String capTag = ((ItemWandCasting) equip.getItem()).getCap(equip).getTag(); + if (capTag.equals("alchemical") || capTag.equals("blood_iron") && ((ItemWandCasting) equip.getItem()).getRod(equip).getTag().startsWith("blood")) { event.entityLiving.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2)); } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java index 72d450f..ce90032 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java @@ -23,7 +23,8 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); int cost; - if (((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("alchemical")) + String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); + if (capTag.equals("alchemical") || capTag.equals("blood_iron")) cost = Config.bloodvis - 1; else cost = Config.bloodvis; diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java index 54085f0..cf91d95 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java @@ -20,7 +20,8 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); int cost; - if (((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("alchemical")) + String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); + if (capTag.equals("alchemical") || capTag.equals("blood_iron")) cost = Config.bloodvis - 1; else cost = Config.bloodvis; From c11690273cf5cc97665d1ce25fa11ec3e9cc2c6b Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 13 Aug 2025 15:06:56 -0400 Subject: [PATCH 02/11] Clean up the wand update classes: Clean up c-style array declarations Use enhanced for loops Rename ignored exception variables and remove redundant returns --- .../fox/spiteful/forbidden/FMEventHandler.java | 4 ++-- .../forbidden/items/wands/BloodStaffUpdate.java | 16 +++++++--------- .../forbidden/items/wands/BloodWandUpdate.java | 16 +++++++--------- .../items/wands/CreativeWandUpdate.java | 10 +++++----- .../items/wands/InfernalWandUpdate.java | 8 ++++---- .../forbidden/items/wands/ManaStaffUpdate.java | 10 +++++----- .../forbidden/items/wands/ManaWandUpdate.java | 10 +++++----- .../items/wands/ProfaneWandUpdate.java | 9 +++++---- .../items/wands/TaintedWandUpdate.java | 8 ++++---- .../items/wands/YandereWandUpdate.java | 17 +++++++---------- 10 files changed, 51 insertions(+), 57 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java index a435afa..ee9b929 100644 --- a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java +++ b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java @@ -495,9 +495,9 @@ public void onGetHurt(LivingHurtEvent event) { } } - if (event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) { + if (event.source.getEntity() instanceof EntityPlayer) { ItemStack equip = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem(); - if (equip != null && equip.getItem() instanceof ItemWandCasting) { + if (equip.getItem() instanceof ItemWandCasting) { String capTag = ((ItemWandCasting) equip.getItem()).getCap(equip).getTag(); if (capTag.equals("alchemical") || capTag.equals("blood_iron") && ((ItemWandCasting) equip.getItem()).getRod(equip).getTag().startsWith("blood")) { diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java index ce90032..025b02f 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java @@ -13,7 +13,7 @@ public class BloodStaffUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (Compat.bm && Config.crossWand && player.ticksExisted % 25 == 0) { @@ -30,25 +30,23 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { cost = Math.max(0, cost); - for (int x = 0; x < primals.length; x++) { + for (Aspect primal : primals) { int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]); + - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); if (deficit > 0) { deficit = Math.min(deficit, 100); if (player.capabilities.isCreativeMode) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); else if (SoulNetworkHandler.syphonFromNetwork(itemstack, cost * deficit) > 0) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); else if (syphonHealth(player)) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); return; } else return; } } - } catch (Exception e) { - return; - } + } catch (Exception ignored) {} } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java index cf91d95..df5ee99 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java @@ -12,7 +12,7 @@ public class BloodWandUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (Compat.bm && Config.crossWand && player.ticksExisted % 100 == 0) { @@ -27,25 +27,23 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { cost = Math.max(0, cost); - for (int x = 0; x < primals.length; x++) { + for (Aspect primal : primals) { int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]); + - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); if (deficit > 0) { deficit = Math.min(deficit, 100); if (player.capabilities.isCreativeMode) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); else if (SoulNetworkHandler.syphonFromNetwork(itemstack, cost * deficit) > 0) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); else if (syphonHealth(player)) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); return; } else return; } } - } catch (Throwable e) { - return; - } + } catch (Throwable ignored) {} } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java index b3db8c1..bc14fdc 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java @@ -9,17 +9,17 @@ public class CreativeWandUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { - for (int x = 0; x < primals.length; x++) { - if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]) + for (Aspect primal : primals) { + if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) < ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack)) { ((ItemWandCasting) itemstack.getItem()).addVis( itemstack, - primals[x], + primal, ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]), + - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal), true); } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java index b7b4a87..67dbd6e 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java @@ -10,15 +10,15 @@ public class InfernalWandUpdate implements IWandRodOnUpdate { - Aspect primals[] = { Aspect.ORDER, Aspect.ENTROPY, Aspect.AIR, Aspect.EARTH, Aspect.WATER }; + Aspect[] primals = { Aspect.ORDER, Aspect.ENTROPY, Aspect.AIR, Aspect.EARTH, Aspect.WATER }; public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (player.ticksExisted % 100 == 0) { if (player.worldObj.provider.dimensionId == -1) { - for (int x = 0; x < primals.length; x++) { - if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]) + for (Aspect primal : primals) { + if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) < ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) / 10) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); } } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java index 62b1529..40dc1d0 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java @@ -13,7 +13,7 @@ public class ManaStaffUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (Compat.am2 && Config.crossWand) { @@ -29,18 +29,18 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (prop == null || prop.getCurrentMana() <= 0) return; - for (int x = 0; x < primals.length; x++) { + for (Aspect primal : primals) { int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]); + - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); if (deficit > 0) { deficit = Math.min(deficit, 100); if (prop.getCurrentMana() > cost * deficit) { prop.setCurrentMana(prop.getCurrentMana() - cost * deficit); - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); } } } - } catch (Throwable e) {} + } catch (Throwable ignored) {} } } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java index fcf8410..9c9ae22 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java @@ -13,7 +13,7 @@ public class ManaWandUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (Compat.am2 && Config.crossWand) { @@ -29,18 +29,18 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (prop == null || prop.getCurrentMana() <= 0) return; - for (int x = 0; x < primals.length; x++) { + for (Aspect primal : primals) { int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]); + - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); if (deficit > 0) { deficit = Math.min(deficit, 100); if (prop.getCurrentMana() > cost * deficit) { prop.setCurrentMana(prop.getCurrentMana() - cost * deficit); - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); } } } - } catch (Throwable e) {} + } catch (Throwable ignored) {} } } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java index f54d443..5a8a847 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java @@ -12,7 +12,7 @@ public class ProfaneWandUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { @@ -24,15 +24,16 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { tag.setInteger("contract", 25000); } else if (tag.getInteger("contract") <= 0) return; - for (int x = 0; x < primals.length && tag.getInteger("contract") > 0; x++) { + for (Aspect primal : primals) { int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]); + - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); if (deficit > 0) { int restore = Math.min(tag.getInteger("contract"), deficit); - ((ItemWandCasting) itemstack.getItem()).addRealVis(itemstack, primals[x], restore, true); + ((ItemWandCasting) itemstack.getItem()).addRealVis(itemstack, primal, restore, true); tag.setInteger("contract", tag.getInteger("contract") - restore); if (player.worldObj.rand.nextInt(2501) < restore) Thaumcraft.addStickyWarpToPlayer(player, 1); } + if (tag.getInteger("contract") <= 0) break; } if (tag.getInteger("contract") <= 0) { diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java index 58ce8c0..9e0f909 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java @@ -9,16 +9,16 @@ public class TaintedWandUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (player.ticksExisted % 100 == 0 && player.worldObj.getBiomeGenForCoords((int) player.posX, (int) player.posZ).biomeID == thaumcraft.common.config.Config.biomeTaintID) { - for (int x = 0; x < primals.length; x++) { - if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]) + for (Aspect primal : primals) { + if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) < ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) / 10) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); } } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java index 605e940..42add35 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java @@ -12,32 +12,29 @@ public class YandereWandUpdate implements IWandRodOnUpdate { - Aspect primals[] = Aspect.getPrimalAspects().toArray(new Aspect[0]); + Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (Compat.botan && Config.crossWand && player.ticksExisted % 40 == 0 && checkHotbar(itemstack, player)) { try { int cost; - if (((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("manasteel") - || ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("elementium")) - cost = Config.manavis - 2; + String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); + if (capTag.equals("manasteel") || capTag.equals("elementium")) cost = Config.manavis - 2; else cost = Config.manavis; cost = Math.max(0, cost); - for (int x = 0; x < primals.length; x++) { + for (Aspect primal : primals) { int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primals[x]); + - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); if (deficit > 0) { deficit = Math.min(deficit, 100); if (ManaItemHandler.requestManaExact(itemstack, player, cost * deficit, true)) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primals[x], 1, true); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); } } - } catch (Throwable e) { - return; - } + } catch (Throwable ignored) {} } } From 4216eb9c9e2722a69e17b6dc04b0a12a35e0b57c Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 13 Aug 2025 15:21:07 -0400 Subject: [PATCH 03/11] Spotless --- .../fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java | 3 +-- .../fox/spiteful/forbidden/items/wands/BloodWandUpdate.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java index 025b02f..6e95ab6 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java @@ -24,8 +24,7 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { int cost; String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - if (capTag.equals("alchemical") || capTag.equals("blood_iron")) - cost = Config.bloodvis - 1; + if (capTag.equals("alchemical") || capTag.equals("blood_iron")) cost = Config.bloodvis - 1; else cost = Config.bloodvis; cost = Math.max(0, cost); diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java index df5ee99..1e7a9cf 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java @@ -21,8 +21,7 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { int cost; String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - if (capTag.equals("alchemical") || capTag.equals("blood_iron")) - cost = Config.bloodvis - 1; + if (capTag.equals("alchemical") || capTag.equals("blood_iron")) cost = Config.bloodvis - 1; else cost = Config.bloodvis; cost = Math.max(0, cost); From 1b2f2a5337259a3cf85ec869a7728c7f36425885 Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 13 Aug 2025 20:14:22 -0400 Subject: [PATCH 04/11] Add Equivalent Rod Placeholder Item (#16) --- .../forbidden/VillagerHereticManager.java | 6 +- .../forbidden/items/ForbiddenItems.java | 2 +- .../forbidden/items/wands/ItemWandCores.java | 67 +++++++++--------- .../items/wands/ProfaneWandUpdate.java | 4 +- .../assets/forbidden/lang/en_US.lang | 1 + .../textures/items/wand_rod_equivalent.png | Bin 0 -> 258 bytes 6 files changed, 40 insertions(+), 40 deletions(-) create mode 100644 src/main/resources/assets/forbidden/textures/items/wand_rod_equivalent.png diff --git a/src/main/java/fox/spiteful/forbidden/VillagerHereticManager.java b/src/main/java/fox/spiteful/forbidden/VillagerHereticManager.java index 78f94f0..92bf734 100644 --- a/src/main/java/fox/spiteful/forbidden/VillagerHereticManager.java +++ b/src/main/java/fox/spiteful/forbidden/VillagerHereticManager.java @@ -12,8 +12,6 @@ import fox.spiteful.forbidden.items.ForbiddenItems; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.wands.WandCap; -import thaumcraft.api.wands.WandRod; import thaumcraft.common.config.ConfigItems; import thaumcraft.common.items.wands.ItemWandCasting; @@ -75,8 +73,8 @@ public void manipulateTradesForVillager(EntityVillager villager, MerchantRecipeL new ItemStack(Items.glowstone_dust, 8 + random.nextInt(9)))); ItemStack wand = new ItemStack(ConfigItems.itemWandCasting, 1, 36); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("iron")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("profane")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ConfigItems.WAND_CAP_IRON); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_PROFANE); ((ItemWandCasting) wand.getItem()).storeAllVis( wand, new AspectList().add(Aspect.FIRE, 5000).add(Aspect.WATER, 5000).add(Aspect.EARTH, 5000) diff --git a/src/main/java/fox/spiteful/forbidden/items/ForbiddenItems.java b/src/main/java/fox/spiteful/forbidden/items/ForbiddenItems.java index 6492ca7..aa3045e 100644 --- a/src/main/java/fox/spiteful/forbidden/items/ForbiddenItems.java +++ b/src/main/java/fox/spiteful/forbidden/items/ForbiddenItems.java @@ -201,7 +201,7 @@ public static void addItems() { WAND_ROD_EQUIVALENT = new WandRod( "equivalent", 100, - new ItemStack(wandCore, 1, 11), + new ItemStack(wandCore, 1, 14), 12, new ResourceLocation("forbidden", "textures/models/wand_rod_equivalent.png")); WAND_ROD_PROFANE = new WandRod( diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ItemWandCores.java b/src/main/java/fox/spiteful/forbidden/items/wands/ItemWandCores.java index 7abb3b2..d5a3274 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ItemWandCores.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ItemWandCores.java @@ -13,10 +13,9 @@ import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.Forbidden; import fox.spiteful.forbidden.compat.Compat; +import fox.spiteful.forbidden.items.ForbiddenItems; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.wands.WandCap; -import thaumcraft.api.wands.WandRod; import thaumcraft.common.config.ConfigItems; import thaumcraft.common.items.wands.ItemWandCasting; @@ -24,7 +23,7 @@ public class ItemWandCores extends Item { public final String[] types = { "tainted", "infernal", "soul", "blood", "witchwood", "profane", "blood_inert", "livingwood", "livingwood_inert", "blood_staff", "witchwood_staff", "dreamwood", "dreamwood_inert", - "dreamwood_staff" }; + "dreamwood_staff", "equivalent" }; public IIcon[] icon; public ItemWandCores() { @@ -55,24 +54,24 @@ public void getSubItems(Item item, CreativeTabs xCreativeTabs, List list) { } ItemStack wand = new ItemStack(ConfigItems.itemWandCasting, 1, 72); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("thaumium")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("tainted")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ConfigItems.WAND_CAP_THAUMIUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_TAINTED); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 72); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("thaumium")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("infernal")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ConfigItems.WAND_CAP_THAUMIUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_INFERNAL); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 2000); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("orichalcum")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("neutronium")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_ORICHALCUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_NEUTRONIUM); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 2000); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("orichalcum")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("neutronium_staff")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_ORICHALCUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.STAFF_ROD_NEUTRONIUM); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 36); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("iron")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("profane")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ConfigItems.WAND_CAP_IRON); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_PROFANE); ((ItemWandCasting) wand.getItem()).storeAllVis( wand, new AspectList().add(Aspect.FIRE, 5000).add(Aspect.WATER, 5000).add(Aspect.EARTH, 5000) @@ -80,46 +79,48 @@ public void getSubItems(Item item, CreativeTabs xCreativeTabs, List list) { list.add(wand); if (Compat.bm && Config.crossWand) { wand = new ItemStack(ConfigItems.itemWandCasting, 1, 84); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("alchemical")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("blood")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_ALCHEMICAL); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_BLOOD); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 168); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("alchemical")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("blood_staff")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_ALCHEMICAL); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.STAFF_ROD_BLOOD); list.add(wand); } if (Compat.am2 && Config.crossWand) { wand = new ItemStack(ConfigItems.itemWandCasting, 1, 72); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("vinteum")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("witchwood")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_VINTEUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_WITCHWOOD); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 144); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("vinteum")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("witchwood_staff")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_VINTEUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.STAFF_ROD_WITCHWOOD); list.add(wand); } if (Compat.botan && Config.crossWand) { wand = new ItemStack(ConfigItems.itemWandCasting, 1, 84); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("manasteel")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("livingwood")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_MANASTEEL); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_LIVINGWOOD); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 84); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("elementium")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("dreamwood")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_ELEMENTIUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_DREAMWOOD); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 144); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("elementium")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("dreamwood_staff")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_ELEMENTIUM); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.STAFF_ROD_DREAMWOOD); list.add(wand); wand = new ItemStack(ConfigItems.itemWandCasting, 1, 1); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("terrasteel")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("wood")); + ((ItemWandCasting) wand.getItem()).setCap(wand, ForbiddenItems.WAND_CAP_TERRASTEEL); + ((ItemWandCasting) wand.getItem()).setRod(wand, ConfigItems.WAND_ROD_WOOD); + list.add(wand); + } + if (Compat.ee3 && Config.crossWand) { + wand = new ItemStack(ConfigItems.itemWandCasting, 1, 84); + ((ItemWandCasting) wand.getItem()).setCap(wand, ConfigItems.WAND_CAP_VOID); + ((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_EQUIVALENT); list.add(wand); } - wand = new ItemStack(ConfigItems.itemWandCasting, 1, 84); - ((ItemWandCasting) wand.getItem()).setCap(wand, (WandCap) WandCap.caps.get("void")); - ((ItemWandCasting) wand.getItem()).setRod(wand, (WandRod) WandRod.rods.get("equivalent")); - list.add(wand); } @Override diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java index 5a8a847..e7fb3ae 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java @@ -4,9 +4,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import fox.spiteful.forbidden.items.ForbiddenItems; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.wands.IWandRodOnUpdate; -import thaumcraft.api.wands.WandRod; import thaumcraft.common.Thaumcraft; import thaumcraft.common.items.wands.ItemWandCasting; @@ -37,7 +37,7 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { } if (tag.getInteger("contract") <= 0) { - ((ItemWandCasting) itemstack.getItem()).setRod(itemstack, WandRod.rods.get("profaned")); + ((ItemWandCasting) itemstack.getItem()).setRod(itemstack, ForbiddenItems.WAND_ROD_PROFANED); Thaumcraft.addStickyWarpToPlayer(player, 1); player.worldObj.spawnParticle( "largeexplode", diff --git a/src/main/resources/assets/forbidden/lang/en_US.lang b/src/main/resources/assets/forbidden/lang/en_US.lang index 8afb852..8c039b3 100644 --- a/src/main/resources/assets/forbidden/lang/en_US.lang +++ b/src/main/resources/assets/forbidden/lang/en_US.lang @@ -84,6 +84,7 @@ item.WandCores.witchwood_staff.name=Witchwood Staff Core item.WandCores.dreamwood.name=Dreamwood Rod item.WandCores.dreamwood_inert.name=Silent Dreamwood Rod item.WandCores.dreamwood_staff.name=Dreamwood Staff Core +item.WandCores.equivalent.name=§kAlchemical§r Rod item.WandCaps.name=Wand Cap item.WandCaps.alchemical.name=Alchemical Cap item.WandCaps.vinteum.name=Vinteum Cap diff --git a/src/main/resources/assets/forbidden/textures/items/wand_rod_equivalent.png b/src/main/resources/assets/forbidden/textures/items/wand_rod_equivalent.png new file mode 100644 index 0000000000000000000000000000000000000000..0c0bdb243e8d8b7c6b1da2f100ac776eaae50035 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`)Ym%P6qOKdb&7< zSoB_>f zxn|YQFT3ygKU}}zTG!UFd&!FxKh+kqCRD`)gofseKcACQs1wEd*v_c^xnNn@?E}2Zd{fp_qpFK+Fi@&au`f|_v20O! Date: Thu, 14 Aug 2025 18:12:12 -0400 Subject: [PATCH 05/11] Move duplicate primal arrays, max vis checks, and hotbar checks to new superclass Cache max vis checks Unroll some if blocks Replace Throwable with Exception Fix position rounding for tainted rod Use ternary operators where relevant Replace repeated profane contract requests with a local variable --- .../items/wands/BloodStaffUpdate.java | 68 ++++++++---------- .../items/wands/BloodWandUpdate.java | 66 ++++++++--------- .../items/wands/CreativeWandUpdate.java | 16 ++--- .../items/wands/DarkWandRodOnUpdate.java | 25 +++++++ .../items/wands/InfernalWandUpdate.java | 12 ++-- .../items/wands/ManaStaffUpdate.java | 51 ++++++------- .../forbidden/items/wands/ManaWandUpdate.java | 51 ++++++------- .../items/wands/ProfaneWandUpdate.java | 72 ++++++++++--------- .../items/wands/TaintedWandUpdate.java | 23 +++--- .../items/wands/YandereWandUpdate.java | 53 ++++++-------- 10 files changed, 212 insertions(+), 225 deletions(-) create mode 100644 src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java index 6e95ab6..29c32f2 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java @@ -8,45 +8,45 @@ import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; -public class BloodStaffUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class BloodStaffUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (Compat.bm && Config.crossWand && player.ticksExisted % 25 == 0) { - try { - if (!checkHotbar(itemstack, player)) return; + if (!Compat.bm || !Config.crossWand || player.ticksExisted % 25 != 0) { + return; + } + try { + if (!checkHotbar(itemstack, player)) return; - SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); + SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); - int cost; - String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - if (capTag.equals("alchemical") || capTag.equals("blood_iron")) cost = Config.bloodvis - 1; - else cost = Config.bloodvis; + String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); + int cost = capTag.equals("alchemical") || capTag.equals("blood_iron") ? Config.bloodvis - 1 + : Config.bloodvis; - cost = Math.max(0, cost); + cost = Math.max(0, cost); - for (Aspect primal : primals) { - int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit > 0) { - deficit = Math.min(deficit, 100); - if (player.capabilities.isCreativeMode) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - else if (SoulNetworkHandler.syphonFromNetwork(itemstack, cost * deficit) > 0) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - else if (syphonHealth(player)) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - return; - } else return; - } + int maxVis = getMaxVis(itemstack); + for (Aspect primal : primals) { + int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); + if (deficit <= 0) { + continue; + } + deficit = Math.min(deficit, 100); + if (player.capabilities.isCreativeMode) + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + else if (SoulNetworkHandler.syphonFromNetwork(itemstack, cost * deficit) > 0) + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + else if (syphonHealth(player)) { + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + return; + } else { + return; } + } - } catch (Exception ignored) {} - } + } catch (Exception ignored) {} } public boolean syphonHealth(EntityPlayer player) { @@ -58,14 +58,8 @@ public boolean syphonHealth(EntityPlayer player) { player.setHealth(0); player.onDeath(new DamageSource("blooderp")); return true; - } else return false; - } - - private boolean checkHotbar(ItemStack stack, EntityPlayer player) { - for (int x = 0; x < 9; ++x) { - ItemStack item = player.inventory.getStackInSlot(x); - if (item == stack) return true; + } else { + return false; } - return false; } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java index 1e7a9cf..48038ab 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java @@ -7,49 +7,51 @@ import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; -public class BloodWandUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class BloodWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (Compat.bm && Config.crossWand && player.ticksExisted % 100 == 0) { - try { - SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); - - int cost; - String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - if (capTag.equals("alchemical") || capTag.equals("blood_iron")) cost = Config.bloodvis - 1; - else cost = Config.bloodvis; - - cost = Math.max(0, cost); - - for (Aspect primal : primals) { - int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit > 0) { - deficit = Math.min(deficit, 100); - if (player.capabilities.isCreativeMode) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - else if (SoulNetworkHandler.syphonFromNetwork(itemstack, cost * deficit) > 0) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - else if (syphonHealth(player)) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - return; - } else return; - } + if (!Compat.bm || !Config.crossWand || player.ticksExisted % 100 != 0) { + return; + } + try { + SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); + + String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); + int cost = capTag.equals("alchemical") || capTag.equals("blood_iron") ? Config.bloodvis - 1 + : Config.bloodvis; + + cost = Math.max(0, cost); + + int maxVis = getMaxVis(itemstack); + for (Aspect primal : primals) { + int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); + if (deficit <= 0) { + continue; + } + deficit = Math.min(deficit, 100); + if (player.capabilities.isCreativeMode) + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + else if (SoulNetworkHandler.syphonFromNetwork(itemstack, cost * deficit) > 0) + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + else if (syphonHealth(player)) { + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + return; + } else { + return; } + } - } catch (Throwable ignored) {} - } + } catch (Exception ignored) {} } public boolean syphonHealth(EntityPlayer player) { if (player.getHealth() > 6) { player.setHealth(player.getHealth() - 3); return true; - } else return false; + } else { + return false; + } } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java index bc14fdc..608e758 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/CreativeWandUpdate.java @@ -4,23 +4,15 @@ import net.minecraft.item.ItemStack; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; -public class CreativeWandUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class CreativeWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { + int maxVis = getMaxVis(itemstack); for (Aspect primal : primals) { - if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) - < ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack)) { - ((ItemWandCasting) itemstack.getItem()).addVis( - itemstack, - primal, - ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal), - true); + if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) < maxVis) { + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, maxVis, true); } } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java new file mode 100644 index 0000000..1cef96c --- /dev/null +++ b/src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java @@ -0,0 +1,25 @@ +package fox.spiteful.forbidden.items.wands; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.wands.IWandRodOnUpdate; +import thaumcraft.common.items.wands.ItemWandCasting; + +public abstract class DarkWandRodOnUpdate implements IWandRodOnUpdate { + + static final Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); + + protected static int getMaxVis(ItemStack itemstack) { + return ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack); + } + + protected boolean checkHotbar(ItemStack stack, EntityPlayer player) { + for (int x = 0; x < 9; ++x) { + ItemStack item = player.inventory.getStackInSlot(x); + if (item == stack) return true; + } + return false; + } +} diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java index 67dbd6e..41705f5 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java @@ -5,26 +5,24 @@ import net.minecraft.potion.Potion; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; -public class InfernalWandUpdate implements IWandRodOnUpdate { +public class InfernalWandUpdate extends DarkWandRodOnUpdate { - Aspect[] primals = { Aspect.ORDER, Aspect.ENTROPY, Aspect.AIR, Aspect.EARTH, Aspect.WATER }; + static final Aspect[] primals = { Aspect.ORDER, Aspect.ENTROPY, Aspect.AIR, Aspect.EARTH, Aspect.WATER }; public void onUpdate(ItemStack itemstack, EntityPlayer player) { if (player.ticksExisted % 100 == 0) { + int maxVis = getMaxVis(itemstack); if (player.worldObj.provider.dimensionId == -1) { for (Aspect primal : primals) { - if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) - < ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) / 10) { + if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) < maxVis / 10) { ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); } } } - if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, Aspect.FIRE) - < ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) / 5) { + if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, Aspect.FIRE) < maxVis / 5) { ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, Aspect.FIRE, 1, true); } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java index 40dc1d0..c46f15e 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java @@ -8,40 +8,33 @@ import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; -public class ManaStaffUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class ManaStaffUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (Compat.am2 && Config.crossWand) { - if (player.ticksExisted % 40 == 0) { - - try { - IExtendedProperties prop = ArsMagicaApi.instance.getExtendedProperties(player); - - float cost; - if (((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum")) - cost = 0.5F; - else cost = 1.0F; - - if (prop == null || prop.getCurrentMana() <= 0) return; + if (!Compat.am2 || !Config.crossWand || player.ticksExisted % 40 != 0) { + return; + } - for (Aspect primal : primals) { - int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit > 0) { - deficit = Math.min(deficit, 100); - if (prop.getCurrentMana() > cost * deficit) { - prop.setCurrentMana(prop.getCurrentMana() - cost * deficit); - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - } - } - } - } catch (Throwable ignored) {} + try { + IExtendedProperties prop = ArsMagicaApi.instance.getExtendedProperties(player); + if (prop == null || prop.getCurrentMana() <= 0) return; + + float cost = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum") ? 0.5F + : 1.0F; + int maxVis = getMaxVis(itemstack); + for (Aspect primal : primals) { + int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); + if (deficit <= 0) { + continue; + } + deficit = Math.min(deficit, 100); + if (prop.getCurrentMana() > cost * deficit) { + prop.setCurrentMana(prop.getCurrentMana() - cost * deficit); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + } } - } + } catch (Exception ignored) {} } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java index 9c9ae22..de966a9 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java @@ -8,40 +8,33 @@ import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; -public class ManaWandUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class ManaWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (Compat.am2 && Config.crossWand) { - if (player.ticksExisted % 100 == 0) { - - try { - IExtendedProperties prop = ArsMagicaApi.instance.getExtendedProperties(player); - - float cost; - if (((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum")) - cost = 0.8F; - else cost = 1.4F; - - if (prop == null || prop.getCurrentMana() <= 0) return; + if (!Compat.am2 || !Config.crossWand || player.ticksExisted % 100 != 0) { + return; + } - for (Aspect primal : primals) { - int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit > 0) { - deficit = Math.min(deficit, 100); - if (prop.getCurrentMana() > cost * deficit) { - prop.setCurrentMana(prop.getCurrentMana() - cost * deficit); - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - } - } - } - } catch (Throwable ignored) {} + try { + IExtendedProperties prop = ArsMagicaApi.instance.getExtendedProperties(player); + if (prop == null || prop.getCurrentMana() <= 0) return; + + float cost = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum") ? 0.8F + : 1.4F; + int maxVis = getMaxVis(itemstack); + for (Aspect primal : primals) { + int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); + if (deficit <= 0) { + continue; + } + deficit = Math.min(deficit, 100); + if (prop.getCurrentMana() > cost * deficit) { + prop.setCurrentMana(prop.getCurrentMana() - cost * deficit); + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + } } - } + } catch (Exception ignored) {} } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java index e7fb3ae..7576824 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java @@ -6,49 +6,51 @@ import fox.spiteful.forbidden.items.ForbiddenItems; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.Thaumcraft; import thaumcraft.common.items.wands.ItemWandCasting; -public class ProfaneWandUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class ProfaneWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { + if (player.ticksExisted % 20 != 0) { + return; + } + NBTTagCompound tag = itemstack.getTagCompound(); + int contract = tag.getInteger("contract"); + if (!tag.hasKey("contract")) { + Thaumcraft.proxy.getResearchManager().completeResearch(player, "ROD_profane"); + contract = 25000; + } else if (contract <= 0) { + return; + } - if (player.ticksExisted % 20 == 0) { - - NBTTagCompound tag = itemstack.getTagCompound(); - if (!tag.hasKey("contract")) { - Thaumcraft.proxy.getResearchManager().completeResearch(player, "ROD_profane"); - tag.setInteger("contract", 25000); - } else if (tag.getInteger("contract") <= 0) return; - - for (Aspect primal : primals) { - int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit > 0) { - int restore = Math.min(tag.getInteger("contract"), deficit); - ((ItemWandCasting) itemstack.getItem()).addRealVis(itemstack, primal, restore, true); - tag.setInteger("contract", tag.getInteger("contract") - restore); - if (player.worldObj.rand.nextInt(2501) < restore) Thaumcraft.addStickyWarpToPlayer(player, 1); - } - if (tag.getInteger("contract") <= 0) break; + int maxVis = getMaxVis(itemstack); + for (Aspect primal : primals) { + int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); + if (deficit <= 0) { + continue; } + int restore = Math.min(contract, deficit); + ((ItemWandCasting) itemstack.getItem()).addRealVis(itemstack, primal, restore, true); + contract -= restore; + if (player.worldObj.rand.nextInt(2501) < restore) Thaumcraft.addStickyWarpToPlayer(player, 1); + if (contract <= 0) break; + } - if (tag.getInteger("contract") <= 0) { - ((ItemWandCasting) itemstack.getItem()).setRod(itemstack, ForbiddenItems.WAND_ROD_PROFANED); - Thaumcraft.addStickyWarpToPlayer(player, 1); - player.worldObj.spawnParticle( - "largeexplode", - player.posX, - player.posY + (double) (player.height / 2.0F), - player.posZ, - 0.0D, - 0.0D, - 0.0D); - } - itemstack.setTagCompound(tag); + if (contract <= 0) { + ((ItemWandCasting) itemstack.getItem()).setRod(itemstack, ForbiddenItems.WAND_ROD_PROFANED); + Thaumcraft.addStickyWarpToPlayer(player, 1); + player.worldObj.spawnParticle( + "largeexplode", + player.posX, + player.posY + (double) (player.height / 2.0F), + player.posZ, + 0.0D, + 0.0D, + 0.0D); } + + tag.setInteger("contract", contract); + itemstack.setTagCompound(tag); } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java index 9e0f909..4e8936e 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java @@ -2,24 +2,23 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; -public class TaintedWandUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class TaintedWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (player.ticksExisted % 100 == 0 - && player.worldObj.getBiomeGenForCoords((int) player.posX, (int) player.posZ).biomeID - == thaumcraft.common.config.Config.biomeTaintID) { - for (Aspect primal : primals) { - if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) - < ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) / 10) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - } + if (player.ticksExisted % 100 != 0 || player.worldObj.getBiomeGenForCoords( + MathHelper.floor_double(player.posX), + MathHelper.floor_double(player.posZ)).biomeID != thaumcraft.common.config.Config.biomeTaintID) { + return; + } + int maxVis = getMaxVis(itemstack); + for (Aspect primal : primals) { + if (((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal) < maxVis / 10) { + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); } } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java index 42add35..04587e0 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java @@ -6,43 +6,32 @@ import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.wands.IWandRodOnUpdate; import thaumcraft.common.items.wands.ItemWandCasting; import vazkii.botania.api.mana.ManaItemHandler; -public class YandereWandUpdate implements IWandRodOnUpdate { - - Aspect[] primals = Aspect.getPrimalAspects().toArray(new Aspect[0]); +public class YandereWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (Compat.botan && Config.crossWand && player.ticksExisted % 40 == 0 && checkHotbar(itemstack, player)) { - try { - int cost; - String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - if (capTag.equals("manasteel") || capTag.equals("elementium")) cost = Config.manavis - 2; - else cost = Config.manavis; - - cost = Math.max(0, cost); - - for (Aspect primal : primals) { - int deficit = ((ItemWandCasting) itemstack.getItem()).getMaxVis(itemstack) - - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit > 0) { - deficit = Math.min(deficit, 100); - if (ManaItemHandler.requestManaExact(itemstack, player, cost * deficit, true)) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - } - } - - } catch (Throwable ignored) {} + if (!Compat.botan || !Config.crossWand || player.ticksExisted % 40 != 0 || !checkHotbar(itemstack, player)) { + return; } - } - - private boolean checkHotbar(ItemStack stack, EntityPlayer player) { - for (int x = 0; x < 9; ++x) { - ItemStack item = player.inventory.getStackInSlot(x); - if (item == stack) return true; - } - return false; + try { + int cost; + String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); + cost = capTag.equals("manasteel") || capTag.equals("elementium") ? Config.manavis - 2 : Config.manavis; + + cost = Math.max(0, cost); + + int maxVis = getMaxVis(itemstack); + for (Aspect primal : primals) { + int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); + if (deficit <= 0) { + continue; + } + deficit = Math.min(deficit, 100); + if (ManaItemHandler.requestManaExact(itemstack, player, cost * deficit, true)) + ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); + } + } catch (Exception ignored) {} } } From 920ce49410a6786cb412b1be6580a62efd60767d Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Tue, 7 Oct 2025 15:16:06 -0400 Subject: [PATCH 06/11] Readd null check --- src/main/java/fox/spiteful/forbidden/FMEventHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java index ee9b929..d5f721f 100644 --- a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java +++ b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java @@ -497,7 +497,7 @@ public void onGetHurt(LivingHurtEvent event) { if (event.source.getEntity() instanceof EntityPlayer) { ItemStack equip = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem(); - if (equip.getItem() instanceof ItemWandCasting) { + if (equip != null && equip.getItem() instanceof ItemWandCasting) { String capTag = ((ItemWandCasting) equip.getItem()).getCap(equip).getTag(); if (capTag.equals("alchemical") || capTag.equals("blood_iron") && ((ItemWandCasting) equip.getItem()).getRod(equip).getTag().startsWith("blood")) { From 5de71f8c3c6a8edd7cb3938acfacf78be1b299a6 Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 8 Oct 2025 01:24:49 -0400 Subject: [PATCH 07/11] Contract review suggestion Co-authored-by: Nikolay S. --- .../spiteful/forbidden/items/wands/ProfaneWandUpdate.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java index 7576824..85fcfee 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java @@ -16,12 +16,13 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { return; } NBTTagCompound tag = itemstack.getTagCompound(); - int contract = tag.getInteger("contract"); + int contract; if (!tag.hasKey("contract")) { Thaumcraft.proxy.getResearchManager().completeResearch(player, "ROD_profane"); contract = 25000; - } else if (contract <= 0) { - return; + } else { + contract = tag.getInteger("contract"); + if (contract <= 0) return; } int maxVis = getMaxVis(itemstack); From 0d1393f3333622198f18533239d1ab905886474d Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 8 Oct 2025 01:19:42 -0400 Subject: [PATCH 08/11] Enable Jabel and Generic Injection --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 50dbc0a..d6d4177 100644 --- a/gradle.properties +++ b/gradle.properties @@ -41,11 +41,11 @@ developmentEnvironmentUserName = Developer # Enables using modern Java syntax (up to version 17) via Jabel, while still targeting JVM 8. # See https://github.com/bsideup/jabel for details on how this works. -enableModernJavaSyntax = false +enableModernJavaSyntax = true # Enables injecting missing generics into the decompiled source code for a better coding experience. # Turns most publicly visible List, Map, etc. into proper List, Map types. -enableGenericInjection = false +enableGenericInjection = true # Generate a class with a String field for the mod version named as defined below. # If generateGradleTokenClass is empty or not missing, no such class will be generated. From 96b4d8d7dada34d98d1168323113393101c70d79 Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 8 Oct 2025 01:23:28 -0400 Subject: [PATCH 09/11] Pattern variables and fix logic --- .../java/fox/spiteful/forbidden/FMEventHandler.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java index d5f721f..1cab194 100644 --- a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java +++ b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java @@ -495,12 +495,12 @@ public void onGetHurt(LivingHurtEvent event) { } } - if (event.source.getEntity() instanceof EntityPlayer) { - ItemStack equip = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem(); - if (equip != null && equip.getItem() instanceof ItemWandCasting) { - String capTag = ((ItemWandCasting) equip.getItem()).getCap(equip).getTag(); - if (capTag.equals("alchemical") || capTag.equals("blood_iron") - && ((ItemWandCasting) equip.getItem()).getRod(equip).getTag().startsWith("blood")) { + if (event.source.getEntity() instanceof EntityPlayer player) { + ItemStack equip = player.getCurrentEquippedItem(); + if (equip != null && equip.getItem() instanceof ItemWandCasting wand) { + String capTag = wand.getCap(equip).getTag(); + if ((capTag.equals("alchemical") || capTag.equals("blood_iron")) + && wand.getRod(equip).getTag().startsWith("blood")) { event.entityLiving.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2)); } } From 893908802453ad3eb5b868ca335258b38a88a165 Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 8 Oct 2025 02:00:55 -0400 Subject: [PATCH 10/11] Make staves extend their wand counterparts instead of copying logic --- .../items/wands/BloodStaffUpdate.java | 49 ++++--------------- .../items/wands/BloodWandUpdate.java | 2 +- .../items/wands/DarkWandRodOnUpdate.java | 7 +++ .../items/wands/InfernalWandUpdate.java | 2 +- .../items/wands/ManaStaffUpdate.java | 40 +++++---------- .../forbidden/items/wands/ManaWandUpdate.java | 9 ++-- .../items/wands/ProfaneWandUpdate.java | 7 ++- .../items/wands/TaintedWandUpdate.java | 2 +- .../items/wands/YandereWandUpdate.java | 9 +++- 9 files changed, 50 insertions(+), 77 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java index 29c32f2..dbc98c7 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodStaffUpdate.java @@ -4,51 +4,20 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import fox.spiteful.forbidden.Config; -import fox.spiteful.forbidden.compat.Compat; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.common.items.wands.ItemWandCasting; - -public class BloodStaffUpdate extends DarkWandRodOnUpdate { +public class BloodStaffUpdate extends BloodWandUpdate { + @Override public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (!Compat.bm || !Config.crossWand || player.ticksExisted % 25 != 0) { - return; - } - try { - if (!checkHotbar(itemstack, player)) return; - - SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); - - String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - int cost = capTag.equals("alchemical") || capTag.equals("blood_iron") ? Config.bloodvis - 1 - : Config.bloodvis; - - cost = Math.max(0, cost); - - int maxVis = getMaxVis(itemstack); - for (Aspect primal : primals) { - int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit <= 0) { - continue; - } - deficit = Math.min(deficit, 100); - if (player.capabilities.isCreativeMode) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - else if (SoulNetworkHandler.syphonFromNetwork(itemstack, cost * deficit) > 0) - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - else if (syphonHealth(player)) { - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - return; - } else { - return; - } - } + if (!(checkHotbar(itemstack, player))) return; + super.onUpdate(itemstack, player); + } - } catch (Exception ignored) {} + @Override + protected int regenTimer() { + return 25; } + @Override public boolean syphonHealth(EntityPlayer player) { if (player.getHealth() > 3) { player.setHealth(player.getHealth() - 3); diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java index 48038ab..d14f7ab 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java @@ -12,7 +12,7 @@ public class BloodWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (!Compat.bm || !Config.crossWand || player.ticksExisted % 100 != 0) { + if (!Compat.bm || !Config.crossWand || player.ticksExisted % regenTimer() != 0) { return; } try { diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java index 1cef96c..4b8cf0c 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/DarkWandRodOnUpdate.java @@ -22,4 +22,11 @@ protected boolean checkHotbar(ItemStack stack, EntityPlayer player) { } return false; } + + /** + * The number of ticks between when the wand core regenerates vis + */ + protected int regenTimer() { + return 100; + } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java index 41705f5..6186bf0 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/InfernalWandUpdate.java @@ -12,7 +12,7 @@ public class InfernalWandUpdate extends DarkWandRodOnUpdate { static final Aspect[] primals = { Aspect.ORDER, Aspect.ENTROPY, Aspect.AIR, Aspect.EARTH, Aspect.WATER }; public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (player.ticksExisted % 100 == 0) { + if (player.ticksExisted % regenTimer() == 0) { int maxVis = getMaxVis(itemstack); if (player.worldObj.provider.dimensionId == -1) { for (Aspect primal : primals) { diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java index c46f15e..8355934 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java @@ -3,38 +3,20 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import am2.api.ArsMagicaApi; -import am2.api.IExtendedProperties; -import fox.spiteful.forbidden.Config; -import fox.spiteful.forbidden.compat.Compat; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.common.items.wands.ItemWandCasting; - -public class ManaStaffUpdate extends DarkWandRodOnUpdate { +public class ManaStaffUpdate extends ManaWandUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (!Compat.am2 || !Config.crossWand || player.ticksExisted % 40 != 0) { - return; - } + if (!(checkHotbar(itemstack, player))) return; + super.onUpdate(itemstack, player); + } - try { - IExtendedProperties prop = ArsMagicaApi.instance.getExtendedProperties(player); - if (prop == null || prop.getCurrentMana() <= 0) return; + @Override + protected int regenTimer() { + return 40; + } - float cost = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum") ? 0.5F - : 1.0F; - int maxVis = getMaxVis(itemstack); - for (Aspect primal : primals) { - int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); - if (deficit <= 0) { - continue; - } - deficit = Math.min(deficit, 100); - if (prop.getCurrentMana() > cost * deficit) { - prop.setCurrentMana(prop.getCurrentMana() - cost * deficit); - ((ItemWandCasting) itemstack.getItem()).addVis(itemstack, primal, 1, true); - } - } - } catch (Exception ignored) {} + @Override + protected float getCost(boolean vinteumCaps) { + return vinteumCaps ? 0.5F : 1.0F; } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java index de966a9..8036483 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java @@ -13,7 +13,7 @@ public class ManaWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (!Compat.am2 || !Config.crossWand || player.ticksExisted % 100 != 0) { + if (!Compat.am2 || !Config.crossWand || player.ticksExisted % regenTimer() != 0) { return; } @@ -21,8 +21,7 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { IExtendedProperties prop = ArsMagicaApi.instance.getExtendedProperties(player); if (prop == null || prop.getCurrentMana() <= 0) return; - float cost = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum") ? 0.8F - : 1.4F; + float cost = getCost(((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum")); int maxVis = getMaxVis(itemstack); for (Aspect primal : primals) { int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); @@ -37,4 +36,8 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { } } catch (Exception ignored) {} } + + protected float getCost(boolean vinteumCaps) { + return vinteumCaps ? 0.8F : 1.4F; + } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java index 85fcfee..7379010 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ProfaneWandUpdate.java @@ -12,7 +12,7 @@ public class ProfaneWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (player.ticksExisted % 20 != 0) { + if (player.ticksExisted % regenTimer() != 0) { return; } NBTTagCompound tag = itemstack.getTagCompound(); @@ -54,4 +54,9 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { tag.setInteger("contract", contract); itemstack.setTagCompound(tag); } + + @Override + protected int regenTimer() { + return 20; + } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java index 4e8936e..fcbde62 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/TaintedWandUpdate.java @@ -10,7 +10,7 @@ public class TaintedWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (player.ticksExisted % 100 != 0 || player.worldObj.getBiomeGenForCoords( + if (player.ticksExisted % regenTimer() != 0 || player.worldObj.getBiomeGenForCoords( MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posZ)).biomeID != thaumcraft.common.config.Config.biomeTaintID) { return; diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java index 04587e0..04c1535 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java @@ -12,7 +12,9 @@ public class YandereWandUpdate extends DarkWandRodOnUpdate { public void onUpdate(ItemStack itemstack, EntityPlayer player) { - if (!Compat.botan || !Config.crossWand || player.ticksExisted % 40 != 0 || !checkHotbar(itemstack, player)) { + if (!Compat.botan || !Config.crossWand + || player.ticksExisted % regenTimer() != 0 + || !checkHotbar(itemstack, player)) { return; } try { @@ -34,4 +36,9 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { } } catch (Exception ignored) {} } + + @Override + protected int regenTimer() { + return 40; + } } From 091f1e4f4bb6ad5e8a4ef2bde810c33627bbe9fd Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Wed, 8 Oct 2025 02:17:51 -0400 Subject: [PATCH 11/11] Replace part name checks with checks against ForbiddenItems. Some still check against the name, notably blood_iron from Blood Arsenal and ones that check if the name *starts with* a certain phrase, like .startsWith("blood") to match multiple different cores. --- .../java/fox/spiteful/forbidden/FMEventHandler.java | 10 ++++++---- .../forbidden/items/wands/BloodWandUpdate.java | 8 ++++++-- .../forbidden/items/wands/ManaStaffUpdate.java | 4 ++-- .../spiteful/forbidden/items/wands/ManaWandUpdate.java | 8 +++++--- .../forbidden/items/wands/YandereWandUpdate.java | 8 ++++++-- 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java index 1cab194..f64809e 100644 --- a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java +++ b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java @@ -68,6 +68,7 @@ import fox.spiteful.forbidden.potions.DarkPotions; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.entities.ITaintedMob; +import thaumcraft.api.wands.WandCap; import thaumcraft.common.config.ConfigItems; import thaumcraft.common.items.wands.ItemWandCasting; import thaumcraft.common.lib.utils.Utils; @@ -481,7 +482,7 @@ public void onGetHurt(LivingHurtEvent event) { ItemStack wand = ((EntityPlayer) event.entityLiving).getCurrentEquippedItem(); if (event.source.getDamageType().equals("taint") - && ((ItemWandCasting) wand.getItem()).getRod(wand).getTag().equals("tainted")) { + && ((ItemWandCasting) wand.getItem()).getRod(wand) == ForbiddenItems.WAND_ROD_TAINTED) { for (int x = 0; x < 3; x++) { ((ItemWandCasting) wand.getItem()).addVis(wand, primals[randy.nextInt(6)], 1, true); @@ -489,7 +490,7 @@ public void onGetHurt(LivingHurtEvent event) { } if ((event.source.getDamageType().equals("wither") || event.source.isFireDamage()) - && ((ItemWandCasting) wand.getItem()).getRod(wand).getTag().equals("infernal")) { + && ((ItemWandCasting) wand.getItem()).getRod(wand) == ForbiddenItems.WAND_ROD_INFERNAL) { event.setCanceled(true); } @@ -498,8 +499,9 @@ public void onGetHurt(LivingHurtEvent event) { if (event.source.getEntity() instanceof EntityPlayer player) { ItemStack equip = player.getCurrentEquippedItem(); if (equip != null && equip.getItem() instanceof ItemWandCasting wand) { - String capTag = wand.getCap(equip).getTag(); - if ((capTag.equals("alchemical") || capTag.equals("blood_iron")) + WandCap cap = wand.getCap(equip); + // "blood_iron" is the Blood Iron Infused Cap from Blood Arsenal + if ((cap == ForbiddenItems.WAND_CAP_ALCHEMICAL || cap.getTag().equals("blood_iron")) && wand.getRod(equip).getTag().startsWith("blood")) { event.entityLiving.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2)); } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java index d14f7ab..597e440 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/BloodWandUpdate.java @@ -6,7 +6,9 @@ import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; +import fox.spiteful.forbidden.items.ForbiddenItems; import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.wands.WandCap; import thaumcraft.common.items.wands.ItemWandCasting; public class BloodWandUpdate extends DarkWandRodOnUpdate { @@ -18,8 +20,10 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { try { SoulNetworkHandler.checkAndSetItemOwner(itemstack, player); - String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - int cost = capTag.equals("alchemical") || capTag.equals("blood_iron") ? Config.bloodvis - 1 + WandCap cap = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack); + // "blood_iron" is the Blood Iron Infused Cap from Blood Arsenal + int cost = cap == ForbiddenItems.WAND_CAP_ALCHEMICAL || cap.getTag().equals("blood_iron") + ? Config.bloodvis - 1 : Config.bloodvis; cost = Math.max(0, cost); diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java index 8355934..af2134a 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaStaffUpdate.java @@ -16,7 +16,7 @@ protected int regenTimer() { } @Override - protected float getCost(boolean vinteumCaps) { - return vinteumCaps ? 0.5F : 1.0F; + protected float getCost(boolean hasVinteumCaps) { + return hasVinteumCaps ? 0.5F : 1.0F; } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java index 8036483..3e24e20 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/ManaWandUpdate.java @@ -7,6 +7,7 @@ import am2.api.IExtendedProperties; import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; +import fox.spiteful.forbidden.items.ForbiddenItems; import thaumcraft.api.aspects.Aspect; import thaumcraft.common.items.wands.ItemWandCasting; @@ -21,7 +22,8 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { IExtendedProperties prop = ArsMagicaApi.instance.getExtendedProperties(player); if (prop == null || prop.getCurrentMana() <= 0) return; - float cost = getCost(((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag().equals("vinteum")); + float cost = getCost( + ((ItemWandCasting) itemstack.getItem()).getCap(itemstack) == ForbiddenItems.WAND_CAP_VINTEUM); int maxVis = getMaxVis(itemstack); for (Aspect primal : primals) { int deficit = maxVis - ((ItemWandCasting) itemstack.getItem()).getVis(itemstack, primal); @@ -37,7 +39,7 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { } catch (Exception ignored) {} } - protected float getCost(boolean vinteumCaps) { - return vinteumCaps ? 0.8F : 1.4F; + protected float getCost(boolean hasVinteumCaps) { + return hasVinteumCaps ? 0.8F : 1.4F; } } diff --git a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java index 04c1535..6157d20 100644 --- a/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java +++ b/src/main/java/fox/spiteful/forbidden/items/wands/YandereWandUpdate.java @@ -5,7 +5,9 @@ import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.compat.Compat; +import fox.spiteful.forbidden.items.ForbiddenItems; import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.wands.WandCap; import thaumcraft.common.items.wands.ItemWandCasting; import vazkii.botania.api.mana.ManaItemHandler; @@ -19,8 +21,10 @@ public void onUpdate(ItemStack itemstack, EntityPlayer player) { } try { int cost; - String capTag = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack).getTag(); - cost = capTag.equals("manasteel") || capTag.equals("elementium") ? Config.manavis - 2 : Config.manavis; + WandCap cap = ((ItemWandCasting) itemstack.getItem()).getCap(itemstack); + cost = cap == ForbiddenItems.WAND_CAP_MANASTEEL || cap == ForbiddenItems.WAND_CAP_ELEMENTIUM + ? Config.manavis - 2 + : Config.manavis; cost = Math.max(0, cost);