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/blockentity/BarrelBlockEntity.java b/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java index 22a9e3c9..1132e01c 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java @@ -59,6 +59,7 @@ import thedarkcolour.exdeorum.block.BarrelBlock; import thedarkcolour.exdeorum.blockentity.helper.FluidHelper; import thedarkcolour.exdeorum.client.CompostColors; import thedarkcolour.exdeorum.config.EConfig; +import thedarkcolour.exdeorum.material.BarrelMaterial; import thedarkcolour.exdeorum.recipe.RecipeUtil; import thedarkcolour.exdeorum.recipe.barrel.BarrelFluidMixingRecipe; import thedarkcolour.exdeorum.registry.EBlockEntities; @@ -75,14 +76,17 @@ public class BarrelBlockEntity extends EBlockEntity { public short r, g, b; // Used to avoid triggering obsidian dupes in onContentsChanged, because Forge's FluidUtil actually modifies the tank for some reason private boolean isBeingFilledByPlayer; - - public BarrelBlockEntity(BlockPos pos, BlockState state) { - super(EBlockEntities.BARREL.get(), pos, state); - } + public final boolean transparent; private final LazyOptional itemHandler = LazyOptional.of(() -> this.item); private final LazyOptional fluidHandler = LazyOptional.of(() -> this.tank); + public BarrelBlockEntity(BlockPos pos, BlockState state) { + super(EBlockEntities.BARREL.get(), pos, state); + + this.transparent = BarrelMaterial.TRANSPARENT_BARRELS.contains(state.getBlock()); + } + @Override public LazyOptional getCapability(Capability cap, Direction side) { if (cap == ForgeCapabilities.FLUID_HANDLER) { 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/client/RenderUtil.java b/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java index 82c36178..c134dff9 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java @@ -49,6 +49,7 @@ import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import net.minecraftforge.client.model.CompositeModel; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.registries.ForgeRegistries; +import org.joml.Matrix4f; import org.joml.Vector3f; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.client.ter.SieveRenderer; @@ -171,6 +172,70 @@ public class RenderUtil { RenderUtil.renderFlatSprite(builder, stack, y, r, g, b, RenderUtil.blockAtlas.getSprite(extensions.getStillTexture(state, level, pos)), light, edge); } + @SuppressWarnings("DuplicatedCode") + public static void renderFluidCube(MultiBufferSource buffers, PoseStack stack, Level level, BlockPos pos, float minY, float maxY, float edge, int light, int r, int g, int b, Fluid fluid) { + var extensions = IClientFluidTypeExtensions.of(fluid); + var state = fluid.defaultFluidState(); + var builder = buffers.getBuffer(Sheets.translucentCullBlockSheet()); + var pose = stack.last().pose(); + var poseNormal = stack.last().normal(); + + Vector3f normal; + TextureAtlasSprite sprite = RenderUtil.blockAtlas.getSprite(extensions.getStillTexture(state, level, pos)); + float uMin = sprite.getU0(); + float uMax = sprite.getU1(); + float vMin = sprite.getV0(); + float vMax = sprite.getV1(); + + float edgeMin = edge / 16f; + float edgeMax = 1f - edge / 16f; + + // Top face + normal = poseNormal.transform(new Vector3f(0, 1, 0)); + builder.vertex(pose, edgeMin, maxY, edgeMin).color(r, g, b, 255).uv(uMin, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, maxY, edgeMax).color(r, g, b, 255).uv(uMin, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, maxY, edgeMax).color(r, g, b, 255).uv(uMax, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, maxY, edgeMin).color(r, g, b, 255).uv(uMax, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + // Bottom face + normal = poseNormal.transform(new Vector3f(0, -1, 0)); + builder.vertex(pose, edgeMin, minY, edgeMin).color(r, g, b, 255).uv(uMin, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, minY, edgeMin).color(r, g, b, 255).uv(uMax, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, minY, edgeMax).color(r, g, b, 255).uv(uMax, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, minY, edgeMax).color(r, g, b, 255).uv(uMin, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + + // Flowing texture coordinates + //sprite = RenderUtil.blockAtlas.getSprite(extensions.getFlowingTexture(state, level, pos)); + //uMin = sprite.getU0(); + //uMax = sprite.getU(8); + //vMin = sprite.getV0(); + //vMax = sprite.getV(8); + + // South face + normal = poseNormal.transform(new Vector3f(0, 0, 1)); + builder.vertex(pose, edgeMax, maxY, edgeMax).color(r, g, b, 255).uv(uMax, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, maxY, edgeMax).color(r, g, b, 255).uv(uMin, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, minY, edgeMax).color(r, g, b, 255).uv(uMin, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, minY, edgeMax).color(r, g, b, 255).uv(uMax, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + // North face + normal = poseNormal.transform(new Vector3f(0, 0, -1)); + builder.vertex(pose, edgeMin, maxY, edgeMin).color(r, g, b, 255).uv(uMin, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, maxY, edgeMin).color(r, g, b, 255).uv(uMax, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, minY, edgeMin).color(r, g, b, 255).uv(uMax, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, minY, edgeMin).color(r, g, b, 255).uv(uMin, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + // East face + normal = poseNormal.transform(new Vector3f(1, 0, 0)); + builder.vertex(pose, edgeMax, maxY, edgeMin).color(r, g, b, 255).uv(uMin, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, maxY, edgeMax).color(r, g, b, 255).uv(uMax, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, minY, edgeMax).color(r, g, b, 255).uv(uMax, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMax, minY, edgeMin).color(r, g, b, 255).uv(uMin, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + // West face + normal = poseNormal.transform(new Vector3f(-1, 0, 0)); + builder.vertex(pose, edgeMin, maxY, edgeMax).color(r, g, b, 255).uv(uMax, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, maxY, edgeMin).color(r, g, b, 255).uv(uMin, vMin).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, minY, edgeMin).color(r, g, b, 255).uv(uMin, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + builder.vertex(pose, edgeMin, minY, edgeMax).color(r, g, b, 255).uv(uMax, vMax).overlayCoords(0, 10).uv2(light).normal(normal.x, normal.y, normal.z).endVertex(); + } + // Renders a sprite inside the barrel with the height determined by how full the barrel is. public static void renderFlatSpriteLerp(VertexConsumer builder, PoseStack stack, float percentage, int r, int g, int b, TextureAtlasSprite sprite, int light, float edge, float yMin, float yMax) { float y = Mth.lerp(percentage, yMin, yMax) / 16f; diff --git a/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java b/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java index dd269ae1..68288451 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java @@ -97,7 +97,11 @@ public class BarrelRenderer implements BlockEntityRenderer { b = (int) Mth.lerp(progress, b, 65); } - RenderUtil.renderFlatFluidSprite(buffers, stack, level, pos, y, 2.0f, light, r, g, b, fluid); + if (barrel.transparent) { + RenderUtil.renderFluidCube(buffers, stack, level, pos, 1 / 16f, y, 2.0f, light, r, g, b, fluid); + } else { + RenderUtil.renderFlatFluidSprite(buffers, stack, level, pos, y, 2.0f, light, r, g, b, fluid); + } } }); 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 bc242cb6..97267fa7 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)); @@ -319,8 +321,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)); }); } @@ -363,8 +365,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/event/EventHandler.java b/src/main/java/thedarkcolour/exdeorum/event/EventHandler.java index 9c4eb414..85479d57 100644 --- a/src/main/java/thedarkcolour/exdeorum/event/EventHandler.java +++ b/src/main/java/thedarkcolour/exdeorum/event/EventHandler.java @@ -66,6 +66,7 @@ import thedarkcolour.exdeorum.compat.ModIds; import thedarkcolour.exdeorum.compat.top.ExDeorumTopCompat; import thedarkcolour.exdeorum.config.EConfig; import thedarkcolour.exdeorum.item.WateringCanItem; +import thedarkcolour.exdeorum.material.BarrelMaterial; import thedarkcolour.exdeorum.network.NetworkHandler; import thedarkcolour.exdeorum.network.VisualUpdateTracker; import thedarkcolour.exdeorum.recipe.RecipeUtil; @@ -180,6 +181,8 @@ public final class EventHandler { (level, pos, relative, state) -> level.getFluidState(relative).getFluidType() == ForgeMod.WATER_TYPE.get() && EConfig.SERVER.witchWaterDirtGenerator.get(), fluidState -> Util.getRandom(dirtVariants, rng) )); + + BarrelMaterial.loadTransparentBlocks(); }); } diff --git a/src/main/java/thedarkcolour/exdeorum/material/BarrelMaterial.java b/src/main/java/thedarkcolour/exdeorum/material/BarrelMaterial.java new file mode 100644 index 00000000..d0f1b18e --- /dev/null +++ b/src/main/java/thedarkcolour/exdeorum/material/BarrelMaterial.java @@ -0,0 +1,247 @@ +/* + * 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.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; + +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; +import java.util.Set; + +public final class BarrelMaterial { + // Use a linked hash map to maintain insertion order + public static final List REGISTERED_MATERIALS = new ArrayList<>(); + public static final Set TRANSPARENT_BARRELS = new HashSet<>(); + + 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; + } + + 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); + } + + public static void loadTransparentBlocks() { + for (var material : REGISTERED_MATERIALS) { + if (material.transparent) { + TRANSPARENT_BARRELS.add(material.getBlock()); + } + } + } + + // 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 39babe66..5ddf3599 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 8f9e52cd..02e68abf 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); @@ -284,50 +247,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());