Skip to content

Commit

Permalink
more reworks
Browse files Browse the repository at this point in the history
  • Loading branch information
ferriarnus committed Dec 28, 2023
1 parent 2636d84 commit af937d4
Show file tree
Hide file tree
Showing 13 changed files with 191 additions and 187 deletions.
18 changes: 4 additions & 14 deletions src/main/java/com/example/examplemod/data/EnderDataProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,20 @@
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.data.event.GatherDataEvent;
import net.neoforged.neoforge.registries.DeferredHolder;
import org.apache.commons.lang3.function.TriFunction;
import org.apache.logging.log4j.util.TriConsumer;

import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;

@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, modid = ExampleMod.MODID)
public class EnderDataProvider implements DataProvider {
private final String modid;
private final List<DeferredHolder<Block, ? extends Block>> BLOCKS = new ArrayList<>();
private final List<DeferredHolder<Item, ? extends Item>> ITEMS = new ArrayList<>();
private final List<DeferredHolder<?, ?>> entries = new ArrayList<>();
private final List<DataProvider> subProviders = new ArrayList<>();
private final List<TriFunction<PackOutput, ExistingFileHelper, CompletableFuture<HolderLookup.Provider>, DataProvider>> serverSubProviderConsumers = new ArrayList<>();
private static final Map<String, EnderDataProvider> INSTANCES = new HashMap<>();
Expand All @@ -43,13 +37,10 @@ public void addSubProvider(boolean include, DataProvider provider) {
}
}

public void addBlocks(Collection<DeferredHolder<Block, ? extends Block>> blocks) {
BLOCKS.addAll(blocks);
public <T> void addTranslations(Collection<DeferredHolder<T, ? extends T>> entries) {
this.entries.addAll(entries);
}

public void addItems(Collection<DeferredHolder<Item, ? extends Item>> items) {
ITEMS.addAll(items);
}

public void addServerSubProvider(TriFunction<PackOutput, ExistingFileHelper, CompletableFuture<HolderLookup.Provider>, DataProvider> function) {
serverSubProviderConsumers.add(function);
Expand Down Expand Up @@ -78,8 +69,7 @@ static void onGatherData(GatherDataEvent event) {
}
}
EnderLangProvider enUs = new EnderLangProvider(event.getGenerator().getPackOutput(), provider.modid, "en_us");
enUs.addBlocks(provider.BLOCKS);
enUs.addItems(provider.ITEMS);
enUs.add(provider.entries);
provider.subProviders.add(enUs);
event.getGenerator().addProvider(true, provider);
}
Expand Down
32 changes: 10 additions & 22 deletions src/main/java/com/example/examplemod/data/EnderLangProvider.java
Original file line number Diff line number Diff line change
@@ -1,47 +1,35 @@
package com.example.examplemod.data;

import com.example.examplemod.registry.EnderBlockRegistry;
import com.example.examplemod.registry.EnderDeferredBlock;
import com.example.examplemod.registry.EnderDeferredItem;
import com.example.examplemod.registry.EnderItemRegistry;
import com.example.examplemod.registry.*;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.neoforged.neoforge.common.data.LanguageProvider;
import net.neoforged.neoforge.registries.DeferredHolder;
import oshi.util.tuples.Pair;

import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;

