mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
committed by
granny
parent
7703bd1fd1
commit
77adc2f882
@@ -1,83 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
||||||
Date: Wed, 22 Jan 2020 20:13:40 -0600
|
|
||||||
Subject: [PATCH] UPnP Port Forwarding
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
|
||||||
index 9219b31a7273b08e7acd1a953c260a5520333922..80a8bd2dc32763f8ee2062c2d1b36188f2532523 100644
|
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
|
||||||
@@ -331,6 +331,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
||||||
public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
|
|
||||||
private final Set<String> pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping
|
|
||||||
public boolean lagging = false; // Purpur - Lagging threshold
|
|
||||||
+ protected boolean upnp = false; // Purpur - UPnP Port Forwarding
|
|
||||||
|
|
||||||
public volatile Thread shutdownThread; // Paper
|
|
||||||
public volatile boolean abnormalExit = false; // Paper
|
|
||||||
@@ -1057,6 +1058,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
||||||
|
|
||||||
MinecraftServer.LOGGER.info("Stopping server");
|
|
||||||
Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing
|
|
||||||
+ // Purpur start - UPnP Port Forwarding
|
|
||||||
+ if (upnp) {
|
|
||||||
+ if (dev.omega24.upnp4j.UPnP4J.close(this.getPort(), dev.omega24.upnp4j.util.Protocol.TCP)) {
|
|
||||||
+ LOGGER.info("[UPnP] Port {} closed", this.getPort());
|
|
||||||
+ } else {
|
|
||||||
+ LOGGER.error("[UPnP] Failed to close port {}", this.getPort());
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ // Purpur end - UPnP Port Forwarding
|
|
||||||
// CraftBukkit start
|
|
||||||
if (this.server != null) {
|
|
||||||
this.server.spark.disable(); // Paper - spark
|
|
||||||
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
|
|
||||||
index 6252001c03230f35c5ec7354faa3720e407dee6c..683c7c373e1b9f764bb9b53cdaace9740f607c75 100644
|
|
||||||
--- a/net/minecraft/server/dedicated/DedicatedServer.java
|
|
||||||
+++ b/net/minecraft/server/dedicated/DedicatedServer.java
|
|
||||||
@@ -301,6 +301,30 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
|
||||||
if (true) throw new IllegalStateException("Failed to bind to port", ioexception); // Paper - Propagate failed to bind to port error
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
+ // Purpur start - UPnP Port Forwarding
|
|
||||||
+ if (org.purpurmc.purpur.PurpurConfig.useUPnP) {
|
|
||||||
+ LOGGER.info("[UPnP] Attempting to start UPnP port forwarding service...");
|
|
||||||
+ if (dev.omega24.upnp4j.UPnP4J.isUPnPAvailable()) {
|
|
||||||
+ if (dev.omega24.upnp4j.UPnP4J.isOpen(this.getPort(), dev.omega24.upnp4j.util.Protocol.TCP)) {
|
|
||||||
+ this.upnp = false;
|
|
||||||
+ LOGGER.info("[UPnP] Port {} is already open", this.getPort());
|
|
||||||
+ } else if (dev.omega24.upnp4j.UPnP4J.open(this.getPort(), dev.omega24.upnp4j.util.Protocol.TCP)) {
|
|
||||||
+ this.upnp = true;
|
|
||||||
+ LOGGER.info("[UPnP] Successfully opened port {}", this.getPort());
|
|
||||||
+ } else {
|
|
||||||
+ this.upnp = false;
|
|
||||||
+ LOGGER.info("[UPnP] Failed to open port {}", this.getPort());
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (upnp) {
|
|
||||||
+ LOGGER.info("[UPnP] {}:{}", dev.omega24.upnp4j.UPnP4J.getExternalIP(), this.getPort());
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ this.upnp = false;
|
|
||||||
+ LOGGER.error("[UPnP] Service is unavailable");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ // Purpur end - UPnP Port Forwarding
|
|
||||||
|
|
||||||
// CraftBukkit start
|
|
||||||
// this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); // Spigot - moved up
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
||||||
index 82903b6ce4cf30b2d95001455ee4e3a454b3ddd5..f84248af574887e48180e88b3e365f7008dd1c16 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
||||||
@@ -422,4 +422,9 @@ public class PurpurConfig {
|
|
||||||
private static void tpsCatchup() {
|
|
||||||
tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ public static boolean useUPnP = false;
|
|
||||||
+ private static void networkSettings() {
|
|
||||||
+ useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
@@ -51,12 +51,13 @@
|
|||||||
implementation("ca.spottedleaf:concurrentutil:0.0.2") // Paper - Add ConcurrentUtil dependency
|
implementation("ca.spottedleaf:concurrentutil:0.0.2") // Paper - Add ConcurrentUtil dependency
|
||||||
// Paper start
|
// Paper start
|
||||||
implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
|
implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
|
||||||
@@ -155,6 +_,9 @@
|
@@ -155,6 +_,10 @@
|
||||||
}
|
}
|
||||||
// Paper end - Use Velocity cipher
|
// Paper end - Use Velocity cipher
|
||||||
|
|
||||||
+ implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur
|
+ implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur
|
||||||
+ implementation("org.mozilla:rhino-engine:1.7.14") // Purpur
|
+ implementation("org.mozilla:rhino-engine:1.7.14") // Purpur
|
||||||
|
+ implementation("dev.omega24:upnp4j:1.0") // Purpur
|
||||||
+
|
+
|
||||||
runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6")
|
runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6")
|
||||||
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18")
|
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18")
|
||||||
|
|||||||
@@ -17,14 +17,32 @@
|
|||||||
// Spigot end
|
// Spigot end
|
||||||
public volatile boolean hasFullyShutdown; // Paper - Improved watchdog support
|
public volatile boolean hasFullyShutdown; // Paper - Improved watchdog support
|
||||||
public volatile boolean abnormalExit; // Paper - Improved watchdog support
|
public volatile boolean abnormalExit; // Paper - Improved watchdog support
|
||||||
@@ -302,6 +_,7 @@
|
@@ -302,7 +_,9 @@
|
||||||
public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files
|
public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files
|
||||||
public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
|
public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
|
||||||
private final Set<String> pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping
|
private final Set<String> pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping
|
||||||
+ public boolean lagging = false; // Purpur - Lagging threshold
|
+ public boolean lagging = false; // Purpur - Lagging threshold
|
||||||
public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation
|
public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation
|
||||||
|
+ protected boolean upnp = false; // Purpur - UPnP Port Forwarding
|
||||||
|
|
||||||
public static <S extends MinecraftServer> S spin(Function<Thread, S> threadFunction) {
|
public static <S extends MinecraftServer> S spin(Function<Thread, S> threadFunction) {
|
||||||
|
ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system
|
||||||
|
@@ -1001,6 +_,15 @@
|
||||||
|
|
||||||
|
LOGGER.info("Stopping server");
|
||||||
|
Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing
|
||||||
|
+ // Purpur start - UPnP Port Forwarding
|
||||||
|
+ if (upnp) {
|
||||||
|
+ if (dev.omega24.upnp4j.UPnP4J.close(this.getPort(), dev.omega24.upnp4j.util.Protocol.TCP)) {
|
||||||
|
+ LOGGER.info("[UPnP] Port {} closed", this.getPort());
|
||||||
|
+ } else {
|
||||||
|
+ LOGGER.error("[UPnP] Failed to close port {}", this.getPort());
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - UPnP Port Forwarding
|
||||||
|
// CraftBukkit start
|
||||||
|
if (this.server != null) {
|
||||||
|
this.server.spark.disable(); // Paper - spark
|
||||||
@@ -1093,6 +_,7 @@
|
@@ -1093,6 +_,7 @@
|
||||||
this.safeShutdown(waitForServer, false);
|
this.safeShutdown(waitForServer, false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,37 @@
|
|||||||
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
|
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
|
||||||
|
|
||||||
this.setPvpAllowed(properties.pvp);
|
this.setPvpAllowed(properties.pvp);
|
||||||
|
@@ -271,6 +_,30 @@
|
||||||
|
if (true) throw new IllegalStateException("Failed to bind to port", var10); // Paper - Propagate failed to bind to port error
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
+ // Purpur start - UPnP Port Forwarding
|
||||||
|
+ if (org.purpurmc.purpur.PurpurConfig.useUPnP) {
|
||||||
|
+ LOGGER.info("[UPnP] Attempting to start UPnP port forwarding service...");
|
||||||
|
+ if (dev.omega24.upnp4j.UPnP4J.isUPnPAvailable()) {
|
||||||
|
+ if (dev.omega24.upnp4j.UPnP4J.isOpen(this.getPort(), dev.omega24.upnp4j.util.Protocol.TCP)) {
|
||||||
|
+ this.upnp = false;
|
||||||
|
+ LOGGER.info("[UPnP] Port {} is already open", this.getPort());
|
||||||
|
+ } else if (dev.omega24.upnp4j.UPnP4J.open(this.getPort(), dev.omega24.upnp4j.util.Protocol.TCP)) {
|
||||||
|
+ this.upnp = true;
|
||||||
|
+ LOGGER.info("[UPnP] Successfully opened port {}", this.getPort());
|
||||||
|
+ } else {
|
||||||
|
+ this.upnp = false;
|
||||||
|
+ LOGGER.info("[UPnP] Failed to open port {}", this.getPort());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (upnp) {
|
||||||
|
+ LOGGER.info("[UPnP] {}:{}", dev.omega24.upnp4j.UPnP4J.getExternalIP(), this.getPort());
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ this.upnp = false;
|
||||||
|
+ LOGGER.error("[UPnP] Service is unavailable");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - UPnP Port Forwarding
|
||||||
|
|
||||||
|
// CraftBukkit start
|
||||||
|
// this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); // Spigot - moved up
|
||||||
@@ -350,6 +_,7 @@
|
@@ -350,6 +_,7 @@
|
||||||
LOGGER.info("JMX monitoring enabled");
|
LOGGER.info("JMX monitoring enabled");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -414,4 +414,9 @@ public class PurpurConfig {
|
|||||||
private static void tpsCatchup() {
|
private static void tpsCatchup() {
|
||||||
tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup);
|
tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean useUPnP = false;
|
||||||
|
private static void networkSettings() {
|
||||||
|
useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user