Skip to content

Commit 795798d

Browse files
committed
Read any number tag as enchantment level
Previously, packetevents would have only parsed shorts as the enchantment level
1 parent 5cdb80c commit 795798d

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

api/src/main/java/com/github/retrooper/packetevents/protocol/item/ItemStack.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -351,10 +351,12 @@ public List<Enchantment> getEnchantments(ClientVersion version) {
351351
EnchantmentType type = getEnchantmentTypeFromTag(compound, version);
352352

353353
if (type != null) {
354-
NBTShort levelTag = compound.getTagOfTypeOrNull("lvl", NBTShort.class);
355-
int level = levelTag.getAsInt();
356-
Enchantment enchantment = Enchantment.builder().type(type).level(level).build();
357-
enchantments.add(enchantment);
354+
NBTNumber levelTag = compound.getNumberTagOrNull("lvl");
355+
if (levelTag != null) {
356+
int level = levelTag.getAsInt();
357+
Enchantment enchantment = Enchantment.builder().type(type).level(level).build();
358+
enchantments.add(enchantment);
359+
}
358360
}
359361
}
360362
return enchantments;
@@ -391,9 +393,9 @@ public int getEnchantmentLevel(EnchantmentType enchantment, ClientVersion versio
391393
if (nbtList != null) {
392394
for (NBTCompound base : nbtList.getTags()) {
393395
EnchantmentType type = getEnchantmentTypeFromTag(base, version);
394-
if (enchantment == type) {
395-
NBTShort nbtShort = base.getTagOfTypeOrNull("lvl", NBTShort.class);
396-
return nbtShort != null ? nbtShort.getAsInt() : 0;
396+
if (Objects.equals(type, enchantment)) {
397+
NBTNumber nbtLevel = base.getNumberTagOrNull("lvl");
398+
return nbtLevel != null ? nbtLevel.getAsInt() : 0;
397399
}
398400
}
399401
}

api/src/main/java/com/github/retrooper/packetevents/resources/ResourceLocation.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
package com.github.retrooper.packetevents.resources;
2020

21+
import org.jetbrains.annotations.Contract;
22+
import org.jetbrains.annotations.Nullable;
23+
2124
import java.util.Objects;
2225

2326
public class ResourceLocation {
@@ -45,7 +48,11 @@ public ResourceLocation(String location) {
4548
this.key = array[1];
4649
}
4750

48-
public static String normString(String location) {
51+
@Contract("null -> null; !null -> !null")
52+
public static @Nullable String normString(@Nullable String location) {
53+
if (location == null) {
54+
return null;
55+
}
4956
int index = location.indexOf(':');
5057
if (index > 0) {
5158
return location; // namespace already set

0 commit comments

Comments
 (0)