Skip to content

Commit a843a44

Browse files
committed
feat: mark player for proximity update if chunk close to player was obfuscated
1 parent 8f186bd commit a843a44

4 files changed

Lines changed: 17 additions & 3 deletions

File tree

orebfuscator-core/src/main/java/dev/imprex/orebfuscator/player/OrebfuscatorPlayer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Map;
55
import java.util.Objects;
66
import java.util.concurrent.ConcurrentHashMap;
7+
import java.util.concurrent.atomic.AtomicBoolean;
78
import java.util.concurrent.atomic.AtomicReference;
89
import org.jspecify.annotations.NullMarked;
910
import org.jspecify.annotations.Nullable;
@@ -22,6 +23,8 @@ public class OrebfuscatorPlayer {
2223

2324
private final AtomicReference<@Nullable WorldAccessor> world = new AtomicReference<>();
2425
private final Map<Long, OrebfuscatorPlayerChunk> chunks = new ConcurrentHashMap<>();
26+
27+
private final AtomicBoolean pendingUpdate = new AtomicBoolean(false);
2528

2629
private volatile long latestUpdateTimestamp = System.currentTimeMillis();
2730
private volatile EntityPose location = EntityPose.ZERO;
@@ -45,6 +48,13 @@ public boolean needsProximityUpdate(boolean rotation) {
4548
}
4649

4750
long timestamp = System.currentTimeMillis();
51+
if (this.pendingUpdate.compareAndSet(true, false)) {
52+
this.location = player.pose();
53+
this.latestUpdateTimestamp = timestamp;
54+
55+
return true;
56+
}
57+
4858
if (this.config.hasProximityPlayerCheckInterval()
4959
&& timestamp - this.latestUpdateTimestamp > this.config.proximityPlayerCheckInterval()) {
5060

@@ -106,6 +116,13 @@ public void addChunk(WorldAccessor world, int chunkX, int chunkZ, List<Proximity
106116
if (Objects.equals(this.world.getAcquire(), world)) {
107117
long key = ChunkAccessor.chunkCoordsToLong(chunkX, chunkZ);
108118
this.chunks.put(key, new OrebfuscatorPlayerChunk(chunkX, chunkZ, blocks));
119+
120+
int dChunkX = chunkX - (this.location.blockX() >> 4);
121+
int dChunkZ = chunkZ - (this.location.blockZ() >> 4);
122+
123+
if (dChunkX >= -1 && dChunkX <= 1 && dChunkZ >= -1 && dChunkZ <= 1) {
124+
this.pendingUpdate.set(true);
125+
}
109126
}
110127
}
111128

orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitPlayerAccessor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.Objects;
1313
import java.util.WeakHashMap;
1414
import java.util.concurrent.CompletableFuture;
15-
import java.util.concurrent.atomic.AtomicBoolean;
1615
import java.util.concurrent.atomic.AtomicReference;
1716
import net.imprex.orebfuscator.Orebfuscator;
1817
import net.imprex.orebfuscator.OrebfuscatorCompatibility;

orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitPlayerAccessorManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package net.imprex.orebfuscator.iterop;
22

3-
import java.util.HashMap;
43
import java.util.List;
54
import java.util.Map;
65
import java.util.concurrent.ConcurrentHashMap;

orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessorManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.imprex.orebfuscator.iterop;
22

33
import dev.imprex.orebfuscator.interop.WorldAccessor;
4-
import java.util.HashMap;
54
import java.util.List;
65
import java.util.Map;
76
import java.util.concurrent.ConcurrentHashMap;

0 commit comments

Comments
 (0)