From 41576c8a61e94290ca9c98bdf08ff988c09cf9b0 Mon Sep 17 00:00:00 2001 From: BlayTheNinth <1933180+BlayTheNinth@users.noreply.github.com> Date: Sun, 30 Jun 2024 16:19:35 +0200 Subject: [PATCH] feat: Add initial Ex Deorum support #372 --- fabric/build.gradle | 1 + forge/build.gradle | 1 + forge/dependencies.gradle | 11 +- .../forge/compat/exdeorum/ExDeorumAddon.java | 329 ++++++++++++++++++ .../ExNihiloSequentiaAddon.java | 27 +- .../forge/compat/jei/JEIAddon.java | 9 +- repositories.gradle | 8 + shared/build.gradle | 1 + .../mods/excompressum/ExCompressum.java | 1 + .../excompressum/api/ExNihiloProvider.java | 16 +- .../api/sievemesh/CommonMeshType.java | 1 + .../entity/AbstractAutoSieveBlockEntity.java | 7 +- .../block/entity/AutoHammerBlockEntity.java | 2 +- .../entity/AutoHeavySieveBlockEntity.java | 7 +- .../block/entity/HeavySieveBlockEntity.java | 3 +- .../mods/excompressum/client/ModModels.java | 1 + .../blockentity/AutoHammerRenderer.java | 2 + .../mods/excompressum/compat/Compat.java | 1 + .../handler/HammerSpeedHandler.java | 7 +- .../excompressum/item/OreSmasherItem.java | 2 +- .../loot/CompressedHammerLootModifier.java | 3 +- .../excompressum/loot/HammerLootModifier.java | 3 +- .../mods/excompressum/registry/ExNihilo.java | 6 +- .../registry/NihilisticNihiloProvider.java | 28 +- .../CompressedHammerRegistry.java | 6 +- .../heavysieve/HeavySieveRegistry.java | 11 +- .../excompressum/models/block/gold_mesh.json | 17 + .../excompressum/textures/block/gold_mesh.png | Bin 0 -> 6041 bytes 28 files changed, 467 insertions(+), 44 deletions(-) create mode 100644 forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exdeorum/ExDeorumAddon.java create mode 100644 shared/src/main/resources/assets/excompressum/models/block/gold_mesh.json create mode 100644 shared/src/main/resources/assets/excompressum/textures/block/gold_mesh.png diff --git a/fabric/build.gradle b/fabric/build.gradle index 756da011..b304d6d0 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -38,6 +38,7 @@ dependencies { modCompileOnly "mcp.mobius.waila:wthit-api:mojmap-$wthit_version" } +apply from: rootProject.file('repositories.gradle') apply from: 'dependencies.gradle' loom { diff --git a/forge/build.gradle b/forge/build.gradle index 4ef600aa..bdd3d406 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -176,6 +176,7 @@ dependencies { compileOnly fg.deobf("curse.maven:the-one-probe-245211:$theoneprobe_version") } +apply from: rootProject.file('repositories.gradle') apply from: 'dependencies.gradle' tasks.withType(JavaCompile) { diff --git a/forge/dependencies.gradle b/forge/dependencies.gradle index 7f55c00f..68f40d92 100644 --- a/forge/dependencies.gradle +++ b/forge/dependencies.gradle @@ -1,14 +1,5 @@ -repositories { - maven { - url = "https://dl.cloudsmith.io/public/novamachina-mods/release/maven/" - content { - includeGroup "novamachina.novacore" - includeGroup "novamachina.exnihilosequentia" - } - } -} - dependencies { implementation(fg.deobf("novamachina.novacore:novacore:${novacore_version}")) implementation(fg.deobf("novamachina.exnihilosequentia:exnihilosequentia:${exnihilosequentia_version}")) + implementation(fg.deobf("curse.maven:ex-deorum-901420:5421677")) } \ No newline at end of file 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 new file mode 100644 index 00000000..e4bf8db1 --- /dev/null +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/exdeorum/ExDeorumAddon.java @@ -0,0 +1,329 @@ +package net.blay09.mods.excompressum.forge.compat.exdeorum; + +import com.google.common.collect.Maps; +import net.blay09.mods.balm.api.Balm; +import net.blay09.mods.excompressum.api.ExNihiloProvider; +import net.blay09.mods.excompressum.api.IHammerRecipe; +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.sievemesh.SieveMeshRegistry; +import net.blay09.mods.excompressum.utils.StupidUtils; +import net.minecraft.core.BlockPos; +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.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.exdeorum.recipe.RecipeUtil; + +import java.util.*; + +public class ExDeorumAddon implements ExNihiloProvider { + + private final EnumMap itemMap = Maps.newEnumMap(NihiloItems.class); + + public ExDeorumAddon() { + ExNihilo.setInstance(this); + + itemMap.put(NihiloItems.HAMMER_WOODEN, findItem("wooden_hammer")); + itemMap.put(NihiloItems.HAMMER_STONE, findItem("stone_hammer")); + itemMap.put(NihiloItems.HAMMER_IRON, findItem("iron_hammer")); + itemMap.put(NihiloItems.HAMMER_GOLD, findItem("golden_hammer")); + itemMap.put(NihiloItems.HAMMER_DIAMOND, findItem("diamond_hammer")); + itemMap.put(NihiloItems.HAMMER_NETHERITE, findItem("netherite_hammer")); + itemMap.put(NihiloItems.IRON_MESH, findItem("iron_mesh")); + + itemMap.put(NihiloItems.SIEVE, findBlock("oak_sieve")); + itemMap.put(NihiloItems.DUST, findBlock("dust")); + itemMap.put(NihiloItems.INFESTED_LEAVES, findBlock("infested_leaves")); + itemMap.put(NihiloItems.CRUSHED_NETHERRACK, findBlock("crushed_netherrack")); + itemMap.put(NihiloItems.CRUSHED_END_STONE, findBlock("crushed_end_stone")); + itemMap.put(NihiloItems.DIORITE_GRAVEL, findBlock("crushed_diorite")); + itemMap.put(NihiloItems.ANDESITE_GRAVEL, findBlock("crushed_andesite")); + itemMap.put(NihiloItems.GRANITE_GRAVEL, findBlock("crushed_granite")); + + final var stringMeshItem = findItem("string_mesh"); + if (!stringMeshItem.isEmpty()) { + SieveMeshRegistryEntry stringMesh = new SieveMeshRegistryEntry(CommonMeshType.STRING, stringMeshItem, stringMeshItem.getItem()); + stringMesh.setMeshLevel(1); + stringMesh.setModelName("string"); + SieveMeshRegistry.add(stringMesh); + } + + ItemStack flintMeshItem = findItem("flint_mesh"); + if (!flintMeshItem.isEmpty()) { + SieveMeshRegistryEntry flintMesh = new SieveMeshRegistryEntry(CommonMeshType.FLINT, flintMeshItem, flintMeshItem.getItem()); + flintMesh.setMeshLevel(2); + flintMesh.setModelName("flint"); + SieveMeshRegistry.add(flintMesh); + } + + ItemStack ironMeshItem = findItem("iron_mesh"); + if (!ironMeshItem.isEmpty()) { + SieveMeshRegistryEntry ironMesh = new SieveMeshRegistryEntry(CommonMeshType.IRON, ironMeshItem, ironMeshItem.getItem()); + ironMesh.setMeshLevel(3); + ironMesh.setHeavy(true); + ironMesh.setModelName("iron"); + SieveMeshRegistry.add(ironMesh); + SieveMeshRegistry.registerDefaults(ironMeshItem.getItem()); + } + + ItemStack goldMeshItem = findItem("golden_mesh"); + if (!goldMeshItem.isEmpty()) { + SieveMeshRegistryEntry goldMesh = new SieveMeshRegistryEntry(CommonMeshType.GOLD, goldMeshItem, goldMeshItem.getItem()); + goldMesh.setMeshLevel(4); + goldMesh.setHeavy(true); + goldMesh.setModelName("gold"); + SieveMeshRegistry.add(goldMesh); + } + + ItemStack diamondMeshItem = findItem("diamond_mesh"); + if (!diamondMeshItem.isEmpty()) { + SieveMeshRegistryEntry diamondMesh = new SieveMeshRegistryEntry(CommonMeshType.DIAMOND, diamondMeshItem, diamondMeshItem.getItem()); + diamondMesh.setMeshLevel(4); + diamondMesh.setHeavy(true); + diamondMesh.setModelName("diamond"); + SieveMeshRegistry.add(diamondMesh); + } + + ItemStack netheriteMeshItem = findItem("netherite_mesh"); + if (!netheriteMeshItem.isEmpty()) { + SieveMeshRegistryEntry mesh = new SieveMeshRegistryEntry(CommonMeshType.NETHERITE, netheriteMeshItem, netheriteMeshItem.getItem()); + mesh.setMeshLevel(6); + mesh.setHeavy(true); + mesh.setModelName("netherite"); + SieveMeshRegistry.add(mesh); + } + } + + private ItemStack findItem(String name) { + ResourceLocation location = new ResourceLocation(Compat.EX_DEORUM, name); + Item item = Balm.getRegistries().getItem(location); + return new ItemStack(item); + } + + private ItemStack findBlock(String name) { + ResourceLocation location = new ResourceLocation(Compat.EX_DEORUM, name); + Block block = Balm.getRegistries().getBlock(location); + return new ItemStack(block); + } + + + @Override + public ItemStack getNihiloItem(NihiloItems type) { + ItemStack itemStack = itemMap.get(type); + return itemStack != null ? itemStack : ItemStack.EMPTY; + } + + @Override + public boolean isHammerable(BlockState state) { + return RecipeUtil.getHammerRecipe(StupidUtils.getItemStackFromState(state).getItem()) != null; + } + + @Override + public boolean isHammerableCompressed(ItemStack itemStack) { + return RecipeUtil.getCompressedHammerRecipe(itemStack.getItem()) != null; + } + + @Override + public List rollHammerRewards(Level level, BlockState state, ItemStack toolItem, RandomSource rand) { + List drops = new ArrayList<>(); + final var recipe = RecipeUtil.getHammerRecipe(StupidUtils.getItemStackFromState(state).getItem()); + if (recipe != null) { + drops.add(recipe.getResultItem(level.registryAccess())); + } + + return drops; + } + + @Override + public boolean isSiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh) { + if (sieveMesh == null) { + return false; + } + + return !RecipeUtil.getSieveRecipes((Item) sieveMesh.getBackingMesh(), StupidUtils.getItemStackFromState(state)).isEmpty(); + } + + @Override + public boolean isHeavySiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh) { + if (sieveMesh == null) { + return false; + } + + return !RecipeUtil.getCompressedSieveRecipes((Item) sieveMesh.getBackingMesh(), StupidUtils.getItemStackFromState(state)).isEmpty(); + } + + @Override + public Collection rollSieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + final var sourceStack = StupidUtils.getItemStackFromState(state); + final var recipes = RecipeUtil.getSieveRecipes((Item) sieveMesh.getBackingMesh(), sourceStack); + List list = new ArrayList<>(); + for (final var recipe : recipes) { + LootContext lootContext = LootTableUtils.buildLootContext((ServerLevel) level, sourceStack); + final var amount = recipe.resultAmount.getInt(lootContext); + if (amount > 0) { + list.add(recipe.getResultItem(level.registryAccess())); + } + } + return list; + } + + @Override + public Collection rollHeavySieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + final var sourceStack = StupidUtils.getItemStackFromState(state); + final var recipes = RecipeUtil.getCompressedSieveRecipes((Item) sieveMesh.getBackingMesh(), sourceStack); + List list = new ArrayList<>(); + for (final var recipe : recipes) { + LootContext lootContext = LootTableUtils.buildLootContext((ServerLevel) level, sourceStack); + final var amount = recipe.resultAmount.getInt(lootContext); + if (amount > 0) { + list.add(recipe.getResultItem(level.registryAccess())); + } + } + return list; + } + + @Override + public Collection rollCompressedHammerRewards(Level level, LootContext context, ItemStack itemStack) { + final var recipe = RecipeUtil.getCompressedHammerRecipe(itemStack.getItem()); + if (recipe != null) { + List list = new ArrayList<>(); + LootContext lootContext = LootTableUtils.buildLootContext((ServerLevel) level, itemStack); + final var amount = recipe.resultAmount.getInt(lootContext); + if (amount > 0) { + list.add(recipe.getResultItem(level.registryAccess())); + } + return list; + } + return Collections.emptyList(); + } + + @Override + public List rollCrookRewards(ServerLevel level, BlockPos pos, BlockState state, @Nullable Entity entity, ItemStack tool, RandomSource rand) { + final float luck = getLuckFromTool(tool); + final var recipes = RecipeUtil.getCrookRecipes(state); + List list = new ArrayList<>(); + for (final var recipe : recipes) { + float fortuneChanceBonus = 0.1f; + if (rand.nextFloat() <= recipe.chance() + fortuneChanceBonus * luck) { + list.add(recipe.getResultItem(level.registryAccess())); + } + } + return list; + } + + private float getLuckFromTool(ItemStack tool) { + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_FORTUNE, tool); + } + + @Override + public LootTable generateHeavySieveLootTable(Level level, BlockState sieveState, ItemLike source, int times, SieveMeshRegistryEntry mesh) { + return LootTable.EMPTY; + /*if (!(mesh.getBackingMesh() instanceof Item)) { + return LootTable.EMPTY; + } + + LootTable.Builder tableBuilder = LootTable.lootTable(); + final var recipes = RecipeUtil.getSieveRecipes((Item) mesh.getBackingMesh(), new ItemStack(source)); + for (final var recipe : recipes) { + if (recipe.mesh != mesh.getBackingMesh()) { + continue; + } + + final var poolBuilder = LootPool.lootPool(); + poolBuilder.name("excompressum-heavysieve-" + Balm.getRegistries() + .getKey(source.asItem()) + .toString() + .replace(':', '-') + "-" + UUID.randomUUID()); + poolBuilder.setRolls(ConstantValue.exactly(times)); + LootPoolSingletonContainer.Builder entryBuilder = buildLootEntry(recipe.getResultItem(level.registryAccess())); + entryBuilder.apply(SetItemCountFunction.setCount(recipe.resultAmount)); + poolBuilder.add(entryBuilder); + tableBuilder.withPool(poolBuilder); + } + return tableBuilder.build();*/ + } + + @Override + public boolean doMeshesHaveDurability() { + return false; + } + + @Override + public boolean doMeshesSplitLootTables() { + return true; + } + + @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<>(); + + /*ArrayListMultimap groupedRecipes = ArrayListMultimap.create(); + for (final var hammerRecipe : ExNihiloRegistries.HAMMER_REGISTRY.getRecipeList()) { + groupedRecipes.put(hammerRecipe.getInput().getStackingIds(), hammerRecipe); + } + + for (IntList packedStacks : groupedRecipes.keySet()) { + LootTable.Builder tableBuilder = LootTable.lootTable(); + for (final var hammerRecipe : groupedRecipes.get(packedStacks)) { + for (ItemStackWithChance itemStackWithChance : hammerRecipe.getDrops()) { + LootPool.Builder poolBuilder = LootPool.lootPool(); + LootPoolSingletonContainer.Builder entryBuilder = buildLootEntry(itemStackWithChance); + poolBuilder.add(entryBuilder); + tableBuilder.withPool(poolBuilder); + } + } + + final var firstRecipe = groupedRecipes.get(packedStacks).get(0); + Ingredient input = firstRecipe.getInput(); + LootTableProvider lootTableProvider = new LootTableProvider(tableBuilder.build()); + result.add(new net.blay09.mods.excompressum.registry.hammer.HammerRecipe(firstRecipe.getId(), input, lootTableProvider)); + }*/ + + return result; + } + + private LootPoolSingletonContainer.Builder buildLootEntry(ItemStack outputItem) { + return LootTableUtils.buildLootEntry(outputItem, -1f); + } + + /* TODO private LootPoolSingletonContainer.Builder buildLootEntry(ItemStackWithChance outputItem) { + return LootTableUtils.buildLootEntry(outputItem.getStack(), outputItem.getChance()); + }*/ + +} 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 edd48630..1c03d065 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 @@ -26,9 +26,11 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; 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.entries.LootPoolSingletonContainer; @@ -135,6 +137,11 @@ private ItemStack findBlock(String name) { } + @Override + public boolean isHammerableCompressed(ItemStack itemStack) { + return false; + } + @Override public ItemStack getNihiloItem(NihiloItems type) { ItemStack itemStack = itemMap.get(type); @@ -147,7 +154,7 @@ public boolean isHammerable(BlockState state) { } @Override - public List rollHammerRewards(BlockState state, ItemStack toolItem, RandomSource rand) { + public List rollHammerRewards(Level level, BlockState state, ItemStack toolItem, RandomSource rand) { List possibleDrops = ExNihiloRegistries.HAMMER_REGISTRY.getResult(state.getBlock()); List drops = new ArrayList<>(); for (ItemStackWithChance itemStackWithChance : possibleDrops) { @@ -167,7 +174,7 @@ public boolean isSiftableWithMesh(BlockState sieveState, BlockState state, Sieve } @Override - public Collection rollSieveRewards(BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + public Collection rollSieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { boolean waterlogged = sieveState.hasProperty(BlockStateProperties.WATERLOGGED) && sieveState.getValue(BlockStateProperties.WATERLOGGED); List recipes = ExNihiloRegistries.SIEVE_REGISTRY.getDrops(state.getBlock(), ((MeshType) sieveMesh.getBackingMesh()), waterlogged); if (recipes != null) { @@ -189,6 +196,16 @@ public Collection rollSieveRewards(BlockState sieveState, BlockState return Collections.emptyList(); } + @Override + public Collection rollHeavySieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + return Collections.emptyList(); + } + + @Override + public Collection rollCompressedHammerRewards(Level level, LootContext context, ItemStack itemStack) { + return Collections.emptyList(); + } + @Override public List rollCrookRewards(ServerLevel level, BlockPos pos, BlockState state, @Nullable Entity entity, ItemStack tool, RandomSource rand) { final float luck = getLuckFromTool(tool); @@ -230,7 +247,7 @@ private float getLuckFromTool(ItemStack tool) { } @Override - public LootTable generateHeavySieveLootTable(BlockState sieveState, ItemLike source, int times, SieveMeshRegistryEntry mesh) { + public LootTable generateHeavySieveLootTable(Level level, BlockState sieveState, ItemLike source, int times, SieveMeshRegistryEntry mesh) { if (!(mesh.getBackingMesh() instanceof MeshType)) { return LootTable.EMPTY; } @@ -319,4 +336,8 @@ private LootPoolSingletonContainer.Builder buildLootEntry(ItemStackWithChance return LootTableUtils.buildLootEntry(outputItem.getStack(), outputItem.getChance()); } + @Override + public boolean isHeavySiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh) { + return false; + } } diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java index 05c4fa17..ef80911a 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java @@ -34,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; @@ -59,8 +60,8 @@ public void registerRecipes(IRecipeRegistration registry) { List generatedHeavySieveRecipes = recipeManager.getAllRecipesFor(ModRecipeTypes.generatedHeavySieveRecipeType); for (GeneratedHeavySieveRecipe recipe : generatedHeavySieveRecipes) { - loadGeneratedHeavySieveRecipe(false, recipe, jeiHeavySieveRecipes); - loadGeneratedHeavySieveRecipe(true, recipe, jeiHeavySieveRecipes); + loadGeneratedHeavySieveRecipe(Minecraft.getInstance().level, false, recipe, jeiHeavySieveRecipes); + loadGeneratedHeavySieveRecipe(Minecraft.getInstance().level, true, recipe, jeiHeavySieveRecipes); } registry.addRecipes(HeavySieveRecipeCategory.TYPE, jeiHeavySieveRecipes); @@ -124,12 +125,12 @@ public void registerRecipes(IRecipeRegistration registry) { registry.addRecipes(CraftChickenStickRecipeCategory.TYPE, Lists.newArrayList(new CraftChickenStickRecipe())); } - private void loadGeneratedHeavySieveRecipe(boolean waterlogged, GeneratedHeavySieveRecipe generatedRecipe, List outRecipes) { + private void loadGeneratedHeavySieveRecipe(Level level, boolean waterlogged, GeneratedHeavySieveRecipe generatedRecipe, List outRecipes) { BlockState waterLoggedState = ModBlocks.heavySieves[0].defaultBlockState().setValue(HeavySieveBlock.WATERLOGGED, waterlogged); for (SieveMeshRegistryEntry mesh : SieveMeshRegistry.getEntries().values()) { int rolls = HeavySieveRegistry.getGeneratedRollCount(generatedRecipe); ItemLike source = Balm.getRegistries().getItem(generatedRecipe.getSource()); - LootTable lootTable = ExNihilo.getInstance().generateHeavySieveLootTable(waterLoggedState, source, rolls, mesh); + LootTable lootTable = ExNihilo.getInstance().generateHeavySieveLootTable(level, waterLoggedState, source, rolls, mesh); if (!LootTableUtils.isLootTableEmpty(lootTable)) { HeavySieveRecipe recipe = new HeavySieveRecipe(generatedRecipe.getRecipeId(), generatedRecipe.getInput(), new LootTableProvider(lootTable), waterlogged, null, Sets.newHashSet(mesh.getMeshType())); outRecipes.add(new JeiHeavySieveRecipe(recipe)); diff --git a/repositories.gradle b/repositories.gradle index 4b11d813..e4d62653 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -54,4 +54,12 @@ repositories { includeGroup "us.dynmap" } } + + maven { + url = "https://dl.cloudsmith.io/public/novamachina-mods/release/maven/" + content { + includeGroup "novamachina.novacore" + includeGroup "novamachina.exnihilosequentia" + } + } } \ No newline at end of file diff --git a/shared/build.gradle b/shared/build.gradle index 9610c0a4..0f7a16b3 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -29,6 +29,7 @@ dependencies { compileOnly "mcp.mobius.waila:wthit-api:mojmap-$wthit_version" } +apply from: rootProject.file('repositories.gradle') apply from: 'dependencies.gradle' sourceSets { 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 5e6d2494..709f94e0 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/ExCompressum.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/ExCompressum.java @@ -48,6 +48,7 @@ public static void initialize() { ModRecipeTypes.initialize(Balm.getRecipes()); 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"); 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 43bac498..e984867d 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 @@ -8,7 +8,9 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; 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.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootTable; import org.jetbrains.annotations.Nullable; @@ -18,6 +20,8 @@ public interface ExNihiloProvider { + boolean isHammerableCompressed(ItemStack itemStack); + @Deprecated enum NihiloMod implements StringRepresentable { NONE, @@ -57,15 +61,21 @@ enum NihiloItems { boolean isHammerable(BlockState state); - List rollHammerRewards(BlockState state, ItemStack tool, RandomSource rand); + List rollHammerRewards(Level level, BlockState state, ItemStack tool, RandomSource rand); boolean isSiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh); - Collection rollSieveRewards(BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand); + boolean isHeavySiftableWithMesh(BlockState sieveState, BlockState state, @Nullable SieveMeshRegistryEntry sieveMesh); + + Collection rollSieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand); + + Collection rollHeavySieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand); + + Collection rollCompressedHammerRewards(Level level, LootContext context, ItemStack itemStack); List rollCrookRewards(ServerLevel level, BlockPos pos, BlockState state, @Nullable Entity entity, ItemStack tool, RandomSource rand); - LootTable generateHeavySieveLootTable(BlockState sieveState, ItemLike source, int count, SieveMeshRegistryEntry mesh); + LootTable generateHeavySieveLootTable(Level level, BlockState sieveState, ItemLike source, int count, SieveMeshRegistryEntry mesh); boolean doMeshesHaveDurability(); 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 fff7f91c..8535183c 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 @@ -4,6 +4,7 @@ public enum CommonMeshType { STRING, FLINT, IRON, + GOLD, DIAMOND, EMERALD, NETHERITE 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 ac8ac953..1d5c9488 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 @@ -43,7 +43,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; -import java.util.Random; public abstract class AbstractAutoSieveBlockEntity extends AbstractBaseBlockEntity implements BalmMenuProvider, BalmContainerProvider { @@ -231,7 +230,7 @@ public void serverTick() { if (!level.isClientSide) { SieveMeshRegistryEntry sieveMesh = getSieveMesh(); if (sieveMesh != null) { - Collection rewards = rollSieveRewards(currentStack, sieveMesh, getEffectiveLuck(), level.random); + Collection rewards = rollSieveRewards(level, currentStack, sieveMesh, getEffectiveLuck(), level.random); for (ItemStack itemStack : rewards) { if (!addItemToOutput(itemStack)) { level.addFreshEntity(new ItemEntity(level, worldPosition.getX() + 0.5, worldPosition.getY() + 1.5, worldPosition.getZ() + 0.5, itemStack)); @@ -308,8 +307,8 @@ private boolean isMesh(ItemStack itemStack) { return SieveMeshRegistry.getEntry(itemStack) != null; } - public Collection rollSieveRewards(ItemStack itemStack, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { - return ExNihilo.rollSieveRewards(getBlockState(), itemStack, sieveMesh, luck, rand); + public Collection rollSieveRewards(Level level, ItemStack itemStack, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + return ExNihilo.rollSieveRewards(level, getBlockState(), itemStack, sieveMesh, luck, rand); } @Override 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 03180353..64b66220 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 @@ -448,7 +448,7 @@ public Collection rollHammerRewards(ItemStack itemStack, ItemStack to } BlockState currentState = StupidUtils.getStateFromItemStack(itemStack); - return ExNihilo.getInstance().rollHammerRewards(currentState, toolItem, rand); + return ExNihilo.getInstance().rollHammerRewards(level, currentState, toolItem, rand); } public int getMiningLevel() { diff --git a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHeavySieveBlockEntity.java b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHeavySieveBlockEntity.java index a667575e..f3842a86 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHeavySieveBlockEntity.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/AutoHeavySieveBlockEntity.java @@ -10,6 +10,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; @@ -28,9 +29,9 @@ public boolean isSiftableWithMesh(ItemStack itemStack, @Nullable SieveMeshRegist } @Override - public Collection rollSieveRewards(ItemStack itemStack, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { - LootContext lootContext = LootTableUtils.buildLootContext(((ServerLevel) level), itemStack); - return HeavySieveRegistry.rollSieveRewards(lootContext, getBlockState(), sieveMesh, itemStack); + public Collection rollSieveRewards(Level level, ItemStack itemStack, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + LootContext lootContext = LootTableUtils.buildLootContext(((ServerLevel) this.level), itemStack); + return HeavySieveRegistry.rollSieveRewards(level, lootContext, getBlockState(), sieveMesh, itemStack); } @Override diff --git a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/HeavySieveBlockEntity.java b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/HeavySieveBlockEntity.java index 6ce6a9ec..9e3b2cf1 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/block/entity/HeavySieveBlockEntity.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/block/entity/HeavySieveBlockEntity.java @@ -19,7 +19,6 @@ import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.ItemUtils; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; @@ -124,7 +123,7 @@ public boolean processContents(Player player) { SieveMeshRegistryEntry sieveMesh = getSieveMesh(); if (sieveMesh != null) { LootContext lootContext = LootTableUtils.buildLootContext(((ServerLevel) level), currentStack); - Collection rewards = HeavySieveRegistry.rollSieveRewards(lootContext, getBlockState(), sieveMesh, currentStack); + Collection rewards = HeavySieveRegistry.rollSieveRewards(level, lootContext, getBlockState(), sieveMesh, currentStack); for (ItemStack itemStack : rewards) { level.addFreshEntity(new ItemEntity(level, worldPosition.getX() + 0.5, worldPosition.getY() + 1.5, worldPosition.getZ() + 0.5, itemStack)); } diff --git a/shared/src/main/java/net/blay09/mods/excompressum/client/ModModels.java b/shared/src/main/java/net/blay09/mods/excompressum/client/ModModels.java index 100ac506..64c5d840 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/client/ModModels.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/client/ModModels.java @@ -21,6 +21,7 @@ public static void initialize(BalmModels models) { meshes.put("string", models.loadModel(location("block/string_mesh"))); meshes.put("flint", models.loadModel(location("block/flint_mesh"))); meshes.put("iron", models.loadModel(location("block/iron_mesh"))); + meshes.put("gold", models.loadModel(location("block/gold_mesh"))); meshes.put("diamond", models.loadModel(location("block/diamond_mesh"))); meshes.put("emerald", models.loadModel(location("block/emerald_mesh"))); meshes.put("netherite", models.loadModel(location("block/netherite_mesh"))); diff --git a/shared/src/main/java/net/blay09/mods/excompressum/client/render/blockentity/AutoHammerRenderer.java b/shared/src/main/java/net/blay09/mods/excompressum/client/render/blockentity/AutoHammerRenderer.java index 34fb83c0..13a1fd3f 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/client/render/blockentity/AutoHammerRenderer.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/client/render/blockentity/AutoHammerRenderer.java @@ -65,6 +65,8 @@ public void render(AutoHammerBlockEntity tileEntity, float partialTicks, PoseSta } // Render the hammers + // TODO processed block is too far in the ground + // TODO rotate the hammer, not the handle poseStack.pushPose(); poseStack.translate(-0.5f, -0.05f, 0f); poseStack.scale(0.5f, 0.5f, 0.5f); 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 28e0cd7a..057fca75 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,4 +2,5 @@ public class Compat { public static final String EXNIHILO_SEQUENTIA = "exnihilosequentia"; + public static final String EX_DEORUM = "exdeorum"; } diff --git a/shared/src/main/java/net/blay09/mods/excompressum/handler/HammerSpeedHandler.java b/shared/src/main/java/net/blay09/mods/excompressum/handler/HammerSpeedHandler.java index 58a9bb08..2c96a3c6 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/handler/HammerSpeedHandler.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/handler/HammerSpeedHandler.java @@ -2,11 +2,14 @@ import net.blay09.mods.balm.api.Balm; import net.blay09.mods.balm.api.event.DigSpeedEvent; +import net.blay09.mods.excompressum.registry.ExRegistries; import net.blay09.mods.excompressum.tag.ModItemTags; +import net.blay09.mods.excompressum.utils.StupidUtils; import net.minecraft.tags.BlockTags; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.DiggerItem; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; public class HammerSpeedHandler { @@ -16,7 +19,9 @@ public static void initialize() { public static void onDigSpeed(DigSpeedEvent event) { ItemStack heldItem = event.getPlayer().getItemInHand(InteractionHand.MAIN_HAND); - if (heldItem.is(ModItemTags.HAMMERS) && event.getState().is(BlockTags.LOGS)) { + final var targetItem = StupidUtils.getItemStackFromState(event.getState()); + Level level = event.getPlayer().level(); + if ((heldItem.is(ModItemTags.HAMMERS) || heldItem.is(ModItemTags.COMPRESSED_HAMMERS)) && (ExRegistries.getHammerRegistry().isHammerable(level, targetItem) || ExRegistries.getCompressedHammerRegistry().isHammerable(level, targetItem))) { float newSpeed = 2f; if (heldItem.getItem() instanceof DiggerItem) { newSpeed = ((DiggerItem) heldItem.getItem()).getTier().getSpeed(); 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 f611c54f..d7fdbbaf 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 @@ -102,7 +102,7 @@ public InteractionResult useOn(UseOnContext context) { public boolean mineBlock(ItemStack itemStack, Level level, BlockState state, BlockPos pos, LivingEntity entityLiving) { if (!level.isClientSide && isCorrectToolForDrops(state) && ExNihilo.getInstance().isHammerable(state)) { level.removeBlock(pos, false); - Collection rewards = ExNihilo.getInstance().rollHammerRewards(state, itemStack, level.random); + Collection rewards = ExNihilo.getInstance().rollHammerRewards(level, state, itemStack, level.random); for (ItemStack rewardStack : rewards) { level.addFreshEntity(new ItemEntity(level, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, rewardStack)); } 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 eb40614c..c36e9ad5 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 @@ -53,7 +53,8 @@ public void apply(LootContext context, List list) { synchronized (activeContexts) { activeContexts.add(context); } - List nihiLoot = ExNihilo.getInstance().rollHammerRewards(state, tool, context.getRandom()); + final var level = context.getLevel(); + List nihiLoot = ExNihilo.getInstance().rollHammerRewards(level, state, tool, context.getRandom()); synchronized (activeContexts) { activeContexts.remove(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 f4ae3bd6..b46dea34 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 @@ -54,7 +54,8 @@ public void apply(LootContext context, List list) { synchronized (activeContexts) { activeContexts.add(context); } - List loot = ExNihilo.getInstance().rollHammerRewards(state, tool, context.getRandom()); + final var level = context.getLevel(); + List loot = ExNihilo.getInstance().rollHammerRewards(level, state, tool, context.getRandom()); synchronized (activeContexts) { activeContexts.remove(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 acf582a4..e74440b1 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 @@ -7,12 +7,12 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; -import java.util.Random; public abstract class ExNihilo { @@ -45,10 +45,10 @@ public static boolean isSiftableWithMesh(BlockState sieveState, ItemStack itemSt return state != null && instance.isSiftableWithMesh(sieveState, state, sieveMesh); } - public static Collection rollSieveRewards(BlockState sieveState, ItemStack itemStack, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + public static Collection rollSieveRewards(Level level, BlockState sieveState, ItemStack itemStack, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { BlockState state = StupidUtils.getStateFromItemStack(itemStack); if (state != null) { - return instance.rollSieveRewards(sieveState, state, sieveMesh, luck, rand); + return instance.rollSieveRewards(level, sieveState, state, sieveMesh, luck, rand); } return Collections.emptyList(); } 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 d464b446..7eb937bf 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 @@ -11,7 +11,9 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; 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.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootTable; import org.jetbrains.annotations.Nullable; @@ -35,7 +37,7 @@ public boolean isHammerable(BlockState state) { } @Override - public List rollHammerRewards(BlockState state, ItemStack itemStack, RandomSource rand) { + public List rollHammerRewards(Level level, BlockState state, ItemStack itemStack, RandomSource rand) { return Collections.emptyList(); } @@ -45,17 +47,32 @@ public boolean isSiftableWithMesh(BlockState sieveState, BlockState state, Sieve } @Override - public Collection rollSieveRewards(BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { + 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) { + return Collections.emptyList(); + } + + @Override + public Collection rollHeavySieveRewards(Level level, BlockState sieveState, BlockState state, SieveMeshRegistryEntry sieveMesh, float luck, RandomSource rand) { return Collections.emptyList(); } + @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) { return Collections.emptyList(); } @Override - public LootTable generateHeavySieveLootTable(BlockState sieveState, ItemLike source, int count, SieveMeshRegistryEntry mesh) { + public LootTable generateHeavySieveLootTable(Level level, BlockState sieveState, ItemLike source, int count, SieveMeshRegistryEntry mesh) { return LootTable.EMPTY; } @@ -84,6 +101,11 @@ public boolean isCompressableOre(ItemStack itemStack) { return false; } + @Override + public boolean isHammerableCompressed(ItemStack itemStack) { + return false; + } + @Override public boolean isHammerableOre(ItemStack itemStack) { return false; diff --git a/shared/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRegistry.java b/shared/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRegistry.java index d691b552..521a8581 100644 --- a/shared/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRegistry.java +++ b/shared/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRegistry.java @@ -1,6 +1,8 @@ package net.blay09.mods.excompressum.registry.compressedhammer; +import net.blay09.mods.excompressum.registry.ExNihilo; import net.blay09.mods.excompressum.registry.ModRecipeTypes; +import net.blay09.mods.excompressum.utils.StupidUtils; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.Level; @@ -24,6 +26,8 @@ public static List rollHammerRewards(Level level, LootContext context } } + results.addAll(ExNihilo.getInstance().rollCompressedHammerRewards(level, context, itemStack)); + return results; } @@ -43,7 +47,7 @@ public boolean isHammerable(RecipeManager recipeManager, ItemStack itemStack) { } } - return false; + return ExNihilo.getInstance().isHammerableCompressed(itemStack); } } 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 ec9ff280..3358dcb7 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 @@ -5,6 +5,7 @@ import net.blay09.mods.excompressum.config.ExCompressumConfig; import net.blay09.mods.excompressum.registry.*; import net.blay09.mods.excompressum.registry.sievemesh.SieveMeshRegistry; +import net.blay09.mods.excompressum.utils.StupidUtils; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.ItemLike; @@ -43,7 +44,7 @@ private static boolean testGeneratedRecipe(ItemStack itemStack, GeneratedHeavySi return generatedRecipe.getInput().test(itemStack) && ExNihilo.isSiftableWithMesh(sieve, new ItemStack(sourceBlock), sieveMesh); } - public static List rollSieveRewards(LootContext context, BlockState sieve, SieveMeshRegistryEntry mesh, ItemStack itemStack) { + public static List rollSieveRewards(Level level, LootContext context, BlockState sieve, SieveMeshRegistryEntry mesh, ItemStack itemStack) { boolean waterlogged = sieve.hasProperty(BlockStateProperties.WATERLOGGED) && sieve.getValue(BlockStateProperties.WATERLOGGED); RecipeManager recipeManager = context.getLevel().getRecipeManager(); List recipes = recipeManager.getAllRecipesFor(ModRecipeTypes.heavySieveRecipeType); @@ -62,13 +63,16 @@ public static List rollSieveRewards(LootContext context, BlockState s if (testGeneratedRecipe(itemStack, generatedRecipe, sieve, mesh)) { int rolls = getGeneratedRollCount(generatedRecipe); ItemLike source = Balm.getRegistries().getItem(generatedRecipe.getSource()); - LootTable lootTable = ExNihilo.getInstance().generateHeavySieveLootTable(sieve, source, rolls, mesh); + LootTable lootTable = ExNihilo.getInstance().generateHeavySieveLootTable(level, sieve, source, rolls, mesh); if (lootTable != null) { lootTable.getRandomItems(context, results::add); } } } + final var inputState = StupidUtils.getStateFromItemStack(itemStack); + results.addAll(ExNihilo.getInstance().rollHeavySieveRewards(level, sieve, inputState, mesh, context.getLuck(), level.random)); + return results; } @@ -93,7 +97,8 @@ public boolean isSiftable(Level level, BlockState sieve, ItemStack itemStack, Si } } - return false; + final var state = StupidUtils.getStateFromItemStack(itemStack); + return ExNihilo.getInstance().isHeavySiftableWithMesh(sieve, state, sieveMesh); } } diff --git a/shared/src/main/resources/assets/excompressum/models/block/gold_mesh.json b/shared/src/main/resources/assets/excompressum/models/block/gold_mesh.json new file mode 100644 index 00000000..dfafc4b9 --- /dev/null +++ b/shared/src/main/resources/assets/excompressum/models/block/gold_mesh.json @@ -0,0 +1,17 @@ +{ + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "mesh": "excompressum:block/gold_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/gold_mesh.png b/shared/src/main/resources/assets/excompressum/textures/block/gold_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..c377ff798b695905a48447712bb92ec41b8e0898 GIT binary patch literal 6041 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 literal 0 HcmV?d00001