@@ -30,6 +30,7 @@ public class Scribe extends JavaPlugin implements Listener {
3030
3131 private static final int MAX_ENCHANT_LEVEL = 10 ;
3232 private static final int MAX_ANVIL_USE_COUNT = 4 ;
33+ private static final int MAX_ANVIL_PENALTY = (int ) Math .pow (2 , MAX_ANVIL_USE_COUNT ) - 1 ;
3334
3435 private static final Map <Enchantment , Integer > ENCHANTMENT_COST ;
3536
@@ -164,25 +165,30 @@ public void onItemPlaced(PrepareAnvilEvent e) {
164165
165166 if (cost <= 0 ) return ;
166167
167- if (!isEnchantedBook ) {
168- if (first .getItemMeta () instanceof Repairable ) {
169- repairCost = ((Repairable ) first .getItemMeta ()).getRepairCost ();
170- cost += repairCost ;
171- repairCost = (int ) Math .round (Math .pow (2 , Math .min ((int ) Math .round ((Math .log (repairCost + 1 ) / Math .log (2 ))) + 1 , MAX_ANVIL_USE_COUNT ))) - 1 ;
172- }
168+ if (first .getItemMeta () instanceof Repairable ) {
169+ repairCost = ((Repairable ) first .getItemMeta ()).getRepairCost ();
170+ cost += repairCost ;
171+ repairCost = Math .min (2 * repairCost + 1 , MAX_ANVIL_PENALTY );
172+ }
173+
174+ if (second .getItemMeta () instanceof Repairable ) {
175+ int secondRepairCost = ((Repairable ) second .getItemMeta ()).getRepairCost ();
176+ cost += secondRepairCost ;
177+ repairCost = Math .min (MAX_ANVIL_PENALTY , Math .max (repairCost , 2 * secondRepairCost + 1 ));
173178 }
174179
175180 ItemStack resultItem = first .clone ();
181+ if (resultItem .getItemMeta () instanceof Repairable ) {
182+ ItemMeta repairableMeta = resultItem .getItemMeta ();
183+ ((Repairable ) repairableMeta ).setRepairCost (repairCost );
184+ resultItem .setItemMeta (repairableMeta );
185+ }
186+
176187 if (isEnchantedBook ) {
177188 EnchantmentStorageMeta bookMeta = (EnchantmentStorageMeta ) resultItem .getItemMeta ();
178189 enchantments .forEach ((enchantment , level ) -> bookMeta .addStoredEnchant (enchantment , level , true ));
179190 resultItem .setItemMeta (bookMeta );
180191 } else {
181- if (resultItem .getItemMeta () instanceof Repairable ) {
182- ItemMeta repairableMeta = resultItem .getItemMeta ();
183- ((Repairable ) repairableMeta ).setRepairCost (repairCost );
184- resultItem .setItemMeta (repairableMeta );
185- }
186192 resultItem .addUnsafeEnchantments (enchantments );
187193 }
188194
0 commit comments