mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-11-03 23:22:59 +00:00 
			
		
		
		
	Add support for codecs to our data generator system
This already exists in both upstream loaders, we just need to abstract over it.
This commit is contained in:
		@@ -4,16 +4,20 @@
 | 
			
		||||
 | 
			
		||||
package dan200.computercraft.data;
 | 
			
		||||
 | 
			
		||||
import com.mojang.serialization.Codec;
 | 
			
		||||
import net.minecraft.data.DataProvider;
 | 
			
		||||
import net.minecraft.data.PackOutput;
 | 
			
		||||
import net.minecraft.data.loot.LootTableProvider.SubProviderEntry;
 | 
			
		||||
import net.minecraft.data.models.BlockModelGenerators;
 | 
			
		||||
import net.minecraft.data.models.ItemModelGenerators;
 | 
			
		||||
import net.minecraft.data.tags.TagsProvider;
 | 
			
		||||
import net.minecraft.resources.ResourceLocation;
 | 
			
		||||
import net.minecraft.server.packs.PackType;
 | 
			
		||||
import net.minecraft.world.item.Item;
 | 
			
		||||
import net.minecraft.world.level.block.Block;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.function.BiConsumer;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -39,9 +43,11 @@ public final class DataProviders {
 | 
			
		||||
        generator.add(out -> new LanguageProvider(out, turtleUpgrades, pocketUpgrades));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface GeneratorSink {
 | 
			
		||||
    public interface GeneratorSink {
 | 
			
		||||
        <T extends DataProvider> T add(DataProvider.Factory<T> factory);
 | 
			
		||||
 | 
			
		||||
        <T> void addFromCodec(String name, PackType type, String directory, Codec<T> codec, Consumer<BiConsumer<ResourceLocation, T>> output);
 | 
			
		||||
 | 
			
		||||
        void lootTable(List<SubProviderEntry> tables);
 | 
			
		||||
 | 
			
		||||
        TagsProvider<Block> blockTags(Consumer<TagProvider.TagConsumer<Block>> tags);
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ package dan200.computercraft.shared.container;
 | 
			
		||||
import net.minecraft.core.NonNullList;
 | 
			
		||||
import net.minecraft.world.Container;
 | 
			
		||||
import net.minecraft.world.ContainerHelper;
 | 
			
		||||
import net.minecraft.world.entity.player.Player;
 | 
			
		||||
import net.minecraft.world.item.ItemStack;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -16,24 +15,6 @@ import net.minecraft.world.item.ItemStack;
 | 
			
		||||
public interface BasicContainer extends Container {
 | 
			
		||||
    NonNullList<ItemStack> getContents();
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    default int getMaxStackSize() {
 | 
			
		||||
        return 64;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    default void startOpen(Player player) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    default void stopOpen(Player player) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    default boolean canPlaceItem(int slot, ItemStack stack) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    default int getContainerSize() {
 | 
			
		||||
        return getContents().size();
 | 
			
		||||
 
 | 
			
		||||
@@ -4,21 +4,25 @@
 | 
			
		||||
 | 
			
		||||
package dan200.computercraft.data;
 | 
			
		||||
 | 
			
		||||
import com.mojang.serialization.Codec;
 | 
			
		||||
import dan200.computercraft.shared.platform.RegistryWrappers;
 | 
			
		||||
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
 | 
			
		||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
 | 
			
		||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
 | 
			
		||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricCodecDataProvider;
 | 
			
		||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
 | 
			
		||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
 | 
			
		||||
import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider;
 | 
			
		||||
import net.minecraft.core.HolderLookup;
 | 
			
		||||
import net.minecraft.data.CachedOutput;
 | 
			
		||||
import net.minecraft.data.DataProvider;
 | 
			
		||||
import net.minecraft.data.PackOutput;
 | 
			
		||||
import net.minecraft.data.loot.LootTableProvider;
 | 
			
		||||
import net.minecraft.data.models.BlockModelGenerators;
 | 
			
		||||
import net.minecraft.data.models.ItemModelGenerators;
 | 
			
		||||
import net.minecraft.data.tags.TagsProvider;
 | 
			
		||||
import net.minecraft.resources.ResourceLocation;
 | 
			
		||||
import net.minecraft.server.packs.PackType;
 | 
			
		||||
import net.minecraft.tags.TagKey;
 | 
			
		||||
import net.minecraft.world.item.Item;
 | 
			
		||||
import net.minecraft.world.level.block.Block;
 | 
			
		||||
@@ -43,6 +47,27 @@ public class FabricDataGenerators implements DataGeneratorEntrypoint {
 | 
			
		||||
            return generator.addProvider(factory);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public <T> void addFromCodec(String name, PackType type, String directory, Codec<T> codec, Consumer<BiConsumer<ResourceLocation, T>> output) {
 | 
			
		||||
            generator.addProvider((FabricDataOutput out) -> {
 | 
			
		||||
                var ourType = switch (type) {
 | 
			
		||||
                    case SERVER_DATA -> PackOutput.Target.DATA_PACK;
 | 
			
		||||
                    case CLIENT_RESOURCES -> PackOutput.Target.RESOURCE_PACK;
 | 
			
		||||
                };
 | 
			
		||||
                return new FabricCodecDataProvider<T>(out, ourType, directory, codec) {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public String getName() {
 | 
			
		||||
                        return name;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    protected void configure(BiConsumer<ResourceLocation, T> provider) {
 | 
			
		||||
                        output.accept(provider);
 | 
			
		||||
                    }
 | 
			
		||||
                };
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public void lootTable(List<LootTableProvider.SubProviderEntry> tables) {
 | 
			
		||||
            for (var table : tables) {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,8 @@
 | 
			
		||||
 | 
			
		||||
package dan200.computercraft.data;
 | 
			
		||||
 | 
			
		||||
import com.mojang.serialization.Codec;
 | 
			
		||||
import com.mojang.serialization.JsonOps;
 | 
			
		||||
import dan200.computercraft.api.ComputerCraftAPI;
 | 
			
		||||
import dan200.computercraft.shared.platform.RegistryWrappers;
 | 
			
		||||
import net.minecraft.core.HolderLookup;
 | 
			
		||||
@@ -14,18 +16,24 @@ import net.minecraft.data.models.BlockModelGenerators;
 | 
			
		||||
import net.minecraft.data.models.ItemModelGenerators;
 | 
			
		||||
import net.minecraft.data.tags.ItemTagsProvider;
 | 
			
		||||
import net.minecraft.data.tags.TagsProvider;
 | 
			
		||||
import net.minecraft.resources.ResourceLocation;
 | 
			
		||||
import net.minecraft.server.packs.PackType;
 | 
			
		||||
import net.minecraft.tags.TagKey;
 | 
			
		||||
import net.minecraft.world.item.Item;
 | 
			
		||||
import net.minecraft.world.level.block.Block;
 | 
			
		||||
import net.minecraftforge.common.data.BlockTagsProvider;
 | 
			
		||||
import net.minecraftforge.common.data.ExistingFileHelper;
 | 
			
		||||
import net.minecraftforge.common.data.JsonCodecProvider;
 | 
			
		||||
import net.minecraftforge.data.event.GatherDataEvent;
 | 
			
		||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
 | 
			
		||||
import net.minecraftforge.fml.common.Mod;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.function.BiConsumer;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
 | 
			
		||||
@@ -46,6 +54,15 @@ public class Generators {
 | 
			
		||||
            return generator.addProvider(factory);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public <T> void addFromCodec(String name, PackType type, String directory, Codec<T> codec, Consumer<BiConsumer<ResourceLocation, T>> output) {
 | 
			
		||||
            generator.addProvider(out -> {
 | 
			
		||||
                Map<ResourceLocation, T> map = new HashMap<>();
 | 
			
		||||
                output.accept(map::put);
 | 
			
		||||
                return new JsonCodecProvider<>(out, existingFiles, ComputerCraftAPI.MOD_ID, JsonOps.INSTANCE, type, directory, codec, map);
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public void lootTable(List<LootTableProvider.SubProviderEntry> tables) {
 | 
			
		||||
            add(out -> new LootTableProvider(out, Set.of(), tables));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user