diff --git a/game/client/src/main/java/net/minecraft/client/util/helper/FileOpener.java b/game/client/src/main/java/net/minecraft/client/util/helper/FileOpener.java index e0bc3d199..98f48dd54 100644 --- a/game/client/src/main/java/net/minecraft/client/util/helper/FileOpener.java +++ b/game/client/src/main/java/net/minecraft/client/util/helper/FileOpener.java @@ -21,7 +21,14 @@ public final class FileOpener { case linux: case solaris: default: - return run("xclip-copyfile", "%s", path); + // Need to use wl-copy instead of xclip for wayland + String XDGSessionType = System.getenv("XDG_SESSION_TYPE"); + + if (XDGSessionType != null && XDGSessionType.equals("wayland")) { + return run("bash", "-c %s", "wl-copy < " + path); + } else { + return run("xclip-copyfile", "%s", path); + } } } diff --git a/game/server/src/main/java/net/minecraft/server/net/PlayerList.java b/game/server/src/main/java/net/minecraft/server/net/PlayerList.java index 3aa4cc3d6..8f4308871 100644 --- a/game/server/src/main/java/net/minecraft/server/net/PlayerList.java +++ b/game/server/src/main/java/net/minecraft/server/net/PlayerList.java @@ -220,6 +220,7 @@ public class PlayerList newPlayer.gamemode = previousPlayer.gamemode; newPlayer.playerNetServerHandler = previousPlayer.playerNetServerHandler; newPlayer.inventory.transferAllContents(previousPlayer.inventory); + newPlayer.playerConfig.config = previousPlayer.playerConfig.config; WorldServer worldserver = server.getDimensionWorld(previousPlayer.dimension); //entityplayermp1.setGamemodeOnLogin(entityplayermp.gamemode); if (chunkcoordinates != null) diff --git a/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java b/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java index c2a475017..7a03a7989 100644 --- a/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java +++ b/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java @@ -586,6 +586,14 @@ public class PacketHandlerServer extends PacketHandler if (!this.playerEntity.getGamemode().canInteract() || !this.playerEntity.isAlive()) return; WorldServer worldserver = this.mcServer.getDimensionWorld(this.playerEntity.dimension); Entity targetEntity = worldserver.getEntityFromId(packetEntityInteract.targetEntityID); + + // technically not null, so this shouldn't happen, + // but trying to get an entity with invalid id from getEntityFromId returns null anyway + // which will crash, so this is a quick fix to stop people from being kicked from a server + // which seems to fix the issue without any obvious side effects + // real problem is probably entity ids being synced incorrectly, but I have no idea what to do with that + if(targetEntity == null) return; + if (this.playerEntity.distanceToSqr(targetEntity) < 36D) { boolean canAttack = this.playerEntity.canEntityBeSeen(targetEntity);