public class EnderLangProvider extends LanguageProvider {
private final List<DeferredHolder<Block, ? extends Block>> blocks = new ArrayList<>();
private final List<DeferredHolder<Item, ? extends Item>> items = new ArrayList<>();
private final List<DeferredHolder<?, ?>> entries = new ArrayList<>();

public EnderLangProvider(PackOutput output, String modid, String locale) {
super(output, modid, locale);
}

public void addBlocks(List<DeferredHolder<Block, ? extends Block>> blocks) {
this.blocks.addAll(blocks);
}

public void addItems(List<DeferredHolder<Item, ? extends Item>> items) {
this.items.addAll(items);
public void add(List<DeferredHolder<?, ?>> entries) {
this.entries.addAll(entries);
}

@Override
protected void addTranslations() {
String translation = "";
for (DeferredHolder<Block, ? extends Block> block : blocks) {
translation = ((EnderDeferredBlock<Block>) block).getTranslation();
if (!translation.isEmpty())
this.add(block.get(), translation);
}
for (DeferredHolder<Item, ? extends Item> item : items) {
translation = ((EnderDeferredItem<Item>) item).getTranslation();
if (!translation.isEmpty())
this.add(item.get(), translation);
for (DeferredHolder<?, ?> entry : entries) {
Pair<String, String> translation = ((ITranslatable) entry).getTranslation();
if (!translation.getB().isEmpty())
this.add(translation.getA(), translation.getB());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,26 @@

import com.example.examplemod.data.*;
import com.example.examplemod.events.ColorEvents;
import net.minecraft.core.HolderLookup;
import com.example.examplemod.mixin.DeferredRegisterAccessor;
import net.minecraft.core.Registry;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.PackOutput;
import net.minecraft.data.loot.LootTableProvider;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.LiquidBlock;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.FlowingFluid;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import net.neoforged.bus.api.EventPriority;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.loading.FMLEnvironment;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.data.event.GatherDataEvent;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;

import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.function.Supplier;

Expand Down Expand Up @@ -85,11 +82,39 @@ public EnderDeferredBlock<Block> registerBlock(String name, BlockBehaviour.Prope
return this.registerBlock(name, Block::new, props);
}

public <B extends LiquidBlock> EnderDeferredBlock.EnderDeferredLiquidBlock<B> registerLiquidBlock(String name, Function<ResourceLocation, ? extends B> func) {
//if (seenRegisterEvent)
// throw new IllegalStateException("Cannot register new entries to DeferredRegister after RegisterEvent has been fired.");
Objects.requireNonNull(name);
Objects.requireNonNull(func);
final ResourceLocation key = new ResourceLocation(getNamespace(), name);

EnderDeferredBlock.EnderDeferredLiquidBlock<B> ret = createLiquidHolder(this.getRegistryKey(), key);

if (((DeferredRegisterAccessor<Block>)this).getEntries().putIfAbsent(ret, () -> func.apply(key)) != null) {
throw new IllegalArgumentException("Duplicate registration " + name);
}

return ret;
}

public EnderDeferredBlock.EnderDeferredLiquidBlock<? extends LiquidBlock> registerLiquidBlock(String namespace, Supplier<? extends LiquidBlock> supplier) {
return this.registerLiquidBlock(namespace, key -> supplier.get());
}

public EnderDeferredBlock.EnderDeferredLiquidBlock<LiquidBlock> registerLiquidBlock(String name, BlockBehaviour.Properties props, Supplier<FlowingFluid> fluid) {
return this.registerLiquidBlock(name, (rl) -> new LiquidBlock(fluid, props));
}

@Override
protected <I extends Block> DeferredBlock<I> createHolder(ResourceKey<? extends Registry<Block>> registryKey, ResourceLocation key) {
return EnderDeferredBlock.createBlock(ResourceKey.create(registryKey, key));
}

private <B extends LiquidBlock> EnderDeferredBlock.EnderDeferredLiquidBlock<B> createLiquidHolder(ResourceKey<? extends Registry<Block>> registryKey, ResourceLocation key) {
return EnderDeferredBlock.EnderDeferredLiquidBlock.createLiquidBlock(ResourceKey.create(registryKey, key));
}

public EnderItemRegistry getItemRegistry() {
return ItemRegistry;
}
Expand All @@ -110,7 +135,7 @@ public void register(IEventBus bus) {

private void onGatherData() {
EnderDataProvider provider = EnderDataProvider.getInstance(getNamespace());
provider.addBlocks(this.getEntries());
provider.addTranslations(this.getEntries());
provider.addServerSubProvider((packOutput, existingFileHelper, lookup) -> new EnderTagProvider<>(packOutput, this.getRegistryKey(), b -> b.builtInRegistryHolder().key(), lookup, getNamespace(), existingFileHelper, this));
provider.addServerSubProvider((packOutput, existingFileHelper, lookup) -> new EnderBlockStateProvider(packOutput, getNamespace(), existingFileHelper, this));
provider.addServerSubProvider((packOutput, existingFileHelper, lookup) -> new LootTableProvider(packOutput, Collections.emptySet(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.LiquidBlock;
import net.neoforged.neoforge.client.model.generators.BlockStateProvider;
import net.neoforged.neoforge.fluids.FluidType;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredHolder;
import org.apache.commons.lang3.StringUtils;
import oshi.util.tuples.Pair;

import javax.annotation.Nullable;
import java.util.Set;
Expand Down Expand Up @@ -40,8 +43,8 @@ public EnderDeferredBlock<T> setTranslation(String translation) {
}

@Override
public String getTranslation() {
return translation;
public Pair<String, String> getTranslation() {
return new Pair<>(this.get().getDescriptionId(), translation);
}

@SafeVarargs
Expand Down Expand Up @@ -104,4 +107,25 @@ public static <T extends Block> EnderDeferredBlock<T> createBlock(ResourceLocati
public static <T extends Block> EnderDeferredBlock<T> createBlock(ResourceKey<Block> key) {
return new EnderDeferredBlock<>(key);
}

public static class EnderDeferredLiquidBlock<T extends LiquidBlock> extends EnderDeferredBlock<T> {
private EnderDeferredFluid<? extends FluidType> fluid;

protected EnderDeferredLiquidBlock(ResourceKey<Block> key) {
super(key);
}

public EnderDeferredLiquidBlock<T> setFluid(EnderDeferredFluid<? extends FluidType> fluid) {
this.fluid = fluid;
return this;
}

public EnderDeferredFluid<? extends FluidType> finishLiquidBlock() {
return fluid;
}

public static <B extends LiquidBlock> EnderDeferredLiquidBlock<B> createLiquidBlock(ResourceKey<Block> key) {
return new EnderDeferredBlock.EnderDeferredLiquidBlock<>(key);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,48 +13,63 @@
import net.neoforged.neoforge.fluids.BaseFlowingFluid;
import net.neoforged.neoforge.fluids.FluidType;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;
import org.apache.commons.lang3.StringUtils;
import oshi.util.tuples.Pair;

import javax.annotation.Nullable;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;

public class EnderDeferredFluid<T extends FluidType> extends EnderDeferredObject<FluidType, T>{
public class EnderDeferredFluid<T extends FluidType> extends DeferredHolder<FluidType, T> implements ITranslatable, ITagagble<Fluid>{
protected String translation = StringUtils.capitalize(getId().getPath().replace('_', ' '));
private Set<TagKey<Fluid>> FluidTags = Set.of();
protected Set<TagKey<Item>> ItemTags = Set.of();
protected ResourceKey<CreativeModeTab> tab;
@Nullable
protected BiConsumer<EnderItemModelProvider, ? extends BucketItem> modelProvider = EnderItemModelProvider::basicItem;
private EnderDeferredObject<Fluid, BaseFlowingFluid.Flowing> flowingFluid;
private EnderDeferredObject<Fluid, BaseFlowingFluid.Source> sourceFluid;
private DeferredBlock<? extends LiquidBlock> block;
private DeferredItem<? extends Item> bucket;
private DeferredHolder<Fluid, BaseFlowingFluid.Flowing> flowingFluid;
private DeferredHolder<Fluid, BaseFlowingFluid.Source> sourceFluid;
private EnderDeferredBlock.EnderDeferredLiquidBlock<? extends LiquidBlock> block;
private EnderDeferredItem.EnderDeferredBucketItem<? extends Item> bucket;
private final BaseFlowingFluid.Properties properties = new BaseFlowingFluid.Properties(this, sourceFluid, flowingFluid).block(block).bucket(bucket);
private EnderRegistry<Fluid> fluid;
private DeferredRegister.Blocks BLOCKS;
private DeferredRegister.Items ITEMS;
private DeferredRegister<Fluid> fluid;
private EnderBlockRegistry BLOCKS;
private EnderItemRegistry ITEMS;

protected EnderDeferredFluid(ResourceKey<FluidType> key) {
super(key);
}

public EnderDeferredFluid<T> createFluids(Consumer<BaseFlowingFluid.Properties> consumer, Supplier<? extends Item> bucket, Supplier<? extends LiquidBlock> block) {
this.block = BLOCKS.register(getId().getPath(), block);
this.bucket = ITEMS.register(getId().getPath(), bucket);
public EnderDeferredFluid<T> createFluid(Consumer<BaseFlowingFluid.Properties> consumer, Supplier<? extends BucketItem> bucket, Supplier<? extends LiquidBlock> block) {
this.block = BLOCKS.registerLiquidBlock(getId().getPath(), (r) -> block.get());
this.bucket = ITEMS.registerBucket(getId().getPath(), bucket);
consumer.accept(properties);
this.flowingFluid = fluid.register("fluid_" + getId().getPath() + "_flowing", () -> new BaseFlowingFluid.Flowing(properties));
this.sourceFluid = fluid.register("fluid_" + getId().getPath() + "_still", () -> new BaseFlowingFluid.Source(properties));
return this;
}

public EnderDeferredFluid<T> createFluids(Consumer<BaseFlowingFluid.Properties> consumer) {
return this.createFluids(consumer, () -> new BucketItem(this.sourceFluid, new Item.Properties().stacksTo(1)),
public EnderDeferredFluid<T> createSimpleFluid(Consumer<BaseFlowingFluid.Properties> consumer) {
return this.createFluid(consumer, () -> new BucketItem(this.sourceFluid, new Item.Properties().stacksTo(1)),
() -> new LiquidBlock(this.flowingFluid, BlockBehaviour.Properties.copy(Blocks.WATER)));
}

public EnderDeferredFluid<T> createFluid(Consumer<BaseFlowingFluid.Properties> consumer) {
consumer.accept(properties);
return this;
}

public EnderDeferredBlock.EnderDeferredLiquidBlock<? extends LiquidBlock> withBlock(Supplier<? extends LiquidBlock> supplier) {
this.block = BLOCKS.registerLiquidBlock(getId().getNamespace(), supplier).setFluid(this);
return this.block;
}

public EnderDeferredItem.EnderDeferredBucketItem<? extends BucketItem> withBucket(Supplier<? extends BucketItem> supplier) {
this.bucket = ITEMS.registerBucket(getId().getNamespace(), supplier).setFluid(this);
return this.bucket;
}

public BaseFlowingFluid.Source getSource() {
return sourceFluid.get();
}
Expand All @@ -63,53 +78,29 @@ public BaseFlowingFluid.Flowing getFlowing() {
return flowingFluid.get();
}

public void setRegistries(EnderRegistry<Fluid> fluid, DeferredRegister.Blocks blocks, DeferredRegister.Items items) {
public void setRegistries(DeferredRegister<Fluid> fluid, EnderBlockRegistry blocks, EnderItemRegistry items) {
this.fluid = fluid;
this.BLOCKS = blocks;
this.ITEMS = items;
}

@SafeVarargs
public final EnderDeferredFluid<T> addItemTags(TagKey<Item>... tags) {
ItemTags = Set.of(tags);
return this;
}

public Set<TagKey<Item>> getItemTags() {
return ItemTags;
}

@SafeVarargs
public final EnderDeferredFluid<T> addFluidTags(TagKey<Fluid>... tags) {
this.FluidTags = Set.of(tags);
return this;
}

public Set<TagKey<Fluid>> getFluidTags() {
public Set<TagKey<Fluid>> getTags() {
return FluidTags;
}

public EnderDeferredFluid<T> setTab(ResourceKey<CreativeModeTab> tab) {
this.tab = tab;
return this;
}

public ResourceKey<CreativeModeTab> getTab() {
return tab;
}

public EnderDeferredFluid<T> setModelProvider(BiConsumer<EnderItemModelProvider, BucketItem> modelProvider) {
this.modelProvider = modelProvider;
public EnderDeferredFluid<T> setTranslation(String translation) {
this.translation = translation;
return this;
}

public BiConsumer<EnderItemModelProvider, ? extends BucketItem> getModelProvider() {
return modelProvider;
}

@Override
public EnderDeferredFluid<T> setTranslation(String translation) {
super.setTranslation(translation);
return this;
public Pair<String, String> getTranslation() {
return new Pair<>(this.get().getDescriptionId(), translation);
}
}
Loading

0 comments on commit af937d4

Please sign in to comment.