package anticope.rejects.modules; import anticope.rejects.MeteorRejectsAddon; import meteordevelopment.meteorclient.events.entity.BoatMoveEvent; import meteordevelopment.meteorclient.events.meteor.KeyEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; import meteordevelopment.orbit.EventHandler; import net.minecraft.entity.Entity; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket; import net.minecraft.util.Hand; public class BoatGlitch extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final Setting toggleAfter = sgGeneral.add(new BoolSetting.Builder() .name("toggle-after") .description("Disables the module when finished.") .defaultValue(true) .build() ); private final Setting remount = sgGeneral.add(new BoolSetting.Builder() .name("remount") .description("Remounts the boat when finished.") .defaultValue(true) .build() ); private Entity boat = null; private int dismountTicks = 0; private int remountTicks = 0; private boolean dontPhase = true; private boolean boatPhaseEnabled; public BoatGlitch() { super(MeteorRejectsAddon.CATEGORY, "boat-glitch", "Glitches your boat into the block beneath you. Dismount to trigger."); } @Override public void onActivate() { dontPhase = true; dismountTicks = 0; remountTicks = 0; boat = null; if (Modules.get().isActive(BoatPhase.class)) { boatPhaseEnabled = true; Modules.get().get(BoatPhase.class).toggle(); } else { boatPhaseEnabled = false; } } @Override public void onDeactivate() { if (boat != null) { boat.noClip = false; boat = null; } if (boatPhaseEnabled && !(Modules.get().isActive(BoatPhase.class))) { Modules.get().get(BoatPhase.class).toggle(); } } @EventHandler private void onBoatMove(BoatMoveEvent event) { if (dismountTicks == 0 && !dontPhase) { if (boat != event.boat) { if (boat != null) { boat.noClip = false; } if (mc.player.getVehicle() != null && event.boat == mc.player.getVehicle()) { boat = event.boat; } else { boat = null; } } if (boat != null) { boat.noClip = true; //boat.pushSpeedReduction = 1; dismountTicks = 5; } } } @EventHandler private void onTick(TickEvent.Post event) { if (dismountTicks > 0) { dismountTicks--; if (dismountTicks == 0) { if (boat != null) { boat.noClip = false; if (toggleAfter.get() && !remount.get()) { toggle(); } else if (remount.get()) { remountTicks = 5; } } dontPhase = true; } } if (remountTicks > 0) { remountTicks--; if (remountTicks == 0) { mc.getNetworkHandler().sendPacket( PlayerInteractEntityC2SPacket.interact(boat, false, Hand.MAIN_HAND)); if (toggleAfter.get()) { toggle(); } } } } @EventHandler private void onKey(KeyEvent event) { if (event.key == mc.options.sneakKey.getDefaultKey().getCode() && event.action == KeyAction.Press) { if (mc.player.getVehicle() != null && mc.player.getVehicle() instanceof BoatEntity) { dontPhase = false; boat = null; } } } }