Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-30 18:10:12 +01:00
Merge pull request #1653 from KennyTV/abstraction
Remove deprecated api, remove a bit of magic
Dieser Commit ist enthalten in:
Commit
323ceb9ced
@ -1,7 +1,6 @@
|
|||||||
package us.myles.ViaVersion;
|
package us.myles.ViaVersion;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -9,7 +8,6 @@ import org.bukkit.plugin.Plugin;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
import us.myles.ViaVersion.api.ViaAPI;
|
import us.myles.ViaVersion.api.ViaAPI;
|
||||||
import us.myles.ViaVersion.api.ViaVersion;
|
|
||||||
import us.myles.ViaVersion.api.command.ViaCommandSender;
|
import us.myles.ViaVersion.api.command.ViaCommandSender;
|
||||||
import us.myles.ViaVersion.api.configuration.ConfigurationProvider;
|
import us.myles.ViaVersion.api.configuration.ConfigurationProvider;
|
||||||
import us.myles.ViaVersion.api.platform.TaskId;
|
import us.myles.ViaVersion.api.platform.TaskId;
|
||||||
@ -28,19 +26,20 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform {
|
public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform {
|
||||||
|
|
||||||
|
private static ViaVersionPlugin instance;
|
||||||
private final BukkitCommandHandler commandHandler;
|
private final BukkitCommandHandler commandHandler;
|
||||||
private boolean compatSpigotBuild = false;
|
|
||||||
private boolean spigot = true;
|
|
||||||
private boolean lateBind = false;
|
|
||||||
private boolean protocolSupport = false;
|
|
||||||
@Getter
|
|
||||||
private final BukkitViaConfig conf;
|
private final BukkitViaConfig conf;
|
||||||
@Getter
|
|
||||||
private final ViaAPI<Player> api = new BukkitViaAPI(this);
|
private final ViaAPI<Player> api = new BukkitViaAPI(this);
|
||||||
private final List<Runnable> queuedTasks = new ArrayList<>();
|
private final List<Runnable> queuedTasks = new ArrayList<>();
|
||||||
private final List<Runnable> asyncQueuedTasks = new ArrayList<>();
|
private final List<Runnable> asyncQueuedTasks = new ArrayList<>();
|
||||||
|
private final boolean protocolSupport;
|
||||||
|
private boolean compatSpigotBuild;
|
||||||
|
private boolean spigot = true;
|
||||||
|
private boolean lateBind;
|
||||||
|
|
||||||
public ViaVersionPlugin() {
|
public ViaVersionPlugin() {
|
||||||
|
instance = this;
|
||||||
|
|
||||||
// Command handler
|
// Command handler
|
||||||
commandHandler = new BukkitCommandHandler();
|
commandHandler = new BukkitCommandHandler();
|
||||||
// Init platform
|
// Init platform
|
||||||
@ -52,8 +51,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform {
|
|||||||
.build());
|
.build());
|
||||||
// Config magic
|
// Config magic
|
||||||
conf = new BukkitViaConfig();
|
conf = new BukkitViaConfig();
|
||||||
// For compatibility
|
|
||||||
ViaVersion.setInstance(this);
|
|
||||||
|
|
||||||
// Check if we're using protocol support too
|
// Check if we're using protocol support too
|
||||||
protocolSupport = Bukkit.getPluginManager().getPlugin("ProtocolSupport") != null;
|
protocolSupport = Bukkit.getPluginManager().getPlugin("ProtocolSupport") != null;
|
||||||
@ -127,19 +124,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform {
|
|||||||
Via.getManager().destroy();
|
Via.getManager().destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCompatSpigotBuild() {
|
|
||||||
return compatSpigotBuild;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public boolean isSpigot() {
|
|
||||||
return this.spigot;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isProtocolSupport() {
|
|
||||||
return protocolSupport;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPlatformName() {
|
public String getPlatformName() {
|
||||||
return Bukkit.getServer().getName();
|
return Bukkit.getServer().getName();
|
||||||
@ -264,4 +248,30 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform {
|
|||||||
public boolean isOldClientsAllowed() {
|
public boolean isOldClientsAllowed() {
|
||||||
return !protocolSupport; // Use protocolsupport for older clients
|
return !protocolSupport; // Use protocolsupport for older clients
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BukkitViaConfig getConf() {
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViaAPI<Player> getApi() {
|
||||||
|
return api;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCompatSpigotBuild() {
|
||||||
|
return compatSpigotBuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSpigot() {
|
||||||
|
return this.spigot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isProtocolSupport() {
|
||||||
|
return protocolSupport;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ViaVersionPlugin getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package us.myles.ViaVersion.api;
|
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import org.apache.commons.lang.Validate;
|
|
||||||
import us.myles.ViaVersion.ViaVersionPlugin;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class ViaVersion {
|
|
||||||
@Getter
|
|
||||||
private static ViaVersionAPI instance;
|
|
||||||
@Getter
|
|
||||||
private static ViaVersionConfig config;
|
|
||||||
|
|
||||||
public static void setInstance(ViaVersionPlugin plugin) {
|
|
||||||
Validate.isTrue(instance == null, "Instance is already set");
|
|
||||||
ViaVersion.instance = (ViaVersionAPI) plugin.getApi();
|
|
||||||
ViaVersion.config = plugin.getConf();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,144 +0,0 @@
|
|||||||
package us.myles.ViaVersion.api;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import us.myles.ViaVersion.api.boss.BossBar;
|
|
||||||
import us.myles.ViaVersion.api.boss.BossColor;
|
|
||||||
import us.myles.ViaVersion.api.boss.BossStyle;
|
|
||||||
import us.myles.ViaVersion.api.command.ViaVersionCommand;
|
|
||||||
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
|
|
||||||
|
|
||||||
import java.util.SortedSet;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public interface ViaVersionAPI extends ViaAPI<Player> {
|
|
||||||
/**
|
|
||||||
* Is the player connection modified by ViaVersion?
|
|
||||||
*
|
|
||||||
* @param player Bukkit player object
|
|
||||||
* @return True if the client is modified (At the moment it also means version 1.9 and higher)
|
|
||||||
* @deprecated As of 0.9.9, because all players are ported use {@link #getPlayerVersion(Player)}
|
|
||||||
*/
|
|
||||||
boolean isPorted(Player player);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get protocol number from a player
|
|
||||||
* Will also retrieve version from ProtocolSupport if it's being used.
|
|
||||||
*
|
|
||||||
* @param player Bukkit player object
|
|
||||||
* @return Protocol ID, For example (47=1.8-1.8.8, 107=1.9, 108=1.9.1)
|
|
||||||
*/
|
|
||||||
int getPlayerVersion(Player player);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get protocol number from a player
|
|
||||||
*
|
|
||||||
* @param uuid UUID of a player
|
|
||||||
* @return Protocol ID, For example (47=1.8-1.8.8, 107=1.9, 108=1.9.1)
|
|
||||||
*/
|
|
||||||
int getPlayerVersion(UUID uuid);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is player using 1.9?
|
|
||||||
*
|
|
||||||
* @param playerUUID UUID of a player
|
|
||||||
* @return True if the client is on 1.9
|
|
||||||
* @deprecated As of 0.9.9, because all players are ported use {@link #getPlayerVersion(UUID)}
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
boolean isPorted(UUID playerUUID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the version of the plugin
|
|
||||||
*
|
|
||||||
* @return Plugin version
|
|
||||||
*/
|
|
||||||
String getVersion();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a raw packet to the player (Use new IDs)
|
|
||||||
*
|
|
||||||
* @param player The player to send packet
|
|
||||||
* @param packet The packet, you need a VarInt ID then the packet contents.
|
|
||||||
* @throws IllegalArgumentException If not on 1.9 throws IllegalArg
|
|
||||||
*/
|
|
||||||
void sendRawPacket(Player player, ByteBuf packet) throws IllegalArgumentException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a raw packet to the player (Use new IDs)
|
|
||||||
*
|
|
||||||
* @param uuid The uuid from the player to send packet
|
|
||||||
* @param packet The packet, you need a VarInt ID then the packet contents.
|
|
||||||
* @throws IllegalArgumentException If not on 1.9 throws IllegalArg
|
|
||||||
*/
|
|
||||||
void sendRawPacket(UUID uuid, ByteBuf packet) throws IllegalArgumentException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new bossbar instance
|
|
||||||
*
|
|
||||||
* @param title The title
|
|
||||||
* @param color The color
|
|
||||||
* @param style The style
|
|
||||||
* @return BossBar instance
|
|
||||||
*/
|
|
||||||
BossBar createBossBar(String title, BossColor color, BossStyle style);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new bossbar instance
|
|
||||||
*
|
|
||||||
* @param title The title
|
|
||||||
* @param health Number between 0 and 1
|
|
||||||
* @param color The color
|
|
||||||
* @param style The style
|
|
||||||
* @return BossBar instance
|
|
||||||
*/
|
|
||||||
BossBar createBossBar(String title, float health, BossColor color, BossStyle style);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get if global debug is enabled
|
|
||||||
*
|
|
||||||
* @return true if debug is enabled
|
|
||||||
*/
|
|
||||||
boolean isDebug();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get ViaVersions commands handler
|
|
||||||
*
|
|
||||||
* @return commands handler
|
|
||||||
*/
|
|
||||||
ViaVersionCommand getCommandHandler();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get if this version is a compatibility build for spigot.
|
|
||||||
* Eg. 1.9.1 / 1.9.2 allow certain versions to connect
|
|
||||||
*
|
|
||||||
* @return True if it is
|
|
||||||
*/
|
|
||||||
boolean isCompatSpigotBuild();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the supported protocol versions
|
|
||||||
* This method removes any blocked protocol versions.
|
|
||||||
*
|
|
||||||
* @return a list of protocol versions
|
|
||||||
* @see ProtocolRegistry#getSupportedVersions() for full list.
|
|
||||||
*/
|
|
||||||
SortedSet<Integer> getSupportedVersions();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets if the server uses spigot
|
|
||||||
* <p>
|
|
||||||
* Note: Will only work after ViaVersion load
|
|
||||||
*
|
|
||||||
* @return True if spigot
|
|
||||||
*/
|
|
||||||
boolean isSpigot();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets if protocol support is also being used.
|
|
||||||
*
|
|
||||||
* @return True if it is being used.
|
|
||||||
*/
|
|
||||||
boolean isProtocolSupport();
|
|
||||||
}
|
|
@ -3,10 +3,6 @@ package us.myles.ViaVersion.bukkit.classgenerator;
|
|||||||
import javassist.*;
|
import javassist.*;
|
||||||
import javassist.expr.ConstructorCall;
|
import javassist.expr.ConstructorCall;
|
||||||
import javassist.expr.ExprEditor;
|
import javassist.expr.ExprEditor;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventException;
|
import org.bukkit.event.EventException;
|
||||||
@ -15,14 +11,15 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.plugin.EventExecutor;
|
import org.bukkit.plugin.EventExecutor;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import us.myles.ViaVersion.ViaVersionPlugin;
|
import us.myles.ViaVersion.ViaVersionPlugin;
|
||||||
import us.myles.ViaVersion.api.ViaVersion;
|
|
||||||
import us.myles.ViaVersion.bukkit.handlers.BukkitDecodeHandler;
|
import us.myles.ViaVersion.bukkit.handlers.BukkitDecodeHandler;
|
||||||
import us.myles.ViaVersion.bukkit.handlers.BukkitEncodeHandler;
|
import us.myles.ViaVersion.bukkit.handlers.BukkitEncodeHandler;
|
||||||
import us.myles.ViaVersion.bukkit.util.NMSUtil;
|
import us.myles.ViaVersion.bukkit.util.NMSUtil;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
public class ClassGenerator {
|
public class ClassGenerator {
|
||||||
private static HandlerConstructor constructor = new BasicHandlerConstructor();
|
private static HandlerConstructor constructor = new BasicHandlerConstructor();
|
||||||
private static String psPackage = null;
|
private static String psPackage;
|
||||||
private static Class psConnectListener;
|
private static Class psConnectListener;
|
||||||
|
|
||||||
public static HandlerConstructor getConstructor() {
|
public static HandlerConstructor getConstructor() {
|
||||||
@ -30,14 +27,14 @@ public class ClassGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void generate() {
|
public static void generate() {
|
||||||
if (ViaVersion.getInstance().isCompatSpigotBuild() || ViaVersion.getInstance().isProtocolSupport()) {
|
if (ViaVersionPlugin.getInstance().isCompatSpigotBuild() || ViaVersionPlugin.getInstance().isProtocolSupport()) {
|
||||||
try {
|
try {
|
||||||
ClassPool pool = ClassPool.getDefault();
|
ClassPool pool = ClassPool.getDefault();
|
||||||
for (Plugin p : Bukkit.getPluginManager().getPlugins()) {
|
for (Plugin p : Bukkit.getPluginManager().getPlugins()) {
|
||||||
pool.insertClassPath(new LoaderClassPath(p.getClass().getClassLoader()));
|
pool.insertClassPath(new LoaderClassPath(p.getClass().getClassLoader()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ViaVersion.getInstance().isCompatSpigotBuild()) {
|
if (ViaVersionPlugin.getInstance().isCompatSpigotBuild()) {
|
||||||
Class decodeSuper = NMSUtil.nms("PacketDecoder");
|
Class decodeSuper = NMSUtil.nms("PacketDecoder");
|
||||||
Class encodeSuper = NMSUtil.nms("PacketEncoder");
|
Class encodeSuper = NMSUtil.nms("PacketEncoder");
|
||||||
// Generate the classes
|
// Generate the classes
|
||||||
|
@ -8,7 +8,6 @@ import org.bukkit.event.entity.PlayerDeathEvent;
|
|||||||
import us.myles.ViaVersion.ViaVersionPlugin;
|
import us.myles.ViaVersion.ViaVersionPlugin;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
import us.myles.ViaVersion.api.ViaVersion;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.bukkit.listeners.ViaBukkitListener;
|
import us.myles.ViaVersion.bukkit.listeners.ViaBukkitListener;
|
||||||
@ -22,7 +21,7 @@ public class DeathListener extends ViaBukkitListener {
|
|||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||||
public void onDeath(PlayerDeathEvent e) {
|
public void onDeath(PlayerDeathEvent e) {
|
||||||
Player p = e.getEntity();
|
Player p = e.getEntity();
|
||||||
if (isOnPipe(p) && ViaVersion.getConfig().isShowNewDeathMessages() && checkGamerule(p.getWorld()) && e.getDeathMessage() != null)
|
if (isOnPipe(p) && Via.getConfig().isShowNewDeathMessages() && checkGamerule(p.getWorld()) && e.getDeathMessage() != null)
|
||||||
sendPacket(p, e.getDeathMessage());
|
sendPacket(p, e.getDeathMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,18 +1,15 @@
|
|||||||
package us.myles.ViaVersion.bukkit.platform;
|
package us.myles.ViaVersion.bukkit.platform;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import us.myles.ViaVersion.ViaVersionPlugin;
|
import us.myles.ViaVersion.ViaVersionPlugin;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
import us.myles.ViaVersion.api.ViaAPI;
|
import us.myles.ViaVersion.api.ViaAPI;
|
||||||
import us.myles.ViaVersion.api.ViaVersionAPI;
|
|
||||||
import us.myles.ViaVersion.api.boss.BossBar;
|
import us.myles.ViaVersion.api.boss.BossBar;
|
||||||
import us.myles.ViaVersion.api.boss.BossColor;
|
import us.myles.ViaVersion.api.boss.BossColor;
|
||||||
import us.myles.ViaVersion.api.boss.BossStyle;
|
import us.myles.ViaVersion.api.boss.BossStyle;
|
||||||
import us.myles.ViaVersion.api.command.ViaVersionCommand;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
|
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
|
||||||
import us.myles.ViaVersion.boss.ViaBossBar;
|
import us.myles.ViaVersion.boss.ViaBossBar;
|
||||||
@ -24,15 +21,16 @@ import java.util.SortedSet;
|
|||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@AllArgsConstructor
|
public class BukkitViaAPI implements ViaAPI<Player> {
|
||||||
public class BukkitViaAPI implements ViaAPI<Player>, ViaVersionAPI {
|
|
||||||
private final ViaVersionPlugin plugin;
|
private final ViaVersionPlugin plugin;
|
||||||
|
|
||||||
|
public BukkitViaAPI(ViaVersionPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPlayerVersion(@NonNull Player player) {
|
public int getPlayerVersion(@NonNull Player player) {
|
||||||
if (!isPorted(player))
|
return getPlayerVersion(player.getUniqueId());
|
||||||
return getExternalVersion(player);
|
|
||||||
return getPortedPlayers().get(player.getUniqueId()).get(ProtocolInfo.class).getProtocolVersion();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -50,11 +48,6 @@ public class BukkitViaAPI implements ViaAPI<Player>, ViaVersionAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isPorted(Player player) {
|
|
||||||
return isPorted(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isPorted(UUID playerUUID) {
|
public boolean isPorted(UUID playerUUID) {
|
||||||
return getPortedPlayers().containsKey(playerUUID);
|
return getPortedPlayers().containsKey(playerUUID);
|
||||||
@ -87,16 +80,6 @@ public class BukkitViaAPI implements ViaAPI<Player>, ViaVersionAPI {
|
|||||||
return new ViaBossBar(title, health, color, style);
|
return new ViaBossBar(title, health, color, style);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDebug() {
|
|
||||||
return Via.getManager().isDebug();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ViaVersionCommand getCommandHandler() {
|
|
||||||
return Via.getManager().getCommandHandler();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SortedSet<Integer> getSupportedVersions() {
|
public SortedSet<Integer> getSupportedVersions() {
|
||||||
SortedSet<Integer> outputSet = new TreeSet<>(ProtocolRegistry.getSupportedVersions());
|
SortedSet<Integer> outputSet = new TreeSet<>(ProtocolRegistry.getSupportedVersions());
|
||||||
@ -105,18 +88,21 @@ public class BukkitViaAPI implements ViaAPI<Player>, ViaVersionAPI {
|
|||||||
return outputSet;
|
return outputSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
|
* Returns if this version is a compatibility build for spigot.
|
||||||
|
* Eg. 1.9.1 / 1.9.2 allow certain versions to connect
|
||||||
|
*
|
||||||
|
* @return true if compat Spigot build
|
||||||
|
*/
|
||||||
public boolean isCompatSpigotBuild() {
|
public boolean isCompatSpigotBuild() {
|
||||||
return plugin.isCompatSpigotBuild();
|
return plugin.isCompatSpigotBuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
@Override
|
* Returns if ProtocolSupport is also being used.
|
||||||
public boolean isSpigot() {
|
*
|
||||||
return plugin.isSpigot();
|
* @return true if ProtocolSupport is used
|
||||||
}
|
*/
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isProtocolSupport() {
|
public boolean isProtocolSupport() {
|
||||||
return plugin.isProtocolSupport();
|
return plugin.isProtocolSupport();
|
||||||
}
|
}
|
||||||
|
@ -21,13 +21,11 @@ import java.util.Map;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
@Getter
|
|
||||||
public class ViaManager {
|
public class ViaManager {
|
||||||
private final Map<UUID, UserConnection> portedPlayers = new ConcurrentHashMap<>();
|
private final Map<UUID, UserConnection> portedPlayers = new ConcurrentHashMap<>();
|
||||||
private final ViaPlatform platform;
|
private final ViaPlatform platform;
|
||||||
private final ViaProviders providers = new ViaProviders();
|
private final ViaProviders providers = new ViaProviders();
|
||||||
@Setter
|
private boolean debug;
|
||||||
private boolean debug = false;
|
|
||||||
// Internals
|
// Internals
|
||||||
private final ViaInjector injector;
|
private final ViaInjector injector;
|
||||||
private final ViaCommandHandler commandHandler;
|
private final ViaCommandHandler commandHandler;
|
||||||
@ -128,4 +126,35 @@ public class ViaManager {
|
|||||||
return portedPlayers.get(playerUUID);
|
return portedPlayers.get(playerUUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<UUID, UserConnection> getPortedPlayers() {
|
||||||
|
return portedPlayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ViaPlatform getPlatform() {
|
||||||
|
return platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ViaProviders getProviders() {
|
||||||
|
return providers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDebug() {
|
||||||
|
return debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDebug(boolean debug) {
|
||||||
|
this.debug = debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ViaInjector getInjector() {
|
||||||
|
return injector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ViaCommandHandler getCommandHandler() {
|
||||||
|
return commandHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ViaPlatformLoader getLoader() {
|
||||||
|
return loader;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,6 @@ package us.myles.ViaVersion.api;
|
|||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.ChannelFuture;
|
import io.netty.channel.ChannelFuture;
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.protocol.Protocol;
|
import us.myles.ViaVersion.api.protocol.Protocol;
|
||||||
import us.myles.ViaVersion.api.remapper.ValueCreator;
|
import us.myles.ViaVersion.api.remapper.ValueCreator;
|
||||||
@ -26,8 +24,6 @@ public class PacketWrapper {
|
|||||||
private final ByteBuf inputBuffer;
|
private final ByteBuf inputBuffer;
|
||||||
private final UserConnection userConnection;
|
private final UserConnection userConnection;
|
||||||
private boolean send = true;
|
private boolean send = true;
|
||||||
@Setter
|
|
||||||
@Getter
|
|
||||||
private int id = -1;
|
private int id = -1;
|
||||||
private final LinkedList<Pair<Type, Object>> readableObjects = new LinkedList<>();
|
private final LinkedList<Pair<Type, Object>> readableObjects = new LinkedList<>();
|
||||||
private final List<Pair<Type, Object>> packetValues = new ArrayList<>();
|
private final List<Pair<Type, Object>> packetValues = new ArrayList<>();
|
||||||
@ -518,6 +514,13 @@ public class PacketWrapper {
|
|||||||
sendToServer(packetProtocol, true);
|
sendToServer(packetProtocol, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@ -1,14 +1,9 @@
|
|||||||
package us.myles.ViaVersion.api;
|
package us.myles.ViaVersion.api;
|
||||||
|
|
||||||
import lombok.EqualsAndHashCode;
|
import java.util.Objects;
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@EqualsAndHashCode
|
|
||||||
public class Pair<X, Y> {
|
public class Pair<X, Y> {
|
||||||
private X key;
|
private final X key;
|
||||||
private Y value;
|
private Y value;
|
||||||
|
|
||||||
public Pair(X key, Y value) {
|
public Pair(X key, Y value) {
|
||||||
@ -16,8 +11,36 @@ public class Pair<X, Y> {
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public X getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Y getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Y value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Pair{" + key + ", " + value + '}';
|
return "Pair{" + key + ", " + value + '}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Pair<?, ?> pair = (Pair<?, ?>) o;
|
||||||
|
if (!Objects.equals(key, pair.key)) return false;
|
||||||
|
return Objects.equals(value, pair.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = key != null ? key.hashCode() : 0;
|
||||||
|
result = 31 * result + (value != null ? value.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,50 @@
|
|||||||
package us.myles.ViaVersion.api;
|
package us.myles.ViaVersion.api;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import java.util.Objects;
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
@AllArgsConstructor
|
|
||||||
public class Triple<A, B, C> {
|
public class Triple<A, B, C> {
|
||||||
private A first;
|
private final A first;
|
||||||
private B second;
|
private final B second;
|
||||||
private C third;
|
private final C third;
|
||||||
|
|
||||||
|
public Triple(A first, B second, C third) {
|
||||||
|
this.first = first;
|
||||||
|
this.second = second;
|
||||||
|
this.third = third;
|
||||||
|
}
|
||||||
|
|
||||||
|
public A getFirst() {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
|
||||||
|
public B getSecond() {
|
||||||
|
return second;
|
||||||
|
}
|
||||||
|
|
||||||
|
public C getThird() {
|
||||||
|
return third;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Triple{" + first + ", " + second + ", " + third + '}';
|
return "Triple{" + first + ", " + second + ", " + third + '}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Triple<?, ?, ?> triple = (Triple<?, ?, ?>) o;
|
||||||
|
if (!Objects.equals(first, triple.first)) return false;
|
||||||
|
if (!Objects.equals(second, triple.second)) return false;
|
||||||
|
return Objects.equals(third, triple.third);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = first != null ? first.hashCode() : 0;
|
||||||
|
result = 31 * result + (second != null ? second.hashCode() : 0);
|
||||||
|
result = 31 * result + (third != null ? third.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
package us.myles.ViaVersion.api;
|
package us.myles.ViaVersion.api;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import lombok.Getter;
|
|
||||||
import us.myles.ViaVersion.ViaManager;
|
import us.myles.ViaVersion.ViaManager;
|
||||||
import us.myles.ViaVersion.api.platform.ViaPlatform;
|
import us.myles.ViaVersion.api.platform.ViaPlatform;
|
||||||
|
|
||||||
public class Via {
|
public class Via {
|
||||||
@Getter
|
|
||||||
private static ViaPlatform platform;
|
private static ViaPlatform platform;
|
||||||
@Getter
|
|
||||||
private static ViaManager manager;
|
private static ViaManager manager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,4 +39,12 @@ public class Via {
|
|||||||
Preconditions.checkArgument(platform != null, "ViaVersion has not loaded the Platform");
|
Preconditions.checkArgument(platform != null, "ViaVersion has not loaded the Platform");
|
||||||
return Via.platform.getConf();
|
return Via.platform.getConf();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ViaPlatform getPlatform() {
|
||||||
|
return platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ViaManager getManager() {
|
||||||
|
return manager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import java.util.UUID;
|
|||||||
* @param <T> The player type for the specific platform, for bukkit it's {@code ViaAPI<Player>}
|
* @param <T> The player type for the specific platform, for bukkit it's {@code ViaAPI<Player>}
|
||||||
*/
|
*/
|
||||||
public interface ViaAPI<T> {
|
public interface ViaAPI<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get protocol number from a player
|
* Get protocol number from a player
|
||||||
* Will also retrieve version from ProtocolSupport if it's being used.
|
* Will also retrieve version from ProtocolSupport if it's being used.
|
||||||
@ -33,11 +34,11 @@ public interface ViaAPI<T> {
|
|||||||
int getPlayerVersion(UUID uuid);
|
int getPlayerVersion(UUID uuid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is player using 1.9?
|
* Returns if the player is ported by Via.
|
||||||
*
|
*
|
||||||
* @param playerUUID UUID of a player
|
* @param playerUUID UUID of a player
|
||||||
* @return True if the client is on 1.9
|
* @return true if Via has a cached userconnection for this player
|
||||||
* @deprecated As of 0.9.9, because all players are ported use {@link #getPlayerVersion(UUID)}
|
* @deprecated as of 0.9.9, because all players are ported use {@link #getPlayerVersion(UUID)}
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
boolean isPorted(UUID playerUUID);
|
boolean isPorted(UUID playerUUID);
|
||||||
|
@ -6,6 +6,7 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public abstract class BossBar<T> {
|
public abstract class BossBar<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current title
|
* Get the current title
|
||||||
*
|
*
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
package us.myles.ViaVersion.api.boss;
|
package us.myles.ViaVersion.api.boss;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Getter
|
|
||||||
public enum BossColor {
|
public enum BossColor {
|
||||||
PINK(0),
|
PINK(0),
|
||||||
BLUE(1),
|
BLUE(1),
|
||||||
@ -15,4 +10,12 @@ public enum BossColor {
|
|||||||
WHITE(6);
|
WHITE(6);
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
|
|
||||||
|
BossColor(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
package us.myles.ViaVersion.api.boss;
|
package us.myles.ViaVersion.api.boss;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Getter
|
|
||||||
public enum BossFlag {
|
public enum BossFlag {
|
||||||
DARKEN_SKY(1),
|
DARKEN_SKY(1),
|
||||||
PLAY_BOSS_MUSIC(2);
|
PLAY_BOSS_MUSIC(2);
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
|
|
||||||
|
BossFlag(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
package us.myles.ViaVersion.api.boss;
|
package us.myles.ViaVersion.api.boss;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Getter
|
|
||||||
public enum BossStyle {
|
public enum BossStyle {
|
||||||
SOLID(0),
|
SOLID(0),
|
||||||
SEGMENTED_6(1),
|
SEGMENTED_6(1),
|
||||||
@ -13,4 +8,12 @@ public enum BossStyle {
|
|||||||
SEGMENTED_20(4);
|
SEGMENTED_20(4);
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
|
|
||||||
|
BossStyle(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,16 +51,6 @@ public abstract class Protocol {
|
|||||||
output.add(packet);
|
output.add(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Register listeners for this protocol
|
|
||||||
*
|
|
||||||
* @deprecated No longer used as listeners are registered in {@link us.myles.ViaVersion.api.platform.ViaPlatformLoader#load}
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
protected void registerListeners() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle protocol registration phase, use this to register providers / tasks.
|
* Handle protocol registration phase, use this to register providers / tasks.
|
||||||
*
|
*
|
||||||
|
@ -5,7 +5,6 @@ import us.myles.ViaVersion.api.Via;
|
|||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.platform.ViaPlatform;
|
import us.myles.ViaVersion.api.platform.ViaPlatform;
|
||||||
import us.myles.ViaVersion.packets.Direction;
|
import us.myles.ViaVersion.packets.Direction;
|
||||||
import us.myles.ViaVersion.packets.PacketType;
|
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
||||||
|
|
||||||
@ -84,55 +83,23 @@ public class ProtocolPipeline extends Protocol {
|
|||||||
|
|
||||||
if (Via.getManager().isDebug()) {
|
if (Via.getManager().isDebug()) {
|
||||||
// Debug packet
|
// Debug packet
|
||||||
String packet = "UNKNOWN";
|
|
||||||
|
|
||||||
|
|
||||||
int serverProtocol = userConnection.get(ProtocolInfo.class).getServerProtocolVersion();
|
int serverProtocol = userConnection.get(ProtocolInfo.class).getServerProtocolVersion();
|
||||||
int clientProtocol = userConnection.get(ProtocolInfo.class).getProtocolVersion();
|
int clientProtocol = userConnection.get(ProtocolInfo.class).getProtocolVersion();
|
||||||
|
|
||||||
// For 1.8/1.9 server version, eventually we'll probably get an API for this...
|
|
||||||
if (serverProtocol >= ProtocolVersion.v1_8.getId() &&
|
|
||||||
serverProtocol <= ProtocolVersion.v1_9_3.getId()) {
|
|
||||||
PacketType type;
|
|
||||||
if (serverProtocol <= ProtocolVersion.v1_8.getId()) {
|
|
||||||
if (direction == Direction.INCOMING) {
|
|
||||||
type = PacketType.findNewPacket(state, direction, originalID);
|
|
||||||
} else {
|
|
||||||
type = PacketType.findOldPacket(state, direction, originalID);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
type = PacketType.findNewPacket(state, direction, originalID);
|
|
||||||
}
|
|
||||||
if (type != null) {
|
|
||||||
// Filter :) This would be not hard coded too, sorry :(
|
|
||||||
if (type == PacketType.PLAY_CHUNK_DATA) return;
|
|
||||||
if (type == PacketType.PLAY_TIME_UPDATE) return;
|
|
||||||
if (type == PacketType.PLAY_KEEP_ALIVE) return;
|
|
||||||
if (type == PacketType.PLAY_KEEP_ALIVE_REQUEST) return;
|
|
||||||
if (type == PacketType.PLAY_ENTITY_LOOK_MOVE) return;
|
|
||||||
if (type == PacketType.PLAY_ENTITY_LOOK) return;
|
|
||||||
if (type == PacketType.PLAY_ENTITY_RELATIVE_MOVE) return;
|
|
||||||
if (type == PacketType.PLAY_PLAYER_POSITION_LOOK_REQUEST) return;
|
|
||||||
if (type == PacketType.PLAY_PLAYER_LOOK_REQUEST) return;
|
|
||||||
if (type == PacketType.PLAY_PLAYER_POSITION_REQUEST) return;
|
|
||||||
|
|
||||||
packet = type.name();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String name = packet + "[" + clientProtocol + "]";
|
|
||||||
ViaPlatform platform = Via.getPlatform();
|
ViaPlatform platform = Via.getPlatform();
|
||||||
|
|
||||||
String actualUsername = packetWrapper.user().get(ProtocolInfo.class).getUsername();
|
String actualUsername = packetWrapper.user().get(ProtocolInfo.class).getUsername();
|
||||||
String username = actualUsername != null ? actualUsername + " " : "";
|
String username = actualUsername != null ? actualUsername + " " : "";
|
||||||
|
|
||||||
platform.getLogger().log(Level.INFO, "{0}{1}: {2} {3} -> {4} [{5}] Value: {6}",
|
platform.getLogger().log(Level.INFO, "{0}{1} {2}: {3} (0x{4}) -> {5} (0x{6}) [{7}] {8}",
|
||||||
new Object[]{
|
new Object[]{
|
||||||
username,
|
username,
|
||||||
direction,
|
direction,
|
||||||
state,
|
state,
|
||||||
originalID,
|
originalID,
|
||||||
|
Integer.toHexString(originalID),
|
||||||
packetWrapper.getId(),
|
packetWrapper.getId(),
|
||||||
name,
|
Integer.toHexString(packetWrapper.getId()),
|
||||||
|
Integer.toString(clientProtocol),
|
||||||
packetWrapper
|
packetWrapper
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,6 @@ public class ProtocolRegistry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Via.getPlatform().isPluginEnabled()) {
|
if (Via.getPlatform().isPluginEnabled()) {
|
||||||
protocol.registerListeners();
|
|
||||||
protocol.register(Via.getManager().getProviders());
|
protocol.register(Via.getManager().getProviders());
|
||||||
refreshVersions();
|
refreshVersions();
|
||||||
} else {
|
} else {
|
||||||
@ -133,7 +132,6 @@ public class ProtocolRegistry {
|
|||||||
public static void registerBaseProtocol(Protocol baseProtocol, Range<Integer> supportedProtocols) {
|
public static void registerBaseProtocol(Protocol baseProtocol, Range<Integer> supportedProtocols) {
|
||||||
baseProtocols.add(new Pair<>(supportedProtocols, baseProtocol));
|
baseProtocols.add(new Pair<>(supportedProtocols, baseProtocol));
|
||||||
if (Via.getPlatform().isPluginEnabled()) {
|
if (Via.getPlatform().isPluginEnabled()) {
|
||||||
baseProtocol.registerListeners();
|
|
||||||
baseProtocol.register(Via.getManager().getProviders());
|
baseProtocol.register(Via.getManager().getProviders());
|
||||||
refreshVersions();
|
refreshVersions();
|
||||||
} else {
|
} else {
|
||||||
@ -180,7 +178,6 @@ public class ProtocolRegistry {
|
|||||||
*/
|
*/
|
||||||
public static void onServerLoaded() {
|
public static void onServerLoaded() {
|
||||||
for (Protocol protocol : registerList) {
|
for (Protocol protocol : registerList) {
|
||||||
protocol.registerListeners();
|
|
||||||
protocol.register(Via.getManager().getProviders());
|
protocol.register(Via.getManager().getProviders());
|
||||||
}
|
}
|
||||||
registerList.clear();
|
registerList.clear();
|
||||||
|
@ -3,7 +3,6 @@ package us.myles.ViaVersion.boss;
|
|||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
import us.myles.ViaVersion.api.boss.BossBar;
|
import us.myles.ViaVersion.api.boss.BossBar;
|
||||||
@ -19,14 +18,14 @@ import java.util.*;
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public abstract class CommonBoss<T> extends BossBar<T> {
|
public abstract class CommonBoss<T> extends BossBar<T> {
|
||||||
private UUID uuid;
|
private final UUID uuid;
|
||||||
private String title;
|
private String title;
|
||||||
private float health;
|
private float health;
|
||||||
private BossColor color;
|
private BossColor color;
|
||||||
private BossStyle style;
|
private BossStyle style;
|
||||||
private Set<UUID> players;
|
private final Set<UUID> players;
|
||||||
private boolean visible;
|
private boolean visible;
|
||||||
private Set<BossFlag> flags;
|
private final Set<BossFlag> flags;
|
||||||
|
|
||||||
public CommonBoss(String title, float health, BossColor color, BossStyle style) {
|
public CommonBoss(String title, float health, BossColor color, BossStyle style) {
|
||||||
Preconditions.checkNotNull(title, "Title cannot be null");
|
Preconditions.checkNotNull(title, "Title cannot be null");
|
||||||
@ -217,8 +216,6 @@ public abstract class CommonBoss<T> extends BossBar<T> {
|
|||||||
return bitmask;
|
return bitmask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Getter
|
|
||||||
private enum UpdateAction {
|
private enum UpdateAction {
|
||||||
ADD(0),
|
ADD(0),
|
||||||
REMOVE(1),
|
REMOVE(1),
|
||||||
@ -228,5 +225,13 @@ public abstract class CommonBoss<T> extends BossBar<T> {
|
|||||||
UPDATE_FLAGS(5);
|
UPDATE_FLAGS(5);
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
|
|
||||||
|
UpdateAction(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,208 +0,0 @@
|
|||||||
package us.myles.ViaVersion.packets;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public enum PacketType {
|
|
||||||
/* Handshake serverbound */
|
|
||||||
HANDSHAKE(State.HANDSHAKE, Direction.INCOMING, 0x00), // Mapped
|
|
||||||
/* Login serverbound */
|
|
||||||
LOGIN_START(State.LOGIN, Direction.INCOMING, 0x00), // Mapped
|
|
||||||
LOGIN_ENCRYPTION_RESPONSE(State.LOGIN, Direction.INCOMING, 0x01), // Mapped
|
|
||||||
/* Login clientbound */
|
|
||||||
LOGIN_DISCONNECT(State.LOGIN, Direction.OUTGOING, 0x00), // Mapped
|
|
||||||
LOGIN_ENCRYPTION_REQUEST(State.LOGIN, Direction.OUTGOING, 0x01), // Mapped
|
|
||||||
LOGIN_SUCCESS(State.LOGIN, Direction.OUTGOING, 0x02), // Mapped
|
|
||||||
LOGIN_SETCOMPRESSION(State.LOGIN, Direction.OUTGOING, 0x03), // Mapped
|
|
||||||
|
|
||||||
/* Status serverbound */
|
|
||||||
STATUS_REQUEST(State.STATUS, Direction.INCOMING, 0x00), // Mapped
|
|
||||||
STATUS_PING(State.STATUS, Direction.INCOMING, 0x01), // Mapped
|
|
||||||
/* Status clientbound */
|
|
||||||
STATUS_RESPONSE(State.STATUS, Direction.OUTGOING, 0x00),
|
|
||||||
STATUS_PONG(State.STATUS, Direction.OUTGOING, 0x01),
|
|
||||||
/* Play serverbound */
|
|
||||||
PLAY_TP_CONFIRM(State.PLAY, Direction.INCOMING, -1, 0x00), // Mapped
|
|
||||||
PLAY_TAB_COMPLETE_REQUEST(State.PLAY, Direction.INCOMING, 0x14, 0x01), // Mapped
|
|
||||||
PLAY_CHAT_MESSAGE_CLIENT(State.PLAY, Direction.INCOMING, 0x01, 0x02), // Mapped
|
|
||||||
PLAY_CLIENT_STATUS(State.PLAY, Direction.INCOMING, 0x16, 0x03), // Mapped
|
|
||||||
PLAY_CLIENT_SETTINGS(State.PLAY, Direction.INCOMING, 0x15, 0x04), // Mapped
|
|
||||||
PLAY_CONFIRM_TRANS(State.PLAY, Direction.INCOMING, 0x0F, 0x05), // Mapped
|
|
||||||
PLAY_ENCHANT_ITEM(State.PLAY, Direction.INCOMING, 0x11, 0x06), // Mapped
|
|
||||||
PLAY_CLICK_WINDOW(State.PLAY, Direction.INCOMING, 0x0E, 0x07), // Mapped
|
|
||||||
PLAY_CLOSE_WINDOW_REQUEST(State.PLAY, Direction.INCOMING, 0x0D, 0x08), // Mapped
|
|
||||||
PLAY_PLUGIN_MESSAGE_REQUEST(State.PLAY, Direction.INCOMING, 0x17, 0x09),
|
|
||||||
PLAY_USE_ENTITY(State.PLAY, Direction.INCOMING, 0x02, 0x0A), // Mapped
|
|
||||||
PLAY_KEEP_ALIVE_REQUEST(State.PLAY, Direction.INCOMING, 0x00, 0x0B), // Mapped
|
|
||||||
PLAY_PLAYER_POSITION_REQUEST(State.PLAY, Direction.INCOMING, 0x04, 0x0C), // Mapped
|
|
||||||
PLAY_PLAYER_POSITION_LOOK_REQUEST(State.PLAY, Direction.INCOMING, 0x06, 0x0D), // Mapped
|
|
||||||
PLAY_PLAYER_LOOK_REQUEST(State.PLAY, Direction.INCOMING, 0x05, 0x0E), // Mapped
|
|
||||||
PLAY_PLAYER(State.PLAY, Direction.INCOMING, 0x03, 0x0F), // Mapped
|
|
||||||
PLAY_VEHICLE_MOVE_REQUEST(State.PLAY, Direction.INCOMING, -1, 0x10), // Mapped
|
|
||||||
PLAY_STEER_BOAT(State.PLAY, Direction.INCOMING, -1, 0x11), // Mapped
|
|
||||||
PLAY_PLAYER_ABILITIES_REQUEST(State.PLAY, Direction.INCOMING, 0x13, 0x12), // Mapped
|
|
||||||
PLAY_PLAYER_DIGGING(State.PLAY, Direction.INCOMING, 0x07, 0x13), // Mapped
|
|
||||||
PLAY_ENTITY_ACTION(State.PLAY, Direction.INCOMING, 0x0B, 0x14), // Mapped
|
|
||||||
PLAY_STEER_VEHICLE(State.PLAY, Direction.INCOMING, 0x0C, 0x15), // Mapped
|
|
||||||
|
|
||||||
PLAY_RESOURCE_PACK_STATUS(State.PLAY, Direction.INCOMING, 0x19, 0x16), // Mapped
|
|
||||||
PLAY_HELD_ITEM_CHANGE_REQUEST(State.PLAY, Direction.INCOMING, 0x09, 0x17), // Mapped
|
|
||||||
|
|
||||||
PLAY_CREATIVE_INVENTORY_ACTION(State.PLAY, Direction.INCOMING, 0x10, 0x18), // Mapped
|
|
||||||
PLAY_UPDATE_SIGN_REQUEST(State.PLAY, Direction.INCOMING, 0x12, 0x19), // Mapped
|
|
||||||
PLAY_ANIMATION_REQUEST(State.PLAY, Direction.INCOMING, 0x0A, 0x1A), // Mapped
|
|
||||||
PLAY_SPECTATE(State.PLAY, Direction.INCOMING, 0x18, 0x1B), // Mapped
|
|
||||||
PLAY_PLAYER_BLOCK_PLACEMENT(State.PLAY, Direction.INCOMING, 0x08, 0x1C), // Mapped
|
|
||||||
PLAY_USE_ITEM(State.PLAY, Direction.INCOMING, -1, 0x1D), // Mapped
|
|
||||||
/* Play clientbound */
|
|
||||||
PLAY_SPAWN_OBJECT(State.PLAY, Direction.OUTGOING, 0x0E, 0x00), // Mapped
|
|
||||||
PLAY_SPAWN_XP_ORB(State.PLAY, Direction.OUTGOING, 0x11, 0x01), // Mapped
|
|
||||||
PLAY_SPAWN_GLOBAL_ENTITY(State.PLAY, Direction.OUTGOING, 0x2C, 0x02), // Mapped
|
|
||||||
PLAY_SPAWN_MOB(State.PLAY, Direction.OUTGOING, 0x0F, 0x03), // Mapped
|
|
||||||
PLAY_SPAWN_PAINTING(State.PLAY, Direction.OUTGOING, 0x10, 0x04), // Mapped
|
|
||||||
PLAY_SPAWN_PLAYER(State.PLAY, Direction.OUTGOING, 0x0C, 0x05), // Mapped
|
|
||||||
|
|
||||||
PLAY_ANIMATION(State.PLAY, Direction.OUTGOING, 0x0B, 0x06), // Mapped
|
|
||||||
PLAY_STATS(State.PLAY, Direction.OUTGOING, 0x37, 0x07), // Mapped
|
|
||||||
|
|
||||||
PLAY_BLOCK_BREAK_ANIMATION(State.PLAY, Direction.OUTGOING, 0x25, 0x08), // Mapped
|
|
||||||
PLAY_UPDATE_BLOCK_ENTITY(State.PLAY, Direction.OUTGOING, 0x35, 0x09), // Mapped
|
|
||||||
PLAY_BLOCK_ACTION(State.PLAY, Direction.OUTGOING, 0x24, 0x0A), // Mapped
|
|
||||||
PLAY_BLOCK_CHANGE(State.PLAY, Direction.OUTGOING, 0x23, 0x0B), // Mapped
|
|
||||||
|
|
||||||
PLAY_BOSS_BAR(State.PLAY, Direction.OUTGOING, -1, 0x0C),
|
|
||||||
PLAY_SERVER_DIFFICULTY(State.PLAY, Direction.OUTGOING, 0x41, 0x0D), // Mapped
|
|
||||||
PLAY_TAB_COMPLETE(State.PLAY, Direction.OUTGOING, 0x3A, 0x0E), // Mapped
|
|
||||||
PLAY_CHAT_MESSAGE(State.PLAY, Direction.OUTGOING, 0x02, 0x0F), // Mapped
|
|
||||||
PLAY_MULTI_BLOCK_CHANGE(State.PLAY, Direction.OUTGOING, 0x22, 0x10), // Mapped
|
|
||||||
PLAY_CONFIRM_TRANSACTION(State.PLAY, Direction.OUTGOING, 0x32, 0x11), // Mapped
|
|
||||||
PLAY_CLOSE_WINDOW(State.PLAY, Direction.OUTGOING, 0x2E, 0x12), // Mapped
|
|
||||||
PLAY_OPEN_WINDOW(State.PLAY, Direction.OUTGOING, 0x2D, 0x13), // Mapped
|
|
||||||
PLAY_WINDOW_ITEMS(State.PLAY, Direction.OUTGOING, 0x30, 0x14), // Mapped
|
|
||||||
PLAY_WINDOW_PROPERTY(State.PLAY, Direction.OUTGOING, 0x31, 0x15), // Mapped
|
|
||||||
PLAY_SET_SLOT(State.PLAY, Direction.OUTGOING, 0x2F, 0x16), // Mapped
|
|
||||||
PLAY_SET_COOLDOWN(State.PLAY, Direction.OUTGOING, -1, 0x17),
|
|
||||||
PLAY_PLUGIN_MESSAGE(State.PLAY, Direction.OUTGOING, 0x3F, 0x18), // Mapped
|
|
||||||
PLAY_NAMED_SOUND_EFFECT(State.PLAY, Direction.OUTGOING, 0x29, 0x19), // Mapped
|
|
||||||
PLAY_DISCONNECT(State.PLAY, Direction.OUTGOING, 0x40, 0x1A), // Mapped
|
|
||||||
PLAY_ENTITY_STATUS(State.PLAY, Direction.OUTGOING, 0x1A, 0x1B), // Mapped
|
|
||||||
PLAY_EXPLOSION(State.PLAY, Direction.OUTGOING, 0x27, 0x1C), // Mapped
|
|
||||||
PLAY_UNLOAD_CHUNK(State.PLAY, Direction.OUTGOING, -1, 0x1D),
|
|
||||||
PLAY_CHANGE_GAME_STATE(State.PLAY, Direction.OUTGOING, 0x2B, 0x1E),
|
|
||||||
PLAY_KEEP_ALIVE(State.PLAY, Direction.OUTGOING, 0x00, 0x1F), // Mapped
|
|
||||||
PLAY_CHUNK_DATA(State.PLAY, Direction.OUTGOING, 0x21, 0x20), // Mapped
|
|
||||||
PLAY_EFFECT(State.PLAY, Direction.OUTGOING, 0x28, 0x21), // Mapped
|
|
||||||
PLAY_PARTICLE(State.PLAY, Direction.OUTGOING, 0x2A, 0x22), // Mapped
|
|
||||||
PLAY_JOIN_GAME(State.PLAY, Direction.OUTGOING, 0x01, 0x23), // Mapped
|
|
||||||
PLAY_MAP(State.PLAY, Direction.OUTGOING, 0x34, 0x24), // Mapped
|
|
||||||
PLAY_ENTITY_RELATIVE_MOVE(State.PLAY, Direction.OUTGOING, 0x15, 0x25), // Mapped
|
|
||||||
PLAY_ENTITY_LOOK_MOVE(State.PLAY, Direction.OUTGOING, 0x17, 0x26), // Mapped
|
|
||||||
PLAY_ENTITY_LOOK(State.PLAY, Direction.OUTGOING, 0x16, 0x27), // Mapped
|
|
||||||
PLAY_ENTITY(State.PLAY, Direction.OUTGOING, 0x14, 0x28), // Mapped
|
|
||||||
PLAY_VEHICLE_MOVE(State.PLAY, Direction.OUTGOING, -1, 0x29),
|
|
||||||
PLAY_OPEN_SIGN_EDITOR(State.PLAY, Direction.OUTGOING, 0x36, 0x2A), // Mapped
|
|
||||||
PLAY_PLAYER_ABILITIES(State.PLAY, Direction.OUTGOING, 0x39, 0x2B), // Mapped
|
|
||||||
PLAY_COMBAT_EVENT(State.PLAY, Direction.OUTGOING, 0x42, 0x2C), // Mapped
|
|
||||||
PLAY_PLAYER_LIST_ITEM(State.PLAY, Direction.OUTGOING, 0x38, 0x2D), // Mapped
|
|
||||||
PLAY_PLAYER_POSITION_LOOK(State.PLAY, Direction.OUTGOING, 0x08, 0x2E), // Mapped
|
|
||||||
PLAY_USE_BED(State.PLAY, Direction.OUTGOING, 0x0A, 0x2F), // Mapped
|
|
||||||
PLAY_DESTROY_ENTITIES(State.PLAY, Direction.OUTGOING, 0x13, 0x30), // Mapped
|
|
||||||
PLAY_REMOVE_ENTITY_EFFECT(State.PLAY, Direction.OUTGOING, 0x1E, 0x31), // Mapped
|
|
||||||
PLAY_RESOURCE_PACK_SEND(State.PLAY, Direction.OUTGOING, 0x48, 0x32), // Mapped
|
|
||||||
PLAY_RESPAWN(State.PLAY, Direction.OUTGOING, 0x07, 0x33), // Mapped
|
|
||||||
PLAY_ENTITY_HEAD_LOOK(State.PLAY, Direction.OUTGOING, 0x19, 0x34), // Mapped
|
|
||||||
PLAY_WORLD_BORDER(State.PLAY, Direction.OUTGOING, 0x44, 0x35), // Mapped
|
|
||||||
PLAY_CAMERA(State.PLAY, Direction.OUTGOING, 0x43, 0x36), // Mapped
|
|
||||||
PLAY_HELD_ITEM_CHANGE(State.PLAY, Direction.OUTGOING, 0x09, 0x37), // Mapped
|
|
||||||
PLAY_DISPLAY_SCOREBOARD(State.PLAY, Direction.OUTGOING, 0x3D, 0x38), // Mapped
|
|
||||||
PLAY_ENTITY_METADATA(State.PLAY, Direction.OUTGOING, 0x1C, 0x39), // Mapped
|
|
||||||
PLAY_ATTACH_ENTITY(State.PLAY, Direction.OUTGOING, 0x1B, 0x3A), // Mapped
|
|
||||||
PLAY_ENTITY_VELOCITY(State.PLAY, Direction.OUTGOING, 0x12, 0x3B), // Mapped
|
|
||||||
PLAY_ENTITY_EQUIPMENT(State.PLAY, Direction.OUTGOING, 0x04, 0x3C), // Mapped
|
|
||||||
PLAY_SET_XP(State.PLAY, Direction.OUTGOING, 0x1F, 0x3D), // Mapped
|
|
||||||
PLAY_UPDATE_HEALTH(State.PLAY, Direction.OUTGOING, 0x06, 0x3E), // Mapped
|
|
||||||
PLAY_SCOREBOARD_OBJ(State.PLAY, Direction.OUTGOING, 0x3B, 0x3F), // Mapped
|
|
||||||
PLAY_SET_PASSENGERS(State.PLAY, Direction.OUTGOING, -1, 0x40),
|
|
||||||
PLAY_TEAM(State.PLAY, Direction.OUTGOING, 0x3E, 0x41), // Mapped
|
|
||||||
PLAY_UPDATE_SCORE(State.PLAY, Direction.OUTGOING, 0x3C, 0x42), // Mapped
|
|
||||||
PLAY_SPAWN_POSITION(State.PLAY, Direction.OUTGOING, 0x05, 0x43), // Mapped
|
|
||||||
PLAY_TIME_UPDATE(State.PLAY, Direction.OUTGOING, 0x03, 0x44), // Mapped
|
|
||||||
PLAY_TITLE(State.PLAY, Direction.OUTGOING, 0x45, 0x45), // Mapped
|
|
||||||
PLAY_UPDATE_SIGN(State.PLAY, Direction.OUTGOING, 0x33, 0x46), // Mapped
|
|
||||||
PLAY_SOUND_EFFECT(State.PLAY, Direction.OUTGOING, -1, 0x47),
|
|
||||||
PLAY_PLAYER_LIST_HEADER_FOOTER(State.PLAY, Direction.OUTGOING, 0x47, 0x48), // Mapped
|
|
||||||
PLAY_COLLECT_ITEM(State.PLAY, Direction.OUTGOING, 0x0D, 0x49), // Mapped
|
|
||||||
PLAY_ENTITY_TELEPORT(State.PLAY, Direction.OUTGOING, 0x18, 0x4A), // Mapped
|
|
||||||
PLAY_ENTITY_PROPERTIES(State.PLAY, Direction.OUTGOING, 0x20, 0x4B), // Mapped
|
|
||||||
PLAY_ENTITY_EFFECT(State.PLAY, Direction.OUTGOING, 0x1D, 0x4C), // Mapped
|
|
||||||
|
|
||||||
PLAY_MAP_CHUNK_BULK(State.PLAY, Direction.OUTGOING, 0x26, -1),
|
|
||||||
PLAY_SET_COMPRESSION(State.PLAY, Direction.OUTGOING, 0x46, -1),
|
|
||||||
PLAY_UPDATE_ENTITY_NBT(State.PLAY, Direction.OUTGOING, 0x49, -1);
|
|
||||||
|
|
||||||
private static final HashMap<Short, PacketType> oldids = new HashMap<>();
|
|
||||||
private static final HashMap<Short, PacketType> newids = new HashMap<>();
|
|
||||||
|
|
||||||
static {
|
|
||||||
for (PacketType pt : PacketType.values()) {
|
|
||||||
oldids.put(toShort((short) pt.getPacketID(), (short) pt.getDirection().ordinal(), (short) pt.getState().ordinal()), pt);
|
|
||||||
newids.put(toShort((short) pt.getNewPacketID(), (short) pt.getDirection().ordinal(), (short) pt.getState().ordinal()), pt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final State state;
|
|
||||||
private final Direction direction;
|
|
||||||
private final int packetID;
|
|
||||||
private final int newPacketID;
|
|
||||||
|
|
||||||
PacketType(State state, Direction direction, int packetID) {
|
|
||||||
this.state = state;
|
|
||||||
this.direction = direction;
|
|
||||||
this.packetID = packetID;
|
|
||||||
this.newPacketID = packetID;
|
|
||||||
}
|
|
||||||
|
|
||||||
PacketType(State state, Direction direction, int packetID, int newPacketID) {
|
|
||||||
this.state = state;
|
|
||||||
this.direction = direction;
|
|
||||||
this.packetID = packetID;
|
|
||||||
this.newPacketID = newPacketID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static PacketType findNewPacket(State state, Direction direction, int id) {
|
|
||||||
return newids.get(toShort((short) id, (short) direction.ordinal(), (short) state.ordinal()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static PacketType findOldPacket(State state, Direction direction, int id) {
|
|
||||||
return oldids.get(toShort((short) id, (short) direction.ordinal(), (short) state.ordinal()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static PacketType getIncomingPacket(State state, int id) {
|
|
||||||
return findNewPacket(state, Direction.INCOMING, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static PacketType getOutgoingPacket(State state, int id) {
|
|
||||||
return findOldPacket(state, Direction.OUTGOING, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static short toShort(short id, short direction, short state) {
|
|
||||||
return (short) ((id & 0x00FF) | (direction << 8) & 0x0F00 | (state << 12) & 0xF000);
|
|
||||||
}
|
|
||||||
|
|
||||||
public State getState() {
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Direction getDirection() {
|
|
||||||
return direction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPacketID() {
|
|
||||||
return packetID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getNewPacketID() {
|
|
||||||
return newPacketID;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -5,8 +5,6 @@ import com.google.gson.JsonElement;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParseException;
|
import com.google.gson.JsonParseException;
|
||||||
import io.netty.channel.ChannelFuture;
|
import io.netty.channel.ChannelFuture;
|
||||||
import io.netty.util.concurrent.Future;
|
|
||||||
import io.netty.util.concurrent.GenericFutureListener;
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.Pair;
|
import us.myles.ViaVersion.api.Pair;
|
||||||
@ -174,12 +172,7 @@ public class BaseProtocol1_7 extends Protocol {
|
|||||||
|
|
||||||
// Send and close
|
// Send and close
|
||||||
ChannelFuture future = disconnectPacket.sendFuture(BaseProtocol.class);
|
ChannelFuture future = disconnectPacket.sendFuture(BaseProtocol.class);
|
||||||
future.addListener(new GenericFutureListener<Future<? super Void>>() {
|
future.addListener(f -> wrapper.user().getChannel().close());
|
||||||
@Override
|
|
||||||
public void operationComplete(Future<? super Void> future) throws Exception {
|
|
||||||
wrapper.user().getChannel().close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren