This commit is contained in:
parent
ab2c00cb0c
commit
f8ad1c48eb
2 changed files with 163 additions and 0 deletions
|
@ -71,6 +71,7 @@ public class Setup {
|
|||
new NoSlowDown(),
|
||||
new Notifier(),
|
||||
new PacketCounter(),
|
||||
new PacketFly(),
|
||||
new Ping(),
|
||||
new PlayerLog(),
|
||||
new PlayerSelector(),
|
||||
|
|
|
@ -0,0 +1,162 @@
|
|||
package de.com.baseband.client.feature.modules.movement;
|
||||
|
||||
import de.com.baseband.client.event.Listen;
|
||||
import de.com.baseband.client.event.events.MoveEvent;
|
||||
import de.com.baseband.client.event.events.PacketEvent;
|
||||
import de.com.baseband.client.feature.Feature;
|
||||
import de.com.baseband.client.feature.category.Experimental;
|
||||
import de.com.baseband.client.feature.modules.render.HUD;
|
||||
import de.com.baseband.client.registry.annotation.Config;
|
||||
import de.com.baseband.client.registry.annotation.Description;
|
||||
import de.com.baseband.client.registry.annotation.Range;
|
||||
import de.com.baseband.client.util.interact.ServerDataManager;
|
||||
import net.minecraft.network.play.client.CPacketConfirmTeleport;
|
||||
import net.minecraft.network.play.client.CPacketPlayer;
|
||||
import net.minecraft.network.play.server.SPacketPlayerPosLook;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec2f;
|
||||
|
||||
@Experimental
|
||||
public class PacketFly extends Feature {
|
||||
|
||||
@Config("Speed")
|
||||
@Description("How fast to move. Actual speed is determined by the packet fly constant multiplied with this value.")
|
||||
@Range("0.05..1")
|
||||
public float speed = 0.5f;
|
||||
|
||||
@Config("Delay")
|
||||
@Description("How often to move, in ticks")
|
||||
@Range("0..10")
|
||||
public int delay = 2;
|
||||
|
||||
@Config("Predict")
|
||||
@Description("Predict server-side movement. Sacrifices reliability for speed and independence of ping.")
|
||||
public boolean predict = true;
|
||||
|
||||
@Config("Anti fly-kick")
|
||||
@Description("Tries to avoid the automatic flight kick mechanism in vanilla.")
|
||||
public boolean noFlyKick = true;
|
||||
|
||||
private int ticksElapsed = 0;
|
||||
private int trackingTPPacket = 0;
|
||||
private boolean moving = false;
|
||||
private SPacketPlayerPosLook lastPacket = null;
|
||||
private long time = 0;
|
||||
|
||||
public void onDisable() {
|
||||
moving = false;
|
||||
trackingTPPacket = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTick() {
|
||||
meta = "";
|
||||
if(moving)
|
||||
meta += " Moving";
|
||||
if(trackingTPPacket != 0)
|
||||
meta += " Tracking";
|
||||
meta = meta.trim();
|
||||
if(meta.isEmpty())
|
||||
meta = null;
|
||||
|
||||
time++;
|
||||
ticksElapsed++;
|
||||
}
|
||||
|
||||
@Listen
|
||||
public void move(MoveEvent e) {
|
||||
e.setCancelled(true);
|
||||
|
||||
if(ticksElapsed < delay)
|
||||
return;
|
||||
|
||||
if(trackingTPPacket == 0 && moving && ticksElapsed < 10) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(mc.getRenderViewEntity() == mc.player) {
|
||||
Vec2f movementVec = mc.player.movementInput.getMoveVector();
|
||||
float f1 = MathHelper.sin(mc.player.rotationYaw * 0.017453292F);
|
||||
float f2 = MathHelper.cos(mc.player.rotationYaw * 0.017453292F);
|
||||
double x = movementVec.x * f2 - movementVec.y * f1;
|
||||
double y = (mc.player.movementInput.jump ? 1 : 0) + (mc.player.movementInput.sneak ? -1 : 0);
|
||||
double z = movementVec.y * f2 + movementVec.x * f1;
|
||||
float d = (float) Math.sqrt(x * x + y * y + z * z) / (0.249f * speed);
|
||||
|
||||
if(d == 0) {
|
||||
if(moving) {
|
||||
sendPosition(0);
|
||||
sendForce();
|
||||
trackingTPPacket = 0;
|
||||
lastPacket = null;
|
||||
moving = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
x /= d;
|
||||
y /= d;
|
||||
z /= d;
|
||||
|
||||
mc.player.posX += x;
|
||||
mc.player.posY += y;
|
||||
mc.player.posZ += z;
|
||||
|
||||
double yOffset = (time % 30 == 0 ? -0.05 : 0);
|
||||
|
||||
sendPosition(yOffset);
|
||||
sendForce();
|
||||
if(predict) {
|
||||
if (trackingTPPacket == 0) {
|
||||
HUD.notify("Synchronizing PacketFly.", 1000);
|
||||
} else {
|
||||
mc.player.connection.sendPacket(new CPacketConfirmTeleport(++trackingTPPacket));
|
||||
sendPosition(yOffset);
|
||||
}
|
||||
}
|
||||
else {
|
||||
trackingTPPacket = 0;
|
||||
}
|
||||
|
||||
moving = true;
|
||||
ticksElapsed = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void sendPosition(double yOffset) {
|
||||
mc.player.connection.sendPacket(new CPacketPlayer.PositionRotation(mc.player.posX, mc.player.posY + yOffset, mc.player.posZ, mc.player.rotationYaw, mc.player.rotationPitch, mc.player.onGround));
|
||||
}
|
||||
|
||||
private void sendForce() {
|
||||
mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY - 1000, mc.player.posZ, mc.player.onGround));
|
||||
}
|
||||
|
||||
@Listen
|
||||
public void onPacket(PacketEvent.Receive event) {
|
||||
if(event.getPacket() instanceof SPacketPlayerPosLook) {
|
||||
if(!predict) {
|
||||
trackingTPPacket = -1;
|
||||
return;
|
||||
}
|
||||
SPacketPlayerPosLook pppl = ((SPacketPlayerPosLook) event.getPacket());
|
||||
if(lastPacket != null && !(pppl.getX() != lastPacket.getX() || pppl.getY() != lastPacket.getY() || pppl.getZ() != lastPacket.getZ())) {
|
||||
ticksElapsed = -ServerDataManager.timeToSurelyTicked();
|
||||
moving = false;
|
||||
trackingTPPacket = 0;
|
||||
return;
|
||||
}
|
||||
lastPacket = pppl;
|
||||
if(trackingTPPacket == 0 || trackingTPPacket < pppl.getTeleportId()) {
|
||||
trackingTPPacket = pppl.getTeleportId();
|
||||
}
|
||||
else if(moving) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PacketFly";
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue