Fabric Mod Sender Integration. Mod itself is not final #307
@ -39,6 +39,15 @@ import java.util.logging.Level;
|
||||
|
||||
public class Fabric extends BasicListener {
|
||||
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
|
||||
private final List<String> neededMods = new LinkedList<>();
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Sollten die Mods einwandfrei sein, sollte der Spieler auf eine Whitelist kommen, dass er auch Arenenserver betreten kann (siehe ModLoaderBlocker). Dazu am Besten den Spieler eine Message senden á'la "Deine Mods wurden überprüft, du darfst Arenen betreten". Sollten die Mods einwandfrei sein, sollte der Spieler auf eine Whitelist kommen, dass er auch Arenenserver betreten kann (siehe ModLoaderBlocker). Dazu am Besten den Spieler eine Message senden á'la "Deine Mods wurden überprüft, du darfst Arenen betreten".
|
||||
|
||||
{
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Warum ist das eine LinkedList? Wäre der korrekte Datentyp hier nicht ein Set? Warum ist das eine LinkedList? Wäre der korrekte Datentyp hier nicht ein Set?
|
||||
neededMods.add("java");
|
||||
neededMods.add("minecraft");
|
||||
neededMods.add("fabricloader");
|
||||
neededMods.add("steamwarmodsender");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPluginMessageEvent(PluginMessageEvent e){
|
||||
if(!e.getTag().equals("fabricmodsender:mods"))
|
||||
@ -52,9 +61,12 @@ public class Fabric extends BasicListener {
|
||||
|
||||
List<Mod> mods = new LinkedList<>();
|
||||
|
||||
String dataString = new String(e.getData(), StandardCharsets.UTF_8).substring(1);
|
||||
byte[] data = e.getData();
|
||||
Utils.VarInt varInt = Utils.readVarInt(data,0);
|
||||
|
||||
System.out.println(dataString);
|
||||
data = Arrays.copyOfRange(data,varInt.length, data.length);
|
||||
|
||||
String dataString = new String(data, StandardCharsets.UTF_8);
|
||||
|
||||
Lixfel markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Du könntest das Packet prinzipiell vereinfachen, indem du den String ohne Länge vorher schickst. Der String wäre dann das gesamte Packet. Ansonsten würde ich mir wünschen, dass du überprüfst, dass der VarInt tatsächlich die Länge des restlichen Packets enthält (und falls Fehler Bann), derzeit nutzt du ja den VarInt gar nicht. Du könntest das Packet prinzipiell vereinfachen, indem du den String ohne Länge vorher schickst. Der String wäre dann das gesamte Packet. Ansonsten würde ich mir wünschen, dass du überprüfst, dass der VarInt tatsächlich die Länge des restlichen Packets enthält (und falls Fehler Bann), derzeit nutzt du ja den VarInt gar nicht.
zOnlyKroks
hat
1 teres kann ich nicht tun, da dieser varint von minecraft direkt angepappt wird. zweites kann ich machen. 1 teres kann ich nicht tun, da dieser varint von minecraft direkt angepappt wird. zweites kann ich machen.
|
||||
try {
|
||||
JsonArray array = new JsonParser().parse(dataString).getAsJsonArray();
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Hier kann eine CharsetException oder ähnliches auftreten, in dem Fall wurde (offensichtlich) auch am fabricmodsender herumgepfuscht. Hier kann eine CharsetException oder ähnliches auftreten, in dem Fall wurde (offensichtlich) auch am fabricmodsender herumgepfuscht.
|
||||
@ -68,7 +80,14 @@ public class Fabric extends BasicListener {
|
||||
if(!isSorted) {
|
||||
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
||||
user.punish(Punishment.PunishmentType.Ban, Timestamp.from(Instant.now()), "§7Du hast probiert den FabricModSender zu umgehen!", 0, true);
|
||||
BungeeCore.log(Level.SEVERE, user.getUserName() + " " + user.getId() + " wurde automatisch gebannt, da er den FabricModSender editiert hatte");
|
||||
BungeeCore.log(Level.SEVERE, user.getUserName() + " " + user.getId() + " wurde automatisch gebannt, da er den FabricModSender editiert hatte.");
|
||||
return;
|
||||
}
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Das würde ich mir einmal Multilingual mit Message.parse(Prefixless?)() wünschen. Das würde ich mir einmal Multilingual mit Message.parse(Prefixless?)() wünschen.
|
||||
|
||||
if(!modsAreAbsent(mods)) {
|
||||
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
||||
user.punish(Punishment.PunishmentType.Ban, Timestamp.from(Instant.now()), "§7Du hast probiert den FabricModSender zu umgehen!", 0, true);
|
||||
BungeeCore.log(Level.SEVERE, user.getUserName() + " " + user.getId() + " wurde automatisch gebannt, da er den FabricModSender editiert hatte.");
|
||||
return;
|
||||
}
|
||||
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Diese drei Codezeilen hast du doppelt drin, daher würde ich mir wünschen, dass du die in eine Funktion auslagerst. Diese drei Codezeilen hast du doppelt drin, daher würde ich mir wünschen, dass du die in eine Funktion auslagerst.
|
||||
@ -89,4 +108,12 @@ public class Fabric extends BasicListener {
|
||||
}
|
||||
return isSorted;
|
||||
}
|
||||
|
||||
private boolean modsAreAbsent(List<Mod> mods) {
|
||||
return mods.stream()
|
||||
.map(Mod::getModName)
|
||||
.filter(neededMods::contains)
|
||||
.distinct()
|
||||
.count() == neededMods.size();
|
||||
}
|
||||
}
|
||||
|
Ich glaube, das disconnecten musst du nicht mehr von Hand machen (kannst ja mal im LabymodHandler oder Forge1.12Handler nachschauen (Forge 1.13+ ist da etwas spezieller weil in LOGIN)