-
-
Notifications
You must be signed in to change notification settings - Fork 44
/
Redirects.java
110 lines (101 loc) · 4.03 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
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 notifyAdmins(String message) {
if (!TickThreading.instance.antiCheatNotify) {
return;
}
Log.warning("Admin notify: " + 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) {
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;
}
// announceBlockUpdate,initiateTileEntityEvent,initiateExplosionEffect
public static void interceptIC2Packet(Packet packet, Player player) {
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 (!(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);
}
}