/
Redirects.java
131 lines (119 loc) · 4.58 KB
/
Redirects.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package nallar.tickthreading.global;
import com.google.common.hash.Hashing;
import cpw.mods.fml.common.network.Player;
import nallar.tickthreading.Log;
import nallar.tickthreading.minecraft.TickThreading;
import nallar.tickthreading.minecraft.profiling.PacketProfiler;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.NetServerHandler;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet1Login;
import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraft.network.packet.Packet9Respawn;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.ServerConfigurationManager;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
public class Redirects {
private static final int FML_HASH = Hashing.murmur3_32().hashString("FML").asInt();
public static void exploitNotify(String message, EntityPlayerMP entityPlayerMP) {
String fullMessage = entityPlayerMP + " attempted to use an exploit: " + message;
Log.severe(fullMessage);
sendToAdmins(fullMessage);
}
public static void notifyAdmins(String message) {
if (!TickThreading.instance.antiCheatNotify) {
return;
}
Log.warning("Admin notify: " + message);
sendToAdmins(message);
}
private static void sendToAdmins(String message) {
ServerConfigurationManager serverConfigurationManager = MinecraftServer.getServer().getConfigurationManager();
serverConfigurationManager.playerUpdateLock.lock();
try {
for (Object aPlayerEntityList : MinecraftServer.getServer().getConfigurationManager().playerEntityList) {
EntityPlayerMP var7 = (EntityPlayerMP) aPlayerEntityList;
if (MinecraftServer.getServer().getConfigurationManager().areCommandsAllowed(var7.username)) {
var7.sendChatToPlayer(message);
}
}
} finally {
serverConfigurationManager.playerUpdateLock.unlock();
}
}
public static boolean interceptPacket(Packet packet, NetServerHandler handler) {
if (packet == null) {
return false;
}
PacketProfiler.record(packet);
if (packet instanceof Packet9Respawn) {
Packet9Respawn packet9Respawn = (Packet9Respawn) packet;
int dimension = packet9Respawn.respawnDimension;
World world = DimensionManager.getWorld(dimension);
if (world == null) {
Log.warning("Can't find respawn dimension " + dimension);
} else {
if (world.multiverseWorld) {
handler.clientDimension = packet9Respawn.respawnDimension = world.originalDimension;
} else {
handler.clientDimension = packet9Respawn.respawnDimension;
}
}
} else if (packet instanceof Packet1Login) {
Packet1Login packet1Login = (Packet1Login) packet;
if (packet1Login.clientEntityId != FML_HASH) {
int dimension = packet1Login.dimension;
World world = DimensionManager.getWorld(dimension);
if (world.multiverseWorld) {
handler.clientDimension = packet1Login.dimension = world.originalDimension;
} else {
handler.clientDimension = packet1Login.dimension;
}
}
}
return false;
}
private static final boolean fixIC2Dimension = System.getProperty("tickthreading.ic2remap") == null;
// announceBlockUpdate,initiateTileEntityEvent,initiateExplosionEffect
public static void interceptIC2Packet(Packet packet, Player player) {
if (!fixIC2Dimension) {
return;
}
if (player instanceof EntityPlayerMP) {
NetServerHandler netServerHandler = ((EntityPlayerMP) player).playerNetServerHandler;
Packet250CustomPayload packet250CustomPayload = (Packet250CustomPayload) packet;
byte[] data = packet250CustomPayload.data;
byte type = data[0];
switch (type) {
case 1:
case 3:
case 5:
setInt(data, 1, netServerHandler.clientDimension);
break;
}
netServerHandler.sendPacketToPlayer(packet);
}
}
public static void interceptIC2PacketIn(INetworkManager manager, Packet250CustomPayload packet, Player player) {
if (!fixIC2Dimension) {
return;
}
if (!(player instanceof EntityPlayerMP)) {
return;
}
int dimension = ((EntityPlayerMP) player).playerNetServerHandler.clientDimension;
byte[] data = packet.data;
byte type = data[0];
if (type == 0 || type == 3) {
setInt(data, 1, dimension);
}
}
private static void setInt(byte[] array, int index, int value) {
array[index++] = (byte) ((value >>> 24) & 0xFF);
array[index++] = (byte) ((value >>> 16) & 0xFF);
array[index++] = (byte) ((value >>> 8) & 0xFF);
array[index] = (byte) ((value) & 0xFF);
}
}