Skip to content

Commit d22b00e

Browse files
committed
Add helper methods for registry entry rewriting
1 parent fe9ca49 commit d22b00e

File tree

4 files changed

+61
-86
lines changed

4 files changed

+61
-86
lines changed

common/src/main/java/com/viaversion/viaversion/protocols/v1_21_2to1_21_4/rewriter/EntityPacketRewriter1_21_4.java

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919

2020
import com.viaversion.nbt.tag.CompoundTag;
2121
import com.viaversion.nbt.tag.ListTag;
22-
import com.viaversion.viaversion.api.connection.UserConnection;
23-
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
2422
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
2523
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_4;
2624
import com.viaversion.viaversion.api.type.Types;
@@ -32,7 +30,6 @@
3230
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
3331
import com.viaversion.viaversion.rewriter.EntityRewriter;
3432
import com.viaversion.viaversion.rewriter.RegistryDataRewriter;
35-
import com.viaversion.viaversion.util.Key;
3633

3734
public final class EntityPacketRewriter1_21_4 extends EntityRewriter<ClientboundPacket1_21_2, Protocol1_21_2To1_21_4> {
3835

@@ -46,34 +43,22 @@ public void registerPackets() {
4643
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA);
4744
registerRemoveEntities(ClientboundPackets1_21_2.REMOVE_ENTITIES);
4845

49-
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol) {
50-
@Override
51-
public RegistryEntry[] handle(final UserConnection connection, final String key, final RegistryEntry[] entries) {
52-
if (Key.stripMinecraftNamespace(key).equals("worldgen/biome")) {
53-
for (final RegistryEntry entry : entries) {
54-
if (entry.tag() == null) {
55-
continue;
56-
}
57-
58-
final CompoundTag effectsTag = ((CompoundTag) entry.tag()).getCompoundTag("effects");
59-
final CompoundTag musicTag = effectsTag.getCompoundTag("music");
60-
if (musicTag == null) {
61-
continue;
62-
}
63-
64-
// Wrap music
65-
final ListTag<CompoundTag> weightedMusicTags = new ListTag<>(CompoundTag.class);
66-
final CompoundTag weightedMusicTag = new CompoundTag();
67-
weightedMusicTag.put("data", musicTag);
68-
weightedMusicTag.putInt("weight", 1);
69-
weightedMusicTags.add(weightedMusicTag);
70-
effectsTag.put("music", weightedMusicTags);
71-
}
72-
}
73-
74-
return super.handle(connection, key, entries);
46+
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol);
47+
registryDataRewriter.addHandler("worldgen/biome", (key, biome) -> {
48+
final CompoundTag effectsTag = biome.getCompoundTag("effects");
49+
final CompoundTag musicTag = effectsTag.getCompoundTag("music");
50+
if (musicTag == null) {
51+
return;
7552
}
76-
};
53+
54+
// Wrap music
55+
final ListTag<CompoundTag> weightedMusicTags = new ListTag<>(CompoundTag.class);
56+
final CompoundTag weightedMusicTag = new CompoundTag();
57+
weightedMusicTag.put("data", musicTag);
58+
weightedMusicTag.putInt("weight", 1);
59+
weightedMusicTags.add(weightedMusicTag);
60+
effectsTag.put("music", weightedMusicTags);
61+
});
7762
protocol.registerClientbound(ClientboundConfigurationPackets1_21.REGISTRY_DATA, registryDataRewriter::handle);
7863

7964
registerLogin1_20_5(ClientboundPackets1_21_2.LOGIN);

common/src/main/java/com/viaversion/viaversion/protocols/v1_21_4to1_21_5/rewriter/EntityPacketRewriter1_21_5.java

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -75,29 +75,15 @@ public void registerPackets() {
7575
wrapper.write(Types.SHORT, (short) 0);
7676
});
7777

