diff --git a/src/generated/resources/data/exdeorum/tags/items/wooden_barrels.json b/src/generated/resources/data/exdeorum/tags/items/wooden_barrels.json index 0d8de545..73bc0ae8 100644 --- a/src/generated/resources/data/exdeorum/tags/items/wooden_barrels.json +++ b/src/generated/resources/data/exdeorum/tags/items/wooden_barrels.json @@ -9,6 +9,8 @@ "exdeorum:mangrove_barrel", "exdeorum:cherry_barrel", "exdeorum:bamboo_barrel", + "exdeorum:crimson_barrel", + "exdeorum:warped_barrel", "exdeorum:fir_barrel", "exdeorum:redwood_barrel", "exdeorum:mahogany_barrel", diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index f099f9da..12210294 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -1,12 +1,12 @@ { "values": [ - "exdeorum:stone_barrel", "exdeorum:porcelain_crucible", "exdeorum:unfired_porcelain_crucible", - "exdeorum:crystallized_barrel", "exdeorum:crystallized_crucible", "exdeorum:crystallized_sieve", "exdeorum:mechanical_sieve", - "exdeorum:mechanical_hammer" + "exdeorum:mechanical_hammer", + "exdeorum:stone_barrel", + "exdeorum:crystallized_barrel" ] } \ No newline at end of file diff --git a/src/main/java/thedarkcolour/exdeorum/ExDeorum.java b/src/main/java/thedarkcolour/exdeorum/ExDeorum.java index 9f3dfc7f..5b63fadb 100644 --- a/src/main/java/thedarkcolour/exdeorum/ExDeorum.java +++ b/src/main/java/thedarkcolour/exdeorum/ExDeorum.java @@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory; import thedarkcolour.exdeorum.client.ClientHandler; import thedarkcolour.exdeorum.config.EConfig; import thedarkcolour.exdeorum.event.EventHandler; +import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.network.NetworkHandler; import thedarkcolour.exdeorum.registry.EBlockEntities; import thedarkcolour.exdeorum.registry.EBlocks; @@ -76,8 +77,8 @@ public class ExDeorum { private static void createRegistries() { var modBus = FMLJavaModLoadingContext.get().getModEventBus(); - EBlockEntities.BLOCK_ENTITIES.register(modBus); EBlocks.BLOCKS.register(modBus); + EBlockEntities.BLOCK_ENTITIES.register(modBus); EChunkGenerators.CHUNK_GENERATORS.register(modBus); ECreativeTabs.CREATIVE_TABS.register(modBus); EFluids.FLUID_TYPES.register(modBus); @@ -88,6 +89,7 @@ public class ExDeorum { EMenus.MENUS.register(modBus); ERecipeSerializers.RECIPE_SERIALIZERS.register(modBus); ERecipeTypes.RECIPE_TYPES.register(modBus); + DefaultMaterials.registerMaterials(); } private interface ClientHandlerRegistrar { diff --git a/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java b/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java index bf744806..00956d5d 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java +++ b/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java @@ -361,7 +361,7 @@ public class CompostColors { // The given list should be sorted private static void export(String modid, List sortedToExport) { try { - if (createConfigFolder()) { + if (createConfigFolder(COMPOST_COLORS_CONFIGS)) { var path = COMPOST_COLORS_CONFIGS.resolve(modid + ".txt"); var file = path.toFile(); @@ -397,9 +397,9 @@ public class CompostColors { } } - private static boolean createConfigFolder() { - var colorsFolder = COMPOST_COLORS_CONFIGS.toFile(); - var configFolder = COMPOST_COLORS_CONFIGS.getParent().toFile(); + public static boolean createConfigFolder(Path configPath) { + var colorsFolder = configPath.toFile(); + var configFolder = configPath.getParent().toFile(); return (configFolder.exists() || configFolder.mkdir()) && (colorsFolder.exists() || colorsFolder.mkdir()); } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/CompatHelper.java b/src/main/java/thedarkcolour/exdeorum/compat/CompatHelper.java index 121c653a..5d57075d 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/CompatHelper.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/CompatHelper.java @@ -21,6 +21,7 @@ package thedarkcolour.exdeorum.compat; import com.google.common.collect.Lists; import net.minecraft.world.item.Item; import net.minecraftforge.fml.ModList; +import thedarkcolour.exdeorum.material.BarrelMaterial; import thedarkcolour.exdeorum.registry.EItems; import java.util.ArrayList; @@ -28,39 +29,12 @@ import java.util.List; public class CompatHelper { public static List getAvailableBarrels(boolean registered) { - // Vanilla barrels - List barrels = registered ? Lists.newArrayList(EItems.OAK_BARREL.get(), EItems.SPRUCE_BARREL.get(), EItems.BIRCH_BARREL.get(), EItems.JUNGLE_BARREL.get(), EItems.ACACIA_BARREL.get(), EItems.DARK_OAK_BARREL.get(), EItems.MANGROVE_BARREL.get(), EItems.CHERRY_BARREL.get(), EItems.BAMBOO_BARREL.get(), EItems.CRIMSON_BARREL.get(), EItems.WARPED_BARREL.get(), EItems.STONE_BARREL.get()) : new ArrayList<>(); - ModList mods = ModList.get(); - - if (mods.isLoaded(ModIds.BIOMES_O_PLENTY) == registered) { - barrels.add(EItems.FIR_BARREL.get()); - barrels.add(EItems.REDWOOD_BARREL.get()); - barrels.add(EItems.MAHOGANY_BARREL.get()); - barrels.add(EItems.JACARANDA_BARREL.get()); - barrels.add(EItems.PALM_BARREL.get()); - barrels.add(EItems.WILLOW_BARREL.get()); - barrels.add(EItems.DEAD_BARREL.get()); - barrels.add(EItems.MAGIC_BARREL.get()); - barrels.add(EItems.UMBRAN_BARREL.get()); - barrels.add(EItems.HELLBARK_BARREL.get()); + List barrels = new ArrayList<>(); + for (var material : BarrelMaterial.REGISTERED_MATERIALS) { + if (registered == ModList.get().isLoaded(material.requiredModId)) { + barrels.add(material.getItem()); + } } - if (mods.isLoaded(ModIds.ARS_NOUVEAU) == registered) { - barrels.add(EItems.ARCHWOOD_BARREL.get()); - } - if (mods.isLoaded(ModIds.AETHER) == registered) { - barrels.add(EItems.SKYROOT_BARREL.get()); - } - if (mods.isLoaded(ModIds.BLUE_SKIES) == registered) { - barrels.add(EItems.BLUEBRIGHT_BARREL.get()); - barrels.add(EItems.STARLIT_BARREL.get()); - barrels.add(EItems.FROSTBRIGHT_BARREL.get()); - barrels.add(EItems.COMET_BARREL.get()); - barrels.add(EItems.LUNAR_BARREL.get()); - barrels.add(EItems.DUSK_BARREL.get()); - barrels.add(EItems.MAPLE_BARREL.get()); - barrels.add(EItems.CRYSTALLIZED_BARREL.get()); - } - return barrels; } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelCompostCategory.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelCompostCategory.java index 30d3de77..512644ce 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelCompostCategory.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelCompostCategory.java @@ -33,8 +33,8 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import thedarkcolour.exdeorum.client.ClientHandler; import thedarkcolour.exdeorum.data.TranslationKeys; +import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.recipe.barrel.BarrelCompostRecipe; -import thedarkcolour.exdeorum.registry.EItems; class BarrelCompostCategory implements IRecipeCategory { public static final int WIDTH = 120; @@ -88,7 +88,7 @@ class BarrelCompostCategory implements IRecipeCategory { } private static class DrawableIcon implements IDrawable { - private final ItemStack oakBarrel = new ItemStack(EItems.OAK_BARREL.get()); + private final ItemStack oakBarrel = new ItemStack(DefaultMaterials.OAK_BARREL.getItem()); @Override public int getWidth() { diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java index 64ee4b46..f4b49789 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java @@ -33,9 +33,9 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import thedarkcolour.exdeorum.data.TranslationKeys; +import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.recipe.barrel.BarrelFluidMixingRecipe; import thedarkcolour.exdeorum.recipe.barrel.BarrelMixingRecipe; -import thedarkcolour.exdeorum.registry.EItems; public abstract class BarrelMixingCategory implements IRecipeCategory { public static final int WIDTH = 120; @@ -83,7 +83,7 @@ public abstract class BarrelMixingCategory implements IRecipeCategory { public static class Items extends BarrelMixingCategory { public Items(IGuiHelper helper, IDrawable plus, IDrawable arrow) { - super(helper, plus, arrow, TranslationKeys.BARREL_MIXING_CATEGORY_TITLE, EItems.OAK_BARREL.get()); + super(helper, plus, arrow, TranslationKeys.BARREL_MIXING_CATEGORY_TITLE, DefaultMaterials.OAK_BARREL.getItem()); } @Override @@ -103,7 +103,7 @@ public abstract class BarrelMixingCategory implements IRecipeCategory { private static final Component CONTENTS_ARE_CONSUMED_TOOLTIP = Component.translatable(TranslationKeys.BARREL_FLUID_MIXING_CONTENTS_ARE_CONSUMED).withStyle(ChatFormatting.RED); public Fluids(IGuiHelper helper, IDrawable plus, IDrawable arrow) { - super(helper, plus, arrow, TranslationKeys.BARREL_FLUID_MIXING_CATEGORY_TITLE, EItems.STONE_BARREL.get()); + super(helper, plus, arrow, TranslationKeys.BARREL_FLUID_MIXING_CATEGORY_TITLE, DefaultMaterials.STONE_BARREL.getItem()); } @Override diff --git a/src/main/java/thedarkcolour/exdeorum/data/Advancements.java b/src/main/java/thedarkcolour/exdeorum/data/Advancements.java index c4e8d01d..963d3ad4 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/Advancements.java +++ b/src/main/java/thedarkcolour/exdeorum/data/Advancements.java @@ -29,6 +29,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.common.data.ForgeAdvancementProvider; import thedarkcolour.exdeorum.ExDeorum; +import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.registry.EItems; import thedarkcolour.exdeorum.tag.EItemTags; @@ -83,7 +84,7 @@ class Advancements extends ForgeAdvancementProvider { var barrel = advancement() .parent(root) .display( - EItems.OAK_BARREL.get(), + DefaultMaterials.OAK_BARREL.getItem(), Component.translatable(TranslationKeys.BARREL_ADVANCEMENT_TITLE), Component.translatable(TranslationKeys.BARREL_ADVANCEMENT_DESCRIPTION), null, diff --git a/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java b/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java index f68429b4..ba13af9d 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java +++ b/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java @@ -24,11 +24,11 @@ import net.minecraft.world.level.block.Blocks; import net.minecraftforge.client.model.generators.BlockModelBuilder; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.registries.ForgeRegistries; +import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.registry.EBlocks; import thedarkcolour.modkit.data.MKBlockModelProvider; import java.util.Objects; -import java.util.function.Supplier; class BlockModels { public static void addBlockModels(MKBlockModelProvider models) { @@ -39,18 +39,18 @@ class BlockModels { models.simpleBlock(EBlocks.CRUSHED_BLACKSTONE.get()); // Barrels - barrel(models, EBlocks.OAK_BARREL, Blocks.OAK_PLANKS); - barrel(models, EBlocks.SPRUCE_BARREL, Blocks.SPRUCE_PLANKS); - barrel(models, EBlocks.BIRCH_BARREL, Blocks.BIRCH_PLANKS); - barrel(models, EBlocks.JUNGLE_BARREL, Blocks.JUNGLE_PLANKS); - barrel(models, EBlocks.ACACIA_BARREL, Blocks.ACACIA_PLANKS); - barrel(models, EBlocks.DARK_OAK_BARREL, Blocks.DARK_OAK_PLANKS); - barrel(models, EBlocks.MANGROVE_BARREL, Blocks.MANGROVE_PLANKS); - barrel(models, EBlocks.CHERRY_BARREL, Blocks.CHERRY_PLANKS); - barrel(models, EBlocks.BAMBOO_BARREL, Blocks.BAMBOO_PLANKS); - barrel(models, EBlocks.CRIMSON_BARREL, Blocks.CRIMSON_PLANKS); - barrel(models, EBlocks.WARPED_BARREL, Blocks.WARPED_PLANKS); - barrel(models, EBlocks.STONE_BARREL, Blocks.STONE); + barrel(models, DefaultMaterials.OAK_BARREL.getBlock(), Blocks.OAK_PLANKS); + barrel(models, DefaultMaterials.SPRUCE_BARREL.getBlock(), Blocks.SPRUCE_PLANKS); + barrel(models, DefaultMaterials.BIRCH_BARREL.getBlock(), Blocks.BIRCH_PLANKS); + barrel(models, DefaultMaterials.JUNGLE_BARREL.getBlock(), Blocks.JUNGLE_PLANKS); + barrel(models, DefaultMaterials.ACACIA_BARREL.getBlock(), Blocks.ACACIA_PLANKS); + barrel(models, DefaultMaterials.DARK_OAK_BARREL.getBlock(), Blocks.DARK_OAK_PLANKS); + barrel(models, DefaultMaterials.MANGROVE_BARREL.getBlock(), Blocks.MANGROVE_PLANKS); + barrel(models, DefaultMaterials.CHERRY_BARREL.getBlock(), Blocks.CHERRY_PLANKS); + barrel(models, DefaultMaterials.BAMBOO_BARREL.getBlock(), Blocks.BAMBOO_PLANKS); + barrel(models, DefaultMaterials.CRIMSON_BARREL.getBlock(), Blocks.CRIMSON_PLANKS); + barrel(models, DefaultMaterials.WARPED_BARREL.getBlock(), Blocks.WARPED_PLANKS); + barrel(models, DefaultMaterials.STONE_BARREL.getBlock(), Blocks.STONE); sieve(models, EBlocks.OAK_SIEVE.get(), Blocks.OAK_PLANKS); sieve(models, EBlocks.SPRUCE_SIEVE.get(), Blocks.SPRUCE_PLANKS); @@ -89,7 +89,7 @@ class BlockModels { } private static void arsNouveauModels(MKBlockModelProvider models) { - barrel(models, EBlocks.ARCHWOOD_BARREL, ModCompatData.ARCHWOOD_PLANKS.get()); + barrel(models, DefaultMaterials.ARCHWOOD_BARREL.getBlock(), ModCompatData.ARCHWOOD_PLANKS.get()); sieve(models, EBlocks.ARCHWOOD_SIEVE.get(), ModCompatData.ARCHWOOD_PLANKS.get()); @@ -100,7 +100,7 @@ class BlockModels { } private static void aetherModels(MKBlockModelProvider models) { - barrel(models, EBlocks.SKYROOT_BARREL, ModCompatData.SKYROOT_PLANKS.get(), "construction/"); + barrel(models, DefaultMaterials.SKYROOT_BARREL.getBlock(), ModCompatData.SKYROOT_PLANKS.get(), "construction/"); sieve(models, EBlocks.SKYROOT_SIEVE.get(), ModCompatData.SKYROOT_PLANKS.get(), "construction/"); @@ -112,14 +112,14 @@ class BlockModels { final String woodPrefix = "wood/"; final String logSuffix = "_side"; - barrel(models, EBlocks.BLUEBRIGHT_BARREL, ModCompatData.BLUEBRIGHT_PLANKS.get(), woodPrefix); - barrel(models, EBlocks.STARLIT_BARREL, ModCompatData.STARLIT_PLANKS.get(), woodPrefix); - barrel(models, EBlocks.FROSTBRIGHT_BARREL, ModCompatData.FROSTBRIGHT_PLANKS.get(), woodPrefix); - barrel(models, EBlocks.COMET_BARREL, ModCompatData.COMET_PLANKS.get(), woodPrefix); - barrel(models, EBlocks.LUNAR_BARREL, ModCompatData.LUNAR_PLANKS.get(), woodPrefix); - barrel(models, EBlocks.DUSK_BARREL, ModCompatData.DUSK_PLANKS.get(), woodPrefix); - barrel(models, EBlocks.MAPLE_BARREL, ModCompatData.MAPLE_PLANKS.get(), woodPrefix); - barrel(models, EBlocks.CRYSTALLIZED_BARREL, ModCompatData.CRYSTALLIZED_PLANKS.get(), woodPrefix).renderType("translucent"); + barrel(models, DefaultMaterials.BLUEBRIGHT_BARREL.getBlock(), ModCompatData.BLUEBRIGHT_PLANKS.get(), woodPrefix); + barrel(models, DefaultMaterials.STARLIT_BARREL.getBlock(), ModCompatData.STARLIT_PLANKS.get(), woodPrefix); + barrel(models, DefaultMaterials.FROSTBRIGHT_BARREL.getBlock(), ModCompatData.FROSTBRIGHT_PLANKS.get(), woodPrefix); + barrel(models, DefaultMaterials.COMET_BARREL.getBlock(), ModCompatData.COMET_PLANKS.get(), woodPrefix); + barrel(models, DefaultMaterials.LUNAR_BARREL.getBlock(), ModCompatData.LUNAR_PLANKS.get(), woodPrefix); + barrel(models, DefaultMaterials.DUSK_BARREL.getBlock(), ModCompatData.DUSK_PLANKS.get(), woodPrefix); + barrel(models, DefaultMaterials.MAPLE_BARREL.getBlock(), ModCompatData.MAPLE_PLANKS.get(), woodPrefix); + barrel(models, DefaultMaterials.CRYSTALLIZED_BARREL.getBlock(), ModCompatData.CRYSTALLIZED_PLANKS.get(), woodPrefix).renderType("translucent"); sieve(models, EBlocks.BLUEBRIGHT_SIEVE.get(), ModCompatData.BLUEBRIGHT_PLANKS.get(), woodPrefix); sieve(models, EBlocks.STARLIT_SIEVE.get(), ModCompatData.STARLIT_PLANKS.get(), woodPrefix); @@ -141,16 +141,16 @@ class BlockModels { } private static void bopModels(MKBlockModelProvider models) { - barrel(models, EBlocks.FIR_BARREL, ModCompatData.FIR_PLANKS.get()); - barrel(models, EBlocks.REDWOOD_BARREL, ModCompatData.REDWOOD_PLANKS.get()); - barrel(models, EBlocks.MAHOGANY_BARREL, ModCompatData.MAHOGANY_PLANKS.get()); - barrel(models, EBlocks.JACARANDA_BARREL, ModCompatData.JACARANDA_PLANKS.get()); - barrel(models, EBlocks.PALM_BARREL, ModCompatData.PALM_PLANKS.get()); - barrel(models, EBlocks.WILLOW_BARREL, ModCompatData.WILLOW_PLANKS.get()); - barrel(models, EBlocks.DEAD_BARREL, ModCompatData.DEAD_PLANKS.get()); - barrel(models, EBlocks.MAGIC_BARREL, ModCompatData.MAGIC_PLANKS.get()); - barrel(models, EBlocks.UMBRAN_BARREL, ModCompatData.UMBRAN_PLANKS.get()); - barrel(models, EBlocks.HELLBARK_BARREL, ModCompatData.HELLBARK_PLANKS.get()); + barrel(models, DefaultMaterials.FIR_BARREL.getBlock(), ModCompatData.FIR_PLANKS.get()); + barrel(models, DefaultMaterials.REDWOOD_BARREL.getBlock(), ModCompatData.REDWOOD_PLANKS.get()); + barrel(models, DefaultMaterials.MAHOGANY_BARREL.getBlock(), ModCompatData.MAHOGANY_PLANKS.get()); + barrel(models, DefaultMaterials.JACARANDA_BARREL.getBlock(), ModCompatData.JACARANDA_PLANKS.get()); + barrel(models, DefaultMaterials.PALM_BARREL.getBlock(), ModCompatData.PALM_PLANKS.get()); + barrel(models, DefaultMaterials.WILLOW_BARREL.getBlock(), ModCompatData.WILLOW_PLANKS.get()); + barrel(models, DefaultMaterials.DEAD_BARREL.getBlock(), ModCompatData.DEAD_PLANKS.get()); + barrel(models, DefaultMaterials.MAGIC_BARREL.getBlock(), ModCompatData.MAGIC_PLANKS.get()); + barrel(models, DefaultMaterials.UMBRAN_BARREL.getBlock(), ModCompatData.UMBRAN_PLANKS.get()); + barrel(models, DefaultMaterials.HELLBARK_BARREL.getBlock(), ModCompatData.HELLBARK_PLANKS.get()); sieve(models, EBlocks.FIR_SIEVE.get(), ModCompatData.FIR_PLANKS.get()); sieve(models, EBlocks.REDWOOD_SIEVE.get(), ModCompatData.REDWOOD_PLANKS.get()); @@ -200,12 +200,12 @@ class BlockModels { return new ResourceLocation(key.getNamespace(), "block/" + prefix + key.getPath() + suffix); } - public static void barrel(MKBlockModelProvider models, Supplier block, Block appearance) { + public static void barrel(MKBlockModelProvider models, Block block, Block appearance) { barrel(models, block, appearance, ""); } - public static BlockModelBuilder barrel(MKBlockModelProvider models, Supplier block, Block appearance, String pathPrefix) { - return singleModel(models, block.get()) + public static BlockModelBuilder barrel(MKBlockModelProvider models, Block block, Block appearance, String pathPrefix) { + return singleModel(models, block) .parent(models.modFile("template_barrel")) .texture("barrel", texture(appearance, pathPrefix, "")); } diff --git a/src/main/java/thedarkcolour/exdeorum/data/ModTags.java b/src/main/java/thedarkcolour/exdeorum/data/ModTags.java index 8be05783..1c2d01ed 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/ModTags.java +++ b/src/main/java/thedarkcolour/exdeorum/data/ModTags.java @@ -32,6 +32,8 @@ import net.minecraft.world.level.levelgen.structure.BuiltinStructureSets; import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.material.Fluid; import thedarkcolour.exdeorum.ExDeorum; +import thedarkcolour.exdeorum.material.BarrelMaterial; +import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.registry.EBlocks; import thedarkcolour.exdeorum.registry.EFluids; import thedarkcolour.exdeorum.registry.EItems; @@ -40,7 +42,21 @@ import thedarkcolour.exdeorum.tag.EItemTags; import thedarkcolour.exdeorum.tag.EStructureSetTags; import thedarkcolour.modkit.data.MKTagsProvider; +import java.util.ArrayList; +import java.util.List; + class ModTags { + private static final List STONE_MATERIALS = List.of(DefaultMaterials.STONE_BARREL, DefaultMaterials.CRYSTALLIZED_BARREL); + private static final List WOODEN_BARRELS = new ArrayList<>(); + + static { + for (var material : BarrelMaterial.REGISTERED_MATERIALS) { + if (!STONE_MATERIALS.contains(material)) { + WOODEN_BARRELS.add(material); + } + } + } + public static void createBlockTags(MKTagsProvider tags) { var wateringCanTickable = tags.tag(EBlockTags.WATERING_CAN_TICKABLE); wateringCanTickable.add(Blocks.GRASS_BLOCK, Blocks.MYCELIUM, Blocks.CRIMSON_FUNGUS, Blocks.WARPED_FUNGUS, Blocks.RED_MUSHROOM, Blocks.BROWN_MUSHROOM, Blocks.CACTUS, Blocks.SUGAR_CANE, Blocks.SWEET_BERRY_BUSH, Blocks.COCOA).addTags(BlockTags.SAPLINGS, BlockTags.NYLIUM, BlockTags.BEE_GROWABLES); @@ -48,17 +64,7 @@ class ModTags { wateringCanTickable.addOptional(path); } - tags.tag(BlockTags.MINEABLE_WITH_AXE).add( - // Vanilla barrels - EBlocks.OAK_BARREL.get(), EBlocks.SPRUCE_BARREL.get(), EBlocks.BIRCH_BARREL.get(), EBlocks.JUNGLE_BARREL.get(), EBlocks.ACACIA_BARREL.get(), EBlocks.DARK_OAK_BARREL.get(), EBlocks.MANGROVE_BARREL.get(), EBlocks.CHERRY_BARREL.get(), EBlocks.BAMBOO_BARREL.get(), EBlocks.CRIMSON_BARREL.get(), EBlocks.WARPED_BARREL.get(), - // BOP barrels - EBlocks.FIR_BARREL.get(), EBlocks.REDWOOD_BARREL.get(), EBlocks.MAHOGANY_BARREL.get(), EBlocks.JACARANDA_BARREL.get(), EBlocks.PALM_BARREL.get(), EBlocks.WILLOW_BARREL.get(), EBlocks.DEAD_BARREL.get(), EBlocks.MAGIC_BARREL.get(), EBlocks.UMBRAN_BARREL.get(), EBlocks.HELLBARK_BARREL.get(), - // Ars Nouveau barrels - EBlocks.ARCHWOOD_BARREL.get(), - // Aether barrels - EBlocks.SKYROOT_BARREL.get(), - // Blue Skies barrels - EBlocks.BLUEBRIGHT_BARREL.get(), EBlocks.STARLIT_BARREL.get(), EBlocks.FROSTBRIGHT_BARREL.get(), EBlocks.COMET_BARREL.get(), EBlocks.LUNAR_BARREL.get(), EBlocks.DUSK_BARREL.get(), EBlocks.MAPLE_BARREL.get(), + tags.tag(BlockTags.MINEABLE_WITH_AXE).add(WOODEN_BARRELS.stream().map(BarrelMaterial::getBlock).toArray(Block[]::new)).add( // Vanilla sieves EBlocks.OAK_SIEVE.get(), EBlocks.SPRUCE_SIEVE.get(), EBlocks.BIRCH_SIEVE.get(), EBlocks.JUNGLE_SIEVE.get(), EBlocks.ACACIA_SIEVE.get(), EBlocks.DARK_OAK_SIEVE.get(), EBlocks.MANGROVE_SIEVE.get(), EBlocks.CHERRY_SIEVE.get(), EBlocks.BAMBOO_SIEVE.get(), EBlocks.CRIMSON_SIEVE.get(), EBlocks.WARPED_SIEVE.get(), // BOP sieves @@ -80,7 +86,9 @@ class ModTags { // Blue Skies crucibles EBlocks.BLUEBRIGHT_CRUCIBLE.get(), EBlocks.STARLIT_CRUCIBLE.get(), EBlocks.FROSTBRIGHT_CRUCIBLE.get(), EBlocks.COMET_CRUCIBLE.get(), EBlocks.LUNAR_CRUCIBLE.get(), EBlocks.DUSK_CRUCIBLE.get(), EBlocks.MAPLE_CRUCIBLE.get() ); - tags.tag(BlockTags.MINEABLE_WITH_PICKAXE).add(EBlocks.STONE_BARREL, EBlocks.PORCELAIN_CRUCIBLE, EBlocks.UNFIRED_PORCELAIN_CRUCIBLE, EBlocks.CRYSTALLIZED_BARREL, EBlocks.CRYSTALLIZED_CRUCIBLE, EBlocks.CRYSTALLIZED_SIEVE, EBlocks.MECHANICAL_SIEVE, EBlocks.MECHANICAL_HAMMER); + tags.tag(BlockTags.MINEABLE_WITH_PICKAXE) + .add(EBlocks.PORCELAIN_CRUCIBLE, EBlocks.UNFIRED_PORCELAIN_CRUCIBLE, EBlocks.CRYSTALLIZED_CRUCIBLE, EBlocks.CRYSTALLIZED_SIEVE, EBlocks.MECHANICAL_SIEVE, EBlocks.MECHANICAL_HAMMER) + .add(DefaultMaterials.STONE_BARREL.getBlock(), DefaultMaterials.CRYSTALLIZED_BARREL.getBlock()); tags.tag(BlockTags.MINEABLE_WITH_SHOVEL).add(EBlocks.DUST, EBlocks.CRUSHED_NETHERRACK, EBlocks.CRUSHED_END_STONE, EBlocks.CRUSHED_DEEPSLATE, EBlocks.CRUSHED_BLACKSTONE); tags.tag(BlockTags.MINEABLE_WITH_HOE).add(EBlocks.INFESTED_LEAVES); tags.tag(BlockTags.LEAVES).add(EBlocks.INFESTED_LEAVES); @@ -92,18 +100,8 @@ class ModTags { tags.tag(EItemTags.SIEVE_MESHES).add(EItems.STRING_MESH, EItems.FLINT_MESH, EItems.IRON_MESH, EItems.GOLDEN_MESH, EItems.DIAMOND_MESH, EItems.NETHERITE_MESH); tags.tag(EItemTags.PEBBLES).add(EItems.STONE_PEBBLE, EItems.DIORITE_PEBBLE, EItems.GRANITE_PEBBLE, EItems.ANDESITE_PEBBLE, EItems.DEEPSLATE_PEBBLE, EItems.TUFF_PEBBLE, EItems.CALCITE_PEBBLE, EItems.BLACKSTONE_PEBBLE, EItems.BASALT_PEBBLE); tags.tag(EItemTags.END_CAKE_MATERIAL).add(Items.ENDER_EYE); - tags.tag(EItemTags.WOODEN_BARRELS).add( - EItems.OAK_BARREL.get(), EItems.SPRUCE_BARREL.get(), EItems.BIRCH_BARREL.get(), EItems.JUNGLE_BARREL.get(), EItems.ACACIA_BARREL.get(), EItems.DARK_OAK_BARREL.get(), EItems.MANGROVE_BARREL.get(), EItems.CHERRY_BARREL.get(), EItems.BAMBOO_BARREL.get(), - // BOP barrels - EItems.FIR_BARREL.get(), EItems.REDWOOD_BARREL.get(), EItems.MAHOGANY_BARREL.get(), EItems.JACARANDA_BARREL.get(), EItems.PALM_BARREL.get(), EItems.WILLOW_BARREL.get(), EItems.DEAD_BARREL.get(), EItems.MAGIC_BARREL.get(), EItems.UMBRAN_BARREL.get(), EItems.HELLBARK_BARREL.get(), - // Ars Nouveau barrels - EItems.ARCHWOOD_BARREL.get(), - // Aether barrels - EItems.SKYROOT_BARREL.get(), - // Blue Skies barrels - EItems.BLUEBRIGHT_BARREL.get(), EItems.STARLIT_BARREL.get(), EItems.FROSTBRIGHT_BARREL.get(), EItems.COMET_BARREL.get(), EItems.LUNAR_BARREL.get(), EItems.DUSK_BARREL.get(), EItems.MAPLE_BARREL.get() - ); - tags.tag(EItemTags.STONE_BARRELS).add(EItems.STONE_BARREL, EItems.CRYSTALLIZED_BARREL); + tags.tag(EItemTags.WOODEN_BARRELS).add(WOODEN_BARRELS.stream().map(BarrelMaterial::getItem).toArray(Item[]::new)); + tags.tag(EItemTags.STONE_BARRELS).add(DefaultMaterials.STONE_BARREL.getItem(), DefaultMaterials.CRYSTALLIZED_BARREL.getItem()); tags.tag(EItemTags.BARRELS).addTags(EItemTags.WOODEN_BARRELS, EItemTags.STONE_BARRELS); } diff --git a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java index 04a3432f..689c597e 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java +++ b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java @@ -51,6 +51,7 @@ import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.block.InfestedLeavesBlock; import thedarkcolour.exdeorum.compat.ModIds; import thedarkcolour.exdeorum.data.ModCompatData; +import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.recipe.TagResultRecipe; import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelCompostRecipe; import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelFluidMixingRecipe; @@ -77,6 +78,7 @@ import static thedarkcolour.modkit.data.MKRecipeProvider.path; public class Recipes { private static final Ingredient SPORES_AND_SEEDS = ingredient(EItems.GRASS_SEEDS, EItems.MYCELIUM_SPORES, EItems.WARPED_NYLIUM_SPORES, EItems.CRIMSON_NYLIUM_SPORES); + public static void addRecipes(Consumer writer, MKRecipeProvider recipes) { craftingRecipes(writer, recipes); smeltingRecipes(recipes); @@ -103,81 +105,81 @@ public class Recipes { recipes.netheriteUpgrade(RecipeCategory.TOOLS, ingredient(EItems.DIAMOND_HAMMER.get()), EItems.NETHERITE_HAMMER.get()); // Crucibles - uShaped(recipes, EItems.OAK_CRUCIBLE, ingredient(Items.OAK_LOG), ingredient(Items.OAK_SLAB)); - uShaped(recipes, EItems.SPRUCE_CRUCIBLE, ingredient(Items.SPRUCE_LOG), ingredient(Items.SPRUCE_SLAB)); - uShaped(recipes, EItems.BIRCH_CRUCIBLE, ingredient(Items.BIRCH_LOG), ingredient(Items.BIRCH_SLAB)); - uShaped(recipes, EItems.JUNGLE_CRUCIBLE, ingredient(Items.JUNGLE_LOG), ingredient(Items.JUNGLE_SLAB)); - uShaped(recipes, EItems.ACACIA_CRUCIBLE, ingredient(Items.ACACIA_LOG), ingredient(Items.ACACIA_SLAB)); - uShaped(recipes, EItems.DARK_OAK_CRUCIBLE, ingredient(Items.DARK_OAK_LOG), ingredient(Items.DARK_OAK_SLAB)); - uShaped(recipes, EItems.MANGROVE_CRUCIBLE, ingredient(Items.MANGROVE_LOG), ingredient(Items.MANGROVE_SLAB)); - uShaped(recipes, EItems.CHERRY_CRUCIBLE, ingredient(Items.CHERRY_LOG), ingredient(Items.CHERRY_SLAB)); - uShaped(recipes, EItems.BAMBOO_CRUCIBLE, ingredient(Items.BAMBOO_BLOCK), ingredient(Items.BAMBOO_SLAB)); - uShaped(recipes, EItems.CRIMSON_CRUCIBLE, ingredient(Items.CRIMSON_STEM), ingredient(Items.CRIMSON_SLAB)); - uShaped(recipes, EItems.WARPED_CRUCIBLE, ingredient(Items.WARPED_STEM), ingredient(Items.WARPED_SLAB)); - uShaped(recipes, EItems.UNFIRED_PORCELAIN_CRUCIBLE, ingredient(EItems.PORCELAIN_CLAY_BALL.get()), ingredient(EItems.PORCELAIN_CLAY_BALL.get())); + uShaped(recipes, EItems.OAK_CRUCIBLE.get(), ingredient(Items.OAK_LOG), ingredient(Items.OAK_SLAB)); + uShaped(recipes, EItems.SPRUCE_CRUCIBLE.get(), ingredient(Items.SPRUCE_LOG), ingredient(Items.SPRUCE_SLAB)); + uShaped(recipes, EItems.BIRCH_CRUCIBLE.get(), ingredient(Items.BIRCH_LOG), ingredient(Items.BIRCH_SLAB)); + uShaped(recipes, EItems.JUNGLE_CRUCIBLE.get(), ingredient(Items.JUNGLE_LOG), ingredient(Items.JUNGLE_SLAB)); + uShaped(recipes, EItems.ACACIA_CRUCIBLE.get(), ingredient(Items.ACACIA_LOG), ingredient(Items.ACACIA_SLAB)); + uShaped(recipes, EItems.DARK_OAK_CRUCIBLE.get(), ingredient(Items.DARK_OAK_LOG), ingredient(Items.DARK_OAK_SLAB)); + uShaped(recipes, EItems.MANGROVE_CRUCIBLE.get(), ingredient(Items.MANGROVE_LOG), ingredient(Items.MANGROVE_SLAB)); + uShaped(recipes, EItems.CHERRY_CRUCIBLE.get(), ingredient(Items.CHERRY_LOG), ingredient(Items.CHERRY_SLAB)); + uShaped(recipes, EItems.BAMBOO_CRUCIBLE.get(), ingredient(Items.BAMBOO_BLOCK), ingredient(Items.BAMBOO_SLAB)); + uShaped(recipes, EItems.CRIMSON_CRUCIBLE.get(), ingredient(Items.CRIMSON_STEM), ingredient(Items.CRIMSON_SLAB)); + uShaped(recipes, EItems.WARPED_CRUCIBLE.get(), ingredient(Items.WARPED_STEM), ingredient(Items.WARPED_SLAB)); + uShaped(recipes, EItems.UNFIRED_PORCELAIN_CRUCIBLE.get(), ingredient(EItems.PORCELAIN_CLAY_BALL.get()), ingredient(EItems.PORCELAIN_CLAY_BALL.get())); // BOP crucibles - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.FIR_LOG_ITEM, ModCompatData.FIR_SLAB, EItems.FIR_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.REDWOOD_LOG_ITEM, ModCompatData.REDWOOD_SLAB, EItems.REDWOOD_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAHOGANY_LOG_ITEM, ModCompatData.MAHOGANY_SLAB, EItems.MAHOGANY_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.JACARANDA_LOG_ITEM, ModCompatData.JACARANDA_SLAB, EItems.JACARANDA_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.PALM_LOG_ITEM, ModCompatData.PALM_SLAB, EItems.PALM_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.WILLOW_LOG_ITEM, ModCompatData.WILLOW_SLAB, EItems.WILLOW_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.DEAD_LOG_ITEM, ModCompatData.DEAD_SLAB, EItems.DEAD_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAGIC_LOG_ITEM, ModCompatData.MAGIC_SLAB, EItems.MAGIC_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.UMBRAN_LOG_ITEM, ModCompatData.UMBRAN_SLAB, EItems.UMBRAN_CRUCIBLE); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.HELLBARK_LOG_ITEM, ModCompatData.HELLBARK_SLAB, EItems.HELLBARK_CRUCIBLE); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.FIR_LOG_ITEM, ModCompatData.FIR_SLAB, EItems.FIR_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.REDWOOD_LOG_ITEM, ModCompatData.REDWOOD_SLAB, EItems.REDWOOD_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAHOGANY_LOG_ITEM, ModCompatData.MAHOGANY_SLAB, EItems.MAHOGANY_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.JACARANDA_LOG_ITEM, ModCompatData.JACARANDA_SLAB, EItems.JACARANDA_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.PALM_LOG_ITEM, ModCompatData.PALM_SLAB, EItems.PALM_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.WILLOW_LOG_ITEM, ModCompatData.WILLOW_SLAB, EItems.WILLOW_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.DEAD_LOG_ITEM, ModCompatData.DEAD_SLAB, EItems.DEAD_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAGIC_LOG_ITEM, ModCompatData.MAGIC_SLAB, EItems.MAGIC_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.UMBRAN_LOG_ITEM, ModCompatData.UMBRAN_SLAB, EItems.UMBRAN_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.HELLBARK_LOG_ITEM, ModCompatData.HELLBARK_SLAB, EItems.HELLBARK_CRUCIBLE.get()); // Ars crucibles - modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.CASCADING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.CASCADING_ARCHWOOD_CRUCIBLE); - modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.BLAZING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.BLAZING_ARCHWOOD_CRUCIBLE); - modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.VEXING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.VEXING_ARCHWOOD_CRUCIBLE); - modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.FLOURISHING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.FLOURISHING_ARCHWOOD_CRUCIBLE); + modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.CASCADING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.CASCADING_ARCHWOOD_CRUCIBLE.get()); + modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.BLAZING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.BLAZING_ARCHWOOD_CRUCIBLE.get()); + modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.VEXING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.VEXING_ARCHWOOD_CRUCIBLE.get()); + modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.FLOURISHING_ARCHWOOD_LOG_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.FLOURISHING_ARCHWOOD_CRUCIBLE.get()); // Aether crucibles - modUShaped(recipes, ModIds.AETHER, ModCompatData.GOLDEN_OAK_LOG_ITEM, ModCompatData.SKYROOT_SLAB, EItems.GOLDEN_OAK_CRUCIBLE); - modUShaped(recipes, ModIds.AETHER, ModCompatData.SKYROOT_LOG_ITEM, ModCompatData.SKYROOT_SLAB, EItems.SKYROOT_CRUCIBLE); + modUShaped(recipes, ModIds.AETHER, ModCompatData.GOLDEN_OAK_LOG_ITEM, ModCompatData.SKYROOT_SLAB, EItems.GOLDEN_OAK_CRUCIBLE.get()); + modUShaped(recipes, ModIds.AETHER, ModCompatData.SKYROOT_LOG_ITEM, ModCompatData.SKYROOT_SLAB, EItems.SKYROOT_CRUCIBLE.get()); // Blue Skies crucibles - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.BLUEBRIGHT_LOG_ITEM, ModCompatData.BLUEBRIGHT_SLAB, EItems.BLUEBRIGHT_CRUCIBLE); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.STARLIT_LOG_ITEM, ModCompatData.STARLIT_SLAB, EItems.STARLIT_CRUCIBLE); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.FROSTBRIGHT_LOG_ITEM, ModCompatData.FROSTBRIGHT_SLAB, EItems.FROSTBRIGHT_CRUCIBLE); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.COMET_LOG_ITEM, ModCompatData.COMET_SLAB, EItems.COMET_CRUCIBLE); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.LUNAR_LOG_ITEM, ModCompatData.LUNAR_SLAB, EItems.LUNAR_CRUCIBLE); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.DUSK_LOG_ITEM, ModCompatData.DUSK_SLAB, EItems.DUSK_CRUCIBLE); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.MAPLE_LOG_ITEM, ModCompatData.MAPLE_SLAB, EItems.MAPLE_CRUCIBLE); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.CRYSTALLIZED_LOG_ITEM, ModCompatData.CRYSTALLIZED_SLAB, EItems.CRYSTALLIZED_CRUCIBLE); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.BLUEBRIGHT_LOG_ITEM, ModCompatData.BLUEBRIGHT_SLAB, EItems.BLUEBRIGHT_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.STARLIT_LOG_ITEM, ModCompatData.STARLIT_SLAB, EItems.STARLIT_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.FROSTBRIGHT_LOG_ITEM, ModCompatData.FROSTBRIGHT_SLAB, EItems.FROSTBRIGHT_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.COMET_LOG_ITEM, ModCompatData.COMET_SLAB, EItems.COMET_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.LUNAR_LOG_ITEM, ModCompatData.LUNAR_SLAB, EItems.LUNAR_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.DUSK_LOG_ITEM, ModCompatData.DUSK_SLAB, EItems.DUSK_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.MAPLE_LOG_ITEM, ModCompatData.MAPLE_SLAB, EItems.MAPLE_CRUCIBLE.get()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.CRYSTALLIZED_LOG_ITEM, ModCompatData.CRYSTALLIZED_SLAB, EItems.CRYSTALLIZED_CRUCIBLE.get()); // Barrels - uShaped(recipes, EItems.OAK_BARREL, ingredient(Items.OAK_PLANKS), ingredient(Items.OAK_SLAB)); - uShaped(recipes, EItems.SPRUCE_BARREL, ingredient(Items.SPRUCE_PLANKS), ingredient(Items.SPRUCE_SLAB)); - uShaped(recipes, EItems.BIRCH_BARREL, ingredient(Items.BIRCH_PLANKS), ingredient(Items.BIRCH_SLAB)); - uShaped(recipes, EItems.JUNGLE_BARREL, ingredient(Items.JUNGLE_PLANKS), ingredient(Items.JUNGLE_SLAB)); - uShaped(recipes, EItems.ACACIA_BARREL, ingredient(Items.ACACIA_PLANKS), ingredient(Items.ACACIA_SLAB)); - uShaped(recipes, EItems.DARK_OAK_BARREL, ingredient(Items.DARK_OAK_PLANKS), ingredient(Items.DARK_OAK_SLAB)); - uShaped(recipes, EItems.MANGROVE_BARREL, ingredient(Items.MANGROVE_PLANKS), ingredient(Items.MANGROVE_SLAB)); - uShaped(recipes, EItems.CHERRY_BARREL, ingredient(Items.CHERRY_PLANKS), ingredient(Items.CHERRY_SLAB)); - uShaped(recipes, EItems.BAMBOO_BARREL, ingredient(Items.BAMBOO_PLANKS), ingredient(Items.BAMBOO_SLAB)); - uShaped(recipes, EItems.CRIMSON_BARREL, ingredient(Items.CRIMSON_PLANKS), ingredient(Items.CRIMSON_SLAB)); - uShaped(recipes, EItems.WARPED_BARREL, ingredient(Items.WARPED_PLANKS), ingredient(Items.WARPED_SLAB)); - uShaped(recipes, EItems.STONE_BARREL, ingredient(Items.STONE), ingredient(Items.STONE_SLAB)); + uShaped(recipes, DefaultMaterials.OAK_BARREL.getItem(), ingredient(Items.OAK_PLANKS), ingredient(Items.OAK_SLAB)); + uShaped(recipes, DefaultMaterials.SPRUCE_BARREL.getItem(), ingredient(Items.SPRUCE_PLANKS), ingredient(Items.SPRUCE_SLAB)); + uShaped(recipes, DefaultMaterials.BIRCH_BARREL.getItem(), ingredient(Items.BIRCH_PLANKS), ingredient(Items.BIRCH_SLAB)); + uShaped(recipes, DefaultMaterials.JUNGLE_BARREL.getItem(), ingredient(Items.JUNGLE_PLANKS), ingredient(Items.JUNGLE_SLAB)); + uShaped(recipes, DefaultMaterials.ACACIA_BARREL.getItem(), ingredient(Items.ACACIA_PLANKS), ingredient(Items.ACACIA_SLAB)); + uShaped(recipes, DefaultMaterials.DARK_OAK_BARREL.getItem(), ingredient(Items.DARK_OAK_PLANKS), ingredient(Items.DARK_OAK_SLAB)); + uShaped(recipes, DefaultMaterials.MANGROVE_BARREL.getItem(), ingredient(Items.MANGROVE_PLANKS), ingredient(Items.MANGROVE_SLAB)); + uShaped(recipes, DefaultMaterials.CHERRY_BARREL.getItem(), ingredient(Items.CHERRY_PLANKS), ingredient(Items.CHERRY_SLAB)); + uShaped(recipes, DefaultMaterials.BAMBOO_BARREL.getItem(), ingredient(Items.BAMBOO_PLANKS), ingredient(Items.BAMBOO_SLAB)); + uShaped(recipes, DefaultMaterials.CRIMSON_BARREL.getItem(), ingredient(Items.CRIMSON_PLANKS), ingredient(Items.CRIMSON_SLAB)); + uShaped(recipes, DefaultMaterials.WARPED_BARREL.getItem(), ingredient(Items.WARPED_PLANKS), ingredient(Items.WARPED_SLAB)); + uShaped(recipes, DefaultMaterials.STONE_BARREL.getItem(), ingredient(Items.STONE), ingredient(Items.STONE_SLAB)); // Modded barrels - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.FIR_PLANKS_ITEM, ModCompatData.FIR_SLAB, EItems.FIR_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.REDWOOD_PLANKS_ITEM, ModCompatData.REDWOOD_SLAB, EItems.REDWOOD_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAHOGANY_PLANKS_ITEM, ModCompatData.MAHOGANY_SLAB, EItems.MAHOGANY_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.JACARANDA_PLANKS_ITEM, ModCompatData.JACARANDA_SLAB, EItems.JACARANDA_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.PALM_PLANKS_ITEM, ModCompatData.PALM_SLAB, EItems.PALM_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.WILLOW_PLANKS_ITEM, ModCompatData.WILLOW_SLAB, EItems.WILLOW_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.DEAD_PLANKS_ITEM, ModCompatData.DEAD_SLAB, EItems.DEAD_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAGIC_PLANKS_ITEM, ModCompatData.MAGIC_SLAB, EItems.MAGIC_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.UMBRAN_PLANKS_ITEM, ModCompatData.UMBRAN_SLAB, EItems.UMBRAN_BARREL); - modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.HELLBARK_PLANKS_ITEM, ModCompatData.HELLBARK_SLAB, EItems.HELLBARK_BARREL); - modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.ARCHWOOD_PLANKS_ITEM, ModCompatData.ARCHWOOD_SLAB, EItems.ARCHWOOD_BARREL); - modUShaped(recipes, ModIds.AETHER, ModCompatData.SKYROOT_PLANKS_ITEM, ModCompatData.SKYROOT_SLAB, EItems.SKYROOT_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.BLUEBRIGHT_PLANKS_ITEM, ModCompatData.BLUEBRIGHT_SLAB, EItems.BLUEBRIGHT_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.STARLIT_PLANKS_ITEM, ModCompatData.STARLIT_SLAB, EItems.STARLIT_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.FROSTBRIGHT_PLANKS_ITEM, ModCompatData.FROSTBRIGHT_SLAB, EItems.FROSTBRIGHT_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.COMET_PLANKS_ITEM, ModCompatData.COMET_SLAB, EItems.COMET_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.LUNAR_PLANKS_ITEM, ModCompatData.LUNAR_SLAB, EItems.LUNAR_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.DUSK_PLANKS_ITEM, ModCompatData.DUSK_SLAB, EItems.DUSK_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.MAPLE_PLANKS_ITEM, ModCompatData.MAPLE_SLAB, EItems.MAPLE_BARREL); - modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.CRYSTALLIZED_PLANKS_ITEM, ModCompatData.CRYSTALLIZED_SLAB, EItems.CRYSTALLIZED_BARREL); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.FIR_PLANKS_ITEM, ModCompatData.FIR_SLAB, DefaultMaterials.FIR_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.REDWOOD_PLANKS_ITEM, ModCompatData.REDWOOD_SLAB, DefaultMaterials.REDWOOD_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAHOGANY_PLANKS_ITEM, ModCompatData.MAHOGANY_SLAB, DefaultMaterials.MAHOGANY_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.JACARANDA_PLANKS_ITEM, ModCompatData.JACARANDA_SLAB, DefaultMaterials.JACARANDA_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.PALM_PLANKS_ITEM, ModCompatData.PALM_SLAB, DefaultMaterials.PALM_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.WILLOW_PLANKS_ITEM, ModCompatData.WILLOW_SLAB, DefaultMaterials.WILLOW_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.DEAD_PLANKS_ITEM, ModCompatData.DEAD_SLAB, DefaultMaterials.DEAD_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.MAGIC_PLANKS_ITEM, ModCompatData.MAGIC_SLAB, DefaultMaterials.MAGIC_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.UMBRAN_PLANKS_ITEM, ModCompatData.UMBRAN_SLAB, DefaultMaterials.UMBRAN_BARREL.getItem()); + modUShaped(recipes, ModIds.BIOMES_O_PLENTY, ModCompatData.HELLBARK_PLANKS_ITEM, ModCompatData.HELLBARK_SLAB, DefaultMaterials.HELLBARK_BARREL.getItem()); + modUShaped(recipes, ModIds.ARS_NOUVEAU, ModCompatData.ARCHWOOD_PLANKS_ITEM, ModCompatData.ARCHWOOD_SLAB, DefaultMaterials.ARCHWOOD_BARREL.getItem()); + modUShaped(recipes, ModIds.AETHER, ModCompatData.SKYROOT_PLANKS_ITEM, ModCompatData.SKYROOT_SLAB, DefaultMaterials.SKYROOT_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.BLUEBRIGHT_PLANKS_ITEM, ModCompatData.BLUEBRIGHT_SLAB, DefaultMaterials.BLUEBRIGHT_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.STARLIT_PLANKS_ITEM, ModCompatData.STARLIT_SLAB, DefaultMaterials.STARLIT_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.FROSTBRIGHT_PLANKS_ITEM, ModCompatData.FROSTBRIGHT_SLAB, DefaultMaterials.FROSTBRIGHT_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.COMET_PLANKS_ITEM, ModCompatData.COMET_SLAB, DefaultMaterials.COMET_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.LUNAR_PLANKS_ITEM, ModCompatData.LUNAR_SLAB, DefaultMaterials.LUNAR_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.DUSK_PLANKS_ITEM, ModCompatData.DUSK_SLAB, DefaultMaterials.DUSK_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.MAPLE_PLANKS_ITEM, ModCompatData.MAPLE_SLAB, DefaultMaterials.MAPLE_BARREL.getItem()); + modUShaped(recipes, ModIds.BLUE_SKIES, ModCompatData.CRYSTALLIZED_PLANKS_ITEM, ModCompatData.CRYSTALLIZED_SLAB, DefaultMaterials.CRYSTALLIZED_BARREL.getItem()); // Pebbles and ore chunks recipes.grid2x2(Items.COBBLESTONE, ingredient(EItems.STONE_PEBBLE)); @@ -315,8 +317,8 @@ public class Recipes { }); } - private static void modUShaped(MKRecipeProvider recipes, String modid, RegistryObject sides, RegistryObject middle, RegistryObject result) { - recipes.conditional(result.getId().getPath(), List.of(modInstalled(modid)), writer1 -> { + private static void modUShaped(MKRecipeProvider recipes, String modid, RegistryObject sides, RegistryObject middle, Item result) { + recipes.conditional(path(result), List.of(modInstalled(modid)), writer1 -> { uShaped(recipes, result, ingredient(sides), ingredient(middle)); }); } @@ -359,8 +361,8 @@ public class Recipes { }); } - private static void uShaped(MKRecipeProvider recipes, RegistryObject result, Ingredient sides, Ingredient middle) { - recipes.shapedCrafting(RecipeCategory.MISC, result.get(), recipe -> { + private static void uShaped(MKRecipeProvider recipes, Item result, Ingredient sides, Ingredient middle) { + recipes.shapedCrafting(RecipeCategory.MISC, result, recipe -> { recipe.define('s', sides); recipe.define('m', middle); recipe.pattern("s s"); diff --git a/src/main/java/thedarkcolour/exdeorum/material/BarrelMaterial.java b/src/main/java/thedarkcolour/exdeorum/material/BarrelMaterial.java index 8093ffbc..b9b8d5b2 100644 --- a/src/main/java/thedarkcolour/exdeorum/material/BarrelMaterial.java +++ b/src/main/java/thedarkcolour/exdeorum/material/BarrelMaterial.java @@ -18,42 +18,220 @@ package thedarkcolour.exdeorum.material; -import com.mojang.datafixers.util.Function6; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraftforge.data.loading.DatagenModLoader; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.ExDeorum; +import thedarkcolour.exdeorum.block.BarrelBlock; +import thedarkcolour.exdeorum.blockentity.BarrelBlockEntity; +import thedarkcolour.exdeorum.client.CompostColors; +import thedarkcolour.exdeorum.registry.EBlocks; +import thedarkcolour.exdeorum.registry.EItems; -public record BarrelMaterial( - // The sound this block makes (a string corresponding to a field in SoundType, or an unqualified field reference like me.mymod.block.Sounds.MODDED_SOUND_TYPE) - SoundType soundType, - // The hardness of the barrel when harvesting - float strength, - // Whether this barrel needs a special tool to be harvested (ex. stone barrel only drops if mined with pickaxe) - boolean needsCorrectTool, - // Whether the barrel can hold hot fluids - boolean fireproof, - // Numeric ID of map color (these can be found on Minecraft Wiki as well as in MapColor.java) - int mapColor, - // ID of mod that should be present - String requiredModId -) { - public static final Codec CODEC = RecordCodecBuilder.create(builder -> { - return builder.group( - Codec.STRING.fieldOf("sound_type").xmap(BarrelMaterial::readSoundType, BarrelMaterial::writeSoundType).forGetter(BarrelMaterial::soundType), - Codec.FLOAT.fieldOf("strength").forGetter(BarrelMaterial::strength), - Codec.BOOL.fieldOf("needs_correct_tool").forGetter(BarrelMaterial::needsCorrectTool), - Codec.BOOL.fieldOf("fireproof").forGetter(BarrelMaterial::fireproof), - Codec.INT.fieldOf("map_color").forGetter(BarrelMaterial::mapColor), - Codec.STRING.optionalFieldOf("required_mod_id", ExDeorum.ID).forGetter(BarrelMaterial::requiredModId) - ).apply(builder, BarrelMaterial::new); - }); +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.HashSet; +import java.util.List; - private static SoundType readSoundType(String soundType) { - return null; +public final class BarrelMaterial { + // Use a linked hash map to maintain insertion order + public static final List REGISTERED_MATERIALS = new ArrayList<>(); + + private static final Path CUSTOM_BARREL_MATERIAL_CONFIGS = Paths.get("config/exdeorum/barrel_materials"); + + // The sound this block makes (a string corresponding to a field in SoundType, or an unqualified field reference like me.mymod.block.Sounds.MODDED_SOUND_TYPE) + public final SoundType soundType; + // The hardness of the barrel when harvesting + public final float strength; + // Whether this barrel needs a special tool to be harvested (ex. stone barrel only drops if mined with pickaxe) + public final boolean needsCorrectTool; + // Whether the barrel can hold hot fluids + public final boolean fireproof; + // Numeric ID of map color (these can be found on Minecraft Wiki as well as in MapColor.java) + public final int mapColor; + // ID of mod that should be present + public final String requiredModId; + // Whether fluids should be rendered with sides instead of just the top + public final boolean transparent; + + private RegistryObject block; + private RegistryObject item; + + BarrelMaterial(SoundType soundType, float strength, boolean needsCorrectTool, boolean fireproof, int mapColor, String requiredModId, boolean transparent) { + this.soundType = soundType; + this.strength = strength; + this.needsCorrectTool = needsCorrectTool; + this.fireproof = fireproof; + this.mapColor = mapColor; + this.requiredModId = requiredModId; + this.transparent = transparent; } - private static String writeSoundType(SoundType soundType) { - return null; + public static void findMaterials() { + if (DatagenModLoader.isRunningDataGen()) { + return; + } + if (CompostColors.createConfigFolder(CUSTOM_BARREL_MATERIAL_CONFIGS)) { + var materialsFolder = CUSTOM_BARREL_MATERIAL_CONFIGS.toFile(); + var children = materialsFolder.list(); + + if (children != null) { + for (var child : children) { + if (child.endsWith(".json")) { + Path path = CUSTOM_BARREL_MATERIAL_CONFIGS.resolve(child); + + try { + var json = JsonParser.parseString(Files.readString(path)); + var material = parseJsonMaterial((JsonObject) json, path); + + if (material != null) { + registerMaterial(child.substring(0, child.length() - 5), material); + } + } catch (IOException e) { + ExDeorum.LOGGER.error("Failed to read JSON custom barrel material at {}", path); + } + } + } + } else { + ExDeorum.LOGGER.error("Failed to read custom barrel materials folder {}: not a directory", CUSTOM_BARREL_MATERIAL_CONFIGS); + } + } + } + + // Returns either the material or a list of errors that occurred while parsing + @Nullable + private static BarrelMaterial parseJsonMaterial(JsonObject json, Path jsonPath) { + boolean error = false; + SoundType soundType = null; + float strength = 0; + boolean needsCorrectTool = false; + boolean fireproof = false; + int mapColor = 0; + String requiredModId = ExDeorum.ID; + boolean transparent = false; + + if (json.has("sound_type")) { + var soundTypeJson = json.get("sound_type"); + + if (soundTypeJson.isJsonPrimitive()) { + String soundTypeString = soundTypeJson.getAsString(); + soundType = SoundTypeResolver.VANILLA_SOUND_TYPES.get(soundTypeString); + + if (soundType == null) { + ExDeorum.LOGGER.error("Unknown sound type \"{}\" for barrel material {}", soundTypeString, jsonPath); + error = true; + } + } else if (soundTypeJson instanceof JsonObject soundTypeObj) { + // todo let users define sound types with registry names + } else { + ExDeorum.LOGGER.error("Unable to parse sound type for barrel material {}", jsonPath); + error = true; + } + } else { + ExDeorum.LOGGER.error("Missing sound_type property for barrel material {}", jsonPath); + error = true; + } + if (json.has("strength")) { + var strengthJson = json.get("strength"); + + if (strengthJson.isJsonPrimitive()) { + try { + strength = strengthJson.getAsFloat(); + } catch (NumberFormatException e) { + ExDeorum.LOGGER.error("Failed to parse strength property for barrel material {} with value {}", jsonPath, strengthJson.getAsString()); + error = true; + } + } else { + ExDeorum.LOGGER.error("Failed to parse strength property for barrel material {}: not a number", jsonPath); + error = true; + } + } else { + ExDeorum.LOGGER.error("Missing strength property for barrel material {}", jsonPath); + error = true; + } + + if (json.has("map_color")) { + if (json.get("map_color") instanceof JsonPrimitive prim) { + mapColor = prim.getAsInt(); + if (64 <= mapColor || mapColor < 0) { + ExDeorum.LOGGER.error("Failed to parse map_color property for barrel material {}: value must be in [0,64), found {}", jsonPath, mapColor); + error = true; + } + } else { + ExDeorum.LOGGER.error("Failed to parse map_color property for barrel material {}: not a number", jsonPath); + error = true; + } + } else { + ExDeorum.LOGGER.error("Missing map_color property for barrel material {}", jsonPath); + error = true; + } + + if (json.get("needs_correct_tool") instanceof JsonPrimitive prim && prim.isBoolean()) { + needsCorrectTool = prim.getAsBoolean(); + } + if (json.get("fireproof") instanceof JsonPrimitive prim && prim.isBoolean()) { + fireproof = prim.getAsBoolean(); + } + if (json.get("required_mod_id") instanceof JsonPrimitive prim && prim.isString()) { + requiredModId = prim.getAsString(); + } + if (json.get("transparent") instanceof JsonPrimitive prim && prim.isBoolean()) { + transparent = prim.getAsBoolean(); + } + + if (error) { + return null; + } else { + return new BarrelMaterial(soundType, strength, needsCorrectTool, fireproof, mapColor, requiredModId, transparent); + } + } + + public static void registerMaterial(String name, BarrelMaterial material) { + var id = name + "_barrel"; + ExDeorum.LOGGER.info("Added barrel \"{}\" for barrel material {}: {}", id, name + ".json", material); + + if (material.block != null) { + throw new IllegalStateException("Tried to set block on material" + name + ", but block was already set!"); + } + + material.block = EBlocks.BLOCKS.register(id, () -> { + BlockBehaviour.Properties props = BlockBehaviour.Properties.of().strength(material.strength).sound(material.soundType); + if (!material.fireproof) props.ignitedByLava(); + if (material.needsCorrectTool) props.requiresCorrectToolForDrops(); + return new BarrelBlock(props); + }); + material.item = EItems.registerItemBlock(material.block); + REGISTERED_MATERIALS.add(material); + } + + public static BlockEntityType createBlockEntityType() { + HashSet validBlocks = new HashSet<>(); + + for (var material : REGISTERED_MATERIALS) { + validBlocks.add(material.block.get()); + } + + return new BlockEntityType<>(BarrelBlockEntity::new, validBlocks, null); + } + + // Does not check if the mod is registered + public Item getItem() { + return this.item.get(); + } + + public Block getBlock() { + return this.block.get(); } } diff --git a/src/main/java/thedarkcolour/exdeorum/material/DefaultMaterials.java b/src/main/java/thedarkcolour/exdeorum/material/DefaultMaterials.java new file mode 100644 index 00000000..372f2a48 --- /dev/null +++ b/src/main/java/thedarkcolour/exdeorum/material/DefaultMaterials.java @@ -0,0 +1,80 @@ +/* + * Ex Deorum + * Copyright (c) 2024 thedarkcolour + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package thedarkcolour.exdeorum.material; + +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.MapColor; +import thedarkcolour.exdeorum.ExDeorum; +import thedarkcolour.exdeorum.compat.ModIds; + +@SuppressWarnings("unused") +public class DefaultMaterials { + // Ex Deorum + public static final BarrelMaterial OAK_BARREL = addDefaultWoodBarrel("oak", SoundType.WOOD, false, MapColor.WOOD, ExDeorum.ID); + public static final BarrelMaterial SPRUCE_BARREL = addDefaultWoodBarrel("spruce", SoundType.WOOD, false, MapColor.PODZOL, ExDeorum.ID); + public static final BarrelMaterial BIRCH_BARREL = addDefaultWoodBarrel("birch", SoundType.WOOD, false, MapColor.SAND, ExDeorum.ID); + public static final BarrelMaterial JUNGLE_BARREL = addDefaultWoodBarrel("jungle", SoundType.WOOD, false, MapColor.DIRT, ExDeorum.ID); + public static final BarrelMaterial ACACIA_BARREL = addDefaultWoodBarrel("acacia", SoundType.WOOD, false, MapColor.COLOR_ORANGE, ExDeorum.ID); + public static final BarrelMaterial DARK_OAK_BARREL = addDefaultWoodBarrel("dark_oak", SoundType.WOOD, false, MapColor.COLOR_BROWN, ExDeorum.ID); + public static final BarrelMaterial MANGROVE_BARREL = addDefaultWoodBarrel("mangrove", SoundType.WOOD, false, MapColor.COLOR_RED, ExDeorum.ID); + public static final BarrelMaterial CHERRY_BARREL = addDefaultWoodBarrel("cherry", SoundType.WOOD, false, MapColor.TERRACOTTA_WHITE, ExDeorum.ID); + public static final BarrelMaterial BAMBOO_BARREL = addDefaultWoodBarrel("bamboo", SoundType.BAMBOO, false, MapColor.COLOR_YELLOW, ExDeorum.ID); + public static final BarrelMaterial CRIMSON_BARREL = addDefaultWoodBarrel("crimson", SoundType.NETHER_WOOD, true, MapColor.CRIMSON_STEM, ExDeorum.ID); + public static final BarrelMaterial WARPED_BARREL = addDefaultWoodBarrel("warped", SoundType.NETHER_WOOD, true, MapColor.WARPED_STEM, ExDeorum.ID); + public static final BarrelMaterial STONE_BARREL = addDefaultBarrel("stone", SoundType.STONE, 4.0f, true, true, MapColor.STONE, ExDeorum.ID, false); + // BOP + public static final BarrelMaterial FIR_BARREL = addDefaultWoodBarrel("fir", SoundType.WOOD, false, MapColor.TERRACOTTA_WHITE, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial REDWOOD_BARREL = addDefaultWoodBarrel("redwood", SoundType.WOOD, false, MapColor.TERRACOTTA_ORANGE, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial MAHOGANY_BARREL = addDefaultWoodBarrel("mahogany", SoundType.WOOD, false, MapColor.TERRACOTTA_PINK, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial JACARANDA_BARREL = addDefaultWoodBarrel("jacaranda", SoundType.WOOD, false, MapColor.QUARTZ, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial PALM_BARREL = addDefaultWoodBarrel("palm", SoundType.WOOD, false, MapColor.TERRACOTTA_YELLOW, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial WILLOW_BARREL = addDefaultWoodBarrel("willow", SoundType.WOOD, false, MapColor.TERRACOTTA_LIGHT_GREEN, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial DEAD_BARREL = addDefaultWoodBarrel("dead", SoundType.WOOD, false, MapColor.STONE, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial MAGIC_BARREL = addDefaultWoodBarrel("magic", SoundType.WOOD, false, MapColor.COLOR_BLUE, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial UMBRAN_BARREL = addDefaultWoodBarrel("umbran", SoundType.WOOD, false, MapColor.TERRACOTTA_BLUE, ModIds.BIOMES_O_PLENTY); + public static final BarrelMaterial HELLBARK_BARREL = addDefaultWoodBarrel("hellbark", SoundType.WOOD, true, MapColor.TERRACOTTA_GRAY, ModIds.BIOMES_O_PLENTY); + // Ars Nouveau + public static final BarrelMaterial ARCHWOOD_BARREL = addDefaultWoodBarrel("archwood", SoundType.WOOD, false, MapColor.COLOR_GRAY, ModIds.ARS_NOUVEAU); + // Aether + public static final BarrelMaterial SKYROOT_BARREL = addDefaultWoodBarrel("skyroot", SoundType.WOOD, false, MapColor.WOOD, ModIds.AETHER); + // Blue Skies + public static final BarrelMaterial BLUEBRIGHT_BARREL = addDefaultWoodBarrel("bluebright", SoundType.WOOD, false, MapColor.WOOD, ModIds.BLUE_SKIES); + public static final BarrelMaterial STARLIT_BARREL = addDefaultWoodBarrel("starlit", SoundType.WOOD, false, MapColor.WOOD, ModIds.BLUE_SKIES); + public static final BarrelMaterial FROSTBRIGHT_BARREL = addDefaultWoodBarrel("frostbright", SoundType.WOOD, false, MapColor.WOOD, ModIds.BLUE_SKIES); + public static final BarrelMaterial COMET_BARREL = addDefaultWoodBarrel("comet", SoundType.WOOD, false, MapColor.WOOD, ModIds.BLUE_SKIES); + public static final BarrelMaterial LUNAR_BARREL = addDefaultWoodBarrel("lunar", SoundType.WOOD, false, MapColor.WOOD, ModIds.BLUE_SKIES); + public static final BarrelMaterial DUSK_BARREL = addDefaultWoodBarrel("dusk", SoundType.WOOD, false, MapColor.WOOD, ModIds.BLUE_SKIES); + public static final BarrelMaterial MAPLE_BARREL = addDefaultWoodBarrel("maple", SoundType.WOOD, false, MapColor.WOOD, ModIds.BLUE_SKIES); + public static final BarrelMaterial CRYSTALLIZED_BARREL = addDefaultBarrel("crystallized", SoundType.GLASS, 4.0f, true, true, MapColor.TERRACOTTA_WHITE, ModIds.BLUE_SKIES, true); + + static BarrelMaterial addDefaultWoodBarrel(String name, SoundType soundType, boolean fireproof, MapColor color, String requiredModId) { + return addDefaultBarrel(name, soundType, 2.0f, false, fireproof, color, requiredModId, false); + } + + static BarrelMaterial addDefaultBarrel(String name, SoundType soundType, float strength, boolean needsCorrectTool, boolean fireproof, MapColor color, String requiredModId, boolean transparent) { + var material = new BarrelMaterial(soundType, strength, needsCorrectTool, fireproof, color.id, requiredModId, transparent); + BarrelMaterial.registerMaterial(name, material); + return material; + } + + // This call initializes the DefaultMaterials fields as well as searching for user-defined ones in the appropriate places + public static void registerMaterials() { + BarrelMaterial.findMaterials(); + } +} diff --git a/src/main/java/thedarkcolour/exdeorum/material/SoundTypeResolver.java b/src/main/java/thedarkcolour/exdeorum/material/SoundTypeResolver.java new file mode 100644 index 00000000..576c5eb3 --- /dev/null +++ b/src/main/java/thedarkcolour/exdeorum/material/SoundTypeResolver.java @@ -0,0 +1,143 @@ +/* + * Ex Deorum + * Copyright (c) 2024 thedarkcolour + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package thedarkcolour.exdeorum.material; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.world.level.block.SoundType; +import net.minecraftforge.fml.loading.FMLLoader; +import thedarkcolour.exdeorum.ExDeorum; + +import java.util.Map; + +class SoundTypeResolver { + static final Map VANILLA_SOUND_TYPES; + + static { + if (ExDeorum.DEBUG && !FMLLoader.versionInfo().mcVersion().equals("1.20.1")) { + throw new RuntimeException("Update the BarrelMaterial map"); + } + // Very long line of put calls that put each SoundType field and its lowercase name into the map + 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/thedarkcolour/exdeorum/material/package-info.java b/src/main/java/thedarkcolour/exdeorum/material/package-info.java new file mode 100644 index 00000000..2a0a3095 --- /dev/null +++ b/src/main/java/thedarkcolour/exdeorum/material/package-info.java @@ -0,0 +1,21 @@ +/* + * Ex Deorum + * Copyright (c) 2024 thedarkcolour + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +@net.minecraft.MethodsReturnNonnullByDefault +@javax.annotation.ParametersAreNonnullByDefault +package thedarkcolour.exdeorum.material; diff --git a/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java b/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java index 07fb03fe..fd2053b4 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java @@ -30,6 +30,7 @@ import thedarkcolour.exdeorum.blockentity.MechanicalHammerBlockEntity; import thedarkcolour.exdeorum.blockentity.MechanicalSieveBlockEntity; import thedarkcolour.exdeorum.blockentity.SieveBlockEntity; import thedarkcolour.exdeorum.blockentity.WaterCrucibleBlockEntity; +import thedarkcolour.exdeorum.material.BarrelMaterial; public class EBlockEntities { public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ExDeorum.ID); @@ -81,44 +82,7 @@ public class EBlockEntities { EBlocks.DUSK_CRUCIBLE.get(), EBlocks.MAPLE_CRUCIBLE.get() ).build(null)); - public static final RegistryObject> BARREL = BLOCK_ENTITIES.register("barrel", () -> BlockEntityType.Builder.of(BarrelBlockEntity::new, - EBlocks.OAK_BARREL.get(), - EBlocks.SPRUCE_BARREL.get(), - EBlocks.BIRCH_BARREL.get(), - EBlocks.JUNGLE_BARREL.get(), - EBlocks.ACACIA_BARREL.get(), - EBlocks.DARK_OAK_BARREL.get(), - EBlocks.MANGROVE_BARREL.get(), - EBlocks.CHERRY_BARREL.get(), - EBlocks.BAMBOO_BARREL.get(), - EBlocks.CRIMSON_BARREL.get(), - EBlocks.WARPED_BARREL.get(), - EBlocks.STONE_BARREL.get(), - // BOP - EBlocks.FIR_BARREL.get(), - EBlocks.REDWOOD_BARREL.get(), - EBlocks.MAHOGANY_BARREL.get(), - EBlocks.JACARANDA_BARREL.get(), - EBlocks.PALM_BARREL.get(), - EBlocks.WILLOW_BARREL.get(), - EBlocks.DEAD_BARREL.get(), - EBlocks.MAGIC_BARREL.get(), - EBlocks.UMBRAN_BARREL.get(), - EBlocks.HELLBARK_BARREL.get(), - // Ars Nouveau - EBlocks.ARCHWOOD_BARREL.get(), - // Aether - EBlocks.SKYROOT_BARREL.get(), - // Blue Skies - EBlocks.BLUEBRIGHT_BARREL.get(), - EBlocks.STARLIT_BARREL.get(), - EBlocks.FROSTBRIGHT_BARREL.get(), - EBlocks.COMET_BARREL.get(), - EBlocks.LUNAR_BARREL.get(), - EBlocks.DUSK_BARREL.get(), - EBlocks.MAPLE_BARREL.get(), - EBlocks.CRYSTALLIZED_BARREL.get() - ).build(null)); + public static final RegistryObject> BARREL = BLOCK_ENTITIES.register("barrel", BarrelMaterial::createBlockEntityType); public static final RegistryObject> SIEVE = BLOCK_ENTITIES.register("sieve", () -> BlockEntityType.Builder.of(SieveBlockEntity::new, EBlocks.OAK_SIEVE.get(), EBlocks.SPRUCE_SIEVE.get(), diff --git a/src/main/java/thedarkcolour/exdeorum/registry/EBlocks.java b/src/main/java/thedarkcolour/exdeorum/registry/EBlocks.java index 5f8d5d4f..d4798c27 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/EBlocks.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/EBlocks.java @@ -35,6 +35,7 @@ import thedarkcolour.exdeorum.block.*; import static net.minecraft.world.level.block.state.BlockBehaviour.Properties.copy; import static net.minecraft.world.level.block.state.BlockBehaviour.Properties.of; +// READER'S NOTE: More blocks are found in DefaultMaterials.java public class EBlocks { public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ExDeorum.ID); @@ -45,44 +46,6 @@ public class EBlocks { public static final RegistryObject CRUSHED_DEEPSLATE = BLOCKS.register("crushed_deepslate", () -> new FallingBlock(of().mapColor(DyeColor.GRAY).sound(SoundType.SAND).strength(0.8f))); public static final RegistryObject CRUSHED_BLACKSTONE = BLOCKS.register("crushed_blackstone", () -> new FallingBlock(of().mapColor(DyeColor.BLACK).sound(SoundType.SAND).strength(0.6f))); - // Barrels - public static final RegistryObject OAK_BARREL = registerBarrel("oak_barrel", false, false, MapColor.WOOD); - public static final RegistryObject SPRUCE_BARREL = registerBarrel("spruce_barrel", false, false, MapColor.PODZOL); - public static final RegistryObject BIRCH_BARREL = registerBarrel("birch_barrel", false, false, MapColor.SAND); - public static final RegistryObject JUNGLE_BARREL = registerBarrel("jungle_barrel", false, false, MapColor.DIRT); - public static final RegistryObject ACACIA_BARREL = registerBarrel("acacia_barrel", false, false, MapColor.COLOR_ORANGE); - public static final RegistryObject DARK_OAK_BARREL = registerBarrel("dark_oak_barrel", false, false, MapColor.COLOR_BROWN); - public static final RegistryObject MANGROVE_BARREL = registerBarrel("mangrove_barrel", false, false, MapColor.COLOR_RED); - public static final RegistryObject CHERRY_BARREL = registerBarrel("cherry_barrel", false, false, MapColor.TERRACOTTA_WHITE); - public static final RegistryObject BAMBOO_BARREL = registerBarrel("bamboo_barrel", false, false, MapColor.COLOR_YELLOW); - public static final RegistryObject CRIMSON_BARREL = registerBarrel("crimson_barrel", false, true, MapColor.CRIMSON_STEM); - public static final RegistryObject WARPED_BARREL = registerBarrel("warped_barrel", false, true, MapColor.WARPED_STEM); - public static final RegistryObject STONE_BARREL = registerBarrel("stone_barrel", true, true, MapColor.STONE); - // BOP Barrels - public static final RegistryObject FIR_BARREL = registerBarrel("fir_barrel", false, false, MapColor.TERRACOTTA_WHITE); - public static final RegistryObject REDWOOD_BARREL = registerBarrel("redwood_barrel", false, false, MapColor.TERRACOTTA_ORANGE); - public static final RegistryObject MAHOGANY_BARREL = registerBarrel("mahogany_barrel", false, false, MapColor.TERRACOTTA_PINK); - public static final RegistryObject JACARANDA_BARREL = registerBarrel("jacaranda_barrel", false, false, MapColor.QUARTZ); - public static final RegistryObject PALM_BARREL = registerBarrel("palm_barrel", false, false, MapColor.TERRACOTTA_YELLOW); - public static final RegistryObject WILLOW_BARREL = registerBarrel("willow_barrel", false, false, MapColor.TERRACOTTA_LIGHT_GREEN); - public static final RegistryObject DEAD_BARREL = registerBarrel("dead_barrel", false, false, MapColor.STONE); - public static final RegistryObject MAGIC_BARREL = registerBarrel("magic_barrel", false, false, MapColor.COLOR_BLUE); - public static final RegistryObject UMBRAN_BARREL = registerBarrel("umbran_barrel", false, false, MapColor.TERRACOTTA_BLUE); - public static final RegistryObject HELLBARK_BARREL = registerBarrel("hellbark_barrel", false, false, MapColor.TERRACOTTA_GRAY); - // Ars Nouveau Barrels - public static final RegistryObject ARCHWOOD_BARREL = registerBarrel("archwood_barrel", false, false, MapColor.COLOR_GRAY); - // Aether Barrels - public static final RegistryObject SKYROOT_BARREL = registerBarrel("skyroot_barrel", false, false, MapColor.WOOD); - // Blue Skies Barrels - public static final RegistryObject BLUEBRIGHT_BARREL = registerBarrel("bluebright_barrel", false, false, MapColor.WOOD); - public static final RegistryObject STARLIT_BARREL = registerBarrel("starlit_barrel", false, false, MapColor.WOOD); - public static final RegistryObject FROSTBRIGHT_BARREL = registerBarrel("frostbright_barrel", false, false, MapColor.WOOD); - public static final RegistryObject COMET_BARREL = registerBarrel("comet_barrel", false, false, MapColor.WOOD); - public static final RegistryObject LUNAR_BARREL = registerBarrel("lunar_barrel", false, false, MapColor.WOOD); - public static final RegistryObject DUSK_BARREL = registerBarrel("dusk_barrel", false, false, MapColor.WOOD); - public static final RegistryObject MAPLE_BARREL = registerBarrel("maple_barrel", false, false, MapColor.WOOD); - public static final RegistryObject CRYSTALLIZED_BARREL = registerBarrel("crystallized_barrel", true, true, MapColor.TERRACOTTA_WHITE); - // Sieves public static final RegistryObject OAK_SIEVE = registerSieve("oak_sieve"); public static final RegistryObject SPRUCE_SIEVE = registerSieve("spruce_sieve"); @@ -184,24 +147,6 @@ public class EBlocks { return BLOCKS.register(name, () -> new SieveBlock(of().strength(2.0f).noOcclusion().sound(sound))); } - public static RegistryObject registerBarrel(String name, boolean stone, boolean fireproof, MapColor color) { - var bamboo = name.equals("bamboo_barrel"); - var crystallized = name.equals("crystallized_barrel"); - - return BLOCKS.register(name, () -> { - var props = of().noOcclusion().strength(stone ? 4.0f : 2.0f).sound(stone ? (crystallized ? SoundType.GLASS : SoundType.STONE) : (bamboo ? SoundType.BAMBOO_WOOD : SoundType.WOOD)); - if (!stone) { - if (!fireproof) { - props.ignitedByLava(); - } - } else { - props.requiresCorrectToolForDrops(); - } - props.mapColor(color); - return new BarrelBlock(props); - }); - } - public static RegistryObject registerLavaCrucible(String name, boolean stone, SoundType sound) { return BLOCKS.register(name, () -> { var props = of().noOcclusion().strength(stone ? 2.0f : 1.5f).sound(sound); diff --git a/src/main/java/thedarkcolour/exdeorum/registry/EItems.java b/src/main/java/thedarkcolour/exdeorum/registry/EItems.java index 778ec879..f9c72668 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/EItems.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/EItems.java @@ -34,6 +34,7 @@ import net.minecraftforge.registries.RegistryObject; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.compat.ModIds; import thedarkcolour.exdeorum.item.*; +import thedarkcolour.exdeorum.material.BarrelMaterial; import thedarkcolour.exdeorum.recipe.RecipeUtil; import thedarkcolour.exdeorum.tag.EItemTags; @@ -149,44 +150,6 @@ public class EItems { public static final RegistryObject CRUSHED_DEEPSLATE = registerItemBlock(EBlocks.CRUSHED_DEEPSLATE); public static final RegistryObject CRUSHED_BLACKSTONE = registerItemBlock(EBlocks.CRUSHED_BLACKSTONE); - // Barrels - public static final RegistryObject OAK_BARREL = registerItemBlock(EBlocks.OAK_BARREL); - public static final RegistryObject SPRUCE_BARREL = registerItemBlock(EBlocks.SPRUCE_BARREL); - public static final RegistryObject BIRCH_BARREL = registerItemBlock(EBlocks.BIRCH_BARREL); - public static final RegistryObject JUNGLE_BARREL = registerItemBlock(EBlocks.JUNGLE_BARREL); - public static final RegistryObject ACACIA_BARREL = registerItemBlock(EBlocks.ACACIA_BARREL); - public static final RegistryObject DARK_OAK_BARREL = registerItemBlock(EBlocks.DARK_OAK_BARREL); - public static final RegistryObject MANGROVE_BARREL = registerItemBlock(EBlocks.MANGROVE_BARREL); - public static final RegistryObject CHERRY_BARREL = registerItemBlock(EBlocks.CHERRY_BARREL); - public static final RegistryObject BAMBOO_BARREL = registerItemBlock(EBlocks.BAMBOO_BARREL); - public static final RegistryObject CRIMSON_BARREL = registerItemBlock(EBlocks.CRIMSON_BARREL); - public static final RegistryObject WARPED_BARREL = registerItemBlock(EBlocks.WARPED_BARREL); - public static final RegistryObject STONE_BARREL = registerItemBlock(EBlocks.STONE_BARREL); - // BOP Barrels - public static final RegistryObject FIR_BARREL = registerItemBlock(EBlocks.FIR_BARREL); - public static final RegistryObject REDWOOD_BARREL = registerItemBlock(EBlocks.REDWOOD_BARREL); - public static final RegistryObject MAHOGANY_BARREL = registerItemBlock(EBlocks.MAHOGANY_BARREL); - public static final RegistryObject JACARANDA_BARREL = registerItemBlock(EBlocks.JACARANDA_BARREL); - public static final RegistryObject PALM_BARREL = registerItemBlock(EBlocks.PALM_BARREL); - public static final RegistryObject WILLOW_BARREL = registerItemBlock(EBlocks.WILLOW_BARREL); - public static final RegistryObject DEAD_BARREL = registerItemBlock(EBlocks.DEAD_BARREL); - public static final RegistryObject MAGIC_BARREL = registerItemBlock(EBlocks.MAGIC_BARREL); - public static final RegistryObject UMBRAN_BARREL = registerItemBlock(EBlocks.UMBRAN_BARREL); - public static final RegistryObject HELLBARK_BARREL = registerItemBlock(EBlocks.HELLBARK_BARREL); - // Ars Nouveau Barrels - public static final RegistryObject ARCHWOOD_BARREL = registerItemBlock(EBlocks.ARCHWOOD_BARREL); - // Aether Barrels - public static final RegistryObject SKYROOT_BARREL = registerItemBlock(EBlocks.SKYROOT_BARREL); - // Blue Skies Barrels - public static final RegistryObject BLUEBRIGHT_BARREL = registerItemBlock(EBlocks.BLUEBRIGHT_BARREL); - public static final RegistryObject STARLIT_BARREL = registerItemBlock(EBlocks.STARLIT_BARREL); - public static final RegistryObject FROSTBRIGHT_BARREL = registerItemBlock(EBlocks.FROSTBRIGHT_BARREL); - public static final RegistryObject COMET_BARREL = registerItemBlock(EBlocks.COMET_BARREL); - public static final RegistryObject LUNAR_BARREL = registerItemBlock(EBlocks.LUNAR_BARREL); - public static final RegistryObject DUSK_BARREL = registerItemBlock(EBlocks.DUSK_BARREL); - public static final RegistryObject MAPLE_BARREL = registerItemBlock(EBlocks.MAPLE_BARREL); - public static final RegistryObject CRYSTALLIZED_BARREL = registerItemBlock(EBlocks.CRYSTALLIZED_BARREL); - // Sieves public static final RegistryObject OAK_SIEVE = registerItemBlock(EBlocks.OAK_SIEVE); public static final RegistryObject SPRUCE_SIEVE = registerItemBlock(EBlocks.SPRUCE_SIEVE); @@ -282,50 +245,13 @@ public class EItems { boolean aether = ModList.get().isLoaded(ModIds.AETHER); boolean blueSkies = ModList.get().isLoaded(ModIds.BLUE_SKIES); - output.accept(OAK_BARREL.get()); - output.accept(SPRUCE_BARREL.get()); - output.accept(BIRCH_BARREL.get()); - output.accept(JUNGLE_BARREL.get()); - output.accept(ACACIA_BARREL.get()); - output.accept(DARK_OAK_BARREL.get()); - output.accept(MANGROVE_BARREL.get()); - output.accept(CHERRY_BARREL.get()); - output.accept(BAMBOO_BARREL.get()); - output.accept(CRIMSON_BARREL.get()); - output.accept(WARPED_BARREL.get()); - output.accept(STONE_BARREL.get()); - - if (biomesOPlenty) { - output.accept(FIR_BARREL.get()); - output.accept(REDWOOD_BARREL.get()); - output.accept(MAHOGANY_BARREL.get()); - output.accept(JACARANDA_BARREL.get()); - output.accept(PALM_BARREL.get()); - output.accept(WILLOW_BARREL.get()); - output.accept(DEAD_BARREL.get()); - output.accept(MAGIC_BARREL.get()); - output.accept(UMBRAN_BARREL.get()); - output.accept(HELLBARK_BARREL.get()); - } - if (arsNouveau) { - output.accept(ARCHWOOD_BARREL.get()); - } - if (aether) { - output.accept(SKYROOT_BARREL.get()); - } - if (blueSkies) { - output.accept(BLUEBRIGHT_BARREL.get()); - output.accept(STARLIT_BARREL.get()); - output.accept(FROSTBRIGHT_BARREL.get()); - output.accept(COMET_BARREL.get()); - output.accept(LUNAR_BARREL.get()); - output.accept(DUSK_BARREL.get()); - output.accept(MAPLE_BARREL.get()); - output.accept(CRYSTALLIZED_BARREL.get()); + for (var material : BarrelMaterial.REGISTERED_MATERIALS) { + if (ModList.get().isLoaded(material.requiredModId)) { + output.accept(material.getItem()); + } } output.accept(OAK_SIEVE.get()); - output.accept(SPRUCE_SIEVE.get()); output.accept(BIRCH_SIEVE.get()); output.accept(JUNGLE_SIEVE.get()); diff --git a/src/main/resources/default_materials/barrel/oak.json b/src/main/resources/default_materials/barrel/oak.json deleted file mode 100644 index 7ae39623..00000000 --- a/src/main/resources/default_materials/barrel/oak.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "exdeorum:barrel", - "sound_type": "wood", - "strength": 4.0, - "fireproof": false, - "map_color": "wood", -} \ No newline at end of file