diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/nbt/TagStringReader.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/nbt/TagStringReader.java index e46a92a29..07129de7a 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/minecraft/nbt/TagStringReader.java +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/nbt/TagStringReader.java @@ -264,13 +264,15 @@ final class TagStringReader { Tag result = null; try { switch (Character.toLowerCase(current)) { // try to read and return as a number - // case Tokens.TYPE_INTEGER: // handled below, ints are ~special~ case Tokens.TYPE_BYTE: result = new ByteTag(Byte.parseByte(builder.toString())); break; case Tokens.TYPE_SHORT: result = new ShortTag(Short.parseShort(builder.toString())); break; + case Tokens.TYPE_INT: + result = new IntTag(Integer.parseInt(builder.toString())); + break; case Tokens.TYPE_LONG: result = new LongTag(Long.parseLong(builder.toString())); break; diff --git a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/BukkitViaLoader.java b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/BukkitViaLoader.java index 7bfd9759b..f640151a3 100644 --- a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/BukkitViaLoader.java +++ b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/BukkitViaLoader.java @@ -93,7 +93,7 @@ public class BukkitViaLoader implements ViaPlatformLoader { if (plugin.getConf().isItemCache()) { handItemCache = new HandItemCache(); - tasks.add(handItemCache.runTaskTimerAsynchronously(plugin, 2L, 2L)); // Updates player's items :) + tasks.add(handItemCache.runTaskTimerAsynchronously(plugin, 1L, 1L)); // Updates player's items :) } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/data/MappingData.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/data/MappingData.java index 1ce2ea489..35dee9e1d 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/data/MappingData.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/data/MappingData.java @@ -137,15 +137,17 @@ public class MappingData extends MappingDataBase { return null; // Not valid } int separatorIndex = newId.indexOf(':'); - // Vanilla parses ``:`` and ```` as ``minecraft:`` (also ensure there's enough space) - if ((separatorIndex == -1 || separatorIndex == 0) && newId.length() <= 10) { + // Vanilla parses an empty and a missing namespace as the minecraft namespace + if (separatorIndex == -1) { newId = "minecraft:" + newId; + } else if (separatorIndex == 0) { + newId = "minecraft" + newId; } return newId; } public static boolean isValid1_13Channel(String channelId) { - return channelId.matches("([0-9a-z_.-]+):([0-9a-z_/.-]+)"); + return channelId.matches("([0-9a-z_.-]+:)?[0-9a-z_/.-]+"); } private void loadTags(Map output, JsonObject newTags) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java index 39edcf712..c1ed43394 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java @@ -19,6 +19,7 @@ package com.viaversion.viaversion.protocols.protocol1_14to1_13_2.packets; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.minecraft.Position; @@ -31,6 +32,8 @@ import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14; +import java.util.Collections; + public class PlayerPackets { public static void register(Protocol protocol) { @@ -58,19 +61,24 @@ public class PlayerPackets { Item item = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); protocol.getItemRewriter().handleItemToServer(item); + if (item == null) return; + + CompoundTag tag = item.tag(); + if (tag == null) return; + + Tag pages = tag.get("pages"); + + // Fix for https://github.com/ViaVersion/ViaVersion/issues/2660 + if (pages == null) { + tag.put("pages", new ListTag(Collections.singletonList(new StringTag()))); + } + // Client limit when editing a book was upped from 50 to 100 in 1.14, but some anti-exploit plugins ban with a size higher than the old client limit - if (Via.getConfig().isTruncate1_14Books()) { - if (item == null) return; - CompoundTag tag = item.tag(); - - if (tag == null) return; - Tag pages = tag.get("pages"); - - if (!(pages instanceof ListTag)) return; - + if (Via.getConfig().isTruncate1_14Books() && pages instanceof ListTag) { ListTag listTag = (ListTag) pages; - if (listTag.size() <= 50) return; - listTag.setValue(listTag.getValue().subList(0, 50)); + if (listTag.size() > 50) { + listTag.setValue(listTag.getValue().subList(0, 50)); + } } } }); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java index ba6535412..b539cf4a0 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java @@ -41,16 +41,13 @@ import com.viaversion.viaversion.protocols.protocol1_9to1_8.metadata.MetadataRew import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.BossBarProvider; import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.EntityIdProvider; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; public class EntityTracker1_9 extends EntityTrackerBase { + public static final String WITHER_TRANSLATABLE = "{\"translate\":\"entity.WitherBoss.name\"}"; + public static final String DRAGON_TRANSLATABLE = "{\"translate\":\"entity.EnderDragon.name\"}"; private final Map uuidMap = new ConcurrentHashMap<>(); private final Map> metadataBuffer = new ConcurrentHashMap<>(); private final Map vehicleMap = new ConcurrentHashMap<>(); @@ -254,7 +251,7 @@ public class EntityTracker1_9 extends EntityTrackerBase { if (metadata.id() == 2) { BossBar bar = bossBarMap.get(entityId); String title = (String) metadata.getValue(); - title = title.isEmpty() ? (type == EntityType.ENDER_DRAGON ? "Ender Dragon" : "Wither") : title; + title = title.isEmpty() ? (type == EntityType.ENDER_DRAGON ? DRAGON_TRANSLATABLE : WITHER_TRANSLATABLE) : title; if (bar == null) { bar = Via.getAPI().legacyAPI().createLegacyBossBar(title, BossColor.PINK, BossStyle.SOLID); bossBarMap.put(entityId, bar); @@ -272,7 +269,7 @@ public class EntityTracker1_9 extends EntityTrackerBase { float maxHealth = type == EntityType.ENDER_DRAGON ? 200.0f : 300.0f; float health = Math.max(0.0f, Math.min(((float) metadata.getValue()) / maxHealth, 1.0f)); if (bar == null) { - String title = type == EntityType.ENDER_DRAGON ? "Ender Dragon" : "Wither"; + String title = type == EntityType.ENDER_DRAGON ? DRAGON_TRANSLATABLE : WITHER_TRANSLATABLE; bar = Via.getAPI().legacyAPI().createLegacyBossBar(title, health, BossColor.PINK, BossStyle.SOLID); bossBarMap.put(entityId, bar); bar.addConnection(user()); diff --git a/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java b/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java index 9b77ae69f..dc7f8b703 100644 --- a/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java +++ b/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java @@ -35,6 +35,7 @@ public class NBTTagTest { readString("{id:[I;1,2, 3, 4,5]}"); // >=1.11 readString("{id:1b,b:true}"); readString("{id:[L;1l,2L,3L]}"); // >=1.11 + readString("{id:[I;1i,2I,3I]}"); readString("{id:'minecraft:stone'}"); // >=1.13 readString("{id:1,id:2}"); readString("{id:-20b,test:3.19f}"); @@ -47,7 +48,6 @@ public class NBTTagTest { //TODO fix legacy < 1.12 // readString("{id:minecraft:stone}"); - // readString("{id:[I;1i,2I,3I]}"); // readString("{id:[1,2, 3, 4,5]}"); } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5c7f8de95..90b3a6f0f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ metadata.format.version = "1.1" [versions] -adventure = "4.8.0" -gson = "2.8.7" +adventure = "4.9.1" +gson = "2.8.8" fastutil = "8.3.1" openNBT = "2.0-SNAPSHOT" javassist = "3.28.0-GA" @@ -14,7 +14,7 @@ guava = "17.0" snakeYaml = "1.18" junit = "5.7.2" -checkerQual = "3.14.0" +checkerQual = "3.18.0" # Platforms paper = "1.16.5-R0.1-SNAPSHOT"