diff --git a/SpigotCore_10/src/de/steamwar/chunk/Chunk_10.java b/SpigotCore_10/src/de/steamwar/chunk/Chunk_10.java
new file mode 100644
index 0000000..1a2925f
--- /dev/null
+++ b/SpigotCore_10/src/de/steamwar/chunk/Chunk_10.java
@@ -0,0 +1,14 @@
+package de.steamwar.chunk;
+
+import net.minecraft.server.v1_10_R1.PacketPlayOutMapChunk;
+import org.bukkit.craftbukkit.v1_10_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+
+public class Chunk_10 {
+ private Chunk_10(){}
+
+ public static void sendChunk(Player p, int chunkX, int chunkZ){
+ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunkX, chunkZ)).getHandle(), 65535));
+ }
+}
diff --git a/SpigotCore_12/src/de/steamwar/chunk/Chunk_12.java b/SpigotCore_12/src/de/steamwar/chunk/Chunk_12.java
new file mode 100644
index 0000000..2b93f27
--- /dev/null
+++ b/SpigotCore_12/src/de/steamwar/chunk/Chunk_12.java
@@ -0,0 +1,14 @@
+package de.steamwar.chunk;
+
+import net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk;
+import org.bukkit.craftbukkit.v1_12_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+
+public class Chunk_12 {
+ private Chunk_12(){}
+
+ public static void sendChunk(Player p, int chunkX, int chunkZ){
+ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunkX, chunkZ)).getHandle(), 65535));
+ }
+}
diff --git a/SpigotCore_14/src/de/steamwar/chunk/Chunk_14.java b/SpigotCore_14/src/de/steamwar/chunk/Chunk_14.java
new file mode 100644
index 0000000..a9740f2
--- /dev/null
+++ b/SpigotCore_14/src/de/steamwar/chunk/Chunk_14.java
@@ -0,0 +1,14 @@
+package de.steamwar.chunk;
+
+import net.minecraft.server.v1_14_R1.PacketPlayOutMapChunk;
+import org.bukkit.craftbukkit.v1_14_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+
+public class Chunk_14 {
+ private Chunk_14(){}
+
+ public static void sendChunk(Player p, int chunkX, int chunkZ){
+ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunkX, chunkZ)).getHandle(), 65535));
+ }
+}
diff --git a/SpigotCore_15/src/de/steamwar/chunk/Chunk_15.java b/SpigotCore_15/src/de/steamwar/chunk/Chunk_15.java
new file mode 100644
index 0000000..a01942d
--- /dev/null
+++ b/SpigotCore_15/src/de/steamwar/chunk/Chunk_15.java
@@ -0,0 +1,14 @@
+package de.steamwar.chunk;
+
+import net.minecraft.server.v1_15_R1.PacketPlayOutMapChunk;
+import org.bukkit.craftbukkit.v1_15_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+
+public class Chunk_15 {
+ private Chunk_15(){}
+
+ public static void sendChunk(Player p, int chunkX, int chunkZ){
+ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunkX, chunkZ)).getHandle(), 65535));
+ }
+}
diff --git a/SpigotCore_8/src/de/steamwar/chunk/Chunk_8.java b/SpigotCore_8/src/de/steamwar/chunk/Chunk_8.java
new file mode 100644
index 0000000..5618022
--- /dev/null
+++ b/SpigotCore_8/src/de/steamwar/chunk/Chunk_8.java
@@ -0,0 +1,14 @@
+package de.steamwar.chunk;
+
+import net.minecraft.server.v1_8_R3.PacketPlayOutMapChunk;
+import org.bukkit.craftbukkit.v1_8_R3.CraftChunk;
+import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+
+public class Chunk_8 {
+ private Chunk_8(){}
+
+ public static void sendChunk(Player p, int chunkX, int chunkZ){
+ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunkX, chunkZ)).getHandle(), true, 65535));
+ }
+}
diff --git a/SpigotCore_9/src/de/steamwar/chunk/Chunk_9.java b/SpigotCore_9/src/de/steamwar/chunk/Chunk_9.java
new file mode 100644
index 0000000..ba1b096
--- /dev/null
+++ b/SpigotCore_9/src/de/steamwar/chunk/Chunk_9.java
@@ -0,0 +1,14 @@
+package de.steamwar.chunk;
+
+import net.minecraft.server.v1_9_R2.PacketPlayOutMapChunk;
+import org.bukkit.craftbukkit.v1_9_R2.CraftChunk;
+import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+
+public class Chunk_9 {
+ private Chunk_9(){}
+
+ public static void sendChunk(Player p, int chunkX, int chunkZ){
+ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunkX, chunkZ)).getHandle(), 65535));
+ }
+}
diff --git a/SpigotCore_Main/pom.xml b/SpigotCore_Main/pom.xml
index ae6b0df..d7ffdec 100644
--- a/SpigotCore_Main/pom.xml
+++ b/SpigotCore_Main/pom.xml
@@ -56,6 +56,12 @@
1.0
provided
+
+ steamwar
+ ProtocolLib
+ 1.0
+ provided
+
steamwar
SpigotCore_API
diff --git a/SpigotCore_Main/src/de/steamwar/core/Core.java b/SpigotCore_Main/src/de/steamwar/core/Core.java
index d7e778c..ea5a2bd 100644
--- a/SpigotCore_Main/src/de/steamwar/core/Core.java
+++ b/SpigotCore_Main/src/de/steamwar/core/Core.java
@@ -1,6 +1,7 @@
package de.steamwar.core;
import de.steamwar.core.events.ChattingEvent;
+import de.steamwar.core.events.ChunkListener;
import de.steamwar.core.events.PlayerJoinedEvent;
import de.steamwar.core.events.WorldLoadEvent;
import de.steamwar.sql.SQL;
@@ -38,6 +39,7 @@ public class Core extends JavaPlugin{
Bukkit.getPluginManager().registerEvents(new PlayerJoinedEvent(), this);
Bukkit.getPluginManager().registerEvents(new ChattingEvent(), this);
Bukkit.getPluginManager().registerEvents(new WorldLoadEvent(), this);
+ ChunkListener.init();
if(version >= 12)
ErrorLogger.init();
}
diff --git a/SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java b/SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java
new file mode 100644
index 0000000..fe7d74f
--- /dev/null
+++ b/SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java
@@ -0,0 +1,64 @@
+package de.steamwar.core.events;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.events.PacketAdapter;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.events.PacketEvent;
+import com.comphenix.protocol.reflect.StructureModifier;
+import de.steamwar.chunk.*;
+import de.steamwar.core.Core;
+import de.steamwar.sql.SteamwarUser;
+import org.bukkit.entity.Player;
+
+public class ChunkListener {
+ private ChunkListener(){}
+
+ public static void init(){
+ ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(Core.getInstance(), PacketType.Play.Server.MAP_CHUNK) {
+ @Override
+ public void onPacketSending(PacketEvent e) {
+ Player p = e.getPlayer();
+ SteamwarUser user = SteamwarUser.get(p.getUniqueId());
+ if(!user.isBedrock())
+ return;
+
+ PacketContainer packet = e.getPacket();
+ StructureModifier fullChunk = packet.getBooleans();
+ if(fullChunk.read(0))
+ return;
+
+ e.setCancelled(true);
+
+ StructureModifier ints = packet.getIntegers();
+ int chunkX = ints.read(0);
+ int chunkZ = ints.read(1);
+
+ sendChunk(p, chunkX, chunkZ);
+ }
+ });
+ }
+
+ public static void sendChunk(Player p, int chunkX, int chunkZ){
+ switch(Core.getVersion()){
+ case 15:
+ Chunk_15.sendChunk(p, chunkX, chunkZ);
+ break;
+ case 14:
+ Chunk_14.sendChunk(p, chunkX, chunkZ);
+ break;
+ case 12:
+ Chunk_12.sendChunk(p, chunkX, chunkZ);
+ break;
+ case 10:
+ Chunk_10.sendChunk(p, chunkX, chunkZ);
+ break;
+ case 9:
+ Chunk_9.sendChunk(p, chunkX, chunkZ);
+ break;
+ case 8:
+ Chunk_8.sendChunk(p, chunkX, chunkZ);
+ break;
+ }
+ }
+}
diff --git a/SpigotCore_Main/src/de/steamwar/sql/SteamwarUser.java b/SpigotCore_Main/src/de/steamwar/sql/SteamwarUser.java
index ea2eac9..fb25b5d 100644
--- a/SpigotCore_Main/src/de/steamwar/sql/SteamwarUser.java
+++ b/SpigotCore_Main/src/de/steamwar/sql/SteamwarUser.java
@@ -26,6 +26,7 @@ public class SteamwarUser {
private final String userName;
private final UserGroup userGroup;
private final int team;
+ private final boolean bedrock;
private SteamwarUser(ResultSet rs){
try {
@@ -34,6 +35,7 @@ public class SteamwarUser {
userName = rs.getString("UserName");
userGroup = UserGroup.valueOf(rs.getString("UserGroup"));
team = rs.getInt("Team");
+ bedrock = rs.getBoolean("Bedrock");
byUUID.put(uuid, this);
byName.put(userName.toLowerCase(), this);
@@ -63,6 +65,10 @@ public class SteamwarUser {
return team;
}
+ public boolean isBedrock(){
+ return bedrock;
+ }
+
private static SteamwarUser fromDB(String statement, Object identifier){
ResultSet rs = SQL.select(statement, identifier);
try {
diff --git a/SpigotCore_Main/src/plugin.yml b/SpigotCore_Main/src/plugin.yml
index 8eee87b..370fc34 100644
--- a/SpigotCore_Main/src/plugin.yml
+++ b/SpigotCore_Main/src/plugin.yml
@@ -5,6 +5,8 @@ api-version: "1.13"
load: STARTUP
softdepend:
- WorldEdit
+depend:
+ - ProtocolLib
main: de.steamwar.core.Core
commands:
\ No newline at end of file