diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java
index 9bf6f69..1ff556b 100644
--- a/src/de/steamwar/bungeecore/BungeeCore.java
+++ b/src/de/steamwar/bungeecore/BungeeCore.java
@@ -28,7 +28,10 @@ import de.steamwar.bungeecore.listeners.ping.PingListener;
import de.steamwar.bungeecore.network.BungeeNetworkHandler;
import de.steamwar.bungeecore.network.NetworkReceiver;
import de.steamwar.bungeecore.network.SWScriptSyntaxForwarder;
-import de.steamwar.bungeecore.sql.*;
+import de.steamwar.bungeecore.sql.Punishment;
+import de.steamwar.bungeecore.sql.SteamwarUser;
+import de.steamwar.bungeecore.sql.Team;
+import de.steamwar.bungeecore.sql.UserElo;
import de.steamwar.bungeecore.tablist.TablistManager;
import de.steamwar.command.SWCommandUtils;
import de.steamwar.command.SWTypeMapperCreator;
@@ -103,6 +106,8 @@ public class BungeeCore extends Plugin {
});
BungeeCord.getInstance().getScheduler().schedule(this, TabCompletionCache::invalidateOldEntries, 1, 1, TimeUnit.SECONDS);
+ new NonFabricFabricCheck();
+
new SWScriptSyntaxForwarder();
new ConnectionListener();
new Forge();
diff --git a/src/de/steamwar/bungeecore/listeners/NonFabricFabricCheck.java b/src/de/steamwar/bungeecore/listeners/NonFabricFabricCheck.java
new file mode 100644
index 0000000..b903b9c
--- /dev/null
+++ b/src/de/steamwar/bungeecore/listeners/NonFabricFabricCheck.java
@@ -0,0 +1,86 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2022 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.bungeecore.listeners;
+
+import de.steamwar.bungeecore.BungeeCore;
+import de.steamwar.bungeecore.Message;
+import de.steamwar.bungeecore.Storage;
+import net.md_5.bungee.BungeeCord;
+import net.md_5.bungee.api.connection.Connection;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.event.LoginEvent;
+import net.md_5.bungee.api.event.PlayerDisconnectEvent;
+import net.md_5.bungee.api.event.PluginMessageEvent;
+import net.md_5.bungee.event.EventHandler;
+
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+public class NonFabricFabricCheck extends BasicListener {
+
+ private final Set usingFabric = new HashSet<>();
+
+ private final Set checking = new HashSet<>();
+
+ {
+ BungeeCord.getInstance().getScheduler().schedule(BungeeCore.get(), usingFabric::clear, 0, 15, TimeUnit.MINUTES);
+ }
+
+ @EventHandler
+ public void pluginMessageEvent(PluginMessageEvent e) {
+ Connection sender = e.getSender();
+ if(!(sender instanceof ProxiedPlayer))
+ return;
+
+ if(!e.getTag().equals("minecraft:brand"))
+ return;
+
+ if(!new String(e.getData()).equals("vanilla")){
+ return;
+ }
+
+ ProxiedPlayer p = (ProxiedPlayer) sender;
+
+ BungeeCord.getInstance().getScheduler().schedule(BungeeCore.get(), () -> {
+ if (!p.isConnected()) return;
+ if (Storage.fabricCheckedPlayers.containsKey(p)) return;
+ checking.add(p);
+ p.sendData("fabric-screen-handler-api-v1:open_screen", new byte[] {0});
+ BungeeCord.getInstance().getScheduler().schedule(BungeeCore.get(), () -> checking.remove(p), 1, TimeUnit.SECONDS);
+ }, 30, TimeUnit.SECONDS);
+ }
+
+ @EventHandler
+ public void onPlayerPreLogin(LoginEvent e) {
+ if (usingFabric.remove(e.getConnection().getUniqueId())) {
+ e.getConnection().disconnect(Message.parse("MOD_USE_MODSENDER", Locale.getDefault()));
+ }
+ }
+
+ @EventHandler
+ public void onPlayerDisconnect(PlayerDisconnectEvent e) {
+ if (checking.remove(e.getPlayer())) {
+ usingFabric.add(e.getPlayer().getUniqueId());
+ }
+ }
+}
diff --git a/src/de/steamwar/bungeecore/listeners/mods/Fabric.java b/src/de/steamwar/bungeecore/listeners/mods/Fabric.java
index 748426d..c9c9d2a 100644
--- a/src/de/steamwar/bungeecore/listeners/mods/Fabric.java
+++ b/src/de/steamwar/bungeecore/listeners/mods/Fabric.java
@@ -122,12 +122,8 @@ public class Fabric extends BasicListener {
mods.add(Mod.getOrCreate(mod.getAsString(), Mod.Platform.FABRIC));
}
- if(!neededModsContained(mods)) {
- logMessage(user, "Needed mods are not contained", dataString);
- return;
- }
-
- if(Utils.handleMods(player,mods)) {
+ boolean neededMods = neededModsContained(mods);
+ if(Utils.handleMods(player,mods) && neededMods) {
if (Storage.fabricCheckedPlayers.containsKey(player)) {
long current = Storage.fabricCheckedPlayers.get(player);
if (current != dataString.hashCode()) {
@@ -139,6 +135,8 @@ public class Fabric extends BasicListener {
Storage.fabricCheckedPlayers.put(player, dataString.hashCode());
}
Storage.fabricPlayers.remove(player);
+ } else if (!neededMods) {
+ logMessage(user, "Needed mods are not contained", dataString);
}
}
diff --git a/src/de/steamwar/bungeecore/listeners/mods/ModLoaderBlocker.java b/src/de/steamwar/bungeecore/listeners/mods/ModLoaderBlocker.java
index 71f8220..d8ae90c 100644
--- a/src/de/steamwar/bungeecore/listeners/mods/ModLoaderBlocker.java
+++ b/src/de/steamwar/bungeecore/listeners/mods/ModLoaderBlocker.java
@@ -44,13 +44,14 @@ public class ModLoaderBlocker extends BasicListener {
if(!e.getTag().equals("minecraft:brand"))
return;
- if(new String(e.getData()).contains("fabric")){
+ String brand = new String(e.getData());
+ if(brand.contains("fabric") || brand.contains("quilt")){
ProxiedPlayer p = (ProxiedPlayer) sender;
if (!Storage.fabricCheckedPlayers.containsKey(p) && !Storage.fabricPlayers.contains(p)) {
Storage.fabricPlayers.add(p);
Message.send("MODLOADER_INSTALLED_FABRIC", p, "Fabric");
}
- }else if(new String(e.getData()).contains("LiteLoader")) {
+ }else if(brand.contains("LiteLoader")) {
ProxiedPlayer p = (ProxiedPlayer) sender;
if (!Storage.fabricPlayers.contains(p)) {
Storage.fabricPlayers.add(p);
diff --git a/src/de/steamwar/bungeecore/tablist/TablistPart.java b/src/de/steamwar/bungeecore/tablist/TablistPart.java
index cdc8666..151c320 100644
--- a/src/de/steamwar/bungeecore/tablist/TablistPart.java
+++ b/src/de/steamwar/bungeecore/tablist/TablistPart.java
@@ -26,6 +26,7 @@ import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.chat.ComponentSerializer;
import net.md_5.bungee.connection.InitialHandler;
+import net.md_5.bungee.connection.LoginResult;
import net.md_5.bungee.protocol.Property;
import java.util.List;
@@ -38,7 +39,11 @@ interface TablistPart {
class Item {
public static Property[] playerProperties(ProxiedPlayer player) {
- return ((InitialHandler) player.getPendingConnection()).getLoginProfile().getProperties();
+ LoginResult loginResult = ((InitialHandler) player.getPendingConnection()).getLoginProfile();
+ if(loginResult == null)
+ return new Property[0];
+
+ return loginResult.getProperties();
}
private final UUID uuid;
diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties
index fb44d5a..b4256b2 100644
--- a/src/de/steamwar/messages/BungeeCore.properties
+++ b/src/de/steamwar/messages/BungeeCore.properties
@@ -116,6 +116,8 @@ MOD_RED_PLUR=Attempted use of mods:\n{0}
MOD_YELLOW_SING=§7Deactivate the mod §e{0}§7 to continue playing on §eSteam§8War§7.
MOD_YELLOW_PLUR=§7Deactivate the mods\n§e{0}\n§7to continue playing on §eSteam§8War§7.
+MOD_USE_MODSENDER=§cPlease use the §c§lFabricModSender§c (https://steamwar.de/downloads/) or remove the mod that is rebranding your installation.
+
#Various commands
ALERT=§f{0}
STAT_SERVER=§7Server §e{0}§8: §7Below limit §e{1} §7Server count §e{2}
diff --git a/src/de/steamwar/messages/BungeeCore_de.properties b/src/de/steamwar/messages/BungeeCore_de.properties
index f9b11af..83de9f6 100644
--- a/src/de/steamwar/messages/BungeeCore_de.properties
+++ b/src/de/steamwar/messages/BungeeCore_de.properties
@@ -102,6 +102,8 @@ MOD_RED_PLUR=Versuchte Benutzung der Mods:\n{0}
MOD_YELLOW_SING=§7Deaktiviere den Mod §e{0}§7, um weiter auf §eSteam§8War §7spielen zu können.
MOD_YELLOW_PLUR=§7Deaktiviere die Mods\n§e{0}\n§7um weiter auf §eSteam§8War §7spielen zu können.
+MOD_USE_MODSENDER=§cBitte nutze den §c§lFabricModSender§c (https://steamwar.de/downloads/) oder entfernen den Mod, der die Installation umbenennt.
+
#Various commands
STAT_SERVER=§7Server §e{0}§8: §7Startfähig §e{1} §7Serveranzahl §e{2}