Advertisement
Jahus

Untitled

Jun 23rd, 2025
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.44 KB | None | 0 0
  1. package net.jahus.neverpenaltyanvil;
  2.  
  3. import net.minecraft.core.component.DataComponents;
  4. import net.minecraft.network.chat.Component;
  5. import net.minecraft.world.item.ItemStack;
  6. import net.minecraftforge.common.MinecraftForge;
  7. import net.minecraftforge.event.AnvilUpdateEvent;
  8. import net.minecraftforge.eventbus.api.SubscribeEvent;
  9. import net.minecraftforge.fml.ModLoadingContext;
  10. import net.minecraftforge.fml.common.Mod;
  11. import net.minecraftforge.fml.config.ModConfig;
  12.  
  13. @Mod("neverpenaltyanvil")
  14. @Mod.EventBusSubscriber(modid = "neverpenaltyanvil", bus = Mod.EventBusSubscriber.Bus.FORGE)
  15. public class NeverPenaltyAnvil {
  16.  
  17.     public NeverPenaltyAnvil() {
  18.         MinecraftForge.EVENT_BUS.register(this);
  19.         ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModConfigHandler.SPEC);
  20.     }
  21.  
  22.     @SubscribeEvent
  23.     public static void onAnvilUpdate(AnvilUpdateEvent event) {
  24.         System.out.println("========== AnvilUpdateEvent START ==========");
  25.  
  26.         ItemStack left = event.getLeft();
  27.         ItemStack right = event.getRight();
  28.         String newName = event.getName();
  29.  
  30.         System.out.println("Left item: " + left.getCount() + " " + left.getItem());
  31.         System.out.println("Right item: " + right.getCount() + " " + right.getItem());
  32.  
  33.         if (!ModConfigHandler.enabled.get()) {
  34.             System.out.println("? Mod disabled via config. Skipping.");
  35.             System.out.println("========== AnvilUpdateEvent END ==========");
  36.             return;
  37.         }
  38.  
  39.         if (left.isEmpty()) {
  40.             System.out.println("? No left item. Skipping.");
  41.             System.out.println("========== AnvilUpdateEvent END ==========");
  42.             return;
  43.         }
  44.  
  45.         int leftPenalty = left.getOrDefault(DataComponents.REPAIR_COST, 0);
  46.         int rightPenalty = right.getOrDefault(DataComponents.REPAIR_COST, 0);
  47.         int basePenalty = Math.max(leftPenalty, rightPenalty);
  48.         int newPenalty;
  49.  
  50.         if (ModConfigHandler.useVanillaPenalty.get()) {
  51.             newPenalty = basePenalty * 2 + 1;
  52.             System.out.println("? Using vanilla penalty formula: newPenalty = " + newPenalty);
  53.         } else {
  54.             int a = ModConfigHandler.linearA.get();
  55.             int b = ModConfigHandler.linearB.get();
  56.             newPenalty = a * basePenalty + b;
  57.             System.out.println("? Using linear formula: newPenalty = a * basePenalty + b = " + newPenalty);
  58.         }
  59.  
  60.         int maxPenalty = ModConfigHandler.maxPenalty.get();
  61.         if (maxPenalty >= 0 && newPenalty > maxPenalty) {
  62.             newPenalty = maxPenalty;
  63.             System.out.println("? Capped penalty to maxPenalty: " + newPenalty);
  64.         }
  65.  
  66.         ItemStack output = left.copy();
  67.         int xpCost = 0;
  68.         boolean renaming = newName != null && !newName.isEmpty() && !newName.equals(left.getHoverName().getString());
  69.  
  70.         if (right.isEmpty()) {
  71.             output.set(DataComponents.REPAIR_COST, newPenalty);
  72.  
  73.             if (renaming) {
  74.                 xpCost = ModConfigHandler.renameCost.get();
  75.                 output.set(DataComponents.CUSTOM_NAME, Component.literal(newName));
  76.                 System.out.println("? Renaming only: " + newName + " with cost " + xpCost);
  77.             } else {
  78.                 System.out.println("? No renaming, just update penalty.");
  79.             }
  80.  
  81.         } else {
  82.             if (!ItemStack.isSameItem(left, right)) {
  83.                 System.out.println("? Items are not the same type. Skipping.");
  84.                 System.out.println("========== AnvilUpdateEvent END ==========");
  85.                 return;
  86.             }
  87.  
  88.             xpCost = newPenalty;
  89.             if (renaming) {
  90.                 xpCost += 1;
  91.                 output.set(DataComponents.CUSTOM_NAME, Component.literal(newName));
  92.                 System.out.println("? Renamed during combination. +1 XP");
  93.             }
  94.             output.set(DataComponents.REPAIR_COST, newPenalty);
  95.         }
  96.  
  97.         int maxCost = ModConfigHandler.maxCost.get();
  98.         if (maxCost >= 0 && xpCost > maxCost) {
  99.             xpCost = maxCost;
  100.             System.out.println("? Capped XP cost to maxCost: " + xpCost);
  101.         }
  102.  
  103.         event.setOutput(output);
  104.         event.setCost(xpCost);
  105.  
  106.         System.out.println("? Output item set with new repair cost: " + newPenalty);
  107.         System.out.println("? XP cost shown: " + xpCost);
  108.         System.out.println("========== AnvilUpdateEvent END ==========");
  109.     }
  110. }
  111.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement