/
PatchPacketDispatcher.java
49 lines (44 loc) · 1.95 KB
/
PatchPacketDispatcher.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
package nallar.patched.forge;
import nallar.tickthreading.patcher.Declare;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.packet.Packet;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.PlayerInstance;
import net.minecraft.util.MathHelper;
import net.minecraft.world.WorldServer;
public abstract class PatchPacketDispatcher {
private static int square(int a) {
return a * a;
}
@Declare
public static void sendPacketAroundPlayer(EntityPlayerMP player, Packet packet, int squaredDistance) {
EntityPlayerMP playerMP = (EntityPlayerMP) player;
WorldServer worldServer = ((WorldServer) playerMP.worldObj);
int cX = playerMP.chunkCoordX;
int cZ = playerMP.chunkCoordZ;
for (EntityPlayerMP entityPlayerMP : (Iterable<EntityPlayerMP>) worldServer.playerEntities) {
if (entityPlayerMP != playerMP && (square((entityPlayerMP.chunkCoordX - cX) << 4) + square((entityPlayerMP.chunkCoordZ - cZ) << 4)) < squaredDistance) {
entityPlayerMP.playerNetServerHandler.sendPacketToPlayer(packet);
}
}
}
public static void sendPacketToAllAround(double X, double Y, double Z, double range, int dimensionId, Packet packet) {
WorldServer worldServer = MinecraftServer.getServer().worldServerForDimension(dimensionId);
int x = MathHelper.floor_double(X);
int z = MathHelper.floor_double(Z);
PlayerInstance playerInstance = worldServer.getPlayerManager().getOrCreateChunkWatcher(x >> 4, z >> 4, false);
if (playerInstance != null) {
range *= range;
synchronized (playerInstance) {
for (EntityPlayerMP entityPlayerMP : (Iterable<EntityPlayerMP>) playerInstance.playersInChunk) {
double xD = X - entityPlayerMP.posX;
double yD = Y - entityPlayerMP.posY;
double zD = Z - entityPlayerMP.posZ;
if (xD * xD + yD * yD + zD * zD < range) {
entityPlayerMP.playerNetServerHandler.sendPacketToPlayer(packet);
}
}
}
}
}
}