Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-26 08:10:11 +01:00
Fix bungeecord startup and move version checks to onLoad
Dieser Commit ist enthalten in:
Ursprung
f1da9d7072
Commit
896bf7c218
@ -72,6 +72,20 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
|
// Copied from ViaVersion.
|
||||||
|
// https://github.com/ViaVersion/ViaVersion/blob/b8072aad86695cc8ec6f5e4103e43baf3abf6cc5/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java#L43
|
||||||
|
try {
|
||||||
|
ProtocolConstants.class.getField("MINECRAFT_1_19_1");
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
getLogger().warning(" / \\");
|
||||||
|
getLogger().warning(" / \\");
|
||||||
|
getLogger().warning(" / | \\");
|
||||||
|
getLogger().warning(" / | \\ " + GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_proxy", getProxy().getName()));
|
||||||
|
getLogger().warning(" / \\ " + GeyserLocale.getLocaleStringLog("geyser.may_not_work_as_intended_all_caps"));
|
||||||
|
getLogger().warning(" / o \\");
|
||||||
|
getLogger().warning("/_____________\\");
|
||||||
|
}
|
||||||
|
|
||||||
GeyserLocale.init(this);
|
GeyserLocale.init(this);
|
||||||
|
|
||||||
if (!getDataFolder().exists())
|
if (!getDataFolder().exists())
|
||||||
@ -89,6 +103,31 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.geyserLogger = new GeyserBungeeLogger(getLogger(), geyserConfig.isDebugMode());
|
||||||
|
GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger);
|
||||||
|
|
||||||
|
this.geyser = GeyserImpl.load(PlatformType.BUNGEECORD, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
// Remove this in like a year
|
||||||
|
if (getProxy().getPluginManager().getPlugin("floodgate-bungee") != null) {
|
||||||
|
geyserLogger.severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.outdated", "https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/master/"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (geyserConfig.getRemote().authType() == AuthType.FLOODGATE && getProxy().getPluginManager().getPlugin("floodgate") == null) {
|
||||||
|
geyserLogger.severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.not_installed") + " " + GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.disabling"));
|
||||||
|
return;
|
||||||
|
} else if (geyserConfig.isAutoconfiguredRemote() && getProxy().getPluginManager().getPlugin("floodgate") != null) {
|
||||||
|
// Floodgate installed means that the user wants Floodgate authentication
|
||||||
|
geyserLogger.debug("Auto-setting to Floodgate authentication.");
|
||||||
|
geyserConfig.getRemote().setAuthType(AuthType.FLOODGATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
geyserConfig.loadFloodgate(this);
|
||||||
|
|
||||||
if (getProxy().getConfig().getListeners().size() == 1) {
|
if (getProxy().getConfig().getListeners().size() == 1) {
|
||||||
ListenerInfo listener = getProxy().getConfig().getListeners().toArray(new ListenerInfo[0])[0];
|
ListenerInfo listener = getProxy().getConfig().getListeners().toArray(new ListenerInfo[0])[0];
|
||||||
|
|
||||||
@ -109,45 +148,6 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.geyserLogger = new GeyserBungeeLogger(getLogger(), geyserConfig.isDebugMode());
|
|
||||||
GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger);
|
|
||||||
|
|
||||||
this.geyser = GeyserImpl.load(PlatformType.BUNGEECORD, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEnable() {
|
|
||||||
// Copied from ViaVersion.
|
|
||||||
// https://github.com/ViaVersion/ViaVersion/blob/b8072aad86695cc8ec6f5e4103e43baf3abf6cc5/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java#L43
|
|
||||||
try {
|
|
||||||
ProtocolConstants.class.getField("MINECRAFT_1_19_1");
|
|
||||||
} catch (NoSuchFieldException e) {
|
|
||||||
getLogger().warning(" / \\");
|
|
||||||
getLogger().warning(" / \\");
|
|
||||||
getLogger().warning(" / | \\");
|
|
||||||
getLogger().warning(" / | \\ " + GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_proxy", getProxy().getName()));
|
|
||||||
getLogger().warning(" / \\ " + GeyserLocale.getLocaleStringLog("geyser.may_not_work_as_intended_all_caps"));
|
|
||||||
getLogger().warning(" / o \\");
|
|
||||||
getLogger().warning("/_____________\\");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove this in like a year
|
|
||||||
if (getProxy().getPluginManager().getPlugin("floodgate-bungee") != null) {
|
|
||||||
geyserLogger.severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.outdated", "https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/master/"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (geyserConfig.getRemote().authType() == AuthType.FLOODGATE && getProxy().getPluginManager().getPlugin("floodgate") == null) {
|
|
||||||
geyserLogger.severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.not_installed") + " " + GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.disabling"));
|
|
||||||
return;
|
|
||||||
} else if (geyserConfig.isAutoconfiguredRemote() && getProxy().getPluginManager().getPlugin("floodgate") != null) {
|
|
||||||
// Floodgate installed means that the user wants Floodgate authentication
|
|
||||||
geyserLogger.debug("Auto-setting to Floodgate authentication.");
|
|
||||||
geyserConfig.getRemote().setAuthType(AuthType.FLOODGATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
geyserConfig.loadFloodgate(this);
|
|
||||||
|
|
||||||
// Big hack - Bungee does not provide us an event to listen to, so schedule a repeating
|
// Big hack - Bungee does not provide us an event to listen to, so schedule a repeating
|
||||||
// task that waits for a field to be filled which is set after the plugin enable
|
// task that waits for a field to be filled which is set after the plugin enable
|
||||||
// process is complete
|
// process is complete
|
||||||
@ -171,7 +171,7 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
|
|||||||
listenersField.setAccessible(true);
|
listenersField.setAccessible(true);
|
||||||
|
|
||||||
Collection<Channel> listeners = (Collection<Channel>) listenersField.get(BungeeCord.getInstance());
|
Collection<Channel> listeners = (Collection<Channel>) listenersField.get(BungeeCord.getInstance());
|
||||||
if (!listeners.isEmpty()) {
|
if (listeners.isEmpty()) {
|
||||||
this.getProxy().getScheduler().schedule(this, this::postStartup, tries, TimeUnit.SECONDS);
|
this.getProxy().getScheduler().schedule(this, this::postStartup, tries, TimeUnit.SECONDS);
|
||||||
} else {
|
} else {
|
||||||
this.awaitStartupCompletion(++tries);
|
this.awaitStartupCompletion(++tries);
|
||||||
|
@ -104,47 +104,6 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
GeyserLocale.init(this);
|
|
||||||
|
|
||||||
// This is manually done instead of using Bukkit methods to save the config because otherwise comments get removed
|
|
||||||
try {
|
|
||||||
if (!getDataFolder().exists()) {
|
|
||||||
getDataFolder().mkdir();
|
|
||||||
}
|
|
||||||
File configFile = FileUtils.fileOrCopiedFromResource(new File(getDataFolder(), "config.yml"), "config.yml",
|
|
||||||
(x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this);
|
|
||||||
this.geyserConfig = FileUtils.loadConfig(configFile, GeyserSpigotConfiguration.class);
|
|
||||||
} catch (IOException ex) {
|
|
||||||
getLogger().log(Level.SEVERE, GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex);
|
|
||||||
ex.printStackTrace();
|
|
||||||
Bukkit.getPluginManager().disablePlugin(this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// By default this should be localhost but may need to be changed in some circumstances
|
|
||||||
if (this.geyserConfig.getRemote().address().equalsIgnoreCase("auto")) {
|
|
||||||
geyserConfig.setAutoconfiguredRemote(true);
|
|
||||||
// Don't use localhost if not listening on all interfaces
|
|
||||||
if (!Bukkit.getIp().equals("0.0.0.0") && !Bukkit.getIp().equals("")) {
|
|
||||||
geyserConfig.getRemote().setAddress(Bukkit.getIp());
|
|
||||||
}
|
|
||||||
geyserConfig.getRemote().setPort(Bukkit.getPort());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (geyserConfig.getBedrock().isCloneRemotePort()) {
|
|
||||||
geyserConfig.getBedrock().setPort(Bukkit.getPort());
|
|
||||||
}
|
|
||||||
|
|
||||||
this.geyserLogger = GeyserPaperLogger.supported() ? new GeyserPaperLogger(this, getLogger(), geyserConfig.isDebugMode())
|
|
||||||
: new GeyserSpigotLogger(getLogger(), geyserConfig.isDebugMode());
|
|
||||||
|
|
||||||
GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger);
|
|
||||||
|
|
||||||
this.geyser = GeyserImpl.load(PlatformType.SPIGOT, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEnable() {
|
|
||||||
try {
|
try {
|
||||||
// AvailableCommandsSerializer_v291 complains otherwise
|
// AvailableCommandsSerializer_v291 complains otherwise
|
||||||
ByteBuf.class.getMethod("writeShortLE", int.class);
|
ByteBuf.class.getMethod("writeShortLE", int.class);
|
||||||
@ -176,6 +135,33 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GeyserLocale.init(this);
|
||||||
|
|
||||||
|
// This is manually done instead of using Bukkit methods to save the config because otherwise comments get removed
|
||||||
|
try {
|
||||||
|
if (!getDataFolder().exists()) {
|
||||||
|
getDataFolder().mkdir();
|
||||||
|
}
|
||||||
|
File configFile = FileUtils.fileOrCopiedFromResource(new File(getDataFolder(), "config.yml"), "config.yml",
|
||||||
|
(x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this);
|
||||||
|
this.geyserConfig = FileUtils.loadConfig(configFile, GeyserSpigotConfiguration.class);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
getLogger().log(Level.SEVERE, GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex);
|
||||||
|
ex.printStackTrace();
|
||||||
|
Bukkit.getPluginManager().disablePlugin(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.geyserLogger = GeyserPaperLogger.supported() ? new GeyserPaperLogger(this, getLogger(), geyserConfig.isDebugMode())
|
||||||
|
: new GeyserSpigotLogger(getLogger(), geyserConfig.isDebugMode());
|
||||||
|
|
||||||
|
GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger);
|
||||||
|
|
||||||
|
this.geyser = GeyserImpl.load(PlatformType.SPIGOT, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
// Remove this in like a year
|
// Remove this in like a year
|
||||||
if (Bukkit.getPluginManager().getPlugin("floodgate-bukkit") != null) {
|
if (Bukkit.getPluginManager().getPlugin("floodgate-bukkit") != null) {
|
||||||
geyserLogger.severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.outdated", Constants.FLOODGATE_DOWNLOAD_LOCATION));
|
geyserLogger.severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.outdated", Constants.FLOODGATE_DOWNLOAD_LOCATION));
|
||||||
@ -192,6 +178,20 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
|||||||
geyserConfig.getRemote().setAuthType(AuthType.FLOODGATE);
|
geyserConfig.getRemote().setAuthType(AuthType.FLOODGATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// By default this should be localhost but may need to be changed in some circumstances
|
||||||
|
if (this.geyserConfig.getRemote().address().equalsIgnoreCase("auto")) {
|
||||||
|
geyserConfig.setAutoconfiguredRemote(true);
|
||||||
|
// Don't use localhost if not listening on all interfaces
|
||||||
|
if (!Bukkit.getIp().equals("0.0.0.0") && !Bukkit.getIp().equals("")) {
|
||||||
|
geyserConfig.getRemote().setAddress(Bukkit.getIp());
|
||||||
|
}
|
||||||
|
geyserConfig.getRemote().setPort(Bukkit.getPort());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (geyserConfig.getBedrock().isCloneRemotePort()) {
|
||||||
|
geyserConfig.getBedrock().setPort(Bukkit.getPort());
|
||||||
|
}
|
||||||
|
|
||||||
geyserConfig.loadFloodgate(this);
|
geyserConfig.loadFloodgate(this);
|
||||||
|
|
||||||
// Needs to be an anonymous inner class otherwise Bukkit complains about missing classes
|
// Needs to be an anonymous inner class otherwise Bukkit complains about missing classes
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren