Skip to content

Commit

Permalink
v3.4.0.14
Browse files Browse the repository at this point in the history
-Added NMSChunk.getX and NMSChunk.getZ
-Created NMSChunkDef to hold some internal chunk methods, without exposing them
-Added NMSChunk.saveAndRefresh with a race condition fix for 1.8

Took 50 minutes
  • Loading branch information
Jake-Moore committed Aug 28, 2024
1 parent 09f4242 commit 3306b0f
Show file tree
Hide file tree
Showing 29 changed files with 385 additions and 26 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import java.util.*

@Suppress("PropertyName")
var VERSION = "3.4.0.13"
var VERSION = "3.4.0.14"

plugins { // needed for the subprojects section to work
id("java")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,10 @@ public interface NMSChunk extends NMSObject {
void clearTileEntities();

void sendUpdatePacket(@NotNull Player player);

int getX();
int getZ();

void saveAndRefresh(boolean withUpdatePackets);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk.impl;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.NMSChunk;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.ApiStatus;

public interface NMSChunkDef extends NMSChunk {

@Override
default void saveAndRefresh(boolean withUpdatePackets) {
this.saveAndRefreshI(withUpdatePackets);
}

// Create a default inside this internal interface, to not expose this method
@SuppressWarnings("deprecation")
default void saveAndRefreshI(boolean withUpdatePackets) {
World world = this.getNMSChunkProvider().getNMSWorld().getBukkitWorld();
world.refreshChunk(this.getX(), this.getZ());
// Use the unload method with save
world.unloadChunk(this.getX(), this.getZ(), true);

// Re-send some chunk packets so that stubborn clients update
if (withUpdatePackets) {
int viewDistance = Bukkit.getViewDistance();
for (Player player : world.getPlayers()) {
int cX = player.getLocation().getChunk().getX();
int cZ = player.getLocation().getChunk().getZ();

if (this.getX() > cX + viewDistance || this.getX() < cX - viewDistance) { continue; }
if (this.getZ() > cZ + viewDistance || this.getZ() < cZ - viewDistance) { continue; }

this.sendUpdatePacket(player);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.jetbrains.annotations.NotNull;

@SuppressWarnings("unused")
public interface NMSWorld extends NMSObject {
@NotNull
World getBukkitWorld();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_10_R1.Chunk;
import net.minecraft.server.v1_10_R1.ChunkSection;
import net.minecraft.server.v1_10_R1.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_10_R1 implements NMSChunk {
public class Chunk_1_10_R1 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_10_R1 provider;
private final @NotNull Chunk chunk;
public Chunk_1_10_R1(@NotNull ChunkProvider_1_10_R1 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.locX;
}

@Override
public int getZ() {
return this.chunk.locZ;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_11_R1.Chunk;
import net.minecraft.server.v1_11_R1.ChunkSection;
import net.minecraft.server.v1_11_R1.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_11_R1 implements NMSChunk {
public class Chunk_1_11_R1 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_11_R1 provider;
private final @NotNull Chunk chunk;
public Chunk_1_11_R1(@NotNull ChunkProvider_1_11_R1 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.locX;
}

@Override
public int getZ() {
return this.chunk.locZ;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_12_R1.Chunk;
import net.minecraft.server.v1_12_R1.ChunkSection;
import net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_12_R1 implements NMSChunk {
public class Chunk_1_12_R1 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_12_R1 provider;
private final @NotNull Chunk chunk;
public Chunk_1_12_R1(@NotNull ChunkProvider_1_12_R1 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.locX;
}

@Override
public int getZ() {
return this.chunk.locZ;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_13_R1.Chunk;
import net.minecraft.server.v1_13_R1.ChunkSection;
import net.minecraft.server.v1_13_R1.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_13_R1 implements NMSChunk {
public class Chunk_1_13_R1 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_13_R1 provider;
private final @NotNull Chunk chunk;
public Chunk_1_13_R1(@NotNull ChunkProvider_1_13_R1 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.getPos().x;
}

@Override
public int getZ() {
return this.chunk.getPos().z;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_13_R2.Chunk;
import net.minecraft.server.v1_13_R2.ChunkSection;
import net.minecraft.server.v1_13_R2.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_13_R2 implements NMSChunk {
public class Chunk_1_13_R2 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_13_R2 provider;
private final @NotNull Chunk chunk;
public Chunk_1_13_R2(@NotNull ChunkProvider_1_13_R2 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.getPos().x;
}

@Override
public int getZ() {
return this.chunk.getPos().z;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_14_R1.Chunk;
import net.minecraft.server.v1_14_R1.ChunkSection;
import net.minecraft.server.v1_14_R1.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_14_R1 implements NMSChunk {
public class Chunk_1_14_R1 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_14_R1 provider;
private final @NotNull Chunk chunk;
public Chunk_1_14_R1(@NotNull ChunkProvider_1_14_R1 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.getPos().x;
}

@Override
public int getZ() {
return this.chunk.getPos().z;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_15_R1.Chunk;
import net.minecraft.server.v1_15_R1.ChunkSection;
import net.minecraft.server.v1_15_R1.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_15_R1 implements NMSChunk {
public class Chunk_1_15_R1 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_15_R1 provider;
private final @NotNull Chunk chunk;
public Chunk_1_15_R1(@NotNull ChunkProvider_1_15_R1 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.getPos().x;
}

@Override
public int getZ() {
return this.chunk.getPos().z;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_16_R1.Chunk;
import net.minecraft.server.v1_16_R1.ChunkSection;
import net.minecraft.server.v1_16_R1.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_16_R1 implements NMSChunk {
public class Chunk_1_16_R1 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_16_R1 provider;
private final @NotNull Chunk chunk;
public Chunk_1_16_R1(@NotNull ChunkProvider_1_16_R1 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff', true);
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.getPos().x;
}

@Override
public int getZ() {
return this.chunk.getPos().z;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_16_R2.Chunk;
import net.minecraft.server.v1_16_R2.ChunkSection;
import net.minecraft.server.v1_16_R2.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_16_R2 implements NMSChunk {
public class Chunk_1_16_R2 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_16_R2 provider;
private final @NotNull Chunk chunk;
public Chunk_1_16_R2(@NotNull ChunkProvider_1_16_R2 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.getPos().x;
}

@Override
public int getZ() {
return this.chunk.getPos().z;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.kamikazejam.kamicommon.nms.wrappers.chunk;

import com.kamikazejam.kamicommon.nms.wrappers.chunk.impl.NMSChunkDef;
import net.minecraft.server.v1_16_R3.Chunk;
import net.minecraft.server.v1_16_R3.ChunkSection;
import net.minecraft.server.v1_16_R3.PacketPlayOutMapChunk;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class Chunk_1_16_R3 implements NMSChunk {
public class Chunk_1_16_R3 implements NMSChunkDef {
private final @NotNull ChunkProvider_1_16_R3 provider;
private final @NotNull Chunk chunk;
public Chunk_1_16_R3(@NotNull ChunkProvider_1_16_R3 provider, @NotNull Chunk chunk) {
Expand Down Expand Up @@ -49,4 +50,14 @@ public void sendUpdatePacket(@NotNull Player player) {
PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(this.chunk, '\uffff');
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

@Override
public int getX() {
return this.chunk.getPos().x;
}

@Override
public int getZ() {
return this.chunk.getPos().z;
}
}
Loading

0 comments on commit 3306b0f

Please sign in to comment.