From 063bb512eb620d23fc41913e95e6405a43dbf699 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 22 Jan 2020 20:13:40 -0600 Subject: [PATCH] UPnP Port Forwarding Service --- pom.xml | 10 ++++++++ .../net/minecraft/server/DedicatedServer.java | 25 +++++++++++++++++++ .../net/minecraft/server/MinecraftServer.java | 11 ++++++++ .../java/net/pl3x/purpur/PurpurConfig.java | 5 ++++ 4 files changed, 51 insertions(+) diff --git a/pom.xml b/pom.xml index 37ff489db..c886104c5 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,12 @@ 1.1.1 compile + + com.dosse.upnp + UPnP + 1.0 + compile + org.xerial sqlite-jdbc @@ -132,6 +138,10 @@ spigotmc-public https://hub.spigotmc.org/nexus/content/groups/public/ + + pl3x + https://repo.pl3x.net/ + diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java index 8b5f4cab0..3e31b2bb3 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java @@ -231,6 +231,31 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer return false; } + // Purpur start + if (net.pl3x.purpur.PurpurConfig.useUPnP) { + LOGGER.info("[UPnP] Attempting to start UPnP port forwarding service..."); + com.dosse.upnp.UPnP.NAME = "Purpur UPnP"; + if (com.dosse.upnp.UPnP.isUPnPAvailable()) { + if (com.dosse.upnp.UPnP.isMappedTCP(getPort())) { + upnp = false; + LOGGER.info("[UPnP] Port " + getPort() + " is already open"); + } else if (com.dosse.upnp.UPnP.openPortTCP(getPort())) { + upnp = true; + LOGGER.info("[UPnP] Successfully opened port " + getPort()); + } else { + upnp = false; + LOGGER.info("[UPnP] Failed to open port " + getPort()); + } + if (upnp) { + LOGGER.info("[UPnP] " + com.dosse.upnp.UPnP.getExternalIP() + ":" + getPort()); + } + } else { + upnp = false; + LOGGER.error("[UPnP] Service is unavailable"); + } + } + // Purpur end + // CraftBukkit start // this.a((PlayerList) (new DedicatedPlayerList(this))); // Spigot - moved up server.loadPlugins(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 9d5ef40a0..01b5a6b3e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -181,6 +181,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant