package net.minecraft.server;
public class PathfinderGoalVillagerFarm extends PathfinderGoalGotoTarget {
private final EntityVillager c;
private boolean d;
private boolean e;
private int f;
public PathfinderGoalVillagerFarm(EntityVillager entityvillager, double d0) {
super(entityvillager, d0, 16);
this.c = entityvillager;
}
public boolean a() {
if (this.a <= 0) {
if (!this.c.world.getGameRules().getBoolean("mobGriefing")) {
return false;
}
this.f = -1;
this.d = this.c.dq();
this.e = this.c.dp();
}
return super.a();
}
public boolean b() {
return this.f >= 0 && super.b();
}
public void e() {
super.e();
this.c.getControllerLook().a((double) this.b.getX() + 0.5D, (double) (this.b.getY() + 1), (double) this.b.getZ() + 0.5D, 10.0F, (float) this.c.N());
if (this.f()) {
World world = this.c.world;
BlockPosition blockposition = this.b.up();
IBlockData iblockdata = world.getType(blockposition);
Block block = iblockdata.getBlock();
if (this.f == 0 && block instanceof BlockCrops && ((BlockCrops) block).A(iblockdata)) {
// CraftBukkit start
if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.c, blockposition, Blocks.AIR, 0).isCancelled()) {
world.setAir(blockposition, true);
}
// CraftBukkit end
} else if (this.f == 1 && iblockdata.getMaterial() == Material.AIR) {
InventorySubcontainer inventorysubcontainer = this.c.dm();
for (int i = 0; i < inventorysubcontainer.getSize(); ++i) {
ItemStack itemstack = inventorysubcontainer.getItem(i);
boolean flag = false;
if (!itemstack.isEmpty()) {
// CraftBukkit start
Block planted = null;
if (itemstack.getItem() == Items.WHEAT_SEEDS) {
planted = Blocks.WHEAT;
flag = true;
} else if (itemstack.getItem() == Items.POTATO) {
planted = Blocks.POTATOES;
flag = true;
} else if (itemstack.getItem() == Items.CARROT) {
planted = Blocks.CARROTS;
flag = true;
} else if (itemstack.getItem() == Items.BEETROOT_SEEDS) {
planted = Blocks.BEETROOT;
flag = true;
}
if (planted != null && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.c, blockposition, planted, 0).isCancelled()) {
world.setTypeAndData(blockposition, planted.getBlockData(), 3);
} else {
flag = false;
}
// CraftBukkit end
}
if (flag) {
itemstack.subtract(1);
if (itemstack.isEmpty()) {
inventorysubcontainer.setItem(i, ItemStack.a);
}
break;
}
}
}
this.f = -1;
this.a = 10;
}
}
protected boolean a(World world, BlockPosition blockposition) {
Block block = world.getType(blockposition).getBlock();
if (block == Blocks.FARMLAND) {
blockposition = blockposition.up();
IBlockData iblockdata = world.getType(blockposition);
block = iblockdata.getBlock();
if (block instanceof BlockCrops && ((BlockCrops) block).A(iblockdata) && this.e && (this.f == 0 || this.f < 0)) {
this.f = 0;
return true;
}
if (iblockdata.getMaterial() == Material.AIR && this.d && (this.f == 1 || this.f < 0)) {
this.f = 1;
return true;
}
}
return false;
}
}