From 79042abec9b8ce1e313e7b4c2162c08604b7f7b2 Mon Sep 17 00:00:00 2001 From: remplerus Date: Sun, 11 May 2025 18:05:40 +0200 Subject: [PATCH 1/4] - add custom block support (Start 1/xx) --- .../api/AbstractCrucible.java | 28 +++ .../api/AbstractItemLike.java | 52 +++++ .../exnihiloadditions/api/DefaultItems.java | 4 + .../exnihiloadditions/api/EXABlocks.java | 14 ++ .../exnihiloadditions/api/EXAItems.java | 18 ++ .../exnihiloadditions/api/EXAJsonParser.java | 192 ++++++++++++++++++ .../exnihiloadditions/api/EXARegistry.java | 105 ++++++++++ 7 files changed, 413 insertions(+) create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/AbstractItemLike.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/EXABlocks.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/EXARegistry.java diff --git a/src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java b/src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java new file mode 100644 index 0000000..bd9eb60 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java @@ -0,0 +1,28 @@ +package com.rempler.exnihiloadditions.api; + +import net.minecraft.world.level.block.SoundType; +import org.jetbrains.annotations.Nullable; + +public abstract class AbstractCrucible extends AbstractItemLike { + public AbstractCrucible(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId) { + super(soundType, strength, requiresCorrectTool, requiredModId); + } + + @Nullable + public static T readFromJson(EXAJsonParser parser, Factory factory) { + SoundType soundtype = parser.getSoundType(); + float strength = parser.getStrength(); + boolean requiresCorrectTool = parser.getOptionalBoolean("required_correct_tool"); + String requiredModId = parser.getRequiredModID(); + + if (parser.error) { + return null; + } else { + return factory.create(soundtype, strength, requiresCorrectTool, requiredModId); + } + } + + public interface Factory { + T create(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/AbstractItemLike.java b/src/main/java/com/rempler/exnihiloadditions/api/AbstractItemLike.java new file mode 100644 index 0000000..5314e3d --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/AbstractItemLike.java @@ -0,0 +1,52 @@ +package com.rempler.exnihiloadditions.api; + +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import novamachina.novacore.world.item.ItemDefinition; +import novamachina.novacore.world.level.block.BlockDefinition; + +public abstract class AbstractItemLike implements ItemLike { + public final SoundType soundType; + public final float strength; + public final boolean requiresCorrectTool; + public final String requiredModId; + + ItemDefinition item; + BlockDefinition block; + + public AbstractItemLike(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId) { + this.soundType = soundType; + this.strength = strength; + this.requiresCorrectTool = requiresCorrectTool; + this.requiredModId = requiredModId; + } + + protected abstract Block createBlock(); + + protected BlockItem createBlockItem(Block block) { + return new BlockItem(block, new BlockItem.Properties()); + } + + protected BlockBehaviour.Properties properties() { + BlockBehaviour.Properties props = BlockBehaviour.Properties.of().sound(this.soundType).strength(this.strength); + if (this.requiresCorrectTool) props.requiresCorrectToolForDrops(); + return props; + } + + public Item getItem() { + return this.item.asItem(); + } + + public Block getBlock() { + return this.block.block(); + } + + @Override + public Item asItem() { + return getItem(); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java new file mode 100644 index 0000000..237e305 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java @@ -0,0 +1,4 @@ +package com.rempler.exnihiloadditions.api; + +public class DefaultItems { +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXABlocks.java b/src/main/java/com/rempler/exnihiloadditions/api/EXABlocks.java new file mode 100644 index 0000000..1ce3f3f --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/EXABlocks.java @@ -0,0 +1,14 @@ +package com.rempler.exnihiloadditions.api; + +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import net.minecraft.world.level.block.Block; +import novamachina.novacore.core.registries.BlockRegistry; +import novamachina.novacore.world.level.block.BlockDefinition; + +public class EXABlocks { + public static final BlockRegistry BLOCKS = new BlockRegistry(ExNihiloAdditions.MODID); + + public static BlockDefinition register(String id, Block block) { + return null; + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java b/src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java new file mode 100644 index 0000000..c5f4c9a --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java @@ -0,0 +1,18 @@ +package com.rempler.exnihiloadditions.api; + +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import net.minecraft.world.item.Item; +import novamachina.novacore.core.registries.ItemRegistry; +import novamachina.novacore.world.item.ItemDefinition; + +public class EXAItems { + public static final ItemRegistry ITEMS = new ItemRegistry(ExNihiloAdditions.MODID); + + public static ItemDefinition register(String id, Item item) { + return ITEMS.register(id, item); + } + + public static ItemDefinition register(String id, Item item, String requiredModId) { + return ITEMS.register(id, item, requiredModId); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java b/src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java new file mode 100644 index 0000000..103aacb --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java @@ -0,0 +1,192 @@ +package com.rempler.exnihiloadditions.api; + +import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import net.minecraft.world.level.block.SoundType; + +import java.nio.file.Path; +import java.util.Map; + +public class EXAJsonParser { + private final JsonObject json; + private final Path jsonPath; + + private final EXARegistry registry; + boolean error; + + public EXAJsonParser(JsonObject json, Path jsonPath, EXARegistry registry) { + this.json = json; + this.jsonPath = jsonPath; + this.registry = registry; + } + + public SoundType getSoundType() { + if (json.has("sound_type")) { + String soundTypeName = json.get("sound_type").getAsString(); + SoundType soundType = SoundTypeResolver.VANILLA_SOUND_TYPES.get(soundTypeName); + if (soundType == null) { + error = true; + ExNihiloAdditions.LOGGER.error("Invalid sound type: \"{}\" for item {}", soundTypeName, jsonPath); + } else { + return soundType; + } + } else { + ExNihiloAdditions.LOGGER.error("Missing sound type for item {}", jsonPath); + error = true; + return SoundType.WOOD; // Default value + } + return SoundType.WOOD; // Default value + } + + public float getStrength() { + if (json.has("strength")) { + try { + return json.get("strength").getAsFloat(); + } catch (NumberFormatException e) { + ExNihiloAdditions.LOGGER.error("Failed to add strength value for item {} with {}", jsonPath, json.get("strength").getAsString()); + error = true; + } + } else { + if (this.registry == DefaultItems.SIEVES) { + return 2.0F; // Default value for sieves + } + ExNihiloAdditions.LOGGER.error("Missing strength for item {}. Defaulting to 0F", jsonPath); + error = true; + } + return 0F; // Default value + } + + public boolean getOptionalBoolean(String key) { + return json.get(key) instanceof JsonPrimitive primitive && primitive.isBoolean() && primitive.getAsBoolean(); + } + + public String getRequiredModID() { + if (json.has("required_mod_id")) { + String modId = json.get("required_mod_id").getAsString(); + if (modId.isEmpty()) { + ExNihiloAdditions.LOGGER.error("Empty required mod ID for item {}", jsonPath); + error = true; + } + return modId; + } else { + ExNihiloAdditions.LOGGER.error("Missing required mod ID for item {}", jsonPath); + error = true; + return ExNihiloAdditions.MODID; // Default value + } + } + + static class SoundTypeResolver { + static final Map VANILLA_SOUND_TYPES; + + static { + ImmutableMap.Builder temp = ImmutableMap.builder(); + temp.put("empty", SoundType.EMPTY); + temp.put("wood", SoundType.WOOD); + temp.put("gravel", SoundType.GRAVEL); + temp.put("grass", SoundType.GRASS); + temp.put("lily_pad", SoundType.LILY_PAD); + temp.put("stone", SoundType.STONE); + temp.put("metal", SoundType.METAL); + temp.put("glass", SoundType.GLASS); + temp.put("wool", SoundType.WOOL); + temp.put("sand", SoundType.SAND); + temp.put("snow", SoundType.SNOW); + temp.put("powder_snow", SoundType.POWDER_SNOW); + temp.put("ladder", SoundType.LADDER); + temp.put("anvil", SoundType.ANVIL); + temp.put("slime_block", SoundType.SLIME_BLOCK); + temp.put("honey_block", SoundType.HONEY_BLOCK); + temp.put("wet_grass", SoundType.WET_GRASS); + temp.put("coral_block", SoundType.CORAL_BLOCK); + temp.put("bamboo", SoundType.BAMBOO); + temp.put("bamboo_sapling", SoundType.BAMBOO_SAPLING); + temp.put("scaffolding", SoundType.SCAFFOLDING); + temp.put("sweet_berry_bush", SoundType.SWEET_BERRY_BUSH); + temp.put("crop", SoundType.CROP); + temp.put("hard_crop", SoundType.HARD_CROP); + temp.put("vine", SoundType.VINE); + temp.put("nether_wart", SoundType.NETHER_WART); + temp.put("lantern", SoundType.LANTERN); + temp.put("stem", SoundType.STEM); + temp.put("nylium", SoundType.NYLIUM); + temp.put("fungus", SoundType.FUNGUS); + temp.put("roots", SoundType.ROOTS); + temp.put("shroomlight", SoundType.SHROOMLIGHT); + temp.put("weeping_vines", SoundType.WEEPING_VINES); + temp.put("twisting_vines", SoundType.TWISTING_VINES); + temp.put("soul_sand", SoundType.SOUL_SAND); + temp.put("soul_soil", SoundType.SOUL_SOIL); + temp.put("basalt", SoundType.BASALT); + temp.put("wart_block", SoundType.WART_BLOCK); + temp.put("netherrack", SoundType.NETHERRACK); + temp.put("nether_bricks", SoundType.NETHER_BRICKS); + temp.put("nether_sprouts", SoundType.NETHER_SPROUTS); + temp.put("nether_ore", SoundType.NETHER_ORE); + temp.put("bone_block", SoundType.BONE_BLOCK); + temp.put("netherite_block", SoundType.NETHERITE_BLOCK); + temp.put("ancient_debris", SoundType.ANCIENT_DEBRIS); + temp.put("lodestone", SoundType.LODESTONE); + temp.put("chain", SoundType.CHAIN); + temp.put("nether_gold_ore", SoundType.NETHER_GOLD_ORE); + temp.put("gilded_blackstone", SoundType.GILDED_BLACKSTONE); + temp.put("candle", SoundType.CANDLE); + temp.put("amethyst", SoundType.AMETHYST); + temp.put("amethyst_cluster", SoundType.AMETHYST_CLUSTER); + temp.put("small_amethyst_bud", SoundType.SMALL_AMETHYST_BUD); + temp.put("medium_amethyst_bud", SoundType.MEDIUM_AMETHYST_BUD); + temp.put("large_amethyst_bud", SoundType.LARGE_AMETHYST_BUD); + temp.put("tuff", SoundType.TUFF); + temp.put("calcite", SoundType.CALCITE); + temp.put("dripstone_block", SoundType.DRIPSTONE_BLOCK); + temp.put("pointed_dripstone", SoundType.POINTED_DRIPSTONE); + temp.put("copper", SoundType.COPPER); + temp.put("cave_vines", SoundType.CAVE_VINES); + temp.put("spore_blossom", SoundType.SPORE_BLOSSOM); + temp.put("azalea", SoundType.AZALEA); + temp.put("flowering_azalea", SoundType.FLOWERING_AZALEA); + temp.put("moss_carpet", SoundType.MOSS_CARPET); + temp.put("pink_petals", SoundType.PINK_PETALS); + temp.put("moss", SoundType.MOSS); + temp.put("big_dripleaf", SoundType.BIG_DRIPLEAF); + temp.put("small_dripleaf", SoundType.SMALL_DRIPLEAF); + temp.put("rooted_dirt", SoundType.ROOTED_DIRT); + temp.put("hanging_roots", SoundType.HANGING_ROOTS); + temp.put("azalea_leaves", SoundType.AZALEA_LEAVES); + temp.put("sculk_sensor", SoundType.SCULK_SENSOR); + temp.put("sculk_catalyst", SoundType.SCULK_CATALYST); + temp.put("sculk", SoundType.SCULK); + temp.put("sculk_vein", SoundType.SCULK_VEIN); + temp.put("sculk_shrieker", SoundType.SCULK_SHRIEKER); + temp.put("glow_lichen", SoundType.GLOW_LICHEN); + temp.put("deepslate", SoundType.DEEPSLATE); + temp.put("deepslate_bricks", SoundType.DEEPSLATE_BRICKS); + temp.put("deepslate_tiles", SoundType.DEEPSLATE_TILES); + temp.put("polished_deepslate", SoundType.POLISHED_DEEPSLATE); + temp.put("froglight", SoundType.FROGLIGHT); + temp.put("frogspawn", SoundType.FROGSPAWN); + temp.put("mangrove_roots", SoundType.MANGROVE_ROOTS); + temp.put("muddy_mangrove_roots", SoundType.MUDDY_MANGROVE_ROOTS); + temp.put("mud", SoundType.MUD); + temp.put("mud_bricks", SoundType.MUD_BRICKS); + temp.put("packed_mud", SoundType.PACKED_MUD); + temp.put("hanging_sign", SoundType.HANGING_SIGN); + temp.put("nether_wood_hanging_sign", SoundType.NETHER_WOOD_HANGING_SIGN); + temp.put("bamboo_wood_hanging_sign", SoundType.BAMBOO_WOOD_HANGING_SIGN); + temp.put("bamboo_wood", SoundType.BAMBOO_WOOD); + temp.put("nether_wood", SoundType.NETHER_WOOD); + temp.put("cherry_wood", SoundType.CHERRY_WOOD); + temp.put("cherry_sapling", SoundType.CHERRY_SAPLING); + temp.put("cherry_leaves", SoundType.CHERRY_LEAVES); + temp.put("cherry_wood_hanging_sign", SoundType.CHERRY_WOOD_HANGING_SIGN); + temp.put("chiseled_bookshelf", SoundType.CHISELED_BOOKSHELF); + temp.put("suspicious_sand", SoundType.SUSPICIOUS_SAND); + temp.put("suspicious_gravel", SoundType.SUSPICIOUS_GRAVEL); + temp.put("decorated_pot", SoundType.DECORATED_POT); + temp.put("decorated_pot_cracked", SoundType.DECORATED_POT_CRACKED); + + VANILLA_SOUND_TYPES = temp.build(); + } + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXARegistry.java b/src/main/java/com/rempler/exnihiloadditions/api/EXARegistry.java new file mode 100644 index 0000000..1fbc881 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/EXARegistry.java @@ -0,0 +1,105 @@ +package com.rempler.exnihiloadditions.api; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.data.loading.DatagenModLoader; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Stream; + +public class EXARegistry implements Iterable { + private final List values = new ArrayList<>(); + private final String configFolder; + private final String suffix; + + public EXARegistry(String configFolder) { + this(configFolder, configFolder); + } + + public EXARegistry(String configFolder, String suffix) { + this.configFolder = configFolder; + this.suffix = suffix; + + Preconditions.checkArgument(!suffix.startsWith("_")); + } + + public void search(Function registrar) { + Path configPath = Paths.get("config/"+ ExNihiloAdditions.MODID + "/"+configFolder+"/marerials"); + + if (!DatagenModLoader.isRunningDataGen()) { + if (createConfigFolder(configPath)) { + File configFile = configPath.toFile(); + String[] files = configFile.list(); + if (files != null) { + for (String file : files) { + if (file.endsWith(".json")) { + Path path = configPath.resolve(file); + try { + JsonObject json = (JsonObject) JsonParser.parseString(Files.readString(path)); + I parser = registrar.apply(new EXAJsonParser(json, path, this)); + if (parser != null) { + register(file.substring(0, file.length() - 5), parser); + } + } catch (IOException e) { + ExNihiloAdditions.LOGGER.error("Failed to read file: {}", path); + } + } + } + } else { + ExNihiloAdditions.LOGGER.error("Failed to list files in directory: {}", configPath); + } + } + } + } + + public void register(String name, I item) { + String id = name + "_" + suffix; + + if (item.block != null) { + throw new IllegalStateException(configFolder + "item with name " + name + " already registered: duplicate item"); + } + + item.block = EXABlocks.register(id, item.createBlock()); + item.item = EXAItems.register(id, () -> item.createBlockItem(item.block.block())); + values.add(item); + } + + public BlockEntityType createBlockEntityType(BlockEntityType.BlockEntitySupplier factory) { + ImmutableSet.Builder validBlocks = ImmutableSet.builder(); + + for (I item : values) { + validBlocks.add(item.block.block()); + } + + return new BlockEntityType<>(factory, validBlocks.build(), null); + } + + @Override + public @NotNull Iterator iterator() { + return values.iterator(); + } + + public Stream stream() { + return values.stream(); + } + + private boolean createConfigFolder(Path path) { + File configFolder = path.getParent().toFile(); + return (configFolder.exists() || configFolder.mkdirs()) && configFolder.isDirectory(); + } +} From bd45466203da1ba8f5235f1f6659cb1c19a7ea9c Mon Sep 17 00:00:00 2001 From: remplerus Date: Mon, 26 May 2025 00:15:13 +0200 Subject: [PATCH 2/4] First check, need to register blocks etc tho --- .gitignore | 1 + .../EXNACreativeModeTabs.java | 2 +- .../exnihiloadditions/ExNihiloAdditions.java | 36 ++++- .../api/AbstractCrucible.java | 28 ---- .../exnihiloadditions/api/DefaultItems.java | 145 ++++++++++++++++++ .../exnihiloadditions/api/EXAItems.java | 18 --- .../exnihiloadditions/api/EXAJsonParser.java | 9 +- .../blocks/AbstractFiredCrucibleBlock.java | 36 +++++ .../api/blocks/AbstractSieveBlock.java | 23 +++ .../api/blocks/AbstractStoneBarrelBlock.java | 32 ++++ .../api/blocks/AbstractWoodBarrelBlock.java | 32 ++++ .../api/blocks/AbstractWoodCrucibleBlock.java | 36 +++++ .../AbstractFiredCrucibleBlockEntity.java | 12 ++ .../entities/AbstractSieveBlockEntity.java | 12 ++ .../AbstractStoneBarrelBlockEntity.java | 12 ++ .../AbstractWoodBarrelBlockEntity.java | 12 ++ .../AbstractWoodCrucibleBlockEntity.java | 12 ++ .../api/registries/AbstractBarrels.java | 49 ++++++ .../api/registries/AbstractCrucibles.java | 48 ++++++ .../{ => registries}/AbstractItemLike.java | 2 +- .../api/registries/AbstractSieves.java | 40 +++++ .../api/{ => registries}/EXARegistry.java | 13 +- .../barrels/AbstractStoneBarrels.java | 18 +++ .../barrels/AbstractWoodBarrels.java | 17 ++ .../crucibles/AbstractFiredCrucibles.java | 17 ++ .../crucibles/AbstractWoodCrucibles.java | 17 ++ .../compat/tfc/EXNATFCBlockEntites.java | 2 +- .../compat/tfc/EXNATFCBlocks.java | 2 +- .../compat/tfc/EXNATFCItems.java | 2 +- .../compat/tfc/client/EXNATFCClientSetup.java | 2 +- .../data/EXNALangProvider.java | 4 +- .../data/EXNCBlockStateGenerator.java | 2 +- .../data/recipe/EXNARecipeGenerator.java | 2 +- .../data/recipe/tfc/EXNATFCRecipes.java | 2 +- .../data/tags/EXNCTagProvider.java | 2 +- .../registers/EXABlockEntities.java | 43 ++++++ .../{api => registers}/EXABlocks.java | 11 +- .../exnihiloadditions/registers/EXAItems.java | 15 ++ 38 files changed, 694 insertions(+), 74 deletions(-) delete mode 100644 src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java delete mode 100644 src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractBarrels.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractCrucibles.java rename src/main/java/com/rempler/exnihiloadditions/api/{ => registries}/AbstractItemLike.java (96%) create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractSieves.java rename src/main/java/com/rempler/exnihiloadditions/api/{ => registries}/EXARegistry.java (84%) create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractStoneBarrels.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractWoodBarrels.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractFiredCrucibles.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractWoodCrucibles.java create mode 100644 src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java rename src/main/java/com/rempler/exnihiloadditions/{api => registers}/EXABlocks.java (57%) create mode 100644 src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java diff --git a/.gitignore b/.gitignore index 3d5e1d3..dae5581 100644 --- a/.gitignore +++ b/.gitignore @@ -119,3 +119,4 @@ run-data/ !gradle-wrapper.jar /libs/ /src/generated/resources/.cache/ +.env diff --git a/src/main/java/com/rempler/exnihiloadditions/EXNACreativeModeTabs.java b/src/main/java/com/rempler/exnihiloadditions/EXNACreativeModeTabs.java index ba63258..13120c5 100644 --- a/src/main/java/com/rempler/exnihiloadditions/EXNACreativeModeTabs.java +++ b/src/main/java/com/rempler/exnihiloadditions/EXNACreativeModeTabs.java @@ -15,7 +15,7 @@ public class EXNACreativeModeTabs { - private static final CreativeModeTabRegistry CREATIVE_MODE_TABS = new CreativeModeTabRegistry(ExNihiloAdditions.MODID); + private static final CreativeModeTabRegistry CREATIVE_MODE_TABS = new CreativeModeTabRegistry(ExNihiloAdditions.ModIds.MODID); public static List getDefinitions() { return CREATIVE_MODE_TABS.getRegistry(); diff --git a/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java b/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java index beaed38..49d7d1a 100644 --- a/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java +++ b/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java @@ -1,10 +1,14 @@ package com.rempler.exnihiloadditions; +import com.rempler.exnihiloadditions.api.DefaultItems; import com.rempler.exnihiloadditions.compat.emi.client.EXAEMIClientSetup; import com.rempler.exnihiloadditions.compat.tfc.EXNATFCBlockEntites; import com.rempler.exnihiloadditions.compat.tfc.EXNATFCBlocks; import com.rempler.exnihiloadditions.compat.tfc.EXNATFCItems; import com.rempler.exnihiloadditions.compat.tfc.client.EXNATFCClientSetup; +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import com.rempler.exnihiloadditions.registers.EXABlocks; +import com.rempler.exnihiloadditions.registers.EXAItems; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.eventbus.api.IEventBus; @@ -23,18 +27,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Mod(ExNihiloAdditions.MODID) +@Mod(ExNihiloAdditions.ModIds.MODID) public class ExNihiloAdditions { public static final Logger LOGGER = LoggerFactory.getLogger("ExNihiloAdditions"); - public static final String MODID = "exnihiloadditions"; - public static boolean isTFCLoaded = ModList.get().isLoaded("tfc"); - public static boolean isEMILoaded = ModList.get().isLoaded("emi"); + public static boolean isTFCLoaded = ModList.get().isLoaded(ModIds.TFC); + public static boolean isEMILoaded = ModList.get().isLoaded(ModIds.EMI); public static ResourceLocation rl(String path) { - return new ResourceLocation(MODID, path); + return new ResourceLocation(ModIds.MODID, path); } public ExNihiloAdditions() { + DefaultItems.registerItems(); IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); if (isTFCLoaded) { LOGGER.info("TFC is loaded, registering TFC compat"); @@ -55,6 +59,9 @@ public ExNihiloAdditions() { registry.register(definition); } } + for (BlockDefinition definition : EXABlocks.getDefinitions()) { + registry.register(definition); + } } if (event.getRegistryKey().equals(BuiltInRegistries.BLOCK_ENTITY_TYPE.key())) { ForgeBlockEntityTypeRegistry registry = new ForgeBlockEntityTypeRegistry(); @@ -63,6 +70,9 @@ public ExNihiloAdditions() { registry.register(definition); } } + for (BlockEntityTypeDefinition definition : EXABlockEntities.getDefinitions()) { + registry.register(definition); + } } if (event.getRegistryKey().equals(BuiltInRegistries.ITEM.key())) { ForgeItemRegistry registry = new ForgeItemRegistry(); @@ -74,6 +84,12 @@ public ExNihiloAdditions() { registry.register(definition); } } + for (BlockDefinition definition : EXABlocks.getDefinitions()) { + registry.register(definition); + } + for (ItemDefinition definition : EXAItems.getDefinitions()) { + registry.register(definition); + } } if (event.getRegistryKey().equals(BuiltInRegistries.CREATIVE_MODE_TAB.key())) { ForgeCreativeModeTabRegistry registry = new ForgeCreativeModeTabRegistry(); @@ -83,4 +99,14 @@ public ExNihiloAdditions() { } }); } + + public static class ModIds { + public static final String MODID = "exnihiloadditions"; + public static final String TFC = "tfc"; + public static final String EMI = "emi"; + public static final String BIOMES_O_PLENTY = "biomesoplenty"; + public static final String ARS_NOUVEAU = "ars_nouveau"; + public static final String BLUE_SKIES = "blueskies"; + public static final String AETHER = "aether"; + } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java b/src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java deleted file mode 100644 index bd9eb60..0000000 --- a/src/main/java/com/rempler/exnihiloadditions/api/AbstractCrucible.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.rempler.exnihiloadditions.api; - -import net.minecraft.world.level.block.SoundType; -import org.jetbrains.annotations.Nullable; - -public abstract class AbstractCrucible extends AbstractItemLike { - public AbstractCrucible(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId) { - super(soundType, strength, requiresCorrectTool, requiredModId); - } - - @Nullable - public static T readFromJson(EXAJsonParser parser, Factory factory) { - SoundType soundtype = parser.getSoundType(); - float strength = parser.getStrength(); - boolean requiresCorrectTool = parser.getOptionalBoolean("required_correct_tool"); - String requiredModId = parser.getRequiredModID(); - - if (parser.error) { - return null; - } else { - return factory.create(soundtype, strength, requiresCorrectTool, requiredModId); - } - } - - public interface Factory { - T create(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId); - } -} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java index 237e305..6576d03 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java @@ -1,4 +1,149 @@ package com.rempler.exnihiloadditions.api; +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import com.rempler.exnihiloadditions.api.registries.AbstractBarrels; +import com.rempler.exnihiloadditions.api.registries.AbstractCrucibles; +import com.rempler.exnihiloadditions.api.registries.barrels.AbstractStoneBarrels; +import com.rempler.exnihiloadditions.api.registries.barrels.AbstractWoodBarrels; +import com.rempler.exnihiloadditions.api.registries.crucibles.AbstractFiredCrucibles; +import com.rempler.exnihiloadditions.api.registries.AbstractSieves; +import com.rempler.exnihiloadditions.api.registries.crucibles.AbstractWoodCrucibles; +import com.rempler.exnihiloadditions.api.registries.EXARegistry; +import net.minecraft.world.level.block.SoundType; + +@SuppressWarnings("unused") public class DefaultItems { + public static final EXARegistry CRUCIBLES = new EXARegistry<>("crucibles", "water"); + public static final EXARegistry FIRED_CRUCIBLES = new EXARegistry<>("crucibles", "fired"); + public static final EXARegistry SIEVES = new EXARegistry<>("sieves"); + public static final EXARegistry BARRELS = new EXARegistry<>("barrels"); + public static final EXARegistry STONE_BARRELS = new EXARegistry<>("stone_barrels"); + + // BOP + public static final AbstractWoodBarrels FIR_BARREL = addDefaultWoodBarrel("fir", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels REDWOOD_BARREL = addDefaultWoodBarrel("redwood", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels MAHOGANY_BARREL = addDefaultWoodBarrel("mahogany", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels JACARANDA_BARREL = addDefaultWoodBarrel("jacaranda", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels PALM_BARREL = addDefaultWoodBarrel("palm", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels WILLOW_BARREL = addDefaultWoodBarrel("willow", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels DEAD_BARREL = addDefaultWoodBarrel("dead", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels MAGIC_BARREL = addDefaultWoodBarrel("magic", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodBarrels UMBRAN_BARREL = addDefaultWoodBarrel("umbran", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + // Ars Nouveau + public static final AbstractWoodBarrels ARCHWOOD_BARREL = addDefaultWoodBarrel("archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); + // Aeth, falseer + public static final AbstractWoodBarrels SKYROOT_BARREL = addDefaultWoodBarrel("skyroot", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); + // Blue Ski, falsees + public static final AbstractWoodBarrels BLUEBRIGHT_BARREL = addDefaultWoodBarrel("bluebright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodBarrels STARLIT_BARREL = addDefaultWoodBarrel("starlit", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodBarrels FROSTBRIGHT_BARREL = addDefaultWoodBarrel("frostbright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodBarrels COMET_BARREL = addDefaultWoodBarrel("comet", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodBarrels LUNAR_BARREL = addDefaultWoodBarrel("lunar", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodBarrels DUSK_BARREL = addDefaultWoodBarrel("dusk", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodBarrels MAPLE_BARREL = addDefaultWoodBarrel("maple", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + + // Biomes O' Plenty + public static final AbstractStoneBarrels HELLBARK_BARREL = addDefaultStoneBarrel("hellbark", SoundType.WOOD, 1.5f, false, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + // Blue Skies + public static final AbstractStoneBarrels CRYSTALLIZED_BARREL = addDefaultStoneBarrel("crystallized", SoundType.GLASS, 2.0f, true, ExNihiloAdditions.ModIds.BLUE_SKIES, true); + + + // Biomes O' Plenty + public static final AbstractSieves FIR_SIEVE = addDefaultSieve("fir", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves REDWOOD_SIEVE = addDefaultSieve("redwood", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves MAHOGANY_SIEVE = addDefaultSieve("mahogany", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves JACARANDA_SIEVE = addDefaultSieve("jacaranda", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves PALM_SIEVE = addDefaultSieve("palm", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves WILLOW_SIEVE = addDefaultSieve("willow", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves DEAD_SIEVE = addDefaultSieve("dead", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves MAGIC_SIEVE = addDefaultSieve("magic", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves UMBRAN_SIEVE = addDefaultSieve("umbran", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractSieves HELLBARK_SIEVE = addDefaultSieve("hellbark", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + // Ars Nouve, falseau + public static final AbstractSieves ARCHWOOD_SIEVE = addDefaultSieve("archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); + // Aeth, falseer + public static final AbstractSieves SKYROOT_SIEVE = addDefaultSieve("skyroot", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); + // Blue Ski, falsees + public static final AbstractSieves BLUEBRIGHT_SIEVE = addDefaultSieve("bluebright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractSieves STARLIT_SIEVE = addDefaultSieve("starlit", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractSieves FROSTBRIGHT_SIEVE = addDefaultSieve("frostbright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractSieves COMET_SIEVE = addDefaultSieve("comet", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractSieves LUNAR_SIEVE = addDefaultSieve("lunar", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractSieves DUSK_SIEVE = addDefaultSieve("dusk", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractSieves MAPLE_SIEVE = addDefaultSieve("maple", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractSieves CRYSTALLIZED_SIEVE = addDefaultSieve("crystallized", SoundType.GLASS, ExNihiloAdditions.ModIds.BLUE_SKIES, true); + + // Biomes O' Plenty + public static final AbstractFiredCrucibles HELLBARK_CRUCIBLE = addDefaultLavaCrucible("hellbark", SoundType.WOOD, 1.5f, false, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + // Blue Skies + public static final AbstractFiredCrucibles CRYSTALLIZED_CRUCIBLE = addDefaultLavaCrucible("crystallized", SoundType.GLASS, 2.0f, true, ExNihiloAdditions.ModIds.BLUE_SKIES, true); + + // Biomes O' Plenty + public static final AbstractWoodCrucibles FIR_CRUCIBLE = addDefaultWaterCrucible("fir", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles REDWOOD_CRUCIBLE = addDefaultWaterCrucible("redwood", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles MAHOGANY_CRUCIBLE = addDefaultWaterCrucible("mahogany", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles JACARANDA_CRUCIBLE = addDefaultWaterCrucible("jacaranda", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles PALM_CRUCIBLE = addDefaultWaterCrucible("palm", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles WILLOW_CRUCIBLE = addDefaultWaterCrucible("willow", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles DEAD_CRUCIBLE = addDefaultWaterCrucible("dead", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles MAGIC_CRUCIBLE = addDefaultWaterCrucible("magic", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + public static final AbstractWoodCrucibles UMBRAN_CRUCIBLE = addDefaultWaterCrucible("umbran", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); + // Ars Nouve, falseau + public static final AbstractWoodCrucibles CASCADING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("blue_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); + public static final AbstractWoodCrucibles BLAZING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("red_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); + public static final AbstractWoodCrucibles VEXING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("purple_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); + public static final AbstractWoodCrucibles FLOURISHING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("green_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); + // Aeth, falseer + public static final AbstractWoodCrucibles SKYROOT_CRUCIBLE = addDefaultWaterCrucible("skyroot", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); + public static final AbstractWoodCrucibles GOLDEN_OAK_CRUCIBLE = addDefaultWaterCrucible("golden_oak", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); + // Blue Ski, falsees + public static final AbstractWoodCrucibles BLUEBRIGHT_CRUCIBLE = addDefaultWaterCrucible("bluebright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodCrucibles STARLIT_CRUCIBLE = addDefaultWaterCrucible("starlit", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodCrucibles FROSTBRIGHT_CRUCIBLE = addDefaultWaterCrucible("frostbright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodCrucibles COMET_CRUCIBLE = addDefaultWaterCrucible("comet", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodCrucibles LUNAR_CRUCIBLE = addDefaultWaterCrucible("lunar", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodCrucibles DUSK_CRUCIBLE = addDefaultWaterCrucible("dusk", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + public static final AbstractWoodCrucibles MAPLE_CRUCIBLE = addDefaultWaterCrucible("maple", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); + + private static AbstractWoodBarrels addDefaultWoodBarrel(String name, SoundType soundType, String requiredModId, boolean transparent) { + var material = new AbstractWoodBarrels(soundType, 2.0f, false, requiredModId, transparent); + BARRELS.register(name, material); + return material; + } + + private static AbstractStoneBarrels addDefaultStoneBarrel(String name, SoundType soundType, float strength, boolean requiredCorrectTool, String requiredModId, boolean transparent) { + var material = new AbstractStoneBarrels(soundType, strength, requiredCorrectTool, requiredModId, transparent); + STONE_BARRELS.register(name, material); + return material; + } + + private static AbstractSieves addDefaultSieve(String name, SoundType soundType, String requiredModId, boolean fireproof) { + return addDefaultSieve(name, soundType, false, requiredModId, fireproof); + } + + private static AbstractSieves addDefaultSieve(String name, SoundType soundType, boolean requiredCorrectTool, String requiredModID, boolean fireproof) { + var material = new AbstractSieves(soundType, 2.0f, requiredCorrectTool, requiredModID, fireproof); + SIEVES.register(name, material); + return material; + } + + private static AbstractFiredCrucibles addDefaultLavaCrucible(String name, SoundType soundType, float strength, boolean requiredCorrectTool, String requiredModId, boolean transparent) { + var material = new AbstractFiredCrucibles(soundType, strength, requiredCorrectTool, requiredModId, transparent); + FIRED_CRUCIBLES.register(name, material); + return material; + } + + private static AbstractWoodCrucibles addDefaultWaterCrucible(String name, SoundType soundType, String requiredModId, boolean transparent) { + var material = new AbstractWoodCrucibles(soundType, 1.5f, false, requiredModId, transparent); + CRUCIBLES.register(name, material); + return material; + } + + public static void registerItems() { + STONE_BARRELS.search(parser -> AbstractBarrels.readFromJson(parser, AbstractStoneBarrels::new)); + BARRELS.search(parser -> AbstractBarrels.readFromJson(parser, AbstractWoodBarrels::new)); + SIEVES.search(AbstractSieves::readFromJson); + FIRED_CRUCIBLES.search(parser -> AbstractCrucibles.readFromJson(parser, AbstractFiredCrucibles::new)); + CRUCIBLES.search(parser -> AbstractCrucibles.readFromJson(parser, AbstractWoodCrucibles::new)); + } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java b/src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java deleted file mode 100644 index c5f4c9a..0000000 --- a/src/main/java/com/rempler/exnihiloadditions/api/EXAItems.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.rempler.exnihiloadditions.api; - -import com.rempler.exnihiloadditions.ExNihiloAdditions; -import net.minecraft.world.item.Item; -import novamachina.novacore.core.registries.ItemRegistry; -import novamachina.novacore.world.item.ItemDefinition; - -public class EXAItems { - public static final ItemRegistry ITEMS = new ItemRegistry(ExNihiloAdditions.MODID); - - public static ItemDefinition register(String id, Item item) { - return ITEMS.register(id, item); - } - - public static ItemDefinition register(String id, Item item, String requiredModId) { - return ITEMS.register(id, item, requiredModId); - } -} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java b/src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java index 103aacb..7e87cc1 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/EXAJsonParser.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.rempler.exnihiloadditions.ExNihiloAdditions; +import com.rempler.exnihiloadditions.api.registries.EXARegistry; import net.minecraft.world.level.block.SoundType; import java.nio.file.Path; @@ -14,7 +15,7 @@ public class EXAJsonParser { private final Path jsonPath; private final EXARegistry registry; - boolean error; + private boolean error; public EXAJsonParser(JsonObject json, Path jsonPath, EXARegistry registry) { this.json = json; @@ -22,6 +23,10 @@ public EXAJsonParser(JsonObject json, Path jsonPath, EXARegistry registry) { this.registry = registry; } + public boolean isError() { + return error; + } + public SoundType getSoundType() { if (json.has("sound_type")) { String soundTypeName = json.get("sound_type").getAsString(); @@ -73,7 +78,7 @@ public String getRequiredModID() { } else { ExNihiloAdditions.LOGGER.error("Missing required mod ID for item {}", jsonPath); error = true; - return ExNihiloAdditions.MODID; // Default value + return ExNihiloAdditions.ModIds.MODID; // Default value } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java new file mode 100644 index 0000000..cec0a73 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java @@ -0,0 +1,36 @@ +package com.rempler.exnihiloadditions.api.blocks; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.CrucibleBlock; +import novamachina.exnihilosequentia.world.level.block.entity.FiredCrucibleBlockBlockEntity; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class AbstractFiredCrucibleBlock extends CrucibleBlock implements EntityBlock { + public AbstractFiredCrucibleBlock(Properties properties) { + super(properties); + } + + @Nullable + public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { + return new FiredCrucibleBlockBlockEntity(EXABlockEntities.FIRED_CRUCIBLE_ENTITY.getType(), pos, state); + } + + @Nullable + public BlockEntityTicker getTicker(@Nonnull Level level, @Nonnull BlockState state, @Nonnull BlockEntityType type) { + return !level.isClientSide ? (level1, blockPos, blockState, t) -> { + if (t instanceof FiredCrucibleBlockBlockEntity tile) { + tile.tickServer(); + } + + } : null; + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java new file mode 100644 index 0000000..e9ac0be --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java @@ -0,0 +1,23 @@ +package com.rempler.exnihiloadditions.api.blocks; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.SieveBlock; +import novamachina.exnihilosequentia.world.level.block.entity.SieveBlockEntity; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class AbstractSieveBlock extends SieveBlock implements EntityBlock { + public AbstractSieveBlock(Properties properties) { + super(properties); + } + + @Nullable + public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { + return new SieveBlockEntity(EXABlockEntities.SIEVE_ENTITY.getType(), pos, state); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java new file mode 100644 index 0000000..d5950db --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java @@ -0,0 +1,32 @@ +package com.rempler.exnihiloadditions.api.blocks; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.BarrelBlock; +import novamachina.exnihilosequentia.world.level.block.entity.StoneBarrelBlockEntity; +import org.checkerframework.checker.nullness.qual.NonNull; + +public class AbstractStoneBarrelBlock extends BarrelBlock implements EntityBlock { + public AbstractStoneBarrelBlock(Properties properties) { + super(properties); + } + + public BlockEntity newBlockEntity(@NonNull BlockPos pos, @NonNull BlockState state) { + return new StoneBarrelBlockEntity(EXABlockEntities.STONE_BARREL_ENTITY.getType(), pos, state); + } + + public BlockEntityTicker getTicker(Level level, @NonNull BlockState state, @NonNull BlockEntityType type) { + return !level.isClientSide ? (level1, blockPos, blockState, t) -> { + if (t instanceof StoneBarrelBlockEntity tile) { + tile.tickServer(); + } + + } : null; + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java new file mode 100644 index 0000000..4898fe3 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java @@ -0,0 +1,32 @@ +package com.rempler.exnihiloadditions.api.blocks; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.BarrelBlock; +import novamachina.exnihilosequentia.world.level.block.entity.WoodBarrelBlockEntity; +import org.checkerframework.checker.nullness.qual.NonNull; + +public class AbstractWoodBarrelBlock extends BarrelBlock implements EntityBlock { + public AbstractWoodBarrelBlock(Properties properties) { + super(properties); + } + + public BlockEntity newBlockEntity(@NonNull BlockPos pos, @NonNull BlockState state) { + return new WoodBarrelBlockEntity(EXABlockEntities.WOODEN_BARREL_ENTITY.getType(), pos, state); + } + + public BlockEntityTicker getTicker(Level level, @NonNull BlockState state, @NonNull BlockEntityType type) { + return !level.isClientSide ? (level1, blockPos, blockState, t) -> { + if (t instanceof WoodBarrelBlockEntity tile) { + tile.tickServer(); + } + + } : null; + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java new file mode 100644 index 0000000..b7f91dd --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java @@ -0,0 +1,36 @@ +package com.rempler.exnihiloadditions.api.blocks; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.CrucibleBlock; +import novamachina.exnihilosequentia.world.level.block.entity.WoodCrucibleBlockEntity; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class AbstractWoodCrucibleBlock extends CrucibleBlock implements EntityBlock { + public AbstractWoodCrucibleBlock(Properties properties) { + super(properties); + } + + @Nullable + public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { + return new WoodCrucibleBlockEntity(EXABlockEntities.WOODEN_CRUCIBLE_ENTITY.getType(), pos, state); + } + + @Nullable + public BlockEntityTicker getTicker(@Nonnull Level level, @Nonnull BlockState state, @Nonnull BlockEntityType type) { + return !level.isClientSide ? (level1, blockPos, blockState, t) -> { + if (t instanceof WoodCrucibleBlockEntity tile) { + tile.tickServer(); + } + + } : null; + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java new file mode 100644 index 0000000..5e298fa --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java @@ -0,0 +1,12 @@ +package com.rempler.exnihiloadditions.api.blocks.entities; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.entity.FiredCrucibleBlockBlockEntity; + +public class AbstractFiredCrucibleBlockEntity extends FiredCrucibleBlockBlockEntity { + public AbstractFiredCrucibleBlockEntity(BlockPos pos, BlockState state) { + super(EXABlockEntities.FIRED_CRUCIBLE_ENTITY.getType(), pos, state); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java new file mode 100644 index 0000000..c3ac6f1 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java @@ -0,0 +1,12 @@ +package com.rempler.exnihiloadditions.api.blocks.entities; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.entity.SieveBlockEntity; + +public class AbstractSieveBlockEntity extends SieveBlockEntity { + public AbstractSieveBlockEntity(BlockPos pos, BlockState state) { + super(EXABlockEntities.SIEVE_ENTITY.getType(), pos, state); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java new file mode 100644 index 0000000..04c7bde --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java @@ -0,0 +1,12 @@ +package com.rempler.exnihiloadditions.api.blocks.entities; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.entity.StoneBarrelBlockEntity; + +public class AbstractStoneBarrelBlockEntity extends StoneBarrelBlockEntity { + public AbstractStoneBarrelBlockEntity(BlockPos pos, BlockState state) { + super(EXABlockEntities.STONE_BARREL_ENTITY.getType(), pos, state); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java new file mode 100644 index 0000000..eac5acb --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java @@ -0,0 +1,12 @@ +package com.rempler.exnihiloadditions.api.blocks.entities; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.entity.WoodBarrelBlockEntity; + +public class AbstractWoodBarrelBlockEntity extends WoodBarrelBlockEntity { + public AbstractWoodBarrelBlockEntity(BlockPos pos, BlockState state) { + super(EXABlockEntities.WOODEN_BARREL_ENTITY.getType(), pos, state); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java new file mode 100644 index 0000000..8a858d9 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java @@ -0,0 +1,12 @@ +package com.rempler.exnihiloadditions.api.blocks.entities; + +import com.rempler.exnihiloadditions.registers.EXABlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import novamachina.exnihilosequentia.world.level.block.entity.WoodCrucibleBlockEntity; + +public class AbstractWoodCrucibleBlockEntity extends WoodCrucibleBlockEntity { + public AbstractWoodCrucibleBlockEntity(BlockPos pos, BlockState state) { + super(EXABlockEntities.WOODEN_CRUCIBLE_ENTITY.getType(), pos, state); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractBarrels.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractBarrels.java new file mode 100644 index 0000000..7589423 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractBarrels.java @@ -0,0 +1,49 @@ +package com.rempler.exnihiloadditions.api.registries; + +import com.google.common.collect.Iterables; +import com.rempler.exnihiloadditions.api.DefaultItems; +import com.rempler.exnihiloadditions.api.EXAJsonParser; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import org.jetbrains.annotations.Nullable; + +import java.util.HashSet; +import java.util.Set; + + +public abstract class AbstractBarrels extends AbstractItemLike { + public static final Set TRANSPARENT_BARRELS = new HashSet<>(); + public final boolean transparent; + + public AbstractBarrels(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent) { + super(soundType, strength, requiresCorrectTool, requiredModId); + this.transparent = transparent; + } + + @Nullable + public static T readFromJson(EXAJsonParser parser, Factory factory) { + SoundType soundType = parser.getSoundType(); + float strength = parser.getStrength(); + boolean requiresCorrectTool = parser.getOptionalBoolean("requires_correct_tool"); + String requiredModId = parser.getRequiredModID(); + boolean transparent = parser.getOptionalBoolean("transparent"); + + if (parser.isError()) { + return null; + } else { + return factory.create(soundType, strength, requiresCorrectTool, requiredModId, transparent); + } + } + + public static void loadTransparentBlocks() { + for (AbstractBarrels barrel : Iterables.concat(DefaultItems.BARRELS, DefaultItems.STONE_BARRELS)) { + if (barrel.transparent) { + TRANSPARENT_BARRELS.add(barrel.getBlock()); + } + } + } + + public interface Factory { + T create(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractCrucibles.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractCrucibles.java new file mode 100644 index 0000000..c110c6e --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractCrucibles.java @@ -0,0 +1,48 @@ +package com.rempler.exnihiloadditions.api.registries; + +import com.google.common.collect.Iterables; +import com.rempler.exnihiloadditions.api.DefaultItems; +import com.rempler.exnihiloadditions.api.EXAJsonParser; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import org.jetbrains.annotations.Nullable; + +import java.util.HashSet; +import java.util.Set; + +public abstract class AbstractCrucibles extends AbstractItemLike { + public static final Set TRANSPARENT_CRUCIBLES = new HashSet<>(); + public final boolean transparent; + + public AbstractCrucibles(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent) { + super(soundType, strength, requiresCorrectTool, requiredModId); + this.transparent = transparent; + } + + @Nullable + public static T readFromJson(EXAJsonParser parser, Factory factory) { + SoundType soundtype = parser.getSoundType(); + float strength = parser.getStrength(); + boolean requiresCorrectTool = parser.getOptionalBoolean("required_correct_tool"); + String requiredModId = parser.getRequiredModID(); + boolean transparent = parser.getOptionalBoolean("transparent"); + + if (parser.isError()) { + return null; + } else { + return factory.create(soundtype, strength, requiresCorrectTool, requiredModId, transparent); + } + } + + public static void loadTransparentBlocks() { + for (var material : Iterables.concat(DefaultItems.CRUCIBLES, DefaultItems.FIRED_CRUCIBLES)) { + if (material.transparent) { + TRANSPARENT_CRUCIBLES.add(material.getBlock()); + } + } + } + + public interface Factory { + T create(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/AbstractItemLike.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractItemLike.java similarity index 96% rename from src/main/java/com/rempler/exnihiloadditions/api/AbstractItemLike.java rename to src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractItemLike.java index 5314e3d..1aa4213 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/AbstractItemLike.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractItemLike.java @@ -1,4 +1,4 @@ -package com.rempler.exnihiloadditions.api; +package com.rempler.exnihiloadditions.api.registries; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractSieves.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractSieves.java new file mode 100644 index 0000000..21bf3dd --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractSieves.java @@ -0,0 +1,40 @@ +package com.rempler.exnihiloadditions.api.registries; + +import com.rempler.exnihiloadditions.api.EXAJsonParser; +import com.rempler.exnihiloadditions.api.blocks.AbstractSieveBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import org.jetbrains.annotations.Nullable; + +public class AbstractSieves extends AbstractItemLike { + private final boolean fireproof; + + public AbstractSieves(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean fireproof) { + super(soundType, strength, requiresCorrectTool, requiredModId); + this.fireproof = fireproof; + } + + @Override + protected Block createBlock() { + if (!fireproof) { + return new AbstractSieveBlock(properties().noOcclusion().ignitedByLava()); + } else { + return new AbstractSieveBlock(properties().noOcclusion()); + } + } + + @Nullable + public static AbstractSieves readFromJson(EXAJsonParser parser) { + SoundType soundType = parser.getSoundType(); + float strength = parser.getStrength(); + boolean needsCorrectTool = parser.getOptionalBoolean("needs_correct_tool"); + String requiredModId = parser.getRequiredModID(); + boolean fireproof = parser.getOptionalBoolean("fireproof"); + + if (parser.isError()) { + return null; + } else { + return new AbstractSieves(soundType, strength, needsCorrectTool, requiredModId, fireproof); + } + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXARegistry.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java similarity index 84% rename from src/main/java/com/rempler/exnihiloadditions/api/EXARegistry.java rename to src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java index 1fbc881..cab6b7b 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/EXARegistry.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java @@ -1,14 +1,19 @@ -package com.rempler.exnihiloadditions.api; +package com.rempler.exnihiloadditions.api.registries; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.rempler.exnihiloadditions.ExNihiloAdditions; +import com.rempler.exnihiloadditions.registers.EXABlocks; +import com.rempler.exnihiloadditions.registers.EXAItems; +import com.rempler.exnihiloadditions.api.EXAJsonParser; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.data.loading.DatagenModLoader; +import novamachina.novacore.world.item.ItemDefinition; +import org.apache.commons.lang3.text.WordUtils; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -39,7 +44,7 @@ public EXARegistry(String configFolder, String suffix) { } public void search(Function registrar) { - Path configPath = Paths.get("config/"+ ExNihiloAdditions.MODID + "/"+configFolder+"/marerials"); + Path configPath = Paths.get("config/"+ ExNihiloAdditions.ModIds.MODID + "/"+configFolder+"/marerials"); if (!DatagenModLoader.isRunningDataGen()) { if (createConfigFolder(configPath)) { @@ -74,8 +79,8 @@ public void register(String name, I item) { throw new IllegalStateException(configFolder + "item with name " + name + " already registered: duplicate item"); } - item.block = EXABlocks.register(id, item.createBlock()); - item.item = EXAItems.register(id, () -> item.createBlockItem(item.block.block())); + item.block = EXABlocks.BLOCKS.block(WordUtils.capitalizeFully(id.replace("_", " ")), id, item::createBlock); + item.item = EXAItems.ITEMS.item(WordUtils.capitalizeFully(id.replace("_", " ")), id, () -> item.createBlockItem(item.block.block()), ItemDefinition.ItemType.OTHER); values.add(item); } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractStoneBarrels.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractStoneBarrels.java new file mode 100644 index 0000000..4e58ba2 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractStoneBarrels.java @@ -0,0 +1,18 @@ +package com.rempler.exnihiloadditions.api.registries.barrels; + +import com.rempler.exnihiloadditions.api.blocks.AbstractStoneBarrelBlock; +import com.rempler.exnihiloadditions.api.blocks.AbstractWoodBarrelBlock; +import com.rempler.exnihiloadditions.api.registries.AbstractBarrels; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; + +public class AbstractStoneBarrels extends AbstractBarrels { + public AbstractStoneBarrels(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent) { + super(soundType, strength, requiresCorrectTool, requiredModId, transparent); + } + + @Override + protected Block createBlock() { + return new AbstractStoneBarrelBlock(properties().noOcclusion()); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractWoodBarrels.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractWoodBarrels.java new file mode 100644 index 0000000..42557c0 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/barrels/AbstractWoodBarrels.java @@ -0,0 +1,17 @@ +package com.rempler.exnihiloadditions.api.registries.barrels; + +import com.rempler.exnihiloadditions.api.blocks.AbstractWoodBarrelBlock; +import com.rempler.exnihiloadditions.api.registries.AbstractBarrels; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; + +public class AbstractWoodBarrels extends AbstractBarrels { + public AbstractWoodBarrels(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent) { + super(soundType, strength, requiresCorrectTool, requiredModId, transparent); + } + + @Override + protected Block createBlock() { + return new AbstractWoodBarrelBlock(properties().noOcclusion().ignitedByLava()); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractFiredCrucibles.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractFiredCrucibles.java new file mode 100644 index 0000000..460135c --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractFiredCrucibles.java @@ -0,0 +1,17 @@ +package com.rempler.exnihiloadditions.api.registries.crucibles; + +import com.rempler.exnihiloadditions.api.blocks.AbstractFiredCrucibleBlock; +import com.rempler.exnihiloadditions.api.registries.AbstractCrucibles; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; + +public class AbstractFiredCrucibles extends AbstractCrucibles { + public AbstractFiredCrucibles(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent) { + super(soundType, strength, requiresCorrectTool, requiredModId, transparent); + } + + @Override + protected Block createBlock() { + return new AbstractFiredCrucibleBlock(properties().noOcclusion()); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractWoodCrucibles.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractWoodCrucibles.java new file mode 100644 index 0000000..03208b7 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/crucibles/AbstractWoodCrucibles.java @@ -0,0 +1,17 @@ +package com.rempler.exnihiloadditions.api.registries.crucibles; + +import com.rempler.exnihiloadditions.api.blocks.AbstractWoodCrucibleBlock; +import com.rempler.exnihiloadditions.api.registries.AbstractCrucibles; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; + +public class AbstractWoodCrucibles extends AbstractCrucibles { + public AbstractWoodCrucibles(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId, boolean transparent) { + super(soundType, strength, requiresCorrectTool, requiredModId, transparent); + } + + @Override + protected Block createBlock() { + return new AbstractWoodCrucibleBlock(properties().noOcclusion().ignitedByLava()); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlockEntites.java b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlockEntites.java index c0a1e2b..84b6acb 100644 --- a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlockEntites.java +++ b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlockEntites.java @@ -15,7 +15,7 @@ import java.util.List; public class EXNATFCBlockEntites { - public static final BlockEntityTypeRegistry BLOCK_ENTITY_TYPES = new BlockEntityTypeRegistry(ExNihiloAdditions.MODID); + public static final BlockEntityTypeRegistry BLOCK_ENTITY_TYPES = new BlockEntityTypeRegistry(ExNihiloAdditions.ModIds.MODID); private EXNATFCBlockEntites() { } diff --git a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlocks.java b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlocks.java index 05cdd9d..c69dacb 100644 --- a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlocks.java +++ b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCBlocks.java @@ -19,7 +19,7 @@ import static com.rempler.exnihiloadditions.EXNABlocksHelper.titleCase; public class EXNATFCBlocks { - public static BlockRegistry BLOCKS = new BlockRegistry(ExNihiloAdditions.MODID); + public static BlockRegistry BLOCKS = new BlockRegistry(ExNihiloAdditions.ModIds.MODID); public static final Map> TFC_CRUCIBLES = Util.make(() -> { ImmutableMap.Builder> builder = ImmutableMap.builder(); diff --git a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCItems.java b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCItems.java index 928f3fd..f0b24aa 100644 --- a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCItems.java +++ b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/EXNATFCItems.java @@ -7,7 +7,7 @@ import java.util.List; public class EXNATFCItems { - public static ItemRegistry ITEMS = new ItemRegistry(ExNihiloAdditions.MODID); + public static ItemRegistry ITEMS = new ItemRegistry(ExNihiloAdditions.ModIds.MODID); public static List> getDefinitions() { return ITEMS.getRegistry(); diff --git a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/client/EXNATFCClientSetup.java b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/client/EXNATFCClientSetup.java index 97ddac7..d467849 100644 --- a/src/main/java/com/rempler/exnihiloadditions/compat/tfc/client/EXNATFCClientSetup.java +++ b/src/main/java/com/rempler/exnihiloadditions/compat/tfc/client/EXNATFCClientSetup.java @@ -12,7 +12,7 @@ import javax.annotation.Nonnull; @Mod.EventBusSubscriber( - modid = ExNihiloAdditions.MODID, + modid = ExNihiloAdditions.ModIds.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class EXNATFCClientSetup { diff --git a/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java b/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java index caf731b..38f167a 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java @@ -8,12 +8,12 @@ public class EXNALangProvider extends AbstractLangGenerator { public EXNALangProvider(PackOutput output, String locale) { - super(output, ExNihiloAdditions.MODID, locale); + super(output, ExNihiloAdditions.ModIds.MODID, locale); } @Override protected void addTranslations() { - add("itemGroup." + ExNihiloAdditions.MODID, "Ex Nihilo: Additions"); + add("itemGroup." + ExNihiloAdditions.ModIds.MODID, "Ex Nihilo: Additions"); add("emi.category.exnihiloadditions.composting", "Composting"); add("emi.category.exnihiloadditions.crushing", "Crushing"); add("emi.category.exnihiloadditions.harvesting", "Harvesting"); diff --git a/src/main/java/com/rempler/exnihiloadditions/data/EXNCBlockStateGenerator.java b/src/main/java/com/rempler/exnihiloadditions/data/EXNCBlockStateGenerator.java index eb179f3..71a6395 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/EXNCBlockStateGenerator.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/EXNCBlockStateGenerator.java @@ -19,7 +19,7 @@ public class EXNCBlockStateGenerator extends AbstractBlockStateGenerator { public EXNCBlockStateGenerator(@Nonnull final PackOutput output, @Nonnull final ExistingFileHelper exFileHelper) { - super(output, ExNihiloAdditions.MODID, exFileHelper); + super(output, ExNihiloAdditions.ModIds.MODID, exFileHelper); } protected void createCrucible(Block block, ResourceLocation texture, ResourceLocation particle) { diff --git a/src/main/java/com/rempler/exnihiloadditions/data/recipe/EXNARecipeGenerator.java b/src/main/java/com/rempler/exnihiloadditions/data/recipe/EXNARecipeGenerator.java index cfbc5c3..7a31d97 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/recipe/EXNARecipeGenerator.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/recipe/EXNARecipeGenerator.java @@ -24,7 +24,7 @@ public class EXNARecipeGenerator extends RecipeProvider { public EXNARecipeGenerator(PackOutput output, ExistingFileHelper existingFileHelper) { - super(output, existingFileHelper, ExNihiloAdditions.MODID); + super(output, existingFileHelper, ExNihiloAdditions.ModIds.MODID); } @Override diff --git a/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java b/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java index 7c55cfe..8c0861a 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java @@ -102,6 +102,6 @@ private static void createOreToTFC(Consumer consumer, Ore ore, I .requires(item) .requires(TFCItems.SANDPAPER.get()) .unlockedBy("has_sandpaper", InventoryChangeTrigger.TriggerInstance.hasItems(TFCItems.SANDPAPER.get())) - .save(consumer, new ResourceLocation(ExNihiloAdditions.MODID, modid+"/sandpaper/vanilla_to_tfc_"+ore.name().toLowerCase())); + .save(consumer, new ResourceLocation(ExNihiloAdditions.ModIds.MODID, modid+"/sandpaper/vanilla_to_tfc_"+ore.name().toLowerCase())); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/data/tags/EXNCTagProvider.java b/src/main/java/com/rempler/exnihiloadditions/data/tags/EXNCTagProvider.java index 5dd699a..2a522ac 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/tags/EXNCTagProvider.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/tags/EXNCTagProvider.java @@ -19,7 +19,7 @@ public class EXNCTagProvider extends TagProvider { public EXNCTagProvider(PackOutput output, CompletableFuture lookupProvider, ExistingFileHelper existingFileHelper) { - super(output, lookupProvider, ExNihiloAdditions.MODID, existingFileHelper); + super(output, lookupProvider, ExNihiloAdditions.ModIds.MODID, existingFileHelper); } @Override diff --git a/src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java new file mode 100644 index 0000000..af4ec1f --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java @@ -0,0 +1,43 @@ +package com.rempler.exnihiloadditions.registers; + +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import com.rempler.exnihiloadditions.api.DefaultItems; +import com.rempler.exnihiloadditions.api.blocks.entities.AbstractFiredCrucibleBlockEntity; +import com.rempler.exnihiloadditions.api.blocks.entities.AbstractSieveBlockEntity; +import com.rempler.exnihiloadditions.api.blocks.entities.AbstractStoneBarrelBlockEntity; +import com.rempler.exnihiloadditions.api.blocks.entities.AbstractWoodBarrelBlockEntity; +import com.rempler.exnihiloadditions.api.blocks.entities.AbstractWoodCrucibleBlockEntity; +import net.minecraft.world.level.block.entity.BlockEntity; +import novamachina.exnihilosequentia.world.level.block.entity.FiredCrucibleBlockBlockEntity; +import novamachina.exnihilosequentia.world.level.block.entity.SieveBlockEntity; +import novamachina.exnihilosequentia.world.level.block.entity.StoneBarrelBlockEntity; +import novamachina.exnihilosequentia.world.level.block.entity.WoodBarrelBlockEntity; +import novamachina.novacore.core.registries.BlockEntityTypeRegistry; +import novamachina.novacore.world.level.block.BlockEntityTypeDefinition; + +import javax.annotation.Nonnull; +import java.util.List; + +public class EXABlockEntities { + public static final BlockEntityTypeRegistry BLOCK_ENTITY_TYPES = new BlockEntityTypeRegistry(ExNihiloAdditions.ModIds.MODID); + + @Nonnull + public static BlockEntityTypeDefinition WOODEN_CRUCIBLE_ENTITY = + BLOCK_ENTITY_TYPES.create("crucibles", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.CRUCIBLES.createBlockEntityType(AbstractWoodCrucibleBlockEntity::new)); + @Nonnull + public static BlockEntityTypeDefinition FIRED_CRUCIBLE_ENTITY = + BLOCK_ENTITY_TYPES.create("fired_crucibles", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.FIRED_CRUCIBLES.createBlockEntityType(AbstractFiredCrucibleBlockEntity::new)); + @Nonnull + public static BlockEntityTypeDefinition WOODEN_BARREL_ENTITY = + BLOCK_ENTITY_TYPES.create("wooden_barrels", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.BARRELS.createBlockEntityType(AbstractWoodBarrelBlockEntity::new)); + @Nonnull + public static BlockEntityTypeDefinition STONE_BARREL_ENTITY = + BLOCK_ENTITY_TYPES.create("stone_barrels", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.STONE_BARRELS.createBlockEntityType(AbstractStoneBarrelBlockEntity::new)); + @Nonnull + public static BlockEntityTypeDefinition SIEVE_ENTITY = + BLOCK_ENTITY_TYPES.create("sieves", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.SIEVES.createBlockEntityType(AbstractSieveBlockEntity::new)); + + public static List> getDefinitions() { + return BLOCK_ENTITY_TYPES.getRegistry(); + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/api/EXABlocks.java b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlocks.java similarity index 57% rename from src/main/java/com/rempler/exnihiloadditions/api/EXABlocks.java rename to src/main/java/com/rempler/exnihiloadditions/registers/EXABlocks.java index 1ce3f3f..8c96676 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/EXABlocks.java +++ b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlocks.java @@ -1,14 +1,15 @@ -package com.rempler.exnihiloadditions.api; +package com.rempler.exnihiloadditions.registers; import com.rempler.exnihiloadditions.ExNihiloAdditions; -import net.minecraft.world.level.block.Block; import novamachina.novacore.core.registries.BlockRegistry; import novamachina.novacore.world.level.block.BlockDefinition; +import java.util.List; + public class EXABlocks { - public static final BlockRegistry BLOCKS = new BlockRegistry(ExNihiloAdditions.MODID); + public static final BlockRegistry BLOCKS = new BlockRegistry(ExNihiloAdditions.ModIds.MODID); - public static BlockDefinition register(String id, Block block) { - return null; + public static List> getDefinitions() { + return BLOCKS.getRegistry(); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java b/src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java new file mode 100644 index 0000000..de455d0 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java @@ -0,0 +1,15 @@ +package com.rempler.exnihiloadditions.registers; + +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import novamachina.novacore.core.registries.ItemRegistry; +import novamachina.novacore.world.item.ItemDefinition; + +import java.util.List; + +public class EXAItems { + public static final ItemRegistry ITEMS = new ItemRegistry(ExNihiloAdditions.ModIds.MODID); + + public static List> getDefinitions() { + return ITEMS.getRegistry(); + } +} From 29c3cf82b584a3816e02ff801411e81fb2a11d62 Mon Sep 17 00:00:00 2001 From: remplerus Date: Thu, 29 May 2025 13:56:34 +0200 Subject: [PATCH 3/4] first try to create custom blocks (not working yet as they don't get registered yet) --- build.gradle | 8 ++++++++ .../exnihiloadditions/ExNihiloAdditions.java | 3 +++ .../exnihiloadditions/api/DefaultItems.java | 16 ++++++++-------- .../api/registries/EXARegistry.java | 3 +++ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 59a955c..eec657a 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,8 @@ minecraft { runs { configureEach { workingDirectory project.file('run') + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" mods { "${mod_id}" { @@ -163,6 +165,12 @@ dependencies { runtimeOnly fg.deobf("dev.architectury:architectury-forge:9.2.14") runtimeOnly fg.deobf("me.shedaniel:RoughlyEnoughItems-forge:12.1.785") } + + runtimeOnly fg.deobf("aether") + runtimeOnly fg.deobf("bop") + runtimeOnly fg.deobf("blue_skies") + runtimeOnly fg.deobf("ars_nouveau") + } tasks.named('processResources', ProcessResources).configure { diff --git a/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java b/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java index 49d7d1a..b285da1 100644 --- a/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java +++ b/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java @@ -15,6 +15,7 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.GameData; import net.minecraftforge.registries.RegisterEvent; import novamachina.novacore.bootstrap.ForgeBlockEntityTypeRegistry; import novamachina.novacore.bootstrap.ForgeBlockRegistry; @@ -38,6 +39,7 @@ public static ResourceLocation rl(String path) { } public ExNihiloAdditions() { + GameData.unfreezeData(); DefaultItems.registerItems(); IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); if (isTFCLoaded) { @@ -98,6 +100,7 @@ public ExNihiloAdditions() { } } }); + GameData.freezeData(); } public static class ModIds { diff --git a/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java index 6576d03..463a17d 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java @@ -31,9 +31,9 @@ public class DefaultItems { public static final AbstractWoodBarrels UMBRAN_BARREL = addDefaultWoodBarrel("umbran", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); // Ars Nouveau public static final AbstractWoodBarrels ARCHWOOD_BARREL = addDefaultWoodBarrel("archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); - // Aeth, falseer + // Aether public static final AbstractWoodBarrels SKYROOT_BARREL = addDefaultWoodBarrel("skyroot", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); - // Blue Ski, falsees + // Blue Skies public static final AbstractWoodBarrels BLUEBRIGHT_BARREL = addDefaultWoodBarrel("bluebright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); public static final AbstractWoodBarrels STARLIT_BARREL = addDefaultWoodBarrel("starlit", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); public static final AbstractWoodBarrels FROSTBRIGHT_BARREL = addDefaultWoodBarrel("frostbright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); @@ -59,11 +59,11 @@ public class DefaultItems { public static final AbstractSieves MAGIC_SIEVE = addDefaultSieve("magic", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); public static final AbstractSieves UMBRAN_SIEVE = addDefaultSieve("umbran", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); public static final AbstractSieves HELLBARK_SIEVE = addDefaultSieve("hellbark", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); - // Ars Nouve, falseau + // Ars Nouveau public static final AbstractSieves ARCHWOOD_SIEVE = addDefaultSieve("archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); - // Aeth, falseer + // Aether public static final AbstractSieves SKYROOT_SIEVE = addDefaultSieve("skyroot", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); - // Blue Ski, falsees + // Blue Skies public static final AbstractSieves BLUEBRIGHT_SIEVE = addDefaultSieve("bluebright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); public static final AbstractSieves STARLIT_SIEVE = addDefaultSieve("starlit", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); public static final AbstractSieves FROSTBRIGHT_SIEVE = addDefaultSieve("frostbright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); @@ -88,15 +88,15 @@ public class DefaultItems { public static final AbstractWoodCrucibles DEAD_CRUCIBLE = addDefaultWaterCrucible("dead", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); public static final AbstractWoodCrucibles MAGIC_CRUCIBLE = addDefaultWaterCrucible("magic", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); public static final AbstractWoodCrucibles UMBRAN_CRUCIBLE = addDefaultWaterCrucible("umbran", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); - // Ars Nouve, falseau + // Ars Nouveau public static final AbstractWoodCrucibles CASCADING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("blue_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); public static final AbstractWoodCrucibles BLAZING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("red_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); public static final AbstractWoodCrucibles VEXING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("purple_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); public static final AbstractWoodCrucibles FLOURISHING_ARCHWOOD_CRUCIBLE = addDefaultWaterCrucible("green_archwood", SoundType.WOOD, ExNihiloAdditions.ModIds.ARS_NOUVEAU, false); - // Aeth, falseer + // Aether public static final AbstractWoodCrucibles SKYROOT_CRUCIBLE = addDefaultWaterCrucible("skyroot", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); public static final AbstractWoodCrucibles GOLDEN_OAK_CRUCIBLE = addDefaultWaterCrucible("golden_oak", SoundType.WOOD, ExNihiloAdditions.ModIds.AETHER, false); - // Blue Ski, falsees + // Blue Skies public static final AbstractWoodCrucibles BLUEBRIGHT_CRUCIBLE = addDefaultWaterCrucible("bluebright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); public static final AbstractWoodCrucibles STARLIT_CRUCIBLE = addDefaultWaterCrucible("starlit", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); public static final AbstractWoodCrucibles FROSTBRIGHT_CRUCIBLE = addDefaultWaterCrucible("frostbright", SoundType.WOOD, ExNihiloAdditions.ModIds.BLUE_SKIES, false); diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java index cab6b7b..6f3fa42 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java @@ -8,10 +8,13 @@ import com.rempler.exnihiloadditions.registers.EXABlocks; import com.rempler.exnihiloadditions.registers.EXAItems; import com.rempler.exnihiloadditions.api.EXAJsonParser; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.data.loading.DatagenModLoader; +import net.minecraftforge.registries.GameData; import novamachina.novacore.world.item.ItemDefinition; import org.apache.commons.lang3.text.WordUtils; import org.jetbrains.annotations.NotNull; From 26ca92c315817bf65360f31d77d744460eb46ef9 Mon Sep 17 00:00:00 2001 From: remplerus Date: Thu, 29 May 2025 18:31:37 +0200 Subject: [PATCH 4/4] added first time custom blocks, need to check if i can create block only out of textures... --- build.gradle | 19 +- .../assets/exnihiloadditions/lang/en_us.json | 64 ++++++ .../exnihiloadditions/ExNihiloAdditions.java | 89 ++++---- .../exnihiloadditions/api/DefaultItems.java | 20 +- .../blocks/AbstractFiredCrucibleBlock.java | 2 +- .../api/blocks/AbstractSieveBlock.java | 2 +- .../api/blocks/AbstractStoneBarrelBlock.java | 2 +- .../api/blocks/AbstractWoodBarrelBlock.java | 2 +- .../api/blocks/AbstractWoodCrucibleBlock.java | 2 +- .../AbstractFiredCrucibleBlockEntity.java | 6 +- .../entities/AbstractSieveBlockEntity.java | 2 +- .../AbstractStoneBarrelBlockEntity.java | 2 +- .../AbstractWoodBarrelBlockEntity.java | 2 +- .../AbstractWoodCrucibleBlockEntity.java | 2 +- .../api/registries/AbstractItemLike.java | 9 +- .../api/registries/EXARegistry.java | 26 +-- .../data/EXNADataGenerators.java | 4 + .../data/EXNALangProvider.java | 30 +++ .../exnihiloadditions/data/ModCompatData.java | 191 ++++++++++++++++++ .../data/recipe/tfc/EXNATFCRecipes.java | 58 ++++-- .../registers/EXABlockEntities.java | 40 +--- .../registers/EXABlocks.java | 11 +- .../exnihiloadditions/registers/EXAItems.java | 10 +- 23 files changed, 448 insertions(+), 147 deletions(-) create mode 100644 src/main/java/com/rempler/exnihiloadditions/data/ModCompatData.java diff --git a/build.gradle b/build.gradle index eec657a..5938e48 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ plugins { boolean enableJEI = true boolean enableEMI = true -boolean enableTFC = false +boolean enableTFC = true boolean enableREI = false apply plugin: 'org.spongepowered.mixin' @@ -166,10 +166,19 @@ dependencies { runtimeOnly fg.deobf("me.shedaniel:RoughlyEnoughItems-forge:12.1.785") } - runtimeOnly fg.deobf("aether") - runtimeOnly fg.deobf("bop") - runtimeOnly fg.deobf("blue_skies") - runtimeOnly fg.deobf("ars_nouveau") + //Aether + runtimeOnly fg.deobf("curse.maven:aether-255308:6134920") + + //BOP + runtimeOnly fg.deobf("curse.maven:terrablender-563928:6290448") + runtimeOnly fg.deobf("curse.maven:glitchcore-955399:5787839") + runtimeOnly fg.deobf("curse.maven:bop-220318:6364065") + + //Blue Skies + runtimeOnly fg.deobf("curse.maven:structure_gel-378802:5278429") + runtimeOnly fg.deobf("curse.maven:blue_skies-312918:5010316") + + runtimeOnly fg.deobf("curse.maven:ars_nouveau-401955:5894609") } diff --git a/src/generated/resources/assets/exnihiloadditions/lang/en_us.json b/src/generated/resources/assets/exnihiloadditions/lang/en_us.json index ab6d05d..9699da4 100644 --- a/src/generated/resources/assets/exnihiloadditions/lang/en_us.json +++ b/src/generated/resources/assets/exnihiloadditions/lang/en_us.json @@ -2,18 +2,82 @@ "block.exnihiloadditions.acacia_barrel": "Acacia Barrel", "block.exnihiloadditions.acacia_crucible": "Acacia Crucible", "block.exnihiloadditions.acacia_sieve": "Acacia Sieve", + "block.exnihiloadditions.aether_golden_oak_wooden_crucible": "Golden Oak Wooden Crucible", + "block.exnihiloadditions.aether_skyroot_barrel": "Skyroot Barrel", + "block.exnihiloadditions.aether_skyroot_sieve": "Skyroot Sieve", + "block.exnihiloadditions.aether_skyroot_wooden_crucible": "Skyroot Wooden Crucible", + "block.exnihiloadditions.ars_nouveau_archwood_barrel": "Archwood Barrel", + "block.exnihiloadditions.ars_nouveau_archwood_sieve": "Archwood Sieve", + "block.exnihiloadditions.ars_nouveau_blue_archwood_wooden_crucible": "Blue Archwood Wooden Crucible", + "block.exnihiloadditions.ars_nouveau_green_archwood_wooden_crucible": "Green Archwood Wooden Crucible", + "block.exnihiloadditions.ars_nouveau_purple_archwood_wooden_crucible": "Purple Archwood Wooden Crucible", + "block.exnihiloadditions.ars_nouveau_red_archwood_wooden_crucible": "Red Archwood Wooden Crucible", "block.exnihiloadditions.ash_barrel": "Ash Barrel", "block.exnihiloadditions.ash_crucible": "Ash Crucible", "block.exnihiloadditions.ash_sieve": "Ash Sieve", "block.exnihiloadditions.aspen_barrel": "Aspen Barrel", "block.exnihiloadditions.aspen_crucible": "Aspen Crucible", "block.exnihiloadditions.aspen_sieve": "Aspen Sieve", + "block.exnihiloadditions.biomesoplenty_dead_barrel": "Dead Barrel", + "block.exnihiloadditions.biomesoplenty_dead_sieve": "Dead Sieve", + "block.exnihiloadditions.biomesoplenty_dead_wooden_crucible": "Dead Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_fir_barrel": "Fir Barrel", + "block.exnihiloadditions.biomesoplenty_fir_sieve": "Fir Sieve", + "block.exnihiloadditions.biomesoplenty_fir_wooden_crucible": "Fir Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_hellbark_fired_crucible": "Hellbark Fired Crucible", + "block.exnihiloadditions.biomesoplenty_hellbark_sieve": "Hellbark Sieve", + "block.exnihiloadditions.biomesoplenty_hellbark_stone_barrel": "Hellbark Stone Barrel", + "block.exnihiloadditions.biomesoplenty_jacaranda_barrel": "Jacaranda Barrel", + "block.exnihiloadditions.biomesoplenty_jacaranda_sieve": "Jacaranda Sieve", + "block.exnihiloadditions.biomesoplenty_jacaranda_wooden_crucible": "Jacaranda Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_magic_barrel": "Magic Barrel", + "block.exnihiloadditions.biomesoplenty_magic_sieve": "Magic Sieve", + "block.exnihiloadditions.biomesoplenty_magic_wooden_crucible": "Magic Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_mahogany_barrel": "Mahogany Barrel", + "block.exnihiloadditions.biomesoplenty_mahogany_sieve": "Mahogany Sieve", + "block.exnihiloadditions.biomesoplenty_mahogany_wooden_crucible": "Mahogany Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_palm_barrel": "Palm Barrel", + "block.exnihiloadditions.biomesoplenty_palm_sieve": "Palm Sieve", + "block.exnihiloadditions.biomesoplenty_palm_wooden_crucible": "Palm Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_redwood_barrel": "Redwood Barrel", + "block.exnihiloadditions.biomesoplenty_redwood_sieve": "Redwood Sieve", + "block.exnihiloadditions.biomesoplenty_redwood_wooden_crucible": "Redwood Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_umbran_barrel": "Umbran Barrel", + "block.exnihiloadditions.biomesoplenty_umbran_sieve": "Umbran Sieve", + "block.exnihiloadditions.biomesoplenty_umbran_wooden_crucible": "Umbran Wooden Crucible", + "block.exnihiloadditions.biomesoplenty_willow_barrel": "Willow Barrel", + "block.exnihiloadditions.biomesoplenty_willow_sieve": "Willow Sieve", + "block.exnihiloadditions.biomesoplenty_willow_wooden_crucible": "Willow Wooden Crucible", "block.exnihiloadditions.birch_barrel": "Birch Barrel", "block.exnihiloadditions.birch_crucible": "Birch Crucible", "block.exnihiloadditions.birch_sieve": "Birch Sieve", "block.exnihiloadditions.blackwood_barrel": "Blackwood Barrel", "block.exnihiloadditions.blackwood_crucible": "Blackwood Crucible", "block.exnihiloadditions.blackwood_sieve": "Blackwood Sieve", + "block.exnihiloadditions.blueskies_bluebright_barrel": "Bluebright Barrel", + "block.exnihiloadditions.blueskies_bluebright_sieve": "Bluebright Sieve", + "block.exnihiloadditions.blueskies_bluebright_wooden_crucible": "Bluebright Wooden Crucible", + "block.exnihiloadditions.blueskies_comet_barrel": "Comet Barrel", + "block.exnihiloadditions.blueskies_comet_sieve": "Comet Sieve", + "block.exnihiloadditions.blueskies_comet_wooden_crucible": "Comet Wooden Crucible", + "block.exnihiloadditions.blueskies_crystallized_fired_crucible": "Crystallized Fired Crucible", + "block.exnihiloadditions.blueskies_crystallized_sieve": "Crystallized Sieve", + "block.exnihiloadditions.blueskies_crystallized_stone_barrel": "Crystallized Stone Barrel", + "block.exnihiloadditions.blueskies_dusk_barrel": "Dusk Barrel", + "block.exnihiloadditions.blueskies_dusk_sieve": "Dusk Sieve", + "block.exnihiloadditions.blueskies_dusk_wooden_crucible": "Dusk Wooden Crucible", + "block.exnihiloadditions.blueskies_frostbright_barrel": "Frostbright Barrel", + "block.exnihiloadditions.blueskies_frostbright_sieve": "Frostbright Sieve", + "block.exnihiloadditions.blueskies_frostbright_wooden_crucible": "Frostbright Wooden Crucible", + "block.exnihiloadditions.blueskies_lunar_barrel": "Lunar Barrel", + "block.exnihiloadditions.blueskies_lunar_sieve": "Lunar Sieve", + "block.exnihiloadditions.blueskies_lunar_wooden_crucible": "Lunar Wooden Crucible", + "block.exnihiloadditions.blueskies_maple_barrel": "Maple Barrel", + "block.exnihiloadditions.blueskies_maple_sieve": "Maple Sieve", + "block.exnihiloadditions.blueskies_maple_wooden_crucible": "Maple Wooden Crucible", + "block.exnihiloadditions.blueskies_starlit_barrel": "Starlit Barrel", + "block.exnihiloadditions.blueskies_starlit_sieve": "Starlit Sieve", + "block.exnihiloadditions.blueskies_starlit_wooden_crucible": "Starlit Wooden Crucible", "block.exnihiloadditions.chestnut_barrel": "Chestnut Barrel", "block.exnihiloadditions.chestnut_crucible": "Chestnut Crucible", "block.exnihiloadditions.chestnut_sieve": "Chestnut Sieve", diff --git a/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java b/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java index b285da1..815524a 100644 --- a/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java +++ b/src/main/java/com/rempler/exnihiloadditions/ExNihiloAdditions.java @@ -2,7 +2,6 @@ import com.rempler.exnihiloadditions.api.DefaultItems; import com.rempler.exnihiloadditions.compat.emi.client.EXAEMIClientSetup; -import com.rempler.exnihiloadditions.compat.tfc.EXNATFCBlockEntites; import com.rempler.exnihiloadditions.compat.tfc.EXNATFCBlocks; import com.rempler.exnihiloadditions.compat.tfc.EXNATFCItems; import com.rempler.exnihiloadditions.compat.tfc.client.EXNATFCClientSetup; @@ -15,16 +14,13 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.registries.GameData; import net.minecraftforge.registries.RegisterEvent; -import novamachina.novacore.bootstrap.ForgeBlockEntityTypeRegistry; import novamachina.novacore.bootstrap.ForgeBlockRegistry; import novamachina.novacore.bootstrap.ForgeCreativeModeTabRegistry; import novamachina.novacore.bootstrap.ForgeItemRegistry; import novamachina.novacore.world.item.CreativeModeTabDefinition; import novamachina.novacore.world.item.ItemDefinition; import novamachina.novacore.world.level.block.BlockDefinition; -import novamachina.novacore.world.level.block.BlockEntityTypeDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,8 +35,6 @@ public static ResourceLocation rl(String path) { } public ExNihiloAdditions() { - GameData.unfreezeData(); - DefaultItems.registerItems(); IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); if (isTFCLoaded) { LOGGER.info("TFC is loaded, registering TFC compat"); @@ -50,57 +44,60 @@ public ExNihiloAdditions() { LOGGER.info("EMI is loaded, registering EMI compat"); EXAEMIClientSetup.register(eventBus); } + EXAItems.ITEMS.register(eventBus); + EXABlocks.BLOCKS.register(eventBus); + EXABlockEntities.BLOCK_ENTITIES.register(eventBus); FMLJavaModLoadingContext.get() - .getModEventBus() - .addListener((RegisterEvent event) -> { - if (event.getRegistryKey().equals(BuiltInRegistries.BLOCK.key())) { - ForgeBlockRegistry registry = new ForgeBlockRegistry(); - if (isTFCLoaded) { - for (BlockDefinition definition : EXNATFCBlocks.getDefinitions()) { - registry.register(definition); - } - } - for (BlockDefinition definition : EXABlocks.getDefinitions()) { - registry.register(definition); - } - } - if (event.getRegistryKey().equals(BuiltInRegistries.BLOCK_ENTITY_TYPE.key())) { - ForgeBlockEntityTypeRegistry registry = new ForgeBlockEntityTypeRegistry(); - if (isTFCLoaded) { - for (BlockEntityTypeDefinition definition : EXNATFCBlockEntites.getDefinitions()) { - registry.register(definition); - } - } - for (BlockEntityTypeDefinition definition : EXABlockEntities.getDefinitions()) { + .getModEventBus() + .addListener((RegisterEvent event) -> { + DefaultItems.registerItems(); + if (event.getRegistryKey().equals(BuiltInRegistries.BLOCK.key())) { + ForgeBlockRegistry registry = new ForgeBlockRegistry(); + if (isTFCLoaded) { + for (BlockDefinition definition : EXNATFCBlocks.getDefinitions()) { registry.register(definition); } } - if (event.getRegistryKey().equals(BuiltInRegistries.ITEM.key())) { - ForgeItemRegistry registry = new ForgeItemRegistry(); - if (isTFCLoaded) { - for (BlockDefinition definition : EXNATFCBlocks.getDefinitions()) { - registry.register(definition); - } - for (ItemDefinition definition : EXNATFCItems.getDefinitions()) { - registry.register(definition); - } - } - for (BlockDefinition definition : EXABlocks.getDefinitions()) { + //for (BlockDefinition definition : EXABlocks.getDefinitions()) { + // registry.register(definition); + //} + } + //if (event.getRegistryKey().equals(BuiltInRegistries.BLOCK_ENTITY_TYPE.key())) { + // ForgeBlockEntityTypeRegistry registry = new ForgeBlockEntityTypeRegistry(); + // if (isTFCLoaded) { + // for (BlockEntityTypeDefinition definition : EXNATFCBlockEntites.getDefinitions()) { + // registry.register(definition); + // } + // } + // for (BlockEntityTypeDefinition definition : EXABlockEntities.getDefinitions()) { + // registry.register(definition); + // } + //} + if (event.getRegistryKey().equals(BuiltInRegistries.ITEM.key())) { + ForgeItemRegistry registry = new ForgeItemRegistry(); + if (isTFCLoaded) { + for (BlockDefinition definition : EXNATFCBlocks.getDefinitions()) { registry.register(definition); } - for (ItemDefinition definition : EXAItems.getDefinitions()) { + for (ItemDefinition definition : EXNATFCItems.getDefinitions()) { registry.register(definition); } } - if (event.getRegistryKey().equals(BuiltInRegistries.CREATIVE_MODE_TAB.key())) { - ForgeCreativeModeTabRegistry registry = new ForgeCreativeModeTabRegistry(); - for (CreativeModeTabDefinition definition : EXNACreativeModeTabs.getDefinitions()) { - registry.register(definition); - } + //for (BlockDefinition definition : EXABlocks.getDefinitions()) { + // registry.register(definition); + //} + //for (ItemDefinition definition : EXAItems.getDefinitions()) { + // registry.register(definition); + //} + } + if (event.getRegistryKey().equals(BuiltInRegistries.CREATIVE_MODE_TAB.key())) { + ForgeCreativeModeTabRegistry registry = new ForgeCreativeModeTabRegistry(); + for (CreativeModeTabDefinition definition : EXNACreativeModeTabs.getDefinitions()) { + registry.register(definition); } - }); - GameData.freezeData(); + } + }); } public static class ModIds { diff --git a/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java index 463a17d..13603e2 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/DefaultItems.java @@ -13,11 +13,11 @@ @SuppressWarnings("unused") public class DefaultItems { - public static final EXARegistry CRUCIBLES = new EXARegistry<>("crucibles", "water"); - public static final EXARegistry FIRED_CRUCIBLES = new EXARegistry<>("crucibles", "fired"); - public static final EXARegistry SIEVES = new EXARegistry<>("sieves"); - public static final EXARegistry BARRELS = new EXARegistry<>("barrels"); - public static final EXARegistry STONE_BARRELS = new EXARegistry<>("stone_barrels"); + public static final EXARegistry CRUCIBLES = new EXARegistry<>("wooden_crucible"); + public static final EXARegistry FIRED_CRUCIBLES = new EXARegistry<>("fired_crucible"); + public static final EXARegistry SIEVES = new EXARegistry<>("sieve"); + public static final EXARegistry BARRELS = new EXARegistry<>("barrel"); + public static final EXARegistry STONE_BARRELS = new EXARegistry<>("stone_barrel"); // BOP public static final AbstractWoodBarrels FIR_BARREL = addDefaultWoodBarrel("fir", SoundType.WOOD, ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, false); @@ -107,13 +107,13 @@ public class DefaultItems { private static AbstractWoodBarrels addDefaultWoodBarrel(String name, SoundType soundType, String requiredModId, boolean transparent) { var material = new AbstractWoodBarrels(soundType, 2.0f, false, requiredModId, transparent); - BARRELS.register(name, material); + BARRELS.register(name, material, requiredModId); return material; } private static AbstractStoneBarrels addDefaultStoneBarrel(String name, SoundType soundType, float strength, boolean requiredCorrectTool, String requiredModId, boolean transparent) { var material = new AbstractStoneBarrels(soundType, strength, requiredCorrectTool, requiredModId, transparent); - STONE_BARRELS.register(name, material); + STONE_BARRELS.register(name, material, requiredModId); return material; } @@ -123,19 +123,19 @@ private static AbstractSieves addDefaultSieve(String name, SoundType soundType, private static AbstractSieves addDefaultSieve(String name, SoundType soundType, boolean requiredCorrectTool, String requiredModID, boolean fireproof) { var material = new AbstractSieves(soundType, 2.0f, requiredCorrectTool, requiredModID, fireproof); - SIEVES.register(name, material); + SIEVES.register(name, material, requiredModID); return material; } private static AbstractFiredCrucibles addDefaultLavaCrucible(String name, SoundType soundType, float strength, boolean requiredCorrectTool, String requiredModId, boolean transparent) { var material = new AbstractFiredCrucibles(soundType, strength, requiredCorrectTool, requiredModId, transparent); - FIRED_CRUCIBLES.register(name, material); + FIRED_CRUCIBLES.register(name, material, requiredModId); return material; } private static AbstractWoodCrucibles addDefaultWaterCrucible(String name, SoundType soundType, String requiredModId, boolean transparent) { var material = new AbstractWoodCrucibles(soundType, 1.5f, false, requiredModId, transparent); - CRUCIBLES.register(name, material); + CRUCIBLES.register(name, material, requiredModId); return material; } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java index cec0a73..049456c 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractFiredCrucibleBlock.java @@ -21,7 +21,7 @@ public AbstractFiredCrucibleBlock(Properties properties) { @Nullable public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { - return new FiredCrucibleBlockBlockEntity(EXABlockEntities.FIRED_CRUCIBLE_ENTITY.getType(), pos, state); + return new FiredCrucibleBlockBlockEntity(EXABlockEntities.FIRED_CRUCIBLE_ENTITY.get(), pos, state); } @Nullable diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java index e9ac0be..e30bff9 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractSieveBlock.java @@ -18,6 +18,6 @@ public AbstractSieveBlock(Properties properties) { @Nullable public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { - return new SieveBlockEntity(EXABlockEntities.SIEVE_ENTITY.getType(), pos, state); + return new SieveBlockEntity(EXABlockEntities.SIEVE_ENTITY.get(), pos, state); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java index d5950db..a9dff01 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractStoneBarrelBlock.java @@ -18,7 +18,7 @@ public AbstractStoneBarrelBlock(Properties properties) { } public BlockEntity newBlockEntity(@NonNull BlockPos pos, @NonNull BlockState state) { - return new StoneBarrelBlockEntity(EXABlockEntities.STONE_BARREL_ENTITY.getType(), pos, state); + return new StoneBarrelBlockEntity(EXABlockEntities.STONE_BARREL_ENTITY.get(), pos, state); } public BlockEntityTicker getTicker(Level level, @NonNull BlockState state, @NonNull BlockEntityType type) { diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java index 4898fe3..9b8b3b9 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodBarrelBlock.java @@ -18,7 +18,7 @@ public AbstractWoodBarrelBlock(Properties properties) { } public BlockEntity newBlockEntity(@NonNull BlockPos pos, @NonNull BlockState state) { - return new WoodBarrelBlockEntity(EXABlockEntities.WOODEN_BARREL_ENTITY.getType(), pos, state); + return new WoodBarrelBlockEntity(EXABlockEntities.WOODEN_BARREL_ENTITY.get(), pos, state); } public BlockEntityTicker getTicker(Level level, @NonNull BlockState state, @NonNull BlockEntityType type) { diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java index b7f91dd..58999c3 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/AbstractWoodCrucibleBlock.java @@ -21,7 +21,7 @@ public AbstractWoodCrucibleBlock(Properties properties) { @Nullable public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { - return new WoodCrucibleBlockEntity(EXABlockEntities.WOODEN_CRUCIBLE_ENTITY.getType(), pos, state); + return new WoodCrucibleBlockEntity(EXABlockEntities.WOODEN_CRUCIBLE_ENTITY.get(), pos, state); } @Nullable diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java index 5e298fa..92cdaf0 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractFiredCrucibleBlockEntity.java @@ -2,11 +2,15 @@ import com.rempler.exnihiloadditions.registers.EXABlockEntities; import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import novamachina.exnihilosequentia.world.level.block.entity.FiredCrucibleBlockBlockEntity; public class AbstractFiredCrucibleBlockEntity extends FiredCrucibleBlockBlockEntity { public AbstractFiredCrucibleBlockEntity(BlockPos pos, BlockState state) { - super(EXABlockEntities.FIRED_CRUCIBLE_ENTITY.getType(), pos, state); + this(EXABlockEntities.FIRED_CRUCIBLE_ENTITY.get(), pos, state); + } + public AbstractFiredCrucibleBlockEntity(BlockEntityType entityType, BlockPos pos, BlockState state) { + super(entityType, pos, state); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java index c3ac6f1..02aad79 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractSieveBlockEntity.java @@ -7,6 +7,6 @@ public class AbstractSieveBlockEntity extends SieveBlockEntity { public AbstractSieveBlockEntity(BlockPos pos, BlockState state) { - super(EXABlockEntities.SIEVE_ENTITY.getType(), pos, state); + super(EXABlockEntities.SIEVE_ENTITY.get(), pos, state); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java index 04c7bde..e1419eb 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractStoneBarrelBlockEntity.java @@ -7,6 +7,6 @@ public class AbstractStoneBarrelBlockEntity extends StoneBarrelBlockEntity { public AbstractStoneBarrelBlockEntity(BlockPos pos, BlockState state) { - super(EXABlockEntities.STONE_BARREL_ENTITY.getType(), pos, state); + super(EXABlockEntities.STONE_BARREL_ENTITY.get(), pos, state); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java index eac5acb..4bba2fc 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodBarrelBlockEntity.java @@ -7,6 +7,6 @@ public class AbstractWoodBarrelBlockEntity extends WoodBarrelBlockEntity { public AbstractWoodBarrelBlockEntity(BlockPos pos, BlockState state) { - super(EXABlockEntities.WOODEN_BARREL_ENTITY.getType(), pos, state); + super(EXABlockEntities.WOODEN_BARREL_ENTITY.get(), pos, state); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java index 8a858d9..c8ae853 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/blocks/entities/AbstractWoodCrucibleBlockEntity.java @@ -7,6 +7,6 @@ public class AbstractWoodCrucibleBlockEntity extends WoodCrucibleBlockEntity { public AbstractWoodCrucibleBlockEntity(BlockPos pos, BlockState state) { - super(EXABlockEntities.WOODEN_CRUCIBLE_ENTITY.getType(), pos, state); + super(EXABlockEntities.WOODEN_CRUCIBLE_ENTITY.get(), pos, state); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractItemLike.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractItemLike.java index 1aa4213..8e0550a 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractItemLike.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/AbstractItemLike.java @@ -6,6 +6,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraftforge.registries.RegistryObject; import novamachina.novacore.world.item.ItemDefinition; import novamachina.novacore.world.level.block.BlockDefinition; @@ -15,8 +16,8 @@ public abstract class AbstractItemLike implements ItemLike { public final boolean requiresCorrectTool; public final String requiredModId; - ItemDefinition item; - BlockDefinition block; + RegistryObject item; + RegistryObject block; public AbstractItemLike(SoundType soundType, float strength, boolean requiresCorrectTool, String requiredModId) { this.soundType = soundType; @@ -38,11 +39,11 @@ protected BlockBehaviour.Properties properties() { } public Item getItem() { - return this.item.asItem(); + return this.item.get(); } public Block getBlock() { - return this.block.block(); + return this.block.get(); } @Override diff --git a/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java b/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java index 6f3fa42..6750c7a 100644 --- a/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java +++ b/src/main/java/com/rempler/exnihiloadditions/api/registries/EXARegistry.java @@ -8,15 +8,10 @@ import com.rempler.exnihiloadditions.registers.EXABlocks; import com.rempler.exnihiloadditions.registers.EXAItems; import com.rempler.exnihiloadditions.api.EXAJsonParser; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.data.loading.DatagenModLoader; -import net.minecraftforge.registries.GameData; -import novamachina.novacore.world.item.ItemDefinition; -import org.apache.commons.lang3.text.WordUtils; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -47,7 +42,7 @@ public EXARegistry(String configFolder, String suffix) { } public void search(Function registrar) { - Path configPath = Paths.get("config/"+ ExNihiloAdditions.ModIds.MODID + "/"+configFolder+"/marerials"); + Path configPath = Paths.get("config/"+ ExNihiloAdditions.ModIds.MODID + "/"+configFolder+"/materials/"); if (!DatagenModLoader.isRunningDataGen()) { if (createConfigFolder(configPath)) { @@ -61,7 +56,7 @@ public void search(Function registrar) { JsonObject json = (JsonObject) JsonParser.parseString(Files.readString(path)); I parser = registrar.apply(new EXAJsonParser(json, path, this)); if (parser != null) { - register(file.substring(0, file.length() - 5), parser); + register(file.substring(0, file.length() - 5), parser, parser.requiredModId); } } catch (IOException e) { ExNihiloAdditions.LOGGER.error("Failed to read file: {}", path); @@ -75,23 +70,23 @@ public void search(Function registrar) { } } - public void register(String name, I item) { - String id = name + "_" + suffix; + public void register(String name, I item, String modid) { + String id = modid + "_" + name + "_" + suffix; if (item.block != null) { throw new IllegalStateException(configFolder + "item with name " + name + " already registered: duplicate item"); } - item.block = EXABlocks.BLOCKS.block(WordUtils.capitalizeFully(id.replace("_", " ")), id, item::createBlock); - item.item = EXAItems.ITEMS.item(WordUtils.capitalizeFully(id.replace("_", " ")), id, () -> item.createBlockItem(item.block.block()), ItemDefinition.ItemType.OTHER); + item.block = EXABlocks.BLOCKS.register(id, item::createBlock); + item.item = EXAItems.ITEMS.register(id, () -> item.createBlockItem(item.block.get())); values.add(item); } - public BlockEntityType createBlockEntityType(BlockEntityType.BlockEntitySupplier factory) { + public BlockEntityType createBlockEntityType(BlockEntityType.BlockEntitySupplier factory) { ImmutableSet.Builder validBlocks = ImmutableSet.builder(); - for (I item : values) { - validBlocks.add(item.block.block()); + for (var material : this.values) { + validBlocks.add(material.block.get()); } return new BlockEntityType<>(factory, validBlocks.build(), null); @@ -108,6 +103,7 @@ public Stream stream() { private boolean createConfigFolder(Path path) { File configFolder = path.getParent().toFile(); - return (configFolder.exists() || configFolder.mkdirs()) && configFolder.isDirectory(); + File realFolder = path.toFile(); + return (configFolder.exists() || configFolder.mkdirs()) && (realFolder.exists() || realFolder.mkdirs()) && configFolder.isDirectory(); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/data/EXNADataGenerators.java b/src/main/java/com/rempler/exnihiloadditions/data/EXNADataGenerators.java index 7a5fd9d..cadb652 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/EXNADataGenerators.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/EXNADataGenerators.java @@ -8,6 +8,7 @@ import net.minecraft.data.PackOutput; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.data.loading.DatagenModLoader; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -16,6 +17,9 @@ @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class EXNADataGenerators { + static { + if (DatagenModLoader.isRunningDataGen()) ModCompatData.registerModData(); + } @SubscribeEvent public static void gatherData(@Nonnull final GatherDataEvent event) { DataGenerator generator = event.getGenerator(); diff --git a/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java b/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java index 38f167a..d5f3170 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/EXNALangProvider.java @@ -1,9 +1,15 @@ package com.rempler.exnihiloadditions.data; import com.rempler.exnihiloadditions.ExNihiloAdditions; +import com.rempler.exnihiloadditions.api.DefaultItems; import com.rempler.exnihiloadditions.compat.tfc.EXNATFCBlocks; import net.minecraft.data.PackOutput; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.Block; import novamachina.novacore.data.AbstractLangGenerator; +import novamachina.novacore.world.level.block.BlockDefinition; + +import java.util.Arrays; public class EXNALangProvider extends AbstractLangGenerator { @@ -29,6 +35,30 @@ protected void addTranslations() { if (ExNihiloAdditions.isTFCLoaded) { EXNATFCBlocks.getDefinitions().forEach(this::addBlockName); } + DefaultItems.STONE_BARRELS.forEach(this::addBlockName); + DefaultItems.BARRELS.forEach(this::addBlockName); + DefaultItems.FIRED_CRUCIBLES.forEach(this::addBlockName); + DefaultItems.CRUCIBLES.forEach(this::addBlockName); + DefaultItems.SIEVES.forEach(this::addBlockName); + } + + + protected void addBlockName(ItemLike definition) { + this.add(getNameFromItemLike(definition), convertItemToName(definition)); + } + + private String convertItemToName(ItemLike itemLike) { + String name = getNameFromItemLike(itemLike); + if (name.contains("ars_nouveau")) { + name = name.replace("ars_nouveau_", "ars_"); + } + name = name.split("_", 2)[1]; + return properNaming(name); } + private String getNameFromItemLike(ItemLike itemLike) { + String name = itemLike.asItem().getDescription().toString().replace("translation{key='", "") + .replace("', args=[]}", ""); + return name; + } } diff --git a/src/main/java/com/rempler/exnihiloadditions/data/ModCompatData.java b/src/main/java/com/rempler/exnihiloadditions/data/ModCompatData.java new file mode 100644 index 0000000..5f47988 --- /dev/null +++ b/src/main/java/com/rempler/exnihiloadditions/data/ModCompatData.java @@ -0,0 +1,191 @@ +package com.rempler.exnihiloadditions.data; + +import com.rempler.exnihiloadditions.ExNihiloAdditions; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraftforge.data.loading.DatagenModLoader; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +import java.util.HashMap; +import java.util.Map; + +public class ModCompatData { + private static final Map> itemRegistries = new HashMap<>(); + private static final Map> blockRegistries = new HashMap<>(); + + private static RegistryObject item(String modid, String name) { + if (DatagenModLoader.isRunningDataGen()) { + DeferredRegister registry = itemRegistries.computeIfAbsent(modid, key -> DeferredRegister.create(Registries.ITEM, key)); + return registry.register(name, () -> new Item(new Item.Properties())); + } else { + return null; + } + } + + private static RegistryObject block(String modid, String name) { + if (DatagenModLoader.isRunningDataGen()) { + DeferredRegister registry = blockRegistries.computeIfAbsent(modid, key -> DeferredRegister.create(Registries.BLOCK, key)); + return registry.register(name, () -> new Block(BlockBehaviour.Properties.of())); + } else { + return null; + } + } + + // Biomes O' Plenty + public static final RegistryObject + FIR_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "fir_planks"), + REDWOOD_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "redwood_planks"), + MAHOGANY_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "mahogany_planks"), + JACARANDA_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "jacaranda_planks"), + PALM_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "palm_planks"), + WILLOW_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "willow_planks"), + DEAD_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "dead_planks"), + MAGIC_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "magic_planks"), + UMBRAN_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "umbran_planks"), + HELLBARK_PLANKS = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "hellbark_planks"), + FIR_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "fir_log"), + REDWOOD_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "redwood_log"), + MAHOGANY_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "mahogany_log"), + JACARANDA_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "jacaranda_log"), + PALM_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "palm_log"), + WILLOW_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "willow_log"), + DEAD_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "dead_log"), + MAGIC_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "magic_log"), + UMBRAN_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "umbran_log"), + HELLBARK_LOG = block(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "hellbark_log"); + public static final RegistryObject + FIR_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "fir_planks"), + REDWOOD_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "redwood_planks"), + MAHOGANY_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "mahogany_planks"), + JACARANDA_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "jacaranda_planks"), + PALM_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "palm_planks"), + WILLOW_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "willow_planks"), + DEAD_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "dead_planks"), + MAGIC_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "magic_planks"), + UMBRAN_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "umbran_planks"), + HELLBARK_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "hellbark_planks"), + FIR_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "fir_slab"), + REDWOOD_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "redwood_slab"), + MAHOGANY_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "mahogany_slab"), + JACARANDA_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "jacaranda_slab"), + PALM_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "palm_slab"), + WILLOW_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "willow_slab"), + DEAD_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "dead_slab"), + MAGIC_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "magic_slab"), + UMBRAN_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "umbran_slab"), + HELLBARK_SLAB = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "hellbark_slab"), + FIR_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "fir_log"), + REDWOOD_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "redwood_log"), + MAHOGANY_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "mahogany_log"), + JACARANDA_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "jacaranda_log"), + PALM_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "palm_log"), + WILLOW_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "willow_log"), + DEAD_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "dead_log"), + MAGIC_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "magic_log"), + UMBRAN_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "umbran_log"), + HELLBARK_LOG_ITEM = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "hellbark_log"), + ORIGIN_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "origin_sapling"), + FLOWERING_OAK_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "flowering_oak_sapling"), + SNOWBLOSSOM_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "snowblossom_sapling"), + RAINBOW_BIRCH_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "rainbow_birch_sapling"), + YELLOW_AUTUMN_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "yellow_autumn_sapling"), + ORANGE_AUTUMN_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "orange_autumn_sapling"), + MAPLE_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "maple_sapling"), + FIR_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "fir_sapling"), + REDWOOD_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "redwood_sapling"), + MAHOGANY_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "mahogany_sapling"), + JACARANDA_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "jacaranda_sapling"), + PALM_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "palm_sapling"), + WILLOW_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "willow_sapling"), + DEAD_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "dead_sapling"), + MAGIC_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "magic_sapling"), + UMBRAN_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "umbran_sapling"), + HELLBARK_SAPLING = item(ExNihiloAdditions.ModIds.BIOMES_O_PLENTY, "hellbark_sapling"); + // Ars Nouveau + public static final RegistryObject + CASCADING_ARCHWOOD_LOG = block(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "blue_archwood_log"), + BLAZING_ARCHWOOD_LOG = block(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "red_archwood_log"), + VEXING_ARCHWOOD_LOG = block(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "purple_archwood_log"), + FLOURISHING_ARCHWOOD_LOG = block(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "green_archwood_log"), + ARCHWOOD_PLANKS = block(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "archwood_planks"); + public static final RegistryObject + BLUE_ARCHWOOD_SAPLING = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "blue_archwood_sapling"), + RED_ARCHWOOD_SAPLING = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "red_archwood_sapling"), + PURPLE_ARCHWOOD_SAPLING = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "purple_archwood_sapling"), + GREEN_ARCHWOOD_SAPLING = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "green_archwood_sapling"), + SOURCEBERRY = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "sourceberry_bush"), + CASCADING_ARCHWOOD_LOG_ITEM = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "blue_archwood_log"), + BLAZING_ARCHWOOD_LOG_ITEM = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "red_archwood_log"), + VEXING_ARCHWOOD_LOG_ITEM = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "purple_archwood_log"), + FLOURISHING_ARCHWOOD_LOG_ITEM = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "green_archwood_log"), + ARCHWOOD_SLAB = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "archwood_slab"), + ARCHWOOD_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.ARS_NOUVEAU, "archwood_planks"); + // Aether + public static final RegistryObject + SKYROOT_PLANKS = block(ExNihiloAdditions.ModIds.AETHER, "skyroot_planks"), + SKYROOT_LOG = block(ExNihiloAdditions.ModIds.AETHER, "skyroot_log"), + GOLDEN_OAK_LOG = block(ExNihiloAdditions.ModIds.AETHER, "golden_oak_log"); + public static final RegistryObject + SKYROOT_SLAB = item(ExNihiloAdditions.ModIds.AETHER, "skyroot_slab"), + SKYROOT_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.AETHER, "skyroot_planks"), + GOLDEN_OAK_LOG_ITEM = item(ExNihiloAdditions.ModIds.AETHER, "golden_oak_log"), + SKYROOT_LOG_ITEM = item(ExNihiloAdditions.ModIds.AETHER, "skyroot_log"); + // Blue Skies + public static final RegistryObject + BLUEBRIGHT_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "bluebright_planks"), + STARLIT_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "starlit_planks"), + FROSTBRIGHT_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "frostbright_planks"), + COMET_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "comet_planks"), + LUNAR_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "lunar_planks"), + DUSK_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "dusk_planks"), + MAPLE_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "maple_planks"), + CRYSTALLIZED_PLANKS = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "crystallized_planks"), + BLUEBRIGHT_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "bluebright_log"), + STARLIT_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "starlit_log"), + FROSTBRIGHT_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "frostbright_log"), + COMET_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "comet_log"), + LUNAR_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "lunar_log"), + DUSK_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "dusk_log"), + MAPLE_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "maple_log"), + CRYSTALLIZED_LOG = block(ExNihiloAdditions.ModIds.BLUE_SKIES, "crystallized_log"); + public static final RegistryObject + BLUEBRIGHT_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "bluebright_planks"), + STARLIT_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "starlit_planks"), + FROSTBRIGHT_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "frostbright_planks"), + COMET_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "comet_planks"), + LUNAR_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "lunar_planks"), + DUSK_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "dusk_planks"), + MAPLE_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "maple_planks"), + CRYSTALLIZED_PLANKS_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "crystallized_planks"), + BLUEBRIGHT_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "bluebright_slab"), + STARLIT_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "starlit_slab"), + FROSTBRIGHT_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "frostbright_slab"), + COMET_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "comet_slab"), + LUNAR_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "lunar_slab"), + DUSK_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "dusk_slab"), + MAPLE_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "maple_slab"), + CRYSTALLIZED_SLAB = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "crystallized_slab"), + BLUEBRIGHT_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "bluebright_log"), + STARLIT_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "starlit_log"), + FROSTBRIGHT_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "frostbright_log"), + COMET_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "comet_log"), + LUNAR_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "lunar_log"), + DUSK_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "dusk_log"), + MAPLE_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "maple_log"), + CRYSTALLIZED_LOG_ITEM = item(ExNihiloAdditions.ModIds.BLUE_SKIES, "crystallized_log"); + + public static void registerModData() { + var modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + for (var registry : itemRegistries.values()) { + registry.register(modBus); + } + for (var registry : blockRegistries.values()) { + registry.register(modBus); + } + } +} diff --git a/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java b/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java index 7c55cfe..08e61b8 100644 --- a/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java +++ b/src/main/java/com/rempler/exnihiloadditions/data/recipe/tfc/EXNATFCRecipes.java @@ -13,6 +13,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; +import net.minecraftforge.common.crafting.ConditionalRecipe; import novamachina.exnihilosequentia.data.recipes.SiftingRecipeBuilder; import novamachina.exnihilosequentia.world.item.MeshType; import novamachina.exnihilosequentia.world.item.crafting.MeshWithChance; @@ -24,6 +25,8 @@ import java.util.function.Consumer; +import static com.rempler.exnihiloadditions.data.recipe.EXNARecipeHelper.modLoaded; + public class EXNATFCRecipes { private static final String modid = "tfc"; @@ -74,22 +77,39 @@ public static void createOreRecipes(Consumer consumer) { } else if (ore.name().equals("AMETHYST")) { createOreToTFC(consumer, ore, Items.AMETHYST_SHARD); } else { - Item input = Items.GRAVEL; if (ore.isGraded()) { - SiftingRecipeBuilder.sifting(input, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/poor_" + ore.name().toLowerCase()))) - .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + ConditionalRecipe.builder().addCondition(modLoaded(modid)) + .addRecipe(recipe -> + SiftingRecipeBuilder.sifting(Items.GRAVEL, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/poor_" + ore.name().toLowerCase()))) + .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + .build(recipe, ExNihiloAdditions.rl(modid+"/sifting/poor/" + ore.name().toLowerCase())) + ) + .generateAdvancement() .build(consumer, ExNihiloAdditions.rl(modid+"/sifting/poor/" + ore.name().toLowerCase())); - input = Items.SAND; - SiftingRecipeBuilder.sifting(input, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/normal_" + ore.name().toLowerCase()))) - .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + ConditionalRecipe.builder().addCondition(modLoaded(modid)) + .addRecipe(recipe -> + SiftingRecipeBuilder.sifting(Items.SAND, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/normal_" + ore.name().toLowerCase()))) + .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + .build(recipe, ExNihiloAdditions.rl(modid+"/sifting/normal/" + ore.name().toLowerCase())) + ) + .generateAdvancement() .build(consumer, ExNihiloAdditions.rl(modid+"/sifting/normal/" + ore.name().toLowerCase())); - input = EXNBlocks.DUST.asItem(); - SiftingRecipeBuilder.sifting(input, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/rich_" + ore.name().toLowerCase()))) - .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + ConditionalRecipe.builder().addCondition(modLoaded(modid)) + .addRecipe(recipe -> + SiftingRecipeBuilder.sifting(EXNBlocks.DUST.asItem(), BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/rich_" + ore.name().toLowerCase()))) + .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + .build(recipe, ExNihiloAdditions.rl(modid+"/sifting/rich/" + ore.name().toLowerCase())) + ) + .generateAdvancement() .build(consumer, ExNihiloAdditions.rl(modid+"/sifting/rich/" + ore.name().toLowerCase())); } else { - SiftingRecipeBuilder.sifting(input, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/" + ore.name().toLowerCase()))) - .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + ConditionalRecipe.builder().addCondition(modLoaded(modid)) + .addRecipe(recipe -> + SiftingRecipeBuilder.sifting(Items.GRAVEL, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "ore/" + ore.name().toLowerCase()))) + .addRoll(new MeshWithChance(MeshType.FLINT, 0.1f)) + .build(recipe, ExNihiloAdditions.rl(modid+"/sifting/" + ore.name().toLowerCase())) + ) + .generateAdvancement() .build(consumer, ExNihiloAdditions.rl(modid+"/sifting/" + ore.name().toLowerCase())); } } @@ -97,11 +117,15 @@ public static void createOreRecipes(Consumer consumer) { } private static void createOreToTFC(Consumer consumer, Ore ore, Item item) { - ExNihiloAdditions.LOGGER.info(ore.name().toLowerCase()); - ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "gem/" + ore.name().toLowerCase()))) - .requires(item) - .requires(TFCItems.SANDPAPER.get()) - .unlockedBy("has_sandpaper", InventoryChangeTrigger.TriggerInstance.hasItems(TFCItems.SANDPAPER.get())) - .save(consumer, new ResourceLocation(ExNihiloAdditions.MODID, modid+"/sandpaper/vanilla_to_tfc_"+ore.name().toLowerCase())); + ConditionalRecipe.builder().addCondition(modLoaded(modid)) + .addRecipe(recipe -> + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, BuiltInRegistries.ITEM.get(new ResourceLocation(modid, "gem/" + ore.name().toLowerCase()))) + .requires(item) + .requires(TFCItems.SANDPAPER.get()) + .unlockedBy("has_sandpaper", InventoryChangeTrigger.TriggerInstance.hasItems(TFCItems.SANDPAPER.get())) + .save(recipe, new ResourceLocation(ExNihiloAdditions.ModIds.MODID, modid+"/sandpaper/vanilla_to_tfc_"+ore.name().toLowerCase())) + ) + .generateAdvancement() + .build(consumer, new ResourceLocation(ExNihiloAdditions.ModIds.MODID, modid+"/sandpaper/vanilla_to_tfc_"+ore.name().toLowerCase())); } } diff --git a/src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java index af4ec1f..bda453c 100644 --- a/src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java +++ b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlockEntities.java @@ -7,37 +7,17 @@ import com.rempler.exnihiloadditions.api.blocks.entities.AbstractStoneBarrelBlockEntity; import com.rempler.exnihiloadditions.api.blocks.entities.AbstractWoodBarrelBlockEntity; import com.rempler.exnihiloadditions.api.blocks.entities.AbstractWoodCrucibleBlockEntity; -import net.minecraft.world.level.block.entity.BlockEntity; -import novamachina.exnihilosequentia.world.level.block.entity.FiredCrucibleBlockBlockEntity; -import novamachina.exnihilosequentia.world.level.block.entity.SieveBlockEntity; -import novamachina.exnihilosequentia.world.level.block.entity.StoneBarrelBlockEntity; -import novamachina.exnihilosequentia.world.level.block.entity.WoodBarrelBlockEntity; -import novamachina.novacore.core.registries.BlockEntityTypeRegistry; -import novamachina.novacore.world.level.block.BlockEntityTypeDefinition; - -import javax.annotation.Nonnull; -import java.util.List; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; public class EXABlockEntities { - public static final BlockEntityTypeRegistry BLOCK_ENTITY_TYPES = new BlockEntityTypeRegistry(ExNihiloAdditions.ModIds.MODID); - - @Nonnull - public static BlockEntityTypeDefinition WOODEN_CRUCIBLE_ENTITY = - BLOCK_ENTITY_TYPES.create("crucibles", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.CRUCIBLES.createBlockEntityType(AbstractWoodCrucibleBlockEntity::new)); - @Nonnull - public static BlockEntityTypeDefinition FIRED_CRUCIBLE_ENTITY = - BLOCK_ENTITY_TYPES.create("fired_crucibles", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.FIRED_CRUCIBLES.createBlockEntityType(AbstractFiredCrucibleBlockEntity::new)); - @Nonnull - public static BlockEntityTypeDefinition WOODEN_BARREL_ENTITY = - BLOCK_ENTITY_TYPES.create("wooden_barrels", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.BARRELS.createBlockEntityType(AbstractWoodBarrelBlockEntity::new)); - @Nonnull - public static BlockEntityTypeDefinition STONE_BARREL_ENTITY = - BLOCK_ENTITY_TYPES.create("stone_barrels", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.STONE_BARRELS.createBlockEntityType(AbstractStoneBarrelBlockEntity::new)); - @Nonnull - public static BlockEntityTypeDefinition SIEVE_ENTITY = - BLOCK_ENTITY_TYPES.create("sieves", (BlockEntityTypeRegistry.BlockEntityFactory) DefaultItems.SIEVES.createBlockEntityType(AbstractSieveBlockEntity::new)); + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ExNihiloAdditions.ModIds.MODID); - public static List> getDefinitions() { - return BLOCK_ENTITY_TYPES.getRegistry(); - } + public static final RegistryObject> FIRED_CRUCIBLE_ENTITY = BLOCK_ENTITIES.register("fired_crucible", () -> DefaultItems.FIRED_CRUCIBLES.createBlockEntityType(AbstractFiredCrucibleBlockEntity::new)); + public static final RegistryObject> WOODEN_CRUCIBLE_ENTITY = BLOCK_ENTITIES.register("crucible", () -> DefaultItems.CRUCIBLES.createBlockEntityType(AbstractWoodCrucibleBlockEntity::new)); + public static final RegistryObject> WOODEN_BARREL_ENTITY = BLOCK_ENTITIES.register("barrel", () -> DefaultItems.BARRELS.createBlockEntityType(AbstractWoodBarrelBlockEntity::new)); + public static final RegistryObject> STONE_BARREL_ENTITY = BLOCK_ENTITIES.register("stone_barrel", () -> DefaultItems.STONE_BARRELS.createBlockEntityType(AbstractStoneBarrelBlockEntity::new)); + public static final RegistryObject> SIEVE_ENTITY = BLOCK_ENTITIES.register("sieve", () -> DefaultItems.SIEVES.createBlockEntityType(AbstractSieveBlockEntity::new)); } diff --git a/src/main/java/com/rempler/exnihiloadditions/registers/EXABlocks.java b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlocks.java index 8c96676..c0cdf18 100644 --- a/src/main/java/com/rempler/exnihiloadditions/registers/EXABlocks.java +++ b/src/main/java/com/rempler/exnihiloadditions/registers/EXABlocks.java @@ -1,15 +1,16 @@ package com.rempler.exnihiloadditions.registers; import com.rempler.exnihiloadditions.ExNihiloAdditions; +import com.rempler.exnihiloadditions.api.blocks.AbstractWoodCrucibleBlock; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; import novamachina.novacore.core.registries.BlockRegistry; import novamachina.novacore.world.level.block.BlockDefinition; import java.util.List; public class EXABlocks { - public static final BlockRegistry BLOCKS = new BlockRegistry(ExNihiloAdditions.ModIds.MODID); - - public static List> getDefinitions() { - return BLOCKS.getRegistry(); - } + public static final DeferredRegister BLOCKS = DeferredRegister.create(BuiltInRegistries.BLOCK.key(), ExNihiloAdditions.ModIds.MODID); } diff --git a/src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java b/src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java index de455d0..b981da9 100644 --- a/src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java +++ b/src/main/java/com/rempler/exnihiloadditions/registers/EXAItems.java @@ -1,15 +1,15 @@ package com.rempler.exnihiloadditions.registers; import com.rempler.exnihiloadditions.ExNihiloAdditions; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; import novamachina.novacore.core.registries.ItemRegistry; import novamachina.novacore.world.item.ItemDefinition; import java.util.List; public class EXAItems { - public static final ItemRegistry ITEMS = new ItemRegistry(ExNihiloAdditions.ModIds.MODID); - - public static List> getDefinitions() { - return ITEMS.getRegistry(); - } + public static final DeferredRegister ITEMS = DeferredRegister.create(BuiltInRegistries.ITEM.key(), ExNihiloAdditions.ModIds.MODID); }