diff --git a/.gitignore b/.gitignore index 28d4f47..405b278 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,9 @@ target/ # Mac OS -.DS_Store \ No newline at end of file +.DS_Store + +# Eclipse +.classpath +.project +.settings/ \ No newline at end of file diff --git a/.gitignore.bak b/.gitignore.bak new file mode 100644 index 0000000..28d4f47 --- /dev/null +++ b/.gitignore.bak @@ -0,0 +1,9 @@ +# IntelliJ IDEA +*.iml +.idea/ + +# Maven +target/ + +# Mac OS +.DS_Store \ No newline at end of file diff --git a/src/main/java/com/loohp/limbo/player/Player.java b/src/main/java/com/loohp/limbo/player/Player.java index 5b76223..7c6ff4d 100644 --- a/src/main/java/com/loohp/limbo/player/Player.java +++ b/src/main/java/com/loohp/limbo/player/Player.java @@ -21,6 +21,9 @@ import com.loohp.limbo.server.packets.PacketPlayOutPlayerListHeaderFooter; import com.loohp.limbo.server.packets.PacketPlayOutPositionAndLook; import com.loohp.limbo.server.packets.PacketPlayOutResourcePackSend; import com.loohp.limbo.server.packets.PacketPlayOutRespawn; +import com.loohp.limbo.server.packets.PacketPlayOutSetTitleSubTitleText; +import com.loohp.limbo.server.packets.PacketPlayOutSetTitleText; +import com.loohp.limbo.server.packets.PacketPlayOutSetTitleTimes; import com.loohp.limbo.utils.GameMode; import net.md_5.bungee.api.ChatColor; @@ -308,4 +311,61 @@ public class Player extends LivingEntity implements CommandSender { setPlayerListHeaderFooter(header == null ? EMPTY_CHAT_COMPONENT : new BaseComponent[] {new TextComponent(header)}, footer == null ? EMPTY_CHAT_COMPONENT : new BaseComponent[] {new TextComponent(footer)}); } + public void setTitle(BaseComponent[] title) { + try { + PacketPlayOutSetTitleText setTitle = new PacketPlayOutSetTitleText(title == null ? EMPTY_CHAT_COMPONENT : title); + clientConnection.sendPacket(setTitle); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void setTitle(BaseComponent title) { + setTitle(title == null ? EMPTY_CHAT_COMPONENT : new BaseComponent[] {title}); + } + + public void setTitle(String title) { + setTitle(title == null ? EMPTY_CHAT_COMPONENT : new BaseComponent[] {new TextComponent(title)}); + } + + public void setSubTitle(BaseComponent[] subTitle) { + try { + PacketPlayOutSetTitleSubTitleText setSubTitle = new PacketPlayOutSetTitleSubTitleText(subTitle == null ? EMPTY_CHAT_COMPONENT : subTitle); + clientConnection.sendPacket(setSubTitle); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void setSubTitle(BaseComponent subTitle) { + setSubTitle(subTitle == null ? EMPTY_CHAT_COMPONENT : new BaseComponent[] {subTitle}); + } + + public void setSubTitle(String subTitle) { + setSubTitle(subTitle == null ? EMPTY_CHAT_COMPONENT : new BaseComponent[] {new TextComponent(subTitle)}); + } + + public void setTitleTimer(Integer fadeIn, Integer stay, Integer fadeOut) { + try { + PacketPlayOutSetTitleTimes setTitleTimes = new PacketPlayOutSetTitleTimes(fadeIn, stay, fadeOut); + clientConnection.sendPacket(setTitleTimes); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void setTitleSubTitle(BaseComponent[] title, BaseComponent[] subTitle, Integer fadeIn, Integer stay, Integer fadeOut) { + setTitleTimer(fadeIn, stay, fadeOut); + setTitle(title); + setSubTitle(subTitle); + } + + public void setTitleSubTitle(BaseComponent title, BaseComponent subTitle, Integer fadeIn, Integer stay, Integer fadeOut) { + setTitleSubTitle(new BaseComponent[] {title}, new BaseComponent[] {subTitle}, fadeIn, stay, fadeOut); + } + + public void setTitleSubTitle(String title, String subTitle, Integer fadeIn, Integer stay, Integer fadeOut) { + setTitleSubTitle(new BaseComponent[] {new TextComponent(title)}, new BaseComponent[] {new TextComponent(subTitle)}, fadeIn, stay, fadeOut); + } + } diff --git a/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleSubTitleText.java b/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleSubTitleText.java new file mode 100644 index 0000000..eed54b2 --- /dev/null +++ b/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleSubTitleText.java @@ -0,0 +1,35 @@ +package com.loohp.limbo.server.packets; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import com.loohp.limbo.utils.DataTypeIO; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; + +public class PacketPlayOutSetTitleSubTitleText extends PacketOut { + private BaseComponent[] subTitle; + + public PacketPlayOutSetTitleSubTitleText(BaseComponent[] subTitle) { + this.subTitle = subTitle; + } + + public BaseComponent[] getSubTitle() { + return subTitle; + } + + @Override + public byte[] serializePacket() throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + DataOutputStream output = new DataOutputStream(buffer); + output.writeByte(Packet.getPlayOut().get(getClass())); + DataTypeIO.writeString(output, ComponentSerializer.toString(subTitle), StandardCharsets.UTF_8); + + return buffer.toByteArray(); + } + +} diff --git a/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleText.java b/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleText.java new file mode 100644 index 0000000..a1f6c3d --- /dev/null +++ b/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleText.java @@ -0,0 +1,36 @@ +package com.loohp.limbo.server.packets; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import com.loohp.limbo.utils.DataTypeIO; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; + +public class PacketPlayOutSetTitleText extends PacketOut { + + private BaseComponent[] titleText; + + public PacketPlayOutSetTitleText(BaseComponent[] titleText) { + this.titleText = titleText; + } + + public BaseComponent[] getTitle() { + return titleText; + } + + @Override + public byte[] serializePacket() throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + DataOutputStream output = new DataOutputStream(buffer); + output.writeByte(Packet.getPlayOut().get(getClass())); + DataTypeIO.writeString(output, ComponentSerializer.toString(titleText), StandardCharsets.UTF_8); + + return buffer.toByteArray(); + } + +} diff --git a/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleTimes.java b/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleTimes.java new file mode 100644 index 0000000..caf06d6 --- /dev/null +++ b/src/main/java/com/loohp/limbo/server/packets/PacketPlayOutSetTitleTimes.java @@ -0,0 +1,45 @@ +package com.loohp.limbo.server.packets; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class PacketPlayOutSetTitleTimes extends PacketOut { + + private Integer fadeIn; + private Integer stay; + private Integer fadeOut; + + public PacketPlayOutSetTitleTimes(Integer fadeIn, Integer stay, Integer fadeOut) { + this.fadeIn = fadeIn; + this.stay = stay; + this.fadeOut = fadeOut; + } + + public Integer getFadeIn() { + return fadeIn; + } + + public Integer getStay() { + return stay; + } + + public Integer getFadeOut() { + return fadeOut; + } + + @Override + public byte[] serializePacket() throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + DataOutputStream output = new DataOutputStream(buffer); + output.writeByte(Packet.getPlayOut().get(getClass())); + + output.writeInt(fadeIn); + output.writeInt(stay); + output.writeInt(fadeOut); + + return buffer.toByteArray(); + } + +} diff --git a/src/main/resources/mapping.json b/src/main/resources/mapping.json index 9e7be9c..5bbf2b6 100644 --- a/src/main/resources/mapping.json +++ b/src/main/resources/mapping.json @@ -45,7 +45,10 @@ "PacketPlayOutSpawnEntityLiving": "0x02", "PacketPlayOutHeldItemChange": "0x48", "PacketPlayOutPlayerListHeaderFooter": "0x5F", - "PacketPlayOutResourcePackSend": "0x3C" + "PacketPlayOutResourcePackSend": "0x3C", + "PacketPlayOutSetTitleTimes": "0x5B", + "PacketPlayOutSetTitleText": "0x5A", + "PacketPlayOutSetTitleSubTitleText": "0x58" }, "StatusIn": { "0x01": "PacketStatusInPing",