diff --git a/README.md b/README.md index ebfc242..dfc19d3 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,13 @@ It also parses passed IP addresses so the server is aware of the real player IP ### Compatibility -TCPShield is compatible with Spigot / CraftBukkit, BungeeCord and Velocity. +TCPShield is compatible with Spigot / CraftBukkit, BungeeCord, Velocity and Fabric. When using Spigot / CraftBukkit, [ProtocolLib](https://github.com/aadnk/ProtocolLib) needs to be installed. +This does not apply when using Paper 1.16 build #503 or higher. ### Setup -Setting up the plugin is easy as pie. Please follow [these](https://docs.tcpshield.com/onboarding/tcpshield-plugin) guidelines. +Setting up the plugin is easy as pie. Please follow [these](https://docs.tcpshield.com/config/tcpshield-plugin) guidelines. ### Compiling In order to compile TCPShield, [install Gradle](https://docs.gradle.org/current/userguide/installation.html) and run the following command in the project folder: @@ -29,4 +30,5 @@ See [Contact](https://docs.tcpshield.com/about-us) These wonderful contributors have helped TCPShield make this plugin better! * [Paul Zhang](https://github.com/paulzhng) +* [Draylar](https://github.com/Draylar) * [RyanDeLap](https://github.com/RyanDeLap) diff --git a/build.gradle b/build.gradle index 82bed13..be900c4 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,4 @@ +import com.google.gson.GsonBuilder import com.google.gson.JsonObject import com.google.gson.JsonParser import org.yaml.snakeyaml.DumperOptions @@ -18,6 +19,7 @@ buildscript { plugins { id 'java' id 'idea' + id 'fabric-loom' version '0.6-SNAPSHOT' } repositories { @@ -39,6 +41,12 @@ repositories { maven { url = 'https://repo.velocitypowered.com/snapshots/' } + maven { + url = 'https://maven.fabricmc.net/' + } + flatDir { + dirs '/libs' + } } dependencies { @@ -47,7 +55,7 @@ dependencies { compileOnly group: 'com.comphenix.protocol', name: 'ProtocolLib', version: '4.4.0' // Paper - compileOnly group: 'com.destroystokyo.paper', name: 'paper-api', version: '1.15.2-R0.1-SNAPSHOT' + compileOnly group: 'com.destroystokyo.paper', name: 'paper-api', version: '1.16.5-R0.1-20210227.144841-85' // BungeeCord compileOnly group: 'net.md-5', name: 'bungeecord-api', version: '1.14-SNAPSHOT' @@ -55,9 +63,16 @@ dependencies { // Velocity compileOnly group: 'com.velocitypowered', name: 'velocity-api', version: '1.0.0-SNAPSHOT' + // Fabric + minecraft "com.mojang:minecraft:1.16.5" + mappings "net.fabricmc:yarn:1.16.5+build.5:v2" + modImplementation group: 'net.fabricmc', name: 'fabric-loader', version: '0.11.2' + // Testing - testImplementation group: 'org.junit.jupiter', name:'junit-jupiter-api', version: '5.7.0-M1' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version:'5.7.0-M1' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0-M1' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0-M1' + + compileOnly 'org.geyser:floodgate-spigot:2.0' } test { @@ -68,7 +83,7 @@ configurations { testImplementation.extendsFrom compileOnly } -version = '2.4' +version = '2.5' group = 'net.tcpshield.tcpshield' archivesBaseName = 'TCPShield' @@ -133,6 +148,7 @@ void updateYaml() { } void updateJson() { + def gson = new GsonBuilder().setPrettyPrinting().create(); def velocityJson = new File('src/main/resources/velocity-plugin.json') def files = [velocityJson] @@ -143,7 +159,7 @@ void updateJson() { object.addProperty("version", version.toString()) new FileWriter(file).withCloseable { writer -> - writer.write(object.toString()) + writer.write(gson.toJson(object)) } } } diff --git a/libs/floodgate-spigot.jar b/libs/floodgate-spigot.jar new file mode 100644 index 0000000..2e8b565 Binary files /dev/null and b/libs/floodgate-spigot.jar differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..5b60df3 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + jcenter() + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + gradlePluginPortal() + } +} diff --git a/src/main/java/net/tcpshield/tcpshield/HandshakePacketHandler.java b/src/main/java/net/tcpshield/tcpshield/HandshakePacketHandler.java index f9637c2..26949f3 100644 --- a/src/main/java/net/tcpshield/tcpshield/HandshakePacketHandler.java +++ b/src/main/java/net/tcpshield/tcpshield/HandshakePacketHandler.java @@ -35,8 +35,8 @@ public void onHandshake(IPacket packet, IPlayer player) { InetAddress inetAddress = InetAddress.getByName(player.getIP()); if (!ipValidation.validateIP(inetAddress)) throw new InvalidIPException(); - if (rawPayload == null) - return; // raw payload is passed when it's not available -> e.g. Paper server list ping events + // raw payload is passed when it's not available -> e.g. Paper server list ping events + if (rawPayload == null) return; String extraData = null; @@ -69,7 +69,7 @@ public void onHandshake(IPacket packet, IPlayer player) { } catch (InvalidIPException e) { handleInvalidIPException(player, rawPayload); } catch (IPModificationFailureException e) { - this.logger.warning(String.format("%s[%s/%s]'s IP failed to be modified. Raw payload = \"%s\"", player.getName(), player.getUUID(), player.getIP(), rawPayload)); + this.logger.warning(String.format("%s's IP failed to be modified. Raw payload = \"%s\"", player.getIP(), rawPayload)); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); @@ -78,11 +78,16 @@ public void onHandshake(IPacket packet, IPlayer player) { private void handleInvalidIPException(IPlayer player, String rawPayload) { if (config.isDebug()) { - this.logger.warning(String.format("%s[%s/%s] was disconnected because the client failed the ip check and only-allowed-proxy-connections is enabled. Raw payload = \"%s\"", player.getName(), player.getUUID(), player.getIP(), rawPayload)); + this.logger.warning(String.format("%s was disconnected because the client failed the ip check and only-allowed-proxy-connections is enabled. Raw payload = \"%s\"", player.getIP(), rawPayload)); } if (config.isOnlyProxy()) { player.disconnect(); } } + + public TCPShieldConfig getConfig() { + return config; + } + } diff --git a/src/main/java/net/tcpshield/tcpshield/abstraction/IPlayer.java b/src/main/java/net/tcpshield/tcpshield/abstraction/IPlayer.java index 13e0226..cb47efd 100644 --- a/src/main/java/net/tcpshield/tcpshield/abstraction/IPlayer.java +++ b/src/main/java/net/tcpshield/tcpshield/abstraction/IPlayer.java @@ -6,10 +6,6 @@ public interface IPlayer { - String getUUID(); - - String getName(); - String getIP(); void setIP(InetSocketAddress ip) throws IPModificationFailureException; diff --git a/src/main/java/net/tcpshield/tcpshield/abstraction/TCPShieldConfig.java b/src/main/java/net/tcpshield/tcpshield/abstraction/TCPShieldConfig.java index 89e18b0..912fb93 100644 --- a/src/main/java/net/tcpshield/tcpshield/abstraction/TCPShieldConfig.java +++ b/src/main/java/net/tcpshield/tcpshield/abstraction/TCPShieldConfig.java @@ -7,6 +7,7 @@ public abstract class TCPShieldConfig { protected boolean onlyProxy; protected File ipWhitelistFolder; protected boolean debug; + protected boolean geyser; public boolean isOnlyProxy() { return this.onlyProxy; @@ -20,4 +21,8 @@ public boolean isDebug() { return this.debug; } + public boolean isGeyser() { + return this.geyser; + } + } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java b/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java index c3ec8af..7c9b626 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java @@ -13,7 +13,7 @@ public void onEnable() { new TCPShieldPaper(this).load(); } else { if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) { - this.getLogger().warning("TCPShield not loading because ProtocolLib is not installed. Either use Paper to enable native compatibility or install ProtocolLib."); + this.getLogger().warning("TCPShield not loading because ProtocolLib is not installed. Either use Paper (1.16 build #503 or higher) to enable native compatibility or install ProtocolLib."); return; } @@ -21,13 +21,17 @@ public void onEnable() { } } + /** + * Checks if the server version supports native Paper support (Paper 1.16.5 build #503 or higher) + * + * @return if the server version supports native Paper support + */ private boolean isPaper() { - if (1 == 1) return false; - try { - Class.forName("com.destroystokyo.paper.event.player.PlayerHandshakeEvent"); + Class> handshakeEvent = Class.forName("com.destroystokyo.paper.event.player.PlayerHandshakeEvent"); + handshakeEvent.getMethod("getOriginalSocketAddressHostname"); return true; - } catch (ClassNotFoundException e) { + } catch (ClassNotFoundException | NoSuchMethodException e) { return false; } } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/impl/BukkitConfigImpl.java b/src/main/java/net/tcpshield/tcpshield/bukkit/impl/BukkitConfigImpl.java index 320e540..ebed16f 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/impl/BukkitConfigImpl.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/impl/BukkitConfigImpl.java @@ -15,6 +15,7 @@ public BukkitConfigImpl(JavaPlugin javaPlugin) { this.onlyProxy = config.getBoolean("only-allow-proxy-connections"); this.ipWhitelistFolder = new File(javaPlugin.getDataFolder(), "ip-whitelist"); + this.geyser = config.getBoolean("enable-geyser-compatibility"); this.debug = config.getBoolean("debug-mode"); } } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/PaperHandshakePacketHandler.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/PaperHandshakePacketHandler.java index 739fa8e..f6f537e 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/PaperHandshakePacketHandler.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/PaperHandshakePacketHandler.java @@ -19,8 +19,8 @@ public class PaperHandshakePacketHandler implements Listener { private final HandshakePacketHandler handshakePacketHandler; - public PaperHandshakePacketHandler(JavaPlugin plugin) { - this.handshakePacketHandler = new HandshakePacketHandler(plugin.getLogger(), new BukkitConfigImpl(plugin)); + public PaperHandshakePacketHandler(HandshakePacketHandler handshakePacketHandler) { + this.handshakePacketHandler = handshakePacketHandler; } @EventHandler(priority = EventPriority.LOWEST) diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/TCPShieldPaper.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/TCPShieldPaper.java index 9c3434e..78b7c54 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/TCPShieldPaper.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/TCPShieldPaper.java @@ -1,5 +1,11 @@ package net.tcpshield.tcpshield.bukkit.paper; +import net.tcpshield.tcpshield.HandshakePacketHandler; +import net.tcpshield.tcpshield.bukkit.impl.BukkitConfigImpl; +import net.tcpshield.tcpshield.geyser.GeyserHandshakePacketHandler; +import net.tcpshield.tcpshield.geyser.GeyserUtils; +import net.tcpshield.tcpshield.velocity.VelocityHandshakePacketHandler; +import net.tcpshield.tcpshield.velocity.impl.VelocityConfigImpl; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -12,7 +18,11 @@ public TCPShieldPaper(JavaPlugin plugin) { } public void load() { - PaperHandshakePacketHandler packetHandler = new PaperHandshakePacketHandler(plugin); - Bukkit.getPluginManager().registerEvents(packetHandler, plugin); + HandshakePacketHandler handshakePacketHandler = new HandshakePacketHandler(plugin.getLogger(), new BukkitConfigImpl(plugin)); + + GeyserUtils.initGeyserOrDefault(handshakePacketHandler, () -> { + PaperHandshakePacketHandler packetHandler = new PaperHandshakePacketHandler(handshakePacketHandler); + Bukkit.getPluginManager().registerEvents(packetHandler, plugin); + }); } } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperPlayerImpl.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperPlayerImpl.java index 340908c..64e3433 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperPlayerImpl.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperPlayerImpl.java @@ -1,10 +1,10 @@ package net.tcpshield.tcpshield.bukkit.paper.impl; import com.destroystokyo.paper.event.player.PlayerHandshakeEvent; +import net.kyori.adventure.text.Component; import net.tcpshield.tcpshield.abstraction.IPlayer; import java.net.InetSocketAddress; -import java.util.UUID; public class PaperPlayerImpl implements IPlayer { @@ -14,22 +14,9 @@ public PaperPlayerImpl(PlayerHandshakeEvent handshakeEvent) { this.handshakeEvent = handshakeEvent; } - @Override - public String getUUID() { - UUID uuid = handshakeEvent.getUniqueId(); - if (uuid == null) return "unknown"; - - return uuid.toString(); - } - - @Override - public String getName() { - return "unknown"; - } - @Override public String getIP() { - return handshakeEvent.getSocketAddressHostname(); + return handshakeEvent.getOriginalSocketAddressHostname(); } @Override @@ -40,7 +27,7 @@ public void setIP(InetSocketAddress ip) { @Override public void disconnect() { handshakeEvent.setCancelled(false); - handshakeEvent.setFailMessage("Connection failed. Please try again or contact an administrator."); + handshakeEvent.failMessage(Component.text("Connection failed. Please try again or contact an administrator.")); handshakeEvent.setFailed(true); } } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperServerListPingPlayerImpl.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperServerListPingPlayerImpl.java index e99fe78..9524104 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperServerListPingPlayerImpl.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/impl/PaperServerListPingPlayerImpl.java @@ -13,16 +13,6 @@ public PaperServerListPingPlayerImpl(PaperServerListPingEvent pingEvent) { this.pingEvent = pingEvent; } - @Override - public String getUUID() { - return "unknown"; - } - - @Override - public String getName() { - return "unknown"; - } - @Override public String getIP() { return pingEvent.getAddress().getHostAddress(); diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/ProtocolLibHandshakePacketHandler.java b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/ProtocolLibHandshakePacketHandler.java index 9505286..a718414 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/ProtocolLibHandshakePacketHandler.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/ProtocolLibHandshakePacketHandler.java @@ -7,7 +7,6 @@ import net.tcpshield.tcpshield.HandshakePacketHandler; import net.tcpshield.tcpshield.abstraction.IPacket; import net.tcpshield.tcpshield.abstraction.IPlayer; -import net.tcpshield.tcpshield.bukkit.impl.BukkitConfigImpl; import net.tcpshield.tcpshield.bukkit.protocollib.impl.ProtocolLibPacketImpl; import net.tcpshield.tcpshield.bukkit.protocollib.impl.ProtocolLibPlayerImpl; import org.bukkit.plugin.java.JavaPlugin; @@ -16,9 +15,9 @@ public class ProtocolLibHandshakePacketHandler extends PacketAdapter { private final HandshakePacketHandler handshakePacketHandler; - public ProtocolLibHandshakePacketHandler(JavaPlugin plugin) { + public ProtocolLibHandshakePacketHandler(JavaPlugin plugin, HandshakePacketHandler handshakePacketHandler) { super(plugin, ListenerPriority.LOWEST, PacketType.Handshake.Client.SET_PROTOCOL); - this.handshakePacketHandler = new HandshakePacketHandler(plugin.getLogger(), new BukkitConfigImpl(plugin)); + this.handshakePacketHandler = handshakePacketHandler; } @Override diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/TCPShieldProtocolLib.java b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/TCPShieldProtocolLib.java index 5a9189a..1c3b901 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/TCPShieldProtocolLib.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/TCPShieldProtocolLib.java @@ -1,5 +1,9 @@ package net.tcpshield.tcpshield.bukkit.protocollib; +import com.comphenix.protocol.ProtocolLibrary; +import net.tcpshield.tcpshield.HandshakePacketHandler; +import net.tcpshield.tcpshield.bukkit.impl.BukkitConfigImpl; +import net.tcpshield.tcpshield.geyser.GeyserUtils; import org.bukkit.plugin.java.JavaPlugin; public class TCPShieldProtocolLib { @@ -11,7 +15,10 @@ public TCPShieldProtocolLib(JavaPlugin plugin) { } public void load() { - ProtocolLibHandshakePacketHandler packetHandler = new ProtocolLibHandshakePacketHandler(plugin); - com.comphenix.protocol.ProtocolLibrary.getProtocolManager().addPacketListener(packetHandler); + HandshakePacketHandler handshakePacketHandler = new HandshakePacketHandler(plugin.getLogger(), new BukkitConfigImpl(plugin)); + GeyserUtils.initGeyserOrDefault(handshakePacketHandler, () -> { + ProtocolLibHandshakePacketHandler packetHandler = new ProtocolLibHandshakePacketHandler(plugin, handshakePacketHandler); + ProtocolLibrary.getProtocolManager().addPacketListener(packetHandler); + }); } } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/impl/ProtocolLibPlayerImpl.java b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/impl/ProtocolLibPlayerImpl.java index 3d1c544..36c2097 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/impl/ProtocolLibPlayerImpl.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/impl/ProtocolLibPlayerImpl.java @@ -34,16 +34,6 @@ public ProtocolLibPlayerImpl(Player player) { this.ip = player.getAddress().getAddress().getHostAddress(); } - @Override - public String getUUID() { - return "unknown"; // not supported with temporary players - } - - @Override - public String getName() { - return "unknown"; // not supported with temporary players - } - @Override public String getIP() { return ip; diff --git a/src/main/java/net/tcpshield/tcpshield/bungee/BungeeHandshakePacketHandler.java b/src/main/java/net/tcpshield/tcpshield/bungee/BungeeHandshakePacketHandler.java index 7e1a7f2..fb5038a 100644 --- a/src/main/java/net/tcpshield/tcpshield/bungee/BungeeHandshakePacketHandler.java +++ b/src/main/java/net/tcpshield/tcpshield/bungee/BungeeHandshakePacketHandler.java @@ -4,13 +4,11 @@ import net.md_5.bungee.api.event.PlayerHandshakeEvent; import net.md_5.bungee.api.event.ProxyPingEvent; import net.md_5.bungee.api.plugin.Listener; -import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; import net.tcpshield.tcpshield.HandshakePacketHandler; import net.tcpshield.tcpshield.abstraction.IPacket; import net.tcpshield.tcpshield.abstraction.IPlayer; -import net.tcpshield.tcpshield.bungee.impl.BungeeConfigImpl; import net.tcpshield.tcpshield.bungee.impl.BungeePacketImpl; import net.tcpshield.tcpshield.bungee.impl.BungeePlayerImpl; @@ -18,8 +16,8 @@ public class BungeeHandshakePacketHandler implements Listener { private final HandshakePacketHandler handshakePacketHandler; - public BungeeHandshakePacketHandler(Plugin plugin) { - this.handshakePacketHandler = new HandshakePacketHandler(plugin.getLogger(), new BungeeConfigImpl(plugin)); + public BungeeHandshakePacketHandler(HandshakePacketHandler handshakePacketHandler) { + this.handshakePacketHandler = handshakePacketHandler; } @EventHandler(priority = EventPriority.LOWEST) diff --git a/src/main/java/net/tcpshield/tcpshield/bungee/TCPShieldBungee.java b/src/main/java/net/tcpshield/tcpshield/bungee/TCPShieldBungee.java index c92f841..de35717 100644 --- a/src/main/java/net/tcpshield/tcpshield/bungee/TCPShieldBungee.java +++ b/src/main/java/net/tcpshield/tcpshield/bungee/TCPShieldBungee.java @@ -3,12 +3,19 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.PluginManager; +import net.tcpshield.tcpshield.HandshakePacketHandler; +import net.tcpshield.tcpshield.bungee.impl.BungeeConfigImpl; +import net.tcpshield.tcpshield.geyser.GeyserUtils; public class TCPShieldBungee extends Plugin implements Listener { @Override public void onEnable() { - PluginManager pluginManager = this.getProxy().getPluginManager(); - pluginManager.registerListener(this, new BungeeHandshakePacketHandler(this)); + HandshakePacketHandler handshakePacketHandler = new HandshakePacketHandler(this.getLogger(), new BungeeConfigImpl(this)); + + GeyserUtils.initGeyserOrDefault(handshakePacketHandler, () -> { + PluginManager pluginManager = this.getProxy().getPluginManager(); + pluginManager.registerListener(this, new BungeeHandshakePacketHandler(handshakePacketHandler)); + }); } } diff --git a/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeeConfigImpl.java b/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeeConfigImpl.java index a5d4248..b486eab 100644 --- a/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeeConfigImpl.java +++ b/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeeConfigImpl.java @@ -23,6 +23,7 @@ public BungeeConfigImpl(Plugin plugin) { Configuration config = loadConfig(); this.onlyProxy = config.getBoolean("only-allow-proxy-connections"); this.ipWhitelistFolder = new File(plugin.getDataFolder(), "ip-whitelist"); + this.geyser = config.getBoolean("enable-geyser-compatibility"); this.debug = config.getBoolean("debug-mode"); } diff --git a/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeePlayerImpl.java b/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeePlayerImpl.java index fa108a4..9038a2c 100644 --- a/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeePlayerImpl.java +++ b/src/main/java/net/tcpshield/tcpshield/bungee/impl/BungeePlayerImpl.java @@ -9,7 +9,6 @@ import java.lang.reflect.Field; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.util.UUID; public class BungeePlayerImpl implements IPlayer { @@ -21,19 +20,6 @@ public BungeePlayerImpl(PendingConnection pendingConnection) { this.ip = pendingConnection.getAddress().getAddress().getHostAddress(); } - @Override - public String getUUID() { - UUID uuid = pendingConnection.getUniqueId(); - if (uuid == null) return "Unknown"; - - return uuid.toString(); - } - - @Override - public String getName() { - return pendingConnection.getName(); - } - @Override public String getIP() { return ip; diff --git a/src/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java b/src/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java new file mode 100644 index 0000000..0d6e4d4 --- /dev/null +++ b/src/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java @@ -0,0 +1,18 @@ +package net.tcpshield.tcpshield.fabric; + +import net.fabricmc.api.ModInitializer; +import net.tcpshield.tcpshield.HandshakePacketHandler; +import net.tcpshield.tcpshield.fabric.impl.FabricConfigImpl; + +import java.util.logging.Logger; + +public class TCPShieldFabric implements ModInitializer { + + public static final Logger LOGGER = Logger.getLogger("TCPShield"); + public static final HandshakePacketHandler PACKET_HANDLER = new HandshakePacketHandler(LOGGER, new FabricConfigImpl()); + + @Override + public void onInitialize() { + LOGGER.info("TCPShield has been loaded."); + } +} diff --git a/src/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java b/src/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java new file mode 100644 index 0000000..2f1cefe --- /dev/null +++ b/src/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java @@ -0,0 +1,105 @@ +package net.tcpshield.tcpshield.fabric.impl; + +import net.fabricmc.loader.api.FabricLoader; +import net.tcpshield.tcpshield.abstraction.TCPShieldConfig; +import net.tcpshield.tcpshield.exception.TCPShieldInitializationException; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +public class FabricConfigImpl extends TCPShieldConfig { + + private final Path configLocation = new File(FabricLoader.getInstance().getConfigDir().toString(), "tcpshield.yml").toPath(); + + public FabricConfigImpl() { + if(!configExists()) { + createDefaultConfig(); + } + + ConfigData config = loadConfig(); + + this.onlyProxy = config.onlyAllowProxyConnections; + this.ipWhitelistFolder = new File(FabricLoader.getInstance().getGameDirectory(), "ip-whitelist"); + this.geyser = false; + this.debug = config.debugMode; + } + + /** + * @return whether the file specified in {@link FabricConfigImpl#configLocation} exists. + */ + private boolean configExists() { + return Files.exists(configLocation); + } + + /** + * Creates the default configuration file at the location specified in {@link FabricConfigImpl#configLocation}. + * + *
+ * This operation will always override an existing configuration file if it exists.
+ * Callers should check {@link FabricConfigImpl#configExists()} if they wish to avoid this behavior.
+ */
+ private void createDefaultConfig() {
+ // Ensure the parent directory of our config file exists.
+ // If it does not exist, attempt to create it now.
+ Path parentDirectory = configLocation.getParent();
+ if (!Files.exists(parentDirectory) || !Files.isDirectory(parentDirectory)) {
+ parentDirectory.toFile().mkdirs();
+ }
+
+ // Copy the config.yml data from our mod jar to the loader config folder.
+ try (InputStream in = getClass().getClassLoader().getResourceAsStream("config.yml")) {
+ Files.copy(in, configLocation);
+ } catch (Exception e) {
+ throw new TCPShieldInitializationException(e);
+ }
+ }
+
+ private ConfigData loadConfig() {
+ try {
+ List