diff --git a/src/generated/resources/assets/examplemod/models/item/example_block.json b/src/generated/resources/assets/examplemod/models/item/example_block.json new file mode 100644 index 0000000..f882b09 --- /dev/null +++ b/src/generated/resources/assets/examplemod/models/item/example_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "examplemod:item/example_block" + } +} \ No newline at end of file diff --git a/src/main/java/com/enderio/regilite/AbstractRegilite.java b/src/main/java/com/enderio/regilite/AbstractRegilite.java new file mode 100644 index 0000000..59d1658 --- /dev/null +++ b/src/main/java/com/enderio/regilite/AbstractRegilite.java @@ -0,0 +1,67 @@ +package com.enderio.regilite; + +import com.enderio.regilite.utils.BundledDataProvider; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectList; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.data.event.GatherDataEvent; + +/** + * Abstract Regilite implementation that handles registration of module events. + * This can be used if a mod wants to implement its own modules to replace or extend existing ones. + * This might incur some more boilerplate, but is more ergonomic than shadowing the existing Regilite methods. + * If you only want to add a custom registry to Regilite, extend Regilite instead. + */ +public abstract class AbstractRegilite { + private final String modId; + + private final ObjectList modulesWithDataGeneration = new ObjectArrayList<>(); + private final ObjectList modulesWithEvents = new ObjectArrayList<>(); + + protected AbstractRegilite(String modId) { + this.modId = modId; + } + + /** + * Register a module within the Regiltie container. + * This will hook the different module types into the correct places (events and datagen for example). + */ + protected T registerModule(T module) { + if (module instanceof RegiliteModuleDataGen dataGenModule) { + modulesWithDataGeneration.add(dataGenModule); + } + + if (module instanceof RegiliteModuleEvents eventsModule) { + modulesWithEvents.add(eventsModule); + } + + return module; + } + + public String modId() { + return modId; + } + + /** + * Register all event handlers for Regilite's modules. + * You should perform this in your mod entrypoint. + * @param modEventBus The mod event bus. + */ + public void register(IEventBus modEventBus) { + modEventBus.addListener(this::onGatherData); + + for (var module : modulesWithEvents) { + module.register(modEventBus); + } + } + + protected void onGatherData(GatherDataEvent event) { + var provider = new BundledDataProvider(modId); + + for (var module : modulesWithDataGeneration) { + module.gatherProviders(event, provider::addSubProvider); + } + + event.getGenerator().addProvider(true, provider); + } +} diff --git a/src/main/java/com/enderio/regilite/Regilite.java b/src/main/java/com/enderio/regilite/Regilite.java index 9316aeb..4e05758 100644 --- a/src/main/java/com/enderio/regilite/Regilite.java +++ b/src/main/java/com/enderio/regilite/Regilite.java @@ -9,12 +9,9 @@ import com.enderio.regilite.data.RegiliteDataProvider; import com.enderio.regilite.events.BlockEntityCapabilityEvents; import com.enderio.regilite.events.BlockEntityRendererEvents; -import com.enderio.regilite.events.ColorEvents; import com.enderio.regilite.events.EntityRendererEvents; import com.enderio.regilite.events.FluidRenderTypeEvents; -import com.enderio.regilite.events.ItemCapabilityEvents; import com.enderio.regilite.events.ScreenEvents; -import com.enderio.regilite.holder.RegiliteItem; import com.enderio.regilite.blocks.RegiliteBlocks; import com.enderio.regilite.items.RegiliteItems; import com.enderio.regilite.lang.RegiliteLang; @@ -23,20 +20,17 @@ import com.enderio.regilite.registry.BlockEntityRegistry; import com.enderio.regilite.registry.EntityRegistry; import com.enderio.regilite.registry.FluidRegistry; -import com.enderio.regilite.registry.ItemRegistry; import com.enderio.regilite.registry.MenuRegistry; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectList; import net.minecraft.world.entity.EntityType; import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.neoforge.data.event.GatherDataEvent; -import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; import net.neoforged.neoforge.fluids.FluidType; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; @@ -45,7 +39,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.function.Consumer; import java.util.function.Supplier; public class Regilite { @@ -98,6 +91,10 @@ private T registerModule(T module) { return module; } + public String modId() { + return modId; + } + public RegiliteLang lang() { return langModule; } @@ -131,13 +128,9 @@ public void register(IEventBus modbus) { module.register(modbus); } - modbus.addListener(new ItemCapabilityEvents(this)::registerCapabilities); modbus.addListener(new BlockEntityCapabilityEvents(this)::registerCapabilities); if (FMLEnvironment.dist.isClient()) { - modbus.addListener(new ColorEvents.Items(this)::registerItemColor); - modbus.addListener(this::addCreative); - modbus.addListener(new BlockEntityRendererEvents(this)::registerBER); modbus.addListener(new FluidRenderTypeEvents(this)::registerRenderTypes); @@ -158,10 +151,6 @@ private void onGatherData(GatherDataEvent event) { event.getGenerator().addProvider(true, provider); } - public String getModId() { - return modId; - } - public BlockEntityRegistry blockEntityRegistry() { return BlockEntityRegistry.create(this); } @@ -174,10 +163,6 @@ public FluidRegistry fluidRegistry() { return FluidRegistry.create(this); } - public ItemRegistry itemRegistry() { - return ItemRegistry.create(this); - } - public MenuRegistry menuRegistry() { return MenuRegistry.create(this); } @@ -229,20 +214,4 @@ public void addItems(Collection> entries) { public void addMenus(Collection, ? extends MenuType>> entries) { this.menus.addAll(entries); } - - public void addCreative(BuildCreativeModeTabContentsEvent event) { - for (DeferredHolder item : getItems()) { - if (item instanceof RegiliteItem) { - Consumer outputConsumer = ((RegiliteItem)item).getTab().get(event.getTabKey()); - if (outputConsumer != null) { - outputConsumer.accept(event); - } - } - } - } - - @Deprecated(forRemoval = true, since = "0.1") - public void addTranslation(Supplier key, String translation) { - lang().add(key, translation); - } } diff --git a/src/main/java/com/enderio/regilite/RegiliteBuilder.java b/src/main/java/com/enderio/regilite/RegiliteBuilder.java index d7fff55..bb33f1b 100644 --- a/src/main/java/com/enderio/regilite/RegiliteBuilder.java +++ b/src/main/java/com/enderio/regilite/RegiliteBuilder.java @@ -18,7 +18,7 @@ */ public abstract class RegiliteBuilder, R, T extends R, H extends DeferredHolder> { - private final H holder; + protected final H holder; protected RegiliteBuilder(H holder) { this.holder = holder; diff --git a/src/main/java/com/enderio/regilite/blocks/BlockBuilder.java b/src/main/java/com/enderio/regilite/blocks/BlockBuilder.java index 969b5e0..49f50f3 100644 --- a/src/main/java/com/enderio/regilite/blocks/BlockBuilder.java +++ b/src/main/java/com/enderio/regilite/blocks/BlockBuilder.java @@ -17,11 +17,16 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import net.neoforged.neoforge.capabilities.BlockCapability; +import net.neoforged.neoforge.capabilities.IBlockCapabilityProvider; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.client.model.generators.BlockStateProvider; import net.neoforged.neoforge.registries.DeferredBlock; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; @@ -33,8 +38,6 @@ public final class BlockBuilder extends RegiliteBuilder descriptionIdSupplier = this::getDescriptionId; - @Nullable private BiConsumer lootTable = RegiliteBlockLootProvider::dropSelf; @@ -44,27 +47,22 @@ public final class BlockBuilder extends RegiliteBuilder> blockColorSupplier; + protected List> attachedCapabilityList = new ArrayList<>(); + public BlockBuilder(DeferredBlock holder, RegiliteLang langModule, RegiliteTags tagsModule, RegiliteItems itemsModule) { super(holder); this.langModule = langModule; this.tagsModule = tagsModule; this.itemsModule = itemsModule; - // Default translation translation(DefaultTranslationUtility.getDefaultTranslationFrom(getId().getPath())); } public BlockBuilder translation(String englishTranslation) { - langModule.add(descriptionIdSupplier, englishTranslation); + langModule.addBlock(holder, englishTranslation); return this; } - // Do not call directly, use descriptionIdSupplier - @Deprecated - private String getDescriptionId() { - return get().getDescriptionId(); - } - public BlockBuilder tag(TagKey tag) { tagsModule.blocks().tag(tag).add(this::get); return this; @@ -91,7 +89,7 @@ public BlockBuilder createSimpleBlockItem(Item.Properties properties, Consume public BlockBuilder withBlockItem(Function function, Consumer> itemConfigure) { var item = itemsModule.create(getId().getPath(), () -> function.apply(this.get())); - itemConfigure.accept(item); + itemConfigure.accept(item.removeTranslation()); return this; } @@ -124,4 +122,25 @@ public BlockBuilder blockColor(@Nullable Supplier> color public Supplier> blockColor() { return blockColorSupplier; } + + public BlockBuilder capability(BlockCapability capability, IBlockCapabilityProvider provider) { + attachedCapabilityList.add(new AttachedCapability<>(capability, provider)); + return this; + } + + @ApiStatus.Internal + public void attachCapabilities(RegisterCapabilitiesEvent event) { + for (var attachedCapability : attachedCapabilityList) { + attachedCapability.registerProvider(event, get()); + } + } + + protected record AttachedCapability( + BlockCapability capability, + IBlockCapabilityProvider provider) { + + private void registerProvider(RegisterCapabilitiesEvent event, Block block) { + event.registerBlock(capability, provider, block); + } + } } diff --git a/src/main/java/com/enderio/regilite/blocks/RegiliteBlocks.java b/src/main/java/com/enderio/regilite/blocks/RegiliteBlocks.java index 3187845..d53127c 100644 --- a/src/main/java/com/enderio/regilite/blocks/RegiliteBlocks.java +++ b/src/main/java/com/enderio/regilite/blocks/RegiliteBlocks.java @@ -25,6 +25,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.data.event.GatherDataEvent; import net.neoforged.neoforge.registries.DeferredBlock; import net.neoforged.neoforge.registries.DeferredRegister; @@ -79,7 +80,7 @@ public BlockBuilder createSimple(String name, BlockBehaviour.Properties p @ApiStatus.Internal public static RegiliteBlocks create(Regilite regilite) { - return new RegiliteBlocks(regilite.getModId(), regilite.lang(), regilite.tags(), regilite.items(), regilite.lootTables(), DeferredRegister.createBlocks(regilite.getModId())); + return new RegiliteBlocks(regilite.modId(), regilite.lang(), regilite.tags(), regilite.items(), regilite.lootTables(), DeferredRegister.createBlocks(regilite.modId())); } @Override @@ -95,6 +96,7 @@ public DeferredRegister.Blocks deferredRegister() { @Override public void register(IEventBus modEventBus) { deferredRegister.register(modEventBus); + modEventBus.addListener(this::onRegisterCapabilities); lootTablesModule.addLootTableProvider(() -> new LootTableProvider.SubProviderEntry( prov -> new RegiliteBlockLootProvider(prov, this), LootContextParamSets.BLOCK)); @@ -104,6 +106,10 @@ public void register(IEventBus modEventBus) { } } + private void onRegisterCapabilities(RegisterCapabilitiesEvent event) { + blockBuilders().forEach(blockBuilder -> blockBuilder.attachCapabilities(event)); + } + @Override public void gatherProviders(GatherDataEvent event, Consumer addProvider) { if (!event.includeClient()) { diff --git a/src/main/java/com/enderio/regilite/data/RegiliteDataProvider.java b/src/main/java/com/enderio/regilite/data/RegiliteDataProvider.java index 228170a..f2d4191 100644 --- a/src/main/java/com/enderio/regilite/data/RegiliteDataProvider.java +++ b/src/main/java/com/enderio/regilite/data/RegiliteDataProvider.java @@ -11,10 +11,8 @@ import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; -import net.minecraft.data.loot.LootTableProvider; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.data.event.GatherDataEvent; @@ -30,7 +28,7 @@ public class RegiliteDataProvider implements DataProvider { private final Regilite regilite; public RegiliteDataProvider(Regilite regilite) { - this.modid = regilite.getModId(); + this.modid = regilite.modId(); this.regilite = regilite; } @@ -68,7 +66,6 @@ void onGatherData(GatherDataEvent event) { this.subProviders.add(new RegiliteTagProvider<>(packOutput, Registries.BLOCK_ENTITY_TYPE, b -> b.builtInRegistryHolder().key(), registries, modid, existingFileHelper, regilite.getBlockEntities())); - this.subProviders.add(new RegiliteItemModelProvider(packOutput, modid, existingFileHelper, regilite.getItems())); event.getGenerator().addProvider(true, this); } } diff --git a/src/main/java/com/enderio/regilite/events/ColorEvents.java b/src/main/java/com/enderio/regilite/events/ColorEvents.java deleted file mode 100644 index 316e5bb..0000000 --- a/src/main/java/com/enderio/regilite/events/ColorEvents.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) Team Ender IO and contributors - * SPDX-License-Identifier: LGPL-3.0-only - */ - -package com.enderio.regilite.events; - -import com.enderio.regilite.Regilite; -import com.enderio.regilite.holder.RegiliteItem; -import net.minecraft.world.item.Item; -import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; -import net.neoforged.neoforge.registries.DeferredHolder; - -public class ColorEvents { - - public static class Items { - - private final Regilite regilite; - - public Items(Regilite regilite) { - this.regilite = regilite; - } - - public void registerItemColor(RegisterColorHandlersEvent.Item event) { - for (DeferredHolder item : regilite.getItems()) { - if (item instanceof RegiliteItem) { - var colorSupplier = ((RegiliteItem)item).getItemColorSupplier(); - if (colorSupplier != null) { - event.register(colorSupplier.get().get(), item.get()); - } - } - } - } - } -} diff --git a/src/main/java/com/enderio/regilite/events/ItemCapabilityEvents.java b/src/main/java/com/enderio/regilite/events/ItemCapabilityEvents.java deleted file mode 100644 index 52410a9..0000000 --- a/src/main/java/com/enderio/regilite/events/ItemCapabilityEvents.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) Team Ender IO and contributors - * SPDX-License-Identifier: LGPL-3.0-only - */ - -package com.enderio.regilite.events; - -import com.enderio.regilite.Regilite; -import com.enderio.regilite.holder.RegiliteItem; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; - -public class ItemCapabilityEvents { - - private final Regilite regilite; - - public ItemCapabilityEvents(Regilite regilite) { - this.regilite = regilite; - } - - @SuppressWarnings("rawtypes") - public void registerCapabilities(RegisterCapabilitiesEvent event) { - for (var beHolder : regilite.getItems()) { - if (beHolder instanceof RegiliteItem regiliteItem) { - regiliteItem.registerCapabilityProviders(event); - } - } - } -} diff --git a/src/main/java/com/enderio/regilite/holder/RegiliteEntity.java b/src/main/java/com/enderio/regilite/holder/RegiliteEntity.java index 0fa7b78..06ecdb4 100644 --- a/src/main/java/com/enderio/regilite/holder/RegiliteEntity.java +++ b/src/main/java/com/enderio/regilite/holder/RegiliteEntity.java @@ -41,7 +41,7 @@ public final RegiliteEntity withTags(TagKey>... tags) { } public RegiliteEntity withTranslation(String translation) { - regilite.lang().add(supplier, translation); + regilite.lang().addEntity(this, translation); return this; } diff --git a/src/main/java/com/enderio/regilite/holder/RegiliteFluid.java b/src/main/java/com/enderio/regilite/holder/RegiliteFluid.java index 0ab09ac..5c8af79 100644 --- a/src/main/java/com/enderio/regilite/holder/RegiliteFluid.java +++ b/src/main/java/com/enderio/regilite/holder/RegiliteFluid.java @@ -6,13 +6,11 @@ package com.enderio.regilite.holder; import com.enderio.regilite.Regilite; -import com.enderio.regilite.registry.ItemRegistry; import com.enderio.regilite.utils.DefaultTranslationUtility; import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; import net.minecraft.world.item.BucketItem; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.material.Fluid; import net.neoforged.neoforge.fluids.BaseFlowingFluid; @@ -21,7 +19,6 @@ import net.neoforged.neoforge.registries.DeferredRegister; import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; public class RegiliteFluid extends DeferredHolder implements RegiliteHolder> { @@ -30,14 +27,14 @@ public class RegiliteFluid extends DeferredHolder flowingFluid; private DeferredHolder sourceFluid; //private RegiliteBlock block; - private RegiliteItem bucket; +// private RegiliteItem bucket; private final BaseFlowingFluid.Properties properties = new BaseFlowingFluid.Properties(this, this::getSource, this::getFlowing).block(this::getBlock).bucket(this::getBucket); private Supplier> renderTypeSupplier = () -> null; protected RegiliteFluid(ResourceKey key, Regilite regilite) { super(key); this.regilite = regilite; - regilite.addTranslation(descriptionIdSupplier, DefaultTranslationUtility.getDefaultTranslationFrom(getId().getPath())); + withTranslation(DefaultTranslationUtility.getDefaultTranslationFrom(getId().getPath())); } public static RegiliteFluid createHolder(ResourceKey fluidTypeResourceKey, Regilite regilite) { @@ -65,7 +62,8 @@ public BaseFlowingFluid.Flowing getFlowing() { } public BucketItem getBucket() { - return bucket.get(); + //return bucket.get(); + return null; } public LiquidBlock getBlock() { @@ -99,7 +97,7 @@ public RegiliteFluid withBlock(BlockRegistry registry, Function withBucket(ItemRegistry registry) { + /*public RegiliteFluid withBucket(ItemRegistry registry) { return withCustomBucket(registry, f -> new BucketItem(f.get(), new Item.Properties().stacksTo(1)), i -> { }); } @@ -122,7 +120,7 @@ public RegiliteFluid withCustomBucket(ItemRegistry reg itemConfigure.accept(bucket); this.bucket = bucket; return this; - } + }*/ // endregion @@ -133,7 +131,7 @@ public final RegiliteFluid withTags(TagKey... tags) { } public RegiliteFluid withTranslation(String translation) { - regilite.addTranslation(descriptionIdSupplier, translation); + regilite.lang().addFluid(this, translation); return this; } diff --git a/src/main/java/com/enderio/regilite/holder/RegiliteItem.java b/src/main/java/com/enderio/regilite/holder/RegiliteItem.java deleted file mode 100644 index 63acbc9..0000000 --- a/src/main/java/com/enderio/regilite/holder/RegiliteItem.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) Team Ender IO and contributors - * SPDX-License-Identifier: LGPL-3.0-only - */ - -package com.enderio.regilite.holder; - -import com.enderio.regilite.Regilite; -import com.enderio.regilite.data.DataGenContext; -import com.enderio.regilite.data.RegiliteItemModelProvider; -import com.enderio.regilite.registry.ITagagble; -import com.enderio.regilite.utils.DefaultTranslationUtility; -import net.minecraft.client.color.item.ItemColor; -import net.minecraft.resources.ResourceKey; -import net.minecraft.tags.TagKey; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.capabilities.ICapabilityProvider; -import net.neoforged.neoforge.capabilities.ItemCapability; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; -import net.neoforged.neoforge.registries.DeferredHolder; -import net.neoforged.neoforge.registries.DeferredItem; -import org.jetbrains.annotations.ApiStatus; - -import javax.annotation.Nullable; -import java.util.*; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Supplier; - -public class RegiliteItem extends DeferredItem implements RegiliteHolder> { - private final Supplier supplier = () -> get().getDescriptionId(); - private final Regilite regilite; - protected Map, Consumer> tab = new HashMap<>(); - @Nullable - protected BiConsumer> modelProvider = (prov, ctx) -> prov.basicItem(ctx.get()); - protected Supplier> colorSupplier; - protected List> attachedCapabilityList = new ArrayList<>(); - - protected RegiliteItem(ResourceKey key, Regilite regilite) { - super(key); - this.regilite = regilite; - regilite.addTranslation(supplier, DefaultTranslationUtility.getDefaultTranslationFrom(getId().getPath())); - } - - public RegiliteItem withTranslation(String translation) { - regilite.addTranslation(supplier, translation); - return this; - } - - @SafeVarargs - public final RegiliteItem withTags(TagKey... tags) { - regilite.tags().items().addToTags(this, tags); - return this; - } - - public RegiliteItem withTab(ResourceKey tab) { - this.tab.put(tab, output -> output.accept(new ItemStack(this.get()))); - return this; - } - - public RegiliteItem withTab(ResourceKey tab, CreativeModeTab.TabVisibility visibility) { - this.tab.put(tab, output -> output.accept(new ItemStack(this.get()), visibility)); - return this; - } - - public RegiliteItem withTab(ResourceKey tab, Consumer output) { - this.tab.put(tab, output); - return this; - } - - public Map, Consumer> getTab() { - return tab; - } - - public RegiliteItem withModelProvider(BiConsumer> modelProvider) { - this.modelProvider = modelProvider; - return this; - } - - public BiConsumer> getModelProvider() { - return modelProvider; - } - - public Supplier> getItemColorSupplier() { - return colorSupplier; - } - - public RegiliteItem withItemColor(Supplier> colorSupplier) { - this.colorSupplier = colorSupplier; - return this; - } - - public RegiliteItem withCapability(ItemCapability capability, ICapabilityProvider provider) { - attachedCapabilityList.add(new AttachedCapability<>(capability, provider)); - return this; - } - - @ApiStatus.Internal - public void registerCapabilityProviders(RegisterCapabilitiesEvent event) { - for (AttachedCapability capabilityProvider : attachedCapabilityList) { - capabilityProvider.registerProvider(event, value()); - } - } - - protected record AttachedCapability( - ItemCapability capability, - ICapabilityProvider provider) { - - private void registerProvider(RegisterCapabilitiesEvent event, Item item) { - event.registerItem(capability, provider, item); - } - } - - /** - * Creates a new {@link DeferredHolder} targeting the specified {@link Item}. - * - * @param The type of the target {@link Item}. - * @param key The resource key of the target {@link Item}. - */ - public static RegiliteItem createItem(ResourceKey key, Regilite regilite) { - return new RegiliteItem<>(key, regilite); - } -} diff --git a/src/main/java/com/enderio/regilite/items/ItemBuilder.java b/src/main/java/com/enderio/regilite/items/ItemBuilder.java index efcb5ba..4acd88d 100644 --- a/src/main/java/com/enderio/regilite/items/ItemBuilder.java +++ b/src/main/java/com/enderio/regilite/items/ItemBuilder.java @@ -6,35 +6,62 @@ package com.enderio.regilite.items; import com.enderio.regilite.RegiliteBuilder; +import com.enderio.regilite.data.DataGenContext; import com.enderio.regilite.lang.RegiliteLang; import com.enderio.regilite.tags.RegiliteTags; +import com.enderio.regilite.utils.DefaultTranslationUtility; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import net.minecraft.client.color.item.ItemColor; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.capabilities.ICapabilityProvider; +import net.neoforged.neoforge.capabilities.ItemCapability; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.registries.DeferredItem; -import org.apache.commons.lang3.NotImplementedException; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Supplier; public class ItemBuilder extends RegiliteBuilder, Item, T, DeferredItem> { private final RegiliteLang langModule; private final RegiliteTags tagsModule; + protected Object2ObjectMap, Consumer> tabs = new Object2ObjectOpenHashMap<>(); + + @Nullable + protected BiConsumer> modelProvider = (prov, ctx) -> prov.basicItem(ctx.get()); + + @Nullable + protected Supplier> colorSupplier; + + protected List> attachedCapabilityList = new ArrayList<>(); + public ItemBuilder(DeferredItem holder, RegiliteLang langModule, RegiliteTags tagsModule) { super(holder); this.langModule = langModule; this.tagsModule = tagsModule; + + translation(DefaultTranslationUtility.getDefaultTranslationFrom(getId().getPath())); } - public ItemBuilder withTranslation(String englishTranslation) { - langModule.add(this::getDescriptionId, englishTranslation); + public ItemBuilder translation(String englishTranslation) { + langModule.addItem(holder, englishTranslation); return this; } - private String getDescriptionId() { - return get().getDescriptionId(); + public ItemBuilder removeTranslation() { + langModule.removeItem(holder); + return this; } public final ItemBuilder tag(TagKey tag) { @@ -49,14 +76,53 @@ public final ItemBuilder tags(TagKey... tags) { } public final ItemBuilder tab(ResourceKey tab) { - throw new NotImplementedException(); + this.tabs.put(tab, output -> output.accept(new ItemStack(this.get()))); + return this; } public final ItemBuilder tab(ResourceKey tab, CreativeModeTab.TabVisibility visibility) { - throw new NotImplementedException(); + this.tabs.put(tab, output -> output.accept(new ItemStack(this.get()), visibility)); + return this; } public final ItemBuilder tab(ResourceKey tab, Consumer output) { - throw new NotImplementedException(); + this.tabs.put(tab, output); + return this; + } + + @ApiStatus.Internal + public Object2ObjectMap, Consumer> tabs() { + return tabs; + } + + public ItemBuilder modelProvider(BiConsumer> modelProvider) { + this.modelProvider = modelProvider; + return this; + } + + public ItemBuilder itemColor(Supplier> colorSupplier) { + this.colorSupplier = colorSupplier; + return this; + } + + public ItemBuilder capability(ItemCapability capability, ICapabilityProvider provider) { + attachedCapabilityList.add(new AttachedCapability<>(capability, provider)); + return this; + } + + @ApiStatus.Internal + public void attachCapabilities(RegisterCapabilitiesEvent event) { + for (var attachedCapability : attachedCapabilityList) { + attachedCapability.registerProvider(event, get()); + } + } + + protected record AttachedCapability( + ItemCapability capability, + ICapabilityProvider provider) { + + private void registerProvider(RegisterCapabilitiesEvent event, Item item) { + event.registerItem(capability, provider, item); + } } } diff --git a/src/main/java/com/enderio/regilite/items/RegiliteClientItems.java b/src/main/java/com/enderio/regilite/items/RegiliteClientItems.java new file mode 100644 index 0000000..360ac5b --- /dev/null +++ b/src/main/java/com/enderio/regilite/items/RegiliteClientItems.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) Team Ender IO and contributors + * SPDX-License-Identifier: LGPL-3.0-only + */ + +package com.enderio.regilite.items; + +import com.enderio.regilite.blocks.RegiliteBlocks; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +public class RegiliteClientItems { + private final RegiliteItems regiliteItems; + + public RegiliteClientItems(RegiliteItems regiliteItems) { + this.regiliteItems = regiliteItems; + } + + @SuppressWarnings("unused") + @SubscribeEvent + public void registerItemColor(RegisterColorHandlersEvent.Item event) { + regiliteItems.itemBuilders().forEach(itemBuilder -> { + if (itemBuilder.colorSupplier != null) { + event.register(itemBuilder.colorSupplier.get().get(), itemBuilder.get()); + } + }); + } +} diff --git a/src/main/java/com/enderio/regilite/data/RegiliteItemModelProvider.java b/src/main/java/com/enderio/regilite/items/RegiliteItemModelProvider.java similarity index 80% rename from src/main/java/com/enderio/regilite/data/RegiliteItemModelProvider.java rename to src/main/java/com/enderio/regilite/items/RegiliteItemModelProvider.java index 83ef042..eb26e00 100644 --- a/src/main/java/com/enderio/regilite/data/RegiliteItemModelProvider.java +++ b/src/main/java/com/enderio/regilite/items/RegiliteItemModelProvider.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: LGPL-3.0-only */ -package com.enderio.regilite.data; +package com.enderio.regilite.items; -import com.enderio.regilite.holder.RegiliteItem; +import com.enderio.regilite.data.DataGenContext; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; @@ -18,29 +18,27 @@ import net.neoforged.neoforge.client.model.generators.loaders.DynamicFluidContainerModelBuilder; import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.internal.versions.neoforge.NeoForgeVersion; -import net.neoforged.neoforge.registries.DeferredHolder; import java.util.List; import java.util.Objects; public class RegiliteItemModelProvider extends ItemModelProvider { - private final List> registered; + private final RegiliteItems items; - public RegiliteItemModelProvider(PackOutput output, String modid, ExistingFileHelper existingFileHelper, List> registered) { + public RegiliteItemModelProvider(PackOutput output, String modid, ExistingFileHelper existingFileHelper, RegiliteItems items) { super(output, modid, existingFileHelper); - this.registered = registered; + this.items = items; } @Override protected void registerModels() { - for (DeferredHolder item : registered) { - if (item instanceof RegiliteItem) { - var modelProvider = ((RegiliteItem)item).getModelProvider(); - if (modelProvider != null) { - modelProvider.accept(this, new DataGenContext<>(item.getKey().location(), item::get)); - } - } + items.itemBuilders().forEach(this::registerItemModel); + } + private void registerItemModel(ItemBuilder itemBuilder) { + var modelProvider = itemBuilder.modelProvider; + if (modelProvider != null) { + modelProvider.accept(this, new DataGenContext<>(itemBuilder.getId(), itemBuilder::get)); } } diff --git a/src/main/java/com/enderio/regilite/items/RegiliteItems.java b/src/main/java/com/enderio/regilite/items/RegiliteItems.java index 8521838..379d1c4 100644 --- a/src/main/java/com/enderio/regilite/items/RegiliteItems.java +++ b/src/main/java/com/enderio/regilite/items/RegiliteItems.java @@ -6,6 +6,7 @@ package com.enderio.regilite.items; import com.enderio.regilite.Regilite; +import com.enderio.regilite.RegiliteModuleDataGen; import com.enderio.regilite.RegiliteModuleEvents; import com.enderio.regilite.RegiliteRegistryModule; import com.enderio.regilite.lang.RegiliteLang; @@ -15,19 +16,27 @@ import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; +import net.minecraft.data.DataProvider; import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; +import net.neoforged.neoforge.data.event.GatherDataEvent; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; import net.neoforged.neoforge.registries.DeferredItem; import net.neoforged.neoforge.registries.DeferredRegister; import org.jetbrains.annotations.ApiStatus; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import java.util.stream.Stream; -public class RegiliteItems implements RegiliteRegistryModule, RegiliteModuleEvents { +public class RegiliteItems implements RegiliteRegistryModule, RegiliteModuleEvents, RegiliteModuleDataGen { + private final String modId; private final RegiliteLang langModule; private final RegiliteTags tagsModule; private final DeferredRegister.Items deferredRegister; @@ -35,7 +44,8 @@ public class RegiliteItems implements RegiliteRegistryModule> items = new ObjectArrayList<>(); - private RegiliteItems(RegiliteLang langModule, RegiliteTags tagsModule, DeferredRegister.Items deferredRegister) { + private RegiliteItems(String modId, RegiliteLang langModule, RegiliteTags tagsModule, DeferredRegister.Items deferredRegister) { + this.modId = modId; this.langModule = langModule; this.tagsModule = tagsModule; this.deferredRegister = deferredRegister; @@ -43,7 +53,12 @@ private RegiliteItems(RegiliteLang langModule, RegiliteTags tagsModule, Deferred @ApiStatus.Internal public static RegiliteItems create(Regilite regilite) { - return new RegiliteItems(regilite.lang(), regilite.tags(), DeferredRegister.createItems(regilite.getModId())); + return new RegiliteItems(regilite.modId(), regilite.lang(), regilite.tags(), DeferredRegister.createItems(regilite.modId())); + } + + @ApiStatus.Internal + public Stream> itemBuilders() { + return items.stream(); } public ItemBuilder create(String name, Function func, Item.Properties props) { @@ -83,7 +98,7 @@ public ItemBuilder createSimpleBlockItem(String name, Supplier createSimpleBlockItem(String name, Supplier block, Item.Properties properties) { DeferredItem holder = deferredRegister.registerSimpleBlockItem(name, block, properties); - var builder = new ItemBuilder<>(holder, langModule, tagsModule); + var builder = new ItemBuilder<>(holder, langModule, tagsModule).removeTranslation(); items.add(builder); return builder; } @@ -101,5 +116,34 @@ public DeferredRegister.Items deferredRegister() { @Override public void register(IEventBus modEventBus) { deferredRegister.register(modEventBus); + modEventBus.addListener(this::onBuildCreativeTabs); + modEventBus.addListener(this::onRegisterCapabilities); + + if (FMLEnvironment.dist.isClient()) { + modEventBus.register(new RegiliteClientItems(this)); + } + } + + private void onBuildCreativeTabs(BuildCreativeModeTabContentsEvent event) { + for (var item : items) { + var outputConsumer = item.tabs().get(event.getTabKey()); + if (outputConsumer != null) { + outputConsumer.accept(event); + } + } + } + + private void onRegisterCapabilities(RegisterCapabilitiesEvent event) { + itemBuilders().forEach(itemBuilder -> itemBuilder.attachCapabilities(event)); + } + + @Override + public void gatherProviders(GatherDataEvent event, Consumer addProvider) { + if (!event.includeClient()) { + return; + } + + addProvider.accept(new RegiliteItemModelProvider(event.getGenerator().getPackOutput(), modId, + event.getExistingFileHelper(), this)); } } diff --git a/src/main/java/com/enderio/regilite/lang/RegiliteLang.java b/src/main/java/com/enderio/regilite/lang/RegiliteLang.java index 960e83a..b6c6354 100644 --- a/src/main/java/com/enderio/regilite/lang/RegiliteLang.java +++ b/src/main/java/com/enderio/regilite/lang/RegiliteLang.java @@ -13,8 +13,15 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.material.Fluid; import net.neoforged.neoforge.common.data.LanguageProvider; import net.neoforged.neoforge.data.event.GatherDataEvent; +import net.neoforged.neoforge.fluids.FluidType; import java.util.Map; import java.util.function.Consumer; @@ -22,7 +29,14 @@ public class RegiliteLang implements RegiliteModuleDataGen { private final String modId; - private final Object2ObjectMap, String> entries = new Object2ObjectOpenHashMap<>(); + private final Object2ObjectMap basicEntries = new Object2ObjectOpenHashMap<>(); + + private final Object2ObjectMap, String> blockEntries = new Object2ObjectOpenHashMap<>(); + private final Object2ObjectMap, String> itemEntries = new Object2ObjectOpenHashMap<>(); + private final Object2ObjectMap, String> mobEffectEntries = new Object2ObjectOpenHashMap<>(); + private final Object2ObjectMap>, String> entityTypeEntries = new Object2ObjectOpenHashMap<>(); + private final Object2ObjectMap>, String> tagEntries = new Object2ObjectOpenHashMap<>(); + private final Object2ObjectMap, String> fluidTypeEntries = new Object2ObjectOpenHashMap<>(); public RegiliteLang(String modId) { this.modId = modId; @@ -33,12 +47,74 @@ public MutableComponent add(String prefix, ResourceLocation location, String tra } public MutableComponent add(String key, String translation) { - entries.put(() -> key, translation); + basicEntries.put(key, translation); return Component.translatable(key); } - public void add(Supplier keySupplier, String translation) { - entries.put(keySupplier, translation); + public void addBlock(Supplier block, String translation) { + blockEntries.put(block, translation); + } + + /** + * @implNote Must be the same supplier used to add the translation. + */ + public void removeBlock(Supplier block) { + blockEntries.remove(block); + } + + public void addItem(Supplier item, String translation) { + itemEntries.put(item, translation); + } + + /** + * @implNote Must be the same supplier used to add the translation. + */ + public void removeItem(Supplier item) { + itemEntries.remove(item); + } + + public void addMobEffect(Supplier mobEffect, String translation) { + mobEffectEntries.put(mobEffect, translation); + } + + /** + * @implNote Must be the same supplier used to add the translation. + */ + public void removeMobEffect(Supplier mobEffect) { + mobEffectEntries.remove(mobEffect); + } + + public void addEntity(Supplier> entityType, String translation) { + entityTypeEntries.put(entityType, translation); + } + + /** + * @implNote Must be the same supplier used to add the translation. + */ + public void removeEntity(Supplier> entityType) { + entityTypeEntries.remove(entityType); + } + + public void addTag(Supplier> tagKey, String translation) { + tagEntries.put(tagKey, translation); + } + + /** + * @implNote Must be the same supplier used to add the translation. + */ + public void removeTag(Supplier> tagKey) { + tagEntries.remove(tagKey); + } + + public void addFluid(Supplier fluidType, String translation) { + fluidTypeEntries.put(fluidType, translation); + } + + /** + * @implNote Must be the same supplier used to add the translation. + */ + public void removeFluid(Supplier fluidType) { + fluidTypeEntries.remove(fluidType); } @Override @@ -57,11 +133,47 @@ public DefaultProvider(PackOutput output, String modid, String locale) { @Override protected void addTranslations() { - for (Map.Entry, String> entry : entries.entrySet()) { + for (Map.Entry entry : basicEntries.entrySet()) { + if (!entry.getValue().isEmpty()) { + this.add(entry.getKey(), entry.getValue()); + } + } + + for (Map.Entry, String> entry : blockEntries.entrySet()) { if (!entry.getValue().isEmpty()) { this.add(entry.getKey().get(), entry.getValue()); } } + + for (Map.Entry, String> entry : itemEntries.entrySet()) { + if (!entry.getValue().isEmpty()) { + this.add(entry.getKey().get(), entry.getValue()); + } + } + + for (Map.Entry, String> entry : mobEffectEntries.entrySet()) { + if (!entry.getValue().isEmpty()) { + this.add(entry.getKey().get(), entry.getValue()); + } + } + + for (Map.Entry>, String> entry : entityTypeEntries.entrySet()) { + if (!entry.getValue().isEmpty()) { + this.add(entry.getKey().get(), entry.getValue()); + } + } + + for (Map.Entry>, String> entry : tagEntries.entrySet()) { + if (!entry.getValue().isEmpty()) { + this.add(entry.getKey().get(), entry.getValue()); + } + } + + for (Map.Entry, String> entry : fluidTypeEntries.entrySet()) { + if (!entry.getValue().isEmpty()) { + this.add(entry.getKey().get().getDescriptionId(), entry.getValue()); + } + } } @Override diff --git a/src/main/java/com/enderio/regilite/registry/BlockEntityRegistry.java b/src/main/java/com/enderio/regilite/registry/BlockEntityRegistry.java index c14c043..f78a992 100644 --- a/src/main/java/com/enderio/regilite/registry/BlockEntityRegistry.java +++ b/src/main/java/com/enderio/regilite/registry/BlockEntityRegistry.java @@ -27,7 +27,7 @@ public class BlockEntityRegistry extends DeferredRegister> { private final Regilite regilite; protected BlockEntityRegistry(Regilite regilite) { - super(BuiltInRegistries.BLOCK_ENTITY_TYPE.key(), regilite.getModId()); + super(BuiltInRegistries.BLOCK_ENTITY_TYPE.key(), regilite.modId()); this.regilite = regilite; } diff --git a/src/main/java/com/enderio/regilite/registry/EntityRegistry.java b/src/main/java/com/enderio/regilite/registry/EntityRegistry.java index 6c00b2f..b2fc34f 100644 --- a/src/main/java/com/enderio/regilite/registry/EntityRegistry.java +++ b/src/main/java/com/enderio/regilite/registry/EntityRegistry.java @@ -25,7 +25,7 @@ public class EntityRegistry extends DeferredRegister> { private final Regilite regilite; protected EntityRegistry(Regilite regilite) { - super(BuiltInRegistries.ENTITY_TYPE.key(), regilite.getModId()); + super(BuiltInRegistries.ENTITY_TYPE.key(), regilite.modId()); this.regilite = regilite; } diff --git a/src/main/java/com/enderio/regilite/registry/FluidRegistry.java b/src/main/java/com/enderio/regilite/registry/FluidRegistry.java index e8acbf5..a33c718 100644 --- a/src/main/java/com/enderio/regilite/registry/FluidRegistry.java +++ b/src/main/java/com/enderio/regilite/registry/FluidRegistry.java @@ -25,7 +25,7 @@ public class FluidRegistry extends DeferredRegister { private final Regilite regilite; protected FluidRegistry(Regilite regilite) { - super(NeoForgeRegistries.FLUID_TYPES.key(), regilite.getModId()); + super(NeoForgeRegistries.FLUID_TYPES.key(), regilite.modId()); this.regilite = regilite; } diff --git a/src/main/java/com/enderio/regilite/registry/ItemRegistry.java b/src/main/java/com/enderio/regilite/registry/ItemRegistry.java deleted file mode 100644 index 108a66c..0000000 --- a/src/main/java/com/enderio/regilite/registry/ItemRegistry.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) Team Ender IO and contributors - * SPDX-License-Identifier: LGPL-3.0-only - */ - -package com.enderio.regilite.registry; - -import com.enderio.regilite.Regilite; -import com.enderio.regilite.holder.RegiliteItem; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Item; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.neoforge.registries.DeferredItem; -import net.neoforged.neoforge.registries.DeferredRegister; - -import java.util.function.Function; -import java.util.function.Supplier; - -public class ItemRegistry extends DeferredRegister.Items { - - private final Regilite regilite; - - protected ItemRegistry(Regilite regilite) { - super(regilite.getModId()); - this.regilite = regilite; - } - - /** - * Adds a new item to the list of entries to be registered and returns a {@link DeferredItem} that will be populated with the created item automatically. - * - * @param name The new item's name. It will automatically have the {@linkplain #getNamespace() namespace} prefixed. - * @param func A factory for the new item. The factory should not cache the created item. - * @return A {@link DeferredItem} that will track updates from the registry for this item. - * @see #register(String, Supplier) - */ - @SuppressWarnings("unchecked") - @Override - public RegiliteItem register(String name, Function func) { - return (RegiliteItem)super.register(name, func); - } - - /** - * Adds a new item to the list of entries to be registered and returns a {@link DeferredItem} that will be populated with the created item automatically. - * - * @param name The new item's name. It will automatically have the {@linkplain #getNamespace() namespace} prefixed. - * @param sup A factory for the new item. The factory should not cache the created item. - * @return A {@link DeferredItem} that will track updates from the registry for this item. - * @see #register(String, Function) - */ - @Override - public RegiliteItem register(String name, Supplier sup) { - return this.register(name, key -> sup.get()); - } - - /** - * Adds a new item to the list of entries to be registered and returns a {@link DeferredItem} that will be populated with the created item automatically. - * - * @param name The new item's name. It will automatically have the {@linkplain #getNamespace() namespace} prefixed. - * @param func A factory for the new item. The factory should not cache the created item. - * @param props The properties for the created item. - * @return A {@link DeferredItem} that will track updates from the registry for this item. - * @see #registerItem(String, Function) - * @see #registerItem(String, Item.Properties) - * @see #registerItem(String) - */ - public RegiliteItem registerItem(String name, Function func, Item.Properties props) { - return this.register(name, () -> func.apply(props)); - } - - /** - * Adds a new item to the list of entries to be registered and returns a {@link DeferredItem} that will be populated with the created item automatically. - * This method uses the default {@link Item.Properties}. - * - * @param name The new item's name. It will automatically have the {@linkplain #getNamespace() namespace} prefixed. - * @param func A factory for the new item. The factory should not cache the created item. - * @return A {@link DeferredItem} that will track updates from the registry for this item. - * @see #registerItem(String, Function, Item.Properties) - * @see #registerItem(String, Item.Properties) - * @see #registerItem(String) - */ - public RegiliteItem registerItem(String name, Function func) { - return this.registerItem(name, func, new Item.Properties()); - } - - /** - * Adds a new {@link Item} with the given {@link Item.Properties properties} to the list of entries to be registered and - * returns a {@link DeferredItem} that will be populated with the created item automatically. - * - * @param name The new item's name. It will automatically have the {@linkplain #getNamespace() namespace} prefixed. - * @param props A factory for the new item. The factory should not cache the created item. - * @return A {@link DeferredItem} that will track updates from the registry for this item. - * @see #registerItem(String, Function, Item.Properties) - * @see #registerItem(String, Function) - * @see #registerItem(String) - */ - public RegiliteItem registerItem(String name, Item.Properties props) { - return this.registerItem(name, Item::new, props); - } - - /** - * Adds a new {@link Item} with the default {@link Item.Properties properties} to the list of entries to be registered and - * returns a {@link DeferredItem} that will be populated with the created item automatically. - * - * @param name The new item's name. It will automatically have the {@linkplain #getNamespace() namespace} prefixed. - * @return A {@link DeferredItem} that will track updates from the registry for this item. - * @see #registerItem(String, Function, Item.Properties) - * @see #registerItem(String, Function) - * @see #registerItem(String, Item.Properties) - */ - public RegiliteItem registerItem(String name) { - return this.registerItem(name, Item::new, new Item.Properties()); - } - - @Override - protected RegiliteItem createHolder(ResourceKey> registryKey, ResourceLocation key) { - return RegiliteItem.createItem(ResourceKey.create(registryKey, key), regilite); - } - - public static ItemRegistry create(Regilite regilite) { - return new ItemRegistry(regilite); - } - - @Override - public void register(IEventBus bus) { - super.register(bus); - regilite.addItems(this.getEntries()); - } -} diff --git a/src/main/java/com/enderio/regilite/registry/MenuRegistry.java b/src/main/java/com/enderio/regilite/registry/MenuRegistry.java index 82b6b45..ef1c9ba 100644 --- a/src/main/java/com/enderio/regilite/registry/MenuRegistry.java +++ b/src/main/java/com/enderio/regilite/registry/MenuRegistry.java @@ -29,7 +29,7 @@ public class MenuRegistry extends DeferredRegister> { private final Regilite regilite; protected MenuRegistry(Regilite regilite) { - super(BuiltInRegistries.MENU.key(), regilite.getModId()); + super(BuiltInRegistries.MENU.key(), regilite.modId()); this.regilite = regilite; } diff --git a/src/test/java/com/enderio/regilite/examplemod/Blocks.java b/src/test/java/com/enderio/regilite/examplemod/Blocks.java index 7d34eff..a48d795 100644 --- a/src/test/java/com/enderio/regilite/examplemod/Blocks.java +++ b/src/test/java/com/enderio/regilite/examplemod/Blocks.java @@ -8,17 +8,14 @@ import com.enderio.regilite.blocks.RegiliteBlockLootProvider; import com.enderio.regilite.examplemod.exampleclasses.ExampleBlock; import com.enderio.regilite.examplemod.exampleclasses.ExampleColors; -import com.enderio.regilite.registry.ItemRegistry; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.material.MapColor; -import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredBlock; public class Blocks { - public static final ItemRegistry ITEMS = ExampleMod.getRegilite().itemRegistry(); - public static final DeferredBlock EXAMPLE_BLOCK = ExampleMod.REGILITE.blocks() .create("example_block", ExampleBlock::new, BlockBehaviour.Properties.of().mapColor(MapColor.STONE)) .tags(BlockTags.MUSHROOM_GROW_BLOCK, BlockTags.LOGS) @@ -28,13 +25,12 @@ public class Blocks { .lootTable(RegiliteBlockLootProvider::dropSelf) .createSimpleBlockItem(item -> item .tags(ItemTags.PLANKS) - //.modelProvider((prov, ctx) -> prov.basicItem(ctx.get())) - //.tab(CreativeModeTabs.BUILDING_BLOCKS) - //.tab(CreativeTabs.EXAMPLE_TAB.getKey()) + .modelProvider((prov, ctx) -> prov.basicItem(ctx.get())) + .tab(CreativeModeTabs.BUILDING_BLOCKS) + .tab(CreativeTabs.EXAMPLE_TAB.getKey()) ) .finishHolder(); - public static void register(IEventBus modEventBus) { - ITEMS.register(modEventBus); + public static void register() { } } diff --git a/src/test/java/com/enderio/regilite/examplemod/ExampleMod.java b/src/test/java/com/enderio/regilite/examplemod/ExampleMod.java index 7e51a90..d3a87a7 100644 --- a/src/test/java/com/enderio/regilite/examplemod/ExampleMod.java +++ b/src/test/java/com/enderio/regilite/examplemod/ExampleMod.java @@ -19,8 +19,8 @@ public class ExampleMod { public static final Regilite REGILITE = new Regilite(MODID); public ExampleMod(IEventBus modEventBus) { - Blocks.register(modEventBus); - Items.register(modEventBus); + Blocks.register(); + Items.register(); CreativeTabs.register(modEventBus); Fluids.register(modEventBus); BlockEntities.register(modEventBus); diff --git a/src/test/java/com/enderio/regilite/examplemod/Fluids.java b/src/test/java/com/enderio/regilite/examplemod/Fluids.java index f2783c7..d37c903 100644 --- a/src/test/java/com/enderio/regilite/examplemod/Fluids.java +++ b/src/test/java/com/enderio/regilite/examplemod/Fluids.java @@ -7,7 +7,6 @@ import com.enderio.regilite.holder.RegiliteFluid; import com.enderio.regilite.registry.FluidRegistry; -import com.enderio.regilite.registry.ItemRegistry; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.level.material.Fluid; @@ -18,7 +17,6 @@ public class Fluids { private static final FluidRegistry FLUIDTYPES = ExampleMod.getRegilite().fluidRegistry(); private static final DeferredRegister FLUIDS = DeferredRegister.create(BuiltInRegistries.FLUID.key(), ExampleMod.MODID); - public static final ItemRegistry ITEMS = ExampleMod.getRegilite().itemRegistry(); public static final RegiliteFluid EXAMPLE_FLUID = FLUIDTYPES.registerFluid("example_fluid", FluidType.Properties.create()) .createFluid(FLUIDS) @@ -30,6 +28,5 @@ public class Fluids { public static void register(IEventBus modEventBus) { FLUIDTYPES.register(modEventBus); FLUIDS.register(modEventBus); - ITEMS.register(modEventBus); } } diff --git a/src/test/java/com/enderio/regilite/examplemod/Items.java b/src/test/java/com/enderio/regilite/examplemod/Items.java index 88b751d..1f77a17 100644 --- a/src/test/java/com/enderio/regilite/examplemod/Items.java +++ b/src/test/java/com/enderio/regilite/examplemod/Items.java @@ -6,24 +6,20 @@ package com.enderio.regilite.examplemod; import com.enderio.regilite.examplemod.exampleclasses.ExampleColors; -import com.enderio.regilite.holder.RegiliteItem; -import com.enderio.regilite.registry.ItemRegistry; import net.minecraft.tags.ItemTags; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Item; -import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredItem; public class Items { - public static final ItemRegistry ITEMS = ExampleMod.getRegilite().itemRegistry(); + public static final DeferredItem EXAMPLE_ITEM = ExampleMod.REGILITE.items() + .createSimple("example_item", new Item.Properties().food(new FoodProperties.Builder() + .alwaysEdible().nutrition(1).saturationModifier(2f).build())) + .tags(ItemTags.WOOL) + .translation("Test Example Item") + .itemColor(() -> () -> ExampleColors.ITEM) + .finishHolder(); - public static final RegiliteItem EXAMPLE_ITEM = ITEMS.registerItem("example_item", new Item.Properties().food(new FoodProperties.Builder() - .alwaysEdible().nutrition(1).saturationModifier(2f).build())) - .withTags(ItemTags.WOOL) - .withTranslation("Test Example Item") - .withItemColor(() -> () -> ExampleColors.ITEM) - .withTab(null); - - public static void register(IEventBus modEventBus) { - ITEMS.register(modEventBus); + public static void register() { } }