diff --git a/build.gradle.kts b/build.gradle.kts
index 5151f9692..5c7ba5223 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -14,10 +14,8 @@ val main = setOf(
projects.viaversionCommon,
projects.viaversionApi,
projects.viaversionBukkit,
- projects.viaversionBungee,
- projects.viaversionFabric,
- projects.viaversionSponge,
- projects.viaversionVelocity
+ projects.viaversionVelocity,
+ projects.viaversionFabric
).map { it.dependencyProject }
// val special = setOf().map { it.dependencyProject }
diff --git a/bungee/build.gradle.kts b/bungee/build.gradle.kts
deleted file mode 100644
index f90c5b32f..000000000
--- a/bungee/build.gradle.kts
+++ /dev/null
@@ -1,6 +0,0 @@
-dependencies {
- compileOnlyApi(projects.viaversionCommon)
- compileOnly(libs.bungee)
-}
-
-publishShadowJar()
diff --git a/bungee/src/main/java/com/viaversion/viaversion/BungeePlugin.java b/bungee/src/main/java/com/viaversion/viaversion/BungeePlugin.java
deleted file mode 100644
index 05d0675d3..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/BungeePlugin.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion;
-
-import com.google.common.collect.ImmutableList;
-import com.google.gson.JsonObject;
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.ViaAPI;
-import com.viaversion.viaversion.api.command.ViaCommandSender;
-import com.viaversion.viaversion.api.platform.PlatformTask;
-import com.viaversion.viaversion.api.platform.UnsupportedSoftware;
-import com.viaversion.viaversion.api.platform.ViaServerProxyPlatform;
-import com.viaversion.viaversion.bungee.commands.BungeeCommand;
-import com.viaversion.viaversion.bungee.commands.BungeeCommandHandler;
-import com.viaversion.viaversion.bungee.commands.BungeeCommandSender;
-import com.viaversion.viaversion.bungee.platform.BungeeViaAPI;
-import com.viaversion.viaversion.bungee.platform.BungeeViaConfig;
-import com.viaversion.viaversion.bungee.platform.BungeeViaInjector;
-import com.viaversion.viaversion.bungee.platform.BungeeViaLoader;
-import com.viaversion.viaversion.bungee.platform.BungeeViaTask;
-import com.viaversion.viaversion.bungee.service.ProtocolDetectorService;
-import com.viaversion.viaversion.dump.PluginInfo;
-import com.viaversion.viaversion.unsupported.UnsupportedServerSoftware;
-import com.viaversion.viaversion.util.GsonUtil;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.plugin.Listener;
-import net.md_5.bungee.api.plugin.Plugin;
-import net.md_5.bungee.protocol.ProtocolConstants;
-
-public class BungeePlugin extends Plugin implements ViaServerProxyPlatform, Listener {
- private final ProtocolDetectorService protocolDetectorService = new ProtocolDetectorService();
- private BungeeViaAPI api;
- private BungeeViaConfig config;
-
- @Override
- public void onLoad() {
- try {
- ProtocolConstants.class.getField("MINECRAFT_1_20_5");
- } catch (NoSuchFieldException e) {
- getLogger().warning(" / \\");
- getLogger().warning(" / \\");
- getLogger().warning(" / | \\");
- getLogger().warning(" / | \\ BUNGEECORD IS OUTDATED");
- getLogger().warning(" / \\ VIAVERSION MAY NOT WORK AS INTENDED");
- getLogger().warning(" / o \\");
- getLogger().warning("/_____________\\");
- }
-
- getLogger().warning("ViaVersion does not work as intended across many different server versions, especially the more recent ones. " +
- "Consider moving Via plugins to your backend server or switching to Velocity.");
-
- api = new BungeeViaAPI();
- config = new BungeeViaConfig(getDataFolder(), getLogger());
- BungeeCommandHandler commandHandler = new BungeeCommandHandler();
- ProxyServer.getInstance().getPluginManager().registerCommand(this, new BungeeCommand(commandHandler));
-
- // Init platform
- Via.init(ViaManagerImpl.builder()
- .platform(this)
- .injector(new BungeeViaInjector())
- .loader(new BungeeViaLoader(this))
- .commandHandler(commandHandler)
- .build());
-
- config.reload();
- }
-
- @Override
- public void onEnable() {
- final ViaManagerImpl manager = (ViaManagerImpl) Via.getManager();
- manager.init();
- manager.onServerLoaded();
- }
-
- @Override
- public String getPlatformName() {
- return getProxy().getName();
- }
-
- @Override
- public String getPlatformVersion() {
- return getProxy().getVersion();
- }
-
- @Override
- public boolean isProxy() {
- return true;
- }
-
- @Override
- public String getPluginVersion() {
- return getDescription().getVersion();
- }
-
- @Override
- public PlatformTask runAsync(Runnable runnable) {
- return new BungeeViaTask(getProxy().getScheduler().runAsync(this, runnable));
- }
-
- @Override
- public PlatformTask runRepeatingAsync(final Runnable runnable, final long ticks) {
- return new BungeeViaTask(getProxy().getScheduler().schedule(this, runnable, 0, ticks * 50, TimeUnit.MILLISECONDS));
- }
-
- @Override
- public PlatformTask runSync(Runnable runnable) {
- return runAsync(runnable);
- }
-
- @Override
- public PlatformTask runSync(Runnable runnable, long delay) {
- return new BungeeViaTask(getProxy().getScheduler().schedule(this, runnable, delay * 50, TimeUnit.MILLISECONDS));
- }
-
- @Override
- public PlatformTask runRepeatingSync(Runnable runnable, long period) {
- return runRepeatingAsync(runnable, period);
- }
-
- @Override
- public ViaCommandSender[] getOnlinePlayers() {
- Collection players = getProxy().getPlayers();
- ViaCommandSender[] array = new ViaCommandSender[players.size()];
- int i = 0;
- for (ProxiedPlayer player : players) {
- array[i++] = new BungeeCommandSender(player);
- }
- return array;
- }
-
- @Override
- public void sendMessage(UUID uuid, String message) {
- getProxy().getPlayer(uuid).sendMessage(message);
- }
-
- @Override
- public boolean kickPlayer(UUID uuid, String message) {
- ProxiedPlayer player = getProxy().getPlayer(uuid);
- if (player != null) {
- player.disconnect(message);
- return true;
- }
- return false;
- }
-
- @Override
- public boolean isPluginEnabled() {
- return true;
- }
-
- @Override
- public ViaAPI getApi() {
- return api;
- }
-
- @Override
- public BungeeViaConfig getConf() {
- return config;
- }
-
- @Override
- public void onReload() {
- // Injector prints a message <3
- }
-
- @Override
- public JsonObject getDump() {
- JsonObject platformSpecific = new JsonObject();
-
- List plugins = new ArrayList<>();
- for (Plugin p : ProxyServer.getInstance().getPluginManager().getPlugins())
- plugins.add(new PluginInfo(
- true,
- p.getDescription().getName(),
- p.getDescription().getVersion(),
- p.getDescription().getMain(),
- Collections.singletonList(p.getDescription().getAuthor())
- ));
-
- platformSpecific.add("plugins", GsonUtil.getGson().toJsonTree(plugins));
- platformSpecific.add("servers", GsonUtil.getGson().toJsonTree(protocolDetectorService.detectedProtocolVersions()));
- return platformSpecific;
- }
-
- @Override
- public Collection getUnsupportedSoftwareClasses() {
- final Collection list = new ArrayList<>(ViaServerProxyPlatform.super.getUnsupportedSoftwareClasses());
- list.add(new UnsupportedServerSoftware.Builder()
- .name("FlameCord")
- .addClassName("dev._2lstudios.flamecord.FlameCord")
- .reason(UnsupportedServerSoftware.Reason.BREAKING_PROXY_SOFTWARE)
- .build());
- return ImmutableList.copyOf(list);
- }
-
- @Override
- public boolean hasPlugin(final String name) {
- return getProxy().getPluginManager().getPlugin(name) != null;
- }
-
- @Override
- public ProtocolDetectorService protocolDetectorService() {
- return protocolDetectorService;
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommand.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommand.java
deleted file mode 100644
index 8548fb6a1..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommand.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.commands;
-
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.plugin.Command;
-import net.md_5.bungee.api.plugin.TabExecutor;
-
-public class BungeeCommand extends Command implements TabExecutor {
- private final BungeeCommandHandler handler;
-
- public BungeeCommand(BungeeCommandHandler handler) {
- super("viaversion", "viaversion.command", "viaver", "vvbungee"); // The permission is also referenced here to filter root suggestions (/via)
- this.handler = handler;
- }
-
- @Override
- public void execute(CommandSender commandSender, String[] strings) {
- handler.onCommand(new BungeeCommandSender(commandSender), strings);
- }
-
- @Override
- public Iterable onTabComplete(CommandSender commandSender, String[] strings) {
- return handler.onTabComplete(new BungeeCommandSender(commandSender), strings);
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandHandler.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandHandler.java
deleted file mode 100644
index 7a2b2a3e3..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.commands;
-
-import com.viaversion.viaversion.bungee.commands.subs.ProbeSubCmd;
-import com.viaversion.viaversion.commands.ViaCommandHandler;
-
-public class BungeeCommandHandler extends ViaCommandHandler {
-
- public BungeeCommandHandler() {
- registerSubCommand(new ProbeSubCmd());
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandSender.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandSender.java
deleted file mode 100644
index a3abe64ed..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandSender.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.commands;
-
-import com.viaversion.viaversion.api.command.ViaCommandSender;
-import java.util.UUID;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-
-public record BungeeCommandSender(CommandSender sender) implements ViaCommandSender {
-
- @Override
- public boolean hasPermission(String permission) {
- return sender.hasPermission(permission);
- }
-
- @Override
- public void sendMessage(String msg) {
- sender.sendMessage(msg);
- }
-
- @Override
- public UUID getUUID() {
- if (sender instanceof ProxiedPlayer player) {
- return player.getUniqueId();
- } else {
- return new UUID(0, 0);
- }
- }
-
- @Override
- public String getName() {
- return sender.getName();
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/subs/ProbeSubCmd.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/subs/ProbeSubCmd.java
deleted file mode 100644
index adbb352f6..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/subs/ProbeSubCmd.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.commands.subs;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.command.ViaCommandSender;
-import com.viaversion.viaversion.api.command.ViaSubCommand;
-import com.viaversion.viaversion.bungee.platform.BungeeViaConfig;
-
-public class ProbeSubCmd implements ViaSubCommand {
- @Override
- public String name() {
- return "probe";
- }
-
- @Override
- public String description() {
- return "Forces ViaVersion to scan server protocol versions " +
- (((BungeeViaConfig) Via.getConfig()).getBungeePingInterval() == -1 ?
- "" : "(Also happens at an interval)");
- }
-
- @Override
- public boolean execute(ViaCommandSender sender, String[] args) {
- Via.proxyPlatform().protocolDetectorService().probeAllServers();
- sendMessage(sender, "&6Started searching for protocol versions");
- return true;
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeChannelInitializer.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeChannelInitializer.java
deleted file mode 100644
index bd4efb6d9..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeChannelInitializer.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.handlers;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.connection.UserConnectionImpl;
-import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelInitializer;
-import java.lang.reflect.Method;
-import java.util.logging.Level;
-
-public class BungeeChannelInitializer extends ChannelInitializer {
- private final ChannelInitializer original;
- private Method method;
-
- public BungeeChannelInitializer(ChannelInitializer oldInit) {
- this.original = oldInit;
- try {
- this.method = ChannelInitializer.class.getDeclaredMethod("initChannel", Channel.class);
- this.method.setAccessible(true);
- } catch (NoSuchMethodException e) {
- Via.getPlatform().getLogger().log(Level.WARNING, "Failed to get initChannel method", e);
- }
- }
-
- @Override
- protected void initChannel(Channel socketChannel) throws Exception {
- if (!socketChannel.isActive()) {
- return;
- }
-
- UserConnection info = new UserConnectionImpl(socketChannel);
- // init protocol
- new ProtocolPipelineImpl(info);
- // Add originals
- this.method.invoke(this.original, socketChannel);
-
- if (!socketChannel.isActive()) return; // Don't inject if inactive
- if (socketChannel.pipeline().get("packet-encoder") == null) return; // Don't inject if no packet-encoder
- if (socketChannel.pipeline().get("packet-decoder") == null) return; // Don't inject if no packet-decoder
- // Add our transformers
- BungeeEncodeHandler encoder = new BungeeEncodeHandler(info);
- BungeeDecodeHandler decoder = new BungeeDecodeHandler(info);
-
- socketChannel.pipeline().addBefore("packet-encoder", "via-encoder", encoder);
- socketChannel.pipeline().addBefore("packet-decoder", "via-decoder", decoder);
- }
-
- public ChannelInitializer getOriginal() {
- return original;
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeDecodeHandler.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeDecodeHandler.java
deleted file mode 100644
index a7d25cc6f..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeDecodeHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.handlers;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.exception.CancelCodecException;
-import com.viaversion.viaversion.exception.CancelDecoderException;
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import java.util.List;
-
-@ChannelHandler.Sharable
-public class BungeeDecodeHandler extends MessageToMessageDecoder {
- private final UserConnection info;
-
- public BungeeDecodeHandler(UserConnection info) {
- this.info = info;
- }
-
- @Override
- protected void decode(final ChannelHandlerContext ctx, ByteBuf bytebuf, List out) throws Exception {
- if (!ctx.channel().isActive()) {
- throw CancelDecoderException.generate(null);
- }
-
- if (!info.checkServerboundPacket()) throw CancelDecoderException.generate(null);
- if (!info.shouldTransformPacket()) {
- out.add(bytebuf.retain());
- return;
- }
-
- ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf);
- try {
- info.transformServerbound(transformedBuf, CancelDecoderException::generate);
- out.add(transformedBuf.retain());
- } finally {
- transformedBuf.release();
- }
- }
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- if (cause instanceof CancelCodecException) return;
- super.exceptionCaught(ctx, cause);
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeEncodeHandler.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeEncodeHandler.java
deleted file mode 100644
index 8dcfc1863..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeEncodeHandler.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.handlers;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.bungee.util.BungeePipelineUtil;
-import com.viaversion.viaversion.exception.CancelCodecException;
-import com.viaversion.viaversion.exception.CancelEncoderException;
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.MessageToMessageEncoder;
-import java.util.List;
-
-@ChannelHandler.Sharable
-public class BungeeEncodeHandler extends MessageToMessageEncoder {
- private final UserConnection info;
- private boolean handledCompression;
-
- public BungeeEncodeHandler(UserConnection info) {
- this.info = info;
- }
-
- @Override
- protected void encode(final ChannelHandlerContext ctx, ByteBuf bytebuf, List out) throws Exception {
- if (!ctx.channel().isActive()) {
- throw CancelEncoderException.generate(null);
- }
-
- if (!info.checkClientboundPacket()) throw CancelEncoderException.generate(null);
- if (!info.shouldTransformPacket()) {
- out.add(bytebuf.retain());
- return;
- }
-
- ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf);
- try {
- boolean needsCompress = handleCompressionOrder(ctx, transformedBuf);
- info.transformClientbound(transformedBuf, CancelEncoderException::generate);
-
- if (needsCompress) {
- recompress(ctx, transformedBuf);
- }
-
- out.add(transformedBuf.retain());
- } finally {
- transformedBuf.release();
- }
- }
-
- private boolean handleCompressionOrder(ChannelHandlerContext ctx, ByteBuf buf) {
- boolean needsCompress = false;
- if (!handledCompression && ctx.pipeline().names().indexOf("compress") > ctx.pipeline().names().indexOf("via-encoder")) {
- // Need to decompress this packet due to bad order
- ByteBuf decompressed = BungeePipelineUtil.decompress(ctx, buf);
-
- // Ensure the buffer wasn't reused
- if (buf != decompressed) {
- try {
- buf.clear().writeBytes(decompressed);
- } finally {
- decompressed.release();
- }
- }
-
- // Reorder the pipeline
- ChannelHandler decoder = ctx.pipeline().get("via-decoder");
- ChannelHandler encoder = ctx.pipeline().get("via-encoder");
- ctx.pipeline().remove(decoder);
- ctx.pipeline().remove(encoder);
- ctx.pipeline().addAfter("decompress", "via-decoder", decoder);
- ctx.pipeline().addAfter("compress", "via-encoder", encoder);
- needsCompress = true;
- handledCompression = true;
- }
- return needsCompress;
- }
-
- private void recompress(ChannelHandlerContext ctx, ByteBuf buf) {
- ByteBuf compressed = BungeePipelineUtil.compress(ctx, buf);
- try {
- buf.clear().writeBytes(compressed);
- } finally {
- compressed.release();
- }
- }
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- if (cause instanceof CancelCodecException) return;
- super.exceptionCaught(ctx, cause);
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeServerHandler.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeServerHandler.java
deleted file mode 100644
index fc3cd7d20..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeServerHandler.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.handlers;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.connection.ProtocolInfo;
-import com.viaversion.viaversion.api.connection.StorableObject;
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.data.entity.ClientEntityIdChangeListener;
-import com.viaversion.viaversion.api.data.entity.EntityTracker;
-import com.viaversion.viaversion.api.protocol.ProtocolPathEntry;
-import com.viaversion.viaversion.api.protocol.ProtocolPipeline;
-import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.api.type.Types;
-import com.viaversion.viaversion.bungee.storage.BungeeStorage;
-import com.viaversion.viaversion.protocols.v1_12_2to1_13.rewriter.ItemPacketRewriter1_13;
-import com.viaversion.viaversion.protocols.v1_8to1_9.Protocol1_8To1_9;
-import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ClientboundPackets1_9;
-import com.viaversion.viaversion.protocols.v1_8to1_9.provider.EntityIdProvider;
-import com.viaversion.viaversion.protocols.v1_8to1_9.storage.EntityTracker1_9;
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-import java.util.logging.Level;
-import java.util.stream.Collectors;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.connection.Server;
-import net.md_5.bungee.api.event.ServerConnectEvent;
-import net.md_5.bungee.api.event.ServerConnectedEvent;
-import net.md_5.bungee.api.event.ServerSwitchEvent;
-import net.md_5.bungee.api.plugin.Listener;
-import net.md_5.bungee.api.score.Team;
-import net.md_5.bungee.event.EventHandler;
-import net.md_5.bungee.protocol.packet.Handshake;
-import net.md_5.bungee.protocol.packet.PluginMessage;
-
-// All of this is madness
-public class BungeeServerHandler implements Listener {
- private static final MethodHandle GET_HANDSHAKE;
- private static final MethodHandle GET_REGISTERED_CHANNELS;
- private static final MethodHandle GET_BRAND_MESSAGE;
- private static final MethodHandle GET_ENTITY_MAP;
- private static final MethodHandle SET_VERSION;
- private static final MethodHandle SET_ENTITY_REWRITE;
- private static final MethodHandle GET_CHANNEL_WRAPPER;
-
- static {
- try {
- final MethodHandles.Lookup lookup = MethodHandles.lookup();
- final Class> initialHandlerClass = Class.forName("net.md_5.bungee.connection.InitialHandler");
- GET_HANDSHAKE = lookup.findVirtual(initialHandlerClass, "getHandshake", MethodType.methodType(Handshake.class));
- GET_REGISTERED_CHANNELS = lookup.findVirtual(initialHandlerClass, "getRegisteredChannels", MethodType.methodType(Set.class));
- GET_BRAND_MESSAGE = lookup.findVirtual(initialHandlerClass, "getBrandMessage", MethodType.methodType(PluginMessage.class));
-
- final Class> entityMapClass = Class.forName("net.md_5.bungee.entitymap.EntityMap");
- final Class> channelWrapperClass = Class.forName("net.md_5.bungee.netty.ChannelWrapper");
- GET_ENTITY_MAP = lookup.findStatic(entityMapClass, "getEntityMap", MethodType.methodType(entityMapClass, int.class));
- SET_VERSION = lookup.findVirtual(channelWrapperClass, "setVersion", MethodType.methodType(void.class, int.class));
-
- final Class> userConnectionClass = Class.forName("net.md_5.bungee.UserConnection");
- final MethodHandles.Lookup privateLookup = MethodHandles.privateLookupIn(userConnectionClass, lookup);
- GET_CHANNEL_WRAPPER = privateLookup.findGetter(userConnectionClass, "ch", channelWrapperClass);
- SET_ENTITY_REWRITE = privateLookup.findSetter(userConnectionClass, "entityRewrite", entityMapClass);
- } catch (final ReflectiveOperationException e) {
- Via.getPlatform().getLogger().severe("Error initializing BungeeServerHandler, try updating BungeeCord or ViaVersion!");
- throw new RuntimeException(e);
- }
- }
-
- // Set the handshake version every time someone connects to any server
- @EventHandler(priority = 120)
- public void onServerConnect(ServerConnectEvent event) {
- if (event.isCancelled()) {
- return;
- }
-
- UserConnection user = Via.getManager().getConnectionManager().getConnectedClient(event.getPlayer().getUniqueId());
- if (user == null) {
- return;
- }
-
- if (!user.has(BungeeStorage.class)) {
- user.put(new BungeeStorage(event.getPlayer()));
- }
-
- ProtocolVersion serverProtocolVersion = Via.proxyPlatform().protocolDetectorService().serverProtocolVersion(event.getTarget().getName());
- ProtocolVersion clientProtocolVersion = user.getProtocolInfo().protocolVersion();
- List protocols = Via.getManager().getProtocolManager().getProtocolPath(clientProtocolVersion, serverProtocolVersion);
-
- // Check if ViaVersion can support that version
- try {
- Handshake handshake = (Handshake) GET_HANDSHAKE.invoke(event.getPlayer().getPendingConnection());
- handshake.setProtocolVersion(protocols == null ? clientProtocolVersion.getVersion() : serverProtocolVersion.getVersion());
- } catch (Throwable e) {
- Via.getPlatform().getLogger().log(Level.SEVERE, "Error setting handshake version", e);
- }
- }
-
- @EventHandler(priority = -120)
- public void onServerConnected(ServerConnectedEvent event) {
- try {
- checkServerChange(event, Via.getManager().getConnectionManager().getConnectedClient(event.getPlayer().getUniqueId()));
- } catch (Throwable e) {
- Via.getPlatform().getLogger().log(Level.SEVERE, "Failed to handle server switch", e);
- }
- }
-
- @EventHandler(priority = -120)
- public void onServerSwitch(ServerSwitchEvent event) {
- // Update entity id
- UserConnection userConnection = Via.getManager().getConnectionManager().getConnectedClient(event.getPlayer().getUniqueId());
- if (userConnection == null) {
- return;
- }
-
- int playerId;
- try {
- playerId = Via.getManager().getProviders().get(EntityIdProvider.class).getEntityId(userConnection);
- } catch (Exception ignored) {
- return;
- }
-
- for (EntityTracker tracker : userConnection.getEntityTrackers()) {
- tracker.setClientEntityId(playerId);
- }
-
- // For ViaRewind
- for (StorableObject object : userConnection.getStoredObjects().values()) {
- if (object instanceof ClientEntityIdChangeListener listener) {
- listener.setClientEntityId(playerId);
- }
- }
- }
-
- public void checkServerChange(ServerConnectedEvent event, UserConnection user) throws Throwable {
- if (user == null) {
- return;
- }
-
- BungeeStorage storage = user.get(BungeeStorage.class);
- if (storage == null) {
- return;
- }
-
- Server server = event.getServer();
- if (server == null || server.getInfo().getName().equals(storage.getCurrentServer())) {
- return;
- }
-
-
- // Clear auto-team
- EntityTracker1_9 oldEntityTracker = user.getEntityTracker(Protocol1_8To1_9.class);
- if (oldEntityTracker != null && oldEntityTracker.isAutoTeam() && oldEntityTracker.isTeamExists()) {
- oldEntityTracker.sendTeamPacket(false, true);
- }
-
- String serverName = server.getInfo().getName();
- storage.setCurrentServer(serverName);
- ProtocolVersion serverProtocolVersion = Via.proxyPlatform().protocolDetectorService().serverProtocolVersion(serverName);
- if (serverProtocolVersion.olderThanOrEqualTo(ProtocolVersion.v1_8) && storage.getBossbar() != null) { // 1.8 doesn't have BossBar packet
- // This ensures we can encode it properly as only the 1.9 protocol is currently implemented.
- if (user.getProtocolInfo().getPipeline().contains(Protocol1_8To1_9.class)) {
- for (UUID uuid : storage.getBossbar()) {
- PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_9.BOSS_EVENT, null, user);
- wrapper.write(Types.UUID, uuid);
- wrapper.write(Types.VAR_INT, 1); // remove
- wrapper.send(Protocol1_8To1_9.class);
- }
- }
- storage.getBossbar().clear();
- }
-
- ProtocolInfo info = user.getProtocolInfo();
- ProtocolVersion previousServerProtocol = info.serverProtocolVersion();
-
- // Refresh the pipes
- List protocolPath = Via.getManager().getProtocolManager().getProtocolPath(info.protocolVersion(), serverProtocolVersion);
- ProtocolPipeline pipeline = user.getProtocolInfo().getPipeline();
- user.clearStoredObjects(true);
- pipeline.cleanPipes();
- if (protocolPath != null) {
- info.setServerProtocolVersion(serverProtocolVersion);
- pipeline.add(protocolPath.stream().map(ProtocolPathEntry::protocol).collect(Collectors.toList()));
- } else {
- // TODO Check Bungee Supported Protocols? *shrugs*
- serverProtocolVersion = info.protocolVersion();
- info.setServerProtocolVersion(serverProtocolVersion);
- }
-
- // Add version-specific base Protocol
- pipeline.add(Via.getManager().getProtocolManager().getBaseProtocol(serverProtocolVersion));
-
- // Workaround 1.13 server change
- boolean toNewId = previousServerProtocol.olderThan(ProtocolVersion.v1_13) && serverProtocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_13);
- boolean toOldId = previousServerProtocol.newerThanOrEqualTo(ProtocolVersion.v1_13) && serverProtocolVersion.olderThan(ProtocolVersion.v1_13);
- if (previousServerProtocol.isKnown() && (toNewId || toOldId)) {
- Collection registeredChannels = (Collection) GET_REGISTERED_CHANNELS.invoke(event.getPlayer().getPendingConnection());
- if (!registeredChannels.isEmpty()) {
- Collection newChannels = new HashSet<>();
- for (Iterator iterator = registeredChannels.iterator(); iterator.hasNext(); ) {
- String channel = iterator.next();
- String oldChannel = channel;
- if (toNewId) {
- channel = ItemPacketRewriter1_13.getNewPluginChannelId(channel);
- } else {
- channel = ItemPacketRewriter1_13.getOldPluginChannelId(channel);
- }
- if (channel == null) {
- iterator.remove();
- continue;
- }
- if (!oldChannel.equals(channel)) {
- iterator.remove();
- newChannels.add(channel);
- }
- }
- registeredChannels.addAll(newChannels);
- }
-
- PluginMessage brandMessage = (PluginMessage) GET_BRAND_MESSAGE.invoke(event.getPlayer().getPendingConnection());
- if (brandMessage != null) {
- String channel = brandMessage.getTag();
- if (toNewId) {
- channel = ItemPacketRewriter1_13.getNewPluginChannelId(channel);
- } else {
- channel = ItemPacketRewriter1_13.getOldPluginChannelId(channel);
- }
- if (channel != null) {
- brandMessage.setTag(channel);
- }
- }
- }
-
- user.put(storage);
-
- user.setActive(protocolPath != null);
-
- ProxiedPlayer player = storage.getPlayer();
- EntityTracker1_9 newTracker = user.getEntityTracker(Protocol1_8To1_9.class);
- if (newTracker != null && Via.getConfig().isAutoTeam()) {
- String currentTeam = null;
- for (Team team : player.getScoreboard().getTeams()) {
- if (team.getPlayers().contains(info.getUsername())) {
- currentTeam = team.getName();
- }
- }
-
- // Reinitialize auto-team
- newTracker.setAutoTeam(true);
- if (currentTeam == null) {
- // Send auto-team as it was cleared above
- newTracker.sendTeamPacket(true, true);
- newTracker.setCurrentTeam("viaversion");
- } else {
- // Auto-team will be sent when bungee send remove packet
- newTracker.setAutoTeam(Via.getConfig().isAutoTeam());
- newTracker.setCurrentTeam(currentTeam);
- }
- }
-
- Object wrapper = GET_CHANNEL_WRAPPER.invoke(player);
- SET_VERSION.invoke(wrapper, serverProtocolVersion.getVersion());
-
- Object entityMap = GET_ENTITY_MAP.invoke(serverProtocolVersion.getVersion());
- SET_ENTITY_REWRITE.invoke(player, entityMap);
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/ElytraPatch.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/ElytraPatch.java
deleted file mode 100644
index 2308eb1b5..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/ElytraPatch.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.listeners;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
-import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_9;
-import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
-import com.viaversion.viaversion.api.type.Types;
-import com.viaversion.viaversion.api.type.types.version.Types1_9;
-import com.viaversion.viaversion.protocols.v1_8to1_9.Protocol1_8To1_9;
-import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ClientboundPackets1_9;
-import com.viaversion.viaversion.protocols.v1_8to1_9.storage.EntityTracker1_9;
-import java.util.Collections;
-import net.md_5.bungee.api.event.ServerConnectedEvent;
-import net.md_5.bungee.api.plugin.Listener;
-import net.md_5.bungee.event.EventHandler;
-import net.md_5.bungee.event.EventPriority;
-
-/*
- * This patches https://github.com/ViaVersion/ViaVersion/issues/555
- */
-public class ElytraPatch implements Listener {
-
- @EventHandler(priority = EventPriority.HIGH)
- public void onServerConnected(ServerConnectedEvent event) {
- UserConnection user = Via.getManager().getConnectionManager().getConnectedClient(event.getPlayer().getUniqueId());
- if (user == null) return;
-
- if (user.getProtocolInfo().getPipeline().contains(Protocol1_8To1_9.class)) {
- EntityTracker1_9 tracker = user.getEntityTracker(Protocol1_8To1_9.class);
- int entityId = tracker.getProvidedEntityId();
-
- PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_9.SET_ENTITY_DATA, null, user);
-
- wrapper.write(Types.VAR_INT, entityId);
- wrapper.write(Types1_9.ENTITY_DATA_LIST, Collections.singletonList(new EntityData(0, EntityDataTypes1_9.BYTE, (byte) 0)));
-
- wrapper.scheduleSend(Protocol1_8To1_9.class);
- }
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/UpdateListener.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/UpdateListener.java
deleted file mode 100644
index 9789e2f89..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/UpdateListener.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.listeners;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.update.UpdateUtil;
-import net.md_5.bungee.api.event.PostLoginEvent;
-import net.md_5.bungee.api.plugin.Listener;
-import net.md_5.bungee.event.EventHandler;
-
-public class UpdateListener implements Listener {
-
- @EventHandler
- public void onJoin(PostLoginEvent e) {
- if (e.getPlayer().hasPermission("viaversion.update")
- && Via.getConfig().isCheckForUpdates()) {
- UpdateUtil.sendUpdateMessage(e.getPlayer().getUniqueId());
- }
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaAPI.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaAPI.java
deleted file mode 100644
index ad31125e6..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaAPI.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.platform;
-
-import com.viaversion.viaversion.ViaAPIBase;
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.bungee.service.ProtocolDetectorService;
-import io.netty.buffer.ByteBuf;
-import net.md_5.bungee.api.config.ServerInfo;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-
-public class BungeeViaAPI extends ViaAPIBase {
-
- @Override
- public ProtocolVersion getPlayerProtocolVersion(ProxiedPlayer player) {
- return getPlayerProtocolVersion(player.getUniqueId());
- }
-
- @Override
- public void sendRawPacket(ProxiedPlayer player, ByteBuf packet) throws IllegalArgumentException {
- sendRawPacket(player.getUniqueId(), packet);
- }
-
- /**
- * Forces ViaVersion to probe a server
- *
- * @param serverInfo The serverinfo to probe
- */
- public void probeServer(ServerInfo serverInfo) {
- ((ProtocolDetectorService) Via.proxyPlatform().protocolDetectorService()).probeServer(serverInfo);
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaConfig.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaConfig.java
deleted file mode 100644
index 62cc15621..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaConfig.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.platform;
-
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.bungee.providers.BungeeVersionProvider;
-import com.viaversion.viaversion.configuration.AbstractViaConfig;
-import java.io.File;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-
-public class BungeeViaConfig extends AbstractViaConfig {
- private static final List UNSUPPORTED = Arrays.asList("nms-player-ticking", "item-cache", "quick-move-action-fix", "velocity-ping-interval", "velocity-ping-save", "velocity-servers", "blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox");
- private int bungeePingInterval;
- private boolean bungeePingSave;
- private Map bungeeServerProtocols;
-
- public BungeeViaConfig(File folder, Logger logger) {
- super(new File(folder, "config.yml"), logger);
- }
-
- @Override
- protected void loadFields() {
- super.loadFields();
- bungeePingInterval = getInt("bungee-ping-interval", 60);
- bungeePingSave = getBoolean("bungee-ping-save", true);
- bungeeServerProtocols = get("bungee-servers", new HashMap<>());
- }
-
- @Override
- protected void handleConfig(Map config) {
- // Parse servers
- Map servers;
- if (!(config.get("bungee-servers") instanceof Map)) {
- servers = new HashMap<>();
- } else {
- servers = (Map) config.get("bungee-servers");
- }
- // Convert any bad Protocol Ids
- for (Map.Entry entry : new HashSet<>(servers.entrySet())) {
- if (!(entry.getValue() instanceof Integer)) {
- if (entry.getValue() instanceof String stringValue) {
- ProtocolVersion found = ProtocolVersion.getClosest(stringValue);
- if (found != null) {
- servers.put(entry.getKey(), found.getVersion());
- } else {
- servers.remove(entry.getKey()); // Remove!
- }
- } else {
- servers.remove(entry.getKey()); // Remove!
- }
- }
- }
- // Ensure default exists
- if (!servers.containsKey("default")) {
- servers.put("default", BungeeVersionProvider.getLowestSupportedVersion().getVersion());
- }
- // Put back
- config.put("bungee-servers", servers);
- }
-
- @Override
- public List getUnsupportedOptions() {
- return UNSUPPORTED;
- }
-
- @Override
- public boolean isItemCache() {
- return false;
- }
-
- @Override
- public boolean isNMSPlayerTicking() {
- return false;
- }
-
- /**
- * What is the interval for checking servers via ping
- * -1 for disabled
- *
- * @return Ping interval in seconds
- */
- public int getBungeePingInterval() {
- return bungeePingInterval;
- }
-
- /**
- * Should the bungee ping be saved to the config on change.
- *
- * @return True if it should save
- */
- public boolean isBungeePingSave() {
- return bungeePingSave;
- }
-
- /**
- * Get the listed server protocols in the config.
- * default will be listed as default.
- *
- * @return Map of String, Integer
- */
- public Map getBungeeServerProtocols() {
- return bungeeServerProtocols;
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaInjector.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaInjector.java
deleted file mode 100644
index db009d84e..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaInjector.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.platform;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.platform.ViaInjector;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.bungee.handlers.BungeeChannelInitializer;
-import com.viaversion.viaversion.util.ReflectionUtil;
-import com.viaversion.viaversion.util.SetWrapper;
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelInitializer;
-import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.SortedSet;
-import net.md_5.bungee.api.ProxyServer;
-
-public class BungeeViaInjector implements ViaInjector {
-
- private static final Field LISTENERS_FIELD;
- private final List injectedChannels = new ArrayList<>();
-
- static {
- try {
- LISTENERS_FIELD = ProxyServer.getInstance().getClass().getDeclaredField("listeners");
- LISTENERS_FIELD.setAccessible(true);
- } catch (ReflectiveOperationException e) {
- throw new RuntimeException("Unable to access listeners field.", e);
- }
- }
-
- @Override
- public void inject() throws ReflectiveOperationException {
- Set listeners = (Set) LISTENERS_FIELD.get(ProxyServer.getInstance());
-
- // Iterate through current list
- for (Channel channel : listeners) {
- injectChannel(channel);
- }
-
- // Inject the list
- Set wrapper = new SetWrapper<>(listeners, channel -> {
- try {
- injectChannel(channel);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- });
-
- LISTENERS_FIELD.set(ProxyServer.getInstance(), wrapper);
- }
-
- @Override
- public void uninject() {
- Via.getPlatform().getLogger().severe("ViaVersion cannot remove itself from Bungee without a reboot!");
- }
-
- private void injectChannel(Channel channel) throws ReflectiveOperationException {
- List names = channel.pipeline().names();
- ChannelHandler bootstrapAcceptor = null;
-
- for (String name : names) {
- ChannelHandler handler = channel.pipeline().get(name);
- try {
- ReflectionUtil.get(handler, "childHandler", ChannelInitializer.class);
- bootstrapAcceptor = handler;
- } catch (Exception e) {
- // Not this one
- }
- }
-
- // Default to first
- if (bootstrapAcceptor == null) {
- bootstrapAcceptor = channel.pipeline().first();
- }
-
- if (bootstrapAcceptor.getClass().getName().equals("net.md_5.bungee.query.QueryHandler")) {
- return;
- }
-
- try {
- ChannelInitializer oldInit = ReflectionUtil.get(bootstrapAcceptor, "childHandler", ChannelInitializer.class);
- ChannelInitializer newInit = new BungeeChannelInitializer(oldInit);
-
- ReflectionUtil.set(bootstrapAcceptor, "childHandler", newInit);
- this.injectedChannels.add(channel);
- } catch (NoSuchFieldException ignored) {
- throw new RuntimeException("Unable to find core component 'childHandler', please check your plugins. issue: " + bootstrapAcceptor.getClass().getName());
- }
- }
-
- @Override
- public ProtocolVersion getServerProtocolVersion() throws ReflectiveOperationException {
- return ProtocolVersion.getProtocol(getBungeeSupportedVersions().get(0));
- }
-
- @Override
- public SortedSet getServerProtocolVersions() throws ReflectiveOperationException {
- final SortedSet versions = new ObjectLinkedOpenHashSet<>();
- for (final Integer version : getBungeeSupportedVersions()) {
- versions.add(ProtocolVersion.getProtocol(version));
- }
- return versions;
- }
-
- private List getBungeeSupportedVersions() throws ReflectiveOperationException {
- return ReflectionUtil.getStatic(Class.forName("net.md_5.bungee.protocol.ProtocolConstants"), "SUPPORTED_VERSION_IDS", List.class);
- }
-
- @Override
- public JsonObject getDump() {
- JsonObject data = new JsonObject();
-
- // Generate information about current injections
- JsonArray injectedChannelInitializers = new JsonArray();
- for (Channel channel : this.injectedChannels) {
- JsonObject channelInfo = new JsonObject();
- channelInfo.addProperty("channelClass", channel.getClass().getName());
-
- // Get information about the pipes for this channel
- JsonArray pipeline = new JsonArray();
- for (String pipeName : channel.pipeline().names()) {
- JsonObject handlerInfo = new JsonObject();
- handlerInfo.addProperty("name", pipeName);
-
- ChannelHandler channelHandler = channel.pipeline().get(pipeName);
- if (channelHandler == null) {
- handlerInfo.addProperty("status", "INVALID");
- continue;
- }
-
- handlerInfo.addProperty("class", channelHandler.getClass().getName());
-
- try {
- Object child = ReflectionUtil.get(channelHandler, "childHandler", ChannelInitializer.class);
- handlerInfo.addProperty("childClass", child.getClass().getName());
- if (child instanceof BungeeChannelInitializer bungeeChannelInitializer) {
- handlerInfo.addProperty("oldInit", bungeeChannelInitializer.getOriginal().getClass().getName());
- }
- } catch (ReflectiveOperationException e) {
- // Don't display
- }
-
- pipeline.add(handlerInfo);
- }
- channelInfo.add("pipeline", pipeline);
-
- injectedChannelInitializers.add(channelInfo);
- }
-
- data.add("injectedChannelInitializers", injectedChannelInitializers);
-
- try {
- Object list = LISTENERS_FIELD.get(ProxyServer.getInstance());
- data.addProperty("currentList", list.getClass().getName());
- if (list instanceof SetWrapper> wrapper) {
- data.addProperty("wrappedList", wrapper.originalSet().getClass().getName());
- }
- } catch (ReflectiveOperationException ignored) {
- // Ignored
- }
-
- return data;
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaLoader.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaLoader.java
deleted file mode 100644
index 7d952a8e5..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaLoader.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.platform;
-
-import com.viaversion.viaversion.BungeePlugin;
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.platform.ViaPlatformLoader;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.api.protocol.version.VersionProvider;
-import com.viaversion.viaversion.bungee.handlers.BungeeServerHandler;
-import com.viaversion.viaversion.bungee.listeners.ElytraPatch;
-import com.viaversion.viaversion.bungee.listeners.UpdateListener;
-import com.viaversion.viaversion.bungee.providers.BungeeBossBarProvider;
-import com.viaversion.viaversion.bungee.providers.BungeeEntityIdProvider;
-import com.viaversion.viaversion.bungee.providers.BungeeMainHandProvider;
-import com.viaversion.viaversion.bungee.providers.BungeeVersionProvider;
-import com.viaversion.viaversion.protocols.v1_8to1_9.provider.BossBarProvider;
-import com.viaversion.viaversion.protocols.v1_8to1_9.provider.EntityIdProvider;
-import com.viaversion.viaversion.protocols.v1_8to1_9.provider.MainHandProvider;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.plugin.Listener;
-import net.md_5.bungee.api.scheduler.ScheduledTask;
-
-public class BungeeViaLoader implements ViaPlatformLoader {
- private final Set listeners = new HashSet<>();
- private final Set tasks = new HashSet<>();
- private final BungeePlugin plugin;
-
- public BungeeViaLoader(BungeePlugin plugin) {
- this.plugin = plugin;
- }
-
- private void registerListener(Listener listener) {
- listeners.add(listener);
- ProxyServer.getInstance().getPluginManager().registerListener(plugin, listener);
- }
-
- @Override
- public void load() {
- // Listeners
- registerListener(plugin);
- registerListener(new UpdateListener());
- registerListener(new BungeeServerHandler());
-
- final ProtocolVersion protocolVersion = Via.getAPI().getServerVersion().lowestSupportedProtocolVersion();
- if (protocolVersion.olderThan(ProtocolVersion.v1_9)) {
- registerListener(new ElytraPatch());
- }
-
- // Providers
- Via.getManager().getProviders().use(VersionProvider.class, new BungeeVersionProvider());
- Via.getManager().getProviders().use(EntityIdProvider.class, new BungeeEntityIdProvider());
-
- if (protocolVersion.olderThan(ProtocolVersion.v1_9)) {
- Via.getManager().getProviders().use(BossBarProvider.class, new BungeeBossBarProvider());
- Via.getManager().getProviders().use(MainHandProvider.class, new BungeeMainHandProvider());
- }
-
- if (plugin.getConf().getBungeePingInterval() > 0) {
- tasks.add(plugin.getProxy().getScheduler().schedule(
- plugin,
- () -> Via.proxyPlatform().protocolDetectorService().probeAllServers(),
- 0, plugin.getConf().getBungeePingInterval(),
- TimeUnit.SECONDS
- ));
- }
- }
-
- @Override
- public void unload() {
- for (Listener listener : listeners) {
- ProxyServer.getInstance().getPluginManager().unregisterListener(listener);
- }
- listeners.clear();
- for (ScheduledTask task : tasks) {
- task.cancel();
- }
- tasks.clear();
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaTask.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaTask.java
deleted file mode 100644
index 7294c8110..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/platform/BungeeViaTask.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.platform;
-
-import com.viaversion.viaversion.api.platform.PlatformTask;
-import net.md_5.bungee.api.scheduler.ScheduledTask;
-
-public record BungeeViaTask(ScheduledTask task) implements PlatformTask {
-
- @Override
- public void cancel() {
- task.cancel();
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeBossBarProvider.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeBossBarProvider.java
deleted file mode 100644
index e185a46be..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeBossBarProvider.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.providers;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.bungee.storage.BungeeStorage;
-import com.viaversion.viaversion.protocols.v1_8to1_9.provider.BossBarProvider;
-import java.util.UUID;
-
-public class BungeeBossBarProvider extends BossBarProvider {
- @Override
- public void handleAdd(UserConnection user, UUID barUUID) {
- if (user.has(BungeeStorage.class)) {
- BungeeStorage storage = user.get(BungeeStorage.class);
- // Check if bossbars are supported by bungee, static maybe
- if (storage.getBossbar() != null) {
- storage.getBossbar().add(barUUID);
- }
- }
- }
-
- @Override
- public void handleRemove(UserConnection user, UUID barUUID) {
- if (user.has(BungeeStorage.class)) {
- BungeeStorage storage = user.get(BungeeStorage.class);
- if (storage.getBossbar() != null) {
- storage.getBossbar().remove(barUUID);
- }
- }
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeEntityIdProvider.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeEntityIdProvider.java
deleted file mode 100644
index 889b0e14f..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeEntityIdProvider.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.providers;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.bungee.storage.BungeeStorage;
-import com.viaversion.viaversion.protocols.v1_8to1_9.provider.EntityIdProvider;
-import java.lang.reflect.Method;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-
-public class BungeeEntityIdProvider extends EntityIdProvider {
- private static final Method GET_CLIENT_ENTITY_ID;
-
- static {
- try {
- GET_CLIENT_ENTITY_ID = Class.forName("net.md_5.bungee.UserConnection").getDeclaredMethod("getClientEntityId");
- } catch (NoSuchMethodException | ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public int getEntityId(UserConnection user) throws Exception {
- BungeeStorage storage = user.get(BungeeStorage.class);
- ProxiedPlayer player = storage.getPlayer();
-
- return (int) GET_CLIENT_ENTITY_ID.invoke(player);
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeMainHandProvider.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeMainHandProvider.java
deleted file mode 100644
index 9fc96338b..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeMainHandProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.providers;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.connection.ProtocolInfo;
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.protocols.v1_8to1_9.provider.MainHandProvider;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.logging.Level;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-
-/*
- This solves the wrong main hand issue when you join with BungeeCord on a 1.8 server, and switch to a 1.9 or higher.
- */
-public class BungeeMainHandProvider extends MainHandProvider {
- private static Method getSettings;
- private static Method setMainHand;
-
- static {
- try {
- getSettings = Class.forName("net.md_5.bungee.UserConnection").getDeclaredMethod("getSettings");
- setMainHand = Class.forName("net.md_5.bungee.protocol.packet.ClientSettings").getDeclaredMethod("setMainHand", int.class);
- } catch (Exception ignored) {
- }
- }
-
- @Override
- public void setMainHand(UserConnection user, int hand) {
- ProtocolInfo info = user.getProtocolInfo();
- if (info == null || info.getUuid() == null) return;
- ProxiedPlayer player = ProxyServer.getInstance().getPlayer(info.getUuid());
- if (player == null) return;
- try {
- Object settings = getSettings.invoke(player);
- if (settings != null) {
- setMainHand.invoke(settings, hand);
- }
- } catch (IllegalAccessException | InvocationTargetException e) {
- Via.getPlatform().getLogger().log(Level.WARNING, "Failed to set main hand for " + player.getName(), e);
- }
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeVersionProvider.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeVersionProvider.java
deleted file mode 100644
index c78e8d10a..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeVersionProvider.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.providers;
-
-import com.google.common.collect.Lists;
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.connection.ProtocolInfo;
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.protocol.version.BaseVersionProvider;
-import com.viaversion.viaversion.util.ReflectionUtil;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.protocol.ProtocolConstants;
-
-public class BungeeVersionProvider extends BaseVersionProvider {
-
- @Override
- public ProtocolVersion getClosestServerProtocol(UserConnection user) throws Exception {
- // TODO Have one constant list forever until restart? (Might limit plugins if they change this)
- List list = ReflectionUtil.getStatic(ProtocolConstants.class, "SUPPORTED_VERSION_IDS", List.class);
- List sorted = new ArrayList<>(list);
- Collections.sort(sorted);
-
- ProtocolInfo info = user.getProtocolInfo();
-
- // Bungee supports it
- final ProtocolVersion clientProtocolVersion = info.protocolVersion();
- if (new HashSet<>(sorted).contains(clientProtocolVersion.getVersion())) {
- return clientProtocolVersion;
- }
-
- // Older than bungee supports, get the lowest version
- if (clientProtocolVersion.getVersion() < sorted.get(0)) {
- return getLowestSupportedVersion();
- }
-
- // Loop through all protocols to get the closest protocol id that bungee supports (and that viaversion does too)
-
- // TODO: This needs a better fix, i.e checking ProtocolRegistry to see if it would work.
- // This is more of a workaround for snapshot support by bungee.
- for (Integer protocol : Lists.reverse(sorted)) {
- if (clientProtocolVersion.getVersion() > protocol && ProtocolVersion.isRegistered(protocol)) {
- return ProtocolVersion.getProtocol(protocol);
- }
- }
-
- Via.getPlatform().getLogger().severe("Panic, no protocol id found for " + clientProtocolVersion);
- return clientProtocolVersion;
- }
-
- public static ProtocolVersion getLowestSupportedVersion() {
- List list;
- try {
- list = ReflectionUtil.getStatic(ProtocolConstants.class, "SUPPORTED_VERSION_IDS", List.class);
- return ProtocolVersion.getProtocol(list.get(0));
- } catch (NoSuchFieldException | IllegalAccessException ignored) {
- // Fallback
- return ProtocolVersion.getProtocol(ProxyServer.getInstance().getProtocolVersion());
- }
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/service/ProtocolDetectorService.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/service/ProtocolDetectorService.java
deleted file mode 100644
index 30cc097a9..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/service/ProtocolDetectorService.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.service;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.bungee.platform.BungeeViaConfig;
-import com.viaversion.viaversion.bungee.providers.BungeeVersionProvider;
-import com.viaversion.viaversion.platform.AbstractProtocolDetectorService;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.config.ServerInfo;
-
-public final class ProtocolDetectorService extends AbstractProtocolDetectorService {
-
- public void probeServer(final ServerInfo serverInfo) {
- final String serverName = serverInfo.getName();
- serverInfo.ping((serverPing, throwable) -> {
- // Ensure protocol is positive, some services will return -1
- if (throwable != null || serverPing == null || serverPing.getVersion() == null || serverPing.getVersion().getProtocol() <= 0) {
- return;
- }
-
- final int oldProtocolVersion = serverProtocolVersion(serverName).getVersion();
- if (oldProtocolVersion == serverPing.getVersion().getProtocol()) {
- // Same value as previously
- return;
- }
-
- setProtocolVersion(serverName, serverPing.getVersion().getProtocol());
-
- final BungeeViaConfig config = (BungeeViaConfig) Via.getConfig();
- if (config.isBungeePingSave()) {
- final Map servers = config.getBungeeServerProtocols();
- final Integer protocol = servers.get(serverName);
- if (protocol != null && protocol == serverPing.getVersion().getProtocol()) {
- return;
- }
-
- // Ensure we're the only ones writing to the config
- synchronized (Via.getManager().getConfigurationProvider()) {
- servers.put(serverName, serverPing.getVersion().getProtocol());
- }
- config.save();
- }
- });
- }
-
- @Override
- public void probeAllServers() {
- final Collection servers = ProxyServer.getInstance().getServers().values();
- final Set serverNames = new HashSet<>(servers.size());
- for (final ServerInfo serverInfo : servers) {
- probeServer(serverInfo);
- serverNames.add(serverInfo.getName());
- }
-
- // Remove servers that aren't registered anymore
- lock.writeLock().lock();
- try {
- detectedProtocolIds.keySet().retainAll(serverNames);
- } finally {
- lock.writeLock().unlock();
- }
- }
-
- @Override
- protected Map configuredServers() {
- return ((BungeeViaConfig) Via.getConfig()).getBungeeServerProtocols();
- }
-
- @Override
- protected ProtocolVersion lowestSupportedProtocolVersion() {
- return BungeeVersionProvider.getLowestSupportedVersion();
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/storage/BungeeStorage.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/storage/BungeeStorage.java
deleted file mode 100644
index 54470223b..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/storage/BungeeStorage.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.storage;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.connection.StorableObject;
-import java.lang.reflect.Field;
-import java.util.Objects;
-import java.util.Set;
-import java.util.UUID;
-import java.util.logging.Level;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-
-public class BungeeStorage implements StorableObject {
- private static Field bossField;
-
- static {
- try {
- Class> user = Class.forName("net.md_5.bungee.UserConnection");
- bossField = user.getDeclaredField("sentBossBars");
- bossField.setAccessible(true);
- } catch (ClassNotFoundException e) {
- // Not supported *shrug* probably modified
- } catch (NoSuchFieldException e) {
- // Not supported, old version probably
- }
- }
-
- private final ProxiedPlayer player;
- private String currentServer;
- private Set bossbar;
-
- public BungeeStorage(ProxiedPlayer player) {
- this.player = player;
- this.currentServer = "";
-
- // Get bossbar list if it's supported
- if (bossField != null) {
- try {
- bossbar = (Set) bossField.get(player);
- } catch (IllegalAccessException e) {
- Via.getPlatform().getLogger().log(Level.WARNING, "Failed to get bossbar list", e);
- }
- }
- }
-
- public ProxiedPlayer getPlayer() {
- return player;
- }
-
- public String getCurrentServer() {
- return currentServer;
- }
-
- public void setCurrentServer(String currentServer) {
- this.currentServer = currentServer;
- }
-
- public Set getBossbar() {
- return bossbar;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- BungeeStorage that = (BungeeStorage) o;
- if (!Objects.equals(player, that.player)) return false;
- if (!Objects.equals(currentServer, that.currentServer)) return false;
- return Objects.equals(bossbar, that.bossbar);
- }
-
- @Override
- public int hashCode() {
- int result = player != null ? player.hashCode() : 0;
- result = 31 * result + (currentServer != null ? currentServer.hashCode() : 0);
- result = 31 * result + (bossbar != null ? bossbar.hashCode() : 0);
- return result;
- }
-}
diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/util/BungeePipelineUtil.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/util/BungeePipelineUtil.java
deleted file mode 100644
index 3288df7d2..000000000
--- a/bungee/src/main/java/com/viaversion/viaversion/bungee/util/BungeePipelineUtil.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.bungee.util;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.MessageToByteEncoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-public class BungeePipelineUtil {
- private static final Method DECODE_METHOD;
- private static final Method ENCODE_METHOD;
-
- static {
- try {
- DECODE_METHOD = MessageToMessageDecoder.class.getDeclaredMethod("decode", ChannelHandlerContext.class, Object.class, List.class);
- DECODE_METHOD.setAccessible(true);
- ENCODE_METHOD = MessageToByteEncoder.class.getDeclaredMethod("encode", ChannelHandlerContext.class, Object.class, ByteBuf.class);
- ENCODE_METHOD.setAccessible(true);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- }
-
- public static List callDecode(MessageToMessageDecoder decoder, ChannelHandlerContext ctx, ByteBuf input) throws InvocationTargetException {
- List output = new ArrayList<>();
- try {
- BungeePipelineUtil.DECODE_METHOD.invoke(decoder, ctx, input, output);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return output;
- }
-
- public static ByteBuf callEncode(MessageToByteEncoder encoder, ChannelHandlerContext ctx, ByteBuf input) throws InvocationTargetException {
- ByteBuf output = ctx.alloc().buffer();
- try {
- BungeePipelineUtil.ENCODE_METHOD.invoke(encoder, ctx, input, output);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return output;
- }
-
- public static ByteBuf decompress(ChannelHandlerContext ctx, ByteBuf bytebuf) {
- try {
- return (ByteBuf) callDecode((MessageToMessageDecoder) ctx.pipeline().get("decompress"), ctx.pipeline().context("decompress"), bytebuf).get(0);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- return ctx.alloc().buffer();
- }
- }
-
- public static ByteBuf compress(ChannelHandlerContext ctx, ByteBuf bytebuf) {
- try {
- return callEncode((MessageToByteEncoder) ctx.pipeline().get("compress"), ctx.pipeline().context("compress"), bytebuf);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- return ctx.alloc().buffer();
- }
- }
-}
diff --git a/bungee/src/main/resources/bungee.yml b/bungee/src/main/resources/bungee.yml
deleted file mode 100644
index 99ae4be8d..000000000
--- a/bungee/src/main/resources/bungee.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ViaVersion
-main: com.viaversion.viaversion.BungeePlugin
-description: ${description}
-author: _MylesC, creeper123123321, Gerrygames, kennytv, Matsv, EnZaXD, RK_01
-version: ${version}
\ No newline at end of file
diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_13_2to1_14/rewriter/EntityPacketRewriter1_14.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_13_2to1_14/rewriter/EntityPacketRewriter1_14.java
index 84c83c618..7ef415ee1 100644
--- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_13_2to1_14/rewriter/EntityPacketRewriter1_14.java
+++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_13_2to1_14/rewriter/EntityPacketRewriter1_14.java
@@ -37,7 +37,7 @@ import com.viaversion.viaversion.protocols.v1_13_2to1_14.Protocol1_13_2To1_14;
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
import com.viaversion.viaversion.protocols.v1_13_2to1_14.storage.EntityTracker1_14;
import com.viaversion.viaversion.rewriter.EntityRewriter;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
public class EntityPacketRewriter1_14 extends EntityRewriter {
@@ -184,7 +184,7 @@ public class EntityPacketRewriter1_14 extends EntityRewriter metadataList = new LinkedList<>();
+ List metadataList = new ArrayList<>();
if (tracker.clientEntityId() != entityId) {
metadataList.add(new EntityData(6, Types1_14.ENTITY_DATA_TYPES.poseType, EntityPacketRewriter1_14.recalculatePlayerPose(entityId, tracker)));
}
@@ -242,7 +242,7 @@ public class EntityPacketRewriter1_14 extends EntityRewriter metadataList = new LinkedList<>();
+ List metadataList = new ArrayList<>();
metadataList.add(new EntityData(12, Types1_14.ENTITY_DATA_TYPES.optionalBlockPositionType, position));
if (tracker.clientEntityId() != entityId) {
metadataList.add(new EntityData(6, Types1_14.ENTITY_DATA_TYPES.poseType, EntityPacketRewriter1_14.recalculatePlayerPose(entityId, tracker)));
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 29e515b99..f308b8dde 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -19,8 +19,6 @@ checkerQual = "3.43.0"
# Platforms
paper = "1.20.4-R0.1-SNAPSHOT"
legacyBukkit = "1.8.8-R0.1-SNAPSHOT"
-bungee = "1.20-R0.3-SNAPSHOT"
-sponge = "8.0.0"
velocity = "3.1.1"
@@ -43,8 +41,6 @@ checkerQual = { group = "org.checkerframework", name = "checker-qual", version.r
paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" }
legacyBukkit = { group = "org.bukkit", name = "bukkit", version.ref = "legacyBukkit" }
-bungee = { group = "net.md-5", name = "bungeecord-api", version.ref = "bungee" }
-sponge = { group = "org.spongepowered", name = "spongeapi", version.ref = "sponge" }
velocity = { group = "com.velocitypowered", name = "velocity-api", version.ref = "velocity" }
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 46c8706f0..976ffcefb 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -5,9 +5,6 @@ dependencyResolutionManagement {
repositories {
maven("https://repo.viaversion.com")
maven("https://repo.papermc.io/repository/maven-public/")
- maven("https://oss.sonatype.org/content/repositories/snapshots/")
- maven("https://repo.spongepowered.org/repository/maven-public/")
- maven("https://libraries.minecraft.net")
mavenCentral()
}
// only use these repos
@@ -33,9 +30,7 @@ setupViaSubproject("api")
setupViaSubproject("common")
setupViaSubproject("bukkit")
setupViaSubproject("bukkit-legacy")
-setupViaSubproject("bungee")
setupViaSubproject("velocity")
-setupViaSubproject("sponge")
setupViaSubproject("fabric")
setupViaSubproject("template")
diff --git a/sponge/build.gradle.kts b/sponge/build.gradle.kts
deleted file mode 100644
index daff96f27..000000000
--- a/sponge/build.gradle.kts
+++ /dev/null
@@ -1,6 +0,0 @@
-dependencies {
- compileOnlyApi(projects.viaversionCommon)
- compileOnly(libs.sponge)
-}
-
-publishShadowJar()
diff --git a/sponge/src/main/java/com/viaversion/viaversion/SpongePlugin.java b/sponge/src/main/java/com/viaversion/viaversion/SpongePlugin.java
deleted file mode 100644
index 09bbf87cc..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/SpongePlugin.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion;
-
-import com.google.gson.JsonObject;
-import com.google.inject.Inject;
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.command.ViaCommandSender;
-import com.viaversion.viaversion.api.platform.PlatformTask;
-import com.viaversion.viaversion.api.platform.ViaPlatform;
-import com.viaversion.viaversion.dump.PluginInfo;
-import com.viaversion.viaversion.sponge.commands.SpongeCommandHandler;
-import com.viaversion.viaversion.sponge.commands.SpongePlayer;
-import com.viaversion.viaversion.sponge.platform.SpongeViaAPI;
-import com.viaversion.viaversion.sponge.platform.SpongeViaConfig;
-import com.viaversion.viaversion.sponge.platform.SpongeViaInjector;
-import com.viaversion.viaversion.sponge.platform.SpongeViaLoader;
-import com.viaversion.viaversion.sponge.platform.SpongeViaTask;
-import com.viaversion.viaversion.sponge.util.LoggerWrapper;
-import com.viaversion.viaversion.util.GsonUtil;
-import java.io.File;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.UUID;
-import java.util.logging.Logger;
-import java.util.stream.Collectors;
-import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
-import org.spongepowered.api.Game;
-import org.spongepowered.api.Platform;
-import org.spongepowered.api.Server;
-import org.spongepowered.api.Sponge;
-import org.spongepowered.api.command.Command;
-import org.spongepowered.api.config.ConfigDir;
-import org.spongepowered.api.entity.living.player.Player;
-import org.spongepowered.api.entity.living.player.server.ServerPlayer;
-import org.spongepowered.api.event.Listener;
-import org.spongepowered.api.event.lifecycle.ConstructPluginEvent;
-import org.spongepowered.api.event.lifecycle.StartedEngineEvent;
-import org.spongepowered.api.event.lifecycle.StartingEngineEvent;
-import org.spongepowered.api.event.lifecycle.StoppingEngineEvent;
-import org.spongepowered.api.scheduler.Task;
-import org.spongepowered.api.util.Ticks;
-import org.spongepowered.plugin.PluginContainer;
-import org.spongepowered.plugin.builtin.jvm.Plugin;
-import org.spongepowered.plugin.metadata.PluginMetadata;
-import org.spongepowered.plugin.metadata.model.PluginContributor;
-
-@Plugin("viaversion")
-public class SpongePlugin implements ViaPlatform {
-
- public static final LegacyComponentSerializer LEGACY_SERIALIZER = LegacyComponentSerializer.builder().extractUrls().build();
- private final SpongeViaAPI api = new SpongeViaAPI();
- private final PluginContainer container;
- private final Game game;
- @SuppressWarnings("SpongeLogging")
- private final Logger logger;
- private SpongeViaConfig conf;
- @Inject
- @ConfigDir(sharedRoot = false)
- private Path configDir;
-
- @Inject
- SpongePlugin(final PluginContainer container, final Game game, final org.apache.logging.log4j.Logger logger) {
- this.container = container;
- this.game = game;
- this.logger = new LoggerWrapper(logger);
- }
-
- @Listener
- public void constructPlugin(ConstructPluginEvent event) {
- // Setup Plugin
- conf = new SpongeViaConfig(configDir.toFile(), getLogger());
-
- // Init platform
- Via.init(ViaManagerImpl.builder()
- .platform(this)
- .commandHandler(new SpongeCommandHandler())
- .injector(new SpongeViaInjector())
- .loader(new SpongeViaLoader(this))
- .build());
- conf.reload();
- }
-
- @Listener
- public void onServerStart(StartingEngineEvent event) {
- // Can't use the command register event for raw commands...
- Sponge.server().commandManager().registrar(Command.Raw.class).get().register(container, (Command.Raw) Via.getManager().getCommandHandler(), "viaversion", "viaver", "vvsponge");
-
- final ViaManagerImpl manager = (ViaManagerImpl) Via.getManager();
- manager.init();
- }
-
- @Listener
- public void onServerStarted(StartedEngineEvent event) {
- final ViaManagerImpl manager = (ViaManagerImpl) Via.getManager();
- manager.onServerLoaded();
- }
-
- @Listener
- public void onServerStop(StoppingEngineEvent event) {
- ((ViaManagerImpl) Via.getManager()).destroy();
- }
-
- @Override
- public String getPlatformName() {
- return game.platform().container(Platform.Component.IMPLEMENTATION).metadata().name().orElse("unknown");
- }
-
- @Override
- public String getPlatformVersion() {
- return game.platform().container(Platform.Component.IMPLEMENTATION).metadata().version().toString();
- }
-
- @Override
- public String getPluginVersion() {
- return container.metadata().version().toString();
- }
-
- @Override
- public PlatformTask runAsync(Runnable runnable) {
- final Task task = Task.builder().plugin(container).execute(runnable).build();
- return new SpongeViaTask(game.asyncScheduler().submit(task));
- }
-
- @Override
- public PlatformTask runRepeatingAsync(final Runnable runnable, final long ticks) {
- final Task task = Task.builder().plugin(container).execute(runnable).interval(Ticks.of(ticks)).build();
- return new SpongeViaTask(game.asyncScheduler().submit(task));
- }
-
- @Override
- public PlatformTask runSync(Runnable runnable) {
- final Task task = Task.builder().plugin(container).execute(runnable).build();
- return new SpongeViaTask(game.server().scheduler().submit(task));
- }
-
- @Override
- public PlatformTask runSync(Runnable runnable, long delay) {
- final Task task = Task.builder().plugin(container).execute(runnable).delay(Ticks.of(delay)).build();
- return new SpongeViaTask(game.server().scheduler().submit(task));
- }
-
- @Override
- public PlatformTask runRepeatingSync(Runnable runnable, long period) {
- final Task task = Task.builder().plugin(container).execute(runnable).interval(Ticks.of(period)).build();
- return new SpongeViaTask(game.server().scheduler().submit(task));
- }
-
- @Override
- public ViaCommandSender[] getOnlinePlayers() {
- Collection players = game.server().onlinePlayers();
- ViaCommandSender[] array = new ViaCommandSender[players.size()];
- int i = 0;
- for (ServerPlayer player : players) {
- array[i++] = new SpongePlayer(player);
- }
- return array;
- }
-
- @Override
- public void sendMessage(UUID uuid, String message) {
- game.server().player(uuid).ifPresent(player -> player.sendMessage(LEGACY_SERIALIZER.deserialize(message)));
- }
-
- @Override
- public boolean kickPlayer(UUID uuid, String message) {
- return game.server().player(uuid).map(player -> {
- player.kick(LegacyComponentSerializer.legacySection().deserialize(message));
- return true;
- }).orElse(false);
- }
-
- @Override
- public boolean isPluginEnabled() {
- return true;
- }
-
- @Override
- public File getDataFolder() {
- return configDir.toFile();
- }
-
- @Override
- public void onReload() {
- logger.severe("ViaVersion is already loaded, this should work fine. If you get any console errors, try rebooting.");
- }
-
- @Override
- public JsonObject getDump() {
- JsonObject platformSpecific = new JsonObject();
-
- List plugins = new ArrayList<>();
- for (PluginContainer plugin : game.pluginManager().plugins()) {
- PluginMetadata metadata = plugin.metadata();
- plugins.add(new PluginInfo(
- true,
- metadata.name().orElse("Unknown"),
- metadata.version().toString(),
- plugin.instance() != null ? plugin.instance().getClass().getCanonicalName() : "Unknown",
- metadata.contributors().stream().map(PluginContributor::name).collect(Collectors.toList())
- ));
- }
- platformSpecific.add("plugins", GsonUtil.getGson().toJsonTree(plugins));
-
- return platformSpecific;
- }
-
- @Override
- public boolean hasPlugin(final String name) {
- return game.pluginManager().plugin(name).isPresent();
- }
-
- @Override
- public SpongeViaAPI getApi() {
- return api;
- }
-
- @Override
- public SpongeViaConfig getConf() {
- return conf;
- }
-
- @Override
- public Logger getLogger() {
- return logger;
- }
-
- public PluginContainer container() {
- return container;
- }
-
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandHandler.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandHandler.java
deleted file mode 100644
index 9a1d34c05..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandHandler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.commands;
-
-import com.viaversion.viaversion.commands.ViaCommandHandler;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-import net.kyori.adventure.text.Component;
-import org.jetbrains.annotations.NotNull;
-import org.spongepowered.api.command.Command;
-import org.spongepowered.api.command.CommandCause;
-import org.spongepowered.api.command.CommandCompletion;
-import org.spongepowered.api.command.CommandResult;
-import org.spongepowered.api.command.parameter.ArgumentReader;
-
-public class SpongeCommandHandler extends ViaCommandHandler implements Command.Raw {
-
- @Override
- public CommandResult process(CommandCause cause, ArgumentReader.Mutable arguments) {
- String[] args = !arguments.input().isEmpty() ? arguments.input().split(" ") : new String[0];
- onCommand(new SpongeCommandSender(cause), args);
- return CommandResult.success();
- }
-
- @Override
- public List complete(CommandCause cause, ArgumentReader.Mutable arguments) {
- String[] args = arguments.input().split(" ", -1); // ViaCommandHandler handles empty String in array. -1: do not discard empty strings
- return onTabComplete(new SpongeCommandSender(cause), args).stream().map(CommandCompletion::of).collect(Collectors.toList());
- }
-
- @Override
- public boolean canExecute(CommandCause cause) {
- return cause.hasPermission("viaversion.command");
- }
-
- @Override
- public Optional shortDescription(CommandCause cause) {
- return Optional.of(Component.text("Shows ViaVersion Version and more."));
- }
-
- @Override
- public Optional extendedDescription(CommandCause cause) {
- return shortDescription(cause);
- }
-
- @Override
- public Optional help(@NotNull CommandCause cause) {
- return Optional.empty();
- }
-
- @Override
- public Component usage(CommandCause cause) {
- return Component.text("Usage /viaversion");
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandSender.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandSender.java
deleted file mode 100644
index d5b088030..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandSender.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.commands;
-
-import com.viaversion.viaversion.SpongePlugin;
-import com.viaversion.viaversion.api.command.ViaCommandSender;
-import java.util.UUID;
-import net.kyori.adventure.identity.Identity;
-import org.spongepowered.api.command.CommandCause;
-import org.spongepowered.api.util.Identifiable;
-
-public class SpongeCommandSender implements ViaCommandSender {
- private final CommandCause source;
-
- public SpongeCommandSender(CommandCause source) {
- this.source = source;
- }
-
- @Override
- public boolean hasPermission(String permission) {
- return source.hasPermission(permission);
- }
-
- @Override
- public void sendMessage(String msg) {
- source.sendMessage(Identity.nil(), SpongePlugin.LEGACY_SERIALIZER.deserialize(msg));
- }
-
- @Override
- public UUID getUUID() {
- if (source instanceof Identifiable identifiable) {
- return identifiable.uniqueId();
- } else {
- return new UUID(0, 0);
- }
-
- }
-
- @Override
- public String getName() {
- return source.friendlyIdentifier().orElse(source.identifier());
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongePlayer.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongePlayer.java
deleted file mode 100644
index 1d638db67..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongePlayer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.commands;
-
-import com.viaversion.viaversion.SpongePlugin;
-import com.viaversion.viaversion.api.command.ViaCommandSender;
-import java.util.UUID;
-import org.spongepowered.api.entity.living.player.server.ServerPlayer;
-
-public class SpongePlayer implements ViaCommandSender {
- private final ServerPlayer player;
-
- public SpongePlayer(ServerPlayer player) {
- this.player = player;
- }
-
- @Override
- public boolean hasPermission(String permission) {
- return player.hasPermission(permission);
- }
-
- @Override
- public void sendMessage(String msg) {
- player.sendMessage(SpongePlugin.LEGACY_SERIALIZER.deserialize(msg));
- }
-
- @Override
- public UUID getUUID() {
- return player.uniqueId();
- }
-
- @Override
- public String getName() {
- return player.friendlyIdentifier().orElse(player.identifier());
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeChannelInitializer.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeChannelInitializer.java
deleted file mode 100644
index ead126943..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeChannelInitializer.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.handlers;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.connection.UserConnectionImpl;
-import com.viaversion.viaversion.platform.WrappedChannelInitializer;
-import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToByteEncoder;
-import java.lang.reflect.Method;
-
-public class SpongeChannelInitializer extends ChannelInitializer implements WrappedChannelInitializer {
-
- private static final Method INIT_CHANNEL_METHOD;
- private final ChannelInitializer original;
-
- static {
- try {
- INIT_CHANNEL_METHOD = ChannelInitializer.class.getDeclaredMethod("initChannel", Channel.class);
- INIT_CHANNEL_METHOD.setAccessible(true);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- }
-
- public SpongeChannelInitializer(ChannelInitializer oldInit) {
- this.original = oldInit;
- }
-
- @Override
- protected void initChannel(Channel channel) throws Exception {
- // Ensure ViaVersion is loaded
- if (Via.getAPI().getServerVersion().isKnown()
- && channel instanceof SocketChannel) { // channel can be LocalChannel on internal server
- UserConnection info = new UserConnectionImpl(channel);
- // init protocol
- new ProtocolPipelineImpl(info);
- // Add originals
- INIT_CHANNEL_METHOD.invoke(this.original, channel);
- // Add our transformers
- MessageToByteEncoder encoder = new SpongeEncodeHandler(info, (MessageToByteEncoder) channel.pipeline().get("encoder"));
- ByteToMessageDecoder decoder = new SpongeDecodeHandler(info, (ByteToMessageDecoder) channel.pipeline().get("decoder"));
-
- channel.pipeline().replace("encoder", "encoder", encoder);
- channel.pipeline().replace("decoder", "decoder", decoder);
- } else {
- INIT_CHANNEL_METHOD.invoke(this.original, channel);
- }
- }
-
- @Override
- public ChannelInitializer original() {
- return original;
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeDecodeHandler.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeDecodeHandler.java
deleted file mode 100644
index 39900886f..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeDecodeHandler.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.handlers;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.exception.CancelCodecException;
-import com.viaversion.viaversion.exception.CancelDecoderException;
-import com.viaversion.viaversion.util.PipelineUtil;
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import java.util.List;
-
-public class SpongeDecodeHandler extends ByteToMessageDecoder {
-
- private final ByteToMessageDecoder minecraftDecoder;
- private final UserConnection info;
-
- public SpongeDecodeHandler(UserConnection info, ByteToMessageDecoder minecraftDecoder) {
- this.info = info;
- this.minecraftDecoder = minecraftDecoder;
- }
-
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf bytebuf, List list) throws Exception {
- if (!info.checkServerboundPacket()) {
- bytebuf.clear(); // Don't accumulate
- throw CancelDecoderException.generate(null);
- }
-
- ByteBuf transformedBuf = null;
- try {
- if (info.shouldTransformPacket()) {
- transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf);
- info.transformServerbound(transformedBuf, CancelDecoderException::generate);
- }
-
- list.addAll(PipelineUtil.callDecode(this.minecraftDecoder, ctx, transformedBuf == null ? bytebuf : transformedBuf));
- } finally {
- if (transformedBuf != null) {
- transformedBuf.release();
- }
- }
- }
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- if (cause instanceof CancelCodecException) return;
- super.exceptionCaught(ctx, cause);
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeEncodeHandler.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeEncodeHandler.java
deleted file mode 100644
index 095ee4b1c..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeEncodeHandler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.handlers;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.exception.CancelCodecException;
-import com.viaversion.viaversion.exception.CancelEncoderException;
-import com.viaversion.viaversion.handlers.ChannelHandlerContextWrapper;
-import com.viaversion.viaversion.handlers.ViaCodecHandler;
-import com.viaversion.viaversion.util.PipelineUtil;
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.MessageToByteEncoder;
-import java.lang.reflect.InvocationTargetException;
-
-public class SpongeEncodeHandler extends MessageToByteEncoder implements ViaCodecHandler {
- private final UserConnection info;
- private final MessageToByteEncoder> minecraftEncoder;
-
- public SpongeEncodeHandler(UserConnection info, MessageToByteEncoder> minecraftEncoder) {
- this.info = info;
- this.minecraftEncoder = minecraftEncoder;
- }
-
- @Override
- protected void encode(final ChannelHandlerContext ctx, Object o, final ByteBuf bytebuf) throws Exception {
- // handle the packet type
- if (!(o instanceof ByteBuf buf)) {
- // call minecraft encoder
- try {
- PipelineUtil.callEncode(this.minecraftEncoder, new ChannelHandlerContextWrapper(ctx, this), o, bytebuf);
- } catch (InvocationTargetException e) {
- if (e.getCause() instanceof Exception cause) {
- throw cause;
- } else if (e.getCause() instanceof Error cause) {
- throw cause;
- }
- }
- } else {
- bytebuf.writeBytes(buf);
- }
- transform(bytebuf);
- }
-
- @Override
- public void transform(ByteBuf bytebuf) throws Exception {
- if (!info.checkClientboundPacket()) throw CancelEncoderException.generate(null);
- if (!info.shouldTransformPacket()) return;
- info.transformClientbound(bytebuf, CancelEncoderException::generate);
- }
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- if (cause instanceof CancelCodecException) return;
- super.exceptionCaught(ctx, cause);
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/UpdateListener.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/UpdateListener.java
deleted file mode 100644
index c3369a874..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/UpdateListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.listeners;
-
-import com.viaversion.viaversion.api.Via;
-import com.viaversion.viaversion.update.UpdateUtil;
-import org.spongepowered.api.event.Listener;
-import org.spongepowered.api.event.network.ServerSideConnectionEvent;
-
-public class UpdateListener {
-
- @Listener
- public void onJoin(ServerSideConnectionEvent.Join join) {
- if (join.player().hasPermission("viaversion.update") && Via.getConfig().isCheckForUpdates()) {
- UpdateUtil.sendUpdateMessage(join.player().uniqueId());
- }
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/ViaSpongeListener.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/ViaSpongeListener.java
deleted file mode 100644
index 7610e6e0e..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/ViaSpongeListener.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.listeners;
-
-import com.viaversion.viaversion.SpongePlugin;
-import com.viaversion.viaversion.ViaListener;
-import com.viaversion.viaversion.api.protocol.Protocol;
-import java.lang.reflect.Field;
-import org.spongepowered.api.Sponge;
-
-public class ViaSpongeListener extends ViaListener {
- private static Field entityIdField;
-
- private final SpongePlugin plugin;
-
- public ViaSpongeListener(SpongePlugin plugin, Class extends Protocol> requiredPipeline) {
- super(requiredPipeline);
- this.plugin = plugin;
- }
-
- @Override
- public void register() {
- if (isRegistered()) return;
-
- Sponge.eventManager().registerListeners(plugin.container(), this);
- setRegistered(true);
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaAPI.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaAPI.java
deleted file mode 100644
index 83d2e62a8..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaAPI.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.platform;
-
-import com.viaversion.viaversion.ViaAPIBase;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import io.netty.buffer.ByteBuf;
-import org.spongepowered.api.entity.living.player.Player;
-
-public class SpongeViaAPI extends ViaAPIBase {
-
- @Override
- public ProtocolVersion getPlayerProtocolVersion(Player player) {
- return getPlayerProtocolVersion(player.uniqueId());
- }
-
- @Override
- public void sendRawPacket(Player player, ByteBuf packet) throws IllegalArgumentException {
- sendRawPacket(player.uniqueId(), packet);
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaConfig.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaConfig.java
deleted file mode 100644
index 46e3c6d4c..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaConfig.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.platform;
-
-import com.viaversion.viaversion.configuration.AbstractViaConfig;
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-public class SpongeViaConfig extends AbstractViaConfig {
- private static final List UNSUPPORTED = Arrays.asList("bungee-ping-interval",
- "bungee-ping-save", "bungee-servers", "velocity-ping-interval", "velocity-ping-save", "velocity-servers",
- "quick-move-action-fix", "change-1_9-hitbox", "change-1_14-hitbox", "blockconnection-method");
-
- public SpongeViaConfig(File folder, java.util.logging.Logger logger) {
- super(new File(folder, "config.yml"), logger);
- }
-
- @Override
- protected void handleConfig(Map config) {
- }
-
- @Override
- public List getUnsupportedOptions() {
- return UNSUPPORTED;
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaInjector.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaInjector.java
deleted file mode 100644
index 761b49475..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaInjector.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.platform;
-
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import com.viaversion.viaversion.platform.LegacyViaInjector;
-import com.viaversion.viaversion.platform.WrappedChannelInitializer;
-import com.viaversion.viaversion.sponge.handlers.SpongeChannelInitializer;
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelInitializer;
-import org.checkerframework.checker.nullness.qual.Nullable;
-import org.spongepowered.api.MinecraftVersion;
-import org.spongepowered.api.Sponge;
-
-public class SpongeViaInjector extends LegacyViaInjector {
-
- @Override
- public ProtocolVersion getServerProtocolVersion() throws ReflectiveOperationException {
- MinecraftVersion version = Sponge.platform().minecraftVersion();
-
- // 'protocolVersion' method was exposed to the API in a 1.19.4 build and 'getProtocol' no longer exists in the impl.
- try {
- return ProtocolVersion.getProtocol((int) version.getClass().getDeclaredMethod("getProtocol").invoke(version));
- } catch (NoSuchMethodException e) {
- return ProtocolVersion.getProtocol((int) version.getClass().getDeclaredMethod("protocolVersion").invoke(version));
- }
- }
-
- @Override
- protected @Nullable Object getServerConnection() throws ReflectiveOperationException {
- Class> serverClazz = Class.forName("net.minecraft.server.MinecraftServer");
- return serverClazz.getDeclaredMethod("getConnection").invoke(Sponge.server());
- }
-
- @Override
- protected WrappedChannelInitializer createChannelInitializer(ChannelInitializer oldInitializer) {
- return new SpongeChannelInitializer(oldInitializer);
- }
-
- @Override
- protected void blame(ChannelHandler bootstrapAcceptor) {
- throw new RuntimeException("Unable to find core component 'childHandler', please check your plugins. Issue: " + bootstrapAcceptor.getClass().getName());
- }
-
- @Override
- public String getEncoderName() {
- return "encoder";
- }
-
- @Override
- public String getDecoderName() {
- return "decoder";
- }
-}
\ No newline at end of file
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaLoader.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaLoader.java
deleted file mode 100644
index 3607cf29b..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaLoader.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.platform;
-
-import com.viaversion.viaversion.SpongePlugin;
-import com.viaversion.viaversion.api.platform.PlatformTask;
-import com.viaversion.viaversion.api.platform.ViaPlatformLoader;
-import com.viaversion.viaversion.sponge.listeners.UpdateListener;
-import java.util.HashSet;
-import java.util.Set;
-import org.spongepowered.api.Sponge;
-
-public class SpongeViaLoader implements ViaPlatformLoader {
-
- private final SpongePlugin plugin;
-
- private final Set listeners = new HashSet<>();
- private final Set tasks = new HashSet<>();
-
- public SpongeViaLoader(SpongePlugin plugin) {
- this.plugin = plugin;
- }
-
- private void registerListener(Object listener) {
- Sponge.eventManager().registerListeners(plugin.container(), storeListener(listener));
- }
-
- private T storeListener(T listener) {
- listeners.add(listener);
- return listener;
- }
-
- @Override
- public void load() {
- // Update Listener
- registerListener(new UpdateListener());
- }
-
- @Override
- public void unload() {
- listeners.forEach(Sponge.eventManager()::unregisterListeners);
- listeners.clear();
- tasks.forEach(PlatformTask::cancel);
- tasks.clear();
- }
-}
\ No newline at end of file
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaTask.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaTask.java
deleted file mode 100644
index b507321cf..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/platform/SpongeViaTask.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.platform;
-
-import com.viaversion.viaversion.api.platform.PlatformTask;
-import org.spongepowered.api.scheduler.ScheduledTask;
-
-public record SpongeViaTask(ScheduledTask task) implements PlatformTask {
-
- @Override
- public void cancel() {
- task.cancel();
- }
-}
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/util/LoggerWrapper.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/util/LoggerWrapper.java
deleted file mode 100644
index f21bf8802..000000000
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/util/LoggerWrapper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2024 ViaVersion and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.viaversion.viaversion.sponge.util;
-
-import java.text.MessageFormat;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import org.apache.logging.log4j.Logger;
-
-public class LoggerWrapper extends java.util.logging.Logger {
- private final Logger base;
-
- public LoggerWrapper(Logger logger) {
- super("logger", null);
- this.base = logger;
- }
-
- @Override
- public void log(LogRecord record) {
- log(record.getLevel(), record.getMessage());
- }
-
- @Override
- public void log(Level level, String msg) {
- if (level == Level.FINE)
- base.debug(msg);
- else if (level == Level.WARNING)
- base.warn(msg);
- else if (level == Level.SEVERE)
- base.error(msg);
- else if (level == Level.INFO)
- base.info(msg);
- else
- base.trace(msg);
- }
-
- @Override
- public void log(Level level, String msg, Object param1) {
- if (level == Level.FINE)
- base.debug(msg, param1);
- else if (level == Level.WARNING)
- base.warn(msg, param1);
- else if (level == Level.SEVERE)
- base.error(msg, param1);
- else if (level == Level.INFO)
- base.info(msg, param1);
- else
- base.trace(msg, param1);
- }
-
- @Override
- public void log(Level level, String msg, Object[] params) {
- log(level, MessageFormat.format(msg, params)); // workaround not formatting correctly
- }
-
- @Override
- public void log(Level level, String msg, Throwable params) {
- if (level == Level.FINE)
- base.debug(msg, params);
- else if (level == Level.WARNING)
- base.warn(msg, params);
- else if (level == Level.SEVERE)
- base.error(msg, params);
- else if (level == Level.INFO)
- base.info(msg, params);
- else
- base.trace(msg, params);
- }
-
-}
diff --git a/sponge/src/main/resources/META-INF/sponge_plugins.json b/sponge/src/main/resources/META-INF/sponge_plugins.json
deleted file mode 100644
index c3d57a297..000000000
--- a/sponge/src/main/resources/META-INF/sponge_plugins.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "loader": {
- "name": "java_plain",
- "version": "1.0"
- },
- "license": "GNU GPLv3",
- "global": {
- "version": "${version}",
- "links": {
- "homepage": "https://viaversion.com/",
- "source": "https://github.com/ViaVersion/ViaVersion",
- "issues": "https://github.com/ViaVersion/ViaVersion/issues"
- },
- "contributors": [
- {
- "name": "_MylesC",
- "description": "Maintainer"
- },
- {
- "name": "creeper123123321",
- "description": "Contributor"
- },
- {
- "name": "Gerrygames",
- "description": "Contributor"
- },
- {
- "name": "kennytv",
- "description": "Maintainer"
- },
- {
- "name": "Matsv",
- "description": "Contributor"
- },
- {
- "name": "EnZaXD",
- "description": "Contributor"
- },
- {
- "name": "RK_01",
- "description": "Contributor"
- }
- ],
- "dependencies": [
- {
- "id": "spongeapi",
- "version": "8.0.0"
- }
- ],
- "branding": {
- "logo": "assets/viaversion/textures/logo.png"
- }
- },
- "plugins": [
- {
- "id": "viaversion",
- "name": "ViaVersion",
- "entrypoint": "com.viaversion.viaversion.SpongePlugin",
- "description": "${description}"
- }
- ]
-}
\ No newline at end of file
diff --git a/sponge/src/main/resources/assets/viaversion/textures/logo.png b/sponge/src/main/resources/assets/viaversion/textures/logo.png
deleted file mode 100644
index 7b6cbc87e..000000000
Binary files a/sponge/src/main/resources/assets/viaversion/textures/logo.png and /dev/null differ
diff --git a/universal/build.gradle.kts b/universal/build.gradle.kts
index a4c087857..0a56b6f12 100644
--- a/universal/build.gradle.kts
+++ b/universal/build.gradle.kts
@@ -6,10 +6,8 @@ plugins {
dependencies {
api(projects.viaversionCommon)
api(projects.viaversionBukkit)
- api(projects.viaversionBungee)
- api(projects.viaversionFabric)
- api(projects.viaversionSponge)
api(projects.viaversionVelocity)
+ api(projects.viaversionFabric)
}
tasks {