diff --git a/build.gradle b/build.gradle index 9c2554b..ad11d96 100644 --- a/build.gradle +++ b/build.gradle @@ -97,3 +97,7 @@ publishing { // retrieving dependencies. } } + +loom { + accessWidenerPath = file("src/main/resources/WoodStrippingDetection.accesswidener") +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 6ae43c2..729ddf8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.21.5 yarn_mappings=1.21.5+build.1 loader_version=0.16.14 # Mod Properties -mod_version=0.1.0 +mod_version=0.2.0 maven_group=moe.sebiann archives_base_name=qol27 # Dependencies diff --git a/src/main/java/moe/sebiann/qol27/NoSilkDetection.java b/src/main/java/moe/sebiann/qol27/client/NoSilkDetection.java similarity index 98% rename from src/main/java/moe/sebiann/qol27/NoSilkDetection.java rename to src/main/java/moe/sebiann/qol27/client/NoSilkDetection.java index 170cbfc..3f97c2c 100644 --- a/src/main/java/moe/sebiann/qol27/NoSilkDetection.java +++ b/src/main/java/moe/sebiann/qol27/client/NoSilkDetection.java @@ -1,4 +1,4 @@ -package moe.sebiann.qol27; +package moe.sebiann.qol27.client; import moe.sebiann.qol27.config.QoL27Config; import net.fabricmc.fabric.api.event.player.AttackBlockCallback; diff --git a/src/main/java/moe/sebiann/qol27/QoL27Client.java b/src/main/java/moe/sebiann/qol27/client/QoL27Client.java similarity index 88% rename from src/main/java/moe/sebiann/qol27/QoL27Client.java rename to src/main/java/moe/sebiann/qol27/client/QoL27Client.java index 5ac8eb6..00b3cea 100644 --- a/src/main/java/moe/sebiann/qol27/QoL27Client.java +++ b/src/main/java/moe/sebiann/qol27/client/QoL27Client.java @@ -1,4 +1,4 @@ -package moe.sebiann.qol27; +package moe.sebiann.qol27.client; import moe.sebiann.qol27.config.QoL27Config; import net.fabricmc.api.ClientModInitializer; @@ -13,6 +13,7 @@ public class QoL27Client implements ClientModInitializer { @Override public void onInitializeClient() { NoSilkDetection.initialize(); + WoodStrippingDetection.initialize(); LOGGER.info("{} initialized!", MOD_ID); } diff --git a/src/main/java/moe/sebiann/qol27/SaveCoordinates.java b/src/main/java/moe/sebiann/qol27/client/SaveCoordinates.java similarity index 50% rename from src/main/java/moe/sebiann/qol27/SaveCoordinates.java rename to src/main/java/moe/sebiann/qol27/client/SaveCoordinates.java index cebedf8..77d0e91 100644 --- a/src/main/java/moe/sebiann/qol27/SaveCoordinates.java +++ b/src/main/java/moe/sebiann/qol27/client/SaveCoordinates.java @@ -1,4 +1,4 @@ -package moe.sebiann.qol27; +package moe.sebiann.qol27.client; public class SaveCoordinates { } diff --git a/src/main/java/moe/sebiann/qol27/client/WoodStrippingDetection.java b/src/main/java/moe/sebiann/qol27/client/WoodStrippingDetection.java new file mode 100644 index 0000000..e61db12 --- /dev/null +++ b/src/main/java/moe/sebiann/qol27/client/WoodStrippingDetection.java @@ -0,0 +1,37 @@ +package moe.sebiann.qol27.client; + +import moe.sebiann.qol27.config.QoL27Config; +import net.fabricmc.fabric.api.event.player.UseBlockCallback; +import net.minecraft.block.BlockState; +import net.minecraft.item.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.math.BlockPos; + + +public class WoodStrippingDetection { + public static void initialize() { + QoL27Config config = QoL27Client.getConfig(); + + UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> { + if (!config.noStrippingEnabled()) { + return ActionResult.PASS; + } + if (!world.isClient) return ActionResult.PASS; + + ItemStack heldItem = player.getStackInHand(hand); + if (!(heldItem.getItem() instanceof AxeItem)) return ActionResult.PASS; + + BlockPos pos = hitResult.getBlockPos(); + BlockState state = world.getBlockState(pos); + + if (config.sneakOverridesStripping() && player.isSneaking()) { + // If the player is sneaking, we allow the action regardless of enchantments + return ActionResult.PASS; + } else if (AxeItem.STRIPPED_BLOCKS.containsKey(state.getBlock())) { + return ActionResult.FAIL; + } else { + return ActionResult.PASS; + } + }); + } +} diff --git a/src/main/java/moe/sebiann/qol27/config/Config27.java b/src/main/java/moe/sebiann/qol27/config/Config27.java index e64662d..266c8e5 100644 --- a/src/main/java/moe/sebiann/qol27/config/Config27.java +++ b/src/main/java/moe/sebiann/qol27/config/Config27.java @@ -2,14 +2,19 @@ import io.wispforest.owo.config.annotation.Config; import io.wispforest.owo.config.annotation.Modmenu; +import io.wispforest.owo.config.annotation.SectionHeader; @Modmenu(modId = "qol27") @Config(name = "qol27-config", wrapperName = "QoL27Config") public class Config27 { -// @SectionHeader("No Silk Touch Detection") + @SectionHeader("No Silk Touch Detection") public boolean noSilkDetectionEnabled = true; public boolean sneakOverridesDetection = true; -// @SectionHeader("Save Coordinates on Logout") + @SectionHeader("Wood Stripping Detection") + public boolean noStrippingEnabled = true; + public boolean sneakOverridesStripping = true; + + @SectionHeader("Save Coordinates on Logout") public boolean saveCoordsOnLogout = true; } diff --git a/src/main/resources/WoodStrippingDetection.accesswidener b/src/main/resources/WoodStrippingDetection.accesswidener new file mode 100644 index 0000000..0397923 --- /dev/null +++ b/src/main/resources/WoodStrippingDetection.accesswidener @@ -0,0 +1,2 @@ +accessWidener v2 named +accessible field net/minecraft/item/AxeItem STRIPPED_BLOCKS Ljava/util/Map; \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b346e42..f0ee851 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -17,7 +17,7 @@ "icon": "assets/qol27/icon.png", "environment": "client", "entrypoints": { - "client": ["moe.sebiann.qol27.QoL27Client"] + "client": ["moe.sebiann.qol27.client.QoL27Client"] }, "mixins": [], "depends": { @@ -25,5 +25,6 @@ "fabric": "*", "minecraft": "${minecraft_version}", "owo": "*" - } + }, + "accessWidener": "WoodStrippingDetection.accesswidener" } \ No newline at end of file