From 020dd6a8f4fe80cda1cb8fe3bfd0bc2efc0de962 Mon Sep 17 00:00:00 2001 From: gnembon Date: Mon, 31 May 2021 17:00:42 -0300 Subject: [PATCH] movableAmethyst extension --- src/main/java/carpet/CarpetSettings.java | 9 +++- ...gAmethystBlock_getPistonBehaviorMixin.java | 18 -------- ...ingAmethystBlock_movableAmethystMixin.java | 45 +++++++++++++++++++ src/main/resources/carpet.mixins.json | 2 +- 4 files changed, 54 insertions(+), 20 deletions(-) delete mode 100644 src/main/java/carpet/mixins/BuddingAmethystBlock_getPistonBehaviorMixin.java create mode 100644 src/main/java/carpet/mixins/BuddingAmethystBlock_movableAmethystMixin.java diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index c76989f2..6e3556d4 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -315,7 +315,14 @@ public class CarpetSettings ) public static boolean hopperCounters = false; - @Rule( desc = "Allows Budding Amethyst blocks to be moved by pistons", category = FEATURE ) + @Rule( + desc = "Allows Budding Amethyst blocks to be moved", + extra = { + "Allow for them to be moved by pistons", + "as well as adds extra drop when mining with silk touch pickaxe" + }, + category = FEATURE + ) public static boolean movableAmethyst = false; @Rule( desc = "Guardians turn into Elder Guardian when struck by lightning", category = FEATURE ) diff --git a/src/main/java/carpet/mixins/BuddingAmethystBlock_getPistonBehaviorMixin.java b/src/main/java/carpet/mixins/BuddingAmethystBlock_getPistonBehaviorMixin.java deleted file mode 100644 index 03085c47..00000000 --- a/src/main/java/carpet/mixins/BuddingAmethystBlock_getPistonBehaviorMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package carpet.mixins; - -import carpet.CarpetSettings; -import net.minecraft.block.BlockState; -import net.minecraft.block.BuddingAmethystBlock; -import net.minecraft.block.piston.PistonBehavior; -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.CallbackInfoReturnable; - -@Mixin(BuddingAmethystBlock.class) -public class BuddingAmethystBlock_getPistonBehaviorMixin { - @Inject(at = @At("HEAD"), method = "getPistonBehavior(Lnet/minecraft/block/BlockState;)Lnet/minecraft/block/piston/PistonBehavior;", cancellable = true) - void getPistonBehavior(BlockState state, CallbackInfoReturnable cir) { - if (CarpetSettings.movableAmethyst) cir.setReturnValue(PistonBehavior.NORMAL); - } -} diff --git a/src/main/java/carpet/mixins/BuddingAmethystBlock_movableAmethystMixin.java b/src/main/java/carpet/mixins/BuddingAmethystBlock_movableAmethystMixin.java new file mode 100644 index 00000000..3e9c2449 --- /dev/null +++ b/src/main/java/carpet/mixins/BuddingAmethystBlock_movableAmethystMixin.java @@ -0,0 +1,45 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.BuddingAmethystBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.PickaxeItem; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; +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.CallbackInfoReturnable; + +@Mixin(BuddingAmethystBlock.class) +public class BuddingAmethystBlock_movableAmethystMixin extends Block { + public BuddingAmethystBlock_movableAmethystMixin(Settings settings) { + super(settings); + } + + @Inject(at = @At("HEAD"), method = "getPistonBehavior(Lnet/minecraft/block/BlockState;)Lnet/minecraft/block/piston/PistonBehavior;", cancellable = true) + void getPistonBehavior(BlockState state, CallbackInfoReturnable cir) { + if (CarpetSettings.movableAmethyst) cir.setReturnValue(PistonBehavior.NORMAL); + } + + @Override + public void afterBreak(World world, PlayerEntity player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) { + super.afterBreak(world, player, pos, state, blockEntity, stack); + // doing it here rather than though loottables since loottables are loaded on reload + // drawback - not controlled via loottables, but hey + if (CarpetSettings.movableAmethyst && + stack.getItem() instanceof PickaxeItem && + EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, stack) > 0 + ) + dropStack(world, pos, Items.BUDDING_AMETHYST.getDefaultStack()); + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index f6f49e46..14e5062e 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -89,7 +89,7 @@ "ServerWorld_onePlayerSleepingMixin", "CoralBlockMixin", "CoralFeatureMixin", - "BuddingAmethystBlock_getPistonBehaviorMixin", + "BuddingAmethystBlock_movableAmethystMixin", "FluidBlock_renewableBlackstoneMixin", "FluidBlock_renewableDeepslateMixin", "LavaFluid_renewableDeepslateMixin",