Skip to content

Commit 1b800ad

Browse files
committed
Improve nullability for Minecraft Tags
1 parent 3db44f2 commit 1b800ad

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

src/main/java/net/minestom/server/gamedata/tags/Tag.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Collections;
2020
import java.util.HashSet;
2121
import java.util.Objects;
22+
import java.util.Optional;
2223
import java.util.Set;
2324
import java.util.function.Function;
2425

@@ -90,30 +91,30 @@ public NamespaceID getName() {
9091

9192
public enum BasicType {
9293
BLOCKS("minecraft:block", Registry.Resource.BLOCK_TAGS,
93-
name -> Objects.requireNonNull(Block.fromNamespaceId(name)).id()),
94+
name -> Optional.ofNullable(Block.fromNamespaceId(name)).map(Block::id)),
9495
ITEMS("minecraft:item", Registry.Resource.ITEM_TAGS,
95-
name -> Objects.requireNonNull(Material.fromNamespaceId(name)).id()),
96+
name -> Optional.ofNullable(Material.fromNamespaceId(name)).map(Material::id)),
9697
FLUIDS("minecraft:fluid", Registry.Resource.FLUID_TAGS,
97-
name -> Objects.requireNonNull(Fluid.fromNamespaceId(name)).id()),
98+
name -> Optional.ofNullable(Fluid.fromNamespaceId(name)).map(Fluid::id)),
9899
ENTITY_TYPES("minecraft:entity_type", Registry.Resource.ENTITY_TYPE_TAGS,
99-
name -> Objects.requireNonNull(EntityType.fromNamespaceId(name)).id()),
100+
name -> Optional.ofNullable(EntityType.fromNamespaceId(name)).map(EntityType::id)),
100101
GAME_EVENTS("minecraft:game_event", Registry.Resource.GAMEPLAY_TAGS,
101-
name -> Objects.requireNonNull(GameEvent.fromNamespaceId(name)).id()),
102+
name -> Optional.ofNullable(EntityType.fromNamespaceId(name)).map(EntityType::id)),
102103
SOUND_EVENTS("minecraft:sound_event", null, null), // Seems not to be included in server data
103104
POTION_EFFECTS("minecraft:sound_event", null, null), // Seems not to be included in server data
104105

105106
//todo this is cursed. it does not update as the registry changes. Fix later.
106107
ENCHANTMENTS("minecraft:enchantment", Registry.Resource.ENCHANTMENT_TAGS,
107-
name -> MinecraftServer.getEnchantmentRegistry().getId(DynamicRegistry.Key.of(name)));
108+
name -> Optional.of(DynamicRegistry.Key.of(name)).map(DynamicRegistry.Key::namespace).map(MinecraftServer.getEnchantmentRegistry()::getId)),;
108109

109110
private final static BasicType[] VALUES = values();
110111
private final String identifier;
111112
private final Registry.Resource resource;
112-
private final Function<String, Integer> function;
113+
private final Function<String, Optional<Integer>> function;
113114

114115
BasicType(@NotNull String identifier,
115116
@Nullable Registry.Resource resource,
116-
@Nullable Function<String, Integer> function) {
117+
@Nullable Function<String, Optional<Integer>> function) {
117118
this.identifier = identifier;
118119
this.resource = resource;
119120
this.function = function;
@@ -127,7 +128,7 @@ public Registry.Resource getResource() {
127128
return resource;
128129
}
129130

130-
public Function<String, Integer> getFunction() {
131+
public Function<String, Optional<Integer>> getFunction() {
131132
return function;
132133
}
133134

src/main/java/net/minestom/server/network/packet/server/common/TagsPacket.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ public void write(@NotNull NetworkBuffer writer) {
4545
final var values = tag.getValues();
4646
writer.write(VAR_INT, values.size());
4747
for (var name : values) {
48-
writer.write(VAR_INT, type.getFunction().apply(name.asString()));
48+
var applied = type.getFunction().apply(name.asString());
49+
if (applied.isEmpty()) {
50+
continue;
51+
}
52+
writer.write(VAR_INT, applied.get());
4953
}
5054
}
5155
}

0 commit comments

Comments
 (0)