From 19394d03eeda9568467089e5a33a8e3dfe48e493 Mon Sep 17 00:00:00 2001 From: jojo Date: Thu, 24 Dec 2020 12:56:17 +0100 Subject: [PATCH] Update to Core.versionDependantCall --- .../src/de/steamwar/comms/BungeeReceiver.java | 8 ++-- .../src/de/steamwar/core/Core.java | 15 +++++++ .../src/de/steamwar/core/TPSWatcher.java | 16 +------ .../de/steamwar/core/VersionedCallable.java | 45 +++++++++++++++++++ .../de/steamwar/core/VersionedRunnable.java | 45 +++++++++++++++++++ .../steamwar/core/events/ChunkListener.java | 26 +++-------- .../src/de/steamwar/inventory/SWItem.java | 42 +++-------------- .../src/de/steamwar/message/Message.java | 14 ++---- .../de/steamwar/scoreboard/SWScoreboard.java | 15 ++----- .../src/de/steamwar/sql/Schematic.java | 1 + 10 files changed, 129 insertions(+), 98 deletions(-) create mode 100644 SpigotCore_Main/src/de/steamwar/core/VersionedCallable.java create mode 100644 SpigotCore_Main/src/de/steamwar/core/VersionedRunnable.java diff --git a/SpigotCore_Main/src/de/steamwar/comms/BungeeReceiver.java b/SpigotCore_Main/src/de/steamwar/comms/BungeeReceiver.java index 16ddf21..0ea59e0 100644 --- a/SpigotCore_Main/src/de/steamwar/comms/BungeeReceiver.java +++ b/SpigotCore_Main/src/de/steamwar/comms/BungeeReceiver.java @@ -24,6 +24,7 @@ import com.google.common.io.ByteStreams; import de.steamwar.comms.handlers.BungeeHandler; import de.steamwar.comms.handlers.InventoryHandler; import de.steamwar.core.Core; +import de.steamwar.core.VersionedRunnable; import de.steamwar.sql.*; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -46,11 +47,8 @@ public class BungeeReceiver implements PluginMessageListener { UUID uuid = SteamwarUser.get(byteArrayDataInput.readInt()).getUUID(); if(Bukkit.getPlayer(uuid).isOnline()) { Player player = Bukkit.getPlayer(uuid); - if (Core.getVersion() == 8) { - BungeeReceiver_8.playPling(player); - } else { - BungeeReceiver_9.playpling(player); - } + Core.versionDependantCall(new VersionedRunnable(() -> BungeeReceiver_8.playPling(player), 8), + new VersionedRunnable(() -> BungeeReceiver_9.playpling(player))); } }); diff --git a/SpigotCore_Main/src/de/steamwar/core/Core.java b/SpigotCore_Main/src/de/steamwar/core/Core.java index db5a023..0694ede 100644 --- a/SpigotCore_Main/src/de/steamwar/core/Core.java +++ b/SpigotCore_Main/src/de/steamwar/core/Core.java @@ -146,5 +146,20 @@ public class Core extends JavaPlugin{ return v15.call(); } } + + public static void versionDependantCall(VersionedRunnable versionedRunnable1, VersionedRunnable versionedRunnable2) { + if (versionedRunnable1.isVersion()) { + versionedRunnable1.run(); + return; + } + versionedRunnable2.run(); + } + + public static T versionDependantCall(VersionedCallable versionedCallable1, VersionedCallable versionedCallable2) { + if (versionedCallable1.isVersion()) { + return versionedCallable1.call(); + } + return versionedCallable2.call(); + } } diff --git a/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java b/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java index 0e37709..05229ce 100644 --- a/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java +++ b/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java @@ -71,21 +71,7 @@ public class TPSWatcher { } private static double[] getSpigotTPS() { - switch (Core.getVersion()) { - case 8: - return SpigotTPS_8.getTps(); - case 9: - return SpigotTPS_9.getTps(); - case 10: - return SpigotTPS_10.getTps(); - case 12: - return SpigotTPS_12.getTps(); - case 14: - return SpigotTPS_14.getTps(); - case 15: - default: - return SpigotTPS_15.getTps(); - } + return Core.versionDependantCall(SpigotTPS_8::getTps, SpigotTPS_9::getTps, SpigotTPS_10::getTps, SpigotTPS_12::getTps, SpigotTPS_14::getTps, SpigotTPS_15::getTps); } private static double round(double d) { diff --git a/SpigotCore_Main/src/de/steamwar/core/VersionedCallable.java b/SpigotCore_Main/src/de/steamwar/core/VersionedCallable.java new file mode 100644 index 0000000..6a6da1e --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/core/VersionedCallable.java @@ -0,0 +1,45 @@ +/* + * + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * / + */ + +package de.steamwar.core; + +import java.util.HashSet; +import java.util.Set; + +public class VersionedCallable { + + private ExceptionlessCallable exceptionlessCallable; + private Set versions = new HashSet<>(); + + public VersionedCallable(ExceptionlessCallable exceptionlessCallable, int... versions) { + this.exceptionlessCallable = exceptionlessCallable; + for (int version : versions) this.versions.add(version); + } + + boolean isVersion() { + return versions.contains(Core.getVersion()); + } + + public T call() { + return exceptionlessCallable.call(); + } + +} diff --git a/SpigotCore_Main/src/de/steamwar/core/VersionedRunnable.java b/SpigotCore_Main/src/de/steamwar/core/VersionedRunnable.java new file mode 100644 index 0000000..5eefc4e --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/core/VersionedRunnable.java @@ -0,0 +1,45 @@ +/* + * + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * / + */ + +package de.steamwar.core; + +import java.util.HashSet; +import java.util.Set; + +public class VersionedRunnable { + + private Runnable runnable; + private Set versions = new HashSet<>(); + + public VersionedRunnable(Runnable runnable, int... versions) { + this.runnable = runnable; + for (int version : versions) this.versions.add(version); + } + + boolean isVersion() { + return versions.contains(Core.getVersion()); + } + + public void run() { + runnable.run(); + } + +} diff --git a/SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java b/SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java index 86d07ab..73d290a 100644 --- a/SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java +++ b/SpigotCore_Main/src/de/steamwar/core/events/ChunkListener.java @@ -71,25 +71,11 @@ public class ChunkListener { } public static void sendChunk(Player p, int chunkX, int chunkZ){ - switch(Core.getVersion()){ - case 15: - Chunk_15.sendChunk(p, chunkX, chunkZ); - break; - case 14: - Chunk_14.sendChunk(p, chunkX, chunkZ); - break; - case 12: - Chunk_12.sendChunk(p, chunkX, chunkZ); - break; - case 10: - Chunk_10.sendChunk(p, chunkX, chunkZ); - break; - case 9: - Chunk_9.sendChunk(p, chunkX, chunkZ); - break; - case 8: - Chunk_8.sendChunk(p, chunkX, chunkZ); - break; - } + Core.versionDependantCall(() -> Chunk_8.sendChunk(p, chunkX, chunkZ), + () -> Chunk_9.sendChunk(p, chunkX, chunkZ), + () -> Chunk_10.sendChunk(p, chunkX, chunkZ), + () -> Chunk_12.sendChunk(p, chunkX, chunkZ), + () -> Chunk_14.sendChunk(p, chunkX, chunkZ), + () -> Chunk_15.sendChunk(p, chunkX, chunkZ)); } } diff --git a/SpigotCore_Main/src/de/steamwar/inventory/SWItem.java b/SpigotCore_Main/src/de/steamwar/inventory/SWItem.java index d6e92ff..64fcbae 100644 --- a/SpigotCore_Main/src/de/steamwar/inventory/SWItem.java +++ b/SpigotCore_Main/src/de/steamwar/inventory/SWItem.java @@ -22,6 +22,7 @@ package de.steamwar.inventory; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import de.steamwar.core.Core; +import de.steamwar.core.VersionedCallable; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.enchantments.Enchantment; @@ -44,53 +45,24 @@ public class SWItem { public static SWItem getPlayerSkull(String playerName){ SWItem p = new SWItem(); - ItemStack head; - switch(Core.getVersion()){ - case 8: - case 9: - case 10: - case 12: - head = SWItem_8.setSkullOwner(playerName); - break; - case 14: - case 15: - default: - head = SWItem_14.setSkullOwner(playerName); - } + ItemStack head = Core.versionDependantCall(new VersionedCallable<>(() -> SWItem_8.setSkullOwner(playerName), 8, 9, 10, 12), + new VersionedCallable<>(() -> SWItem_14.setSkullOwner(playerName))); p.setItemStack(head); return p; } public static Material getMaterial(String material){ try{ - switch(Core.getVersion()){ - case 8: - case 9: - case 10: - case 12: - return SWItem_8.getMaterial(material); - case 14: - case 15: - default: - return SWItem_14.getMaterial(material); - } + return Core.versionDependantCall(new VersionedCallable<>(() -> SWItem_8.getMaterial(material), 8, 9, 10, 12), + new VersionedCallable<>(() -> SWItem_14.getMaterial(material))); }catch(IllegalArgumentException e){ return Material.STONE; } } public static Material getDye(int colorCode){ - switch(Core.getVersion()){ - case 8: - case 9: - case 10: - case 12: - return SWItem_8.getDye(); - case 14: - case 15: - default: - return SWItem_14.getDye(colorCode); - } + return Core.versionDependantCall(new VersionedCallable<>(SWItem_8::getDye, 8, 9, 10, 12), + new VersionedCallable<>(() -> SWItem_14.getDye(colorCode))); } public SWItem() { diff --git a/SpigotCore_Main/src/de/steamwar/message/Message.java b/SpigotCore_Main/src/de/steamwar/message/Message.java index 065a560..c4811b2 100644 --- a/SpigotCore_Main/src/de/steamwar/message/Message.java +++ b/SpigotCore_Main/src/de/steamwar/message/Message.java @@ -20,6 +20,7 @@ package de.steamwar.message; import de.steamwar.core.Core; +import de.steamwar.core.VersionedCallable; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.HoverEvent; @@ -73,17 +74,8 @@ public class Message { } private Locale getLocale(Player player){ - switch(Core.getVersion()){ - case 8: - case 9: - case 10: - return Message_8.getLocale(player); - case 12: - case 14: - case 15: - default: - return Message_12.getLocale(player); - } + return Core.versionDependantCall(new VersionedCallable<>(() -> Message_8.getLocale(player), 8, 9, 10), + new VersionedCallable<>(() -> Message_12.getLocale(player))); } /* Send a message to one player */ diff --git a/SpigotCore_Main/src/de/steamwar/scoreboard/SWScoreboard.java b/SpigotCore_Main/src/de/steamwar/scoreboard/SWScoreboard.java index 7ea47f8..f9d68c7 100644 --- a/SpigotCore_Main/src/de/steamwar/scoreboard/SWScoreboard.java +++ b/SpigotCore_Main/src/de/steamwar/scoreboard/SWScoreboard.java @@ -25,6 +25,7 @@ import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; import de.steamwar.core.Core; +import de.steamwar.core.VersionedRunnable; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -94,18 +95,8 @@ public class SWScoreboard { PacketContainer packet = manager.createPacket(PacketType.Play.Server.SCOREBOARD_OBJECTIVE); packet.getStrings().write(0, SIDEBAR + toggle); packet.getIntegers().write(0, 0); //0 to create - switch(Core.getVersion()){ - case 8: - case 9: - case 10: - case 12: - packet.getStrings().write(1, name); - break; - case 14: - case 15: - default: - packet.getChatComponents().write(0, WrappedChatComponent.fromText(name)); - } + Core.versionDependantCall(new VersionedRunnable(() -> packet.getStrings().write(1, name), 8, 9, 10, 12), + new VersionedRunnable(() -> packet.getChatComponents().write(0, WrappedChatComponent.fromText(name)))); packet.getEnumModifier(RenderType.class, 2).write(0, RenderType.INTEGER); return packet; } diff --git a/SpigotCore_Main/src/de/steamwar/sql/Schematic.java b/SpigotCore_Main/src/de/steamwar/sql/Schematic.java index c0318d0..c98807a 100644 --- a/SpigotCore_Main/src/de/steamwar/sql/Schematic.java +++ b/SpigotCore_Main/src/de/steamwar/sql/Schematic.java @@ -21,6 +21,7 @@ package de.steamwar.sql; import com.sk89q.worldedit.extent.clipboard.Clipboard; import de.steamwar.core.Core; +import de.steamwar.core.VersionedCallable; import org.bukkit.entity.Player; import java.io.IOException;