From 38459a8d11bbbe33d7a6ed4cb62ef871b9f2c7c5 Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 26 Jul 2019 14:56:12 -0300 Subject: [PATCH] mining ghost block restrictions --- ...erInteractionManager_ghostBlocksMixin.java | 31 +++++++++++++++++++ .../java/carpet/settings/CarpetSettings.java | 3 ++ src/main/resources/carpet.mixins.json | 2 ++ 3 files changed, 36 insertions(+) create mode 100644 src/main/java/carpet/mixins/ServerPlayerInteractionManager_ghostBlocksMixin.java diff --git a/src/main/java/carpet/mixins/ServerPlayerInteractionManager_ghostBlocksMixin.java b/src/main/java/carpet/mixins/ServerPlayerInteractionManager_ghostBlocksMixin.java new file mode 100644 index 00000000..72494ab4 --- /dev/null +++ b/src/main/java/carpet/mixins/ServerPlayerInteractionManager_ghostBlocksMixin.java @@ -0,0 +1,31 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.network.ServerPlayerInteractionManager; +import net.minecraft.server.network.packet.PlayerActionC2SPacket; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockView; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ServerPlayerInteractionManager.class) +public class ServerPlayerInteractionManager_ghostBlocksMixin +{ + @Redirect(method = "method_14263", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/BlockState;calcBlockBreakingDelta(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;)F") + + ) + private float noCheatBlockBreakSpeed(BlockState blockState, PlayerEntity playerEntity_1, BlockView blockView_1, BlockPos blockPos_1, + // main args + BlockPos blockPos_1a, PlayerActionC2SPacket.Action playerActionC2SPacket$Action_1, Direction direction_1, int int_1) + { + if (CarpetSettings.miningGhostBlockFix && playerActionC2SPacket$Action_1 == PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK) + return 1.0f; + return blockState.calcBlockBreakingDelta(playerEntity_1, blockView_1, blockPos_1); + } +} diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index 96767a49..1ed1c41a 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -229,6 +229,9 @@ public class CarpetSettings @Rule(desc = "smooth client animations with low tps settings", extra = "works only in SP, and will slow down players", category = CREATIVE) public static boolean smoothClientAnimations; + @Rule(desc="Fixes mining ghost blocks by allowing ANY mining speed from clients", category = SURVIVAL) + public static boolean miningGhostBlockFix; + private static class PushLimitLimits extends Validator { @Override public Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) { return (newValue>0 && newValue <= 1024) ? newValue : null; diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index e137da04..c337f5a1 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -13,6 +13,8 @@ "StructureBlockBlockEntity_fillUpdatesMixin", "Structure_fillUpdatesMixin", + "ServerPlayerInteractionManager_ghostBlocksMixin", + "ServerMetadata_motdMixin", "MinecraftServer_coreMixin",