2023-03-18 22:09:14 +01:00

102 lines
2.7 KiB
Java

package com.hbm.items.tool;
import cpw.mods.fml.common.eventhandler.Event.Result;
import net.minecraft.block.Block;
import net.minecraft.block.IGrowable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.FakePlayerFactory;
import net.minecraftforge.event.entity.player.BonemealEvent;
public class ItemFertilizer extends Item {
@Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) {
if(!player.canPlayerEdit(x, y, z, side, stack)) {
return false;
}
world.captureBlockSnapshots = false; //what the fuck is the point of this?!
boolean didSomething = false;
for(int i = x - 1; i <= x + 1; i++) {
for(int j = y - 1; j <= y + 1; j++) {
for(int k = z - 1; k <= z + 1; k++) {
boolean success = fertilize(world, i, j, k, player, i == x && j == y && k == z);
didSomething = didSomething || success;
if(success && !world.isRemote) {
world.playAuxSFX(2005, i, j, k, 0);
}
}
}
}
if(didSomething && !player.capabilities.isCreativeMode) {
stack.stackSize--;
}
return false;
}
public static boolean useFertillizer(ItemStack stack, World world, int x, int y, int z) {
if(!(world instanceof WorldServer)) return false;
EntityPlayer player = FakePlayerFactory.getMinecraft((WorldServer)world);
boolean didSomething = false;
for(int i = x - 1; i <= x + 1; i++) {
for(int j = y - 1; j <= y + 1; j++) {
for(int k = z - 1; k <= z + 1; k++) {
boolean success = fertilize(world, i, j, k, player, i == x && j == y && k == z);
didSomething = didSomething || success;
if(success && !world.isRemote) {
world.playAuxSFX(2005, i, j, k, 0);
}
}
}
}
if(didSomething) stack.stackSize--;
return didSomething;
}
public static boolean fertilize(World world, int x, int y, int z, EntityPlayer player, boolean force) {
Block b = world.getBlock(x, y, z);
BonemealEvent event = new BonemealEvent(player, world, b, x, y, z);
if(MinecraftForge.EVENT_BUS.post(event)) {
return false;
}
if(event.getResult() == Result.ALLOW) {
return true;
}
if(b instanceof IGrowable) {
IGrowable growable = (IGrowable) b;
if(growable.func_149851_a(world, x, y, z, world.isRemote)) {
if(!world.isRemote) {
if(force || growable.func_149852_a(world, world.rand, x, y, z)) {
growable.func_149853_b(world, world.rand, x, y, z);
}
}
return true;
}
}
return false;
}
}