Fix BedrockEdition inability for Non-Full-Chunk packets
Dieser Commit ist enthalten in:
Ursprung
021a189823
Commit
743e40c9ce
14
SpigotCore_10/src/de/steamwar/chunk/Chunk_10.java
Normale Datei
14
SpigotCore_10/src/de/steamwar/chunk/Chunk_10.java
Normale Datei
@ -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));
|
||||
}
|
||||
}
|
14
SpigotCore_12/src/de/steamwar/chunk/Chunk_12.java
Normale Datei
14
SpigotCore_12/src/de/steamwar/chunk/Chunk_12.java
Normale Datei
@ -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));
|
||||
}
|
||||
}
|
14
SpigotCore_14/src/de/steamwar/chunk/Chunk_14.java
Normale Datei
14
SpigotCore_14/src/de/steamwar/chunk/Chunk_14.java
Normale Datei
@ -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));
|
||||
}
|
||||
}
|
14
SpigotCore_15/src/de/steamwar/chunk/Chunk_15.java
Normale Datei
14
SpigotCore_15/src/de/steamwar/chunk/Chunk_15.java
Normale Datei
@ -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));
|
||||
}
|
||||
}
|
14
SpigotCore_8/src/de/steamwar/chunk/Chunk_8.java
Normale Datei
14
SpigotCore_8/src/de/steamwar/chunk/Chunk_8.java
Normale Datei
@ -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));
|
||||
}
|
||||
}
|
14
SpigotCore_9/src/de/steamwar/chunk/Chunk_9.java
Normale Datei
14
SpigotCore_9/src/de/steamwar/chunk/Chunk_9.java
Normale Datei
@ -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));
|
||||
}
|
||||
}
|
@ -56,6 +56,12 @@
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>ProtocolLib</artifactId>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_API</artifactId>
|
||||
|
@ -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();
|
||||
}
|
||||
|
64
SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java
Normale Datei
64
SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java
Normale Datei
@ -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<Boolean> fullChunk = packet.getBooleans();
|
||||
if(fullChunk.read(0))
|
||||
return;
|
||||
|
||||
e.setCancelled(true);
|
||||
|
||||
StructureModifier<Integer> 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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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 {
|
||||
|
@ -5,6 +5,8 @@ api-version: "1.13"
|
||||
load: STARTUP
|
||||
softdepend:
|
||||
- WorldEdit
|
||||
depend:
|
||||
- ProtocolLib
|
||||
|
||||
main: de.steamwar.core.Core
|
||||
commands:
|
In neuem Issue referenzieren
Einen Benutzer sperren