Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 176 lines 6.4 kB view raw
1package net.minecraft.server; 2 3import java.util.Random; 4 5import uk.betacraft.uberbukkit.UberbukkitConfig; 6 7public class WorldGenDungeons extends WorldGenerator { 8 9 public WorldGenDungeons() { 10 } 11 12 public boolean a(World world, Random random, int i, int j, int k) { 13 byte b0 = 3; 14 int l = random.nextInt(2) + 2; 15 int i1 = random.nextInt(2) + 2; 16 int j1 = 0; 17 18 int k1; 19 int l1; 20 int i2; 21 22 for (k1 = i - l - 1; k1 <= i + l + 1; ++k1) { 23 for (l1 = j - 1; l1 <= j + b0 + 1; ++l1) { 24 for (i2 = k - i1 - 1; i2 <= k + i1 + 1; ++i2) { 25 Material material = world.getMaterial(k1, l1, i2); 26 27 if (l1 == j - 1 && !material.isBuildable()) { 28 return false; 29 } 30 31 if (l1 == j + b0 + 1 && !material.isBuildable()) { 32 return false; 33 } 34 35 if ((k1 == i - l - 1 || k1 == i + l + 1 || i2 == k - i1 - 1 || i2 == k + i1 + 1) && l1 == j && world.isEmpty(k1, l1, i2) && world.isEmpty(k1, l1 + 1, i2)) { 36 ++j1; 37 } 38 } 39 } 40 } 41 42 if (j1 >= 1 && j1 <= 5) { 43 for (k1 = i - l - 1; k1 <= i + l + 1; ++k1) { 44 for (l1 = j + b0; l1 >= j - 1; --l1) { 45 for (i2 = k - i1 - 1; i2 <= k + i1 + 1; ++i2) { 46 if (k1 != i - l - 1 && l1 != j - 1 && i2 != k - i1 - 1 && k1 != i + l + 1 && l1 != j + b0 + 1 && i2 != k + i1 + 1) { 47 world.setTypeId(k1, l1, i2, 0); 48 } else if (l1 >= 0 && !world.getMaterial(k1, l1 - 1, i2).isBuildable()) { 49 world.setTypeId(k1, l1, i2, 0); 50 } else if (world.getMaterial(k1, l1, i2).isBuildable()) { 51 if (l1 == j - 1 && random.nextInt(4) != 0) { 52 world.setTypeId(k1, l1, i2, Block.MOSSY_COBBLESTONE.id); 53 } else { 54 world.setTypeId(k1, l1, i2, Block.COBBLESTONE.id); 55 } 56 } 57 } 58 } 59 } 60 61 k1 = 0; 62 63 while (k1 < 2) { 64 l1 = 0; 65 66 while (true) { 67 if (l1 < 3) { 68 label204: 69 { 70 i2 = i + random.nextInt(l * 2 + 1) - l; 71 int j2 = k + random.nextInt(i1 * 2 + 1) - i1; 72 73 if (world.isEmpty(i2, j, j2)) { 74 int k2 = 0; 75 76 if (world.getMaterial(i2 - 1, j, j2).isBuildable()) { 77 ++k2; 78 } 79 80 if (world.getMaterial(i2 + 1, j, j2).isBuildable()) { 81 ++k2; 82 } 83 84 if (world.getMaterial(i2, j, j2 - 1).isBuildable()) { 85 ++k2; 86 } 87 88 if (world.getMaterial(i2, j, j2 + 1).isBuildable()) { 89 ++k2; 90 } 91 92 if (k2 == 1) { 93 world.setTypeId(i2, j, j2, Block.CHEST.id); 94 TileEntityChest tileentitychest = (TileEntityChest) world.getTileEntity(i2, j, j2); 95 96 for (int l2 = 0; l2 < 8; ++l2) { 97 ItemStack itemstack = this.a(random); 98 99 if (itemstack != null) { 100 tileentitychest.setItem(random.nextInt(tileentitychest.getSize()), itemstack); 101 } 102 } 103 break label204; 104 } 105 } 106 107 ++l1; 108 continue; 109 } 110 } 111 112 ++k1; 113 break; 114 } 115 } 116 117 world.setTypeId(i, j, k, Block.MOB_SPAWNER.id); 118 TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner) world.getTileEntity(i, j, k); 119 120 tileentitymobspawner.a(this.b(random)); 121 return true; 122 } else { 123 return false; 124 } 125 } 126 127 private ItemStack a(Random random) { 128 int i = random.nextInt(11); 129 130 switch (i) { 131 case 0: 132 return new ItemStack(Item.SADDLE); 133 case 1: 134 return new ItemStack(Item.IRON_INGOT, random.nextInt(4) + 1); 135 case 2: 136 new ItemStack(Item.BREAD); 137 case 3: 138 new ItemStack(Item.WHEAT, random.nextInt(4) + 1); 139 case 4: 140 new ItemStack(Item.SULPHUR, random.nextInt(4) + 1); 141 case 5: 142 new ItemStack(Item.STRING, random.nextInt(4) + 1); 143 case 6: 144 new ItemStack(Item.BUCKET); 145 case 7: { 146 if (random.nextInt(100) == 0) { 147 return new ItemStack(Item.GOLDEN_APPLE); 148 } 149 } 150 case 8: { 151 if (random.nextInt(2) == 0) { 152 return new ItemStack(Item.REDSTONE, random.nextInt(4) + 1); 153 } 154 } 155 case 9: { 156 if (random.nextInt(10) == 0) { 157 return new ItemStack(Item.byId[Item.GOLD_RECORD.id + random.nextInt(2)]); 158 } 159 } 160 case 10: { 161 // uberbukkit 162 if (UberbukkitConfig.getInstance().getBoolean("worldgen.cocoabeans_loot", true)) { 163 return new ItemStack(Item.INK_SACK, 1, 3); 164 } 165 } 166 default: 167 return null; 168 } 169 } 170 171 private String b(Random random) { 172 int i = random.nextInt(4); 173 174 return i == 0 ? "Skeleton" : (i == 1 ? "Zombie" : (i == 2 ? "Zombie" : (i == 3 ? "Spider" : ""))); 175 } 176}