seppuku/src/main/java/me/rigamortis/seppuku/impl/module/player/GodModeModule.java

150 lines
6.2 KiB
Java

package me.rigamortis.seppuku.impl.module.player;
import me.rigamortis.seppuku.api.event.EventStageable;
import me.rigamortis.seppuku.api.event.minecraft.EventDisplayGui;
import me.rigamortis.seppuku.api.event.network.EventSendPacket;
import me.rigamortis.seppuku.api.event.player.EventPlayerUpdate;
import me.rigamortis.seppuku.api.event.player.EventUpdateWalkingPlayer;
import me.rigamortis.seppuku.api.module.Module;
import me.rigamortis.seppuku.api.value.Value;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGameOver;
import net.minecraft.entity.Entity;
import net.minecraft.network.play.client.*;
import net.minecraft.util.EnumHand;
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener;
/**
* Author Seth
* 4/9/2019 @ 9:06 AM.
*/
public final class GodModeModule extends Module {
public final Value<Mode> mode = new Value<Mode>("Mode", new String[]{"Mode", "M"}, "The mode of the god-mode exploit", Mode.PORTAL);
public final Value<Boolean> footsteps = new Value<Boolean>("FootSteps", new String[]{"Foot"}, "If enabled, others will be able to see your foot-steps during god-mode. (Disable if having trouble getting god-mode to work)", false);
private Entity riding;
public GodModeModule() {
super("GodMode", new String[]{"God", "Pgm", "PortalGodmode", "PortalGod", "SickoMode"}, "Makes you invincible in certain cases", "NONE", -1, ModuleType.PLAYER);
}
@Override
public void onEnable() {
super.onEnable();
if (this.mode.getValue() == Mode.RIDING) {
final Minecraft mc = Minecraft.getMinecraft();
if (mc.player.getRidingEntity() != null) {
this.riding = mc.player.getRidingEntity();
mc.player.dismountRidingEntity();
mc.world.removeEntity(this.riding);
mc.player.setPosition(mc.player.getPosition().getX(), mc.player.getPosition().getY() - 1, mc.player.getPosition().getZ());
}
}
}
@Override
public void onDisable() {
super.onDisable();
if (this.mode.getValue() == Mode.RIDING) {
if (this.riding != null) {
Minecraft.getMinecraft().player.connection.sendPacket(new CPacketUseEntity(this.riding, EnumHand.MAIN_HAND));
}
}
if (this.mode.getValue() == Mode.LOCK) {
Minecraft.getMinecraft().player.respawnPlayer();
}
}
@Override
public String getMetaData() {
return this.mode.getValue().name();
}
@Listener
public void onWalkingUpdate(EventUpdateWalkingPlayer event) {
if (event.getStage() == EventStageable.EventStage.PRE) {
final Minecraft mc = Minecraft.getMinecraft();
if (this.mode.getValue() == Mode.RIDING) {
if (this.riding != null) {
this.riding.posX = mc.player.posX;
this.riding.posY = mc.player.posY + (this.footsteps.getValue() ? 0.3f : 0.0f);
this.riding.posZ = mc.player.posZ;
this.riding.rotationYaw = Minecraft.getMinecraft().player.rotationYaw;
mc.player.connection.sendPacket(new CPacketPlayer.Rotation(mc.player.rotationYaw, mc.player.rotationPitch, true));
mc.player.connection.sendPacket(new CPacketInput(mc.player.movementInput.moveForward, mc.player.movementInput.moveStrafe, false, false));
mc.player.connection.sendPacket(new CPacketVehicleMove(this.riding));
}
}
}
}
@Listener
public void onUpdate(EventPlayerUpdate event) {
if (event.getStage() == EventStageable.EventStage.PRE) {
final Minecraft mc = Minecraft.getMinecraft();
if (this.mode.getValue() == Mode.LOCK) {
if (mc.currentScreen instanceof GuiGameOver) {
mc.displayGuiScreen(null);
}
mc.player.setHealth(20.0f);
mc.player.getFoodStats().setFoodLevel(20);
mc.player.isDead = false;
}
}
}
@Listener
public void sendPacket(EventSendPacket event) {
if (event.getStage() == EventStageable.EventStage.PRE) {
if (this.mode.getValue() == Mode.PORTAL) {
if (event.getPacket() instanceof CPacketConfirmTeleport) {
event.setCanceled(true);
}
}
if (this.mode.getValue() == Mode.RIDING) {
if (event.getPacket() instanceof CPacketUseEntity) {
final Minecraft mc = Minecraft.getMinecraft();
final CPacketUseEntity packet = (CPacketUseEntity) event.getPacket();
if (this.riding != null) {
final Entity entity = packet.getEntityFromWorld(mc.world);
if (entity != null) {
this.riding.posX = entity.posX;
this.riding.posY = entity.posY;
this.riding.posZ = entity.posZ;
this.riding.rotationYaw = mc.player.rotationYaw;
mc.player.connection.sendPacket(new CPacketPlayer.Rotation(mc.player.rotationYaw, mc.player.rotationPitch, true));
mc.player.connection.sendPacket(new CPacketInput(mc.player.movementInput.moveForward, mc.player.movementInput.moveStrafe, false, false));
mc.player.connection.sendPacket(new CPacketVehicleMove(this.riding));
}
}
}
if (event.getPacket() instanceof CPacketPlayer.Position || event.getPacket() instanceof CPacketPlayer.PositionRotation) {
event.setCanceled(true);
}
}
if (this.mode.getValue() == Mode.PACKET) {
if (event.getPacket() instanceof CPacketPlayer) {
event.setCanceled(true);
}
}
}
}
@Listener
public void displayGui(EventDisplayGui event) {
if (event.getScreen() != null && event.getScreen() instanceof GuiGameOver && this.mode.getValue() == Mode.LOCK) {
event.setCanceled(true);
}
}
private enum Mode {
PORTAL, RIDING, LOCK, PACKET
}
}