82 lines
3.3 KiB
Java
82 lines
3.3 KiB
Java
![]() |
package WayofTime.bloodmagic.item.sigil;
|
||
|
|
||
|
import net.minecraft.block.Block;
|
||
|
import net.minecraft.block.IGrowable;
|
||
|
import net.minecraft.block.state.IBlockState;
|
||
|
import net.minecraft.entity.player.EntityPlayer;
|
||
|
import net.minecraft.item.ItemStack;
|
||
|
import net.minecraft.util.BlockPos;
|
||
|
import net.minecraft.util.EnumFacing;
|
||
|
import net.minecraft.world.World;
|
||
|
import net.minecraftforge.common.IPlantable;
|
||
|
|
||
|
public class ItemSigilGreenGrove extends ItemSigilToggleable {
|
||
|
|
||
|
public ItemSigilGreenGrove() {
|
||
|
super("greenGrove", 150);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean onSigilUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||
|
if (applyBonemeal(stack, world, blockPos)) {
|
||
|
world.playAuxSFX(2005, blockPos, 0);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onSigilUpdate(ItemStack stack, World worldIn, EntityPlayer player, int itemSlot, boolean isSelected) {
|
||
|
int range = 3;
|
||
|
int verticalRange = 2;
|
||
|
int posX = (int) Math.round(player.posX - 0.5f);
|
||
|
int posY = (int) player.posY;
|
||
|
int posZ = (int) Math.round(player.posZ - 0.5f);
|
||
|
|
||
|
for (int ix = posX - range; ix <= posX + range; ix++) {
|
||
|
for (int iz = posZ - range; iz <= posZ + range; iz++) {
|
||
|
for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) {
|
||
|
BlockPos blockPos = new BlockPos(ix, iy, iz);
|
||
|
Block block = worldIn.getBlockState(blockPos).getBlock();
|
||
|
|
||
|
if (block instanceof IPlantable || block instanceof IGrowable) {
|
||
|
if (worldIn.rand.nextInt(50) == 0) {
|
||
|
IBlockState preBlockState = worldIn.getBlockState(blockPos);
|
||
|
block.updateTick(worldIn, blockPos, worldIn.getBlockState(blockPos), worldIn.rand);
|
||
|
|
||
|
if (!worldIn.getBlockState(blockPos).equals(preBlockState))
|
||
|
worldIn.playAuxSFX(2005, blockPos, 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target) {
|
||
|
return worldIn instanceof net.minecraft.world.WorldServer && applyBonemeal(stack, worldIn, target, net.minecraftforge.common.util.FakePlayerFactory.getMinecraft((net.minecraft.world.WorldServer) worldIn));
|
||
|
}
|
||
|
|
||
|
private boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target, EntityPlayer player) {
|
||
|
IBlockState iblockstate = worldIn.getBlockState(target);
|
||
|
|
||
|
int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, worldIn, target, iblockstate, stack);
|
||
|
if (hook != 0) return hook > 0;
|
||
|
|
||
|
if (iblockstate.getBlock() instanceof IGrowable) {
|
||
|
IGrowable igrowable = (IGrowable) iblockstate.getBlock();
|
||
|
|
||
|
if (igrowable.canGrow(worldIn, target, iblockstate, worldIn.isRemote)) {
|
||
|
if (!worldIn.isRemote) {
|
||
|
if (igrowable.canUseBonemeal(worldIn, worldIn.rand, target, iblockstate))
|
||
|
igrowable.grow(worldIn, worldIn.rand, target, iblockstate);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|