From 771de74a03276a75d7100152b91428d520456108 Mon Sep 17 00:00:00 2001 From: gnembon Date: Mon, 4 May 2020 22:07:22 -0300 Subject: [PATCH] noclip can place blocks intersecting with sefl --- .../mixins/BlockItem_creativeNoClipMixin.java | 36 +++++++++++++++++++ src/main/resources/carpet.mixins.json | 3 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/main/java/carpet/mixins/BlockItem_creativeNoClipMixin.java diff --git a/src/main/java/carpet/mixins/BlockItem_creativeNoClipMixin.java b/src/main/java/carpet/mixins/BlockItem_creativeNoClipMixin.java new file mode 100644 index 00000000..f8c84c69 --- /dev/null +++ b/src/main/java/carpet/mixins/BlockItem_creativeNoClipMixin.java @@ -0,0 +1,36 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.block.BlockState; +import net.minecraft.entity.EntityContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(BlockItem.class) +public class BlockItem_creativeNoClipMixin +{ + @Redirect(method = "canPlace", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/World;canPlace(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/EntityContext;)Z" + )) + private boolean canSpectatingPlace(World world, BlockState state, BlockPos pos, EntityContext context, + ItemPlacementContext contextOuter, BlockState stateOuter) + { + PlayerEntity player = contextOuter.getPlayer(); + if (CarpetSettings.creativeNoClip && player != null && player.isCreative() && player.abilities.flying) + { + // copy from canPlace + VoxelShape voxelShape = state.getCollisionShape(world, pos, context); + return voxelShape.isEmpty() || world.intersectsEntities(player, voxelShape.offset(pos.getX(), pos.getY(), pos.getZ())); + + } + return world.canPlace(state, pos, context); + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index ce36d841..f8e4b733 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -158,7 +158,8 @@ "WorldChunk_movableTEMixin", "PistonHandler_movableTEMixin", "PlayerEntity_creativeNoClipMixin", - "PistonBlockEntity_creativeNoClipMixin" + "PistonBlockEntity_creativeNoClipMixin", + "BlockItem_creativeNoClipMixin" ], "client": [