From 60f0d5dc893af8edcf03e6040877757ca5812c16 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 17 Jul 2020 21:55:12 +0200 Subject: [PATCH] some fixes, store sign data as nbt internally --- .../game/datatypes/scoreboard/Team.java | 12 +++++----- .../minosoft/game/datatypes/world/World.java | 12 ---------- .../bixilon/minosoft/nbt/tag/CompoundTag.java | 13 ++++++++++ .../play/PacketDeclareRecipes.java | 2 +- .../packets/clientbound/play/PacketTeams.java | 24 +++++++++---------- .../protocol/protocol/PacketHandler.java | 9 ++++++- 6 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/scoreboard/Team.java b/src/main/java/de/bixilon/minosoft/game/datatypes/scoreboard/Team.java index 0987152b1..577e44bb8 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/scoreboard/Team.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/scoreboard/Team.java @@ -23,12 +23,12 @@ public class Team { final String name; final List players; TextComponent displayName; - String prefix; - String suffix; + TextComponent prefix; + TextComponent suffix; boolean friendlyFire; boolean seeFriendlyInvisibles; - public Team(String name, TextComponent displayName, String prefix, String suffix, boolean friendlyFire, boolean seeFriendlyInvisibles, String[] players) { + public Team(String name, TextComponent displayName, TextComponent prefix, TextComponent suffix, boolean friendlyFire, boolean seeFriendlyInvisibles, String[] players) { this.name = name; this.displayName = displayName; this.prefix = prefix; @@ -38,7 +38,7 @@ public class Team { this.players = new ArrayList<>(Arrays.asList(players)); } - public void updateInformation(TextComponent displayName, String prefix, String suffix, boolean friendlyFire, boolean seeFriendlyInvisibles) { + public void updateInformation(TextComponent displayName, TextComponent prefix, TextComponent suffix, boolean friendlyFire, boolean seeFriendlyInvisibles) { this.displayName = displayName; this.prefix = prefix; this.suffix = suffix; @@ -54,11 +54,11 @@ public class Team { return displayName; } - public String getPrefix() { + public TextComponent getPrefix() { return prefix; } - public String getSuffix() { + public TextComponent getSuffix() { return suffix; } diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/world/World.java b/src/main/java/de/bixilon/minosoft/game/datatypes/world/World.java index bef2f142b..bc1e08703 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/world/World.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/world/World.java @@ -14,7 +14,6 @@ package de.bixilon.minosoft.game.datatypes.world; import de.bixilon.minosoft.game.datatypes.Dimension; -import de.bixilon.minosoft.game.datatypes.TextComponent; import de.bixilon.minosoft.game.datatypes.blocks.Block; import de.bixilon.minosoft.game.datatypes.blocks.Blocks; import de.bixilon.minosoft.game.datatypes.entities.Entity; @@ -30,7 +29,6 @@ public class World { final HashMap chunks; final HashMap entities; final String name; - final HashMap signs; final HashMap blockEntityMeta; boolean hardcore; boolean raining; @@ -40,7 +38,6 @@ public class World { this.name = name; chunks = new HashMap<>(); entities = new HashMap<>(); - signs = new HashMap<>(); blockEntityMeta = new HashMap<>(); } @@ -125,15 +122,6 @@ public class World { this.dimension = dimension; } - public void updateSign(BlockPosition position, TextComponent[] lines) { - // ToDo check if block is really a sign - signs.put(position, lines); - } - - public TextComponent[] getSignText(BlockPosition position) { - return signs.get(position); - } - public void setBlockEntityData(BlockPosition position, CompoundTag nbt) { // ToDo check if block is really a block entity (command block, spawner, skull, flower pot) blockEntityMeta.put(position, nbt); diff --git a/src/main/java/de/bixilon/minosoft/nbt/tag/CompoundTag.java b/src/main/java/de/bixilon/minosoft/nbt/tag/CompoundTag.java index ea541edb9..16a5e8115 100644 --- a/src/main/java/de/bixilon/minosoft/nbt/tag/CompoundTag.java +++ b/src/main/java/de/bixilon/minosoft/nbt/tag/CompoundTag.java @@ -13,6 +13,7 @@ package de.bixilon.minosoft.nbt.tag; +import de.bixilon.minosoft.game.datatypes.world.BlockPosition; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; @@ -182,6 +183,18 @@ public class CompoundTag implements NBTTag { return (CompoundTag) data.get(key); } + public void writeTag(String name, NBTTag tag) { + data.put(name, tag); + } + + // abstract functions + + public void writeBlockPosition(BlockPosition position) { + data.put("x", new IntTag(position.getX())); + data.put("y", new IntTag(position.getY())); + data.put("z", new IntTag(position.getZ())); + } + @Override public String toString() { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketDeclareRecipes.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketDeclareRecipes.java index 545d54e18..8c1d6a747 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketDeclareRecipes.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketDeclareRecipes.java @@ -76,7 +76,7 @@ public class PacketDeclareRecipes implements ClientboundPacket { @Override public void log() { - Log.protocol(String.format("Received unlock crafting recipe packet (recipeLength=%d)", recipes.length)); + Log.protocol(String.format("Received declare recipe packet (recipeLength=%d)", recipes.length)); } @Override diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTeams.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTeams.java index 65058b97e..f0d1523d4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTeams.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTeams.java @@ -25,8 +25,8 @@ public class PacketTeams implements ClientboundPacket { String name; TeamActions action; TextComponent displayName; - String prefix; - String suffix; + TextComponent prefix; + TextComponent suffix; boolean friendlyFire; boolean seeFriendlyInvisibles; TeamCollisionRules collisionRule = TeamCollisionRules.NEVER; @@ -43,8 +43,8 @@ public class PacketTeams implements ClientboundPacket { action = TeamActions.byId(buffer.readByte()); if (action == TeamActions.CREATE || action == TeamActions.INFORMATION_UPDATE) { displayName = buffer.readTextComponent(); - prefix = buffer.readString(); - suffix = buffer.readString(); + prefix = buffer.readTextComponent(); + suffix = buffer.readTextComponent(); setFriendlyFireByLegacy(buffer.readByte()); } if (action == TeamActions.CREATE || action == TeamActions.PLAYER_ADD || action == TeamActions.PLAYER_REMOVE) { @@ -60,8 +60,8 @@ public class PacketTeams implements ClientboundPacket { action = TeamActions.byId(buffer.readByte()); if (action == TeamActions.CREATE || action == TeamActions.INFORMATION_UPDATE) { displayName = buffer.readTextComponent(); - prefix = buffer.readString(); - suffix = buffer.readString(); + prefix = buffer.readTextComponent(); + suffix = buffer.readTextComponent(); setFriendlyFireByLegacy(buffer.readByte()); nameTagVisibility = TeamNameTagVisibilities.byName(buffer.readString()); color = TextComponent.ChatAttributes.byColor(ChatColor.byId(buffer.readByte())); @@ -82,8 +82,8 @@ public class PacketTeams implements ClientboundPacket { action = TeamActions.byId(buffer.readByte()); if (action == TeamActions.CREATE || action == TeamActions.INFORMATION_UPDATE) { displayName = buffer.readTextComponent(); - prefix = buffer.readString(); - suffix = buffer.readString(); + prefix = buffer.readTextComponent(); + suffix = buffer.readTextComponent(); byte friendlyFireRaw = buffer.readByte(); friendlyFire = BitByte.isBitMask(friendlyFireRaw, 0x01); seeFriendlyInvisibles = BitByte.isBitMask(friendlyFireRaw, 0x02); @@ -110,8 +110,8 @@ public class PacketTeams implements ClientboundPacket { nameTagVisibility = TeamNameTagVisibilities.byName(buffer.readString()); collisionRule = TeamCollisionRules.byName(buffer.readString()); color = TextComponent.ChatAttributes.byColor(ChatColor.byId(buffer.readByte())); - prefix = buffer.readString(); - suffix = buffer.readString(); + prefix = buffer.readTextComponent(); + suffix = buffer.readTextComponent(); } if (action == TeamActions.CREATE || action == TeamActions.PLAYER_ADD || action == TeamActions.PLAYER_REMOVE) { int playerCount = buffer.readVarInt(); @@ -148,11 +148,11 @@ public class PacketTeams implements ClientboundPacket { return displayName; } - public String getPrefix() { + public TextComponent getPrefix() { return prefix; } - public String getSuffix() { + public TextComponent getSuffix() { return suffix; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java index 54a5bc1ba..f627bebde 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java @@ -27,6 +27,8 @@ import de.bixilon.minosoft.game.datatypes.scoreboard.ScoreboardScore; import de.bixilon.minosoft.game.datatypes.scoreboard.Team; import de.bixilon.minosoft.game.datatypes.world.BlockPosition; import de.bixilon.minosoft.logging.Log; +import de.bixilon.minosoft.nbt.tag.CompoundTag; +import de.bixilon.minosoft.nbt.tag.StringTag; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketEncryptionRequest; import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketLoginDisconnect; @@ -339,7 +341,12 @@ public class PacketHandler { } public void handle(PacketUpdateSignReceiving pkg) { - connection.getPlayer().getWorld().updateSign(pkg.getPosition(), pkg.getLines()); + CompoundTag nbt = new CompoundTag(); + nbt.writeBlockPosition(pkg.getPosition()); + nbt.writeTag("id", new StringTag("minecraft:sign")); + for (int i = 0; i < 4; i++) { + nbt.writeTag(String.format("Text%d", (i + 1)), new StringTag(pkg.getLines()[i].getRaw().toString())); + } } public void handle(PacketEntityAnimation pkg) {