diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/MixinEntity.java b/src/main/java/me/zeroeightsix/kami/mixin/client/MixinEntity.java index 6bbe140a8..58cc06724 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/MixinEntity.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/MixinEntity.java @@ -3,6 +3,7 @@ package me.zeroeightsix.kami.mixin.client; import me.zeroeightsix.kami.KamiMod; import me.zeroeightsix.kami.event.events.EntityEvent; import me.zeroeightsix.kami.module.modules.zeroeightysix.movement.SafeWalk; +import me.zeroeightsix.kami.module.modules.zeroeightysix.player.Scaffold; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -10,6 +11,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; /** * Created by 086 on 16/11/2017. + * Updated by Polymer on 16/01/20 */ @Mixin(Entity.class) public class MixinEntity { @@ -29,7 +31,7 @@ public class MixinEntity { @Redirect(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;isSneaking()Z")) public boolean isSneaking(Entity entity) { - return SafeWalk.shouldSafewalk() || entity.isSneaking(); + return SafeWalk.shouldSafewalk() || Scaffold.shouldScaffold() || entity.isSneaking(); } } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/zeroeightysix/player/Scaffold.java b/src/main/java/me/zeroeightsix/kami/module/modules/zeroeightysix/player/Scaffold.java index 45760425f..124805559 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/zeroeightysix/player/Scaffold.java +++ b/src/main/java/me/zeroeightsix/kami/module/modules/zeroeightysix/player/Scaffold.java @@ -1,5 +1,7 @@ package me.zeroeightsix.kami.module.modules.zeroeightysix.player; +import me.zero.alpine.listener.EventHandler; +import me.zero.alpine.listener.Listener; import me.zeroeightsix.kami.module.Module; import me.zeroeightsix.kami.module.ModuleManager; import me.zeroeightsix.kami.setting.Setting; @@ -11,27 +13,62 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockFalling; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.network.play.client.CPacketEntityAction; +import net.minecraft.network.play.client.CPacketEntityAction.Action; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import net.minecraftforge.client.event.InputUpdateEvent; import static me.zeroeightsix.kami.util.zeroeightysix.BlockInteractionHelper.*; +/** + * Created by 086 on 20/01/19 + * Updated by Polymer on 16/01/20 + */ @Module.Info(name = "Scaffold", category = Module.Category.PLAYER, description = "Places blocks under you") public class Scaffold extends Module { private Setting future = register(Settings.integerBuilder("Ticks").withMinimum(0).withMaximum(60).withValue(2)); + private Setting legitBridge = register(Settings.b("Legit Bridge", false)); + private Setting autoPlace = register(Settings.b("AutoPlace", false)); + boolean shouldSlow = false; + + private static Scaffold INSTANCE; + + public Scaffold() { + INSTANCE = this; + } + + public static boolean shouldScaffold() { + return INSTANCE.isEnabled(); + } + @EventHandler + private Listener eventListener = new Listener<>(event -> { + if ((boolean)legitBridge.getValue() && shouldSlow == true) { + event.getMovementInput().moveStrafe *= 0.2f; + event.getMovementInput().moveForward *= 0.2f; + } + }); @Override public void onUpdate() { + shouldSlow = false; if (isDisabled() || mc.player == null || ModuleManager.isModuleEnabled("Freecam")) return; Vec3d vec3d = EntityUtil.getInterpolatedPos(mc.player, future.getValue()); + if ((boolean) legitBridge.getValue()) vec3d = EntityUtil.getInterpolatedPos(mc.player, 0); BlockPos blockPos = new BlockPos(vec3d).down(); BlockPos belowBlockPos = blockPos.down(); - + BlockPos legitPos = new BlockPos(EntityUtil.getInterpolatedPos(mc.player, 2)); + //check if block behind player is air or other replaceable block and if it is, make the player crouch when legitBridge is enabled + if (Wrapper.getWorld().getBlockState(legitPos.down()).getMaterial().isReplaceable() && (boolean)legitBridge.getValue()&& mc.player.onGround == true) { + shouldSlow = true; + mc.player.movementInput.sneak = true; + mc.player.connection.sendPacket(new CPacketEntityAction(mc.player, Action.START_SNEAKING)); + } // check if block is already placed - if (!Wrapper.getWorld().getBlockState(blockPos).getMaterial().isReplaceable()) + if (!Wrapper.getWorld().getBlockState(blockPos).getMaterial().isReplaceable() ) { return; - + } // search blocks in hotbar int newSlot = -1; for (int i = 0; i < 9; i++) { @@ -73,9 +110,10 @@ public class Scaffold extends Module { if (!checkForNeighbours(blockPos)) { return; } - // place block - placeBlockScaffold(blockPos); + if ((boolean)autoPlace.getValue()) placeBlockScaffold(blockPos); + mc.player.connection.sendPacket(new CPacketEntityAction(mc.player, Action.STOP_SNEAKING)); + shouldSlow = false; // reset slot Wrapper.getPlayer().inventory.currentItem = oldSlot;