diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/multiversion/PlayerSneakListener.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/multiversion/PlayerSneakListener.java index b1172b884..45a66eb9a 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/multiversion/PlayerSneakListener.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/multiversion/PlayerSneakListener.java @@ -27,7 +27,7 @@ public class PlayerSneakListener extends ViaBukkitListener { private final boolean is1_14Fix; private Map sneaking; // true = 1.14+, else false private Set sneakingUuids; - private Method getHandle; + private final Method getHandle; private Method setSize; private boolean useCache; diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java index 52cb7a638..7c80e7652 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java @@ -2,10 +2,8 @@ package us.myles.ViaVersion.bukkit.platform; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scheduler.BukkitTask; import us.myles.ViaVersion.ViaVersionPlugin; import us.myles.ViaVersion.api.Via; @@ -73,13 +71,6 @@ public class BukkitViaLoader implements ViaPlatformLoader { // Add ProtocolSupport ConnectListener if necessary. ClassGenerator.registerPSConnectListener(plugin); - registerListener(new Listener() { - @EventHandler - public void onPlayerQuit(PlayerQuitEvent e) { - Via.getManager().handleDisconnect(e.getPlayer().getUniqueId()); - } - }); - /* 1.9 client to 1.8 server */ if (ProtocolRegistry.SERVER_PROTOCOL < ProtocolVersion.v1_9.getId()) { storeListener(new ArmorListener(plugin)).register(); diff --git a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java index 2522d191c..55ed1227e 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java +++ b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java @@ -2,31 +2,34 @@ package us.myles.ViaVersion; import com.google.gson.JsonObject; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; -import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.protocol.ProtocolConstants; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.ViaAPI; import us.myles.ViaVersion.api.command.ViaCommandSender; import us.myles.ViaVersion.api.configuration.ConfigurationProvider; import us.myles.ViaVersion.api.data.MappingDataLoader; -import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.platform.TaskId; import us.myles.ViaVersion.api.platform.ViaConnectionManager; import us.myles.ViaVersion.api.platform.ViaPlatform; import us.myles.ViaVersion.bungee.commands.BungeeCommand; import us.myles.ViaVersion.bungee.commands.BungeeCommandHandler; import us.myles.ViaVersion.bungee.commands.BungeeCommandSender; -import us.myles.ViaVersion.bungee.platform.*; +import us.myles.ViaVersion.bungee.platform.BungeeTaskId; +import us.myles.ViaVersion.bungee.platform.BungeeViaAPI; +import us.myles.ViaVersion.bungee.platform.BungeeViaConfig; +import us.myles.ViaVersion.bungee.platform.BungeeViaInjector; +import us.myles.ViaVersion.bungee.platform.BungeeViaLoader; import us.myles.ViaVersion.bungee.service.ProtocolDetectorService; import us.myles.ViaVersion.dump.PluginInfo; import us.myles.ViaVersion.util.GsonUtil; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; import java.util.concurrent.TimeUnit; public class BungeePlugin extends Plugin implements ViaPlatform, Listener { @@ -193,16 +196,4 @@ public class BungeePlugin extends Plugin implements ViaPlatform, public ViaConnectionManager getConnectionManager() { return connectionManager; } - - @EventHandler - public void onQuit(PlayerDisconnectEvent e) { - UserConnection userConnection = getConnectionManager().getConnectedClient(e.getPlayer().getUniqueId()); - if (userConnection != null) { - // Only remove if the connection is disconnected (eg. relogin) - if (userConnection.getChannel() == null || !userConnection.getChannel().isOpen()) { - Via.getManager().handleDisconnect(e.getPlayer().getUniqueId()); - } - } - - } } diff --git a/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaAPI.java b/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaAPI.java index 65a3f5e75..c41583531 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaAPI.java +++ b/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaAPI.java @@ -1,7 +1,6 @@ package us.myles.ViaVersion.bungee.platform; import io.netty.buffer.ByteBuf; -import lombok.NonNull; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -20,8 +19,9 @@ import java.util.TreeSet; import java.util.UUID; public class BungeeViaAPI implements ViaAPI { + @Override - public int getPlayerVersion(@NonNull ProxiedPlayer player) { + public int getPlayerVersion(ProxiedPlayer player) { UserConnection conn = Via.getManager().getConnection(player.getUniqueId()); if (conn == null) { return player.getPendingConnection().getVersion(); @@ -30,7 +30,7 @@ public class BungeeViaAPI implements ViaAPI { } @Override - public int getPlayerVersion(@NonNull UUID uuid) { + public int getPlayerVersion(UUID uuid) { return getPlayerVersion(ProxyServer.getInstance().getPlayer(uuid)); } diff --git a/bungee/src/main/java/us/myles/ViaVersion/bungee/service/ProtocolDetectorService.java b/bungee/src/main/java/us/myles/ViaVersion/bungee/service/ProtocolDetectorService.java index 6f5f6a909..e0d112b69 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/bungee/service/ProtocolDetectorService.java +++ b/bungee/src/main/java/us/myles/ViaVersion/bungee/service/ProtocolDetectorService.java @@ -1,6 +1,5 @@ package us.myles.ViaVersion.bungee.service; -import lombok.Getter; import net.md_5.bungee.api.Callback; import net.md_5.bungee.api.ServerPing; import net.md_5.bungee.api.config.ServerInfo; @@ -15,9 +14,8 @@ import java.util.concurrent.ConcurrentHashMap; public class ProtocolDetectorService implements Runnable { private static final Map detectedProtocolIds = new ConcurrentHashMap<>(); - private BungeePlugin plugin; - @Getter private static ProtocolDetectorService instance; + private final BungeePlugin plugin; public ProtocolDetectorService(BungeePlugin plugin) { this.plugin = plugin; @@ -84,4 +82,11 @@ public class ProtocolDetectorService implements Runnable { return new HashMap<>(detectedProtocolIds); } + public static ProtocolDetectorService getInstance() { + return instance; + } + + public BungeePlugin getPlugin() { + return plugin; + } } diff --git a/bungee/src/main/java/us/myles/ViaVersion/bungee/storage/BungeeStorage.java b/bungee/src/main/java/us/myles/ViaVersion/bungee/storage/BungeeStorage.java index 592ec0f30..8723fa2a4 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/bungee/storage/BungeeStorage.java +++ b/bungee/src/main/java/us/myles/ViaVersion/bungee/storage/BungeeStorage.java @@ -1,15 +1,14 @@ package us.myles.ViaVersion.bungee.storage; -import lombok.EqualsAndHashCode; import net.md_5.bungee.api.connection.ProxiedPlayer; import us.myles.ViaVersion.api.data.StoredObject; import us.myles.ViaVersion.api.data.UserConnection; import java.lang.reflect.Field; +import java.util.Objects; import java.util.Set; import java.util.UUID; -@EqualsAndHashCode(callSuper = true) public class BungeeStorage extends StoredObject { private static Field bossField; @@ -59,4 +58,22 @@ public class BungeeStorage extends StoredObject { public Set getBossbar() { return bossbar; } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BungeeStorage that = (BungeeStorage) o; + if (!Objects.equals(player, that.player)) return false; + if (!Objects.equals(currentServer, that.currentServer)) return false; + return Objects.equals(bossbar, that.bossbar); + } + + @Override + public int hashCode() { + int result = player != null ? player.hashCode() : 0; + result = 31 * result + (currentServer != null ? currentServer.hashCode() : 0); + result = 31 * result + (bossbar != null ? bossbar.hashCode() : 0); + return result; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/ViaManager.java b/common/src/main/java/us/myles/ViaVersion/ViaManager.java index d1e523a70..4b901cba0 100644 --- a/common/src/main/java/us/myles/ViaVersion/ViaManager.java +++ b/common/src/main/java/us/myles/ViaVersion/ViaManager.java @@ -1,8 +1,9 @@ package us.myles.ViaVersion; -import lombok.Builder; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.platform.TaskId; +import us.myles.ViaVersion.api.platform.ViaConnectionManager; import us.myles.ViaVersion.api.platform.ViaInjector; import us.myles.ViaVersion.api.platform.ViaPlatform; import us.myles.ViaVersion.api.platform.ViaPlatformLoader; @@ -27,9 +28,9 @@ public class ViaManager { private final ViaCommandHandler commandHandler; private final ViaPlatformLoader loader; private final Set subPlatforms = new HashSet<>(); + private TaskId mappingLoadingTask; private boolean debug; - @Builder public ViaManager(ViaPlatform platform, ViaInjector injector, ViaCommandHandler commandHandler, ViaPlatformLoader loader) { this.platform = platform; this.injector = injector; @@ -37,6 +38,10 @@ public class ViaManager { this.loader = loader; } + public static ViaManagerBuilder builder() { + return new ViaManagerBuilder(); + } + public void init() { if (System.getProperty("ViaVersion") != null) { // Reload? @@ -83,6 +88,12 @@ public class ViaManager { // Load Platform loader.load(); // Common tasks + mappingLoadingTask = Via.getPlatform().runRepeatingSync(() -> { + if (ProtocolRegistry.checkForMappingCompletion()) { + platform.cancelTask(mappingLoadingTask); + mappingLoadingTask = null; + } + }, 10L); if (ProtocolRegistry.SERVER_PROTOCOL < ProtocolVersion.v1_9.getId()) { if (Via.getConfig().isSimulatePlayerTick()) { Via.getPlatform().runRepeatingSync(new ViaIdleThread(), 1L); @@ -128,6 +139,9 @@ public class ViaManager { return platform.getConnectionManager().getConnectedClients(); } + /** + * @see ViaConnectionManager#isClientConnected(UUID) + */ public boolean isClientConnected(UUID player) { return platform.getConnectionManager().isClientConnected(player); } @@ -136,17 +150,6 @@ public class ViaManager { platform.getConnectionManager().onLoginSuccess(info); } - public void handleDisconnect(UUID id) { - UserConnection connection = getConnection(id); - if (connection != null) { - handleDisconnect(connection); - } - } - - public void handleDisconnect(UserConnection info) { - platform.getConnectionManager().onDisconnect(info); - } - public ViaPlatform getPlatform() { return platform; } @@ -185,7 +188,41 @@ public class ViaManager { return subPlatforms; } + /** + * @see ViaConnectionManager#getConnectedClient(UUID) + */ public UserConnection getConnection(UUID playerUUID) { return platform.getConnectionManager().getConnectedClient(playerUUID); } + + public static final class ViaManagerBuilder { + private ViaPlatform platform; + private ViaInjector injector; + private ViaCommandHandler commandHandler; + private ViaPlatformLoader loader; + + public ViaManagerBuilder platform(ViaPlatform platform) { + this.platform = platform; + return this; + } + + public ViaManagerBuilder injector(ViaInjector injector) { + this.injector = injector; + return this; + } + + public ViaManagerBuilder loader(ViaPlatformLoader loader) { + this.loader = loader; + return this; + } + + public ViaManagerBuilder commandHandler(ViaCommandHandler commandHandler) { + this.commandHandler = commandHandler; + return this; + } + + public ViaManager build() { + return new ViaManager(platform, injector, commandHandler, loader); + } + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/Via.java b/common/src/main/java/us/myles/ViaVersion/api/Via.java index 6cef5663a..1edd82b7c 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/Via.java +++ b/common/src/main/java/us/myles/ViaVersion/api/Via.java @@ -7,7 +7,6 @@ import us.myles.ViaVersion.api.platform.ViaPlatform; public class Via { private static ViaPlatform platform; private static ViaManager manager; - private static boolean cacheJsonMappings; /** * Register the ViaManager associated with the platform. diff --git a/common/src/main/java/us/myles/ViaVersion/api/ViaAPI.java b/common/src/main/java/us/myles/ViaVersion/api/ViaAPI.java index 52ef3ebdb..b5a469953 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/ViaAPI.java +++ b/common/src/main/java/us/myles/ViaVersion/api/ViaAPI.java @@ -38,8 +38,8 @@ public interface ViaAPI { * * @param playerUUID UUID of a player * @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)}, - * or use {@link #isInjected(UUID)} + * @deprecated use {@link #isInjected(UUID)} + * @see #isInjected(UUID) */ @Deprecated default boolean isPorted(UUID playerUUID) { @@ -66,18 +66,18 @@ public interface ViaAPI { * * @param player Platform player object, eg. Bukkit this is Player * @param packet The packet, you need a VarInt ID then the packet contents. - * @throws IllegalArgumentException If not on 1.9 throws IllegalArg + * @throws IllegalArgumentException if the player is not injected by Via */ - void sendRawPacket(T player, ByteBuf packet) throws IllegalArgumentException; + void sendRawPacket(T player, ByteBuf packet); /** * 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 + * @throws IllegalArgumentException if the player is not injected by Via */ - void sendRawPacket(UUID uuid, ByteBuf packet) throws IllegalArgumentException; + void sendRawPacket(UUID uuid, ByteBuf packet); /** * Create a new bossbar instance diff --git a/common/src/main/java/us/myles/ViaVersion/api/data/UserConnection.java b/common/src/main/java/us/myles/ViaVersion/api/data/UserConnection.java index dab0fc13c..0221bd197 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/data/UserConnection.java +++ b/common/src/main/java/us/myles/ViaVersion/api/data/UserConnection.java @@ -5,7 +5,6 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; -import lombok.Data; import net.md_5.bungee.api.ChatColor; import us.myles.ViaVersion.api.PacketWrapper; import us.myles.ViaVersion.api.Via; @@ -17,23 +16,25 @@ import us.myles.ViaVersion.util.PipelineUtil; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; -@Data public class UserConnection { + private static final AtomicLong IDS = new AtomicLong(); + private final long id = IDS.incrementAndGet(); private final Channel channel; Map storedObjects = new ConcurrentHashMap<>(); private boolean active = true; - private boolean pendingDisconnect = false; + private boolean pendingDisconnect; private Object lastPacket; - private long sentPackets = 0L; - private long receivedPackets = 0L; + private long sentPackets; + private long receivedPackets; // Used for tracking pps - private long startTime = 0L; - private long intervalPackets = 0L; + private long startTime; + private long intervalPackets; private long packetsPerSecond = -1L; // Used for handling warnings (over time) - private int secondsObserved = 0; - private int warnings = 0; + private int secondsObserved; + private int warnings; public UserConnection(Channel channel) { this.channel = channel; @@ -242,4 +243,109 @@ public class UserConnection { public void sendRawPacketToServer(ByteBuf packet) { sendRawPacketToServer(packet, false); } + + public long getId() { + return id; + } + + public Channel getChannel() { + return channel; + } + + public Map getStoredObjects() { + return storedObjects; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + public boolean isPendingDisconnect() { + return pendingDisconnect; + } + + public void setPendingDisconnect(boolean pendingDisconnect) { + this.pendingDisconnect = pendingDisconnect; + } + + public Object getLastPacket() { + return lastPacket; + } + + public void setLastPacket(Object lastPacket) { + this.lastPacket = lastPacket; + } + + public long getSentPackets() { + return sentPackets; + } + + public void setSentPackets(long sentPackets) { + this.sentPackets = sentPackets; + } + + public long getReceivedPackets() { + return receivedPackets; + } + + public void setReceivedPackets(long receivedPackets) { + this.receivedPackets = receivedPackets; + } + + public long getStartTime() { + return startTime; + } + + public void setStartTime(long startTime) { + this.startTime = startTime; + } + + public long getIntervalPackets() { + return intervalPackets; + } + + public void setIntervalPackets(long intervalPackets) { + this.intervalPackets = intervalPackets; + } + + public long getPacketsPerSecond() { + return packetsPerSecond; + } + + public void setPacketsPerSecond(long packetsPerSecond) { + this.packetsPerSecond = packetsPerSecond; + } + + public int getSecondsObserved() { + return secondsObserved; + } + + public void setSecondsObserved(int secondsObserved) { + this.secondsObserved = secondsObserved; + } + + public int getWarnings() { + return warnings; + } + + public void setWarnings(int warnings) { + this.warnings = warnings; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + UserConnection that = (UserConnection) o; + return id == that.id; + } + + @Override + public int hashCode() { + return Long.hashCode(id); + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_10Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_10Types.java index 618e53d9f..d2ca736a5 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_10Types.java +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_10Types.java @@ -1,7 +1,5 @@ package us.myles.ViaVersion.api.entities; -import lombok.AllArgsConstructor; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.HashMap; @@ -27,8 +25,6 @@ public class Entity1_10Types { return type.get(); } - @AllArgsConstructor - @Getter public enum EntityType implements us.myles.ViaVersion.api.entities.EntityType { ENTITY(-1), DROPPED_ITEM(1, ENTITY), @@ -126,6 +122,11 @@ public class Entity1_10Types { this.parent = null; } + EntityType(int id, EntityType parent) { + this.id = id; + this.parent = parent; + } + static { for (EntityType type : EntityType.values()) { TYPES.put(type.id, type); @@ -137,10 +138,18 @@ public class Entity1_10Types { return Optional.empty(); return Optional.ofNullable(TYPES.get(id)); } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getParent() { + return parent; + } } - @AllArgsConstructor - @Getter public enum ObjectType implements us.myles.ViaVersion.api.entities.ObjectType { BOAT(1, EntityType.BOAT), ITEM(2, EntityType.DROPPED_ITEM), @@ -179,6 +188,21 @@ public class Entity1_10Types { } } + ObjectType(int id, EntityType type) { + this.id = id; + this.type = type; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getType() { + return type; + } + public static Optional findById(int id) { if (id == -1) return Optional.empty(); diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_11Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_11Types.java index de51bc7ea..c6599aac9 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_11Types.java +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_11Types.java @@ -1,7 +1,5 @@ package us.myles.ViaVersion.api.entities; -import lombok.AllArgsConstructor; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.HashMap; @@ -27,8 +25,6 @@ public class Entity1_11Types { return type.get(); } - @AllArgsConstructor - @Getter public enum EntityType implements us.myles.ViaVersion.api.entities.EntityType { ENTITY(-1), DROPPED_ITEM(1, ENTITY), @@ -154,6 +150,21 @@ public class Entity1_11Types { this.parent = null; } + EntityType(int id, EntityType parent) { + this.id = id; + this.parent = parent; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getParent() { + return parent; + } + static { for (EntityType type : EntityType.values()) { TYPES.put(type.id, type); @@ -167,8 +178,6 @@ public class Entity1_11Types { } } - @AllArgsConstructor - @Getter public enum ObjectType implements us.myles.ViaVersion.api.entities.ObjectType { BOAT(1, EntityType.BOAT), ITEM(2, EntityType.DROPPED_ITEM), @@ -209,6 +218,21 @@ public class Entity1_11Types { } } + ObjectType(int id, EntityType type) { + this.id = id; + this.type = type; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getType() { + return type; + } + public static Optional findById(int id) { if (id == -1) return Optional.empty(); diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_12Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_12Types.java index d6e974ead..37c454f15 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_12Types.java +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_12Types.java @@ -10,8 +10,6 @@ package us.myles.ViaVersion.api.entities; -import lombok.AllArgsConstructor; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.HashMap; @@ -37,8 +35,6 @@ public class Entity1_12Types { return type.get(); } - @AllArgsConstructor - @Getter public enum EntityType implements us.myles.ViaVersion.api.entities.EntityType { ENTITY(-1), DROPPED_ITEM(1, ENTITY), @@ -167,6 +163,21 @@ public class Entity1_12Types { this.parent = null; } + EntityType(int id, EntityType parent) { + this.id = id; + this.parent = parent; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getParent() { + return parent; + } + static { for (EntityType type : EntityType.values()) { TYPES.put(type.id, type); @@ -180,8 +191,6 @@ public class Entity1_12Types { } } - @AllArgsConstructor - @Getter public enum ObjectType implements us.myles.ViaVersion.api.entities.ObjectType { BOAT(1, EntityType.BOAT), ITEM(2, EntityType.DROPPED_ITEM), @@ -222,6 +231,21 @@ public class Entity1_12Types { } } + ObjectType(int id, EntityType type) { + this.id = id; + this.type = type; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getType() { + return type; + } + public static Optional findById(int id) { if (id == -1) return Optional.empty(); diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_13Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_13Types.java index 252a45c1d..591918921 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_13Types.java +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_13Types.java @@ -1,7 +1,5 @@ package us.myles.ViaVersion.api.entities; -import lombok.AllArgsConstructor; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.HashMap; @@ -27,8 +25,6 @@ public class Entity1_13Types { return type.get(); } - @AllArgsConstructor - @Getter public enum EntityType implements us.myles.ViaVersion.api.entities.EntityType { // Auto generated @@ -209,6 +205,21 @@ public class Entity1_13Types { this.parent = null; } + EntityType(int id, EntityType parent) { + this.id = id; + this.parent = parent; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getParent() { + return parent; + } + static { for (EntityType type : EntityType.values()) { TYPES.put(type.id, type); @@ -222,8 +233,6 @@ public class Entity1_13Types { } } - @AllArgsConstructor - @Getter public enum ObjectType implements us.myles.ViaVersion.api.entities.ObjectType { BOAT(1, EntityType.BOAT), ITEM(2, EntityType.ITEM), @@ -265,6 +274,21 @@ public class Entity1_13Types { } } + ObjectType(int id, EntityType type) { + this.id = id; + this.type = type; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getType() { + return type; + } + public static Optional findById(int id) { if (id == -1) return Optional.empty(); diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_14Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_14Types.java index 6fe30035d..6b7fe2059 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_14Types.java +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_14Types.java @@ -1,7 +1,5 @@ package us.myles.ViaVersion.api.entities; -import lombok.AllArgsConstructor; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.HashMap; @@ -22,8 +20,6 @@ public class Entity1_14Types { return type.get(); } - @AllArgsConstructor - @Getter public enum EntityType implements us.myles.ViaVersion.api.entities.EntityType { // Auto generated @@ -211,6 +207,21 @@ public class Entity1_14Types { this.parent = null; } + EntityType(int id, EntityType parent) { + this.id = id; + this.parent = parent; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getParent() { + return parent; + } + static { for (EntityType type : EntityType.values()) { TYPES.put(type.id, type); diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java index b549f0976..0a54b4139 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java @@ -1,7 +1,5 @@ package us.myles.ViaVersion.api.entities; -import lombok.AllArgsConstructor; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.HashMap; @@ -22,9 +20,6 @@ public class Entity1_15Types { return type.get(); } - - @AllArgsConstructor - @Getter public enum EntityType implements us.myles.ViaVersion.api.entities.EntityType { ENTITY(-1), @@ -211,6 +206,21 @@ public class Entity1_15Types { this.parent = null; } + EntityType(int id, EntityType parent) { + this.id = id; + this.parent = parent; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getParent() { + return parent; + } + static { for (EntityType type : EntityType.values()) { TYPES.put(type.id, type); diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_16Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_16Types.java index 62a34a36d..68ea425ea 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_16Types.java +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_16Types.java @@ -1,7 +1,5 @@ package us.myles.ViaVersion.api.entities; -import lombok.AllArgsConstructor; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.HashMap; @@ -22,9 +20,6 @@ public class Entity1_16Types { return type.get(); } - - @AllArgsConstructor - @Getter public enum EntityType implements us.myles.ViaVersion.api.entities.EntityType { ENTITY(-1), @@ -216,6 +211,21 @@ public class Entity1_16Types { this.parent = null; } + EntityType(int id, EntityType parent) { + this.id = id; + this.parent = parent; + } + + @Override + public int getId() { + return id; + } + + @Override + public EntityType getParent() { + return parent; + } + static { for (EntityType type : EntityType.values()) { TYPES.put(type.id, type); diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_12.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_12.java index 9d480443e..a44369621 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_12.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_12.java @@ -1,12 +1,8 @@ package us.myles.ViaVersion.api.minecraft.metadata.types; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; -@RequiredArgsConstructor -@Getter public enum MetaType1_12 implements MetaType { Byte(0, Type.BYTE), VarInt(1, Type.VAR_INT), @@ -27,8 +23,22 @@ public enum MetaType1_12 implements MetaType { private final int typeID; private final Type type; + MetaType1_12(int typeID, Type type) { + this.typeID = typeID; + this.type = type; + } + public static MetaType1_12 byId(int id) { return values()[id]; } + @Override + public int getTypeID() { + return typeID; + } + + @Override + public Type getType() { + return type; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13.java index d3594150f..eddf6af9a 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13.java @@ -1,13 +1,9 @@ package us.myles.ViaVersion.api.minecraft.metadata.types; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.version.Types1_13; -@RequiredArgsConstructor -@Getter public enum MetaType1_13 implements MetaType { Byte(0, Type.BYTE), VarInt(1, Type.VAR_INT), @@ -30,8 +26,22 @@ public enum MetaType1_13 implements MetaType { private final int typeID; private final Type type; + MetaType1_13(int typeID, Type type) { + this.typeID = typeID; + this.type = type; + } + public static MetaType1_13 byId(int id) { return values()[id]; } + @Override + public int getTypeID() { + return typeID; + } + + @Override + public Type getType() { + return type; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13_2.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13_2.java index e1b9fefa4..a5f3da767 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13_2.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_13_2.java @@ -1,13 +1,9 @@ package us.myles.ViaVersion.api.minecraft.metadata.types; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.version.Types1_13_2; -@RequiredArgsConstructor -@Getter public enum MetaType1_13_2 implements MetaType { Byte(0, Type.BYTE), VarInt(1, Type.VAR_INT), @@ -30,8 +26,22 @@ public enum MetaType1_13_2 implements MetaType { private final int typeID; private final Type type; + MetaType1_13_2(int typeID, Type type) { + this.typeID = typeID; + this.type = type; + } + public static MetaType1_13_2 byId(int id) { return values()[id]; } + @Override + public int getTypeID() { + return typeID; + } + + @Override + public Type getType() { + return type; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_14.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_14.java index e268c6555..94265618b 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_14.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_14.java @@ -1,13 +1,9 @@ package us.myles.ViaVersion.api.minecraft.metadata.types; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.version.Types1_14; -@RequiredArgsConstructor -@Getter public enum MetaType1_14 implements MetaType { Byte(0, Type.BYTE), VarInt(1, Type.VAR_INT), @@ -33,8 +29,22 @@ public enum MetaType1_14 implements MetaType { private final int typeID; private final Type type; + MetaType1_14(int typeID, Type type) { + this.typeID = typeID; + this.type = type; + } + public static MetaType1_14 byId(int id) { return values()[id]; } + @Override + public int getTypeID() { + return typeID; + } + + @Override + public Type getType() { + return type; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_8.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_8.java index 7d75b39fe..44808806c 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_8.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_8.java @@ -1,12 +1,8 @@ package us.myles.ViaVersion.api.minecraft.metadata.types; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; -@RequiredArgsConstructor -@Getter public enum MetaType1_8 implements MetaType { Byte(0, Type.BYTE), Short(1, Type.SHORT), @@ -21,7 +17,22 @@ public enum MetaType1_8 implements MetaType { private final int typeID; private final Type type; + MetaType1_8(int typeID, Type type) { + this.typeID = typeID; + this.type = type; + } + public static MetaType1_8 byId(int id) { return values()[id]; } + + @Override + public int getTypeID() { + return typeID; + } + + @Override + public Type getType() { + return type; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_9.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_9.java index 30be6bef2..ff336cd89 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_9.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_9.java @@ -1,12 +1,8 @@ package us.myles.ViaVersion.api.minecraft.metadata.types; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; -@RequiredArgsConstructor -@Getter public enum MetaType1_9 implements MetaType { Byte(0, Type.BYTE), VarInt(1, Type.VAR_INT), @@ -26,8 +22,22 @@ public enum MetaType1_9 implements MetaType { private final int typeID; private final Type type; + MetaType1_9(int typeID, Type type) { + this.typeID = typeID; + this.type = type; + } + public static MetaType1_9 byId(int id) { return values()[id]; } + @Override + public int getTypeID() { + return typeID; + } + + @Override + public Type getType() { + return type; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java index cb7ea10fe..c73eb0e15 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java +++ b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java @@ -1,5 +1,6 @@ package us.myles.ViaVersion.api.platform; +import io.netty.channel.ChannelFutureListener; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.protocols.base.ProtocolInfo; @@ -18,6 +19,10 @@ public class ViaConnectionManager { UUID id = connection.get(ProtocolInfo.class).getUuid(); connections.add(connection); clients.put(id, connection); + + if (connection.getChannel() != null) { + connection.getChannel().closeFuture().addListener((ChannelFutureListener) future -> onDisconnect(connection)); + } } public void onDisconnect(UserConnection connection) { @@ -42,6 +47,9 @@ public class ViaConnectionManager { * Returns null when there isn't a server or connection was not found * When ViaVersion is reloaded, this method may not return some players. * May not return ProtocolSupport players. + *

+ * Note that connections are removed as soon as their channel is closed, + * so avoid using this method during player quits for example. */ public UserConnection getConnectedClient(UUID clientIdentifier) { return clients.get(clientIdentifier); @@ -58,6 +66,12 @@ public class ViaConnectionManager { return Collections.unmodifiableSet(connections); } + /** + * Returns if Via injected into this player connection. + * + * @param playerId player uuid + * @return true if the player is handled by Via + */ public boolean isClientConnected(UUID playerId) { return clients.containsKey(playerId); } diff --git a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java index 184d2526f..3ae565322 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java +++ b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java @@ -70,11 +70,10 @@ public class ProtocolRegistry { registerBaseProtocol(BASE_PROTOCOL, Range.lessThan(Integer.MIN_VALUE)); registerBaseProtocol(new BaseProtocol1_7(), Range.all()); - // Register built in protocols registerProtocol(new Protocol1_9To1_8(), ProtocolVersion.v1_9, ProtocolVersion.v1_8); registerProtocol(new Protocol1_9_1To1_9(), Arrays.asList(ProtocolVersion.v1_9_1.getId(), ProtocolVersion.v1_9_2.getId()), ProtocolVersion.v1_9.getId()); registerProtocol(new Protocol1_9_3To1_9_1_2(), ProtocolVersion.v1_9_3, ProtocolVersion.v1_9_2); - // Only supported for 1.9.4 server to 1.9 (nothing else) + registerProtocol(new Protocol1_9To1_9_1(), ProtocolVersion.v1_9, ProtocolVersion.v1_9_2); registerProtocol(new Protocol1_9_1_2To1_9_3_4(), Arrays.asList(ProtocolVersion.v1_9_1.getId(), ProtocolVersion.v1_9_2.getId()), ProtocolVersion.v1_9_3.getId()); registerProtocol(new Protocol1_10To1_9_3_4(), ProtocolVersion.v1_10, ProtocolVersion.v1_9_3); @@ -320,15 +319,26 @@ public class ProtocolRegistry { if (future == null) return; future.get(); + } + /** + * Shuts down the executor and uncaches mappings if all futures have been completed. + * + * @return true if the executor has now been shut down + */ + public static boolean checkForMappingCompletion() { synchronized (MAPPING_LOADER_LOCK) { - if (mappingsLoaded) return; + if (mappingsLoaded) return false; - // Remove only after execution to block other potential threads - mappingLoaderFutures.remove(protocolClass); - if (mappingLoaderFutures.isEmpty()) { - shutdownLoaderExecutor(); + for (CompletableFuture future : mappingLoaderFutures.values()) { + // Return if any future hasn't completed yet + if (!future.isDone()) { + return false; + } } + + shutdownLoaderExecutor(); + return true; } } @@ -336,6 +346,7 @@ public class ProtocolRegistry { mappingsLoaded = true; mappingLoaderExecutor.shutdown(); mappingLoaderExecutor = null; + mappingLoaderFutures.clear(); mappingLoaderFutures = null; if (MappingDataLoader.isCacheJsonMappings()) { MappingDataLoader.getMappingsCache().clear(); @@ -349,6 +360,13 @@ public class ProtocolRegistry { } } + public static void addMappingLoaderFuture(Class protocolClass, Class dependsOn, Runnable runnable) { + synchronized (MAPPING_LOADER_LOCK) { + CompletableFuture future = getMappingLoaderFuture(dependsOn).whenCompleteAsync((v, throwable) -> runnable.run(), mappingLoaderExecutor); + mappingLoaderFutures.put(protocolClass, future); + } + } + public static CompletableFuture getMappingLoaderFuture(Class protocolClass) { synchronized (MAPPING_LOADER_LOCK) { if (mappingsLoaded) return null; diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/base/ProtocolInfo.java b/common/src/main/java/us/myles/ViaVersion/protocols/base/ProtocolInfo.java index 565eab34b..a2827538c 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/base/ProtocolInfo.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/base/ProtocolInfo.java @@ -66,4 +66,15 @@ public class ProtocolInfo extends StoredObject { public void setPipeline(ProtocolPipeline pipeline) { this.pipeline = pipeline; } + + @Override + public String toString() { + return "ProtocolInfo{" + + "state=" + state + + ", protocolVersion=" + protocolVersion + + ", serverProtocolVersion=" + serverProtocolVersion + + ", username='" + username + '\'' + + ", uuid=" + uuid + + '}'; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java index 8223d3290..a98f15ce0 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java @@ -1,7 +1,5 @@ package us.myles.ViaVersion.protocols.protocol1_14to1_13_2.storage; -import lombok.Getter; -import lombok.Setter; import us.myles.ViaVersion.api.PacketWrapper; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.entities.Entity1_14Types.EntityType; @@ -18,14 +16,8 @@ public class EntityTracker1_14 extends EntityTracker { // 0x1 = sleeping, 0x2 = riptide private final Map sleepingAndRiptideData = new ConcurrentHashMap<>(); private final Map playerEntityFlags = new ConcurrentHashMap<>(); - @Getter - @Setter private int latestTradeWindowId; - @Getter - @Setter private boolean forceSendCenterChunk = true; - @Getter - @Setter private int chunkCenterX, chunkCenterZ; public EntityTracker1_14(UserConnection user) { @@ -101,4 +93,36 @@ public class EntityTracker1_14 extends EntityTracker { public void setEntityFlags(int player, byte data) { playerEntityFlags.put(player, data); } + + public int getLatestTradeWindowId() { + return latestTradeWindowId; + } + + public void setLatestTradeWindowId(int latestTradeWindowId) { + this.latestTradeWindowId = latestTradeWindowId; + } + + public boolean isForceSendCenterChunk() { + return forceSendCenterChunk; + } + + public void setForceSendCenterChunk(boolean forceSendCenterChunk) { + this.forceSendCenterChunk = forceSendCenterChunk; + } + + public int getChunkCenterX() { + return chunkCenterX; + } + + public void setChunkCenterX(int chunkCenterX) { + this.chunkCenterX = chunkCenterX; + } + + public int getChunkCenterZ() { + return chunkCenterZ; + } + + public void setChunkCenterZ(int chunkCenterZ) { + this.chunkCenterZ = chunkCenterZ; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/util/ConcurrentList.java b/common/src/main/java/us/myles/ViaVersion/util/ConcurrentList.java index 524b9145f..ea08e5edf 100644 --- a/common/src/main/java/us/myles/ViaVersion/util/ConcurrentList.java +++ b/common/src/main/java/us/myles/ViaVersion/util/ConcurrentList.java @@ -1,9 +1,13 @@ package us.myles.ViaVersion.util; -import lombok.SneakyThrows; - import java.lang.reflect.Field; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.NoSuchElementException; /** * Created by wea_ondara licensed under MIT @@ -54,16 +58,19 @@ public class ConcurrentList extends ArrayList { } @Override - @SneakyThrows public Object clone() { synchronized (lock) { - ConcurrentList clist = (ConcurrentList) super.clone(); - clist.modCount = 0; - Field f = ArrayList.class.getDeclaredField("elementData"); - f.setAccessible(true); - f.set(clist, Arrays.copyOf((Object[]) f.get(this), this.size())); + try { + ConcurrentList clist = (ConcurrentList) super.clone(); + clist.modCount = 0; + Field f = ArrayList.class.getDeclaredField("elementData"); + f.setAccessible(true); + f.set(clist, Arrays.copyOf((Object[]) f.get(this), this.size())); - return clist; + return clist; + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } } } diff --git a/pom.xml b/pom.xml index ddb54884d..404fd2fb1 100644 --- a/pom.xml +++ b/pom.xml @@ -73,14 +73,6 @@ - - - org.projectlombok - lombok - 1.18.4 - provided - - org.javassist diff --git a/sponge/pom.xml b/sponge/pom.xml index 2fce07c34..1cde212ce 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -23,16 +23,15 @@ + org.apache.maven.plugins maven-compiler-plugin - 3.6.0 + 3.8.1 - - - lombok.launch.AnnotationProcessorHider$AnnotationProcessor - - + + -proc:none + diff --git a/sponge/src/main/java/us/myles/ViaVersion/sponge/listeners/ClientLeaveListener.java b/sponge/src/main/java/us/myles/ViaVersion/sponge/listeners/ClientLeaveListener.java deleted file mode 100644 index 874ab3429..000000000 --- a/sponge/src/main/java/us/myles/ViaVersion/sponge/listeners/ClientLeaveListener.java +++ /dev/null @@ -1,12 +0,0 @@ -package us.myles.ViaVersion.sponge.listeners; - -import org.spongepowered.api.event.Listener; -import org.spongepowered.api.event.network.ClientConnectionEvent; -import us.myles.ViaVersion.api.Via; - -public class ClientLeaveListener { - @Listener - public void onDisconnect(ClientConnectionEvent.Disconnect disconnect) { - Via.getManager().handleDisconnect(disconnect.getTargetEntity().getUniqueId()); - } -} diff --git a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeBossBar.java b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeBossBar.java index df03b6d31..3f0930ba4 100644 --- a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeBossBar.java +++ b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeBossBar.java @@ -1,13 +1,11 @@ package us.myles.ViaVersion.sponge.platform; -import lombok.Getter; import org.spongepowered.api.entity.living.player.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.boss.CommonBoss; -@Getter public class SpongeBossBar extends CommonBoss { public SpongeBossBar(String title, float health, BossColor color, BossStyle style) { diff --git a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaLoader.java b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaLoader.java index cc8ecfe1d..e73a8b7df 100644 --- a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaLoader.java +++ b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaLoader.java @@ -13,7 +13,6 @@ import us.myles.ViaVersion.protocols.base.ProtocolInfo; import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.BulkChunkTranslatorProvider; import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.HandItemProvider; import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider; -import us.myles.ViaVersion.sponge.listeners.ClientLeaveListener; import us.myles.ViaVersion.sponge.listeners.UpdateListener; import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.BlockListener; import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.DeathListener; @@ -50,8 +49,6 @@ public class SpongeViaLoader implements ViaPlatformLoader { public void load() { // Update Listener registerListener(new UpdateListener()); - /* Base Protocol */ - registerListener(new ClientLeaveListener()); /* 1.9 client to 1.8 server */ if (ProtocolRegistry.SERVER_PROTOCOL < ProtocolVersion.v1_9.getId()) { diff --git a/velocity/src/main/java/us/myles/ViaVersion/VelocityPlugin.java b/velocity/src/main/java/us/myles/ViaVersion/VelocityPlugin.java index 1637eecd1..70bbd800f 100644 --- a/velocity/src/main/java/us/myles/ViaVersion/VelocityPlugin.java +++ b/velocity/src/main/java/us/myles/ViaVersion/VelocityPlugin.java @@ -3,7 +3,6 @@ package us.myles.ViaVersion; import com.google.gson.JsonObject; import com.google.inject.Inject; import com.velocitypowered.api.event.Subscribe; -import com.velocitypowered.api.event.connection.DisconnectEvent; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.plugin.Plugin; import com.velocitypowered.api.plugin.PluginContainer; @@ -18,7 +17,6 @@ import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.command.ViaCommandSender; import us.myles.ViaVersion.api.configuration.ConfigurationProvider; import us.myles.ViaVersion.api.data.MappingDataLoader; -import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.platform.TaskId; import us.myles.ViaVersion.api.platform.ViaConnectionManager; import us.myles.ViaVersion.api.platform.ViaPlatform; @@ -27,13 +25,19 @@ import us.myles.ViaVersion.util.GsonUtil; import us.myles.ViaVersion.velocity.VersionInfo; import us.myles.ViaVersion.velocity.command.VelocityCommandHandler; import us.myles.ViaVersion.velocity.command.VelocityCommandSender; -import us.myles.ViaVersion.velocity.platform.*; +import us.myles.ViaVersion.velocity.platform.VelocityTaskId; +import us.myles.ViaVersion.velocity.platform.VelocityViaAPI; +import us.myles.ViaVersion.velocity.platform.VelocityViaConfig; +import us.myles.ViaVersion.velocity.platform.VelocityViaInjector; +import us.myles.ViaVersion.velocity.platform.VelocityViaLoader; import us.myles.ViaVersion.velocity.service.ProtocolDetectorService; import us.myles.ViaVersion.velocity.util.LoggerWrapper; import java.io.File; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; import java.util.concurrent.TimeUnit; @Plugin( @@ -82,17 +86,6 @@ public class VelocityPlugin implements ViaPlatform { Via.getManager().init(); } - @Subscribe - public void onQuit(DisconnectEvent e) { - UserConnection userConnection = connectionManager.getConnectedClient(e.getPlayer().getUniqueId()); - if (userConnection != null) { - // Only remove if the connection is disconnected (eg. relogin) - if (userConnection.getChannel() == null || !userConnection.getChannel().isOpen()) { - Via.getManager().handleDisconnect(e.getPlayer().getUniqueId()); - } - } - } - @Override public String getPlatformName() { String proxyImpl = ProxyServer.class.getPackage().getImplementationTitle(); diff --git a/velocity/src/main/java/us/myles/ViaVersion/velocity/storage/VelocityStorage.java b/velocity/src/main/java/us/myles/ViaVersion/velocity/storage/VelocityStorage.java index cc7284f12..9d43f3a1e 100644 --- a/velocity/src/main/java/us/myles/ViaVersion/velocity/storage/VelocityStorage.java +++ b/velocity/src/main/java/us/myles/ViaVersion/velocity/storage/VelocityStorage.java @@ -1,7 +1,6 @@ package us.myles.ViaVersion.velocity.storage; import com.velocitypowered.api.proxy.Player; -import lombok.EqualsAndHashCode; import us.myles.ViaVersion.api.data.StoredObject; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.util.ReflectionUtil; @@ -9,9 +8,9 @@ import us.myles.ViaVersion.util.ReflectionUtil; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; +import java.util.Objects; import java.util.UUID; -@EqualsAndHashCode(callSuper = true) public class VelocityStorage extends StoredObject { private final Player player; private String currentServer; @@ -72,4 +71,22 @@ public class VelocityStorage extends StoredObject { public List getCachedBossbar() { return cachedBossbar; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + VelocityStorage that = (VelocityStorage) o; + if (!Objects.equals(player, that.player)) return false; + if (!Objects.equals(currentServer, that.currentServer)) return false; + return Objects.equals(cachedBossbar, that.cachedBossbar); + } + + @Override + public int hashCode() { + int result = player != null ? player.hashCode() : 0; + result = 31 * result + (currentServer != null ? currentServer.hashCode() : 0); + result = 31 * result + (cachedBossbar != null ? cachedBossbar.hashCode() : 0); + return result; + } }