NaturesAura/src/main/java/de/ellpeck/naturesaura/items/ItemCrimsonMeal.java

52 lines
2.2 KiB
Java

package de.ellpeck.naturesaura.items;
import de.ellpeck.naturesaura.gen.ModFeatures;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.NetherWartBlock;
public class ItemCrimsonMeal extends ItemImpl {
public ItemCrimsonMeal() {
super("crimson_meal");
}
@Override
public InteractionResult useOn(UseOnContext context) {
var level = context.getLevel();
var pos = context.getClickedPos();
var state = level.getBlockState(pos);
if (state.getBlock() == Blocks.NETHER_WART) {
if (!level.isClientSide) {
if (level.random.nextInt(5) == 0) {
int age = state.getValue(NetherWartBlock.AGE);
if (age >= 3) {
ModFeatures.Configured.NETHER_WART_MUSHROOM.value().place((ServerLevel) level, ((ServerLevel) level).getChunkSource().getGenerator(), level.random, pos);
} else {
level.setBlockAndUpdate(pos, state.setValue(NetherWartBlock.AGE, age + 1));
}
}
level.levelEvent(2005, pos, 0);
context.getItemInHand().shrink(1);
}
return InteractionResult.SUCCESS;
} else if (level.getBlockState(pos.above()).isAir() && level.getBlockState(pos).getBlock() == Blocks.SOUL_SAND) {
if (!level.isClientSide) {
for (var i = level.random.nextInt(5); i >= 0; i--) {
var offset = pos.offset(Mth.nextInt(level.random, -3, 3), 1, Mth.nextInt(level.random, -3, 3));
if (level.getBlockState(offset.below()).getBlock() == Blocks.SOUL_SAND && level.getBlockState(offset).isAir()) {
level.setBlockAndUpdate(offset, Blocks.NETHER_WART.defaultBlockState());
}
}
level.levelEvent(2005, pos, 0);
context.getItemInHand().shrink(1);
}
return InteractionResult.SUCCESS;
}
return InteractionResult.FAIL;
}
}