From b4349dd2a1495a342d80919fc557dda8d93fde36 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Mon, 16 Jun 2025 16:44:17 +0200 Subject: [PATCH] A small start to Telekinesis --- .../hak/survivalfabric/mixin/BlockMixin.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/BlockMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/BlockMixin.java index a4422a0..48fe2ac 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/BlockMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/BlockMixin.java @@ -1,31 +1,58 @@ package wtf.hak.survivalfabric.mixin; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.CropBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.HoeItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.stat.Stats; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameMode; import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; +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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import wtf.hak.survivalfabric.config.ConfigManager; +import java.util.ArrayList; import java.util.List; +import static net.minecraft.block.Block.getDroppedStacks; + @Mixin(Block.class) public abstract class BlockMixin { + @ModifyExpressionValue( + method = "dropStacks(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/entity/BlockEntity;Lnet/minecraft/entity/Entity;Lnet/minecraft/item/ItemStack;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/Block;getDroppedStacks(Lnet/minecraft/block/BlockState;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/entity/BlockEntity;Lnet/minecraft/entity/Entity;Lnet/minecraft/item/ItemStack;)Ljava/util/List;" + ) + ) + private static List modifyDrops(List original, BlockState state, World world, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack tool) { + + if(entity instanceof ServerPlayerEntity player) { + original.removeIf(player.getInventory()::insertStack); + } + + return original; + } + @Inject(method = "onBreak", at = @At("HEAD"), cancellable = true) public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfoReturnable cir) { if (world.isClient()) return; @@ -35,7 +62,7 @@ public abstract class BlockMixin { if (mainHand.getItem() instanceof HoeItem) { Item seedItem = state.getBlock().asItem(); Block seedBlock = state.getBlock(); - List drops = Block.getDroppedStacks(state, (ServerWorld) world, pos, null, player, mainHand); + List drops = getDroppedStacks(state, (ServerWorld) world, pos, null, player, mainHand); if (removeIfAvailable(drops, seedItem)) { if (player.getGameMode() != GameMode.CREATIVE) { for (ItemStack drop : drops) {