diff --git a/.travis.yml b/.travis.yml index b57cd3069..ce6c32a37 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ sudo: false language: java jdk: - - oraclejdk8 - openjdk11 cache: diff --git a/README.md b/README.md index cc4b9c37b..8440ced50 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ViaVersion 2.1.1 - Spigot, Sponge, BungeeCord, Velocity +# ViaVersion 2.1.3 - Spigot, Sponge, BungeeCord, Velocity [![Build Status](https://travis-ci.com/ViaVersion/ViaVersion.svg?branch=master)](https://travis-ci.com/ViaVersion/ViaVersion) [![Discord](https://img.shields.io/badge/chat-on%20discord-blue.svg)](https://viaversion.com/discord) diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 041162ecf..e643bc718 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT 4.0.0 diff --git a/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java b/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java index ada518e35..5f7cf42af 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java @@ -28,17 +28,17 @@ import java.util.UUID; public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { - private BukkitCommandHandler commandHandler; + private final BukkitCommandHandler commandHandler; private boolean compatSpigotBuild = false; private boolean spigot = true; private boolean lateBind = false; private boolean protocolSupport = false; @Getter - private BukkitViaConfig conf; + private final BukkitViaConfig conf; @Getter - private ViaAPI api = new BukkitViaAPI(this); - private List queuedTasks = new ArrayList<>(); - private List asyncQueuedTasks = new ArrayList<>(); + private final ViaAPI api = new BukkitViaAPI(this); + private final List queuedTasks = new ArrayList<>(); + private final List asyncQueuedTasks = new ArrayList<>(); public ViaVersionPlugin() { // Command handler @@ -238,7 +238,7 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { if (Bukkit.getPluginManager().getPlugin("ProtocolLib") != null) { getLogger().severe("ViaVersion is already loaded, we're going to kick all the players... because otherwise we'll crash because of ProtocolLib."); for (Player player : Bukkit.getOnlinePlayers()) { - player.kickPlayer(ChatColor.translateAlternateColorCodes('&', getConf().getReloadDisconnectMsg())); + player.kickPlayer(ChatColor.translateAlternateColorCodes('&', conf.getReloadDisconnectMsg())); } } else { diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/commands/BukkitCommandSender.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/commands/BukkitCommandSender.java index e1288ca29..9e08186ca 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/commands/BukkitCommandSender.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/commands/BukkitCommandSender.java @@ -9,7 +9,7 @@ import java.util.UUID; @AllArgsConstructor public class BukkitCommandSender implements ViaCommandSender { - private CommandSender sender; + private final CommandSender sender; @Override public boolean hasPermission(String permission) { 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 a44dc1e74..760839394 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 @@ -23,12 +23,13 @@ public class PlayerSneakListener extends ViaBukkitListener { private static final float HEIGHT_1_9 = 1.6F; private static final float DEFAULT_WIDTH = 0.6F; + private final boolean is1_9Fix; + private final boolean is1_14Fix; private Map sneaking; // true = 1.14+, else false private Set sneakingUuids; private Method getHandle; private Method setSize; - private boolean is1_9Fix; - private boolean is1_14Fix; + private boolean useCache; public PlayerSneakListener(ViaVersionPlugin plugin, boolean is1_9Fix, boolean is1_14Fix) { diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java index 4cf432898..4154ad0c1 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/listeners/protocol1_9to1_8/HandItemCache.java @@ -13,12 +13,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class HandItemCache extends BukkitRunnable { - public static boolean CACHE = false; - private static Map handCache = new ConcurrentHashMap<>(); - - public static Item getHandItem(UUID player) { - return handCache.get(player); - } + private final Map handCache = new ConcurrentHashMap<>(); @Override public void run() { @@ -34,6 +29,10 @@ public class HandItemCache extends BukkitRunnable { } } + public Item getHandItem(UUID player) { + return handCache.get(player); + } + public static Item convert(ItemStack itemInHand) { if (itemInHand == null) return new Item((short) 0, (byte) 0, (short) 0, null); return new Item((short) itemInHand.getTypeId(), (byte) itemInHand.getAmount(), itemInHand.getDurability(), null); diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitTaskId.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitTaskId.java index 50685a297..462aa0848 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitTaskId.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitTaskId.java @@ -7,5 +7,5 @@ import us.myles.ViaVersion.api.platform.TaskId; @Getter @AllArgsConstructor public class BukkitTaskId implements TaskId { - private Integer object; + private final Integer object; } diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaAPI.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaAPI.java index d76cece62..a2ca54db9 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaAPI.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaAPI.java @@ -26,7 +26,7 @@ import java.util.UUID; @AllArgsConstructor public class BukkitViaAPI implements ViaAPI, ViaVersionAPI { - private ViaVersionPlugin plugin; + private final ViaVersionPlugin plugin; @Override public int getPlayerVersion(@NonNull Player player) { diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java index 004cb07ea..965098e06 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java @@ -21,8 +21,8 @@ import java.lang.reflect.Method; import java.util.List; public class BukkitViaInjector implements ViaInjector { - private List injectedFutures = new ConcurrentList<>(); - private List> injectedLists = new ConcurrentList<>(); + private final List injectedFutures = new ConcurrentList<>(); + private final List> injectedLists = new ConcurrentList<>(); @Override public void inject() throws Exception { 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 b2e3e82e8..e1ca3ed94 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 @@ -37,10 +37,12 @@ import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; public class BukkitViaLoader implements ViaPlatformLoader { - private ViaVersionPlugin plugin; + private final ViaVersionPlugin plugin; - private Set listeners = new HashSet<>(); - private Set tasks = new HashSet<>(); + private final Set listeners = new HashSet<>(); + private final Set tasks = new HashSet<>(); + + private HandItemCache handItemCache; public BukkitViaLoader(ViaVersionPlugin plugin) { this.plugin = plugin; @@ -94,8 +96,8 @@ public class BukkitViaLoader implements ViaPlatformLoader { storeListener(new PaperPatch(plugin)).register(); } if (plugin.getConf().isItemCache()) { - tasks.add(new HandItemCache().runTaskTimerAsynchronously(plugin, 2L, 2L)); // Updates player's items :) - HandItemCache.CACHE = true; + handItemCache = new HandItemCache(); + tasks.add(handItemCache.runTaskTimerAsynchronously(plugin, 2L, 2L)); // Updates player's items :) } /* Providers */ @@ -110,8 +112,8 @@ public class BukkitViaLoader implements ViaPlatformLoader { Via.getManager().getProviders().use(HandItemProvider.class, new HandItemProvider() { @Override public Item getHandItem(final UserConnection info) { - if (HandItemCache.CACHE) { - return HandItemCache.getHandItem(info.get(ProtocolInfo.class).getUuid()); + if (handItemCache != null) { + return handItemCache.getHandItem(info.get(ProtocolInfo.class).getUuid()); } else { try { return Bukkit.getScheduler().callSyncMethod(Bukkit.getPluginManager().getPlugin("ViaVersion"), new Callable() { diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInventoryQuickMoveProvider.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInventoryQuickMoveProvider.java index f2586442c..0fbcf42fc 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInventoryQuickMoveProvider.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInventoryQuickMoveProvider.java @@ -26,8 +26,8 @@ import java.util.logging.Level; public class BukkitInventoryQuickMoveProvider extends InventoryQuickMoveProvider { - private static Map updateTasks = new ConcurrentHashMap(); - private boolean supported; + private final Map updateTasks = new ConcurrentHashMap<>(); + private final boolean supported; // packet class private Class windowClickPacketClass; private Object clickTypeEnum; @@ -93,7 +93,7 @@ public class BukkitInventoryQuickMoveProvider extends InventoryQuickMoveProvider if (tinvtype == InventoryType.BREWING) { // 1.9 added the blaze powder slot to brewing stand fix for 1.8 servers if (slotId >= 5 && slotId <= 40) { - slotId = (short) (slotId - 1); + slotId -= 1; } } } diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/tasks/protocol1_12to1_11_1/BukkitInventoryUpdateTask.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/tasks/protocol1_12to1_11_1/BukkitInventoryUpdateTask.java index 529363b8c..58eb01430 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/tasks/protocol1_12to1_11_1/BukkitInventoryUpdateTask.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/tasks/protocol1_12to1_11_1/BukkitInventoryUpdateTask.java @@ -12,7 +12,7 @@ import java.util.UUID; public class BukkitInventoryUpdateTask implements Runnable { - private BukkitInventoryQuickMoveProvider provider; + private final BukkitInventoryQuickMoveProvider provider; private final UUID uuid; private final List items; diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/util/NMSUtil.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/util/NMSUtil.java index d01884ecb..b3f6186d7 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/util/NMSUtil.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/util/NMSUtil.java @@ -3,8 +3,8 @@ package us.myles.ViaVersion.bukkit.util; import org.bukkit.Bukkit; public class NMSUtil { - private static String BASE = Bukkit.getServer().getClass().getPackage().getName(); - private static String NMS = BASE.replace("org.bukkit.craftbukkit", "net.minecraft.server"); + private static final String BASE = Bukkit.getServer().getClass().getPackage().getName(); + private static final String NMS = BASE.replace("org.bukkit.craftbukkit", "net.minecraft.server"); public static Class nms(String className) throws ClassNotFoundException { return Class.forName(NMS + "." + className); diff --git a/bungee/pom.xml b/bungee/pom.xml index 57fd5d83f..991a2f6df 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT 4.0.0 diff --git a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java index 6f3cc1b81..f3c0a677a 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java +++ b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java @@ -7,6 +7,7 @@ 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; @@ -35,6 +36,17 @@ public class BungeePlugin extends Plugin implements ViaPlatform, Listener { @Override public void onLoad() { + try { + ProtocolConstants.class.getField("MINECRAFT_1_14_4"); + } catch (NoSuchFieldException e) { + getLogger().warning(" / \\"); + getLogger().warning(" / \\"); + getLogger().warning(" / | \\"); + getLogger().warning(" / | \\ BUNGEECORD IS OUTDATED"); + getLogger().warning(" / \\ VIAVERSION MAY NOT WORK AS INTENDED"); + getLogger().warning(" / o \\"); + getLogger().warning("/_____________\\"); + } api = new BungeeViaAPI(); config = new BungeeViaConfig(getDataFolder()); commandHandler = new BungeeCommandHandler(); diff --git a/common/pom.xml b/common/pom.xml index 5fd695d26..997820086 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT 4.0.0 diff --git a/common/src/main/java/us/myles/ViaVersion/AbstractViaConfig.java b/common/src/main/java/us/myles/ViaVersion/AbstractViaConfig.java index 94a69c280..5213002b5 100644 --- a/common/src/main/java/us/myles/ViaVersion/AbstractViaConfig.java +++ b/common/src/main/java/us/myles/ViaVersion/AbstractViaConfig.java @@ -8,7 +8,7 @@ import java.util.List; public abstract class AbstractViaConfig extends Config implements ViaVersionConfig { - public AbstractViaConfig(File configFile) { + protected AbstractViaConfig(File configFile) { super(configFile); } diff --git a/common/src/main/java/us/myles/ViaVersion/ViaManager.java b/common/src/main/java/us/myles/ViaVersion/ViaManager.java index a733cbb94..25563b050 100644 --- a/common/src/main/java/us/myles/ViaVersion/ViaManager.java +++ b/common/src/main/java/us/myles/ViaVersion/ViaManager.java @@ -21,14 +21,14 @@ import java.util.concurrent.ConcurrentHashMap; @Getter public class ViaManager { private final Map portedPlayers = new ConcurrentHashMap<>(); - private ViaPlatform platform; - private ViaProviders providers = new ViaProviders(); + private final ViaPlatform platform; + private final ViaProviders providers = new ViaProviders(); @Setter private boolean debug = false; // Internals - private ViaInjector injector; - private ViaCommandHandler commandHandler; - private ViaPlatformLoader loader; + private final ViaInjector injector; + private final ViaCommandHandler commandHandler; + private final ViaPlatformLoader loader; @Builder public ViaManager(ViaPlatform platform, ViaInjector injector, ViaCommandHandler commandHandler, ViaPlatformLoader loader) { @@ -52,19 +52,14 @@ public class ViaManager { try { injector.inject(); } catch (Exception e) { - getPlatform().getLogger().severe("ViaVersion failed to inject:"); + platform.getLogger().severe("ViaVersion failed to inject:"); e.printStackTrace(); return; } // Mark as injected - System.setProperty("ViaVersion", getPlatform().getPluginVersion()); + System.setProperty("ViaVersion", platform.getPluginVersion()); // If successful - platform.runSync(new Runnable() { - @Override - public void run() { - onServerLoaded(); - } - }); + platform.runSync(this::onServerLoaded); } @@ -73,14 +68,14 @@ public class ViaManager { try { ProtocolRegistry.SERVER_PROTOCOL = injector.getServerProtocolVersion(); } catch (Exception e) { - getPlatform().getLogger().severe("ViaVersion failed to get the server protocol!"); + platform.getLogger().severe("ViaVersion failed to get the server protocol!"); e.printStackTrace(); } // Check if there are any pipes to this version if (ProtocolRegistry.SERVER_PROTOCOL != -1) { - getPlatform().getLogger().info("ViaVersion detected server version: " + ProtocolVersion.getProtocol(ProtocolRegistry.SERVER_PROTOCOL)); + platform.getLogger().info("ViaVersion detected server version: " + ProtocolVersion.getProtocol(ProtocolRegistry.SERVER_PROTOCOL)); if (!ProtocolRegistry.isWorkingPipe()) { - getPlatform().getLogger().warning("ViaVersion does not have any compatible versions for this server version, please read our resource page carefully."); + platform.getLogger().warning("ViaVersion does not have any compatible versions for this server version, please read our resource page carefully."); } } // Load Listeners / Tasks @@ -95,11 +90,11 @@ public class ViaManager { public void destroy() { // Uninject - getPlatform().getLogger().info("ViaVersion is disabling, if this is a reload and you experience issues consider rebooting."); + platform.getLogger().info("ViaVersion is disabling, if this is a reload and you experience issues consider rebooting."); try { injector.uninject(); } catch (Exception e) { - getPlatform().getLogger().severe("ViaVersion failed to uninject:"); + platform.getLogger().severe("ViaVersion failed to uninject:"); e.printStackTrace(); } diff --git a/common/src/main/java/us/myles/ViaVersion/api/PacketWrapper.java b/common/src/main/java/us/myles/ViaVersion/api/PacketWrapper.java index 29f583064..d56877e38 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/PacketWrapper.java +++ b/common/src/main/java/us/myles/ViaVersion/api/PacketWrapper.java @@ -224,7 +224,7 @@ public class PacketWrapper { if (id != -1) { Type.VAR_INT.write(buffer, id); } - if (readableObjects.size() > 0) { + if (!readableObjects.isEmpty()) { packetValues.addAll(readableObjects); readableObjects.clear(); } diff --git a/common/src/main/java/us/myles/ViaVersion/api/data/Mappings.java b/common/src/main/java/us/myles/ViaVersion/api/data/Mappings.java index 3999c5a9c..bb70eb659 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/data/Mappings.java +++ b/common/src/main/java/us/myles/ViaVersion/api/data/Mappings.java @@ -1,6 +1,34 @@ package us.myles.ViaVersion.api.data; -public interface Mappings { +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; - int getNewId(int old); +import java.util.Arrays; + +public class Mappings { + protected final short[] oldToNew; + + public Mappings(int size, JsonObject oldMapping, JsonObject newMapping) { + oldToNew = new short[size]; + Arrays.fill(oldToNew, (short) -1); + MappingDataLoader.mapIdentifiers(oldToNew, oldMapping, newMapping); + } + + public Mappings(JsonObject oldMapping, JsonObject newMapping) { + this(oldMapping.entrySet().size(), oldMapping, newMapping); + } + + public Mappings(int size, JsonArray oldMapping, JsonArray newMapping) { + oldToNew = new short[size]; + Arrays.fill(oldToNew, (short) -1); + MappingDataLoader.mapIdentifiers(oldToNew, oldMapping, newMapping); + } + + public Mappings(JsonArray oldMapping, JsonArray newMapping) { + this(oldMapping.size(), oldMapping, newMapping); + } + + public int getNewId(int old) { + return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; + } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java b/common/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java index 80d7e2a85..3b9f8c3a9 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java +++ b/common/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java @@ -6,5 +6,5 @@ import lombok.Getter; @Getter @AllArgsConstructor public class StoredObject { - private UserConnection user; + private final UserConnection user; } 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 f8368bee1..05fec74fa 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 @@ -19,6 +19,7 @@ import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.Protocol1_13To1_12_2; import us.myles.ViaVersion.protocols.protocol1_14_1to1_14.Protocol1_14_1To1_14; import us.myles.ViaVersion.protocols.protocol1_14_2to1_14_1.Protocol1_14_2To1_14_1; import us.myles.ViaVersion.protocols.protocol1_14_3to1_14_2.Protocol1_14_3To1_14_2; +import us.myles.ViaVersion.protocols.protocol1_14_4to1_14_3.Protocol1_14_4To1_14_3; import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2; import us.myles.ViaVersion.protocols.protocol1_9_1_2to1_9_3_4.Protocol1_9_1_2To1_9_3_4; import us.myles.ViaVersion.protocols.protocol1_9_1to1_9.Protocol1_9_1To1_9; @@ -42,32 +43,44 @@ public class ProtocolRegistry { static { // Base Protocol registerBaseProtocol(BASE_PROTOCOL, Range.lessThan(Integer.MIN_VALUE)); - registerBaseProtocol(new BaseProtocol1_7(), Range.all()); + registerBaseProtocol(new BaseProtocol1_7(), Range.all()); // Register built in protocols - registerProtocol(new Protocol1_9To1_8(), Collections.singletonList(ProtocolVersion.v1_9.getId()), ProtocolVersion.v1_8.getId()); + 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(), Collections.singletonList(ProtocolVersion.v1_9_3.getId()), ProtocolVersion.v1_9_2.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(), Collections.singletonList(ProtocolVersion.v1_9.getId()), ProtocolVersion.v1_9_2.getId()); + 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(), Collections.singletonList(ProtocolVersion.v1_10.getId()), ProtocolVersion.v1_9_3.getId()); + registerProtocol(new Protocol1_10To1_9_3_4(), ProtocolVersion.v1_10, ProtocolVersion.v1_9_3); - registerProtocol(new Protocol1_11To1_10(), Collections.singletonList(ProtocolVersion.v1_11.getId()), ProtocolVersion.v1_10.getId()); - registerProtocol(new Protocol1_11_1To1_11(), Collections.singletonList(ProtocolVersion.v1_11_1.getId()), ProtocolVersion.v1_11.getId()); + registerProtocol(new Protocol1_11To1_10(), ProtocolVersion.v1_11, ProtocolVersion.v1_10); + registerProtocol(new Protocol1_11_1To1_11(), ProtocolVersion.v1_11_1, ProtocolVersion.v1_11); - registerProtocol(new Protocol1_12To1_11_1(), Collections.singletonList(ProtocolVersion.v1_12.getId()), ProtocolVersion.v1_11_1.getId()); - registerProtocol(new Protocol1_12_1To1_12(), Collections.singletonList(ProtocolVersion.v1_12_1.getId()), ProtocolVersion.v1_12.getId()); - registerProtocol(new Protocol1_12_2To1_12_1(), Collections.singletonList(ProtocolVersion.v1_12_2.getId()), ProtocolVersion.v1_12_1.getId()); + registerProtocol(new Protocol1_12To1_11_1(), ProtocolVersion.v1_12, ProtocolVersion.v1_11_1); + registerProtocol(new Protocol1_12_1To1_12(), ProtocolVersion.v1_12_1, ProtocolVersion.v1_12); + registerProtocol(new Protocol1_12_2To1_12_1(), ProtocolVersion.v1_12_2, ProtocolVersion.v1_12_1); - registerProtocol(new Protocol1_13To1_12_2(), Collections.singletonList(ProtocolVersion.v1_13.getId()), ProtocolVersion.v1_12_2.getId()); - registerProtocol(new Protocol1_13_1To1_13(), Arrays.asList(ProtocolVersion.v1_13_1.getId()), ProtocolVersion.v1_13.getId()); - registerProtocol(new Protocol1_13_2To1_13_1(), Arrays.asList(ProtocolVersion.v1_13_2.getId()), ProtocolVersion.v1_13_1.getId()); + registerProtocol(new Protocol1_13To1_12_2(), ProtocolVersion.v1_13, ProtocolVersion.v1_12_2); + registerProtocol(new Protocol1_13_1To1_13(), ProtocolVersion.v1_13_1, ProtocolVersion.v1_13); + registerProtocol(new Protocol1_13_2To1_13_1(), ProtocolVersion.v1_13_2, ProtocolVersion.v1_13_1); - registerProtocol(new Protocol1_14To1_13_2(), Arrays.asList(ProtocolVersion.v1_14.getId()), ProtocolVersion.v1_13_2.getId()); - registerProtocol(new Protocol1_14_1To1_14(), Arrays.asList(ProtocolVersion.v1_14_1.getId()), ProtocolVersion.v1_14.getId()); - registerProtocol(new Protocol1_14_2To1_14_1(), Arrays.asList(ProtocolVersion.v1_14_2.getId()), ProtocolVersion.v1_14_1.getId()); - registerProtocol(new Protocol1_14_3To1_14_2(), Arrays.asList(ProtocolVersion.v1_14_3.getId()), ProtocolVersion.v1_14_2.getId()); + registerProtocol(new Protocol1_14To1_13_2(), ProtocolVersion.v1_14, ProtocolVersion.v1_13_2); + registerProtocol(new Protocol1_14_1To1_14(), ProtocolVersion.v1_14_1, ProtocolVersion.v1_14); + registerProtocol(new Protocol1_14_2To1_14_1(), ProtocolVersion.v1_14_2, ProtocolVersion.v1_14_1); + registerProtocol(new Protocol1_14_3To1_14_2(), ProtocolVersion.v1_14_3, ProtocolVersion.v1_14_2); + registerProtocol(new Protocol1_14_4To1_14_3(), ProtocolVersion.v1_14_4, ProtocolVersion.v1_14_3); + } + + /** + * Register a protocol + * + * @param protocol The protocol to register. + * @param supported Supported client versions. + * @param output The output server version it converts to. + */ + public static void registerProtocol(Protocol protocol, ProtocolVersion supported, ProtocolVersion output) { + registerProtocol(protocol, Collections.singletonList(supported.getId()), output.getId()); } /** @@ -79,7 +92,7 @@ public class ProtocolRegistry { */ public static void registerProtocol(Protocol protocol, List supported, Integer output) { // Clear cache as this may make new routes. - if (pathCache.size() > 0) + if (!pathCache.isEmpty()) pathCache.clear(); for (Integer version : supported) { diff --git a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java index 3bdda1e7e..8ac5bf385 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java +++ b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java @@ -39,6 +39,7 @@ public class ProtocolVersion { public static final ProtocolVersion v1_14_1; public static final ProtocolVersion v1_14_2; public static final ProtocolVersion v1_14_3; + public static final ProtocolVersion v1_14_4; public static final ProtocolVersion unknown; private final int id; @@ -74,6 +75,7 @@ public class ProtocolVersion { register(v1_14_1 = new ProtocolVersion(480, "1.14.1")); register(v1_14_2 = new ProtocolVersion(485, "1.14.2")); register(v1_14_3 = new ProtocolVersion(490, "1.14.3")); + register(v1_14_4 = new ProtocolVersion(498, "1.14.4")); register(unknown = new ProtocolVersion(-1, "UNKNOWN")); } diff --git a/common/src/main/java/us/myles/ViaVersion/api/rewriters/MetadataRewriter.java b/common/src/main/java/us/myles/ViaVersion/api/rewriters/MetadataRewriter.java index a0a5e2e88..cb0413cdf 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/rewriters/MetadataRewriter.java +++ b/common/src/main/java/us/myles/ViaVersion/api/rewriters/MetadataRewriter.java @@ -23,7 +23,6 @@ public abstract class MetadataRewriter { metadataMap = Collections.unmodifiableMap(metadataMap); for (Metadata metadata : new ArrayList<>(metadatas)) { - int oldId = metadata.getId(); try { handleMetadata(entityId, type, metadata, metadatas, metadataMap, connection); } catch (Exception e) { diff --git a/common/src/main/java/us/myles/ViaVersion/commands/ViaCommandHandler.java b/common/src/main/java/us/myles/ViaVersion/commands/ViaCommandHandler.java index a406835bb..9935fc48c 100644 --- a/common/src/main/java/us/myles/ViaVersion/commands/ViaCommandHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/commands/ViaCommandHandler.java @@ -107,7 +107,7 @@ public abstract class ViaCommandHandler implements ViaVersionCommand { */ public void showHelp(ViaCommandSender sender) { Set allowed = calculateAllowedCommands(sender); - if (allowed.size() == 0) { + if (allowed.isEmpty()) { sender.sendMessage(color("&cYou are not allowed to use these commands!")); return; } diff --git a/common/src/main/java/us/myles/ViaVersion/exception/InformativeException.java b/common/src/main/java/us/myles/ViaVersion/exception/InformativeException.java index 969d5acab..433c45e65 100644 --- a/common/src/main/java/us/myles/ViaVersion/exception/InformativeException.java +++ b/common/src/main/java/us/myles/ViaVersion/exception/InformativeException.java @@ -4,8 +4,8 @@ import java.util.HashMap; import java.util.Map; public class InformativeException extends Exception { - final Map info = new HashMap<>(); - int sources = 0; + private final Map info = new HashMap<>(); + private int sources = 0; public InformativeException(Throwable cause) { super(cause); @@ -34,7 +34,7 @@ public class InformativeException extends Exception { builder.append("Please post this error to http://github.com/ViaVersion/ViaVersion/issues\n{"); int i = 0; for (Map.Entry entry : info.entrySet()) { - builder.append((i == 0 ? "" : ", ") + entry.getKey() + ": " + entry.getValue().toString()); + builder.append(i == 0 ? "" : ", ").append(entry.getKey()).append(": ").append(entry.getValue().toString()); i++; } builder.append("}\nActual Error: "); diff --git a/common/src/main/java/us/myles/ViaVersion/handlers/ChannelHandlerContextWrapper.java b/common/src/main/java/us/myles/ViaVersion/handlers/ChannelHandlerContextWrapper.java index 717eaac7d..7a57d4269 100644 --- a/common/src/main/java/us/myles/ViaVersion/handlers/ChannelHandlerContextWrapper.java +++ b/common/src/main/java/us/myles/ViaVersion/handlers/ChannelHandlerContextWrapper.java @@ -10,8 +10,8 @@ import io.netty.util.concurrent.EventExecutor; import java.net.SocketAddress; public class ChannelHandlerContextWrapper implements ChannelHandlerContext { - private ChannelHandlerContext base; - private ViaHandler handler; + private final ChannelHandlerContext base; + private final ViaHandler handler; public ChannelHandlerContextWrapper(ChannelHandlerContext base, ViaHandler handler) { this.base = base; diff --git a/common/src/main/java/us/myles/ViaVersion/packets/PacketType.java b/common/src/main/java/us/myles/ViaVersion/packets/PacketType.java index b3077806b..e468f24b4 100644 --- a/common/src/main/java/us/myles/ViaVersion/packets/PacketType.java +++ b/common/src/main/java/us/myles/ViaVersion/packets/PacketType.java @@ -150,10 +150,10 @@ public enum PacketType { } } - private State state; - private Direction direction; - private int packetID; - private int newPacketID = -1; + 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; diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java index 95e69966a..e3ea1e6e8 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java @@ -16,7 +16,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -46,17 +45,14 @@ public class MappingData { loadTags(fluidTags, mapping1_13.getAsJsonObject("fluid_tags")); Via.getPlatform().getLogger().info("Loading 1.12.2 -> 1.13 enchantment mapping..."); loadEnchantments(oldEnchantmentsIds, mapping1_12.getAsJsonObject("enchantments")); - enchantmentMappings = new EnchantmentMappingByteArray(mapping1_12.getAsJsonObject("enchantments"), mapping1_13.getAsJsonObject("enchantments")); + enchantmentMappings = new Mappings(72, mapping1_12.getAsJsonObject("enchantments"), mapping1_13.getAsJsonObject("enchantments")); Via.getPlatform().getLogger().info("Loading 1.12.2 -> 1.13 sound mapping..."); - soundMappings = new SoundMappingShortArray(mapping1_12.getAsJsonArray("sounds"), mapping1_13.getAsJsonArray("sounds")); + soundMappings = new Mappings(662, mapping1_12.getAsJsonArray("sounds"), mapping1_13.getAsJsonArray("sounds")); Via.getPlatform().getLogger().info("Loading translation mappping"); Map translateData = GsonUtil.getGson().fromJson( - new InputStreamReader( - MappingData.class.getClassLoader() - .getResourceAsStream("assets/viaversion/data/mapping-lang-1.12-1.13.json") - ), - (new TypeToken>() { - }).getType()); + new InputStreamReader(MappingData.class.getClassLoader().getResourceAsStream("assets/viaversion/data/mapping-lang-1.12-1.13.json")), + new TypeToken>() { + }.getType()); try { String[] lines; try (Reader reader = new InputStreamReader(MappingData.class.getClassLoader() @@ -100,12 +96,11 @@ public class MappingData { } } - private static class BlockMappingsShortArray implements Mappings { - private short[] oldToNew = new short[4084]; + private static class BlockMappingsShortArray extends Mappings { private BlockMappingsShortArray(JsonObject mapping1_12, JsonObject mapping1_13) { - Arrays.fill(oldToNew, (short) -1); - MappingDataLoader.mapIdentifiers(oldToNew, mapping1_12, mapping1_13); + super(4084, mapping1_12, mapping1_13); + // Map minecraft:snow[layers=1] of 1.12 to minecraft:snow[layers=2] in 1.13 if (Via.getConfig().isSnowCollisionFix()) { oldToNew[1248] = 3416; @@ -119,38 +114,5 @@ public class MappingData { oldToNew[1556] = 3985; // cracked stone bricks oldToNew[1557] = 3986; // chiseled stone bricks } - - @Override - public int getNewId(int old) { - return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; - } - } - - private static class SoundMappingShortArray implements Mappings { - private short[] oldToNew = new short[662]; - - private SoundMappingShortArray(JsonArray mapping1_12, JsonArray mapping1_13) { - Arrays.fill(oldToNew, (short) -1); - MappingDataLoader.mapIdentifiers(oldToNew, mapping1_12, mapping1_13); - } - - @Override - public int getNewId(int old) { - return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; - } - } - - private static class EnchantmentMappingByteArray implements Mappings { - private byte[] oldToNew = new byte[72]; - - private EnchantmentMappingByteArray(JsonObject m1_12, JsonObject m1_13) { - Arrays.fill(oldToNew, (byte) -1); - MappingDataLoader.mapIdentifiers(oldToNew, m1_12, m1_13); - } - - @Override - public int getNewId(int old) { - return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; - } } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java index a6766d2a6..53638d224 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java @@ -27,6 +27,7 @@ import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.SpawnEggRewriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class InventoryPackets { private static String NBT_TAG_NAME; @@ -404,13 +405,13 @@ public class InventoryPackets { if (numberConverted != null) { oldId = numberConverted; } - String[] newValues = BlockIdData.blockIdMapping.get(oldId); + String[] newValues = BlockIdData.blockIdMapping.get(oldId.toLowerCase(Locale.ROOT)); if (newValues != null) { for (String newValue : newValues) { newCanPlaceOn.add(new StringTag("", newValue)); } } else { - newCanPlaceOn.add(new StringTag("", oldId)); + newCanPlaceOn.add(new StringTag("", oldId.toLowerCase(Locale.ROOT))); } } tag.put(newCanPlaceOn); @@ -426,13 +427,13 @@ public class InventoryPackets { if (numberConverted != null) { oldId = numberConverted; } - String[] newValues = BlockIdData.blockIdMapping.get(oldId); + String[] newValues = BlockIdData.blockIdMapping.get(oldId.toLowerCase(Locale.ROOT)); if (newValues != null) { for (String newValue : newValues) { newCanDestroy.add(new StringTag("", newValue)); } } else { - newCanDestroy.add(new StringTag("", oldId)); + newCanDestroy.add(new StringTag("", oldId.toLowerCase(Locale.ROOT))); } } tag.put(newCanDestroy); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14_4to1_14_3/Protocol1_14_4To1_14_3.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14_4to1_14_3/Protocol1_14_4To1_14_3.java new file mode 100644 index 000000000..8c571275e --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14_4to1_14_3/Protocol1_14_4To1_14_3.java @@ -0,0 +1,47 @@ +package us.myles.ViaVersion.protocols.protocol1_14_4to1_14_3; + +import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.protocol.Protocol; +import us.myles.ViaVersion.api.remapper.PacketHandler; +import us.myles.ViaVersion.api.remapper.PacketRemapper; +import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.packets.State; + +public class Protocol1_14_4To1_14_3 extends Protocol { + + @Override + protected void registerPackets() { + // trade list + registerOutgoing(State.PLAY, 0x27, 0x27, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + wrapper.passthrough(Type.VAR_INT); + int size = wrapper.passthrough(Type.UNSIGNED_BYTE); + for (int i = 0; i < size; i++) { + wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + if (wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + } + wrapper.passthrough(Type.BOOLEAN); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.FLOAT); + wrapper.write(Type.INT, 0); // demand value added in pre5 + } + } + }); + } + }); + } + + @Override + public void init(UserConnection userConnection) { + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java index 4cce427be..0de0ac2df 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java @@ -40,7 +40,6 @@ public class Protocol1_14To1_13_2 extends Protocol { registerOutgoing(State.PLAY, 0x1B, 0x1A); registerOutgoing(State.PLAY, 0x1C, 0x1B); registerOutgoing(State.PLAY, 0x1D, 0x54); - registerOutgoing(State.PLAY, 0x1E, 0x1C); registerOutgoing(State.PLAY, 0x1F, 0x1D); registerOutgoing(State.PLAY, 0x20, 0x1E); registerOutgoing(State.PLAY, 0x21, 0x20); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java index 2899a9332..b6594e4aa 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java @@ -9,10 +9,13 @@ import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.MappingDataLoader; import us.myles.ViaVersion.api.data.Mappings; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; public class MappingData { - public final static BiMap oldToNewItems = HashBiMap.create(); + public static final BiMap oldToNewItems = HashBiMap.create(); public static Mappings blockStateMappings; public static Mappings blockMappings; public static Mappings soundMappings; @@ -23,13 +26,13 @@ public class MappingData { JsonObject mapping1_14 = MappingDataLoader.loadData("mapping-1.14.json"); Via.getPlatform().getLogger().info("Loading 1.13.2 -> 1.14 blockstate mapping..."); - blockStateMappings = new BlockMappingsShortArray(mapping1_13_2.getAsJsonObject("blockstates"), mapping1_14.getAsJsonObject("blockstates")); + blockStateMappings = new Mappings(mapping1_13_2.getAsJsonObject("blockstates"), mapping1_14.getAsJsonObject("blockstates")); Via.getPlatform().getLogger().info("Loading 1.13.2 -> 1.14 block mapping..."); - blockMappings = new BlockMappingsShortArray(mapping1_13_2.getAsJsonObject("blocks"), mapping1_14.getAsJsonObject("blocks")); + blockMappings = new Mappings(mapping1_13_2.getAsJsonObject("blocks"), mapping1_14.getAsJsonObject("blocks")); Via.getPlatform().getLogger().info("Loading 1.13.2 -> 1.14 item mapping..."); MappingDataLoader.mapIdentifiers(oldToNewItems, mapping1_13_2.getAsJsonObject("items"), mapping1_14.getAsJsonObject("items")); Via.getPlatform().getLogger().info("Loading 1.13.2 -> 1.14 sound mapping..."); - soundMappings = new SoundMappingShortArray(mapping1_13_2.getAsJsonArray("sounds"), mapping1_14.getAsJsonArray("sounds")); + soundMappings = new Mappings(mapping1_13_2.getAsJsonArray("sounds"), mapping1_14.getAsJsonArray("sounds")); Via.getPlatform().getLogger().info("Loading 1.14 blockstates..."); JsonObject blockStates = mapping1_14.getAsJsonObject("blockstates"); @@ -52,34 +55,4 @@ public class MappingData { } } } - - private static class SoundMappingShortArray implements Mappings { - private short[] oldToNew; - - private SoundMappingShortArray(JsonArray mapping1_13_2, JsonArray mapping1_14) { - oldToNew = new short[mapping1_13_2.size()]; - Arrays.fill(oldToNew, (short) -1); - MappingDataLoader.mapIdentifiers(oldToNew, mapping1_13_2, mapping1_14); - } - - @Override - public int getNewId(int old) { - return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; - } - } - - private static class BlockMappingsShortArray implements Mappings { - private short[] oldToNew; - - private BlockMappingsShortArray(JsonObject mapping1_13_2, JsonObject mapping1_14) { - oldToNew = new short[mapping1_13_2.entrySet().size()]; - Arrays.fill(oldToNew, (short) -1); - MappingDataLoader.mapIdentifiers(oldToNew, mapping1_13_2, mapping1_14); - } - - @Override - public int getNewId(int old) { - return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; - } - } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java index 417cb149c..131915bcd 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java @@ -22,11 +22,18 @@ import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.storage.EntityTracker1 import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.types.Chunk1_14Type; import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; +import java.util.Arrays; + public class WorldPackets { private static final int AIR = MappingData.blockStateMappings.getNewId(0); private static final int VOID_AIR = MappingData.blockStateMappings.getNewId(8591); private static final int CAVE_AIR = MappingData.blockStateMappings.getNewId(8592); public static final int SERVERSIDE_VIEW_DISTANCE = 64; + private static final byte[] FULL_LIGHT = new byte[2048]; + + static { + Arrays.fill(FULL_LIGHT, (byte) 0xff); + } public static void register(final Protocol protocol) { @@ -116,6 +123,30 @@ public class WorldPackets { } }); + // Explosion + protocol.registerOutgoing(State.PLAY, 0x1E, 0x1C, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.FLOAT); // X + map(Type.FLOAT); // Y + map(Type.FLOAT); // Z + map(Type.FLOAT); // Radius + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + for (int i = 0; i < 3; i++) { + float coord = wrapper.get(Type.FLOAT, i); + + if (coord < 0f) { + coord = (int) coord; + wrapper.set(Type.FLOAT, i, coord); + } + } + } + }); + } + }); + // Chunk protocol.registerOutgoing(State.PLAY, 0x22, 0x21, new PacketRemapper() { @Override @@ -172,24 +203,39 @@ public class WorldPackets { PacketWrapper lightPacket = wrapper.create(0x24); lightPacket.write(Type.VAR_INT, chunk.getX()); lightPacket.write(Type.VAR_INT, chunk.getZ()); - int skyLightMask = 0; + + int skyLightMask = chunk.isGroundUp() ? 0x3ffff : 0; // all 18 bits set if ground up int blockLightMask = 0; for (int i = 0; i < chunk.getSections().length; i++) { ChunkSection sec = chunk.getSections()[i]; if (sec == null) continue; - if (sec.hasSkyLight()) { + if (!chunk.isGroundUp() && sec.hasSkyLight()) { skyLightMask |= (1 << (i + 1)); } blockLightMask |= (1 << (i + 1)); } + lightPacket.write(Type.VAR_INT, skyLightMask); lightPacket.write(Type.VAR_INT, blockLightMask); lightPacket.write(Type.VAR_INT, 0); // empty sky light mask lightPacket.write(Type.VAR_INT, 0); // empty block light mask + + // not sending skylight/setting empty skylight causes client lag due to some weird calculations + // only do this on the initial chunk send (not when chunk.isGroundUp() is false) + if (chunk.isGroundUp()) + lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(FULL_LIGHT).toArray(new Byte[0])); // chunk below 0 for (ChunkSection section : chunk.getSections()) { - if (section == null || !section.hasSkyLight()) continue; + if (section == null || !section.hasSkyLight()) { + if (chunk.isGroundUp()) { + lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(FULL_LIGHT).toArray(new Byte[0])); + } + continue; + } lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(section.getSkyLight()).toArray(new Byte[0])); } + if (chunk.isGroundUp()) + lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(FULL_LIGHT).toArray(new Byte[0])); // chunk above 255 + for (ChunkSection section : chunk.getSections()) { if (section == null) continue; lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(section.getBlockLight()).toArray(new Byte[0])); diff --git a/common/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java b/common/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java index e4b8f4ad0..5e9047d52 100644 --- a/common/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java +++ b/common/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java @@ -17,45 +17,25 @@ import java.util.UUID; public class UpdateUtil { - public final static String PREFIX = ChatColor.GREEN + "" + ChatColor.BOLD + "[ViaVersion] " + ChatColor.GREEN; - private final static String URL = "https://api.spiget.org/v2/resources/"; - private final static int PLUGIN = 19254; - private final static String LATEST_VERSION = "/versions/latest"; + public static final String PREFIX = ChatColor.GREEN + "" + ChatColor.BOLD + "[ViaVersion] " + ChatColor.GREEN; + private static final String URL = "https://api.spiget.org/v2/resources/"; + private static final int PLUGIN = 19254; + private static final String LATEST_VERSION = "/versions/latest"; public static void sendUpdateMessage(final UUID uuid) { - Via.getPlatform().runAsync(new Runnable() { - @Override - public void run() { - final String message = getUpdateMessage(false); - if (message != null) { - Via.getPlatform().runSync( - new Runnable() { - @Override - public void run() { - Via.getPlatform().sendMessage(uuid, PREFIX + message); - } - } - ); - } + Via.getPlatform().runAsync(() -> { + final String message = getUpdateMessage(false); + if (message != null) { + Via.getPlatform().runSync(() -> Via.getPlatform().sendMessage(uuid, PREFIX + message)); } }); } public static void sendUpdateMessage() { - Via.getPlatform().runAsync(new Runnable() { - @Override - public void run() { - final String message = getUpdateMessage(true); - if (message != null) { - Via.getPlatform().runSync( - new Runnable() { - @Override - public void run() { - Via.getPlatform().getLogger().warning(message); - } - } - ); - } + Via.getPlatform().runAsync(() -> { + final String message = getUpdateMessage(true); + if (message != null) { + Via.getPlatform().runSync(() -> Via.getPlatform().getLogger().warning(message)); } }); } diff --git a/common/src/main/java/us/myles/ViaVersion/util/Config.java b/common/src/main/java/us/myles/ViaVersion/util/Config.java index 0ebfc1605..0ad123812 100644 --- a/common/src/main/java/us/myles/ViaVersion/util/Config.java +++ b/common/src/main/java/us/myles/ViaVersion/util/Config.java @@ -14,18 +14,15 @@ import java.util.Map; import java.util.concurrent.ConcurrentSkipListMap; public abstract class Config implements ConfigurationProvider { - private static final ThreadLocal YAML = new ThreadLocal() { - @Override - protected Yaml initialValue() { - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - options.setPrettyFlow(false); - options.setIndent(2); - return new Yaml(new YamlConstructor(), new Representer(), options); - } - }; + private static final ThreadLocal YAML = ThreadLocal.withInitial(() -> { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setPrettyFlow(false); + options.setIndent(2); + return new Yaml(new YamlConstructor(), new Representer(), options); + }); - private CommentStore commentStore = new CommentStore('.', 2); + private final CommentStore commentStore = new CommentStore('.', 2); private final File configFile; private ConcurrentSkipListMap config; diff --git a/jar/pom.xml b/jar/pom.xml index 838a9165f..66207d352 100644 --- a/jar/pom.xml +++ b/jar/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT 4.0.0 viaversion-jar diff --git a/pom.xml b/pom.xml index 89452e195..e8e559df6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ us.myles viaversion-parent - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT pom viaversion-parent diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml index 193a1fad8..52f32ac2d 100644 --- a/sponge-legacy/pom.xml +++ b/sponge-legacy/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT 4.0.0 diff --git a/sponge/pom.xml b/sponge/pom.xml index 68573394d..50b76c8f7 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT 4.0.0 diff --git a/velocity/pom.xml b/velocity/pom.xml index cc941faa8..67d34d8db 100644 --- a/velocity/pom.xml +++ b/velocity/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3-SNAPSHOT + 2.1.4-SNAPSHOT 4.0.0