From f22e87ce8be875945c21e9762abaf79813b6ab9f Mon Sep 17 00:00:00 2001 From: Wynd Date: Mon, 8 Jan 2024 00:21:04 +0200 Subject: [PATCH] Added item repair using crafting tables --- .../xyz/pixelatedw/finalbeta/WyHelper.java | 8 ++++ .../mixin/CraftingContainerMixin.java | 46 +++++++++++++++++++ src/main/resources/finalbeta.mixins.json | 3 +- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java diff --git a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java index 799fa43..5f9c66e 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java @@ -107,6 +107,14 @@ public class WyHelper { // animal.setPositionAndAngles(player.x + 2, player.y, player.z, 0.0f, 0.0f); // player.level.spawnEntity(animal); +// player.dropItem(new ItemInstance(Tile.WORKBENCH, 1)); +// player.dropItem(new ItemInstance(ItemType.chestplateDiamond, 3)); + +// ItemInstance item = player.inventory.getHeldItem(); +// if (item != null) { +// item.setDamage(item.method_723() - 200); +// } + player.level.setLevelTime(0); player.level.getProperties().setRaining(false); player.level.getProperties().setRainTime(0); diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java new file mode 100644 index 0000000..763ee79 --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java @@ -0,0 +1,46 @@ +package xyz.pixelatedw.finalbeta.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.container.CraftingContainer; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemInstance; + +@Mixin(CraftingContainer.class) +public class CraftingContainerMixin { + + @Inject(method = "onContentsChanged", at = @At("HEAD"), cancellable = true) + public void onContentsChanged(Inventory inventory, CallbackInfo ci) { + CraftingContainer container = ((CraftingContainer)(Object)this); + + ItemInstance resultItem = null; + int defaultDamage = 0; + int damage = 0; + + for (int i = 0; i < inventory.getInvSize(); i++) { + ItemInstance item = inventory.getInvItem(i); + if (item != null && item.method_723() > 0) { + if (resultItem == null) { + resultItem = new ItemInstance(item.itemId, 1, item.getDamage()); + defaultDamage = item.method_723() - item.getDamage(); + } else if (item.itemId == resultItem.itemId) { + damage += item.method_723() - item.getDamage(); + } + } + } + + if (resultItem != null && damage > 0) { + int newDurability = (int) (defaultDamage + damage + Math.floor(resultItem.method_723() / 20)); + newDurability = Math.min(newDurability, resultItem.method_723()); + + if (newDurability != defaultDamage) { + resultItem.setDamage(resultItem.method_723() - newDurability); + container.result.setInvItem(0, resultItem); + ci.cancel(); + } + } + } +} diff --git a/src/main/resources/finalbeta.mixins.json b/src/main/resources/finalbeta.mixins.json index 76bac15..8190644 100644 --- a/src/main/resources/finalbeta.mixins.json +++ b/src/main/resources/finalbeta.mixins.json @@ -36,7 +36,8 @@ "BoatMixin", "LevelPropertiesMixin", "LevelMixin", - "DoorTileMixin" + "DoorTileMixin", + "CraftingContainerMixin" ], "injectors": { "defaultRequire": -1