SteamWar/SpigotCore
Archiviert
13
0

Add versionDependantCall, See #144 BauSystem #80

Manuell gemergt
Lixfel hat 11 Commits von VersionDependantCalls nach master 2020-12-25 23:10:54 +01:00 zusammengeführt
10 geänderte Dateien mit 129 neuen und 98 gelöschten Zeilen
Nur Änderungen aus Commit 19394d03ee werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -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),
Veraltet
Review

Das finde ich nicht so gut, dass du hier immer 2 (bzw. 4) Wegwerfobjekte erstellst. Der GC freut sich...

Das finde ich nicht so gut, dass du hier immer 2 (bzw. 4) Wegwerfobjekte erstellst. Der GC freut sich...
new VersionedRunnable(() -> BungeeReceiver_9.playpling(player)));
}
});

Datei anzeigen

@ -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> T versionDependantCall(VersionedCallable<T> versionedCallable1, VersionedCallable<T> versionedCallable2) {
if (versionedCallable1.isVersion()) {
return versionedCallable1.call();
}
return versionedCallable2.call();
}
Review

Das gefällt mir hier alles noch ganz und gar nicht, dass es hier X verschiedene varianten zum Aufruf gibt. Wenn, dann möchte ich Aufrufsvarianten mit z.B. VersionedRunnable... sehen, was dann für x verschiedene Versionen funktioniert, sonst haben wir bei verschiedensten Versionen die lustigsten Probleme.

Auch finde ich, dass das nicht in den Core gehört, sondern wenn in eine eigene Klasse (oder die passenden Funktionen einfach direkt jeweils in VersionedCallable und VersionedRunnable

Das gefällt mir hier alles noch ganz und gar nicht, dass es hier X verschiedene varianten zum Aufruf gibt. Wenn, dann möchte ich Aufrufsvarianten mit z.B. VersionedRunnable... sehen, was dann für x verschiedene Versionen funktioniert, sonst haben wir bei verschiedensten Versionen die lustigsten Probleme. Auch finde ich, dass das nicht in den Core gehört, sondern wenn in eine eigene Klasse (oder die passenden Funktionen einfach direkt jeweils in VersionedCallable und VersionedRunnable
}

Datei anzeigen

@ -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) {

Datei anzeigen

@ -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 <https://www.gnu.org/licenses/>.
* /
*/
package de.steamwar.core;
import java.util.HashSet;
import java.util.Set;
public class VersionedCallable<T> {
private ExceptionlessCallable<T> exceptionlessCallable;
private Set<Integer> versions = new HashSet<>();
public VersionedCallable(ExceptionlessCallable<T> exceptionlessCallable, int... versions) {
this.exceptionlessCallable = exceptionlessCallable;
for (int version : versions) this.versions.add(version);
Review

Besser wäre es, einfach die minimale (kleinste) Version, für die dieser Versionsabhängige Code zuständig ist, zu speichern. Dann müssen die Versionsabhängigen Schnipsel zwar immer in absteigender Reihenfolge kommen, aber meistens ist ja die höchste Version die meistbenötigste.

Besser wäre es, einfach die minimale (kleinste) Version, für die dieser Versionsabhängige Code zuständig ist, zu speichern. Dann müssen die Versionsabhängigen Schnipsel zwar immer in absteigender Reihenfolge kommen, aber meistens ist ja die höchste Version die meistbenötigste.
Review

Dann ist auch bei X Werten immer klar, was aufgerufen werden muss.

Dann ist auch bei X Werten immer klar, was aufgerufen werden muss.
}
boolean isVersion() {
return versions.contains(Core.getVersion());
Review

Könnte man auch einfach in call umbenennen, weil es ist ja schon durch den Klassennamen klar, dass es versionsabhängig ist.

Könnte man auch einfach in call umbenennen, weil es ist ja schon durch den Klassennamen klar, dass es versionsabhängig ist.
}
Review

Du musst die version nicht zwischenspeichern, Core.getVersion() ist kostenlos.

Du musst die version nicht zwischenspeichern, Core.getVersion() ist kostenlos.
Review

Kann man nicht einfach einen reverse-iterator verwenden? Wäre wesentlich sauberer

Kann man nicht einfach einen reverse-iterator verwenden? Wäre wesentlich sauberer
Review

Ich glaube nicht so ganz

Ich glaube nicht so ganz
Review

Außerdem wäre ein Reverse-Iterator wieder ein Objekt mehr. Ich glaube die einfache Schleife reicht da.

Außerdem wäre ein Reverse-Iterator wieder ein Objekt mehr. Ich glaube die einfache Schleife reicht da.
public T call() {
return exceptionlessCallable.call();
Review

Kein überprüfen auf i == 0 hier!

Kein überprüfen auf i == 0 hier!
Review

Wenn ich dies nicht mache, können NullPointerExceptions fliegen!

Wenn ich dies nicht mache, können NullPointerExceptions fliegen!
Review

Bitte erstmal weiterlesen! Ja! Wenn hier nichts zutrifft, ist das ein Fehler!

Bitte erstmal weiterlesen! Ja! Wenn hier nichts zutrifft, ist das ein Fehler!
Review

Habe ich ja jetzt schon behoben!

Habe ich ja jetzt schon behoben!
}
}

Datei anzeigen

@ -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 <https://www.gnu.org/licenses/>.
* /
*/
package de.steamwar.core;
import java.util.HashSet;
import java.util.Set;
public class VersionedRunnable {
private Runnable runnable;
private Set<Integer> 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());
}
Review

Siehe VersionedCallable.

Siehe VersionedCallable.
public void run() {
runnable.run();
}
}

Datei anzeigen

@ -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));
}
}

Datei anzeigen

@ -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() {

Datei anzeigen

@ -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 */

Datei anzeigen

@ -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;
}

Datei anzeigen

@ -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;
Review

Bitte aktiviere mal in deine IDE, dass Unused Imports automatisch aufgeräumt werden.

Bitte aktiviere mal in deine IDE, dass Unused Imports automatisch aufgeräumt werden.
Review

Habe ich kriegt er aber manchmal selber nicht hin

Habe ich kriegt er aber manchmal selber nicht hin
import org.bukkit.entity.Player;
import java.io.IOException;