From f25ec3b5b131f72e1ebaa09645e226d8f49dfd37 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 23 Jun 2020 16:41:45 +0200 Subject: [PATCH] TabList: header and footer --- .../java/de/bixilon/minosoft/Minosoft.java | 1 - .../minosoft/game/datatypes/Player.java | 19 +++++++ .../play/PacketTabHeaderAndFooter.java | 56 +++++++++++++++++++ .../protocol/protocol/PacketHandler.java | 5 ++ .../minosoft/protocol/protocol/Protocol.java | 1 + 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTabHeaderAndFooter.java diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.java b/src/main/java/de/bixilon/minosoft/Minosoft.java index 084e456d9..89c067bbb 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.java +++ b/src/main/java/de/bixilon/minosoft/Minosoft.java @@ -91,7 +91,6 @@ public class Minosoft { case OTHER: path += ".minosoft/"; break; - //ToDo: Mac, Other } File folder = new File(path); if (!folder.exists() && !folder.mkdirs()) { diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/Player.java b/src/main/java/de/bixilon/minosoft/game/datatypes/Player.java index cda8dd18b..da6b96cad 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/Player.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/Player.java @@ -47,6 +47,9 @@ public class Player { HashMap inventories = new HashMap<>(); boolean spawnConfirmed = false; + TextComponent tabHeader; + TextComponent tabFooter; + public Player(MojangAccount acc) { this.acc = acc; // create our own inventory without any properties @@ -216,4 +219,20 @@ public class Player { } return null; } + + public TextComponent getTabHeader() { + return tabHeader; + } + + public void setTabHeader(TextComponent tabHeader) { + this.tabHeader = tabHeader; + } + + public TextComponent getTabFooter() { + return tabFooter; + } + + public void setTabFooter(TextComponent tabFooter) { + this.tabFooter = tabFooter; + } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTabHeaderAndFooter.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTabHeaderAndFooter.java new file mode 100644 index 000000000..d715b36bf --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTabHeaderAndFooter.java @@ -0,0 +1,56 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.packets.clientbound.play; + +import de.bixilon.minosoft.game.datatypes.TextComponent; +import de.bixilon.minosoft.logging.Log; +import de.bixilon.minosoft.protocol.packets.ClientboundPacket; +import de.bixilon.minosoft.protocol.protocol.InPacketBuffer; +import de.bixilon.minosoft.protocol.protocol.PacketHandler; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; + +public class PacketTabHeaderAndFooter implements ClientboundPacket { + TextComponent header; + TextComponent footer; + + + @Override + public void read(InPacketBuffer buffer, ProtocolVersion v) { + switch (v) { + case VERSION_1_8: + header = buffer.readTextComponent(); + footer = buffer.readTextComponent(); + break; + } + } + + @Override + public void log() { + Log.protocol(String.format("Received tab list header: %s", header.getColoredMessage())); + Log.protocol(String.format("Received tab list footer: %s", footer.getColoredMessage())); + } + + @Override + public void handle(PacketHandler h) { + h.handle(this); + } + + public TextComponent getHeader() { + return header; + } + + public TextComponent getFooter() { + return footer; + } +} 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 30cb302fe..89666b673 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java @@ -479,4 +479,9 @@ public class PacketHandler { public void handle(PacketServerDifficulty pkg) { } + + public void handle(PacketTabHeaderAndFooter pkg) { + connection.getPlayer().setTabHeader(pkg.getHeader()); + connection.getPlayer().setTabFooter(pkg.getFooter()); + } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java index 8ebf35ad2..19e4661b6 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java @@ -114,6 +114,7 @@ public abstract class Protocol implements ProtocolInterface { packetClassMapping.put(Packets.Clientbound.PLAY_DISPLAY_SCOREBOARD, PacketScoreboardDisplayScoreboard.class); packetClassMapping.put(Packets.Clientbound.PLAY_MAP_DATA, PacketMapData.class); packetClassMapping.put(Packets.Clientbound.PLAY_SERVER_DIFFICULTY, PacketServerDifficulty.class); + packetClassMapping.put(Packets.Clientbound.PLAY_LIST_HEADER_AND_FOOTER, PacketTabHeaderAndFooter.class); } public static ProtocolVersion getLowestVersionSupported() {