Move more tags to datagen

This commit is contained in:
Sollace 2024-03-31 14:01:52 +01:00
parent 1503cb5773
commit ea9c3bfaf9
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
16 changed files with 110 additions and 230 deletions

View file

@ -35,4 +35,14 @@ public interface UConventionalTags {
static TagKey<Block> block(String name) {
return TagKey.of(RegistryKeys.BLOCK, new Identifier("c", name));
}
interface Blocks {
TagKey<Block> CONCRETE_POWDERS = block("concrete_powders");
TagKey<Block> CONCRETES = block("concretes");
}
interface Items {
TagKey<Item> CONCRETE_POWDERS = item("concrete_powders");
TagKey<Item> CONCRETES = item("concretes");
}
}

View file

@ -5,33 +5,32 @@ import org.apache.logging.log4j.Logger;
import com.minelittlepony.unicopia.datagen.providers.SeasonsGrowthRatesProvider;
import com.minelittlepony.unicopia.datagen.providers.UAdvancementsProvider;
import com.minelittlepony.unicopia.datagen.providers.UBlockTagProvider;
import com.minelittlepony.unicopia.datagen.providers.UItemTagProvider;
import com.minelittlepony.unicopia.datagen.providers.UModelProvider;
import com.minelittlepony.unicopia.datagen.providers.loot.UBlockAdditionsLootTableProvider;
import com.minelittlepony.unicopia.datagen.providers.loot.UBlockLootTableProvider;
import com.minelittlepony.unicopia.datagen.providers.loot.UChestAdditionsLootTableProvider;
import com.minelittlepony.unicopia.datagen.providers.recipe.URecipeProvider;
import com.minelittlepony.unicopia.datagen.providers.tag.UBlockTagProvider;
import com.minelittlepony.unicopia.datagen.providers.tag.UDamageTypeProvider;
import com.minelittlepony.unicopia.datagen.providers.tag.UItemTagProvider;
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
import com.minelittlepony.unicopia.server.world.UWorldGen;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.minecraft.registry.RegistryBuilder;
import net.minecraft.registry.RegistryEntryLookup;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.world.biome.OverworldBiomeCreator;
import net.minecraft.world.gen.carver.ConfiguredCarver;
import net.minecraft.world.gen.feature.PlacedFeature;
public class Datagen implements DataGeneratorEntrypoint {
public static final Logger LOGGER = LogManager.getLogger();
@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
final FabricDataGenerator.Pack pack = fabricDataGenerator.createPack();
UBlockTagProvider blockTags = pack.addProvider(UBlockTagProvider::new);
final var pack = fabricDataGenerator.createPack();
final var blockTags = pack.addProvider(UBlockTagProvider::new);
pack.addProvider((output, registries) -> new UItemTagProvider(output, registries, blockTags));
pack.addProvider(UDamageTypeProvider::new);
pack.addProvider(UModelProvider::new);
pack.addProvider(URecipeProvider::new);
@ -45,9 +44,10 @@ public class Datagen implements DataGeneratorEntrypoint {
@Override
public void buildRegistry(RegistryBuilder builder) {
builder.addRegistry(RegistryKeys.BIOME, registerable -> {
RegistryEntryLookup<PlacedFeature> placedFeatureLookup = registerable.getRegistryLookup(RegistryKeys.PLACED_FEATURE);
RegistryEntryLookup<ConfiguredCarver<?>> carverLookup = registerable.getRegistryLookup(RegistryKeys.CONFIGURED_CARVER);
final var placedFeatureLookup = registerable.getRegistryLookup(RegistryKeys.PLACED_FEATURE);
final var carverLookup = registerable.getRegistryLookup(RegistryKeys.CONFIGURED_CARVER);
registerable.register(UWorldGen.SWEET_APPLE_ORCHARD, OverworldBiomeCreator.createNormalForest(placedFeatureLookup, carverLookup, false, false, false));
});
builder.addRegistry(RegistryKeys.DAMAGE_TYPE, UDamageTypes.REGISTRY);
}
}

View file

@ -1,7 +1,9 @@
package com.minelittlepony.unicopia.datagen.providers;
package com.minelittlepony.unicopia.datagen.providers.tag;
import java.util.Arrays;
import java.util.concurrent.CompletableFuture;
import com.minelittlepony.unicopia.UConventionalTags;
import com.minelittlepony.unicopia.UTags;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.block.UBlocks;
@ -12,12 +14,14 @@ import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBlockTags;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.registry.RegistryWrapper.WrapperLookup;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.TagBuilder;
import net.minecraft.registry.tag.TagKey;
import net.minecraft.util.DyeColor;
import net.minecraft.util.Identifier;
public class UBlockTagProvider extends FabricTagProvider.BlockTagProvider {
@ -32,6 +36,7 @@ public class UBlockTagProvider extends FabricTagProvider.BlockTagProvider {
@Override
protected void configure(WrapperLookup registries) {
populateConventionalTags();
Block[] crops = {
UBlocks.OATS, UBlocks.OATS_STEM, UBlocks.OATS_CROWN,
UBlocks.ROCKS, UBlocks.PINEAPPLE,
@ -205,4 +210,9 @@ public class UBlockTagProvider extends FabricTagProvider.BlockTagProvider {
getOrCreateTagBuilder(BlockTags.CEILING_HANGING_SIGNS).add(hanging);
getOrCreateTagBuilder(BlockTags.WALL_HANGING_SIGNS).add(wallHanging);
}
private void populateConventionalTags() {
getOrCreateTagBuilder(UConventionalTags.Blocks.CONCRETES).add(Arrays.stream(DyeColor.values()).map(i -> Registries.BLOCK.get(new Identifier(i.getName() + "_concrete"))).toArray(Block[]::new));
getOrCreateTagBuilder(UConventionalTags.Blocks.CONCRETE_POWDERS).add(Arrays.stream(DyeColor.values()).map(i -> Registries.BLOCK.get(new Identifier(i.getName() + "_concrete_powder"))).toArray(Block[]::new));
}
}

View file

@ -0,0 +1,30 @@
package com.minelittlepony.unicopia.datagen.providers.tag;
import java.util.concurrent.CompletableFuture;
import com.minelittlepony.unicopia.UTags;
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.minecraft.entity.damage.DamageType;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryWrapper.WrapperLookup;
import net.minecraft.registry.tag.DamageTypeTags;
public class UDamageTypeProvider extends FabricTagProvider<DamageType> {
public UDamageTypeProvider(FabricDataOutput output, CompletableFuture<WrapperLookup> registriesFuture) {
super(output, RegistryKeys.DAMAGE_TYPE, registriesFuture);
}
@Override
protected void configure(WrapperLookup lookup) {
getOrCreateTagBuilder(UTags.SPELLBOOK_IMMUNE_TO).add(
UDamageTypes.ZAP_APPLE, UDamageTypes.LOVE_DRAINING, UDamageTypes.LIFE_DRAINING,
UDamageTypes.RAINBOOM, UDamageTypes.SUN, UDamageTypes.SUNLIGHT, UDamageTypes.SMASH
).forceAddTag(DamageTypeTags.IS_FALL).forceAddTag(DamageTypeTags.IS_FREEZING).forceAddTag(DamageTypeTags.IS_LIGHTNING).forceAddTag(DamageTypeTags.IS_PROJECTILE);
getOrCreateTagBuilder(UTags.FROM_ROCKS).add(UDamageTypes.ROCK);
getOrCreateTagBuilder(UTags.FROM_HORSESHOES).add(UDamageTypes.HORSESHOE);
getOrCreateTagBuilder(UTags.BREAKS_SUNGLASSES).add(UDamageTypes.BAT_SCREECH, UDamageTypes.RAINBOOM);
}
}

View file

@ -1,18 +1,14 @@
package com.minelittlepony.unicopia.entity.damage;
import java.util.ArrayList;
import java.util.List;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.util.registry.DynamicRegistry;
import net.fabricmc.fabric.api.event.registry.DynamicRegistrySetupCallback;
import net.minecraft.entity.damage.DamageType;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
public interface UDamageTypes {
List<RegistryKey<DamageType>> REGISTRY = new ArrayList<>();
DynamicRegistry<DamageType> REGISTRY = new DynamicRegistry<>(RegistryKeys.DAMAGE_TYPE, key -> new DamageType(key.getValue().getNamespace() + "." + key.getValue().getPath(), 0));
RegistryKey<DamageType> EXHAUSTION = register("magical_exhaustion");
RegistryKey<DamageType> ALICORN_AMULET = register("alicorn_amulet");
@ -34,18 +30,8 @@ public interface UDamageTypes {
RegistryKey<DamageType> SPIKES = register("spikes");
private static RegistryKey<DamageType> register(String name) {
var key = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Unicopia.id(name));
REGISTRY.add(key);
return key;
return REGISTRY.register(Unicopia.id(name));
}
static void bootstrap() {
DynamicRegistrySetupCallback.EVENT.register(registries -> {
registries.getOptional(RegistryKeys.DAMAGE_TYPE).ifPresent(registry -> {
REGISTRY.forEach(key -> {
Registry.register(registry, key.getValue(), new DamageType(key.getValue().getNamespace() + "." + key.getValue().getPath(), 0));
});
});
});
}
static void bootstrap() {}
}

View file

@ -0,0 +1,45 @@
package com.minelittlepony.unicopia.util.registry;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import net.fabricmc.fabric.api.event.registry.DynamicRegistrySetupCallback;
import net.minecraft.registry.Registerable;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryBuilder;
import net.minecraft.registry.RegistryKey;
import net.minecraft.util.Identifier;
public class DynamicRegistry<T> implements RegistryBuilder.BootstrapFunction<T> {
private final RegistryKey<Registry<T>> registry;
private final Map<RegistryKey<T>, Entry<T>> keys = new HashMap<>();
private final Function<RegistryKey<T>, T> valueFactory;
public DynamicRegistry(RegistryKey<Registry<T>> registry, Function<RegistryKey<T>, T> valueFactory) {
this.registry = registry;
this.valueFactory = valueFactory;
DynamicRegistrySetupCallback.EVENT.register(registries -> {
registries.getOptional(registry).ifPresent(r -> {
keys.forEach((key, entry)-> Registry.register(r, key.getValue(), entry.factory().apply(key)));
});
});
}
@Override
public void run(Registerable<T> registerable) {
keys.forEach((key, entry) -> registerable.register(key, entry.factory().apply(key)));
}
public RegistryKey<T> register(Identifier id) {
return register(id, valueFactory);
}
public RegistryKey<T> register(Identifier id, Function<RegistryKey<T>, T> valueFactory) {
return keys.computeIfAbsent(RegistryKey.of(registry, id), k -> new Entry<>(k, valueFactory)).key();
}
record Entry<T>(RegistryKey<T> key, Function<RegistryKey<T>, T> factory) {}
}

View file

@ -1,21 +0,0 @@
{
"replace": false,
"values": [
"minecraft:white_concrete_powder",
"minecraft:orange_concrete_powder",
"minecraft:magenta_concrete_powder",
"minecraft:light_blue_concrete_powder",
"minecraft:yellow_concrete_powder",
"minecraft:lime_concrete_powder",
"minecraft:pink_concrete_powder",
"minecraft:gray_concrete_powder",
"minecraft:light_gray_concrete_powder",
"minecraft:cyan_concrete_powder",
"minecraft:purple_concrete_powder",
"minecraft:blue_concrete_powder",
"minecraft:brown_concrete_powder",
"minecraft:green_concrete_powder",
"minecraft:red_concrete_powder",
"minecraft:black_concrete_powder"
]
}

View file

@ -1,24 +0,0 @@
{
"replace": false,
"values": [
"minecraft:glass",
"minecraft:white_stained_glass",
"minecraft:orange_stained_glass",
"minecraft:magenta_stained_glass",
"minecraft:light_blue_stained_glass",
"minecraft:yellow_stained_glass",
"minecraft:lime_stained_glass",
"minecraft:pink_stained_glass",
"minecraft:gray_stained_glass",
"minecraft:light_gray_stained_glass",
"minecraft:cyan_stained_glass",
"minecraft:purple_stained_glass",
"minecraft:blue_stained_glass",
"minecraft:brown_stained_glass",
"minecraft:green_stained_glass",
"minecraft:red_stained_glass",
"minecraft:black_stained_glass",
{ "id": "#c:glass", "required": false },
{ "id": "#c:glass_blocks", "required": false }
]
}

View file

@ -1,22 +0,0 @@
{
"replace": false,
"values": [
"minecraft:glass_pane",
"minecraft:white_stained_glass_pane",
"minecraft:orange_stained_glass_pane",
"minecraft:magenta_stained_glass_pane",
"minecraft:light_blue_stained_glass_pane",
"minecraft:yellow_stained_glass_pane",
"minecraft:lime_stained_glass_pane",
"minecraft:pink_stained_glass_pane",
"minecraft:gray_stained_glass_pane",
"minecraft:light_gray_stained_glass_pane",
"minecraft:cyan_stained_glass_pane",
"minecraft:purple_stained_glass_pane",
"minecraft:blue_stained_glass_pane",
"minecraft:brown_stained_glass_pane",
"minecraft:green_stained_glass_pane",
"minecraft:red_stained_glass_pane",
"minecraft:black_stained_glass_pane"
]
}

View file

@ -1,78 +0,0 @@
{
"replace": false,
"values": [
"minecraft:coal_ore",
"minecraft:iron_ore",
"minecraft:gold_ore",
"minecraft:emerald_ore",
"minecraft:lapis_ore",
"minecraft:copper_ore",
"minecraft:diamond_ore",
"minecraft:nether_gold_ore",
"minecraft:nether_quartz_ore",
{ "id": "#c:iron_ores", "required": false },
{ "id": "#c:gold_ores", "required": false },
{ "id": "#c:diamond_ores", "required": false },
{ "id": "#c:emerald_ores", "required": false },
{ "id": "#c:copper_ores", "required": false },
{ "id": "#c:quartz_ores", "required": false },
{ "id": "#c:lapis_ores", "required": false },
{ "id": "#c:aluminium_ores", "required": false },
{ "id": "#c:methyst_ores", "required": false },
{ "id": "#c:antimony_ores", "required": false },
{ "id": "#c:aquarium_ores", "required": false },
{ "id": "#c:asterite_ores", "required": false },
{ "id": "#c:banglum_ores", "required": false },
{ "id": "#c:bauxite_ores", "required": false },
{ "id": "#c:carmot_ores", "required": false },
{ "id": "#c:certus_quartz_ores", "required": false },
{ "id": "#c:cinnabar_ores", "required": false },
{ "id": "#c:cobalt_ores", "required": false },
{ "id": "#c:galaxium_ores", "required": false },
{ "id": "#c:galena_ores", "required": false },
{ "id": "#c:iridium_ores", "required": false },
{ "id": "#c:kyber_ores", "required": false },
{ "id": "#c:lunum_ores", "required": false },
{ "id": "#c:lutetium_ores", "required": false },
{ "id": "#c:menganese_ores", "required": false },
{ "id": "#c:metite_ores", "required": false },
{ "id": "#c:midas_gold_ores", "required": false },
{ "id": "#c:moon_lunum_ores", "required": false },
{ "id": "#c:mozanite_ores", "required": false },
{ "id": "#c:mythril_ores", "required": false },
{ "id": "#c:nickle_ores", "required": false },
{ "id": "#c:nikolite_ores", "required": false },
{ "id": "#c:orichalcum_ores", "required": false },
{ "id": "#c:osmium_ores", "required": false },
{ "id": "#c:palladium_ores", "required": false },
{ "id": "#c:peridot_ores", "required": false },
{ "id": "#c:platinum_ores", "required": false },
{ "id": "#c:plutonium_blocks", "required": false },
{ "id": "#c:prometheum_ores", "required": false },
{ "id": "#c:pyrite_ores", "required": false },
{ "id": "#c:quadrillium_ores", "required": false },
{ "id": "#c:ruby_ores", "required": false },
{ "id": "#c:runite_ores", "required": false },
{ "id": "#c:sapphire_ores", "required": false },
{ "id": "#c:sheldonite_ores", "required": false },
{ "id": "#c:silver_ores", "required": false },
{ "id": "#c:sodalite_ores", "required": false },
{ "id": "#c:sphalerite_ores", "required": false },
{ "id": "#c:starrite_ores", "required": false },
{ "id": "#c:stellum_ores", "required": false },
{ "id": "#c:stormyx_ores", "required": false },
{ "id": "#c:sulfur_ores", "required": false },
{ "id": "#c:tantalite_ores", "required": false },
{ "id": "#c:tin_ore", "required": false },
{ "id": "#c:tin_ores", "required": false },
{ "id": "#c:titanium_ores", "required": false },
{ "id": "#c:topaz_ores", "required": false },
{ "id": "#c:truesilver_ores", "required": false },
{ "id": "#c:tungsten_ores", "required": false },
{ "id": "#c:unobtainium_ores", "required": false },
{ "id": "#c:ur_ores", "required": false },
{ "id": "#c:uranium_ores", "required": false },
{ "id": "#c:vermiculite_ores", "required": false },
{ "id": "#c:zinc_ores", "required": false }
]
}

View file

@ -1,21 +0,0 @@
{
"replace": false,
"values": [
"minecraft:white_concrete_powder",
"minecraft:orange_concrete_powder",
"minecraft:magenta_concrete_powder",
"minecraft:light_blue_concrete_powder",
"minecraft:yellow_concrete_powder",
"minecraft:lime_concrete_powder",
"minecraft:pink_concrete_powder",
"minecraft:gray_concrete_powder",
"minecraft:light_gray_concrete_powder",
"minecraft:cyan_concrete_powder",
"minecraft:purple_concrete_powder",
"minecraft:blue_concrete_powder",
"minecraft:brown_concrete_powder",
"minecraft:green_concrete_powder",
"minecraft:red_concrete_powder",
"minecraft:black_concrete_powder"
]
}

View file

@ -1,7 +0,0 @@
{
"replace": false,
"values": [
"unicopia:bat_screech",
"unicopia:rainboom"
]
}

View file

@ -1,6 +0,0 @@
{
"replace": false,
"values": [
"unicopia:horseshoe"
]
}

View file

@ -1,6 +0,0 @@
{
"replace": false,
"values": [
"unicopia:rock"
]
}

View file

@ -1,16 +0,0 @@
{
"replace": false,
"values": [
"#minecraft:is_fall",
"#minecraft:is_freezing",
"#minecraft:is_lightning",
"#minecraft:is_projectile",
"unicopia:zap",
"unicopia:love_draining",
"unicopia:life_draining",
"unicopia:rainboom",
"unicopia:sun",
"unicopia:sunlight",
"unicopia:smash"
]
}