Skip to content

Commit cd93935

Browse files
Add example code to get writable block registry during bootstrap
1 parent 6e887a5 commit cd93935

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

api/src/main/java/parallelmc/parallelutils/ParallelUtilsBootstrapper.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,64 @@
33
import io.papermc.paper.plugin.bootstrap.BootstrapContext;
44
import io.papermc.paper.plugin.bootstrap.PluginBootstrap;
55
import io.papermc.paper.plugin.bootstrap.PluginProviderContext;
6+
import io.papermc.paper.registry.RegistryAccess;
7+
import io.papermc.paper.registry.event.RegistryEvents;
8+
import io.papermc.paper.registry.keys.EnchantmentKeys;
9+
import net.minecraft.core.Holder;
10+
import net.minecraft.core.MappedRegistry;
11+
import net.minecraft.core.WritableRegistry;
12+
import net.minecraft.core.registries.BuiltInRegistries;
13+
import net.minecraft.core.registries.Registries;
14+
import net.minecraft.resources.ResourceKey;
15+
import net.minecraft.world.level.block.Block;
616
import org.bukkit.plugin.java.JavaPlugin;
17+
import org.jetbrains.annotations.Nullable;
18+
19+
import java.lang.reflect.Field;
20+
import java.util.Map;
721

822
public class ParallelUtilsBootstrapper implements PluginBootstrap {
923
@Override
1024
public void bootstrap(BootstrapContext context) {
25+
MappedRegistry<WritableRegistry<?>> writable_registry = (MappedRegistry<WritableRegistry<?>>) getPrivateField("WRITABLE_REGISTRY", BuiltInRegistries.class, null, WritableRegistry.class);
26+
27+
Map<WritableRegistry<?>, Holder.Reference<WritableRegistry<?>>> byValue = getPrivateField("byValue", MappedRegistry.class, writable_registry, Map.class);
28+
29+
WritableRegistry<Block> blockRegistry = null;
30+
31+
for (WritableRegistry i : byValue.keySet()) {
32+
if (String.valueOf(i.key().location()).equals(String.valueOf(Registries.BLOCK.location()))) {
33+
blockRegistry = i;
34+
break;
35+
}
36+
}
37+
38+
if (blockRegistry == null) {
39+
return;
40+
}
1141

1242
}
1343

1444
@Override
1545
public JavaPlugin createPlugin(PluginProviderContext context) {
1646
return PluginBootstrap.super.createPlugin(context);
1747
}
48+
49+
@Nullable
50+
public static <T, U> U getPrivateField(String fieldName, Class<T> clazz, T object, Class<U> retClazz) throws ClassCastException{
51+
Field field;
52+
53+
try {
54+
field = clazz.getDeclaredField(fieldName);
55+
56+
field.setAccessible(true);
57+
58+
Object o = field.get(object);
59+
60+
return (U) o;
61+
} catch (NoSuchFieldException | IllegalAccessException e) {
62+
e.printStackTrace();
63+
return null;
64+
}
65+
}
1866
}

0 commit comments

Comments
 (0)