-
-
Notifications
You must be signed in to change notification settings - Fork 44
/
PatchPacket10Flying.java
82 lines (78 loc) · 3.2 KB
/
PatchPacket10Flying.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package me.nallar.patched;
import javassist.is.faulty.Redirects;
import me.nallar.tickthreading.minecraft.TickThreading;
import me.nallar.tickthreading.util.TableFormatter;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.NetServerHandler;
import net.minecraft.network.packet.NetHandler;
import net.minecraft.network.packet.Packet10Flying;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.ServerConfigurationManager;
public abstract class PatchPacket10Flying extends Packet10Flying {
@Override
public boolean canProcessAsync() {
return true;
}
@Override
public void processPacket(NetHandler par1NetHandler) {
NetServerHandler nsh = (NetServerHandler) par1NetHandler;
EntityPlayerMP entityPlayerMP = nsh.playerEntity;
if (nsh.teleported > 0) {
nsh.lastPZ = this.zPosition;
nsh.lastPX = this.xPosition;
nsh.averageSpeed = -50d;
nsh.teleported--;
} else {
nsh.setHasMoved();
if (TickThreading.instance.antiCheatNotify && moving && yPosition != -999.0D && stance != -999.0D) {
long currentTime = System.currentTimeMillis();
long time = Math.min(5000, currentTime - nsh.lastMovement);
double dX = (xPosition - nsh.lastPX);
double dZ = (zPosition - nsh.lastPZ);
if (time == 0) {
nsh.lastPZ += dZ;
nsh.lastPX += dX;
} else {
nsh.lastMovement = currentTime;
if (time < 1) {
time = 1;
}
double speed = (Math.sqrt(dX * dX + dZ * dZ) * 1000) / time;
//Log.info(speed + "\t" + dX + '\t' + dZ + '\t' + time + '\t' + moving + '\t' + yPosition + '\t' + stance);
if (Double.isInfinite(speed) || Double.isNaN(speed)) {
speed = 1;
}
double averageSpeed = (nsh.averageSpeed = ((nsh.averageSpeed * 10 + speed) / 11));
ServerConfigurationManager serverConfigurationManager = MinecraftServer.getServer().getConfigurationManager();
speed /= allowedSpeedMultiplier(entityPlayerMP);
if (currentTime > nsh.lastNotify && !serverConfigurationManager.areCommandsAllowed(entityPlayerMP.username) && (averageSpeed > 50 || (!entityPlayerMP.isRiding() && averageSpeed > 20))) {
if (TickThreading.instance.antiCheatKick) {
nsh.kickPlayerFromServer("You moved too quickly. " + TableFormatter.formatDoubleWithPrecision(averageSpeed, 3) + "m/s");
} else {
entityPlayerMP.sendChatToPlayer("You moved too quickly. " + TableFormatter.formatDoubleWithPrecision(averageSpeed, 3) + "m/s");
}
Redirects.notifyAdmins(entityPlayerMP.username + " was travelling too fast: " + TableFormatter.formatDoubleWithPrecision(averageSpeed, 3) + "m/s");
nsh.lastNotify = currentTime + 30000;
}
nsh.lastPZ = this.zPosition;
nsh.lastPX = this.xPosition;
synchronized (entityPlayerMP.loadedChunks) {
par1NetHandler.handleFlying(this);
}
}
} else {
synchronized (entityPlayerMP.loadedChunks) {
par1NetHandler.handleFlying(this);
}
}
}
}
private static double allowedSpeedMultiplier(EntityPlayerMP entityPlayerMP) {
for (int i = 0; i < 4; i++) {
if (entityPlayerMP.inventory.armorItemInSlot(i) != null) {
return 1.5;
}
}
return 1;
}
}