78-
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol) {
79-
@Override
80-
public RegistryEntry[] handle(final UserConnection connection, final String key, final RegistryEntry[] entries) {
81-
if (!key.equals("wolf_variant")) {
82-
return super.handle(connection, key, entries);
83-
}
84-
85-
for (final RegistryEntry entry : entries) {
86-
if (entry.tag() == null) {
87-
continue;
88-
}
89-
90-
final CompoundTag variant = (CompoundTag) entry.tag();
91-
final CompoundTag assets = new CompoundTag();
92-
variant.put("assets", assets);
93-
assets.put("wild", variant.remove("wild_texture"));
94-
assets.put("tame", variant.remove("tame_texture"));
95-
assets.put("angry", variant.remove("angry_texture"));
96-
variant.remove("biomes");
97-
}
98-
return entries;
99-
}
100-
};
78+
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol);
79+
registryDataRewriter.addHandler("wolf_variant", (key, variant) -> {
80+
final CompoundTag assets = new CompoundTag();
81+
variant.put("assets", assets);
82+
assets.put("wild", variant.remove("wild_texture"));
83+
assets.put("tame", variant.remove("tame_texture"));
84+
assets.put("angry", variant.remove("angry_texture"));
85+
variant.remove("biomes");
86+
});
10187
protocol.registerClientbound(ClientboundConfigurationPackets1_21.REGISTRY_DATA, registryDataRewriter::handle);
10288

