diff --git a/fabric/dependencies.gradle b/fabric/dependencies.gradle index 155dd749..9cb622fa 100644 --- a/fabric/dependencies.gradle +++ b/fabric/dependencies.gradle @@ -8,5 +8,7 @@ repositories { dependencies { modRuntimeOnly "me.shedaniel.cloth:cloth-config-fabric:11.0.99" modCompileOnly "com.terraformersmc:modmenu:$modmenu_version" - modImplementation "curse.maven:jade-324717:$jade_fabric_version" + modCompileOnly "curse.maven:jade-324717:$jade_fabric_version" + modImplementation "curse.maven:fabricae-ex-nihilo-596911:5298550" + modRuntimeOnly("com.github.mattidragon:configtoolkit:1.0.0") } \ No newline at end of file diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/compat/fabricaeexnihilo/FabricaeExNihiloAddon.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/compat/fabricaeexnihilo/FabricaeExNihiloAddon.java new file mode 100644 index 00000000..a89961a6 --- /dev/null +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/compat/fabricaeexnihilo/FabricaeExNihiloAddon.java @@ -0,0 +1,365 @@ +package net.blay09.mods.excompressum.fabric.compat.fabricaeexnihilo; + +import com.google.common.collect.ArrayListMultimap; +import com.mojang.datafixers.util.Pair; +import it.unimi.dsi.fastutil.ints.IntList; +import net.blay09.mods.balm.api.Balm; +import net.blay09.mods.excompressum.ExCompressum; +import net.blay09.mods.excompressum.api.ExNihiloProvider; +import net.blay09.mods.excompressum.api.recipe.CompressedHammerRecipe; +import net.blay09.mods.excompressum.api.recipe.HammerRecipe; +import net.blay09.mods.excompressum.api.recipe.HeavySieveRecipe; +import net.blay09.mods.excompressum.api.recipe.SieveRecipe; +import net.blay09.mods.excompressum.api.sievemesh.CommonMeshType; +import net.blay09.mods.excompressum.api.sievemesh.SieveMeshRegistryEntry; +import net.blay09.mods.excompressum.compat.Compat; +import net.blay09.mods.excompressum.loot.LootTableUtils; +import net.blay09.mods.excompressum.registry.ExNihilo; +import net.blay09.mods.excompressum.registry.hammer.HammerRecipeImpl; +import net.blay09.mods.excompressum.registry.sieve.SieveRecipeImpl; +import net.blay09.mods.excompressum.registry.sievemesh.SieveMeshRegistry; +import net.blay09.mods.excompressum.utils.StupidUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import org.jetbrains.annotations.Nullable; +import wraith.fabricaeexnihilo.recipe.ModRecipes; +import wraith.fabricaeexnihilo.recipe.ToolRecipe; +import wraith.fabricaeexnihilo.recipe.util.BlockIngredient; +import wraith.fabricaeexnihilo.recipe.util.Loot; + +import java.util.*; + +public class FabricaeExNihiloAddon implements ExNihiloProvider { + + private final Map meshTypeToMeshId = new HashMap<>(); + private final Map meshIdToMeshType = new HashMap<>(); + + public FabricaeExNihiloAddon() { + ExNihilo.setInstance(this); + + final var stringMeshItem = findItem("string_mesh"); + if (!stringMeshItem.isEmpty()) { + final var backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "string_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.STRING, stringMeshItem, backingMesh); + mesh.setMeshLevel(1); + mesh.setModelName("string"); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.STRING); + meshTypeToMeshId.put(CommonMeshType.STRING, backingMesh); + } + + final var flintMeshItem = findItem("flint_mesh"); + if (!flintMeshItem.isEmpty()) { + final var backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "flint_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.FLINT, flintMeshItem, backingMesh); + mesh.setMeshLevel(2); + mesh.setModelName("flint"); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.FLINT); + meshTypeToMeshId.put(CommonMeshType.FLINT, backingMesh); + } + + final var ironMeshItem = findItem("iron_mesh"); + if (!ironMeshItem.isEmpty()) { + ResourceLocation backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "iron_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.IRON, ironMeshItem, backingMesh); + mesh.setMeshLevel(3); + mesh.setHeavy(true); + mesh.setModelName("iron"); + SieveMeshRegistry.registerDefaults(backingMesh); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.IRON); + meshTypeToMeshId.put(CommonMeshType.IRON, backingMesh); + } + + final var copperMeshItem = findItem("copper_mesh"); + if (!copperMeshItem.isEmpty()) { + final var backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "copper_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.COPPER, copperMeshItem, backingMesh); + mesh.setMeshLevel(4); + mesh.setHeavy(true); + mesh.setModelName("copper"); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.COPPER); + meshTypeToMeshId.put(CommonMeshType.COPPER, backingMesh); + } + + final var goldMeshItem = findItem("gold_mesh"); + if (!goldMeshItem.isEmpty()) { + final var backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "gold_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.GOLD, goldMeshItem, backingMesh); + mesh.setMeshLevel(4); + mesh.setHeavy(true); + mesh.setModelName("gold"); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.GOLD); + meshTypeToMeshId.put(CommonMeshType.GOLD, backingMesh); + } + + final var diamondMeshItem = findItem("diamond_mesh"); + if (!diamondMeshItem.isEmpty()) { + final var backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "diamond_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.DIAMOND, diamondMeshItem, backingMesh); + mesh.setMeshLevel(4); + mesh.setHeavy(true); + mesh.setModelName("diamond"); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.DIAMOND); + meshTypeToMeshId.put(CommonMeshType.DIAMOND, backingMesh); + } + + final var emeraldMeshItem = findItem("emerald_mesh"); + if (!emeraldMeshItem.isEmpty()) { + final var backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "emerald_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.EMERALD, emeraldMeshItem, backingMesh); + mesh.setMeshLevel(5); + mesh.setHeavy(true); + mesh.setModelName("emerald"); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.EMERALD); + meshTypeToMeshId.put(CommonMeshType.EMERALD, backingMesh); + } + + final var netheriteMeshItem = findItem("netherite_mesh"); + if (!netheriteMeshItem.isEmpty()) { + final var backingMesh = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, "netherite_mesh"); + final var mesh = new SieveMeshRegistryEntry(CommonMeshType.NETHERITE, netheriteMeshItem, backingMesh); + mesh.setMeshLevel(6); + mesh.setHeavy(true); + mesh.setModelName("netherite"); + SieveMeshRegistry.add(mesh); + meshIdToMeshType.put(backingMesh, CommonMeshType.NETHERITE); + meshTypeToMeshId.put(CommonMeshType.NETHERITE, backingMesh); + } + } + + private ItemStack findItem(String name) { + ResourceLocation location = new ResourceLocation(Compat.FABRICAE_EX_NIHILO, name); + Item item = Balm.getRegistries().getItem(location); + return new ItemStack(item); + } + + @Override + public boolean isHammerable(Level level, BlockState state) { + final var recipes = ToolRecipe.find(ToolRecipe.ToolType.HAMMER, state, level); + return !recipes.isEmpty(); + } + + @Override + public boolean isHammerableCompressed(ItemStack itemStack) { + return false; + } + + @Override + public List rollHammerRewards(Level level, BlockState state, ItemStack toolItem, RandomSource rand) { + List drops = new ArrayList<>(); + final var recipes = ToolRecipe.find(ToolRecipe.ToolType.HAMMER, state, level); + for (final var recipe : recipes) { + drops.add(recipe.getResult().createStack(level.random)); + } + + return drops; + } + + @Override + public boolean isSiftableWithMesh(Level level, BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh) { + if (sieveMesh == null) { + return false; + } + + final var itemStack = StupidUtils.getItemStackFromState(state); + boolean waterlogged = sieveState.hasProperty(BlockStateProperties.WATERLOGGED) && sieveState.getValue(BlockStateProperties.WATERLOGGED); + final var recipes = wraith.fabricaeexnihilo.recipe.SieveRecipe.find(itemStack.getItem(), + waterlogged, + (ResourceLocation) sieveMesh.getBackingMesh(), + level); + return !recipes.isEmpty(); + } + + @Override + public boolean isHeavySiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh) { + return false; + } + + @Override + public Collection rollSieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + final var sourceStack = StupidUtils.getItemStackFromState(state); + boolean waterlogged = sieveState.hasProperty(BlockStateProperties.WATERLOGGED) && sieveState.getValue(BlockStateProperties.WATERLOGGED); + final var recipes = wraith.fabricaeexnihilo.recipe.SieveRecipe.find(sourceStack.getItem(), + waterlogged, + (ResourceLocation) sieveMesh.getBackingMesh(), + level); + List list = new ArrayList<>(); + for (final var recipe : recipes) { + list.add(recipe.createStack(level.random)); + } + return list; + } + + @Override + public Collection rollHeavySieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + return List.of(); + } + + @Override + public Collection rollCompressedHammerRewards(Level level, LootContext context, ItemStack itemStack) { + return List.of(); + } + + @Override + public List rollCrookRewards(ServerLevel level, BlockPos pos, BlockState state, @Nullable Entity entity, ItemStack tool, RandomSource rand) { + final var recipes = ToolRecipe.find(ToolRecipe.ToolType.CROOK, state, level); + List list = new ArrayList<>(); + for (final var recipe : recipes) { + list.add(recipe.getResult().createStack(level.random)); + } + return list; + } + + @Override + public LootTable generateHeavySieveLootTable(Level level, BlockState sieveState, ItemLike source, int count, SieveMeshRegistryEntry mesh) { + if (!(mesh.getBackingMesh() instanceof ResourceLocation)) { + return LootTable.EMPTY; + } + + LootTable.Builder tableBuilder = LootTable.lootTable(); + boolean waterlogged = sieveState.hasProperty(BlockStateProperties.WATERLOGGED) && sieveState.getValue(BlockStateProperties.WATERLOGGED); + final var recipes = wraith.fabricaeexnihilo.recipe.SieveRecipe.find(source.asItem(), waterlogged, (ResourceLocation) mesh.getBackingMesh(), level); + for (final var recipe : recipes) { + tableBuilder.withPool(buildLootPool(recipe).setRolls(ConstantValue.exactly(count))); + } + return tableBuilder.build(); + } + + @Override + public boolean doMeshesHaveDurability() { + return false; + } + + @Override + public int getMeshFortune(ItemStack meshStack) { + return 0; + } + + @Override + public int getMeshEfficiency(ItemStack meshStack) { + return 0; + } + + @Override + public boolean isCompressableOre(ItemStack itemStack) { + return false; + } + + @Override + public boolean isHammerableOre(ItemStack itemStack) { + return false; + } + + @Override + public List getHammerRecipes() { + List result = new ArrayList<>(); + + final var recipeManager = ExCompressum.proxy.get().getRecipeManager(null); + ArrayListMultimap groupedRecipes = ArrayListMultimap.create(); + for (final var hammerRecipe : recipeManager.getAllRecipesFor(ModRecipes.HAMMER)) { + groupedRecipes.put(fromBlockIngredient(hammerRecipe.getBlock()).getStackingIds(), hammerRecipe); + } + + for (final var packedStacks : groupedRecipes.keySet()) { + final var tableBuilder = LootTable.lootTable(); + for (final var hammerRecipe : groupedRecipes.get(packedStacks)) { + tableBuilder.withPool(buildLootPool(hammerRecipe.getResult())); + } + + final var firstRecipe = groupedRecipes.get(packedStacks).get(0); + final var input = fromBlockIngredient(firstRecipe.getBlock()); + final var lootTableProvider = tableBuilder.build(); + result.add(new HammerRecipeImpl(firstRecipe.getId(), input, lootTableProvider)); + } + + return result; + } + + private Ingredient fromBlockIngredient(BlockIngredient blockIngredient) { + return blockIngredient.getValue().map(block -> Ingredient.of(block.asItem()), tag -> { + final var items = new ArrayList(); + for (final var blockHolder : BuiltInRegistries.BLOCK.getTagOrEmpty(tag)) { + final var item = blockHolder.value().asItem(); + if (item != Items.AIR) { + items.add(item); + } + } + return Ingredient.of(items.toArray(new ItemLike[0])); + }); + } + + @Override + public List getCompressedHammerRecipes() { + return List.of(); + } + + @Override + public List getSieveRecipes() { + List result = new ArrayList<>(); + + final var recipeManager = ExCompressum.proxy.get().getRecipeManager(null); + ArrayListMultimap, wraith.fabricaeexnihilo.recipe.SieveRecipe> groupedRecipes = ArrayListMultimap.create(); + final var sieveRecipes = recipeManager.getAllRecipesFor(ModRecipes.SIEVE); + for (final var recipe : sieveRecipes) { + for (final var meshId : recipe.getRolls().keySet()) { + final var mesh = meshIdToMeshType.get(meshId); + groupedRecipes.put(Pair.of(recipe.getInput().getStackingIds(), mesh), recipe); + } + } + + for (final var packedStacks : groupedRecipes.keySet()) { + final var tableBuilder = LootTable.lootTable(); + for (final var recipe : groupedRecipes.get(packedStacks)) { + final var meshType = packedStacks.getSecond(); + final var meshId = meshTypeToMeshId.get(meshType); + final var rolls = recipe.getRolls().get(meshId); + if (rolls != null) { + tableBuilder.withPool(buildLootPool(new Loot(recipe.getResult(), rolls))); + } + } + + final var firstRecipe = groupedRecipes.get(packedStacks).get(0); + final var ingredient = firstRecipe.getInput(); + final var lootTable = tableBuilder.build(); + result.add(new SieveRecipeImpl(firstRecipe.getId(), ingredient, lootTable, firstRecipe.isWaterlogged(), packedStacks.getSecond(), null)); + } + + return result; + } + + @Override + public List getHeavySieveRecipes() { + return List.of(); + } + + private LootPool.Builder buildLootPool(Loot loot) { + final var poolBuilder = LootPool.lootPool(); + for (final var chance : loot.chances()) { + poolBuilder.add(LootTableUtils.buildLootEntry(loot.stack(), chance.floatValue())); + } + return poolBuilder; + } + +} diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java index f88a0961..9a9c7119 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java @@ -22,8 +22,7 @@ public ModItemTagProvider(FabricDataOutput output, CompletableFuture=7.0.0", diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exdeorum/ExDeorumAddon.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exdeorum/ExDeorumAddon.java index d8194832..cb46f1bb 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exdeorum/ExDeorumAddon.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exdeorum/ExDeorumAddon.java @@ -119,7 +119,7 @@ private ItemStack findItem(String name) { } @Override - public boolean isHammerable(BlockState state) { + public boolean isHammerable(Level level, BlockState state) { return RecipeUtil.getHammerRecipe(StupidUtils.getItemStackFromState(state).getItem()) != null; } @@ -140,7 +140,7 @@ public List rollHammerRewards(Level level, BlockState state, ItemStac } @Override - public boolean isSiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh) { + public boolean isSiftableWithMesh(Level level, BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh) { if (sieveMesh == null) { return false; } diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exnihilosequentia/ExNihiloSequentiaAddon.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exnihilosequentia/ExNihiloSequentiaAddon.java index 5acf6f0e..a2523e60 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exnihilosequentia/ExNihiloSequentiaAddon.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exnihilosequentia/ExNihiloSequentiaAddon.java @@ -1,7 +1,6 @@ package net.blay09.mods.excompressum.forge.compat.exnihilosequentia; import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Maps; import it.unimi.dsi.fastutil.ints.IntList; import net.blay09.mods.balm.api.Balm; import net.blay09.mods.excompressum.api.ExNihiloProvider; @@ -53,7 +52,7 @@ public class ExNihiloSequentiaAddon implements ExNihiloProvider { public ExNihiloSequentiaAddon() { ExNihilo.setInstance(this); - SieveMeshRegistry.registerDefaults(MeshType.STRING); + SieveMeshRegistry.registerDefaults(MeshType.IRON); ItemStack stringMeshItem = findItem("string_mesh"); if (!stringMeshItem.isEmpty()) { @@ -114,20 +113,13 @@ private ItemStack findItem(String name) { return new ItemStack(item); } - private ItemStack findBlock(String name) { - ResourceLocation location = new ResourceLocation(Compat.EXNIHILO_SEQUENTIA, name); - Block block = Balm.getRegistries().getBlock(location); - return new ItemStack(block); - } - - @Override public boolean isHammerableCompressed(ItemStack itemStack) { return false; } @Override - public boolean isHammerable(BlockState state) { + public boolean isHammerable(Level level, BlockState state) { return ExNihiloRegistries.HAMMER_REGISTRY.isHammerable(state.getBlock()); } @@ -145,7 +137,7 @@ public List rollHammerRewards(Level level, BlockState state, ItemStac } @Override - public boolean isSiftableWithMesh(BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh) { + public boolean isSiftableWithMesh(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh) { boolean waterlogged = sieveState.hasProperty(BlockStateProperties.WATERLOGGED) && sieveState.getValue(BlockStateProperties.WATERLOGGED); MeshType mesh = sieveMesh != null ? (MeshType) sieveMesh.getBackingMesh() : MeshType.NONE; return ExNihiloRegistries.SIEVE_REGISTRY.isBlockSiftable(state.getBlock(), mesh, waterlogged); diff --git a/gradle.properties b/gradle.properties index ee8a2bcf..9aa06f16 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,7 +28,7 @@ forge_mixins=true # Fabric fabric_version = 0.92.0+1.20.1 -fabric_loader_version = 0.15.7 +fabric_loader_version = 0.15.11 # Dependencies jei_minecraft_version=1.20.1 diff --git a/repositories.gradle b/repositories.gradle index e4d62653..164d89e5 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -45,6 +45,7 @@ repositories { url = 'https://jitpack.io' content { includeGroup "com.github.BlueMap-Minecraft" + includeGroup "com.github.mattidragon" } } diff --git a/shared/src/main/generated/data/excompressum/tags/items/copper_hammers.json b/shared/src/main/generated/data/excompressum/tags/items/copper_hammers.json index 14f1a523..6cfc68dd 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/copper_hammers.json +++ b/shared/src/main/generated/data/excompressum/tags/items/copper_hammers.json @@ -4,6 +4,10 @@ { "id": "exnihilosequentia:copper_hammer", "required": false + }, + { + "id": "exdeorum:copper_hammer", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/crushed_andesites.json b/shared/src/main/generated/data/excompressum/tags/items/crushed_andesites.json index 9919d6a3..31c2af00 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/crushed_andesites.json +++ b/shared/src/main/generated/data/excompressum/tags/items/crushed_andesites.json @@ -4,6 +4,10 @@ { "id": "exnihilosequentia:crushed_andesite", "required": false + }, + { + "id": "fabricaeexnihilo:crushed_andesite", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/crushed_diorites.json b/shared/src/main/generated/data/excompressum/tags/items/crushed_diorites.json index 26ed66fe..b0ef437a 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/crushed_diorites.json +++ b/shared/src/main/generated/data/excompressum/tags/items/crushed_diorites.json @@ -4,6 +4,10 @@ { "id": "exnihilosequentia:crushed_diorite", "required": false + }, + { + "id": "fabricaeexnihilo:crushed_diorite", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/crushed_end_stones.json b/shared/src/main/generated/data/excompressum/tags/items/crushed_end_stones.json index d5259518..f1d53c33 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/crushed_end_stones.json +++ b/shared/src/main/generated/data/excompressum/tags/items/crushed_end_stones.json @@ -8,6 +8,10 @@ { "id": "exdeorum:crushed_end_stone", "required": false + }, + { + "id": "fabricaeexnihilo:crushed_endstone", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/crushed_granites.json b/shared/src/main/generated/data/excompressum/tags/items/crushed_granites.json index d8325ec8..9e0f8044 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/crushed_granites.json +++ b/shared/src/main/generated/data/excompressum/tags/items/crushed_granites.json @@ -4,6 +4,10 @@ { "id": "exnihilosequentia:crushed_granite", "required": false + }, + { + "id": "fabricaeexnihilo:crushed_granite", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/crushed_netherracks.json b/shared/src/main/generated/data/excompressum/tags/items/crushed_netherracks.json index f45a412c..fdcbdff7 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/crushed_netherracks.json +++ b/shared/src/main/generated/data/excompressum/tags/items/crushed_netherracks.json @@ -8,6 +8,10 @@ { "id": "exdeorum:crushed_netherrack", "required": false + }, + { + "id": "fabricaeexnihilo:crushed_netherrack", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/diamond_hammers.json b/shared/src/main/generated/data/excompressum/tags/items/diamond_hammers.json index d1181626..c007a8d1 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/diamond_hammers.json +++ b/shared/src/main/generated/data/excompressum/tags/items/diamond_hammers.json @@ -8,6 +8,10 @@ { "id": "exdeorum:diamond_hammer", "required": false + }, + { + "id": "fabricaeexnihilo:diamond_hammer", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/dusts.json b/shared/src/main/generated/data/excompressum/tags/items/dusts.json index 30468c6d..db47f4fe 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/dusts.json +++ b/shared/src/main/generated/data/excompressum/tags/items/dusts.json @@ -8,6 +8,10 @@ { "id": "exdeorum:dust", "required": false + }, + { + "id": "fabricaeexnihilo:dust", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/golden_hammers.json b/shared/src/main/generated/data/excompressum/tags/items/golden_hammers.json index 3699e9fe..3a4e9a7f 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/golden_hammers.json +++ b/shared/src/main/generated/data/excompressum/tags/items/golden_hammers.json @@ -8,6 +8,10 @@ { "id": "exdeorum:golden_hammer", "required": false + }, + { + "id": "fabricaeexnihilo:golden_hammer", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/iron_hammers.json b/shared/src/main/generated/data/excompressum/tags/items/iron_hammers.json index a03ff566..5a08cef6 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/iron_hammers.json +++ b/shared/src/main/generated/data/excompressum/tags/items/iron_hammers.json @@ -8,6 +8,10 @@ { "id": "exdeorum:iron_hammer", "required": false + }, + { + "id": "fabricaeexnihilo:iron_hammer", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/netherite_hammers.json b/shared/src/main/generated/data/excompressum/tags/items/netherite_hammers.json index f69f2d72..d7e6d698 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/netherite_hammers.json +++ b/shared/src/main/generated/data/excompressum/tags/items/netherite_hammers.json @@ -8,6 +8,10 @@ { "id": "exdeorum:netherite_hammer", "required": false + }, + { + "id": "fabricaeexnihilo:netherite_hammer", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/sieves.json b/shared/src/main/generated/data/excompressum/tags/items/sieves.json index 4e4e1aa6..aeaf1b72 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/sieves.json +++ b/shared/src/main/generated/data/excompressum/tags/items/sieves.json @@ -80,6 +80,50 @@ { "id": "exdeorum:crimson_sieve", "required": false + }, + { + "id": "fabricaeexnihilo:acacia_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:birch_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:dark_oak_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:jungle_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:oak_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:spruce_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:cherry_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:mangrove_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:warped_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:crimson_sieve", + "required": false + }, + { + "id": "fabricaeexnihilo:bamboo_sieve", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/stone_hammers.json b/shared/src/main/generated/data/excompressum/tags/items/stone_hammers.json index cd35d7de..7a30f4e5 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/stone_hammers.json +++ b/shared/src/main/generated/data/excompressum/tags/items/stone_hammers.json @@ -8,6 +8,10 @@ { "id": "exdeorum:stone_hammer", "required": false + }, + { + "id": "fabricaeexnihilo:stone_hammer", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/wooden_crooks.json b/shared/src/main/generated/data/excompressum/tags/items/wooden_crooks.json index 0e82af5a..1beeeac0 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/wooden_crooks.json +++ b/shared/src/main/generated/data/excompressum/tags/items/wooden_crooks.json @@ -8,6 +8,10 @@ { "id": "exdeorum:crook", "required": false + }, + { + "id": "fabricaeexnihilo:wooden_crook", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/wooden_crucibles.json b/shared/src/main/generated/data/excompressum/tags/items/wooden_crucibles.json index 4d6a4740..69dc4644 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/wooden_crucibles.json +++ b/shared/src/main/generated/data/excompressum/tags/items/wooden_crucibles.json @@ -90,6 +90,50 @@ { "id": "exdeorum:warped_crucible", "required": false + }, + { + "id": "fabricaeexnihilo:acacia_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:birch_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:cherry_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:dark_oak_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:jungle_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:mangrove_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:oak_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:spruce_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:crimson_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:warped_crucible", + "required": false + }, + { + "id": "fabricaeexnihilo:bamboo_crucible", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/generated/data/excompressum/tags/items/wooden_hammers.json b/shared/src/main/generated/data/excompressum/tags/items/wooden_hammers.json index f9c1cb93..7bc26910 100644 --- a/shared/src/main/generated/data/excompressum/tags/items/wooden_hammers.json +++ b/shared/src/main/generated/data/excompressum/tags/items/wooden_hammers.json @@ -8,6 +8,10 @@ { "id": "exdeorum:wooden_hammer", "required": false + }, + { + "id": "fabricaeexnihilo:wooden_hammer", + "required": false } ] } \ No newline at end of file diff --git a/shared/src/main/java/net/blay09/mods/excompressum/ExCompressum.java b/shared/src/main/java/net/blay09/mods/excompressum/ExCompressum.java index 709f94e0..fa7bcf0f 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/ExCompressum.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/ExCompressum.java @@ -49,6 +49,7 @@ public static void initialize() { Balm.initializeIfLoaded(Compat.EXNIHILO_SEQUENTIA, "net.blay09.mods.excompressum.forge.compat.exnihilosequentia.ExNihiloSequentiaAddon"); Balm.initializeIfLoaded(Compat.EX_DEORUM, "net.blay09.mods.excompressum.forge.compat.exdeorum.ExDeorumAddon"); + Balm.initializeIfLoaded(Compat.FABRICAE_EX_NIHILO, "net.blay09.mods.excompressum.fabric.compat.fabricaeexnihilo.FabricaeExNihiloAddon"); AutoSieveSkinRegistry.load(); HammerSpeedHandler.initialize(); diff --git a/shared/src/main/java/net/blay09/mods/excompressum/api/ExNihiloProvider.java b/shared/src/main/java/net/blay09/mods/excompressum/api/ExNihiloProvider.java index 3a50d351..b54b8c45 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/api/ExNihiloProvider.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/api/ExNihiloProvider.java @@ -25,11 +25,11 @@ public interface ExNihiloProvider { boolean isHammerableCompressed(ItemStack itemStack); - boolean isHammerable(BlockState state); + boolean isHammerable(Level level, BlockState state); List rollHammerRewards(Level level, BlockState state, ItemStack tool, RandomSource rand); - boolean isSiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh); + boolean isSiftableWithMesh(Level level, BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh); boolean isHeavySiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh); diff --git a/shared/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java b/shared/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java index 8535183c..4386ed61 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java @@ -3,6 +3,7 @@ public enum CommonMeshType { STRING, FLINT, + COPPER, IRON, GOLD, DIAMOND, diff --git a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AbstractAutoSieveBlockEntity.java b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AbstractAutoSieveBlockEntity.java index a09a37f0..00f051d9 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AbstractAutoSieveBlockEntity.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AbstractAutoSieveBlockEntity.java @@ -306,7 +306,7 @@ public float getEffectiveLuck() { } public boolean isSiftableWithMesh(ItemStack itemStack, @Nullable SieveMeshRegistryEntry sieveMesh) { - return ExNihilo.isSiftableWithMesh(getBlockState(), itemStack, sieveMesh); + return ExNihilo.isSiftableWithMesh(level, getBlockState(), itemStack, sieveMesh); } private boolean isMesh(ItemStack itemStack) { diff --git a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHammerBlockEntity.java b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHammerBlockEntity.java index d351603f..52d35bca 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHammerBlockEntity.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHammerBlockEntity.java @@ -443,7 +443,7 @@ public boolean isRegistered(ItemStack itemStack) { } final var recipeManager = level.getRecipeManager(); - return ExNihilo.isHammerable(itemStack) || ExRegistries.getHammerRegistry().isHammerable(recipeManager, itemStack); + return ExNihilo.isHammerable(level, itemStack) || ExRegistries.getHammerRegistry().isHammerable(recipeManager, itemStack); } public Collection rollHammerRewards(ItemStack itemStack, ItemStack toolItem, RandomSource rand) { diff --git a/shared/src/main/java/net/blay09/mods/excompressum/compat/Compat.java b/shared/src/main/java/net/blay09/mods/excompressum/compat/Compat.java index 057fca75..074a8453 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/compat/Compat.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/compat/Compat.java @@ -2,5 +2,6 @@ public class Compat { public static final String EXNIHILO_SEQUENTIA = "exnihilosequentia"; + public static final String FABRICAE_EX_NIHILO = "fabricaeexnihilo"; public static final String EX_DEORUM = "exdeorum"; } diff --git a/shared/src/main/java/net/blay09/mods/excompressum/item/BatZapperItem.java b/shared/src/main/java/net/blay09/mods/excompressum/item/BatZapperItem.java index 2b77b39a..2500fd0a 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/item/BatZapperItem.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/item/BatZapperItem.java @@ -31,9 +31,16 @@ public InteractionResult useOn(UseOnContext context) { if (context.getPlayer() != null && context.getPlayer().getAbilities().instabuild) { final var blockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); if (blockEntity != null) { - final var energyStorage = Balm.getProviders().getProvider(blockEntity, EnergyStorage.class); - if (energyStorage != null) { - energyStorage.setEnergy(energyStorage.getCapacity()); + if (blockEntity instanceof BalmEnergyStorageProvider energyStorageProvider) { + final var energyStorage = energyStorageProvider.getEnergyStorage(); + if (energyStorage != null) { + energyStorage.setEnergy(energyStorage.getCapacity()); + } + } else { + final var energyStorage = Balm.getProviders().getProvider(blockEntity, EnergyStorage.class); + if (energyStorage != null) { + energyStorage.setEnergy(energyStorage.getCapacity()); + } } } } diff --git a/shared/src/main/java/net/blay09/mods/excompressum/item/OreSmasherItem.java b/shared/src/main/java/net/blay09/mods/excompressum/item/OreSmasherItem.java index d7fdbbaf..225fa380 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/item/OreSmasherItem.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/item/OreSmasherItem.java @@ -100,7 +100,7 @@ public InteractionResult useOn(UseOnContext context) { @Override public boolean mineBlock(ItemStack itemStack, Level level, BlockState state, BlockPos pos, LivingEntity entityLiving) { - if (!level.isClientSide && isCorrectToolForDrops(state) && ExNihilo.getInstance().isHammerable(state)) { + if (!level.isClientSide && isCorrectToolForDrops(state) && ExNihilo.getInstance().isHammerable(level, state)) { level.removeBlock(pos, false); Collection rewards = ExNihilo.getInstance().rollHammerRewards(level, state, itemStack, level.random); for (ItemStack rewardStack : rewards) { diff --git a/shared/src/main/java/net/blay09/mods/excompressum/loot/CompressedHammerLootModifier.java b/shared/src/main/java/net/blay09/mods/excompressum/loot/CompressedHammerLootModifier.java index c36e9ad5..56acae42 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/loot/CompressedHammerLootModifier.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/loot/CompressedHammerLootModifier.java @@ -49,7 +49,7 @@ public void apply(LootContext context, List list) { return; } - if (ExNihilo.getInstance().isHammerable(state)) { + if (ExNihilo.getInstance().isHammerable(context.getLevel(), state)) { synchronized (activeContexts) { activeContexts.add(context); } diff --git a/shared/src/main/java/net/blay09/mods/excompressum/loot/HammerLootModifier.java b/shared/src/main/java/net/blay09/mods/excompressum/loot/HammerLootModifier.java index b46dea34..139c94f2 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/loot/HammerLootModifier.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/loot/HammerLootModifier.java @@ -50,7 +50,7 @@ public void apply(LootContext context, List list) { return; } - if (ExNihilo.getInstance().isHammerable(state)) { + if (ExNihilo.getInstance().isHammerable(context.getLevel(), state)) { synchronized (activeContexts) { activeContexts.add(context); } diff --git a/shared/src/main/java/net/blay09/mods/excompressum/registry/ExNihilo.java b/shared/src/main/java/net/blay09/mods/excompressum/registry/ExNihilo.java index ba325adf..6c3e9804 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/registry/ExNihilo.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/registry/ExNihilo.java @@ -30,14 +30,14 @@ public static ExNihiloProvider getInstance() { return instance; } - public static boolean isHammerable(ItemStack itemStack) { + public static boolean isHammerable(Level level, ItemStack itemStack) { BlockState state = StupidUtils.getStateFromItemStack(itemStack); - return state != null && instance.isHammerable(state); + return state != null && instance.isHammerable(level, state); } - public static boolean isSiftableWithMesh(BlockState sieveState, ItemStack itemStack, @Nullable SieveMeshRegistryEntry sieveMesh) { + public static boolean isSiftableWithMesh(Level level, BlockState sieveState, ItemStack itemStack, @Nullable SieveMeshRegistryEntry sieveMesh) { BlockState state = StupidUtils.getStateFromItemStack(itemStack); - return state != null && instance.isSiftableWithMesh(sieveState, state, sieveMesh); + return state != null && instance.isSiftableWithMesh(level, sieveState, state, sieveMesh); } public static Collection rollSieveRewards(Level level, BlockState sieveState, ItemStack itemStack, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { diff --git a/shared/src/main/java/net/blay09/mods/excompressum/registry/NihilisticNihiloProvider.java b/shared/src/main/java/net/blay09/mods/excompressum/registry/NihilisticNihiloProvider.java index 85e294c2..91617f83 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/registry/NihilisticNihiloProvider.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/registry/NihilisticNihiloProvider.java @@ -30,7 +30,7 @@ public NihilisticNihiloProvider() { } @Override - public boolean isHammerable(BlockState state) { + public boolean isHammerable(Level level, BlockState state) { return false; } @@ -40,7 +40,7 @@ public List rollHammerRewards(Level level, BlockState state, ItemStac } @Override - public boolean isSiftableWithMesh(BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh) { + public boolean isSiftableWithMesh(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh) { return false; } diff --git a/shared/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java b/shared/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java index f1e366ae..116fe01a 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java @@ -39,9 +39,9 @@ private static boolean testRecipe(SieveMeshRegistryEntry mesh, ItemStack itemSta return recipe.getIngredient().test(itemStack); } - private static boolean testGeneratedRecipe(ItemStack itemStack, GeneratedHeavySieveRecipe generatedRecipe, BlockState sieve, SieveMeshRegistryEntry sieveMesh) { + private static boolean testGeneratedRecipe(Level level, ItemStack itemStack, GeneratedHeavySieveRecipe generatedRecipe, BlockState sieve, SieveMeshRegistryEntry sieveMesh) { Block sourceBlock = Balm.getRegistries().getBlock(generatedRecipe.getSource()); - return generatedRecipe.getInput().test(itemStack) && ExNihilo.isSiftableWithMesh(sieve, new ItemStack(sourceBlock), sieveMesh); + return generatedRecipe.getInput().test(itemStack) && ExNihilo.isSiftableWithMesh(level, sieve, new ItemStack(sourceBlock), sieveMesh); } public static List rollSieveRewards(Level level, LootContext context, BlockState sieve, SieveMeshRegistryEntry mesh, ItemStack itemStack) { @@ -60,7 +60,7 @@ public static List rollSieveRewards(Level level, LootContext context, final var generatedRecipes = recipeManager.getAllRecipesFor(ModRecipeTypes.generatedHeavySieveRecipeType); for (final var generatedRecipe : generatedRecipes) { - if (testGeneratedRecipe(itemStack, generatedRecipe, sieve, mesh)) { + if (testGeneratedRecipe(level, itemStack, generatedRecipe, sieve, mesh)) { int rolls = getGeneratedRollCount(generatedRecipe); ItemLike source = Balm.getRegistries().getItem(generatedRecipe.getSource()); LootTable lootTable = ExNihilo.getInstance().generateHeavySieveLootTable(level, sieve, source, rolls, mesh); @@ -92,7 +92,7 @@ public boolean isSiftable(Level level, BlockState sieve, ItemStack itemStack, Si final var generatedRecipes = recipeManager.getAllRecipesFor(ModRecipeTypes.generatedHeavySieveRecipeType); for (final var recipe : generatedRecipes) { - if (testGeneratedRecipe(itemStack, recipe, sieve, sieveMesh)) { + if (testGeneratedRecipe(level, itemStack, recipe, sieve, sieveMesh)) { return true; } } diff --git a/shared/src/main/resources/assets/excompressum/models/block/copper_mesh.json b/shared/src/main/resources/assets/excompressum/models/block/copper_mesh.json new file mode 100644 index 00000000..c4511e89 --- /dev/null +++ b/shared/src/main/resources/assets/excompressum/models/block/copper_mesh.json @@ -0,0 +1,17 @@ +{ + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "mesh": "excompressum:block/copper_mesh" + }, + "elements": [ + { + "name": "Mesh", + "from": [1, 8, 1], + "to": [15, 8.5, 15], + "faces": { + "up": {"uv": [0, 0, 16, 16], "texture": "#mesh"} + } + } + ] +} \ No newline at end of file diff --git a/shared/src/main/resources/assets/excompressum/textures/block/copper_mesh.png b/shared/src/main/resources/assets/excompressum/textures/block/copper_mesh.png new file mode 100644 index 00000000..3f2efb76 Binary files /dev/null and b/shared/src/main/resources/assets/excompressum/textures/block/copper_mesh.png differ