diff --git a/.gitignore b/.gitignore index 7eae63f..02142ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea target -dependency-reduced-pom.xml \ No newline at end of file +dependency-reduced-pom.xml +*.iml \ No newline at end of file diff --git a/SpigotCore_12/pom.xml b/SpigotCore_12/pom.xml index eb4680f..19d5cea 100644 --- a/SpigotCore_12/pom.xml +++ b/SpigotCore_12/pom.xml @@ -33,5 +33,10 @@ 1.12 provided + + steamwar + SpigotCore_8 + 2.0 + \ No newline at end of file diff --git a/SpigotCore_12/src/de/steamwar/scoreboard/SWScoreboard_12.java b/SpigotCore_12/src/de/steamwar/scoreboard/SWScoreboard_12.java new file mode 100644 index 0000000..743a9a8 --- /dev/null +++ b/SpigotCore_12/src/de/steamwar/scoreboard/SWScoreboard_12.java @@ -0,0 +1,65 @@ +package de.steamwar.scoreboard; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.reflect.StructureModifier; +import net.minecraft.server.v1_12_R1.IScoreboardCriteria; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.lang.reflect.InvocationTargetException; +import java.util.logging.Level; + +public class SWScoreboard_12 { + + private SWScoreboard_12() {} + + static void sendRemovePacket(Player player) { + SWScoreboard_8.sendRemovePacket(player); + } + + static void sendCreatePacket(String title, Player player) { + PacketContainer createPacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SCOREBOARD_OBJECTIVE); + createPacket.getStrings().write(0, "AAA"); + createPacket.getIntegers().write(0, 0); + createPacket.getStrings().write(1, title); + StructureModifier modifier = createPacket.getEnumModifier(IScoreboardCriteria.EnumScoreboardHealthDisplay.class, 0); + modifier.write(0, SWEnumScoreboardHealtyDisplay.INTEGER); + + sendPacket(player, createPacket); + } + + static void sendUpdatePacket(String content, Integer line, Player player) { + SWScoreboard_8.sendUpdatePacket(content, line, player); + } + + static void sendDisplayPacket(Player player) { + SWScoreboard_8.sendDisplayPacket(player); + } + + private static void sendPacket(Player player, PacketContainer packetContainer) { + try { + ProtocolLibrary.getProtocolManager().sendServerPacket(player, packetContainer); + } catch (InvocationTargetException ex) { + Bukkit.getLogger().log(Level.SEVERE, "COULD NOT SEND PACKAGE", ex); + } + } + + static enum SWEnumScoreboardHealtyDisplay { + INTEGER("integer"), + HEARTS("hearts"); + + private String string; + + private SWEnumScoreboardHealtyDisplay(String string) { + this.string = string; + } + + public String getString() { + return string; + } + } + + +} diff --git a/SpigotCore_14/pom.xml b/SpigotCore_14/pom.xml index 9b030de..65db327 100644 --- a/SpigotCore_14/pom.xml +++ b/SpigotCore_14/pom.xml @@ -33,5 +33,10 @@ 1.14 provided + + steamwar + SpigotCore_8 + 2.0 + \ No newline at end of file diff --git a/SpigotCore_14/src/de/steamwar/scoreboard/SWScoreboard_14.java b/SpigotCore_14/src/de/steamwar/scoreboard/SWScoreboard_14.java new file mode 100644 index 0000000..f0cb561 --- /dev/null +++ b/SpigotCore_14/src/de/steamwar/scoreboard/SWScoreboard_14.java @@ -0,0 +1,33 @@ +package de.steamwar.scoreboard; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; + +public class SWScoreboard_14 { + + private SWScoreboard_14() {} + + static PacketContainer getRemovePacket() { + return null; //Todo SWScoreboard_8.getRemovePacket(); + } + + static PacketContainer getCreatePacket(String title) { + PacketContainer createpacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SCOREBOARD_OBJECTIVE); + createpacket.getStrings().write(0, "AAA"); + createpacket.getBytes().write(0, (byte) 0); + createpacket.getStrings().write(1, title); + createpacket.getIntegers().write(0, 0); + return createpacket; + } + + static PacketContainer getUpdatePacket(String content, Integer line) { + return null; //todo SWScoreboard_8.getUpdatePacket(content, line); + } + + static PacketContainer getDisplayPacket(String title) { + return null; //TOdo SWScoreboard_8.getDisplayPacket(title); + } + + +} diff --git a/SpigotCore_8/src/de/steamwar/scoreboard/SWScoreboard_8.java b/SpigotCore_8/src/de/steamwar/scoreboard/SWScoreboard_8.java new file mode 100644 index 0000000..d9d7873 --- /dev/null +++ b/SpigotCore_8/src/de/steamwar/scoreboard/SWScoreboard_8.java @@ -0,0 +1,63 @@ +package de.steamwar.scoreboard; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import net.minecraft.server.v1_8_R3.IScoreboardCriteria; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.lang.reflect.InvocationTargetException; +import java.util.logging.Level; + +public class SWScoreboard_8 { + + private SWScoreboard_8() {} + + static void sendRemovePacket(Player player) { + PacketContainer removePacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SCOREBOARD_OBJECTIVE); + removePacket.getStrings().write(0, "AAA"); + removePacket.getIntegers().write(0, 1); + //TODO kann vlt entfernt werden -> remove.getStrings().write(1, "integer"); + + sendPacket(player, removePacket); + } + + static void sendCreatePacket(String title, Player player) { + PacketContainer createPacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SCOREBOARD_OBJECTIVE); + createPacket.getStrings().write(0, "AAA"); + createPacket.getIntegers().write(0, 0); + createPacket.getStrings().write(1, title); + createPacket.getEnumModifier(IScoreboardCriteria.EnumScoreboardHealthDisplay.class, 0).write(0, IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER); + + sendPacket(player, createPacket); + } + + static void sendUpdatePacket(String content, Integer line, Player player) { + PacketContainer updatePacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SCOREBOARD_SCORE); + updatePacket.getStrings().write(0, content); + updatePacket.getStrings().write(1, "AAA"); + updatePacket.getIntegers().write(0, line); + updatePacket.getBytes().write(0, (byte) 0); + + sendPacket(player, updatePacket); + } + + static void sendDisplayPacket(Player player) { + PacketContainer displayPacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SCOREBOARD_DISPLAY_OBJECTIVE); + displayPacket.getIntegers().write(0, 1); + displayPacket.getStrings().write(0, "AAA"); + + sendPacket(player, displayPacket); + } + + private static void sendPacket(Player player, PacketContainer packetContainer) { + try { + ProtocolLibrary.getProtocolManager().sendServerPacket(player, packetContainer); + } catch (InvocationTargetException ex) { + Bukkit.getLogger().log(Level.SEVERE, "COULD NOT SEND PACKAGE", ex); + } + } + + +} diff --git a/SpigotCore_Main/src/de/steamwar/core/events/PlayerJoinedEvent.java b/SpigotCore_Main/src/de/steamwar/core/events/PlayerJoinedEvent.java index edae08e..71d95ec 100644 --- a/SpigotCore_Main/src/de/steamwar/core/events/PlayerJoinedEvent.java +++ b/SpigotCore_Main/src/de/steamwar/core/events/PlayerJoinedEvent.java @@ -1,5 +1,7 @@ package de.steamwar.core.events; +import de.steamwar.scoreboard.SWScoreboard; +import de.steamwar.scoreboard.ScoreboardCallback; import de.steamwar.sql.SteamwarUser; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -7,6 +9,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import java.util.HashMap; + public class PlayerJoinedEvent implements Listener{ @@ -44,6 +48,24 @@ public class PlayerJoinedEvent implements Listener{ } event.setJoinMessage("§a§l» §r" + player.getDisplayName()); + + + //TEST + SWScoreboard swScoreboard = new SWScoreboard(new ScoreboardCallback() { + @Override + public HashMap getData() { + HashMap data = new HashMap<>(); + data.put("bla", 2); + data.put("lala", 3); + return data; + } + + @Override + public String getTitle() { + return "ES GEHT!!!!"; + } + }); + SWScoreboard.getPlayerBoards().put(player, swScoreboard); } @EventHandler @@ -51,5 +73,7 @@ public class PlayerJoinedEvent implements Listener{ Player player = event.getPlayer(); event.setQuitMessage("§c§l« §r" + player.getDisplayName()); + + SWScoreboard.getPlayerBoards().remove(player); } } diff --git a/SpigotCore_Main/src/de/steamwar/scoreboard/SWScoreboard.java b/SpigotCore_Main/src/de/steamwar/scoreboard/SWScoreboard.java new file mode 100644 index 0000000..4b329f3 --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/scoreboard/SWScoreboard.java @@ -0,0 +1,79 @@ +package de.steamwar.scoreboard; + +import de.steamwar.core.Core; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.Map; + +public class SWScoreboard { + + private static HashMap playerBoards = new HashMap<>(); + + ScoreboardCallback callback; + + public SWScoreboard(ScoreboardCallback callback) { + this.callback = callback; + } + + private void sendScoreboard(Player player) { + switch (Core.getVersion()) { + case 8: + SWScoreboard_8.sendRemovePacket(player); + SWScoreboard_8.sendCreatePacket(this.callback.getTitle(), player); + break; + case 14: + //Todo remove = SWScoreboard_14.getRemovePacket(); + //Todo createpacket = SWScoreboard_14.getCreatePacket(this.callback.getTitle()); + break; + default: + SWScoreboard_12.sendRemovePacket(player); + SWScoreboard_12.sendCreatePacket(this.callback.getTitle(), player); + } + + for(Map.Entry entry : this.callback.getData().entrySet()) { + switch (Core.getVersion()) { + case 8: + SWScoreboard_8.sendUpdatePacket(entry.getKey(), entry.getValue(), player); + break; + case 14: + //Todo update = SWScoreboard_14.getUpdatePacket(entry.getKey(), entry.getValue()); + break; + default: + SWScoreboard_12.sendUpdatePacket(entry.getKey(), entry.getValue(), player); + } + } + + } + + private void display(Player player) { + switch (Core.getVersion()) { + case 8: + SWScoreboard_8.sendDisplayPacket(player); + break; + case 14: + //Todo display = SWScoreboard_14.getDisplayPacket(this.callback.getTitle()); + break; + default: + SWScoreboard_12.sendDisplayPacket(player); + + } + } + + static { + Bukkit.getScheduler().scheduleSyncRepeatingTask(Core.getInstance(), () -> { + synchronized (playerBoards) { + for(Map.Entry entry : playerBoards.entrySet()) { + entry.getValue().sendScoreboard(entry.getKey()); + entry.getValue().display(entry.getKey()); + } + } + }, 10, 5); + } + + + public static HashMap getPlayerBoards() { + return playerBoards; + } +} diff --git a/SpigotCore_Main/src/de/steamwar/scoreboard/ScoreboardCallback.java b/SpigotCore_Main/src/de/steamwar/scoreboard/ScoreboardCallback.java new file mode 100644 index 0000000..44ad47b --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/scoreboard/ScoreboardCallback.java @@ -0,0 +1,12 @@ +package de.steamwar.scoreboard; + +import java.util.HashMap; + +public interface ScoreboardCallback { + + public HashMap getData(); + + public String getTitle(); + + +} diff --git a/pom.xml b/pom.xml index dbc56a3..5d1491f 100644 --- a/pom.xml +++ b/pom.xml @@ -42,4 +42,13 @@ SpigotCore_14 SpigotCore_Main + + + + steamwar + ProtocolLib + 1.0 + provided + + \ No newline at end of file