10389
protocol.registerFinishConfiguration(ClientboundConfigurationPackets1_21.FINISH_CONFIGURATION, wrapper -> {

common/src/main/java/com/viaversion/viaversion/protocols/v1_21_5to1_21_6/rewriter/EntityPacketRewriter1_21_6.java

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package com.viaversion.viaversion.protocols.v1_21_5to1_21_6.rewriter;
1919

2020
import com.viaversion.nbt.tag.CompoundTag;
21-
import com.viaversion.viaversion.api.connection.UserConnection;
2221
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
2322
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
2423
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_6;
@@ -53,32 +52,20 @@ public void registerPackets() {
5352
registerLogin1_20_5(ClientboundPackets1_21_5.LOGIN);
5453
registerRespawn1_20_5(ClientboundPackets1_21_5.RESPAWN);
5554

56-
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol) {
57-
@Override
58-
public RegistryEntry[] handle(final UserConnection connection, final String key, final RegistryEntry[] entries) {
59-
if (!"dimension_type".equals(key)) {
60-
return super.handle(connection, key, entries);
55+
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol);
56+
registryDataRewriter.addHandler("dimension_type", (key, dimension) -> {
57+
// the client will render clouds if effects aren't set to either the_nether or the_end
58+
String effects = dimension.getString("effects");
59+
if (effects != null) {
60+
effects = Key.stripMinecraftNamespace(effects);
61+
if ("the_nether".equals(effects) || "the_end".equals(effects)) {
62+
return; // don't show clouds
6163
}
62-
for (final RegistryEntry entry : entries) {
63-
if (entry.tag() == null) {
64-
continue; // client will use its own defaults
65-
}
66-
// the client will render clouds if effects aren't set to either the_nether or the_end
67-
final CompoundTag tag = (CompoundTag) entry.tag();
68-
String effects = tag.getString("effects");
69-
if (effects != null) {
70-
effects = Key.stripMinecraftNamespace(effects);
71-
if ("the_nether".equals(effects) || "the_end".equals(effects)) {
72-
continue; // don't show clouds
73-
}
74-
}
75-
if (!tag.contains("cloud_height")) {
76-
tag.putInt("cloud_height", 192);
77-
}
78-
}
79-
return super.handle(connection, key, entries);
8064
}
81-
};
65+
if (!dimension.contains("cloud_height")) {
66+
dimension.putInt("cloud_height", 192);
67+
}
68+
});
8269
protocol.registerClientbound(ClientboundConfigurationPackets1_21.REGISTRY_DATA, registryDataRewriter::handle);
8370

8471
protocol.registerFinishConfiguration(ClientboundConfigurationPackets1_21.FINISH_CONFIGURATION, wrapper -> {

common/src/main/java/com/viaversion/viaversion/rewriter/RegistryDataRewriter.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@
4040
import java.util.List;
4141
import java.util.Map;
4242
import java.util.Set;
43+
import java.util.function.BiConsumer;
4344
import java.util.function.Consumer;
4445

4546
public class RegistryDataRewriter {
46-
private final Map<String, Consumer<CompoundTag>> enchantmentEffectRewriters = new Object2ObjectArrayMap<>();
47+
private final Map<String, BiConsumer<String, CompoundTag>> registryEntryHandlers = new Object2ObjectArrayMap<>();
48+
private final Map<String, Consumer<CompoundTag>> enchantmentEffectHandlers = new Object2ObjectArrayMap<>(); // for nested enchantment data
4749
private final Map<String, List<RegistryEntry>> toAdd = new Object2ObjectArrayMap<>();
4850
private final Set<String> toRemove = new HashSet<>();
4951
protected final Protocol<?, ?, ?, ?> protocol;
@@ -73,6 +75,18 @@ public RegistryEntry[] handle(final UserConnection connection, String key, Regis
7375
updateJukeboxSongs(entries);
7476
}
7577

78+
final BiConsumer<String, CompoundTag> registryEntryHandler = this.registryEntryHandlers.get(key);
79+
if (registryEntryHandler != null) {
80+
for (final RegistryEntry entry : entries) {
81+
if (entry.tag() == null) {
82+
continue;
83+
}
84+
85+
final CompoundTag tag = (CompoundTag) entry.tag();
86+
registryEntryHandler.accept(entry.key(), tag);
87+
}
88+
}
89+
7690
final List<RegistryEntry> toAdd = this.toAdd.get(key);
7791
if (toAdd != null) {
7892
final Set<String> existingKeys = new HashSet<>();
@@ -106,14 +120,18 @@ public void addEntries(final String registryKey, final RegistryEntry... entries)
106120
toAdd.computeIfAbsent(Key.stripMinecraftNamespace(registryKey), $ -> new ArrayList<>()).addAll(List.of(entries));
107121
}
108122

109-
public void addEnchantmentEffectRewriter(final String key, final Consumer<CompoundTag> rewriter) {
110-
enchantmentEffectRewriters.put(Key.stripMinecraftNamespace(key), rewriter);
111-
}
112-
113123
public void remove(final String registryKey) {
114124
toRemove.add(Key.stripMinecraftNamespace(registryKey));
115125
}
116126

127+
public void addHandler(String registryKey, final BiConsumer<String, CompoundTag> handler) {
128+
registryEntryHandlers.put(Key.stripMinecraftNamespace(registryKey), handler);
129+
}
130+
131+
public void addEnchantmentEffectRewriter(final String key, final Consumer<CompoundTag> rewriter) {
132+
enchantmentEffectHandlers.put(Key.stripMinecraftNamespace(key), rewriter);
133+
}
134+
117135
public void trackDimensionAndBiomes(final UserConnection connection, final String registryKey, final RegistryEntry[] entries) {
118136
if (registryKey.equals("worldgen/biome")) {
119137
protocol.getEntityRewriter().tracker(connection).setBiomesSent(entries.length);
@@ -227,15 +245,14 @@ private void updateAttributesFields(final CompoundTag effects) {
227245
}
228246

229247
private void runEffectRewriters(final CompoundTag effectTag) {
230-
String effect = effectTag.getString("type");
248+
final String effect = effectTag.getString("type");
231249
if (effect == null) {
232250
return;
233251
}
234252

235-
effect = Key.stripMinecraftNamespace(effect);
236253
updateAttributeField(effectTag);
237254

238-
final Consumer<CompoundTag> rewriter = enchantmentEffectRewriters.get(effect);
255+
final Consumer<CompoundTag> rewriter = enchantmentEffectHandlers.get(Key.stripMinecraftNamespace(effect));
239256
if (rewriter != null) {
240257
rewriter.accept(effectTag);
241258
}

0 commit comments

Comments
 (0)