Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}