Added Stalinium items, blocks, tags, models, and data generation
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package net.krituximon.stalinium;
|
package net.krituximon.stalinium;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.block.ModBlocks;
|
||||||
|
import net.krituximon.stalinium.item.ModItems;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import com.mojang.logging.LogUtils;
|
import com.mojang.logging.LogUtils;
|
||||||
@@ -37,7 +39,8 @@ public class Stalinium
|
|||||||
// Register the commonSetup method for modloading
|
// Register the commonSetup method for modloading
|
||||||
modEventBus.addListener(this::commonSetup);
|
modEventBus.addListener(this::commonSetup);
|
||||||
|
|
||||||
// Register the Deferred Register to the mod event bus so blocks get registere
|
ModItems.register(modEventBus);
|
||||||
|
ModBlocks.register(modEventBus);
|
||||||
|
|
||||||
// Register ourselves for server and other game events we are interested in.
|
// Register ourselves for server and other game events we are interested in.
|
||||||
// Note that this is necessary if and only if we want *this* class (Stalinium) to respond directly to events.
|
// Note that this is necessary if and only if we want *this* class (Stalinium) to respond directly to events.
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package net.krituximon.stalinium.block;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.Stalinium;
|
||||||
|
import net.krituximon.stalinium.item.ModItems;
|
||||||
|
import net.minecraft.world.item.BlockItem;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.SoundType;
|
||||||
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
|
import net.neoforged.bus.api.IEventBus;
|
||||||
|
import net.neoforged.neoforge.registries.DeferredBlock;
|
||||||
|
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class ModBlocks {
|
||||||
|
public static final DeferredRegister.Blocks BLOCKS =
|
||||||
|
DeferredRegister.createBlocks(Stalinium.MODID);
|
||||||
|
|
||||||
|
public static final DeferredBlock<Block> STALINIUM_BLOCK = registerBlock("stalinium_block",
|
||||||
|
() -> new Block(BlockBehaviour.Properties.of()
|
||||||
|
.strength(5f).requiresCorrectToolForDrops().sound(SoundType.NETHERITE_BLOCK)));
|
||||||
|
|
||||||
|
|
||||||
|
private static <T extends Block> DeferredBlock<T> registerBlock(String name, Supplier<T> block) {
|
||||||
|
DeferredBlock<T> toReturn = BLOCKS.register(name, block);
|
||||||
|
registerBlockItem(name, toReturn);
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T extends Block> void registerBlockItem(String name, DeferredBlock<T> block) {
|
||||||
|
ModItems.ITEMS.register(name, () -> new BlockItem(block.get(), new Item.Properties()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void register(IEventBus eventBus) {
|
||||||
|
BLOCKS.register(eventBus);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package net.krituximon.stalinium.datagen;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.Stalinium;
|
||||||
|
import net.minecraft.core.HolderLookup;
|
||||||
|
import net.minecraft.data.DataGenerator;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.data.loot.LootTableProvider;
|
||||||
|
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
|
||||||
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
|
import net.neoforged.fml.common.EventBusSubscriber;
|
||||||
|
import net.neoforged.neoforge.common.data.BlockTagsProvider;
|
||||||
|
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||||
|
import net.neoforged.neoforge.data.event.GatherDataEvent;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
@EventBusSubscriber(modid = Stalinium.MODID, bus = EventBusSubscriber.Bus.MOD)
|
||||||
|
public class DataGenerators {
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void gatherData(GatherDataEvent event) {
|
||||||
|
DataGenerator generator = event.getGenerator();
|
||||||
|
PackOutput packOutput = generator.getPackOutput();
|
||||||
|
ExistingFileHelper existingFileHelper = event.getExistingFileHelper();
|
||||||
|
CompletableFuture<HolderLookup.Provider> lookupProvider = event.getLookupProvider();
|
||||||
|
|
||||||
|
generator.addProvider(event.includeServer(), new LootTableProvider(packOutput, Collections.emptySet(),
|
||||||
|
List.of(new LootTableProvider.SubProviderEntry(ModBlockLootTableProvider::new, LootContextParamSets.BLOCK)), lookupProvider));
|
||||||
|
generator.addProvider(event.includeServer(), new ModRecipeProvider(packOutput, lookupProvider));
|
||||||
|
|
||||||
|
BlockTagsProvider blockTagsProvider = new ModBlockTagProvider(packOutput, lookupProvider, existingFileHelper);
|
||||||
|
generator.addProvider(event.includeServer(), blockTagsProvider);
|
||||||
|
generator.addProvider(event.includeServer(), new ModItemTagProvider(packOutput, lookupProvider, blockTagsProvider.contentsGetter(), existingFileHelper));
|
||||||
|
|
||||||
|
|
||||||
|
generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper));
|
||||||
|
generator.addProvider(event.includeClient(), new ModBlockStateProvider(packOutput, existingFileHelper));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package net.krituximon.stalinium.datagen;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.block.ModBlocks;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.core.HolderLookup;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
|
import net.minecraft.data.loot.BlockLootSubProvider;
|
||||||
|
import net.minecraft.world.flag.FeatureFlags;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.item.enchantment.Enchantment;
|
||||||
|
import net.minecraft.world.item.enchantment.Enchantments;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.storage.loot.LootTable;
|
||||||
|
import net.minecraft.world.level.storage.loot.entries.LootItem;
|
||||||
|
import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount;
|
||||||
|
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
|
||||||
|
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class ModBlockLootTableProvider extends BlockLootSubProvider {
|
||||||
|
protected ModBlockLootTableProvider(HolderLookup.Provider registries) {
|
||||||
|
super(Set.of(), FeatureFlags.REGISTRY.allFlags(), registries);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void generate() {
|
||||||
|
dropSelf(ModBlocks.STALINIUM_BLOCK.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LootTable.Builder createMultipleOreDrops(Block pBlock, Item item, float minDrops, float maxDrops) {
|
||||||
|
HolderLookup.RegistryLookup<Enchantment> registrylookup = this.registries.lookupOrThrow(Registries.ENCHANTMENT);
|
||||||
|
return this.createSilkTouchDispatchTable(pBlock,
|
||||||
|
this.applyExplosionDecay(pBlock, LootItem.lootTableItem(item)
|
||||||
|
.apply(SetItemCountFunction.setCount(UniformGenerator.between(minDrops, maxDrops)))
|
||||||
|
.apply(ApplyBonusCount.addOreBonusCount(registrylookup.getOrThrow(Enchantments.FORTUNE)))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Iterable<Block> getKnownBlocks() {
|
||||||
|
return ModBlocks.BLOCKS.getEntries().stream().map(Holder::value)::iterator;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package net.krituximon.stalinium.datagen;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.block.ModBlocks;
|
||||||
|
import net.krituximon.stalinium.Stalinium;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.neoforged.neoforge.client.model.generators.BlockStateProvider;
|
||||||
|
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||||
|
import net.neoforged.neoforge.registries.DeferredBlock;
|
||||||
|
|
||||||
|
public class ModBlockStateProvider extends BlockStateProvider {
|
||||||
|
public ModBlockStateProvider(PackOutput output, ExistingFileHelper exFileHelper) {
|
||||||
|
super(output, Stalinium.MODID, exFileHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerStatesAndModels() {
|
||||||
|
blockWithItem(ModBlocks.STALINIUM_BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void blockWithItem(DeferredBlock<?> deferredBlock) {
|
||||||
|
simpleBlockWithItem(deferredBlock.get(), cubeAll(deferredBlock.get()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package net.krituximon.stalinium.datagen;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.block.ModBlocks;
|
||||||
|
import net.krituximon.stalinium.util.ModTags;
|
||||||
|
import net.krituximon.stalinium.Stalinium;
|
||||||
|
import net.minecraft.core.HolderLookup;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.tags.BlockTags;
|
||||||
|
import net.neoforged.neoforge.common.Tags;
|
||||||
|
import net.neoforged.neoforge.common.data.BlockTagsProvider;
|
||||||
|
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class ModBlockTagProvider extends BlockTagsProvider {
|
||||||
|
public ModBlockTagProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, @Nullable ExistingFileHelper existingFileHelper) {
|
||||||
|
super(output, lookupProvider, Stalinium.MODID, existingFileHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addTags(HolderLookup.Provider provider) {
|
||||||
|
tag(Tags.Blocks.STORAGE_BLOCKS)
|
||||||
|
.add(ModBlocks.STALINIUM_BLOCK.get());
|
||||||
|
|
||||||
|
tag(BlockTags.MINEABLE_WITH_PICKAXE)
|
||||||
|
.add(ModBlocks.STALINIUM_BLOCK.get());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package net.krituximon.stalinium.datagen;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.item.ModItems;
|
||||||
|
import net.krituximon.stalinium.Stalinium;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.neoforged.neoforge.client.model.generators.ItemModelProvider;
|
||||||
|
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||||
|
|
||||||
|
public class ModItemModelProvider extends ItemModelProvider {
|
||||||
|
public ModItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) {
|
||||||
|
super(output, Stalinium.MODID, existingFileHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerModels() {
|
||||||
|
basicItem(ModItems.STALINIUM_INGOT.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package net.krituximon.stalinium.datagen;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.item.ModItems;
|
||||||
|
import net.krituximon.stalinium.Stalinium;
|
||||||
|
import net.minecraft.core.HolderLookup;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.data.tags.ItemTagsProvider;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.neoforged.neoforge.common.Tags;
|
||||||
|
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class ModItemTagProvider extends ItemTagsProvider {
|
||||||
|
|
||||||
|
public ModItemTagProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, CompletableFuture<TagLookup<Block>> blockTags, @Nullable ExistingFileHelper existingFileHelper) {
|
||||||
|
super(output, lookupProvider, blockTags, Stalinium.MODID, existingFileHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add your tag entries here.
|
||||||
|
@Override
|
||||||
|
protected void addTags(HolderLookup.Provider lookupProvider) {
|
||||||
|
this.tag(Tags.Items.INGOTS)
|
||||||
|
.add(ModItems.STALINIUM_INGOT.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package net.krituximon.stalinium.datagen;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.block.ModBlocks;
|
||||||
|
import net.krituximon.stalinium.item.ModItems;
|
||||||
|
import net.minecraft.core.HolderLookup;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.data.recipes.*;
|
||||||
|
import net.neoforged.neoforge.common.conditions.IConditionBuilder;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class ModRecipeProvider extends RecipeProvider implements IConditionBuilder {
|
||||||
|
public ModRecipeProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> registries) {
|
||||||
|
super(output, registries);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void buildRecipes(RecipeOutput recipeOutput) {
|
||||||
|
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.STALINIUM_BLOCK.get())
|
||||||
|
.pattern("BBB")
|
||||||
|
.pattern("BBB")
|
||||||
|
.pattern("BBB")
|
||||||
|
.define('B', ModItems.STALINIUM_INGOT.get())
|
||||||
|
.unlockedBy("has_stalinium", has(ModItems.STALINIUM_INGOT)).save(recipeOutput);
|
||||||
|
|
||||||
|
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.STALINIUM_INGOT.get(), 9)
|
||||||
|
.requires(ModBlocks.STALINIUM_BLOCK)
|
||||||
|
.unlockedBy("has_stalinium_block", has(ModBlocks.STALINIUM_BLOCK)).save(recipeOutput);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package net.krituximon.stalinium.item;
|
||||||
|
|
||||||
|
import net.krituximon.stalinium.Stalinium;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.neoforged.bus.api.IEventBus;
|
||||||
|
import net.neoforged.neoforge.registries.DeferredItem;
|
||||||
|
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||||
|
|
||||||
|
public class ModItems {
|
||||||
|
public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Stalinium.MODID);
|
||||||
|
|
||||||
|
public static final DeferredItem<Item> STALINIUM_INGOT = ITEMS.register("stalinium_ingot",
|
||||||
|
() -> new Item(new Item.Properties()));
|
||||||
|
|
||||||
|
|
||||||
|
public static void register(IEventBus eventBus) {
|
||||||
|
ITEMS.register(eventBus);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package net.krituximon.stalinium.util;
|
||||||
|
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.tags.BlockTags;
|
||||||
|
import net.minecraft.tags.ItemTags;
|
||||||
|
import net.minecraft.tags.TagKey;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
|
||||||
|
public class ModTags {
|
||||||
|
public static class Blocks {
|
||||||
|
private static TagKey<Block> commonTag(String name) {
|
||||||
|
return BlockTags.create(ResourceLocation.fromNamespaceAndPath("c", name));
|
||||||
|
}
|
||||||
|
public static final TagKey<Block> STALINIUM = commonTag("storage_blocks/stalinium");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Items {
|
||||||
|
private static TagKey<Item> commonTag(String name) {
|
||||||
|
return ItemTags.create(ResourceLocation.fromNamespaceAndPath("c", name));
|
||||||
|
}
|
||||||
|
public static final TagKey<Item> STALINIUM = commonTag("ingots/stalinium");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"itemGroup.stalinium": "Example Mod Tab",
|
"item.stalinium.uranium_ingot": "Stalinium Ingot",
|
||||||
"block.stalinium.example_block": "Example Block",
|
|
||||||
"item.stalinium.example_item": "Example Item"
|
"block.stalinium.uranium_block": "Block of Stalinium"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user