diff --git a/src/main/java/ru/bclib/api/ComposterAPI.java b/src/main/java/ru/bclib/api/ComposterAPI.java new file mode 100644 index 00000000..93858cc8 --- /dev/null +++ b/src/main/java/ru/bclib/api/ComposterAPI.java @@ -0,0 +1,22 @@ +package ru.bclib.api; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import ru.bclib.mixin.common.ComposterBlockAccessor; + +public class ComposterAPI { + public static Block allowCompost(float chance, Block block){ + if (block!=null){ + allowCompost(chance, block.asItem()); + } + return block; + } + + public static Item allowCompost(float chance, Item item){ + if (item!=null && item != Items.AIR) { + ComposterBlockAccessor.callAdd(chance, item); + } + return item; + } +} diff --git a/src/main/java/ru/bclib/mixin/common/AnvilMenuMixin.java b/src/main/java/ru/bclib/mixin/common/AnvilMenuMixin.java index 5d5d9218..66bbbcc9 100644 --- a/src/main/java/ru/bclib/mixin/common/AnvilMenuMixin.java +++ b/src/main/java/ru/bclib/mixin/common/AnvilMenuMixin.java @@ -81,22 +81,23 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc stack = be_currentRecipe.craft(inputSlots, player); slotsChanged(inputSlots); access.execute((world, blockPos) -> { - BlockState anvilState = world.getBlockState(blockPos); - BaseAnvilBlock anvil = (BaseAnvilBlock) anvilState.getBlock(); - if (!player.getAbilities().instabuild && anvilState.is(BlockTags.ANVIL) && player.getRandom().nextDouble() < 0.1) { - BlockState damagedState = anvil.damageAnvilUse(anvilState, player.getRandom()); - if (damagedState == null) { - world.removeBlock(blockPos, false); - world.levelEvent(1029, blockPos, 0); - } - else { - world.setBlock(blockPos, damagedState, 2); + final BlockState anvilState = world.getBlockState(blockPos); + final Block anvilBlock = anvilState.getBlock(); + if (anvilBlock instanceof BaseAnvilBlock) { + final BaseAnvilBlock anvil = (BaseAnvilBlock) anvilBlock; + if (!player.getAbilities().instabuild && anvilState.is(BlockTags.ANVIL) && player.getRandom().nextDouble() < 0.1) { + BlockState damagedState = anvil.damageAnvilUse(anvilState, player.getRandom()); + if (damagedState == null) { + world.removeBlock(blockPos, false); + world.levelEvent(1029, blockPos, 0); + } else { + world.setBlock(blockPos, damagedState, 2); + world.levelEvent(1030, blockPos, 0); + } + } else { world.levelEvent(1030, blockPos, 0); } } - else { - world.levelEvent(1030, blockPos, 0); - } }); info.cancel(); return;