[Feature] New Registry for Surface Rules
This commit is contained in:
parent
3725fbb029
commit
da1d4c6b40
10 changed files with 155 additions and 1 deletions
|
@ -54,6 +54,21 @@ public class DumpDatapack {
|
|||
) {
|
||||
File base = new File(System.getProperty("user.dir"), "bclib_datapack_dump");
|
||||
BCLib.LOGGER.info(registry.key().toString());
|
||||
// Tag Output
|
||||
// registry.value()
|
||||
// .getTagNames()
|
||||
// .map(tagKey -> registry.value().getTag(tagKey))
|
||||
// .filter(tag -> tag.isPresent())
|
||||
// .map(tag -> tag.get())
|
||||
// .forEach(tag -> {
|
||||
// tag.stream()
|
||||
// .map(holder -> holder.unwrapKey())
|
||||
// .filter(k -> k.isPresent())
|
||||
// .map(k -> k.get())
|
||||
// .forEach(key -> {
|
||||
//
|
||||
// });
|
||||
// });
|
||||
|
||||
registry
|
||||
.value()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.betterx.worlds.together;
|
||||
|
||||
import org.betterx.bclib.util.Logger;
|
||||
import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry;
|
||||
import org.betterx.worlds.together.tag.v3.TagManager;
|
||||
import org.betterx.worlds.together.world.WorldConfig;
|
||||
import org.betterx.worlds.together.worldPreset.WorldPresets;
|
||||
|
@ -23,6 +24,7 @@ public class WorldsTogether {
|
|||
|
||||
public static void onInitialize() {
|
||||
TagManager.ensureStaticallyLoaded();
|
||||
SurfaceRuleRegistry.ensureStaticallyLoaded();
|
||||
|
||||
|
||||
WorldConfig.registerModCache(WorldsTogether.MOD_ID);
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package org.betterx.worlds.together.mixin.common;
|
||||
|
||||
import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry;
|
||||
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.data.BuiltinRegistries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(BuiltinRegistries.class)
|
||||
public class BuiltinRegistriesMixin {
|
||||
|
||||
@Inject(method = "<clinit>", at = @At(value = "INVOKE", target = "Ljava/util/Map;forEach(Ljava/util/function/BiConsumer;)V"))
|
||||
private static void together_registerSurface(CallbackInfo ci) {
|
||||
SurfaceRuleRegistry.SURFACE_RULES = (Registry<SurfaceRules.RuleSource>) registerSimple(
|
||||
SurfaceRuleRegistry.SURFACE_RULES_REGISTRY,
|
||||
SurfaceRuleRegistry::bootstrap
|
||||
);
|
||||
}
|
||||
|
||||
@Shadow
|
||||
static protected <T> Registry<T> registerSimple(
|
||||
ResourceKey<? extends Registry<T>> resourceKey, BuiltinRegistries.RegistryBootstrap<T> registryBootstrap
|
||||
) {
|
||||
throw new RuntimeException("Shadowed Call");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package org.betterx.worlds.together.mixin.common;
|
||||
|
||||
import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.core.RegistryAccess;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@Mixin(RegistryAccess.class)
|
||||
public interface RegistryAccessMixin {
|
||||
|
||||
@ModifyArg(method = "<clinit>", at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;make(Ljava/util/function/Supplier;)Ljava/lang/Object;"))
|
||||
private static Supplier<ImmutableMap<ResourceKey<Registry<?>>, RegistryAccess.RegistryData<?>>> together_addRegistry(
|
||||
Supplier<ImmutableMap<ResourceKey<Registry<?>>, RegistryAccess.RegistryData<?>>> supplier
|
||||
) {
|
||||
return () -> {
|
||||
Map<ResourceKey<Registry<?>>, RegistryAccess.RegistryData<?>> res = supplier.get();
|
||||
ImmutableMap.Builder<ResourceKey<Registry<?>>, RegistryAccess.RegistryData<?>> builder = ImmutableMap.builder();
|
||||
|
||||
builder.putAll(res);
|
||||
put(builder, SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, SurfaceRules.RuleSource.CODEC);
|
||||
return builder.build();
|
||||
};
|
||||
}
|
||||
|
||||
@Shadow
|
||||
static <E> void put(
|
||||
ImmutableMap.Builder<ResourceKey<Registry<?>>, RegistryAccess.RegistryData<?>> builder,
|
||||
ResourceKey<? extends Registry<E>> resourceKey,
|
||||
Codec<E> codec
|
||||
) {
|
||||
throw new RuntimeException("Shadowed Call");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package org.betterx.worlds.together.surfaceRules;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
|
||||
public class AssignedSurfaceRule {
|
||||
public final SurfaceRules.RuleSource ruleSource;
|
||||
public final ResourceLocation biomeID;
|
||||
|
||||
AssignedSurfaceRule(SurfaceRules.RuleSource ruleSource, ResourceLocation biomeID) {
|
||||
this.ruleSource = ruleSource;
|
||||
this.biomeID = biomeID;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package org.betterx.worlds.together.surfaceRules;
|
||||
|
||||
import org.betterx.worlds.together.WorldsTogether;
|
||||
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.data.BuiltinRegistries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
|
||||
public class SurfaceRuleRegistry {
|
||||
public static final ResourceKey<Registry<SurfaceRules.RuleSource>> SURFACE_RULES_REGISTRY =
|
||||
createRegistryKey(WorldsTogether.makeID("worldgen/surface_rules"));
|
||||
|
||||
public static Registry<SurfaceRules.RuleSource> SURFACE_RULES;
|
||||
|
||||
private static <T> ResourceKey<Registry<T>> createRegistryKey(ResourceLocation location) {
|
||||
return ResourceKey.createRegistryKey(location);
|
||||
}
|
||||
|
||||
public static Holder<SurfaceRules.RuleSource> bootstrap(Registry<SurfaceRules.RuleSource> registry) {
|
||||
return BuiltinRegistries.register(
|
||||
registry,
|
||||
WorldsTogether.makeID("test"),
|
||||
SurfaceRules.state(Blocks.SCULK.defaultBlockState())
|
||||
);
|
||||
}
|
||||
|
||||
public static void ensureStaticallyLoaded() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -31,7 +31,6 @@ public abstract class WorldPresetSettings {
|
|||
|
||||
|
||||
private static <T> ResourceKey<Registry<T>> createRegistryKey(ResourceLocation location) {
|
||||
|
||||
return ResourceKey.createRegistryKey(location);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ accessible class net/minecraft/world/level/levelgen/SurfaceRules$LazyCondition
|
|||
accessible class net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource
|
||||
accessible class net/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap
|
||||
extendable class net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator
|
||||
accessible class net/minecraft/data/BuiltinRegistries$RegistryBootstrap
|
||||
|
||||
#Methods
|
||||
accessible method net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent updateSettings (Lnet/minecraft/client/gui/screens/worldselection/WorldCreationContext$Updater;)V
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"result_state": {
|
||||
"Name": "minecraft:dead_fire_coral_block"
|
||||
}
|
||||
}
|
|
@ -4,9 +4,11 @@
|
|||
"package": "org.betterx.worlds.together.mixin.common",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"mixins": [
|
||||
"BuiltinRegistriesMixin",
|
||||
"DiggerItemAccessor",
|
||||
"MainMixin",
|
||||
"PrimaryLevelDataMixin",
|
||||
"RegistryAccessMixin",
|
||||
"RegistryOpsAccessor",
|
||||
"TagLoaderMixin",
|
||||
"WorldGenPropertiesMixin",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue