SteamWar/BungeeCore
Archiviert
13
2

ModCommand #445

Zusammengeführt
Lixfel hat 21 Commits von ModCommand nach master 2023-02-14 09:13:46 +01:00 zusammengeführt
3 geänderte Dateien mit 102 neuen und 23 gelöschten Zeilen
Nur Änderungen aus Commit c59da8ff49 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -1,46 +1,111 @@
package de.steamwar.bungeecore.commands;
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Fehlender License-Header

Fehlender License-Header
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.sql.Mod;
import de.steamwar.bungeecore.sql.Statement;
import de.steamwar.bungeecore.inventory.SWInventory;
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Du kannst dein Template auch mal Updaten :D

Du kannst dein Template auch mal Updaten :D
import de.steamwar.bungeecore.inventory.SWItem;
import de.steamwar.bungeecore.inventory.SWListInv;
import de.steamwar.bungeecore.inventory.SWStreamInv;
import de.steamwar.bungeecore.sql.*;
import de.steamwar.command.SWCommand;
import jdk.internal.net.http.common.Pair;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Der Modname ist nicht eindeutig (Modloader spielt auch noch eine Rolle)

Der Modname ist nicht eindeutig (Modloader spielt auch noch eine Rolle)
import java.util.stream.Collectors;
public class ModCommand extends SWCommand {
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bitte wenn direkt korrekt mit allem drum und dran im SQL-Modul als Mod-Klasse machen. Allgemein gerade schwieriger Zeitpunkt, weil das auch irgendwann demnächst in den CommonCore kommt.

Bitte wenn direkt korrekt mit allem drum und dran im SQL-Modul als Mod-Klasse machen. Allgemein gerade schwieriger Zeitpunkt, weil das auch irgendwann demnächst in den CommonCore kommt.
Veraltet
Review

Wie meinst du das mi als Mod-Klasse? Würde ich interpretieren vom test her das ich die ganze klasse ins sql modul schiebe.

Wie meinst du das mi als Mod-Klasse? Würde ich interpretieren vom test her das ich die ganze klasse ins sql modul schiebe.
private static final Statement set = new Statement("UPDATE Mods Set ModType = ? WHERE ModName = ? AND ModType = ?");
private static final Statement set = new Statement("UPDATE Mods Set ModType = ? WHERE ModName = ? AND Platform = ?");
private static final Statement findFirst = new Statement("SELECT * FROM Mods WHERE ModType = 0 LIMIT 1");
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bitte nur /classifymod, und die Berechtigung sollte eher an bungeecore.softreload gebunden werden. Wobei ich denke, dass das doch hier nicht korrekt ist mit dem CommandFramework, das arbeitet doch gar nicht mit diesen Berechtigungen?

Bitte nur /classifymod, und die Berechtigung sollte eher an bungeecore.softreload gebunden werden. Wobei ich denke, dass das doch hier nicht korrekt ist mit dem CommandFramework, das arbeitet doch gar nicht mit diesen Berechtigungen?
Veraltet
Review

werde ich bald testen

werde ich bald testen
private static final Statement get = new Statement("SELECT * FROM Mods WHERE ModName = ?");
private static final Statement get = new Statement("SELECT * FROM Mods WHERE ModName = ? AND Platform = ?");
private static final Statement getAll = new Statement("SELECT * FROM Mods WHERE ModType = 0 ORDER BY ModName DESC LIMIT ?, ?");
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

SQL-Statements gehören in das SQL-Package, da sollte es eine Mod-Klasse geben, da gehören die rein

SQL-Statements gehören in das SQL-Package, da sollte es eine Mod-Klasse geben, da gehören die rein
public ModCommand() {
super("mod", "bungeecore.softreload", "mods");
zOnlyKroks markierte diese Unterhaltung als gelöst
Review

Das das dann der Filter für alle Nutzer zeitgleich angepasst/gesetzt wird, halte ich für ziemlich problematisch.

Das das dann der Filter für alle Nutzer zeitgleich angepasst/gesetzt wird, halte ich für ziemlich problematisch.
}
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Auch hier.

Auch hier.
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Klammer hier unnötig.

Klammer hier unnötig.
@Register(value = "a")
public void genericCommand(ProxiedPlayer p) {
new SWStreamInv<>(p,Message.parse("MOD_COMMAND_GUI_TITLE",p), (click, element) -> {
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Das Inventar im aktuellen Status ist etwas Fraglich, es zeigt einem alle Mods an (ca. 1700, 38 Seiten).

Es sollte nur die nicht-Klassifizierten anzeigen oder alle mit ein Paar Filter funktionen eg. Name, Klassifizierung

Das Inventar im aktuellen Status ist etwas Fraglich, es zeigt einem alle Mods an (ca. 1700, 38 Seiten). Es sollte nur die nicht-Klassifizierten anzeigen oder alle mit ein Paar Filter funktionen eg. Name, Klassifizierung
SWInventory swInventory = new SWInventory(p,5,"Mod Changer");
String modName = element.modName;
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

DebugCode

DebugCode
int modPlatform = element.platform.get();
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Könnten wir diese Lambda-Funktion (mit nur dem Spieler und Mod als Argument) bitte der Lesbarkeit wegen in eine separate Methode auslagern?

Könnten wir diese Lambda-Funktion (mit nur dem Spieler und Mod als Argument) bitte der Lesbarkeit wegen in eine separate Methode auslagern?
swInventory.addItem(0,new SWItem("GRAY_CONCRETE","Unclassified"), (click1 -> set.update(0,modName,modPlatform)));
swInventory.addItem(1,new SWItem("GREEN_CONCRETE", "Allowed"), (click1 -> set.update(1,modName,modPlatform)));
swInventory.addItem(2,new SWItem("YELLOW_CONCRETE", "Pending"),(click1 -> set.update(2,modName,modPlatform)));
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Nach dem Klassifizieren würde ich direkt wieder die Hauptgui öffnen (es ist unwahrscheinlich, dass man den gleichen Mod hintereinander mehrfach klassifizieren möchte)

Nach dem Klassifizieren würde ich direkt wieder die Hauptgui öffnen (es ist unwahrscheinlich, dass man den gleichen Mod hintereinander mehrfach klassifizieren möchte)
swInventory.addItem(3,new SWItem("RED_CONCRETE","Forbidden"),(click1 -> set.update(3,modName,modPlatform)));
swInventory.addItem(4,new SWItem("PURPLE_CONCRETE", "YT_only"),(click1 -> set.update(4,modName,modPlatform)));
swInventory.open();
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Nach dem Komma (überall) sollte auch eine Leerzeichen hin, aber wenn dann nicht noch mischen.

Nach dem Komma (überall) sollte auch eine Leerzeichen hin, aber wenn dann nicht noch mischen.
},page -> getMods(page,45).stream().map(mod -> new SWListInv.SWListEntry<>(getModItem(mod),mod)).collect(Collectors.toList())).open();
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Die Description braucht es nicht.

Die Description braucht es nicht.
}
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Funktionieren die Dinger auch pre-Flattinging (pre 1.13), vllt. Farbstoffe?

Funktionieren die Dinger auch pre-Flattinging (pre 1.13), vllt. Farbstoffe?
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Namen an besten auch in die .properties Datei und keine Unterstriche als Leerzeichen

Namen an besten auch in die .properties Datei und keine Unterstriche als Leerzeichen
private SWItem getModItem(ModEntry modEntry) {
SWItem item = new SWItem("NAME_TAG", modEntry.modName);
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Ich glaube, dafür gibt es schon eine Restriktionsmöglichkeit im CommandSystem, bitte die direkt dafür nutzen.

Ich glaube, dafür gibt es schon eine Restriktionsmöglichkeit im CommandSystem, bitte die direkt dafür nutzen.
Veraltet
Review

In dem Fall wird hier anders als in Zeile 50 die GUI nicht vorher geschlossen. Musst du testen/untersuchen, ob das gemacht werden sollte und beide Fälle nach Untersuchungsergebnis vereinheitlichen.

In dem Fall wird hier anders als in Zeile 50 die GUI nicht vorher geschlossen. Musst du testen/untersuchen, ob das gemacht werden sollte und beide Fälle nach Untersuchungsergebnis vereinheitlichen.
Veraltet
Review

Ich tue das in den anderen fällen weil es sich komisch verhalten hat. Hier tut es ohne probleme

Ich tue das in den anderen fällen weil es sich komisch verhalten hat. Hier tut es ohne probleme
item.addLore(modEntry.platform.name());
return item;
}
public List<ModEntry> getMods(int page,int elementsPerPage) {
return getAll.select(rs -> {
List<ModEntry> f = new ArrayList<>();
while(rs.next()){
ModEntry entry = new ModEntry(rs.getString("ModName"), Mod.Platform.getByValue(rs.getInt("Platform")));
System.out.println(entry.modName);
f.add(entry);
}
return f;
}, page * elementsPerPage, elementsPerPage);
}
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bitte noch die Information hinzufügen, welcher Modloader.

Bitte noch die Information hinzufügen, welcher Modloader.
@Register(value = {"set"},description = "MOD_COMMAND_SET_USAGE")
public void set(ProxiedPlayer p,String modName,String platform,Integer newModType) {
boolean modExists = get.select(ResultSet::next,modName,Mod.Platform.valueOf(platform));
public void set(ProxiedPlayer p,String modName,Mod.Platform platform,Mod.ModType newModType) {
int modPlatform = platform.get();
boolean modExists = get.select(ResultSet::next,modName,modPlatform);
if(!modExists) {
Message.send("MOD_COMMAND_NOT_FOUND_IN_DATABASE",p,modName);
return;
}
set.update(newModType,modName);
set.update(newModType.getValue(),modName,modPlatform);
Message.send("MOD_CHANGED_TYPE",p,modName,newModType);
Message.send("MOD_CHANGED_TYPE",p,modName,newModType.name(),newModType);
}
@Register()
@Register(value = {"get"},description = "MOD_COMMAND_GET_USAGE")
public void get(ProxiedPlayer p,String modName,Mod.Platform platform) {
Message.send("MOD_COMMAND_INFO",p,modName,platform.name(),Mod.Platform.getByValue(getModType(modName,platform)));
}
private int getModType(String modName,Mod.Platform modPlatform) {
return get.select(rs -> {
if(rs.next()) {
return rs.getInt("ModType");
} else {
return 0;
}
},modName,modPlatform);
}
@Register(value = {"next"})
public void next(ProxiedPlayer p) {
Pair<String ,Integer> foundMod = findFirst.select(rs -> {
if(rs.next()) {
String name = rs.getString("ModName");
Integer platform = rs.getInt("Platform");
return new Pair<>(name,platform);
int platform = rs.getInt("Platform");
return new ImmutablePair<>(name,platform);
}
return null;
});
@ -50,6 +115,16 @@ public class ModCommand extends SWCommand {
return;
}
Message.send("MOD_FOUND_NEXT_MOD",p,foundMod.first, Mod.Platform.getByValue(foundMod.second));
Message.send("MOD_FOUND_NEXT_MOD",p,foundMod.getKey(), Mod.Platform.getByValue(foundMod.getValue()));
}
private class ModEntry {
private final String modName;
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Hier sollten noch Klickbare Nachrichten zum einstufen hinzukommen

Hier sollten noch Klickbare Nachrichten zum einstufen hinzukommen
private final Mod.Platform platform;
public ModEntry(String modName, Mod.Platform platform) {
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Kann auch durch Mod klasse ersetzt werden

Kann auch durch Mod klasse ersetzt werden
this.modName = modName;
this.platform = platform;
}
}
}

Datei anzeigen

@ -19,6 +19,8 @@
package de.steamwar.bungeecore.sql;
import lombok.Getter;
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Unused imports bitte verwerfen.

Unused imports bitte verwerfen.
public class Mod {
private static final Statement get = new Statement("SELECT * FROM Mods WHERE ModName = ? AND Platform = ?");
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Nein, das bleibt definitiv private.

Nein, das bleibt definitiv private.
@ -72,15 +74,13 @@ public class Mod {
return value;
}
public static String getByValue(int val) {
String platform;
public static Platform getByValue(int val) {
Lixfel markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Schöner wäre (weil ansonsten doppelter Datenbankzugriff) wenn du die derzeitige get()-Methode umbennenen würdest in z.B. getOrCreate() und den eigentlichen get() Anteil der Methode in eine neue get()-Methode auslagerst, welche einfach null zurückliefert, wenn der Mod nicht existiert. (Weniger Codeduplication, weniger DB-Calls)

Schöner wäre (weil ansonsten doppelter Datenbankzugriff) wenn du die derzeitige get()-Methode umbennenen würdest in z.B. getOrCreate() und den eigentlichen get() Anteil der Methode in eine neue get()-Methode auslagerst, welche einfach null zurückliefert, wenn der Mod nicht existiert. (Weniger Codeduplication, weniger DB-Calls)
switch (val) {
case 0 : platform = "Forge";
case 1: platform = "Labymod";
case 2: platform = "Fabric";
default: platform = "";
case 0 : return FORGE;
case 1: return LABYMOD;
case 2: return FABRIC;
default: return null;
}
return platform;
}
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Die Methode braucht es nicht, schließlich sind Mod-Objects schon entsprechend geparst.

Die Methode braucht es nicht, schließlich sind Mod-Objects schon entsprechend geparst.
}
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Es wäre evtl. geschickt, einen neuen Konstruktor, welcher ein ResultSet nimmt und SQLExceptions wirft zu machen.

Es wäre evtl. geschickt, einen neuen Konstruktor, welcher ein ResultSet nimmt und SQLExceptions wirft zu machen.
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

du kannst das new inlinen (also f.add(new Mod...))

du kannst das new inlinen (also f.add(new Mod...))
@ -102,6 +102,7 @@ public class Mod {
ModType(int value){
this.value = value;
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Gib hier doch einfach einen Mod zurück. Spart die obskuren apache-Imports und macht dir doch auch sonst das Leben einfacher, oder?

Gib hier doch einfach einen Mod zurück. Spart die obskuren apache-Imports und macht dir doch auch sonst das Leben einfacher, oder?
}
@Getter
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

In Zeile 71 gibts so etwas ähnliches, wird auch oben genutzt anstatt getValue

In Zeile 71 gibts so etwas ähnliches, wird auch oben genutzt anstatt `getValue`
int value;
}
}

Datei anzeigen

@ -658,8 +658,11 @@ ADVENT_CALENDAR_MESSAGE_HOVER=§eClick to open!
ADVENT_CALENDAR_OPEN=§7You got §e{0} §7from the advent calendar!
#Mod Command
MOD_COMMAND_SET_USAGE=§7/mod [mod name] [ModType 1-4]
MOD_CHANGED_TYPE=§7Successfully reclassified mod {0} to type {1}!
MOD_COMMAND_SET_USAGE=§7/mod set [mod name] [platform] [ModType 1-4]
MOD_COMMAND_GET_USAGE=§7/mod get [mod name] [platform]
MOD_CHANGED_TYPE=§7Successfully reclassified mod {0} on platform {1} to type {2}!
MOD_NO_MORE_UNCLASSIFIED_MODS=§7No more unclassified mods found in databank!
MOD_FOUND_NEXT_MOD=§7Next unclassified mod is {0}!
MOD_COMMAND_NOT_FOUND_IN_DATABASE=§7The Mod {0} on platform {1} was§c not §7found in the database!
MOD_COMMAND_NOT_FOUND_IN_DATABASE=§7The Mod {0} on platform {1} was§c not §7found in the database!
MOD_COMMAND_INFO=§7The mod {0} on platform {1} is of the type {2}.
MOD_COMMAND_GUI_TITLE="§7Unclassified Mods"
zOnlyKroks markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

GUI-Titel sind die einzigen Fälle, wo kein Color-Coding stattfinden sollte.

GUI-Titel sind die einzigen Fälle, wo kein Color-Coding stattfinden sollte.