Skip to content

Commit adc8974

Browse files
authored
Implement synced registry check in holder stream codec (#974)
1 parent 7df0d35 commit adc8974

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

Diff for: patches/net/minecraft/network/codec/ByteBufCodecs.java.patch

+25-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,37 @@
11
--- a/net/minecraft/network/codec/ByteBufCodecs.java
22
+++ b/net/minecraft/network/codec/ByteBufCodecs.java
3-
@@ -487,7 +_,11 @@
3+
@@ -487,7 +_,7 @@
44
) {
55
return new StreamCodec<RegistryFriendlyByteBuf, R>() {
66
private IdMap<R> getRegistryOrThrow(RegistryFriendlyByteBuf p_362297_) {
77
- return p_320353_.apply(p_362297_.registryAccess().lookupOrThrow(p_319942_));
8-
+ var registry = p_362297_.registryAccess().lookupOrThrow(p_319942_);
9-
+ if (net.neoforged.neoforge.registries.RegistryManager.isNonSyncedBuiltInRegistry(registry)) {
10-
+ throw new IllegalStateException("Cannot use ID syncing for non-synced built-in registry: " + registry.key());
11-
+ }
12-
+ return p_320353_.apply(registry);
8+
+ return p_320353_.apply(getSyncableRegistryOrThrow(p_362297_, p_319942_));
139
}
1410

1511
public R decode(RegistryFriendlyByteBuf p_340887_) {
16-
@@ -544,8 +_,25 @@
12+
@@ -517,7 +_,7 @@
13+
private static final int DIRECT_HOLDER_ID = 0;
14+
15+
private IdMap<Holder<T>> getRegistryOrThrow(RegistryFriendlyByteBuf p_376392_) {
16+
- return p_376392_.registryAccess().lookupOrThrow(p_320391_).asHolderIdMap();
17+
+ return getSyncableRegistryOrThrow(p_376392_, p_320391_).asHolderIdMap();
18+
}
19+
20+
public Holder<T> decode(RegistryFriendlyByteBuf p_363509_) {
21+
@@ -539,13 +_,38 @@
22+
};
23+
}
24+
25+
+ private static <T> Registry<T> getSyncableRegistryOrThrow(RegistryFriendlyByteBuf buffer, ResourceKey<? extends Registry<T>> registryKey) {
26+
+ var registry = buffer.registryAccess().lookupOrThrow(registryKey);
27+
+ if (net.neoforged.neoforge.registries.RegistryManager.isNonSyncedBuiltInRegistry(registry)) {
28+
+ throw new io.netty.handler.codec.CodecException("Cannot use ID syncing for non-synced built-in registry: " + registry.key());
29+
+ }
30+
+ return registry;
31+
+ }
32+
+
33+
static <T> StreamCodec<RegistryFriendlyByteBuf, HolderSet<T>> holderSet(final ResourceKey<? extends Registry<T>> p_332137_) {
34+
return new StreamCodec<RegistryFriendlyByteBuf, HolderSet<T>>() {
1735
private static final int NAMED_SET = -1;
1836
private final StreamCodec<RegistryFriendlyByteBuf, Holder<T>> holderCodec = ByteBufCodecs.holderRegistry(p_332137_);
1937

0 commit comments

Comments
 (0)