diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java index 350cd2f4d6..72c4f21cf4 100644 --- a/src/main/java/net/minecraft/server/ItemBlock.java +++ b/src/main/java/net/minecraft/server/ItemBlock.java @@ -76,6 +76,7 @@ public class ItemBlock extends Item { boolean canBuild = distanceFromSpawn > 16 || thePlayer.isOp(); BlockPlacedEvent bpe = new BlockPlacedEvent(Type.BLOCK_PLACED, placedBlock, blockClicked, itemInHand, thePlayer, canBuild); + ((WorldServer) world).getServer().getPluginManager().callEvent(bpe); if (bpe.isCancelled() || !bpe.canBuild()) { // Craftbukkit Undo! diff --git a/src/main/java/net/minecraft/server/ItemBoat.java b/src/main/java/net/minecraft/server/ItemBoat.java new file mode 100644 index 0000000000..61102abb7f --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemBoat.java @@ -0,0 +1,63 @@ +package net.minecraft.server; + +import org.bukkit.craftbukkit.CraftBlock; +import org.bukkit.craftbukkit.CraftItemStack; +import org.bukkit.craftbukkit.CraftPlayer; +import org.bukkit.event.Event.Type; +import org.bukkit.event.player.PlayerItemEvent; + + +public class ItemBoat extends Item { + + public ItemBoat(int i) { + super(i); + aX = 1; + } + + public ItemStack a(ItemStack itemstack, World world, EntityPlayer entityplayer) { + float f = 1.0F; + float f1 = entityplayer.y + (entityplayer.w - entityplayer.y) * f; + float f2 = entityplayer.x + (entityplayer.v - entityplayer.x) * f; + double d = entityplayer.m + (entityplayer.p - entityplayer.m) * (double) f; + double d1 = (entityplayer.n + (entityplayer.q - entityplayer.n) * (double) f + 1.6200000000000001D) - (double) entityplayer.H; + double d2 = entityplayer.o + (entityplayer.r - entityplayer.o) * (double) f; + Vec3D vec3d = Vec3D.b(d, d1, d2); + float f3 = MathHelper.b(-f2 * 0.01745329F - 3.141593F); + float f4 = MathHelper.a(-f2 * 0.01745329F - 3.141593F); + float f5 = -MathHelper.b(-f1 * 0.01745329F); + float f6 = MathHelper.a(-f1 * 0.01745329F); + float f7 = f4 * f5; + float f8 = f6; + float f9 = f3 * f5; + double d3 = 5D; + Vec3D vec3d1 = vec3d.c((double) f7 * d3, (double) f8 * d3, (double) f9 * d3); + MovingObjectPosition movingobjectposition = world.a(vec3d, vec3d1, true); + + if (movingobjectposition == null) { + return itemstack; + } + if (movingobjectposition.a == 0) { + int i = movingobjectposition.b; + int j = movingobjectposition.c; + int k = movingobjectposition.d; + + if (!world.z) { + // Craftbukkit start + // Boat placement + CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k); + CraftItemStack itemInHand = new CraftItemStack(itemstack); + CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer); + PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, CraftBlock.notchToBlockFace(movingobjectposition.e)); + + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); + + if (pie.isCancelled()) return itemstack; + + world.a(new EntityBoat(world, (float) i + 0.5F, (float) j + 1.5F, (float) k + 0.5F)); + } + itemstack.a--; + } + return itemstack; + } +} + diff --git a/src/main/java/net/minecraft/server/ItemBucket.java b/src/main/java/net/minecraft/server/ItemBucket.java index e653e36af5..7fe09727f5 100644 --- a/src/main/java/net/minecraft/server/ItemBucket.java +++ b/src/main/java/net/minecraft/server/ItemBucket.java @@ -1,8 +1,5 @@ package net.minecraft.server; - -import java.util.Random; - import org.bukkit.BlockFace; import org.bukkit.craftbukkit.CraftBlock; import org.bukkit.craftbukkit.CraftItemStack; @@ -65,6 +62,7 @@ public class ItemBucket extends Item { if (a == 0) { if (world.c(i, j, k) == Material.f && world.b(i, j, k) == 0) { PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, direction); + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); if (!pie.isCancelled()) { world.d(i, j, k, 0); @@ -75,6 +73,7 @@ public class ItemBucket extends Item { } if (world.c(i, j, k) == Material.g && world.b(i, j, k) == 0) { PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, direction); + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); if (!pie.isCancelled()) { world.d(i, j, k, 0); diff --git a/src/main/java/net/minecraft/server/ItemFlintAndSteel.java b/src/main/java/net/minecraft/server/ItemFlintAndSteel.java new file mode 100644 index 0000000000..5a2f9d430b --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemFlintAndSteel.java @@ -0,0 +1,65 @@ +package net.minecraft.server; + +import org.bukkit.craftbukkit.CraftBlock; +import org.bukkit.craftbukkit.CraftItemStack; +import org.bukkit.craftbukkit.CraftPlayer; +import org.bukkit.event.Event.Type; +import org.bukkit.event.player.PlayerItemEvent; + + +public class ItemFlintAndSteel extends Item { + + public ItemFlintAndSteel(int i) { + super(i); + aX = 1; + aY = 64; + } + + public boolean a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) { + // Craftbukkit start - get the clicked block + CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k); + + if (l == 0) { + j--; + } + if (l == 1) { + j++; + } + if (l == 2) { + k--; + } + if (l == 3) { + k++; + } + if (l == 4) { + i--; + } + if (l == 5) { + i++; + } + int i1 = world.a(i, j, k); + + if (i1 == 0) { + // Craftbukkit start + // Flint and steel + + CraftItemStack itemInHand = new CraftItemStack(itemstack); + CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer); + PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, CraftBlock.notchToBlockFace(l)); + + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); + + boolean preventLighter = pie.isCancelled(); + + if (preventLighter) { + return false; + } else { + world.a((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "fire.ignite", 1.0F, b.nextFloat() * 0.4F + 0.8F); + world.d(i, j, k, Block.ar.bh); + } + } + itemstack.b(1); + return true; + } +} + diff --git a/src/main/java/net/minecraft/server/ItemHoe.java b/src/main/java/net/minecraft/server/ItemHoe.java new file mode 100644 index 0000000000..4002370fc8 --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemHoe.java @@ -0,0 +1,63 @@ +package net.minecraft.server; + +import org.bukkit.craftbukkit.CraftBlock; +import org.bukkit.craftbukkit.CraftItemStack; +import org.bukkit.craftbukkit.CraftPlayer; +import org.bukkit.event.Event.Type; +import org.bukkit.event.player.PlayerItemEvent; + + +public class ItemHoe extends Item { + + public ItemHoe(int i, int j) { + super(i); + aX = 1; + aY = 32 << j; + } + + public boolean a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) { + int i1 = world.a(i, j, k); + Material material = world.c(i, j + 1, k); + + if (!material.a() && i1 == Block.u.bh || i1 == Block.v.bh) { + // Craftbukkit start + // Hoes + CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k); + CraftItemStack itemInHand = new CraftItemStack(itemstack); + CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer); + PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, CraftBlock.notchToBlockFace(l)); + + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); + + if (pie.isCancelled()) return false; + + Block block = Block.aA; + + world.a((float) i + 0.5F, (float) j + 0.5F, (float) k + 0.5F, block.bq.c(), (block.bq.a() + 1.0F) / 2.0F, block.bq.b() * 0.8F); + if (world.z) { + return true; + } + world.d(i, j, k, block.bh); + itemstack.b(1); + if (world.l.nextInt(8) == 0 && i1 == Block.u.bh) { + int j1 = 1; + + for (int k1 = 0; k1 < j1; k1++) { + float f = 0.7F; + float f1 = world.l.nextFloat() * f + (1.0F - f) * 0.5F; + float f2 = 1.2F; + float f3 = world.l.nextFloat() * f + (1.0F - f) * 0.5F; + EntityItem entityitem = new EntityItem(world, (float) i + f1, (float) j + f2, (float) k + f3, new ItemStack(Item.Q)); + + entityitem.c = 10; + world.a(entityitem); + } + + } + return true; + } else { + return false; + } + } +} + diff --git a/src/main/java/net/minecraft/server/ItemMinecart.java b/src/main/java/net/minecraft/server/ItemMinecart.java new file mode 100644 index 0000000000..dfbd443b65 --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemMinecart.java @@ -0,0 +1,45 @@ +package net.minecraft.server; + +import org.bukkit.craftbukkit.CraftBlock; +import org.bukkit.craftbukkit.CraftItemStack; +import org.bukkit.craftbukkit.CraftPlayer; +import org.bukkit.event.Event.Type; +import org.bukkit.event.player.PlayerItemEvent; + + +public class ItemMinecart extends Item { + + public int a; + + public ItemMinecart(int i, int j) { + super(i); + aX = 1; + a = j; + } + + public boolean a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) { + int i1 = world.a(i, j, k); + + if (i1 == Block.aG.bh) { + // Craftbukkit start + // Minecarts + CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k); + CraftItemStack itemInHand = new CraftItemStack(itemstack); + CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer); + PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, CraftBlock.notchToBlockFace(l)); + + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); + + if (pie.isCancelled()) return false; + + if (!world.z) { + world.a(new EntityMinecart(world, (float) i + 0.5F, (float) j + 0.5F, (float) k + 0.5F, a)); + } + itemstack.a--; + return true; + } else { + return false; + } + } +} + diff --git a/src/main/java/net/minecraft/server/ItemRedstone.java b/src/main/java/net/minecraft/server/ItemRedstone.java new file mode 100644 index 0000000000..f983fd1b76 --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemRedstone.java @@ -0,0 +1,58 @@ +package net.minecraft.server; + +import org.bukkit.craftbukkit.CraftBlock; +import org.bukkit.craftbukkit.CraftItemStack; +import org.bukkit.craftbukkit.CraftPlayer; +import org.bukkit.event.Event.Type; +import org.bukkit.event.player.PlayerItemEvent; + + +public class ItemRedstone extends Item { + + public ItemRedstone(int i) { + super(i); + } + + public boolean a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) { + // Craftbukkit start get the clicked block + CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k); + + if (l == 0) { + j--; + } + if (l == 1) { + j++; + } + if (l == 2) { + k--; + } + if (l == 3) { + k++; + } + if (l == 4) { + i--; + } + if (l == 5) { + i++; + } + if (!world.e(i, j, k)) { + return false; + } + if (Block.av.a(world, i, j, k)) { + // Craftbukkit start + // Redstone + CraftItemStack itemInHand = new CraftItemStack(itemstack); + CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer); + PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, CraftBlock.notchToBlockFace(l)); + + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); + + if (pie.isCancelled()) return false; + + itemstack.a--; + world.d(i, j, k, Block.av.bh); + } + return true; + } +} + diff --git a/src/main/java/net/minecraft/server/ItemSeeds.java b/src/main/java/net/minecraft/server/ItemSeeds.java new file mode 100644 index 0000000000..ea47512551 --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemSeeds.java @@ -0,0 +1,47 @@ +package net.minecraft.server; + +import org.bukkit.craftbukkit.CraftBlock; +import org.bukkit.craftbukkit.CraftItemStack; +import org.bukkit.craftbukkit.CraftPlayer; +import org.bukkit.event.Event.Type; +import org.bukkit.event.player.PlayerItemEvent; + + +public class ItemSeeds extends Item { + + private int a; + + public ItemSeeds(int i, int j) { + super(i); + a = j; + } + + public boolean a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) { + if (l != 1) { + return false; + } + int i1 = world.a(i, j, k); + + if (i1 == Block.aA.bh) { + // Craftbukkit start + // Seeds + CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k); + CraftItemStack itemInHand = new CraftItemStack(itemstack); + CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer); + PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, CraftBlock.notchToBlockFace(l)); + + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); + + if (!pie.isCancelled()) { + world.d(i, j + 1, k, a); + itemstack.a--; + return true; + } else { + return false; + } + } else { + return false; + } + } +} + diff --git a/src/main/java/net/minecraft/server/ItemSign.java b/src/main/java/net/minecraft/server/ItemSign.java new file mode 100644 index 0000000000..c7f949eadd --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemSign.java @@ -0,0 +1,72 @@ +package net.minecraft.server; + +import org.bukkit.craftbukkit.CraftBlock; +import org.bukkit.craftbukkit.CraftItemStack; +import org.bukkit.craftbukkit.CraftPlayer; +import org.bukkit.event.Event.Type; +import org.bukkit.event.player.PlayerItemEvent; + + +public class ItemSign extends Item { + + public ItemSign(int i) { + super(i); + aY = 64; + aX = 1; + } + + public boolean a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) { + if (l == 0) { + return false; + } + if (!world.c(i, j, k).a()) { + return false; + } + + // Craftbukkit - store the clicked block + CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k); + + if (l == 1) { + j++; + } + if (l == 2) { + k--; + } + if (l == 3) { + k++; + } + if (l == 4) { + i--; + } + if (l == 5) { + i++; + } + if (!Block.aD.a(world, i, j, k)) { + return false; + } + + // Craftbukkit start + // Signs + CraftItemStack itemInHand = new CraftItemStack(itemstack); + CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer); + PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, thePlayer, itemInHand, blockClicked, CraftBlock.notchToBlockFace(l)); + + ((WorldServer) world).getServer().getPluginManager().callEvent(pie); + + if (pie.isCancelled()) return false; + + if (l == 1) { + world.b(i, j, k, Block.aD.bh, MathHelper.b((double) (((entityplayer.v + 180F) * 16F) / 360F) + 0.5D) & 0xf); + } else { + world.b(i, j, k, Block.aI.bh, l); + } + itemstack.a--; + TileEntitySign tileentitysign = (TileEntitySign) world.l(i, j, k); + + if (tileentitysign != null) { + entityplayer.a(tileentitysign); + } + return true; + } +} + diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java index 57eb5c46fb..063e0526dd 100644 --- a/src/main/java/net/minecraft/server/NetServerHandler.java +++ b/src/main/java/net/minecraft/server/NetServerHandler.java @@ -342,6 +342,7 @@ implements ICommandListener { CraftItemStack craftItem = new CraftItemStack(itemstack); CraftPlayer player = new CraftPlayer(server, e); PlayerItemEvent pie = new PlayerItemEvent(Type.PLAYER_ITEM, player, craftItem, blockClicked, blockFace); + server.getPluginManager().callEvent(pie); // Craftbukkit We still call this event even in spawn protection. // Don't call this event if using Buckets / signs