Files
Meteor-Rejects/src/main/java/anticope/rejects/modules/BoatGlitch.java
2023-03-18 17:29:06 +01:00

131 lines
4.3 KiB
Java

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<Boolean> toggleAfter = sgGeneral.add(new BoolSetting.Builder()
.name("toggle-after")
.description("Disables the module when finished.")
.defaultValue(true)
.build()
);
private final Setting<Boolean> 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;
}
}
}
}