-
-
Notifications
You must be signed in to change notification settings - Fork 44
/
PatchPlayerInstance.java
61 lines (52 loc) · 1.93 KB
/
PatchPlayerInstance.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
package me.nallar.patched.world.tracking;
import java.util.Arrays;
import java.util.HashSet;
import java.util.concurrent.ConcurrentLinkedQueue;
import me.nallar.tickthreading.patcher.Declare;
import net.minecraft.network.packet.Packet51MapChunk;
import net.minecraft.server.management.PlayerInstance;
import net.minecraft.server.management.PlayerManager;
import net.minecraft.tileentity.TileEntity;
public abstract class PatchPlayerInstance extends PlayerInstance {
private ConcurrentLinkedQueue<TileEntity> tilesToUpdate;
private static java.lang.reflect.Method getChunkWatcherWithPlayers;
public PatchPlayerInstance(PlayerManager par1PlayerManager, int par2, int par3) {
super(par1PlayerManager, par2, par3);
}
@Override
public String toString() {
return chunkLocation + " watched by " + Arrays.toString(playersInChunk.toArray());
}
@Override
@Declare
public void forceUpdate() {
this.sendToAllPlayersWatchingChunk(new Packet51MapChunk(myManager.getWorldServer().getChunkFromChunkCoords(this.chunkLocation.chunkXPos, this.chunkLocation.chunkZPos), true, Integer.MAX_VALUE));
}
public void construct() {
tilesToUpdate = new ConcurrentLinkedQueue<TileEntity>();
}
public void sendTiles() {
HashSet<TileEntity> tileEntities = new HashSet<TileEntity>();
for (TileEntity tileEntity = tilesToUpdate.poll(); tileEntity != null; tileEntity = tilesToUpdate.poll()) {
tileEntities.add(tileEntity);
}
for (TileEntity tileEntity : tileEntities) {
this.sendTileToAllPlayersWatchingChunk(tileEntity);
}
tileEntities.clear();
}
@Override
@Declare
public void updateTile(TileEntity tileEntity) {
if (numberOfTilesToUpdate == 0) {
this.myManager.playerUpdateLock.lock();
try {
this.myManager.getChunkWatcherWithPlayers().add(this);
} finally {
this.myManager.playerUpdateLock.unlock();
}
numberOfTilesToUpdate++;
}
tilesToUpdate.add(tileEntity);
}
}