Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.jahus.neverpenaltyanvil;
- import net.minecraft.core.component.DataComponents;
- import net.minecraft.network.chat.Component;
- import net.minecraft.world.item.ItemStack;
- import net.minecraftforge.common.MinecraftForge;
- import net.minecraftforge.event.AnvilUpdateEvent;
- import net.minecraftforge.eventbus.api.SubscribeEvent;
- import net.minecraftforge.fml.ModLoadingContext;
- import net.minecraftforge.fml.common.Mod;
- import net.minecraftforge.fml.config.ModConfig;
- @Mod("neverpenaltyanvil")
- @Mod.EventBusSubscriber(modid = "neverpenaltyanvil", bus = Mod.EventBusSubscriber.Bus.FORGE)
- public class NeverPenaltyAnvil {
- public NeverPenaltyAnvil() {
- MinecraftForge.EVENT_BUS.register(this);
- ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModConfigHandler.SPEC);
- }
- @SubscribeEvent
- public static void onAnvilUpdate(AnvilUpdateEvent event) {
- System.out.println("========== AnvilUpdateEvent START ==========");
- ItemStack left = event.getLeft();
- ItemStack right = event.getRight();
- String newName = event.getName();
- System.out.println("Left item: " + left.getCount() + " " + left.getItem());
- System.out.println("Right item: " + right.getCount() + " " + right.getItem());
- if (!ModConfigHandler.enabled.get()) {
- System.out.println("? Mod disabled via config. Skipping.");
- System.out.println("========== AnvilUpdateEvent END ==========");
- return;
- }
- if (left.isEmpty()) {
- System.out.println("? No left item. Skipping.");
- System.out.println("========== AnvilUpdateEvent END ==========");
- return;
- }
- int leftPenalty = left.getOrDefault(DataComponents.REPAIR_COST, 0);
- int rightPenalty = right.getOrDefault(DataComponents.REPAIR_COST, 0);
- int basePenalty = Math.max(leftPenalty, rightPenalty);
- int newPenalty;
- if (ModConfigHandler.useVanillaPenalty.get()) {
- newPenalty = basePenalty * 2 + 1;
- System.out.println("? Using vanilla penalty formula: newPenalty = " + newPenalty);
- } else {
- int a = ModConfigHandler.linearA.get();
- int b = ModConfigHandler.linearB.get();
- newPenalty = a * basePenalty + b;
- System.out.println("? Using linear formula: newPenalty = a * basePenalty + b = " + newPenalty);
- }
- int maxPenalty = ModConfigHandler.maxPenalty.get();
- if (maxPenalty >= 0 && newPenalty > maxPenalty) {
- newPenalty = maxPenalty;
- System.out.println("? Capped penalty to maxPenalty: " + newPenalty);
- }
- ItemStack output = left.copy();
- int xpCost = 0;
- boolean renaming = newName != null && !newName.isEmpty() && !newName.equals(left.getHoverName().getString());
- if (right.isEmpty()) {
- output.set(DataComponents.REPAIR_COST, newPenalty);
- if (renaming) {
- xpCost = ModConfigHandler.renameCost.get();
- output.set(DataComponents.CUSTOM_NAME, Component.literal(newName));
- System.out.println("? Renaming only: " + newName + " with cost " + xpCost);
- } else {
- System.out.println("? No renaming, just update penalty.");
- }
- } else {
- if (!ItemStack.isSameItem(left, right)) {
- System.out.println("? Items are not the same type. Skipping.");
- System.out.println("========== AnvilUpdateEvent END ==========");
- return;
- }
- xpCost = newPenalty;
- if (renaming) {
- xpCost += 1;
- output.set(DataComponents.CUSTOM_NAME, Component.literal(newName));
- System.out.println("? Renamed during combination. +1 XP");
- }
- output.set(DataComponents.REPAIR_COST, newPenalty);
- }
- int maxCost = ModConfigHandler.maxCost.get();
- if (maxCost >= 0 && xpCost > maxCost) {
- xpCost = maxCost;
- System.out.println("? Capped XP cost to maxCost: " + xpCost);
- }
- event.setOutput(output);
- event.setCost(xpCost);
- System.out.println("? Output item set with new repair cost: " + newPenalty);
- System.out.println("? XP cost shown: " + xpCost);
- System.out.println("========== AnvilUpdateEvent END ==========");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement