2019-10-27 15:45:44 +00:00
package me.rigamortis.seppuku.impl.module.player ;
import me.rigamortis.seppuku.api.event.EventStageable ;
import me.rigamortis.seppuku.api.event.gui.EventRenderHelmet ;
import me.rigamortis.seppuku.api.event.network.EventReceivePacket ;
import me.rigamortis.seppuku.api.event.network.EventSendPacket ;
import me.rigamortis.seppuku.api.event.player.* ;
import me.rigamortis.seppuku.api.event.render.EventRenderOverlay ;
import me.rigamortis.seppuku.api.event.world.EventAddCollisionBox ;
import me.rigamortis.seppuku.api.event.world.EventLiquidCollisionBB ;
import me.rigamortis.seppuku.api.event.world.EventSetOpaqueCube ;
import me.rigamortis.seppuku.api.module.Module ;
import me.rigamortis.seppuku.api.util.MathUtil ;
2019-11-30 01:44:31 +00:00
import me.rigamortis.seppuku.api.value.Value ;
2019-10-27 15:45:44 +00:00
import net.minecraft.block.Block ;
import net.minecraft.client.Minecraft ;
import net.minecraft.client.entity.EntityOtherPlayerMP ;
import net.minecraft.entity.Entity ;
import net.minecraft.network.play.client.* ;
import net.minecraft.network.play.server.SPacketPlayerPosLook ;
import net.minecraft.network.play.server.SPacketSetPassengers ;
import net.minecraft.util.math.Vec3d ;
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener ;
/ * *
2023-03-31 22:32:15 +00:00
* @author Seth
* @author noil
2019-10-27 15:45:44 +00:00
* /
public final class FreeCamModule extends Module {
2022-10-02 13:20:19 +00:00
public final Value < Float > speed = new Value < Float > ( " Speed " , new String [ ] { " Spd " } , " Speed of freecam flight, higher number equals quicker motion " , 1 . 0f , 0 . 0f , 10 . 0f , 0 . 1f ) ;
public final Value < Boolean > view = new Value < Boolean > ( " 3D " , new String [ ] { " View " } , " The old Nodus client style free-cam, kind of like an elytra. (Hold forward key & move the mouse to turn) " , false ) ;
public final Value < Boolean > packet = new Value < Boolean > ( " Packet " , new String [ ] { " Pack " } , " Disables any player position or rotation packets from being sent during free-cam if enabled " , true ) ;
public final Value < Boolean > allowDismount = new Value < Boolean > ( " AllowDismount " , new String [ ] { " Dismount " , " Dis " , " AllowDis " } , " Allow dismounting of the riding entity " , true ) ;
2019-10-27 15:45:44 +00:00
private Entity riding ;
private EntityOtherPlayerMP entity ;
private Vec3d position ;
private float yaw ;
private float pitch ;
public FreeCamModule ( ) {
super ( " FreeCam " , new String [ ] { " FreeCamera " } , " Out of body experience " , " NONE " , - 1 , ModuleType . PLAYER ) ;
}
@Override
public void onEnable ( ) {
super . onEnable ( ) ;
final Minecraft mc = Minecraft . getMinecraft ( ) ;
if ( mc . world ! = null ) {
2020-11-25 20:00:59 +00:00
this . entity = new EntityOtherPlayerMP ( mc . world , mc . session . getProfile ( ) ) ;
this . entity . copyLocationAndAnglesFrom ( mc . player ) ;
2019-10-27 15:45:44 +00:00
if ( mc . player . getRidingEntity ( ) ! = null ) {
this . riding = mc . player . getRidingEntity ( ) ;
mc . player . dismountRidingEntity ( ) ;
2020-11-25 20:00:59 +00:00
this . entity . startRiding ( this . riding ) ;
2020-11-30 17:52:56 +00:00
} else {
this . riding = null ;
2019-10-27 15:45:44 +00:00
}
this . entity . rotationYaw = mc . player . rotationYaw ;
this . entity . rotationYawHead = mc . player . rotationYawHead ;
this . entity . inventory . copyInventory ( mc . player . inventory ) ;
mc . world . addEntityToWorld ( 69420 , this . entity ) ;
this . position = mc . player . getPositionVector ( ) ;
this . yaw = mc . player . rotationYaw ;
this . pitch = mc . player . rotationPitch ;
mc . player . noClip = true ;
}
}
@Override
public void onDisable ( ) {
super . onDisable ( ) ;
final Minecraft mc = Minecraft . getMinecraft ( ) ;
if ( mc . world ! = null ) {
if ( this . riding ! = null ) {
mc . player . startRiding ( this . riding , true ) ;
}
if ( this . entity ! = null ) {
mc . world . removeEntity ( this . entity ) ;
}
if ( this . position ! = null ) {
mc . player . setPosition ( this . position . x , this . position . y , this . position . z ) ;
}
mc . player . rotationYaw = this . yaw ;
mc . player . rotationPitch = this . pitch ;
mc . player . noClip = false ;
2019-12-04 00:09:34 +00:00
mc . player . motionX = 0 ;
mc . player . motionY = 0 ;
mc . player . motionZ = 0 ;
2019-10-27 15:45:44 +00:00
}
}
@Listener
public void onMove ( EventMove event ) {
Minecraft . getMinecraft ( ) . player . noClip = true ;
}
@Listener
public void onWalkingUpdate ( EventUpdateWalkingPlayer event ) {
if ( event . getStage ( ) = = EventStageable . EventStage . PRE ) {
final Minecraft mc = Minecraft . getMinecraft ( ) ;
mc . player . setVelocity ( 0 , 0 , 0 ) ;
mc . player . renderArmPitch = 5000 ;
2019-11-30 01:44:31 +00:00
mc . player . jumpMovementFactor = this . speed . getValue ( ) ;
2019-10-27 15:45:44 +00:00
2019-11-30 01:44:31 +00:00
final double [ ] dir = MathUtil . directionSpeed ( this . speed . getValue ( ) ) ;
2019-10-27 15:45:44 +00:00
if ( mc . player . movementInput . moveStrafe ! = 0 | | mc . player . movementInput . moveForward ! = 0 ) {
mc . player . motionX = dir [ 0 ] ;
mc . player . motionZ = dir [ 1 ] ;
} else {
mc . player . motionX = 0 ;
mc . player . motionZ = 0 ;
}
mc . player . setSprinting ( false ) ;
2019-11-30 01:44:31 +00:00
if ( this . view . getValue ( ) ) {
2019-10-27 15:45:44 +00:00
if ( ! mc . gameSettings . keyBindSneak . isKeyDown ( ) & & ! mc . gameSettings . keyBindJump . isKeyDown ( ) ) {
2019-11-30 01:44:31 +00:00
mc . player . motionY = ( this . speed . getValue ( ) * ( - MathUtil . degToRad ( mc . player . rotationPitch ) ) ) * mc . player . movementInput . moveForward ;
2019-10-27 15:45:44 +00:00
}
}
if ( mc . gameSettings . keyBindJump . isKeyDown ( ) ) {
2019-11-30 01:44:31 +00:00
mc . player . motionY + = this . speed . getValue ( ) ;
2019-10-27 15:45:44 +00:00
}
if ( mc . gameSettings . keyBindSneak . isKeyDown ( ) ) {
2019-11-30 01:44:31 +00:00
mc . player . motionY - = this . speed . getValue ( ) ;
2019-10-27 15:45:44 +00:00
}
}
}
@Listener
public void sendPacket ( EventSendPacket event ) {
if ( event . getStage ( ) = = EventStageable . EventStage . PRE ) {
2023-03-31 22:32:15 +00:00
if ( ! Minecraft . getMinecraft ( ) . isSingleplayer ( ) ) // don't mess up single-player
return ;
2019-10-27 15:45:44 +00:00
if ( Minecraft . getMinecraft ( ) . world ! = null ) {
2020-11-25 20:00:59 +00:00
if ( ! this . allowDismount . getValue ( ) ) {
if ( event . getPacket ( ) instanceof CPacketInput ) {
event . setCanceled ( true ) ;
}
if ( event . getPacket ( ) instanceof CPacketEntityAction ) {
CPacketEntityAction packetEntityAction = ( CPacketEntityAction ) event . getPacket ( ) ;
if ( packetEntityAction . getAction ( ) . equals ( CPacketEntityAction . Action . START_SNEAKING ) ) {
event . setCanceled ( true ) ;
}
}
}
2019-11-30 01:44:31 +00:00
if ( this . packet . getValue ( ) ) {
2019-10-27 15:45:44 +00:00
if ( event . getPacket ( ) instanceof CPacketPlayer ) {
event . setCanceled ( true ) ;
}
} else {
if ( ! ( event . getPacket ( ) instanceof CPacketUseEntity ) & & ! ( event . getPacket ( ) instanceof CPacketPlayerTryUseItem ) & & ! ( event . getPacket ( ) instanceof CPacketPlayerTryUseItemOnBlock ) & & ! ( event . getPacket ( ) instanceof CPacketPlayer ) & & ! ( event . getPacket ( ) instanceof CPacketVehicleMove ) & & ! ( event . getPacket ( ) instanceof CPacketChatMessage ) & & ! ( event . getPacket ( ) instanceof CPacketKeepAlive ) ) {
event . setCanceled ( true ) ;
}
}
}
}
}
@Listener
public void receivePacket ( EventReceivePacket event ) {
if ( event . getStage ( ) = = EventStageable . EventStage . PRE ) {
2023-03-31 22:32:15 +00:00
if ( ! Minecraft . getMinecraft ( ) . isSingleplayer ( ) ) // don't mess up single-player
return ;
2020-11-25 20:00:59 +00:00
if ( event . getPacket ( ) instanceof SPacketSetPassengers ) {
2019-10-27 15:45:44 +00:00
final SPacketSetPassengers packet = ( SPacketSetPassengers ) event . getPacket ( ) ;
final Entity riding = Minecraft . getMinecraft ( ) . world . getEntityByID ( packet . getEntityId ( ) ) ;
2020-11-25 20:00:59 +00:00
if ( riding ! = null & & riding = = this . riding ) {
2019-10-27 15:45:44 +00:00
this . riding = null ;
}
}
if ( event . getPacket ( ) instanceof SPacketPlayerPosLook ) {
final SPacketPlayerPosLook packet = ( SPacketPlayerPosLook ) event . getPacket ( ) ;
2019-11-30 01:44:31 +00:00
if ( this . packet . getValue ( ) ) {
2019-10-27 15:45:44 +00:00
if ( this . entity ! = null ) {
this . entity . setPositionAndRotation ( packet . getX ( ) , packet . getY ( ) , packet . getZ ( ) , packet . getYaw ( ) , packet . getPitch ( ) ) ;
}
this . position = new Vec3d ( packet . getX ( ) , packet . getY ( ) , packet . getZ ( ) ) ;
Minecraft . getMinecraft ( ) . player . connection . sendPacket ( new CPacketConfirmTeleport ( packet . getTeleportId ( ) ) ) ;
event . setCanceled ( true ) ;
} else {
event . setCanceled ( true ) ;
}
}
}
}
2021-01-26 22:59:38 +00:00
/ * *
* Deprecated
2021-04-27 19:08:13 +00:00
*
2021-01-26 22:59:38 +00:00
* @param event
* /
2019-10-27 15:45:44 +00:00
@Listener
public void collideWithBlock ( EventAddCollisionBox event ) {
2021-11-13 18:48:41 +00:00
if ( event . getEntity ( ) = = Minecraft . getMinecraft ( ) . player ) {
2019-10-27 15:45:44 +00:00
event . setCanceled ( true ) ;
2021-11-13 18:48:41 +00:00
}
2019-10-27 15:45:44 +00:00
}
@Listener
public void getLiquidCollisionBB ( EventLiquidCollisionBB event ) {
event . setBoundingBox ( Block . NULL_AABB ) ;
event . setCanceled ( true ) ;
}
@Listener
public void setOpaqueCube ( EventSetOpaqueCube event ) {
event . setCanceled ( true ) ;
}
@Listener
public void renderOverlay ( EventRenderOverlay event ) {
event . setCanceled ( true ) ;
}
@Listener
public void renderHelmet ( EventRenderHelmet event ) {
event . setCanceled ( true ) ;
}
@Listener
public void pushOutOfBlocks ( EventPushOutOfBlocks event ) {
event . setCanceled ( true ) ;
}
@Listener
public void pushedByWater ( EventPushedByWater event ) {
event . setCanceled ( true ) ;
}
@Listener
public void applyCollision ( EventApplyCollision event ) {
event . setCanceled ( true ) ;
}
}