3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-10-03 16:31:14 +02:00

Merge branch 'GeyserMC:master' into rp

Dieser Commit ist enthalten in:
chris 2024-08-12 00:24:20 +02:00 committet von GitHub
Commit 20e49192f1
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: B5690EEEBB952194
20 geänderte Dateien mit 174 neuen und 129 gelöschten Zeilen

4
.gitignore vendored
Datei anzeigen

@ -249,6 +249,8 @@ locales/
/packs/ /packs/
/dump.json /dump.json
/saved-refresh-tokens.json /saved-refresh-tokens.json
/saved-auth-chains.json
/custom_mappings/ /custom_mappings/
/languages/ /languages/
/custom-skulls.yml /custom-skulls.yml
/permissions.yml

Datei anzeigen

@ -15,7 +15,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here!
## Supported Versions ## Supported Versions
Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.3 and Minecraft Java Server 1.21. For more info please see [here](https://geysermc.org/wiki/geyser/supported-versions/). Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.3 and Minecraft Java Server 1.21/1.21.1. For more info please see [here](https://geysermc.org/wiki/geyser/supported-versions/).
## Setting Up ## Setting Up
Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser.

Datei anzeigen

@ -71,9 +71,6 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
private IGeyserPingPassthrough geyserBungeePingPassthrough; private IGeyserPingPassthrough geyserBungeePingPassthrough;
private GeyserImpl geyser; private GeyserImpl geyser;
// We can't disable the plugin; hence we need to keep track of it manually
private boolean disabled;
@Override @Override
public void onLoad() { public void onLoad() {
onGeyserInitialize(); onGeyserInitialize();
@ -98,7 +95,6 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
} }
if (!this.loadConfig()) { if (!this.loadConfig()) {
disabled = true;
return; return;
} }
this.geyserLogger.setDebug(geyserConfig.isDebugMode()); this.geyserLogger.setDebug(geyserConfig.isDebugMode());
@ -112,7 +108,7 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
@Override @Override
public void onEnable() { public void onEnable() {
if (disabled) { if (geyser == null) {
return; // Config did not load properly! return; // Config did not load properly!
} }
// 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

Datei anzeigen

@ -89,6 +89,11 @@ public abstract class GeyserModBootstrap implements GeyserBootstrap {
} }
public void onGeyserEnable() { public void onGeyserEnable() {
// "Disabling" a mod isn't possible; so if we fail to initialize we need to manually stop here
if (geyser == null) {
return;
}
if (GeyserImpl.getInstance().isReloading()) { if (GeyserImpl.getInstance().isReloading()) {
if (!loadConfig()) { if (!loadConfig()) {
return; return;

Datei anzeigen

@ -81,5 +81,7 @@ tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
modrinth { modrinth {
uploadFile.set(tasks.getByPath("shadowJar")) uploadFile.set(tasks.getByPath("shadowJar"))
gameVersions.addAll("1.16.5", "1.17", "1.17.1", "1.18", "1.18.1", "1.18.2", "1.19",
"1.19.1", "1.19.2", "1.19.3", "1.19.4", "1.20", "1.20.1", "1.20.2", "1.20.3", "1.20.4", "1.20.5", "1.20.6")
loaders.addAll("spigot", "paper") loaders.addAll("spigot", "paper")
} }

Datei anzeigen

@ -117,7 +117,6 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
geyserLogger.error(GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_server.message", "1.13.2")); geyserLogger.error(GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_server.message", "1.13.2"));
geyserLogger.error(""); geyserLogger.error("");
geyserLogger.error("*********************************************"); geyserLogger.error("*********************************************");
Bukkit.getPluginManager().disablePlugin(this);
return; return;
} }
@ -131,7 +130,6 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
geyserLogger.error(GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_server_type.message", "Paper")); geyserLogger.error(GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_server_type.message", "Paper"));
geyserLogger.error(""); geyserLogger.error("");
geyserLogger.error("*********************************************"); geyserLogger.error("*********************************************");
Bukkit.getPluginManager().disablePlugin(this);
return; return;
} }
} }
@ -144,10 +142,25 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
geyserLogger.error("This version of Spigot is using an outdated version of netty. Please use Paper instead!"); geyserLogger.error("This version of Spigot is using an outdated version of netty. Please use Paper instead!");
geyserLogger.error(""); geyserLogger.error("");
geyserLogger.error("*********************************************"); geyserLogger.error("*********************************************");
Bukkit.getPluginManager().disablePlugin(this);
return; return;
} }
try {
// Check spigot config for BungeeCord mode
if (Bukkit.getServer().spigot().getConfig().getBoolean("settings.bungeecord")) {
warnInvalidProxySetups("BungeeCord");
return;
}
// Now: Check for velocity mode - deliberately after checking bungeecord because this is a paper only option
if (Bukkit.getServer().spigot().getPaperConfig().getBoolean("proxies.velocity.enabled")) {
warnInvalidProxySetups("Velocity");
return;
}
} catch (NoSuchMethodError e) {
// no-op
}
if (!loadConfig()) { if (!loadConfig()) {
return; return;
} }
@ -162,6 +175,11 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
@Override @Override
public void onEnable() { public void onEnable() {
// Disabling the plugin in onLoad() is not supported; we need to manually stop here
if (geyser == null) {
return;
}
// Create command manager early so we can add Geyser extension commands // Create command manager early so we can add Geyser extension commands
var sourceConverter = new CommandSourceConverter<>( var sourceConverter = new CommandSourceConverter<>(
CommandSender.class, CommandSender.class,
@ -458,4 +476,13 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
return true; return true;
} }
private void warnInvalidProxySetups(String platform) {
geyserLogger.error("*********************************************");
geyserLogger.error("");
geyserLogger.error(GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_proxy_backend", platform));
geyserLogger.error(GeyserLocale.getLocaleStringLog("geyser.bootstrap.setup_guide", "https://geysermc.org/wiki/geyser/setup/"));
geyserLogger.error("");
geyserLogger.error("*********************************************");
}
} }

Datei anzeigen

@ -113,6 +113,10 @@ public class GeyserVelocityPlugin implements GeyserBootstrap {
@Override @Override
public void onGeyserEnable() { public void onGeyserEnable() {
// If e.g. the config failed to load, GeyserImpl was not loaded and we cannot start
if (geyser == null) {
return;
}
if (GeyserImpl.getInstance().isReloading()) { if (GeyserImpl.getInstance().isReloading()) {
if (!loadConfig()) { if (!loadConfig()) {
return; return;

Datei anzeigen

@ -132,6 +132,10 @@ public class GeyserViaProxyPlugin extends ViaProxyPlugin implements GeyserBootst
@Override @Override
public void onGeyserEnable() { public void onGeyserEnable() {
// If e.g. the config failed to load, GeyserImpl was not loaded and we cannot start
if (geyser == null) {
return;
}
boolean reloading = geyser.isReloading(); boolean reloading = geyser.isReloading();
if (reloading) { if (reloading) {
if (!this.loadConfig()) { if (!this.loadConfig()) {
@ -155,6 +159,9 @@ public class GeyserViaProxyPlugin extends ViaProxyPlugin implements GeyserBootst
// Only initialize the ping passthrough if the protocol version is above beta 1.7.3, as that's when the status protocol was added // Only initialize the ping passthrough if the protocol version is above beta 1.7.3, as that's when the status protocol was added
this.pingPassthrough = GeyserLegacyPingPassthrough.init(this.geyser); this.pingPassthrough = GeyserLegacyPingPassthrough.init(this.geyser);
} }
if (this.config.getRemote().authType() == AuthType.FLOODGATE) {
ViaProxy.getConfig().setPassthroughBungeecordPlayerInfo(true);
}
} }
@Override @Override

Datei anzeigen

@ -2,4 +2,4 @@ name: "${name}-ViaProxy"
version: "${version}" version: "${version}"
author: "${author}" author: "${author}"
main: "org.geysermc.geyser.platform.viaproxy.GeyserViaProxyPlugin" main: "org.geysermc.geyser.platform.viaproxy.GeyserViaProxyPlugin"
min-version: "3.2.1" min-version: "3.3.2"

Datei anzeigen

@ -0,0 +1,45 @@
repositories {
// mavenLocal()
mavenCentral()
// Floodgate, Cumulus etc.
maven("https://repo.opencollab.dev/main")
// Paper, Velocity
maven("https://repo.papermc.io/repository/maven-public")
// Spigot
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots") {
mavenContent { snapshotsOnly() }
}
// BungeeCord
maven("https://oss.sonatype.org/content/repositories/snapshots") {
mavenContent { snapshotsOnly() }
}
// NeoForge
maven("https://maven.neoforged.net/releases") {
mavenContent { releasesOnly() }
}
// Minecraft
maven("https://libraries.minecraft.net") {
name = "minecraft"
mavenContent { releasesOnly() }
}
// ViaVersion
maven("https://repo.viaversion.com") {
name = "viaversion"
}
// Jitpack for e.g. MCPL
maven("https://jitpack.io") {
content { includeGroupByRegex("com\\.github\\..*") }
}
// For Adventure snapshots
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
}

Datei anzeigen

@ -5,6 +5,7 @@ import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.maven import org.gradle.kotlin.dsl.maven
plugins { plugins {
id("geyser.build-logic")
id("geyser.publish-conventions") id("geyser.publish-conventions")
id("architectury-plugin") id("architectury-plugin")
id("dev.architectury.loom") id("dev.architectury.loom")
@ -116,12 +117,3 @@ dependencies {
minecraft(libs.minecraft) minecraft(libs.minecraft)
mappings(loom.officialMojangMappings()) mappings(loom.officialMojangMappings())
} }
repositories {
// mavenLocal()
maven("https://repo.opencollab.dev/main")
maven("https://jitpack.io")
maven("https://oss.sonatype.org/content/repositories/snapshots/")
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
maven("https://maven.neoforged.net/releases")
}

Datei anzeigen

@ -11,8 +11,8 @@ modrinth {
versionNumber.set(project.version as String + "-" + System.getenv("BUILD_NUMBER")) versionNumber.set(project.version as String + "-" + System.getenv("BUILD_NUMBER"))
versionType.set("beta") versionType.set("beta")
changelog.set(System.getenv("CHANGELOG") ?: "") changelog.set(System.getenv("CHANGELOG") ?: "")
gameVersions.add(libs.minecraft.get().version as String) gameVersions.addAll("1.21", libs.minecraft.get().version as String)
failSilently.set(true) failSilently.set(true)
syncBodyFrom.set(rootProject.file("README.md").readText()) syncBodyFrom.set(rootProject.file("README.md").readText())
} }

Datei anzeigen

@ -157,12 +157,6 @@ public class GeyserImpl implements GeyserApi, EventRegistrar {
private final SessionManager sessionManager = new SessionManager(); private final SessionManager sessionManager = new SessionManager();
/**
* This is used in GeyserConnect to stop the bedrock server binding to a port
*/
@Setter
private static boolean shouldStartListener = true;
private FloodgateCipher cipher; private FloodgateCipher cipher;
private FloodgateSkinUploader skinUploader; private FloodgateSkinUploader skinUploader;
private NewsHandler newsHandler; private NewsHandler newsHandler;
@ -436,24 +430,27 @@ public class GeyserImpl implements GeyserApi, EventRegistrar {
bedrockThreadCount = Math.max(1, SystemPropertyUtil.getInt("io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2)); bedrockThreadCount = Math.max(1, SystemPropertyUtil.getInt("io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2));
} }
if (shouldStartListener) { this.geyserServer = new GeyserServer(this, bedrockThreadCount);
this.geyserServer = new GeyserServer(this, bedrockThreadCount); this.geyserServer.bind(new InetSocketAddress(config.getBedrock().address(), config.getBedrock().port()))
this.geyserServer.bind(new InetSocketAddress(config.getBedrock().address(), config.getBedrock().port())) .whenComplete((avoid, throwable) -> {
.whenComplete((avoid, throwable) -> { String address = config.getBedrock().address();
if (throwable == null) { String port = String.valueOf(config.getBedrock().port()); // otherwise we get commas
logger.info(GeyserLocale.getLocaleStringLog("geyser.core.start", config.getBedrock().address(),
String.valueOf(config.getBedrock().port()))); if (throwable == null) {
if ("0.0.0.0".equals(address)) {
// basically just hide it in the log because some people get confused and try to change it
logger.info(GeyserLocale.getLocaleStringLog("geyser.core.start.ip_suppressed", port));
} else { } else {
String address = config.getBedrock().address(); logger.info(GeyserLocale.getLocaleStringLog("geyser.core.start", address, port));
int port = config.getBedrock().port();
logger.severe(GeyserLocale.getLocaleStringLog("geyser.core.fail", address, String.valueOf(port)));
if (!"0.0.0.0".equals(address)) {
logger.info(Component.text("Suggestion: try setting `address` under `bedrock` in the Geyser config back to 0.0.0.0", NamedTextColor.GREEN));
logger.info(Component.text("Then, restart this server.", NamedTextColor.GREEN));
}
} }
}).join(); } else {
} logger.severe(GeyserLocale.getLocaleStringLog("geyser.core.fail", address, port));
if (!"0.0.0.0".equals(address)) {
logger.info(Component.text("Suggestion: try setting `address` under `bedrock` in the Geyser config back to 0.0.0.0", NamedTextColor.GREEN));
logger.info(Component.text("Then, restart this server.", NamedTextColor.GREEN));
}
}
}).join();
if (config.getRemote().authType() == AuthType.FLOODGATE) { if (config.getRemote().authType() == AuthType.FLOODGATE) {
try { try {

Datei anzeigen

@ -63,31 +63,31 @@ public class DumpCommand extends GeyserCommand {
this.geyser = geyser; this.geyser = geyser;
} }
@Override @Override
public void register(CommandManager<GeyserCommandSource> manager) { public void register(CommandManager<GeyserCommandSource> manager) {
manager.command(baseBuilder(manager) manager.command(baseBuilder(manager)
.optional(ARGUMENTS, stringArrayParser(), SuggestionProvider.blockingStrings((ctx, input) -> { .optional(ARGUMENTS, stringArrayParser(), SuggestionProvider.blockingStrings((ctx, input) -> {
// parse suggestions here // parse suggestions here
List<String> inputs = new ArrayList<>(); List<String> inputs = new ArrayList<>();
while (input.hasRemainingInput()) { while (input.hasRemainingInput()) {
inputs.add(input.readStringSkipWhitespace()); inputs.add(input.readStringSkipWhitespace());
} }
if (inputs.size() <= 2) { if (inputs.size() <= 2) {
return SUGGESTIONS; // only `geyser dump` was typed (2 literals) return SUGGESTIONS; // only `geyser dump` was typed (2 literals)
} }
// the rest of the input after `geyser dump` is for this argument // the rest of the input after `geyser dump` is for this argument
inputs = inputs.subList(2, inputs.size()); inputs = inputs.subList(2, inputs.size());
// don't suggest any words they have already typed // don't suggest any words they have already typed
List<String> suggestions = new ArrayList<>(); List<String> suggestions = new ArrayList<>();
SUGGESTIONS.forEach(suggestions::add); SUGGESTIONS.forEach(suggestions::add);
suggestions.removeAll(inputs); suggestions.removeAll(inputs);
return suggestions; return suggestions;
})) }))
.handler(this::execute)); .handler(this::execute));
} }
@Override @Override
public void execute(CommandContext<GeyserCommandSource> context) { public void execute(CommandContext<GeyserCommandSource> context) {
@ -113,13 +113,15 @@ public class DumpCommand extends GeyserCommand {
source.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.dump.collecting", source.locale())); source.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.dump.collecting", source.locale()));
String dumpData; String dumpData;
try { try {
DumpInfo dump = new DumpInfo(geyser, addLog);
if (offlineDump) { if (offlineDump) {
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter(); DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
// Make arrays easier to read // Make arrays easier to read
prettyPrinter.indentArraysWith(new DefaultIndenter(" ", "\n")); prettyPrinter.indentArraysWith(new DefaultIndenter(" ", "\n"));
dumpData = MAPPER.writer(prettyPrinter).writeValueAsString(new DumpInfo(addLog)); dumpData = MAPPER.writer(prettyPrinter).writeValueAsString(dump);
} else { } else {
dumpData = MAPPER.writeValueAsString(new DumpInfo(addLog)); dumpData = MAPPER.writeValueAsString(dump);
} }
} catch (IOException e) { } catch (IOException e) {
source.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.dump.collect_error", source.locale())); source.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.dump.collect_error", source.locale()));

Datei anzeigen

@ -81,7 +81,7 @@ public class DumpInfo {
private final FlagsInfo flagsInfo; private final FlagsInfo flagsInfo;
private final List<ExtensionInfo> extensionInfo; private final List<ExtensionInfo> extensionInfo;
public DumpInfo(boolean addLog) { public DumpInfo(GeyserImpl geyser, boolean addLog) {
this.versionInfo = new VersionInfo(); this.versionInfo = new VersionInfo();
this.cpuCount = Runtime.getRuntime().availableProcessors(); this.cpuCount = Runtime.getRuntime().availableProcessors();
@ -91,7 +91,7 @@ public class DumpInfo {
this.gitInfo = new GitInfo(GeyserImpl.BUILD_NUMBER, GeyserImpl.COMMIT.substring(0, 7), GeyserImpl.COMMIT, GeyserImpl.BRANCH, GeyserImpl.REPOSITORY); this.gitInfo = new GitInfo(GeyserImpl.BUILD_NUMBER, GeyserImpl.COMMIT.substring(0, 7), GeyserImpl.COMMIT, GeyserImpl.BRANCH, GeyserImpl.REPOSITORY);
this.config = GeyserImpl.getInstance().getConfig(); this.config = geyser.getConfig();
this.floodgate = new Floodgate(); this.floodgate = new Floodgate();
String md5Hash = "unknown"; String md5Hash = "unknown";
@ -107,7 +107,7 @@ public class DumpInfo {
//noinspection UnstableApiUsage //noinspection UnstableApiUsage
sha256Hash = byteSource.hash(Hashing.sha256()).toString(); sha256Hash = byteSource.hash(Hashing.sha256()).toString();
} catch (Exception e) { } catch (Exception e) {
if (GeyserImpl.getInstance().getConfig().isDebugMode()) { if (this.config.isDebugMode()) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -116,18 +116,22 @@ public class DumpInfo {
this.ramInfo = new RamInfo(); this.ramInfo = new RamInfo();
if (addLog) { if (addLog) {
this.logsInfo = new LogsInfo(); this.logsInfo = new LogsInfo(geyser);
} }
this.userPlatforms = new Object2IntOpenHashMap<>(); this.userPlatforms = new Object2IntOpenHashMap<>();
for (GeyserSession session : GeyserImpl.getInstance().getSessionManager().getAllSessions()) { for (GeyserSession session : geyser.getSessionManager().getAllSessions()) {
DeviceOs device = session.getClientData().getDeviceOs(); DeviceOs device = session.getClientData().getDeviceOs();
userPlatforms.put(device, userPlatforms.getOrDefault(device, 0) + 1); userPlatforms.put(device, userPlatforms.getOrDefault(device, 0) + 1);
} }
this.connectionAttempts = GeyserImpl.getInstance().getGeyserServer().getConnectionAttempts(); if (geyser.getGeyserServer() != null) {
this.connectionAttempts = geyser.getGeyserServer().getConnectionAttempts();
} else {
this.connectionAttempts = 0; // Fallback if Geyser failed to fully startup
}
this.bootstrapInfo = GeyserImpl.getInstance().getBootstrap().getDumpInfo(); this.bootstrapInfo = geyser.getBootstrap().getDumpInfo();
this.flagsInfo = new FlagsInfo(); this.flagsInfo = new FlagsInfo();
@ -244,10 +248,10 @@ public class DumpInfo {
public static class LogsInfo { public static class LogsInfo {
private String link; private String link;
public LogsInfo() { public LogsInfo(GeyserImpl geyser) {
try { try {
Map<String, String> fields = new HashMap<>(); Map<String, String> fields = new HashMap<>();
fields.put("content", FileUtils.readAllLines(GeyserImpl.getInstance().getBootstrap().getLogsPath()).collect(Collectors.joining("\n"))); fields.put("content", FileUtils.readAllLines(geyser.getBootstrap().getLogsPath()).collect(Collectors.joining("\n")));
JsonNode logData = GeyserImpl.JSON_MAPPER.readTree(WebUtils.postForm("https://api.mclo.gs/1/log", fields)); JsonNode logData = GeyserImpl.JSON_MAPPER.readTree(WebUtils.postForm("https://api.mclo.gs/1/log", fields));

Datei anzeigen

@ -150,7 +150,7 @@ public class GeyserLocale {
} else { } else {
if (!validLocalLanguage) { if (!validLocalLanguage) {
// Don't warn on missing locales if a local file has been found // Don't warn on missing locales if a local file has been found
bootstrap.getGeyserLogger().warning("Missing locale: " + locale); bootstrap.getGeyserLogger().debug("Missing locale: " + locale);
} }
} }

Datei anzeigen

@ -76,6 +76,9 @@ public class JavaCommandsTranslator extends PacketTranslator<ClientboundCommands
@Override @Override
public int hashCode(BedrockCommandInfo o) { public int hashCode(BedrockCommandInfo o) {
int paramHash = Arrays.deepHashCode(o.paramData()); int paramHash = Arrays.deepHashCode(o.paramData());
if ("help".equals(o.name())) {
paramHash = 31 * paramHash + 1;
}
return 31 * paramHash + o.description().hashCode(); return 31 * paramHash + o.description().hashCode();
} }
@ -83,6 +86,11 @@ public class JavaCommandsTranslator extends PacketTranslator<ClientboundCommands
public boolean equals(BedrockCommandInfo a, BedrockCommandInfo b) { public boolean equals(BedrockCommandInfo a, BedrockCommandInfo b) {
if (a == b) return true; if (a == b) return true;
if (a == null || b == null) return false; if (a == null || b == null) return false;
if ("help".equals(a.name()) && !"help".equals(b.name())) {
// Merging this causes Bedrock to fallback to its own help command
// https://github.com/GeyserMC/Geyser/issues/2573
return false;
}
if (!a.description().equals(b.description())) return false; if (!a.description().equals(b.description())) return false;
if (a.paramData().length != b.paramData().length) return false; if (a.paramData().length != b.paramData().length) return false;
for (int i = 0; i < a.paramData().length; i++) { for (int i = 0; i < a.paramData().length; i++) {

@ -1 +1 @@
Subproject commit 60b20023a92f084aba895ab0336e70fa7fb311fb Subproject commit 7499daf712ad6de70a07fba471b51b4ad92315c5

Datei anzeigen

@ -12,7 +12,7 @@ gson = "2.3.1" # Provided by Spigot 1.8.8
websocket = "1.5.1" websocket = "1.5.1"
protocol = "3.0.0.Beta2-20240704.153116-14" protocol = "3.0.0.Beta2-20240704.153116-14"
raknet = "1.0.0.CR3-20240416.144209-1" raknet = "1.0.0.CR3-20240416.144209-1"
minecraftauth = "4.1.0" minecraftauth = "4.1.1-20240806.235051-7"
mcprotocollib = "1.21-20240725.013034-16" mcprotocollib = "1.21-20240725.013034-16"
adventure = "4.14.0" adventure = "4.14.0"
adventure-platform = "4.3.0" adventure-platform = "4.3.0"
@ -30,13 +30,13 @@ cloud-minecraft-modded = "2.0.0-beta.7"
commodore = "2.2" commodore = "2.2"
bungeecord = "a7c6ede" bungeecord = "a7c6ede"
velocity = "3.3.0-SNAPSHOT" velocity = "3.3.0-SNAPSHOT"
viaproxy = "3.2.1" viaproxy = "3.3.2-SNAPSHOT"
fabric-loader = "0.15.11" fabric-loader = "0.15.11"
fabric-api = "0.100.1+1.21" fabric-api = "0.100.1+1.21"
neoforge-minecraft = "21.0.0-beta" neoforge-minecraft = "21.1.1"
mixin = "0.8.5" mixin = "0.8.5"
mixinextras = "0.3.5" mixinextras = "0.3.5"
minecraft = "1.21" minecraft = "1.21.1"
# plugin versions # plugin versions
indra = "3.1.3" indra = "3.1.3"

Datei anzeigen

@ -2,52 +2,6 @@
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
dependencyResolutionManagement {
repositories {
// mavenLocal()
// Floodgate, Cumulus etc.
maven("https://repo.opencollab.dev/main")
// Paper, Velocity
maven("https://repo.papermc.io/repository/maven-public")
// Spigot
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots") {
mavenContent { snapshotsOnly() }
}
// BungeeCord
maven("https://oss.sonatype.org/content/repositories/snapshots") {
mavenContent { snapshotsOnly() }
}
// NeoForge
maven("https://maven.neoforged.net/releases") {
mavenContent { releasesOnly() }
}
// Minecraft
maven("https://libraries.minecraft.net") {
name = "minecraft"
mavenContent { releasesOnly() }
}
mavenCentral()
// ViaVersion
maven("https://repo.viaversion.com") {
name = "viaversion"
}
maven("https://jitpack.io") {
content { includeGroupByRegex("com\\.github\\..*") }
}
// For Adventure snapshots
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
}
}
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()