From c79c301e935a8e94c6c38b33084dec0c277ba35e Mon Sep 17 00:00:00 2001 From: MelanX Date: Sun, 31 Mar 2024 16:59:22 +0200 Subject: [PATCH] fix crash closes #49 --- README.md | 17 +++++++++++++++++ .../java/de/melanx/toolswap/ClientToolSwap.java | 7 ++++++- .../java/de/melanx/toolswap/DiggerLike.java | 17 +++++++++++++++++ src/main/java/de/melanx/toolswap/ToolEntry.java | 17 ++++++++++------- 4 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 src/main/java/de/melanx/toolswap/DiggerLike.java diff --git a/README.md b/README.md index ea30fc1..1aadb0e 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,20 @@ Swaps the tools to the effective one if it's in hotbar. [![Modrinth](https://img.shields.io/modrinth/game-versions/L9JLNLqk?color=00AF5C&label=modrinth&logo=modrinth)](https://modrinth.com/mod/automatic-tool-swap) [![Modrinth](https://img.shields.io/modrinth/dt/L9JLNLqk?color=00AF5C&logo=modrinth)](https://modrinth.com/mod/automatic-tool-swap) + +For mod devs who want to add compatibility with Automatic Tool Swap, you simply need to implement +`de.melanx.toolswap.DiggerLike` into your tool class if it's not a child of `DiggerItem`. Also add the one method, +alternatively the other methods. This way, your tool will be considered when swapping. Just add this to your +`build.gradle`: + +```groovy +repositories { + maven { + url = "https://modmaven.dev/" + } +} + +dependencies { + compileOnly fg.deobf("de.melanx:ToolSwap:1.20.1-5.0.3+") +} +``` diff --git a/src/main/java/de/melanx/toolswap/ClientToolSwap.java b/src/main/java/de/melanx/toolswap/ClientToolSwap.java index b8c20df..8037441 100644 --- a/src/main/java/de/melanx/toolswap/ClientToolSwap.java +++ b/src/main/java/de/melanx/toolswap/ClientToolSwap.java @@ -300,7 +300,12 @@ public static void searchForSwitching(MultiPlayerGameMode multiPlayerGameMode, B for (ToolEntry entry : finalToolList) { for (ResourceLocation id : mineables) { //noinspection ConstantConditions - if (Objects.equals(entry.getType().location(), id) && TierSortingRegistry.isCorrectTierForDrops(entry.getToolItem().getTier(), state)) { + DiggerLike diggerItem = entry.getToolItem(); + if (diggerItem == null) { + continue; + } + + if (Objects.equals(entry.getType().location(), id) && TierSortingRegistry.isCorrectTierForDrops(diggerItem.getTier(), state)) { ClientToolSwap.switchTo(player, entry.getStack()); return; } diff --git a/src/main/java/de/melanx/toolswap/DiggerLike.java b/src/main/java/de/melanx/toolswap/DiggerLike.java new file mode 100644 index 0000000..dfe6e55 --- /dev/null +++ b/src/main/java/de/melanx/toolswap/DiggerLike.java @@ -0,0 +1,17 @@ +package de.melanx.toolswap; + +import net.minecraft.world.item.Tier; + +public interface DiggerLike { + + Tier getTier(); + + default int getHarvestLevel() { + //noinspection deprecation + return this.getTier().getLevel(); + } + + default float getEfficiency() { + return this.getTier().getSpeed(); + } +} diff --git a/src/main/java/de/melanx/toolswap/ToolEntry.java b/src/main/java/de/melanx/toolswap/ToolEntry.java index d8651c0..5ce38c1 100644 --- a/src/main/java/de/melanx/toolswap/ToolEntry.java +++ b/src/main/java/de/melanx/toolswap/ToolEntry.java @@ -8,7 +8,7 @@ import javax.annotation.Nullable; public record ToolEntry(TagKey type, - ItemStack stack) { + ItemStack stack) { public TagKey getType() { return this.type; @@ -19,20 +19,23 @@ public ItemStack getStack() { } @Nullable - public DiggerItem getToolItem() { - return this.stack.getItem() instanceof DiggerItem item ? item : null; + public DiggerLike getToolItem() { + if (this.stack.getItem() instanceof DiggerLike diggerLike) { + return diggerLike; + } + + return this.stack.getItem() instanceof DiggerItem diggerItem ? diggerItem::getTier : null; } public int getHarvestLevel() { - DiggerItem item = this.getToolItem(); + DiggerLike item = this.getToolItem(); //noinspection deprecation return item != null ? item.getTier().getLevel() : -1; } public float getEfficiency() { - DiggerItem item = this.getToolItem(); - //noinspection deprecation - return item != null ? item.getTier().getLevel() : 0.0F; + DiggerLike item = this.getToolItem(); + return item != null ? item.getTier().getSpeed() : 0.0F; } @Override