Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 113 lines 3.4 kB view raw
1package net.minecraft.server; 2 3import org.bukkit.craftbukkit.event.CraftEventFactory; 4import org.bukkit.event.entity.EntityInteractEvent; 5 6import java.util.Random; 7 8// CraftBukkit start 9// CraftBukkit end 10 11public class BlockSoil extends Block { 12 13 protected BlockSoil(int i) { 14 super(i, Material.EARTH); 15 this.textureId = 87; 16 this.a(true); 17 this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.9375F, 1.0F); 18 this.f(255); 19 } 20 21 public AxisAlignedBB e(World world, int i, int j, int k) { 22 return AxisAlignedBB.b((double) (i + 0), (double) (j + 0), (double) (k + 0), (double) (i + 1), (double) (j + 1), (double) (k + 1)); 23 } 24 25 public boolean a() { 26 return false; 27 } 28 29 public boolean b() { 30 return false; 31 } 32 33 public int a(int i, int j) { 34 return i == 1 && j > 0 ? this.textureId - 1 : (i == 1 ? this.textureId : 2); 35 } 36 37 public void a(World world, int i, int j, int k, Random random) { 38 if (random.nextInt(5) == 0) { 39 if (!this.h(world, i, j, k) && !world.s(i, j + 1, k)) { 40 int l = world.getData(i, j, k); 41 42 if (l > 0) { 43 world.setData(i, j, k, l - 1); 44 } else if (!this.g(world, i, j, k)) { 45 world.setTypeId(i, j, k, Block.DIRT.id); 46 } 47 } else { 48 world.setData(i, j, k, 7); 49 } 50 } 51 } 52 53 public void b(World world, int i, int j, int k, Entity entity) { 54 if (world.random.nextInt(4) == 0) { 55 // CraftBukkit start - Interact Soil 56 org.bukkit.event.Cancellable cancellable; 57 if (entity instanceof EntityHuman) { 58 cancellable = CraftEventFactory.callPlayerInteractEvent((EntityHuman) entity, org.bukkit.event.block.Action.PHYSICAL, i, j, k, -1, null); 59 } else { 60 cancellable = new EntityInteractEvent(entity.getBukkitEntity(), world.getWorld().getBlockAt(i, j, k)); 61 world.getServer().getPluginManager().callEvent((EntityInteractEvent) cancellable); 62 } 63 64 if (cancellable.isCancelled()) { 65 return; 66 } 67 // CraftBukkit end 68 69 world.setTypeId(i, j, k, Block.DIRT.id); 70 } 71 } 72 73 private boolean g(World world, int i, int j, int k) { 74 byte b0 = 0; 75 76 for (int l = i - b0; l <= i + b0; ++l) { 77 for (int i1 = k - b0; i1 <= k + b0; ++i1) { 78 if (world.getTypeId(l, j + 1, i1) == Block.CROPS.id) { 79 return true; 80 } 81 } 82 } 83 84 return false; 85 } 86 87 private boolean h(World world, int i, int j, int k) { 88 for (int l = i - 4; l <= i + 4; ++l) { 89 for (int i1 = j; i1 <= j + 1; ++i1) { 90 for (int j1 = k - 4; j1 <= k + 4; ++j1) { 91 if (world.getMaterial(l, i1, j1) == Material.WATER) { 92 return true; 93 } 94 } 95 } 96 } 97 98 return false; 99 } 100 101 public void doPhysics(World world, int i, int j, int k, int l) { 102 super.doPhysics(world, i, j, k, l); 103 Material material = world.getMaterial(i, j + 1, k); 104 105 if (material.isBuildable()) { 106 world.setTypeId(i, j, k, Block.DIRT.id); 107 } 108 } 109 110 public int a(int i, Random random) { 111 return Block.DIRT.a(0, random); 112 } 113}