Compare commits
37 Commits
e71767688d
...
68200133b6
Author | SHA1 | Date | |
---|---|---|---|
|
68200133b6 | ||
|
188d502c59 | ||
|
84ac683c1d | ||
|
b418c94215 | ||
|
38e593a698 | ||
|
38028e8e90 | ||
|
3db27052a1 | ||
|
e24f9223df | ||
|
9e5ed82c99 | ||
|
606fa278c4 | ||
|
7dd549ff1e | ||
|
3c12b04c98 | ||
|
5545850f9d | ||
|
2f909b44d7 | ||
|
ff155ebbb4 | ||
|
a0a4fa0e56 | ||
|
1b76a26691 | ||
|
bd7bd2739a | ||
|
a7ad407f4b | ||
|
931ff0fde6 | ||
|
dfd847f705 | ||
|
a1fee720b9 | ||
|
963854f8d5 | ||
|
2ef5e7004b | ||
|
2e6f0dd442 | ||
|
7790783949 | ||
|
f4534c8273 | ||
|
76673f02a4 | ||
|
b47ae0944c | ||
|
f9712cbc7c | ||
|
1b6d845530 | ||
|
19424aba9d | ||
|
71ac9b34fa | ||
|
7651d4a249 | ||
|
f8e0bccdf0 | ||
|
a5b6eb6afa | ||
|
41471da9db |
27
.github/dependabot.yml
vendored
Normal file
27
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
version: 2
|
||||
|
||||
updates:
|
||||
- package-ecosystem: "maven"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 50
|
||||
ignore:
|
||||
# Synchronised with Minecraft
|
||||
- dependency-name: "com.google.code.gson:gson"
|
||||
# 9.x has performance issues (see, eg, checkstyle/checkstyle#10934) and 10.x is incompatible
|
||||
- dependency-name: "com.puppycrawl.tools:checkstyle"
|
||||
# Newer versions have issues, see #1909 and #2050
|
||||
- dependency-name: "jline:jline"
|
||||
# Needs to be synchronised with maven-resolver-provider dependencies
|
||||
- dependency-name: "org.apache.maven.resolver:maven-resolver-connector-basic"
|
||||
- dependency-name: "org.apache.maven.resolver:maven-resolver-transport-http"
|
||||
# Used with maven-resolver dependencies; 2.0 update breaks other providers
|
||||
- dependency-name: "org.slf4j:slf4j-api"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 50
|
2
.github/workflows/maven.yml
vendored
2
.github/workflows/maven.yml
vendored
@ -4,7 +4,7 @@ on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
@ -23,4 +23,4 @@ Binaries
|
||||
--------
|
||||
Precompiled binaries are available for end users on [Jenkins](https://www.spigotmc.org/go/bungeecord-dl).
|
||||
|
||||
(c) 2012-2022 SpigotMC Pty. Ltd.
|
||||
(c) 2012-2023 SpigotMC Pty. Ltd.
|
||||
|
13
api/pom.xml
13
api/pom.xml
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-api</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-API</name>
|
||||
@ -46,34 +46,33 @@
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-transport-native-unix-common</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-resolver-provider</artifactId>
|
||||
<version>3.8.5</version>
|
||||
<version>3.9.2</version>
|
||||
<!-- not part of the API proper -->
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.resolver</groupId>
|
||||
<artifactId>maven-resolver-connector-basic</artifactId>
|
||||
<version>1.7.3</version>
|
||||
<version>1.9.10</version>
|
||||
<!-- not part of the API proper -->
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.resolver</groupId>
|
||||
<artifactId>maven-resolver-transport-http</artifactId>
|
||||
<version>1.7.3</version>
|
||||
<version>1.9.10</version>
|
||||
<!-- not part of the API proper -->
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
<version>1.33</version>
|
||||
<version>2.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@ -113,6 +113,16 @@ public class Util
|
||||
return format( objects, ", " );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string of objects, each separated by a separator.
|
||||
*
|
||||
* @param objects the objects to join
|
||||
* @param separators the separator
|
||||
* @return joined string
|
||||
* @see String#join(java.lang.CharSequence, java.lang.Iterable)
|
||||
* @deprecated use {@link String} join methods
|
||||
*/
|
||||
@Deprecated
|
||||
public static String format(Iterable<?> objects, String separators)
|
||||
{
|
||||
return Joiner.on( separators ).join( objects );
|
||||
|
@ -1,9 +1,10 @@
|
||||
package net.md_5.bungee.api;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.io.BaseEncoding;
|
||||
import com.google.gson.TypeAdapter;
|
||||
import com.google.gson.internal.bind.TypeAdapters;
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import com.google.gson.stream.JsonToken;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@ -26,13 +27,26 @@ public class Favicon
|
||||
@Override
|
||||
public void write(JsonWriter out, Favicon value) throws IOException
|
||||
{
|
||||
TypeAdapters.STRING.write( out, value == null ? null : value.getEncoded() );
|
||||
if ( value == null )
|
||||
{
|
||||
out.nullValue();
|
||||
} else
|
||||
{
|
||||
out.value( value.getEncoded() );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Favicon read(JsonReader in) throws IOException
|
||||
{
|
||||
String enc = TypeAdapters.STRING.read( in );
|
||||
JsonToken peek = in.peek();
|
||||
if ( peek == JsonToken.NULL )
|
||||
{
|
||||
in.nextNull();
|
||||
return null;
|
||||
}
|
||||
|
||||
String enc = in.nextString();
|
||||
return enc == null ? null : create( enc );
|
||||
}
|
||||
};
|
||||
@ -59,6 +73,7 @@ public class Favicon
|
||||
*/
|
||||
public static Favicon create(BufferedImage image)
|
||||
{
|
||||
Preconditions.checkArgument( image != null, "image is null" );
|
||||
// check size
|
||||
if ( image.getWidth() != 64 || image.getHeight() != 64 )
|
||||
{
|
||||
|
@ -15,7 +15,7 @@ import net.md_5.bungee.api.event.ServerConnectEvent;
|
||||
import net.md_5.bungee.api.score.Scoreboard;
|
||||
|
||||
/**
|
||||
* Represents a player who's connection is being connected to somewhere else,
|
||||
* Represents a player whose connection is being connected to somewhere else,
|
||||
* whether it be a remote or embedded server.
|
||||
*/
|
||||
public interface ProxiedPlayer extends Connection, CommandSender
|
||||
|
@ -9,6 +9,13 @@ import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Event;
|
||||
|
||||
/**
|
||||
* Called when the player is disconnected from a server, for example during
|
||||
* server switching.
|
||||
*
|
||||
* If the player is kicked from a server, {@link ServerKickEvent} will be called
|
||||
* instead.
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@ToString(callSuper = false)
|
||||
|
@ -33,6 +33,7 @@ import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.event.EventBus;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
import org.yaml.snakeyaml.LoaderOptions;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
import org.yaml.snakeyaml.constructor.Constructor;
|
||||
import org.yaml.snakeyaml.introspector.PropertyUtils;
|
||||
@ -64,7 +65,7 @@ public final class PluginManager
|
||||
this.proxy = proxy;
|
||||
|
||||
// Ignore unknown entries in the plugin descriptions
|
||||
Constructor yamlConstructor = new Constructor();
|
||||
Constructor yamlConstructor = new Constructor( new LoaderOptions() );
|
||||
PropertyUtils propertyUtils = yamlConstructor.getPropertyUtils();
|
||||
propertyUtils.setSkipMissingProperties( true );
|
||||
yamlConstructor.setPropertyUtils( propertyUtils );
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-bootstrap</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Bootstrap</name>
|
||||
@ -41,7 +41,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<version>3.3.0</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
@ -55,7 +55,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.2.3</version>
|
||||
<version>3.4.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
@ -99,5 +99,14 @@
|
||||
<maven.compiler.release>7</maven.compiler.release>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>jdk-20-release</id>
|
||||
<activation>
|
||||
<jdk>[20,)</jdk>
|
||||
</activation>
|
||||
<properties>
|
||||
<maven.compiler.release>8</maven.compiler.release>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-chat</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Chat</name>
|
||||
|
@ -30,6 +30,10 @@ public final class TranslatableComponent extends BaseComponent
|
||||
* The components to substitute into the translation
|
||||
*/
|
||||
private List<BaseComponent> with;
|
||||
/**
|
||||
* The fallback, if the translation is not found
|
||||
*/
|
||||
private String fallback;
|
||||
|
||||
/**
|
||||
* Creates a translatable component from the original to clone it.
|
||||
@ -153,6 +157,11 @@ public final class TranslatableComponent extends BaseComponent
|
||||
{
|
||||
String trans = TranslationRegistry.INSTANCE.translate( translate );
|
||||
|
||||
if ( trans.equals( translate ) && fallback != null )
|
||||
{
|
||||
trans = fallback;
|
||||
}
|
||||
|
||||
Matcher matcher = format.matcher( trans );
|
||||
int position = 0;
|
||||
int i = 0;
|
||||
|
@ -28,7 +28,11 @@ public class TranslatableComponentSerializer extends BaseComponentSerializer imp
|
||||
component.setTranslate( object.get( "translate" ).getAsString() );
|
||||
if ( object.has( "with" ) )
|
||||
{
|
||||
component.setWith( Arrays.asList( context.<BaseComponent[]>deserialize( object.get( "with" ), BaseComponent[].class ) ) );
|
||||
component.setWith( Arrays.asList( context.deserialize( object.get( "with" ), BaseComponent[].class ) ) );
|
||||
}
|
||||
if ( object.has( "fallback" ) )
|
||||
{
|
||||
component.setFallback( object.get( "fallback" ).getAsString() );
|
||||
}
|
||||
return component;
|
||||
}
|
||||
@ -43,6 +47,10 @@ public class TranslatableComponentSerializer extends BaseComponentSerializer imp
|
||||
{
|
||||
object.add( "with", context.serialize( src.getWith() ) );
|
||||
}
|
||||
if ( src.getFallback() != null )
|
||||
{
|
||||
object.addProperty( "fallback", src.getFallback() );
|
||||
}
|
||||
return object;
|
||||
}
|
||||
}
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-config</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Config</name>
|
||||
@ -29,7 +29,7 @@
|
||||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
<version>1.33</version>
|
||||
<version>2.0</version>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
@ -14,6 +14,7 @@ import java.util.Map;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.yaml.snakeyaml.DumperOptions;
|
||||
import org.yaml.snakeyaml.LoaderOptions;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
import org.yaml.snakeyaml.constructor.Constructor;
|
||||
import org.yaml.snakeyaml.nodes.Node;
|
||||
@ -29,7 +30,10 @@ public class YamlConfiguration extends ConfigurationProvider
|
||||
@Override
|
||||
protected Yaml initialValue()
|
||||
{
|
||||
Representer representer = new Representer()
|
||||
DumperOptions options = new DumperOptions();
|
||||
options.setDefaultFlowStyle( DumperOptions.FlowStyle.BLOCK );
|
||||
|
||||
Representer representer = new Representer( options )
|
||||
{
|
||||
{
|
||||
representers.put( Configuration.class, new Represent()
|
||||
@ -43,10 +47,7 @@ public class YamlConfiguration extends ConfigurationProvider
|
||||
}
|
||||
};
|
||||
|
||||
DumperOptions options = new DumperOptions();
|
||||
options.setDefaultFlowStyle( DumperOptions.FlowStyle.BLOCK );
|
||||
|
||||
return new Yaml( new Constructor(), representer, options );
|
||||
return new Yaml( new Constructor( new LoaderOptions() ), representer, options );
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-event</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Event</name>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-log</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Log</name>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module-cmd-alert</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cmd_alert</name>
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.md_5.bungee.module.cmd.alert;
|
||||
|
||||
import java.util.Locale;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
@ -23,10 +24,10 @@ public class CommandAlert extends Command
|
||||
} else
|
||||
{
|
||||
StringBuilder builder = new StringBuilder();
|
||||
if ( args[0].startsWith( "&h" ) )
|
||||
if ( args[0].toLowerCase( Locale.ROOT ).startsWith( "&h" ) )
|
||||
{
|
||||
// Remove &h
|
||||
args[0] = args[0].substring( 2, args[0].length() );
|
||||
args[0] = args[0].substring( 2 );
|
||||
} else
|
||||
{
|
||||
builder.append( ProxyServer.getInstance().getTranslation( "alert" ) );
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module-cmd-find</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cmd_find</name>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module-cmd-kick</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cmd_kick</name>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module-cmd-list</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cmd_list</name>
|
||||
|
@ -1,20 +1,21 @@
|
||||
package net.md_5.bungee.module.cmd.list;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import net.md_5.bungee.Util;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Command;
|
||||
import net.md_5.bungee.api.plugin.TabExecutor;
|
||||
|
||||
/**
|
||||
* Command to list all players connected to the proxy.
|
||||
*/
|
||||
public class CommandList extends Command
|
||||
public class CommandList extends Command implements TabExecutor
|
||||
{
|
||||
|
||||
public CommandList()
|
||||
@ -25,6 +26,8 @@ public class CommandList extends Command
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args)
|
||||
{
|
||||
boolean hideEmptyServers = ( args.length == 0 ) || !args[0].equalsIgnoreCase( "all" );
|
||||
|
||||
for ( ServerInfo server : ProxyServer.getInstance().getServers().values() )
|
||||
{
|
||||
if ( !server.canAccess( sender ) )
|
||||
@ -32,16 +35,28 @@ public class CommandList extends Command
|
||||
continue;
|
||||
}
|
||||
|
||||
Collection<ProxiedPlayer> serverPlayers = server.getPlayers();
|
||||
if ( hideEmptyServers && serverPlayers.isEmpty() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
List<String> players = new ArrayList<>();
|
||||
for ( ProxiedPlayer player : server.getPlayers() )
|
||||
for ( ProxiedPlayer player : serverPlayers )
|
||||
{
|
||||
players.add( player.getDisplayName() );
|
||||
}
|
||||
Collections.sort( players, String.CASE_INSENSITIVE_ORDER );
|
||||
|
||||
sender.sendMessage( ProxyServer.getInstance().getTranslation( "command_list", server.getName(), server.getPlayers().size(), Util.format( players, ChatColor.RESET + ", " ) ) );
|
||||
sender.sendMessage( ProxyServer.getInstance().getTranslation( "command_list", server.getName(), players.size(), String.join( ChatColor.RESET + ", ", players ) ) );
|
||||
}
|
||||
|
||||
sender.sendMessage( ProxyServer.getInstance().getTranslation( "total_players", ProxyServer.getInstance().getOnlineCount() ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<String> onTabComplete(CommandSender sender, String[] args)
|
||||
{
|
||||
return ( args.length > 1 ) ? Collections.emptyList() : Collections.singletonList( "all" );
|
||||
}
|
||||
}
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module-cmd-send</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cmd_send</name>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module-cmd-server</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cmd_server</name>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>BungeeCord Modules</name>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-module-reconnect-yaml</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>reconnect_yaml</name>
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 8df2f8e7b9c7bb9390ac74bb7bace27edca81a2b
|
||||
Subproject commit 8c89224991adff88d53cd380f42a2baa36f91454
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-native</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Native</name>
|
||||
@ -22,7 +22,6 @@
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-transport</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
||||
Subproject commit 959b4ea305821e753385e873ec4edfaa9a5d49b7
|
||||
Subproject commit 4e4e4c4fbdad9dd034d8f05e2312bf845f0d4d15
|
53
pom.xml
53
pom.xml
@ -5,7 +5,7 @@
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>BungeeCord-Parent</name>
|
||||
@ -72,13 +72,23 @@
|
||||
|
||||
<properties>
|
||||
<build.number>unknown</build.number>
|
||||
<lombok.version>1.18.22</lombok.version>
|
||||
<netty.version>4.1.85.Final</netty.version>
|
||||
<lombok.version>1.18.28</lombok.version>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-bom</artifactId>
|
||||
<version>4.1.93.Final</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
@ -127,12 +137,12 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<version>3.11.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<version>3.1.2</version>
|
||||
<version>3.3.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>process-classes</phase>
|
||||
@ -157,7 +167,7 @@
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>animal-sniffer-maven-plugin</artifactId>
|
||||
<version>1.20</version>
|
||||
<version>1.23</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>process-classes</phase>
|
||||
@ -174,6 +184,31 @@
|
||||
</signature>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-enforcer-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>enforce</id>
|
||||
<configuration>
|
||||
<rules>
|
||||
<dependencyConvergence>
|
||||
<excludes>
|
||||
<!-- org.apache.maven:maven-resolver-provider is inconsistent -->
|
||||
<exclude>org.apache.commons:commons-lang3</exclude>
|
||||
<!-- org.apache.maven:maven-resolver-transport-http is inconsistent -->
|
||||
<exclude>org.apache.httpcomponents:httpcore</exclude>
|
||||
</excludes>
|
||||
</dependencyConvergence>
|
||||
</rules>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>enforce</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
@ -232,7 +267,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>3.2.1</version>
|
||||
<version>3.3.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
@ -270,7 +305,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<version>3.5.0</version>
|
||||
<executions>
|
||||
<!-- Execute Javadoc once normally to catch any warnings -->
|
||||
<execution>
|
||||
@ -308,7 +343,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>1.6</version>
|
||||
<version>3.1.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>verify</phase>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-protocol</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Protocol</name>
|
||||
@ -49,7 +49,6 @@
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-codec</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -84,7 +84,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x21 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x1E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x20 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x1F )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x1F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x23 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Login.class,
|
||||
@ -98,7 +99,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x26 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x23 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x25 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x24 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x24 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x28 )
|
||||
);
|
||||
TO_CLIENT.registerPacket( Chat.class,
|
||||
Chat::new,
|
||||
@ -125,7 +127,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x3D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x3B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x3E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x3D )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x3D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x41 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
BossBar.class,
|
||||
@ -134,7 +137,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x0D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x0C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x0D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x0A )
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x0A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0xB )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PlayerListItem.class, // PlayerInfo
|
||||
@ -163,7 +167,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x0F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x11 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x0E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0D )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0xF )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ScoreboardObjective.class,
|
||||
@ -177,7 +182,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x53 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x56 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x54 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x54 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x58 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ScoreboardScore.class,
|
||||
@ -191,7 +197,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x56 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x59 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x57 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x57 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5B )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ScoreboardDisplay.class,
|
||||
@ -205,7 +212,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x43 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x4C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x4F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x4D )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x4D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x51 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Team.class,
|
||||
@ -219,7 +227,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x55 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x58 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x56 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x56 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5A )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PluginMessage.class,
|
||||
@ -234,7 +243,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x18 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x15 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x16 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x15 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x15 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x17 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Kick.class,
|
||||
@ -249,7 +259,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x1A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x17 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x19 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x17 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x17 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1A )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Title.class,
|
||||
@ -264,14 +275,16 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x59 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_18, 0x5A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x5B )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x5B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5F )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ClearTitles.class,
|
||||
ClearTitles::new,
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x10 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x0D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0xE )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Subtitle.class,
|
||||
@ -279,7 +292,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x57 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_18, 0x58 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x59 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x59 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5D )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
TitleTimes.class,
|
||||
@ -287,14 +301,16 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x5A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_18, 0x5B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x5C )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x5C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x60 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
SystemChat.class,
|
||||
SystemChat::new,
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x5F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x62 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x60 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x60 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x64 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PlayerListHeaderFooter.class,
|
||||
@ -312,7 +328,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_18, 0x5F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x60 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x63 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x61 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x61 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x65 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
EntityStatus.class,
|
||||
@ -327,7 +344,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x1B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x18 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x1A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x19 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x19 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1C )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Commands.class,
|
||||
@ -338,7 +356,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x10 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x12 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x0F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0E )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x10 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
GameState.class,
|
||||
@ -349,7 +368,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x1E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x1B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x1D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x1C )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x1C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1F )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ViewDistance.class,
|
||||
@ -360,24 +380,28 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x4A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x49 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x4C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x4B )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x4B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x4F )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ServerData.class,
|
||||
ServerData::new,
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x3F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x42 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x41 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x41 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x45 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PlayerListItemRemove.class,
|
||||
PlayerListItemRemove::new,
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x35 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x35 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x39 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PlayerListItemUpdate.class,
|
||||
PlayerListItemUpdate::new,
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x36 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x36 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x3A )
|
||||
);
|
||||
|
||||
TO_SERVER.registerPacket(
|
||||
@ -393,7 +417,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x0F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x11 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x12 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x11 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x11 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x12 )
|
||||
);
|
||||
TO_SERVER.registerPacket( Chat.class,
|
||||
Chat::new,
|
||||
@ -427,7 +452,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x06 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x08 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x09 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x08 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x08 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x09 )
|
||||
);
|
||||
TO_SERVER.registerPacket(
|
||||
ClientSettings.class,
|
||||
@ -439,7 +465,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x05 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x07 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x08 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x07 )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x07 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x08 )
|
||||
);
|
||||
TO_SERVER.registerPacket(
|
||||
PluginMessage.class,
|
||||
@ -453,7 +480,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x0A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19, 0x0C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x0D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C )
|
||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0D )
|
||||
);
|
||||
}
|
||||
},
|
||||
|
@ -41,6 +41,8 @@ public class ProtocolConstants
|
||||
public static final int MINECRAFT_1_19 = 759;
|
||||
public static final int MINECRAFT_1_19_1 = 760;
|
||||
public static final int MINECRAFT_1_19_3 = 761;
|
||||
public static final int MINECRAFT_1_19_4 = 762;
|
||||
public static final int MINECRAFT_1_20 = 763;
|
||||
public static final List<String> SUPPORTED_VERSIONS;
|
||||
public static final List<Integer> SUPPORTED_VERSION_IDS;
|
||||
|
||||
@ -58,7 +60,8 @@ public class ProtocolConstants
|
||||
"1.16.x",
|
||||
"1.17.x",
|
||||
"1.18.x",
|
||||
"1.19.x"
|
||||
"1.19.x",
|
||||
"1.20.x"
|
||||
);
|
||||
ImmutableList.Builder<Integer> supportedVersionIds = ImmutableList.<Integer>builder().add(
|
||||
ProtocolConstants.MINECRAFT_1_8,
|
||||
@ -94,13 +97,15 @@ public class ProtocolConstants
|
||||
ProtocolConstants.MINECRAFT_1_18_2,
|
||||
ProtocolConstants.MINECRAFT_1_19,
|
||||
ProtocolConstants.MINECRAFT_1_19_1,
|
||||
ProtocolConstants.MINECRAFT_1_19_3
|
||||
ProtocolConstants.MINECRAFT_1_19_3,
|
||||
ProtocolConstants.MINECRAFT_1_19_4,
|
||||
ProtocolConstants.MINECRAFT_1_20
|
||||
);
|
||||
|
||||
if ( SNAPSHOT_SUPPORT )
|
||||
{
|
||||
// supportedVersions.add( "1.19.x" );
|
||||
// supportedVersionIds.add( ProtocolConstants.MINECRAFT_1_19 );
|
||||
// supportedVersions.add( "1.20.x" );
|
||||
// supportedVersionIds.add( ProtocolConstants.MINECRAFT_1_20 );
|
||||
}
|
||||
|
||||
SUPPORTED_VERSIONS = supportedVersions.build();
|
||||
|
@ -53,8 +53,7 @@ public class Varint21FrameDecoder extends ByteToMessageDecoder
|
||||
{
|
||||
if ( in.hasMemoryAddress() )
|
||||
{
|
||||
out.add( in.slice( in.readerIndex(), length ).retain() );
|
||||
in.skipBytes( length );
|
||||
out.add( in.readRetainedSlice( length ) );
|
||||
} else
|
||||
{
|
||||
if ( !DIRECT_WARNING )
|
||||
|
@ -0,0 +1,25 @@
|
||||
package net.md_5.bungee.protocol;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Prepend length of the message as a Varint21 using an extra buffer for the length, avoiding copying packet data
|
||||
*/
|
||||
@ChannelHandler.Sharable
|
||||
public class Varint21LengthFieldExtraBufPrepender extends MessageToMessageEncoder<ByteBuf>
|
||||
{
|
||||
|
||||
@Override
|
||||
protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception
|
||||
{
|
||||
int bodyLen = msg.readableBytes();
|
||||
ByteBuf lenBuf = ctx.alloc().ioBuffer( Varint21LengthFieldPrepender.varintSize( bodyLen ) );
|
||||
DefinedPacket.writeVarInt( bodyLen, lenBuf );
|
||||
out.add( lenBuf );
|
||||
out.add( msg.retain() );
|
||||
}
|
||||
}
|
@ -5,6 +5,9 @@ import io.netty.channel.ChannelHandler;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.MessageToByteEncoder;
|
||||
|
||||
/**
|
||||
* Prepend length of the message as a Varint21 by writing length and data to a new buffer
|
||||
*/
|
||||
@ChannelHandler.Sharable
|
||||
public class Varint21LengthFieldPrepender extends MessageToByteEncoder<ByteBuf>
|
||||
{
|
||||
@ -20,7 +23,7 @@ public class Varint21LengthFieldPrepender extends MessageToByteEncoder<ByteBuf>
|
||||
out.writeBytes( msg );
|
||||
}
|
||||
|
||||
private static int varintSize(int paramInt)
|
||||
static int varintSize(int paramInt)
|
||||
{
|
||||
if ( ( paramInt & 0xFFFFFF80 ) == 0 )
|
||||
{
|
||||
|
@ -309,6 +309,7 @@ public class Commands extends DefinedPacket
|
||||
private static final Map<String, ArgumentSerializer> PROVIDERS = new HashMap<>();
|
||||
private static final ArgumentSerializer[] IDS_1_19;
|
||||
private static final ArgumentSerializer[] IDS_1_19_3;
|
||||
private static final ArgumentSerializer[] IDS_1_19_4;
|
||||
private static final Map<Class<?>, ProperArgumentSerializer<?>> PROPER_PROVIDERS = new HashMap<>();
|
||||
//
|
||||
private static final ArgumentSerializer<Void> VOID = new ArgumentSerializer<Void>()
|
||||
@ -352,7 +353,7 @@ public class Commands extends DefinedPacket
|
||||
buf.writeByte( t );
|
||||
}
|
||||
};
|
||||
private static final ArgumentSerializer<FloatArgumentType> FLOAT = new ArgumentSerializer<FloatArgumentType>()
|
||||
private static final ArgumentSerializer<FloatArgumentType> FLOAT_RANGE = new ArgumentSerializer<FloatArgumentType>()
|
||||
{
|
||||
@Override
|
||||
protected FloatArgumentType read(ByteBuf buf)
|
||||
@ -381,7 +382,7 @@ public class Commands extends DefinedPacket
|
||||
}
|
||||
}
|
||||
};
|
||||
private static final ArgumentSerializer<DoubleArgumentType> DOUBLE = new ArgumentSerializer<DoubleArgumentType>()
|
||||
private static final ArgumentSerializer<DoubleArgumentType> DOUBLE_RANGE = new ArgumentSerializer<DoubleArgumentType>()
|
||||
{
|
||||
@Override
|
||||
protected DoubleArgumentType read(ByteBuf buf)
|
||||
@ -410,7 +411,7 @@ public class Commands extends DefinedPacket
|
||||
}
|
||||
}
|
||||
};
|
||||
private static final ArgumentSerializer<IntegerArgumentType> INTEGER = new ArgumentSerializer<IntegerArgumentType>()
|
||||
private static final ArgumentSerializer<IntegerArgumentType> INTEGER_RANGE = new ArgumentSerializer<IntegerArgumentType>()
|
||||
{
|
||||
@Override
|
||||
protected IntegerArgumentType read(ByteBuf buf)
|
||||
@ -439,7 +440,21 @@ public class Commands extends DefinedPacket
|
||||
}
|
||||
}
|
||||
};
|
||||
private static final ArgumentSerializer<LongArgumentType> LONG = new ArgumentSerializer<LongArgumentType>()
|
||||
private static final ArgumentSerializer<Integer> INTEGER = new ArgumentSerializer<Integer>()
|
||||
{
|
||||
@Override
|
||||
protected Integer read(ByteBuf buf)
|
||||
{
|
||||
return buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(ByteBuf buf, Integer t)
|
||||
{
|
||||
buf.writeInt( t );
|
||||
}
|
||||
};
|
||||
private static final ArgumentSerializer<LongArgumentType> LONG_RANGE = new ArgumentSerializer<LongArgumentType>()
|
||||
{
|
||||
@Override
|
||||
protected LongArgumentType read(ByteBuf buf)
|
||||
@ -523,10 +538,10 @@ public class Commands extends DefinedPacket
|
||||
static
|
||||
{
|
||||
register( "brigadier:bool", VOID );
|
||||
register( "brigadier:float", FLOAT );
|
||||
register( "brigadier:double", DOUBLE );
|
||||
register( "brigadier:integer", INTEGER );
|
||||
register( "brigadier:long", LONG );
|
||||
register( "brigadier:float", FLOAT_RANGE );
|
||||
register( "brigadier:double", DOUBLE_RANGE );
|
||||
register( "brigadier:integer", INTEGER_RANGE );
|
||||
register( "brigadier:long", LONG_RANGE );
|
||||
|
||||
register( "brigadier:string", STRING );
|
||||
PROPER_PROVIDERS.put( StringArgumentType.class, STRING );
|
||||
@ -570,117 +585,164 @@ public class Commands extends DefinedPacket
|
||||
register( "minecraft:time", VOID ); // 1.14
|
||||
register( "minecraft:resource_or_tag", RAW_STRING ); // 1.18.2
|
||||
register( "minecraft:resource", RAW_STRING ); // 1.18.2
|
||||
register( "minecraft:template_mirror", VOID ); // 1.19
|
||||
register( "minecraft:template_rotation", VOID ); // 1.19
|
||||
register( "minecraft:uuid", VOID ); // 1.16
|
||||
|
||||
register( "minecraft:gamemode", VOID ); // 1.19.3
|
||||
register( "minecraft:resource_or_tag_key", RAW_STRING ); // 1.19.3
|
||||
register( "minecraft:resource_key", RAW_STRING ); // 1.19.3
|
||||
|
||||
register( "minecraft:nbt", VOID ); // 1.13 // removed
|
||||
IDS_1_19 = new ArgumentSerializer[]
|
||||
{
|
||||
get( "brigadier:bool" ),
|
||||
get( "brigadier:float" ),
|
||||
get( "brigadier:double" ),
|
||||
get( "brigadier:integer" ),
|
||||
get( "brigadier:long" ),
|
||||
get( "brigadier:string" ),
|
||||
get( "minecraft:entity" ),
|
||||
get( "minecraft:game_profile" ),
|
||||
get( "minecraft:block_pos" ),
|
||||
get( "minecraft:column_pos" ),
|
||||
get( "minecraft:vec3" ),
|
||||
get( "minecraft:vec2" ),
|
||||
get( "minecraft:block_state" ),
|
||||
get( "minecraft:block_predicate" ),
|
||||
get( "minecraft:item_stack" ),
|
||||
get( "minecraft:item_predicate" ),
|
||||
get( "minecraft:color" ),
|
||||
get( "minecraft:component" ),
|
||||
get( "minecraft:message" ),
|
||||
get( "minecraft:nbt_compound_tag" ),
|
||||
get( "minecraft:nbt_tag" ),
|
||||
get( "minecraft:nbt_path" ),
|
||||
get( "minecraft:objective" ),
|
||||
get( "minecraft:objective_criteria" ),
|
||||
get( "minecraft:operation" ),
|
||||
get( "minecraft:particle" ),
|
||||
get( "minecraft:angle" ),
|
||||
get( "minecraft:rotation" ),
|
||||
get( "minecraft:scoreboard_slot" ),
|
||||
get( "minecraft:score_holder" ),
|
||||
get( "minecraft:swizzle" ),
|
||||
get( "minecraft:team" ),
|
||||
get( "minecraft:item_slot" ),
|
||||
get( "minecraft:resource_location" ),
|
||||
get( "minecraft:mob_effect" ),
|
||||
get( "minecraft:function" ),
|
||||
get( "minecraft:entity_anchor" ),
|
||||
get( "minecraft:int_range" ),
|
||||
get( "minecraft:float_range" ),
|
||||
get( "minecraft:item_enchantment" ),
|
||||
get( "minecraft:entity_summon" ),
|
||||
get( "minecraft:dimension" ),
|
||||
get( "minecraft:time" ),
|
||||
get( "minecraft:resource_or_tag" ),
|
||||
get( "minecraft:resource" ),
|
||||
get( "minecraft:template_mirror" ),
|
||||
get( "minecraft:template_rotation" ),
|
||||
get( "minecraft:uuid" )
|
||||
get( "brigadier:bool", VOID ),
|
||||
get( "brigadier:float", FLOAT_RANGE ),
|
||||
get( "brigadier:double", DOUBLE_RANGE ),
|
||||
get( "brigadier:integer", INTEGER_RANGE ),
|
||||
get( "brigadier:long", LONG_RANGE ),
|
||||
get( "brigadier:string", STRING ),
|
||||
get( "minecraft:entity", BYTE ),
|
||||
get( "minecraft:game_profile", VOID ),
|
||||
get( "minecraft:block_pos", VOID ),
|
||||
get( "minecraft:column_pos", VOID ),
|
||||
get( "minecraft:vec3", VOID ),
|
||||
get( "minecraft:vec2", VOID ),
|
||||
get( "minecraft:block_state", VOID ),
|
||||
get( "minecraft:block_predicate", VOID ),
|
||||
get( "minecraft:item_stack", VOID ),
|
||||
get( "minecraft:item_predicate", VOID ),
|
||||
get( "minecraft:color", VOID ),
|
||||
get( "minecraft:component", VOID ),
|
||||
get( "minecraft:message", VOID ),
|
||||
get( "minecraft:nbt_compound_tag", VOID ),
|
||||
get( "minecraft:nbt_tag", VOID ),
|
||||
get( "minecraft:nbt_path", VOID ),
|
||||
get( "minecraft:objective", VOID ),
|
||||
get( "minecraft:objective_criteria", VOID ),
|
||||
get( "minecraft:operation", VOID ),
|
||||
get( "minecraft:particle", VOID ),
|
||||
get( "minecraft:angle", VOID ),
|
||||
get( "minecraft:rotation", VOID ),
|
||||
get( "minecraft:scoreboard_slot", VOID ),
|
||||
get( "minecraft:score_holder", BYTE ),
|
||||
get( "minecraft:swizzle", VOID ),
|
||||
get( "minecraft:team", VOID ),
|
||||
get( "minecraft:item_slot", VOID ),
|
||||
get( "minecraft:resource_location", VOID ),
|
||||
get( "minecraft:mob_effect", VOID ),
|
||||
get( "minecraft:function", VOID ),
|
||||
get( "minecraft:entity_anchor", VOID ),
|
||||
get( "minecraft:int_range", VOID ),
|
||||
get( "minecraft:float_range", VOID ),
|
||||
get( "minecraft:item_enchantment", VOID ),
|
||||
get( "minecraft:entity_summon", VOID ),
|
||||
get( "minecraft:dimension", VOID ),
|
||||
get( "minecraft:time", VOID ),
|
||||
get( "minecraft:resource_or_tag", RAW_STRING ),
|
||||
get( "minecraft:resource", RAW_STRING ),
|
||||
get( "minecraft:template_mirror", VOID ),
|
||||
get( "minecraft:template_rotation", VOID ),
|
||||
get( "minecraft:uuid", VOID ),
|
||||
};
|
||||
|
||||
IDS_1_19_3 = new ArgumentSerializer[]
|
||||
{
|
||||
get( "brigadier:bool" ),
|
||||
get( "brigadier:float" ),
|
||||
get( "brigadier:double" ),
|
||||
get( "brigadier:integer" ),
|
||||
get( "brigadier:long" ),
|
||||
get( "brigadier:string" ),
|
||||
get( "minecraft:entity" ),
|
||||
get( "minecraft:game_profile" ),
|
||||
get( "minecraft:block_pos" ),
|
||||
get( "minecraft:column_pos" ),
|
||||
get( "minecraft:vec3" ),
|
||||
get( "minecraft:vec2" ),
|
||||
get( "minecraft:block_state" ),
|
||||
get( "minecraft:block_predicate" ),
|
||||
get( "minecraft:item_stack" ),
|
||||
get( "minecraft:item_predicate" ),
|
||||
get( "minecraft:color" ),
|
||||
get( "minecraft:component" ),
|
||||
get( "minecraft:message" ),
|
||||
get( "minecraft:nbt_compound_tag" ),
|
||||
get( "minecraft:nbt_tag" ),
|
||||
get( "minecraft:nbt_path" ),
|
||||
get( "minecraft:objective" ),
|
||||
get( "minecraft:objective_criteria" ),
|
||||
get( "minecraft:operation" ),
|
||||
get( "minecraft:particle" ),
|
||||
get( "minecraft:angle" ),
|
||||
get( "minecraft:rotation" ),
|
||||
get( "minecraft:scoreboard_slot" ),
|
||||
get( "minecraft:score_holder" ),
|
||||
get( "minecraft:swizzle" ),
|
||||
get( "minecraft:team" ),
|
||||
get( "minecraft:item_slot" ),
|
||||
get( "minecraft:resource_location" ),
|
||||
get( "minecraft:function" ),
|
||||
get( "minecraft:entity_anchor" ),
|
||||
get( "minecraft:int_range" ),
|
||||
get( "minecraft:float_range" ),
|
||||
get( "minecraft:dimension" ),
|
||||
get( "minecraft:gamemode" ),
|
||||
get( "minecraft:time" ),
|
||||
get( "minecraft:resource_or_tag" ),
|
||||
get( "minecraft:resource_or_tag_key" ),
|
||||
get( "minecraft:resource" ),
|
||||
get( "minecraft:resource_key" ),
|
||||
get( "minecraft:template_mirror" ),
|
||||
get( "minecraft:template_rotation" ),
|
||||
get( "minecraft:uuid" )
|
||||
get( "brigadier:bool", VOID ),
|
||||
get( "brigadier:float", FLOAT_RANGE ),
|
||||
get( "brigadier:double", DOUBLE_RANGE ),
|
||||
get( "brigadier:integer", INTEGER_RANGE ),
|
||||
get( "brigadier:long", LONG_RANGE ),
|
||||
get( "brigadier:string", STRING ),
|
||||
get( "minecraft:entity", BYTE ),
|
||||
get( "minecraft:game_profile", VOID ),
|
||||
get( "minecraft:block_pos", VOID ),
|
||||
get( "minecraft:column_pos", VOID ),
|
||||
get( "minecraft:vec3", VOID ),
|
||||
get( "minecraft:vec2", VOID ),
|
||||
get( "minecraft:block_state", VOID ),
|
||||
get( "minecraft:block_predicate", VOID ),
|
||||
get( "minecraft:item_stack", VOID ),
|
||||
get( "minecraft:item_predicate", VOID ),
|
||||
get( "minecraft:color", VOID ),
|
||||
get( "minecraft:component", VOID ),
|
||||
get( "minecraft:message", VOID ),
|
||||
get( "minecraft:nbt_compound_tag", VOID ),
|
||||
get( "minecraft:nbt_tag", VOID ),
|
||||
get( "minecraft:nbt_path", VOID ),
|
||||
get( "minecraft:objective", VOID ),
|
||||
get( "minecraft:objective_criteria", VOID ),
|
||||
get( "minecraft:operation", VOID ),
|
||||
get( "minecraft:particle", VOID ),
|
||||
get( "minecraft:angle", VOID ),
|
||||
get( "minecraft:rotation", VOID ),
|
||||
get( "minecraft:scoreboard_slot", VOID ),
|
||||
get( "minecraft:score_holder", BYTE ),
|
||||
get( "minecraft:swizzle", VOID ),
|
||||
get( "minecraft:team", VOID ),
|
||||
get( "minecraft:item_slot", VOID ),
|
||||
get( "minecraft:resource_location", VOID ),
|
||||
get( "minecraft:function", VOID ),
|
||||
get( "minecraft:entity_anchor", VOID ),
|
||||
get( "minecraft:int_range", VOID ),
|
||||
get( "minecraft:float_range", VOID ),
|
||||
get( "minecraft:dimension", VOID ),
|
||||
get( "minecraft:gamemode", VOID ),
|
||||
get( "minecraft:time", VOID ),
|
||||
get( "minecraft:resource_or_tag", RAW_STRING ),
|
||||
get( "minecraft:resource_or_tag_key", RAW_STRING ),
|
||||
get( "minecraft:resource", RAW_STRING ),
|
||||
get( "minecraft:resource_key", RAW_STRING ),
|
||||
get( "minecraft:template_mirror", VOID ),
|
||||
get( "minecraft:template_rotation", VOID ),
|
||||
get( "minecraft:uuid", VOID )
|
||||
};
|
||||
|
||||
IDS_1_19_4 = new ArgumentSerializer[]
|
||||
{
|
||||
get( "brigadier:bool", VOID ),
|
||||
get( "brigadier:float", FLOAT_RANGE ),
|
||||
get( "brigadier:double", DOUBLE_RANGE ),
|
||||
get( "brigadier:integer", INTEGER_RANGE ),
|
||||
get( "brigadier:long", LONG_RANGE ),
|
||||
get( "brigadier:string", STRING ),
|
||||
get( "minecraft:entity", BYTE ),
|
||||
get( "minecraft:game_profile", VOID ),
|
||||
get( "minecraft:block_pos", VOID ),
|
||||
get( "minecraft:column_pos", VOID ),
|
||||
get( "minecraft:vec3", VOID ),
|
||||
get( "minecraft:vec2", VOID ),
|
||||
get( "minecraft:block_state", VOID ),
|
||||
get( "minecraft:block_predicate", VOID ),
|
||||
get( "minecraft:item_stack", VOID ),
|
||||
get( "minecraft:item_predicate", VOID ),
|
||||
get( "minecraft:color", VOID ),
|
||||
get( "minecraft:component", VOID ),
|
||||
get( "minecraft:message", VOID ),
|
||||
get( "minecraft:nbt_compound_tag", VOID ),
|
||||
get( "minecraft:nbt_tag", VOID ),
|
||||
get( "minecraft:nbt_path", VOID ),
|
||||
get( "minecraft:objective", VOID ),
|
||||
get( "minecraft:objective_criteria", VOID ),
|
||||
get( "minecraft:operation", VOID ),
|
||||
get( "minecraft:particle", VOID ),
|
||||
get( "minecraft:angle", VOID ),
|
||||
get( "minecraft:rotation", VOID ),
|
||||
get( "minecraft:scoreboard_slot", VOID ),
|
||||
get( "minecraft:score_holder", BYTE ),
|
||||
get( "minecraft:swizzle", VOID ),
|
||||
get( "minecraft:team", VOID ),
|
||||
get( "minecraft:item_slot", VOID ),
|
||||
get( "minecraft:resource_location", VOID ),
|
||||
get( "minecraft:function", VOID ),
|
||||
get( "minecraft:entity_anchor", VOID ),
|
||||
get( "minecraft:int_range", VOID ),
|
||||
get( "minecraft:float_range", VOID ),
|
||||
get( "minecraft:dimension", VOID ),
|
||||
get( "minecraft:gamemode", VOID ),
|
||||
get( "minecraft:time", INTEGER ),
|
||||
get( "minecraft:resource_or_tag", RAW_STRING ),
|
||||
get( "minecraft:resource_or_tag_key", RAW_STRING ),
|
||||
get( "minecraft:resource", RAW_STRING ),
|
||||
get( "minecraft:resource_key", RAW_STRING ),
|
||||
get( "minecraft:template_mirror", VOID ),
|
||||
get( "minecraft:template_rotation", VOID ),
|
||||
get( "minecraft:uuid", VOID ),
|
||||
get( "minecraft:heightmap", VOID )
|
||||
};
|
||||
}
|
||||
|
||||
@ -689,9 +751,9 @@ public class Commands extends DefinedPacket
|
||||
PROVIDERS.put( name, serializer );
|
||||
}
|
||||
|
||||
private static ArgumentSerializer get(String name)
|
||||
private static ArgumentSerializer get(String name, ArgumentSerializer serializer)
|
||||
{
|
||||
return PROVIDERS.get( name );
|
||||
return serializer;
|
||||
}
|
||||
|
||||
private static ArgumentType<?> read(ByteBuf buf, int protocolVersion)
|
||||
@ -703,7 +765,10 @@ public class Commands extends DefinedPacket
|
||||
{
|
||||
key = readVarInt( buf );
|
||||
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_3 )
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_4 )
|
||||
{
|
||||
reader = IDS_1_19_4[(Integer) key];
|
||||
} else if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_3 )
|
||||
{
|
||||
reader = IDS_1_19_3[(Integer) key];
|
||||
} else
|
||||
|
@ -39,6 +39,7 @@ public class Login extends DefinedPacket
|
||||
private boolean debug;
|
||||
private boolean flat;
|
||||
private Location deathLocation;
|
||||
private int portalCooldown;
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
@ -127,6 +128,10 @@ public class Login extends DefinedPacket
|
||||
deathLocation = new Location( readString( buf ), buf.readLong() );
|
||||
}
|
||||
}
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20 )
|
||||
{
|
||||
portalCooldown = readVarInt( buf );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -220,6 +225,10 @@ public class Login extends DefinedPacket
|
||||
buf.writeBoolean( false );
|
||||
}
|
||||
}
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20 )
|
||||
{
|
||||
writeVarInt( portalCooldown, buf );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -29,6 +29,7 @@ public class Respawn extends DefinedPacket
|
||||
private boolean flat;
|
||||
private boolean copyMeta;
|
||||
private Location deathLocation;
|
||||
private int portalCooldown;
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
@ -73,6 +74,10 @@ public class Respawn extends DefinedPacket
|
||||
deathLocation = new Location( readString( buf ), buf.readLong() );
|
||||
}
|
||||
}
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20 )
|
||||
{
|
||||
portalCooldown = readVarInt( buf );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -123,6 +128,10 @@ public class Respawn extends DefinedPacket
|
||||
buf.writeBoolean( false );
|
||||
}
|
||||
}
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20 )
|
||||
{
|
||||
writeVarInt( portalCooldown, buf );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -17,21 +17,27 @@ public class ServerData extends DefinedPacket
|
||||
{
|
||||
|
||||
private String motd;
|
||||
private String icon;
|
||||
private Object icon;
|
||||
private boolean preview;
|
||||
private boolean enforceSecure;
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
if ( buf.readBoolean() )
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_4 || buf.readBoolean() )
|
||||
{
|
||||
motd = readString( buf, 262144 );
|
||||
}
|
||||
if ( buf.readBoolean() )
|
||||
{
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_4 )
|
||||
{
|
||||
icon = DefinedPacket.readArray( buf );
|
||||
} else
|
||||
{
|
||||
icon = readString( buf );
|
||||
}
|
||||
}
|
||||
|
||||
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_19_3 )
|
||||
{
|
||||
@ -48,18 +54,32 @@ public class ServerData extends DefinedPacket
|
||||
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
if ( motd != null )
|
||||
{
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_4 )
|
||||
{
|
||||
buf.writeBoolean( true );
|
||||
}
|
||||
writeString( motd, buf, 262144 );
|
||||
} else
|
||||
{
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_4 )
|
||||
{
|
||||
throw new IllegalArgumentException( "MOTD required for this version" );
|
||||
}
|
||||
|
||||
buf.writeBoolean( false );
|
||||
}
|
||||
|
||||
if ( icon != null )
|
||||
{
|
||||
buf.writeBoolean( true );
|
||||
writeString( icon, buf );
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_4 )
|
||||
{
|
||||
DefinedPacket.writeArray( (byte[]) icon, buf );
|
||||
} else
|
||||
{
|
||||
writeString( (String) icon, buf );
|
||||
}
|
||||
} else
|
||||
{
|
||||
buf.writeBoolean( false );
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-proxy</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Proxy</name>
|
||||
@ -27,32 +27,27 @@
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-codec-haproxy</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-codec-http</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-handler</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-transport-native-epoll</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<classifier>linux-x86_64</classifier>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-transport-native-epoll</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<classifier>linux-aarch_64</classifier>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
@ -99,28 +94,28 @@
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.29</version>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<version>8.0.33</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<!-- add these back in as they are not exposed by the API -->
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-resolver-provider</artifactId>
|
||||
<version>3.8.5</version>
|
||||
<version>3.9.2</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.resolver</groupId>
|
||||
<artifactId>maven-resolver-connector-basic</artifactId>
|
||||
<version>1.7.3</version>
|
||||
<version>1.9.10</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.resolver</groupId>
|
||||
<artifactId>maven-resolver-transport-http</artifactId>
|
||||
<version>1.7.3</version>
|
||||
<version>1.9.10</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@ -625,12 +625,16 @@ public class BungeeCord extends ProxyServer
|
||||
}
|
||||
}
|
||||
|
||||
public UserConnection getPlayerByOfflineUUID(UUID name)
|
||||
public UserConnection getPlayerByOfflineUUID(UUID uuid)
|
||||
{
|
||||
if ( uuid.version() != 3 )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
connectionLock.readLock().lock();
|
||||
try
|
||||
{
|
||||
return connectionsByOfflineUUID.get( name );
|
||||
return connectionsByOfflineUUID.get( uuid );
|
||||
} finally
|
||||
{
|
||||
connectionLock.readLock().unlock();
|
||||
@ -687,10 +691,10 @@ public class BungeeCord extends ProxyServer
|
||||
{
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_13 )
|
||||
{
|
||||
return new PluginMessage( "minecraft:register", Util.format( Iterables.transform( pluginChannels, PluginMessage.MODERNISE ), "\00" ).getBytes( Charsets.UTF_8 ), false );
|
||||
return new PluginMessage( "minecraft:register", String.join( "\00", Iterables.transform( pluginChannels, PluginMessage.MODERNISE ) ).getBytes( Charsets.UTF_8 ), false );
|
||||
}
|
||||
|
||||
return new PluginMessage( "REGISTER", Util.format( pluginChannels, "\00" ).getBytes( Charsets.UTF_8 ), false );
|
||||
return new PluginMessage( "REGISTER", String.join( "\00", pluginChannels ).getBytes( Charsets.UTF_8 ), false );
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -751,12 +755,17 @@ public class BungeeCord extends ProxyServer
|
||||
|
||||
public void addConnection(UserConnection con)
|
||||
{
|
||||
UUID offlineId = con.getPendingConnection().getOfflineId();
|
||||
if ( offlineId != null && offlineId.version() != 3 )
|
||||
{
|
||||
throw new IllegalArgumentException( "Offline UUID must be a name-based UUID" );
|
||||
}
|
||||
connectionLock.writeLock().lock();
|
||||
try
|
||||
{
|
||||
connections.put( con.getName(), con );
|
||||
connectionsByUUID.put( con.getUniqueId(), con );
|
||||
connectionsByOfflineUUID.put( con.getPendingConnection().getOfflineId(), con );
|
||||
connectionsByOfflineUUID.put( offlineId, con );
|
||||
} finally
|
||||
{
|
||||
connectionLock.writeLock().unlock();
|
||||
|
@ -182,7 +182,7 @@ public class BungeeServerInfo implements ServerInfo
|
||||
new Bootstrap()
|
||||
.channel( PipelineUtils.getChannel( socketAddress ) )
|
||||
.group( BungeeCord.getInstance().eventLoops )
|
||||
.handler( PipelineUtils.BASE )
|
||||
.handler( PipelineUtils.BASE_SERVERSIDE )
|
||||
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, BungeeCord.getInstance().getConfig().getRemotePingTimeout() )
|
||||
.remoteAddress( socketAddress )
|
||||
.connect()
|
||||
|
@ -225,7 +225,8 @@ public class ServerConnector extends PacketHandler
|
||||
|
||||
// Set tab list size, TODO: what shall we do about packet mutability
|
||||
Login modLogin = new Login( login.getEntityId(), login.isHardcore(), login.getGameMode(), login.getPreviousGameMode(), login.getWorldNames(), login.getDimensions(), login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(),
|
||||
(byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.getSimulationDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isDebug(), login.isFlat(), login.getDeathLocation() );
|
||||
(byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.getSimulationDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isDebug(), login.isFlat(), login.getDeathLocation(),
|
||||
login.getPortalCooldown() );
|
||||
|
||||
user.unsafe().sendPacket( modLogin );
|
||||
|
||||
@ -243,7 +244,8 @@ public class ServerConnector extends PacketHandler
|
||||
}
|
||||
user.getSentBossBars().clear();
|
||||
|
||||
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), false, login.getDeathLocation() ) );
|
||||
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), false, login.getDeathLocation(),
|
||||
login.getPortalCooldown() ) );
|
||||
user.getServer().disconnect( "Quitting" );
|
||||
} else
|
||||
{
|
||||
@ -292,11 +294,13 @@ public class ServerConnector extends PacketHandler
|
||||
user.setDimensionChange( true );
|
||||
if ( login.getDimension() == user.getDimension() )
|
||||
{
|
||||
user.unsafe().sendPacket( new Respawn( (Integer) login.getDimension() >= 0 ? -1 : 0, login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), false, login.getDeathLocation() ) );
|
||||
user.unsafe().sendPacket( new Respawn( (Integer) login.getDimension() >= 0 ? -1 : 0, login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(),
|
||||
false, login.getDeathLocation(), login.getPortalCooldown() ) );
|
||||
}
|
||||
|
||||
user.setServerEntityId( login.getEntityId() );
|
||||
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), false, login.getDeathLocation() ) );
|
||||
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(),
|
||||
false, login.getDeathLocation(), login.getPortalCooldown() ) );
|
||||
if ( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_14 )
|
||||
{
|
||||
user.unsafe().sendPacket( new ViewDistance( login.getViewDistance() ) );
|
||||
|
@ -320,7 +320,7 @@ public final class UserConnection implements ProxiedPlayer
|
||||
@Override
|
||||
protected void initChannel(Channel ch) throws Exception
|
||||
{
|
||||
PipelineUtils.BASE.initChannel( ch );
|
||||
PipelineUtils.BASE_SERVERSIDE.initChannel( ch );
|
||||
ch.pipeline().addAfter( PipelineUtils.FRAME_DECODER, PipelineUtils.PACKET_DECODER, new MinecraftDecoder( Protocol.HANDSHAKE, false, getPendingConnection().getVersion() ) );
|
||||
ch.pipeline().addAfter( PipelineUtils.FRAME_PREPENDER, PipelineUtils.PACKET_ENCODER, new MinecraftEncoder( Protocol.HANDSHAKE, false, getPendingConnection().getVersion() ) );
|
||||
ch.pipeline().get( HandlerBoss.class ).setHandler( new ServerConnector( bungee, UserConnection.this, target ) );
|
||||
|
@ -1,7 +1,10 @@
|
||||
package net.md_5.bungee.command;
|
||||
|
||||
import java.util.Collections;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
public class CommandIP extends PlayerCommand
|
||||
@ -26,7 +29,17 @@ public class CommandIP extends PlayerCommand
|
||||
sender.sendMessage( ProxyServer.getInstance().getTranslation( "user_not_online" ) );
|
||||
} else
|
||||
{
|
||||
sender.sendMessage( ProxyServer.getInstance().getTranslation( "command_ip", args[0], user.getSocketAddress() ) );
|
||||
sender.sendMessage( new ComponentBuilder()
|
||||
.appendLegacy( ProxyServer.getInstance().getTranslation( "command_ip", user.getName(), user.getSocketAddress() ) )
|
||||
.event( new ClickEvent( ClickEvent.Action.COPY_TO_CLIPBOARD, user.getSocketAddress().toString() ) )
|
||||
.create()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<String> onTabComplete(CommandSender sender, String[] args)
|
||||
{
|
||||
return ( args.length == 1 ) ? super.onTabComplete( sender, args ) : Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
@ -698,9 +698,10 @@ public class DownstreamBridge extends PacketHandler
|
||||
@Override
|
||||
public void handle(ServerData serverData) throws Exception
|
||||
{
|
||||
serverData.setMotd( null );
|
||||
serverData.setIcon( null );
|
||||
con.unsafe().sendPacket( serverData );
|
||||
// 1.19.4 doesn't allow empty MOTD and we probably don't want to simulate a ping event to get the "correct" one
|
||||
// serverData.setMotd( null );
|
||||
// serverData.setIcon( null );
|
||||
// con.unsafe().sendPacket( serverData );
|
||||
throw CancelSendSignal.INSTANCE;
|
||||
}
|
||||
|
||||
|
@ -548,14 +548,14 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
if ( oldName != null )
|
||||
{
|
||||
// TODO See #1218
|
||||
oldName.disconnect( bungee.getTranslation( "already_connected_proxy" ) );
|
||||
disconnect( bungee.getTranslation( "already_connected_proxy" ) );
|
||||
}
|
||||
// And then also for their old UUID
|
||||
ProxiedPlayer oldID = bungee.getPlayer( getUniqueId() );
|
||||
if ( oldID != null )
|
||||
{
|
||||
// TODO See #1218
|
||||
oldID.disconnect( bungee.getTranslation( "already_connected_proxy" ) );
|
||||
disconnect( bungee.getTranslation( "already_connected_proxy" ) );
|
||||
}
|
||||
} else
|
||||
{
|
||||
|
@ -79,6 +79,9 @@ public abstract class EntityMap
|
||||
case ProtocolConstants.MINECRAFT_1_19_1:
|
||||
case ProtocolConstants.MINECRAFT_1_19_3:
|
||||
return EntityMap_1_16_2.INSTANCE_1_19_1;
|
||||
case ProtocolConstants.MINECRAFT_1_19_4:
|
||||
case ProtocolConstants.MINECRAFT_1_20:
|
||||
return EntityMap_1_16_2.INSTANCE_1_19_4;
|
||||
}
|
||||
throw new RuntimeException( "Version " + version + " has no entity map" );
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ class EntityMap_1_16_2 extends EntityMap
|
||||
static final EntityMap_1_16_2 INSTANCE_1_18 = new EntityMap_1_16_2( 0x04, 0x2D );
|
||||
static final EntityMap_1_16_2 INSTANCE_1_19 = new EntityMap_1_16_2( 0x02, 0x2F );
|
||||
static final EntityMap_1_16_2 INSTANCE_1_19_1 = new EntityMap_1_16_2( 0x02, 0x30 );
|
||||
static final EntityMap_1_16_2 INSTANCE_1_19_4 = new EntityMap_1_16_2( 0x03, 0x30 );
|
||||
//
|
||||
private final int spawnPlayerId;
|
||||
private final int spectateId;
|
||||
|
@ -30,6 +30,8 @@ import java.net.SocketAddress;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.Util;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
@ -42,6 +44,7 @@ import net.md_5.bungee.protocol.MinecraftDecoder;
|
||||
import net.md_5.bungee.protocol.MinecraftEncoder;
|
||||
import net.md_5.bungee.protocol.Protocol;
|
||||
import net.md_5.bungee.protocol.Varint21FrameDecoder;
|
||||
import net.md_5.bungee.protocol.Varint21LengthFieldExtraBufPrepender;
|
||||
import net.md_5.bungee.protocol.Varint21LengthFieldPrepender;
|
||||
|
||||
public class PipelineUtils
|
||||
@ -82,9 +85,11 @@ public class PipelineUtils
|
||||
}
|
||||
}
|
||||
};
|
||||
public static final Base BASE = new Base();
|
||||
public static final Base BASE = new Base( false );
|
||||
public static final Base BASE_SERVERSIDE = new Base( true );
|
||||
private static final KickStringWriter legacyKicker = new KickStringWriter();
|
||||
private static final Varint21LengthFieldPrepender framePrepender = new Varint21LengthFieldPrepender();
|
||||
private static final Varint21LengthFieldExtraBufPrepender serverFramePrepender = new Varint21LengthFieldExtraBufPrepender();
|
||||
public static final String TIMEOUT_HANDLER = "timeout";
|
||||
public static final String PACKET_DECODER = "packet-decoder";
|
||||
public static final String PACKET_ENCODER = "packet-encoder";
|
||||
@ -152,9 +157,13 @@ public class PipelineUtils
|
||||
private static final int HIGH_MARK = Integer.getInteger( "net.md_5.bungee.high_mark", 2 << 20 ); // 2 mb
|
||||
private static final WriteBufferWaterMark MARK = new WriteBufferWaterMark( LOW_MARK, HIGH_MARK );
|
||||
|
||||
@NoArgsConstructor // for backwards compatibility
|
||||
@AllArgsConstructor
|
||||
public static final class Base extends ChannelInitializer<Channel>
|
||||
{
|
||||
|
||||
private boolean toServer = false;
|
||||
|
||||
@Override
|
||||
public void initChannel(Channel ch) throws Exception
|
||||
{
|
||||
@ -170,7 +179,9 @@ public class PipelineUtils
|
||||
|
||||
ch.pipeline().addLast( FRAME_DECODER, new Varint21FrameDecoder() );
|
||||
ch.pipeline().addLast( TIMEOUT_HANDLER, new ReadTimeoutHandler( BungeeCord.getInstance().config.getTimeout(), TimeUnit.MILLISECONDS ) );
|
||||
ch.pipeline().addLast( FRAME_PREPENDER, framePrepender );
|
||||
// No encryption bungee -> server, therefore use extra buffer to avoid copying everything for length prepending
|
||||
// Not used bungee -> client as header would need to be encrypted separately through expensive JNI call
|
||||
ch.pipeline().addLast( FRAME_PREPENDER, ( toServer ) ? serverFramePrepender : framePrepender );
|
||||
|
||||
ch.pipeline().addLast( BOSS_HANDLER, new HandlerBoss() );
|
||||
}
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-query</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-Query</name>
|
||||
@ -22,7 +22,6 @@
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-transport</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-parent</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-slf4j</artifactId>
|
||||
<version>1.19-R0.1-SNAPSHOT</version>
|
||||
<version>1.20-R0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>BungeeCord-SLF4J</name>
|
||||
@ -28,7 +28,7 @@
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.7.32</version>
|
||||
<version>1.7.36</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
Loading…
Reference in New Issue
Block a user