OSDN Git Service

d9aded853534e4325ce48ccba4da0f6bbf7c102c
[chemicraft/chemicraft.git] / common / chemicraft / debug / SetBlockSupport.java
1 package chemicraft.debug;\r
2 import java.util.Random;\r
3 \r
4 import net.minecraft.world.World;\r
5 \r
6 public class SetBlockSupport\r
7 {\r
8 \r
9         static Random rand = new Random();\r
10 \r
11         /**\r
12          * X方向に線状にBlockを配置します。\r
13          * Directionが0の場合、特殊な計算式で\r
14          * +,-方向:loop-1の長さになります。\r
15          * @param par1World\r
16          * @param X 基準X座標\r
17          * @param Y 基準Y座標\r
18          * @param Z 基準Z座標\r
19          * @param Block 配置するBlock\r
20          * @param meta 配置するMetadata\r
21          * @param Length 長さ\r
22          * @param Direction 方向(+方向:1,-方向:-1,中心から-+の方向:0)\r
23          * @return Object\r
24          */\r
25         public static Object lineX(World par1World,int X,int Y,int Z,int Block,int meta,int Length,int Direction)\r
26         {\r
27                 int loop2=0;\r
28                 Object DataBox=null;\r
29                 for(loop2=0;loop2 < Length;loop2++)\r
30                 {\r
31                         switch(Direction)\r
32                         {\r
33                         default:\r
34 \r
35                         case -1:\r
36                                 DataBox = par1World.setBlockAndMetadataWithNotify(X, Y, Z, Block, meta);\r
37                                 break;\r
38                         case 0:\r
39                                 DataBox = par1World.setBlockAndMetadataWithNotify(X-(Length-1)+loop2,Y,Z,Block,meta);\r
40                                 break;\r
41                         case 1:\r
42                                 DataBox = par1World.setBlockAndMetadataWithNotify(X+loop2, Y, Z, Block,meta);\r
43                                 break;\r
44                         }\r
45                 }\r
46                 return DataBox;\r
47         }\r
48 \r
49         /**\r
50          * Y方向に線状にBlockを配置します。\r
51          * Directionが0の場合、特殊な計算式で\r
52          * +,-方向:loop-1の長さになります。\r
53          * @param par1World\r
54          * @param X 基準X座標\r
55          * @param Y 基準Y座標\r
56          * @param Z 基準Z座標\r
57          * @param Block 配置するBlock\r
58          * @param meta 配置するMetadata\r
59          * @param Length 長さ\r
60          * @param Direction 方向(+方向:1,-方向:-1,中心から-+の方向:0)\r
61          * @return Object\r
62          */\r
63         public static Object lineY(World par1World,int X,int Y,int Z,int Block,int meta,int Length,int Direction)\r
64         {\r
65                 int loop2=0;\r
66                 Object DataBox=null;\r
67                 for(loop2=0;loop2 < Length;loop2++)\r
68                 {\r
69                         switch(Direction)\r
70                         {\r
71                         default:\r
72 \r
73                         case -1:\r
74                                 DataBox = par1World.setBlockAndMetadataWithNotify(X, Y-loop2, Z, Block,meta);\r
75                                 break;\r
76                         case 0:\r
77                                 DataBox = par1World.setBlockAndMetadataWithNotify(X,Y-(Length-1)+loop2,Z,Block,meta);\r
78                                 break;\r
79                         case 1:\r
80                                 DataBox = par1World.setBlockAndMetadataWithNotify(X, Y+loop2, Z, Block,meta);\r
81                                 break;\r
82                         }\r
83                 }\r
84                 return DataBox;\r
85         }\r
86 \r
87         /**\r
88          * Z方向に線状にBlockを配置します。\r
89          * Directionが0の場合、特殊な計算式で\r
90          * +,-方向:loop-1の長さになります。\r
91          * @param par1World\r
92          * @param X 基準X座標\r
93          * @param Y 基準Y座標\r
94          * @param Z 基準Z座標\r
95          * @param Block 配置するBlock\r
96          * @param meta 配置するMetadata\r
97          * @param Length 長さ\r
98          * @param Direction 方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
99          * @return Object\r
100          */\r
101         public static Object lineZ(World par1World,int X,int Y,int Z,int Block,int meta,int Length,int Direction)\r
102         {\r
103                 int loop2=0;\r
104                 Object DataBox=null;\r
105                 for(loop2=0;loop2 < Length;loop2++)\r
106                 {\r
107                         switch(Direction)\r
108                         {\r
109                         default:\r
110 \r
111                         case -1:\r
112                                 DataBox = par1World.setBlockAndMetadataWithNotify(X, Y, Z-loop2, Block,meta);\r
113                                 break;\r
114                         case 0:\r
115                                 DataBox = par1World.setBlockAndMetadataWithNotify(X,Y,Z-(Length-1)+loop2,Block,meta);\r
116                                 break;\r
117                         case 1:\r
118                                 DataBox = par1World.setBlockAndMetadataWithNotify(X, Y, Z+loop2, Block,meta);\r
119                                 break;\r
120                         }\r
121                 }\r
122                 return DataBox;\r
123         }\r
124 \r
125         /**\r
126          * XY方向に線状にBlockを配置します。\r
127          * Directionが0の場合、特殊な計算式で\r
128          * +,-方向:loop-1の長さになります。\r
129          * @param par1World\r
130          * @param X 基準X座標\r
131          * @param Y 基準Y座標\r
132          * @param Z 基準Z座標\r
133          * @param Block 配置するBlock\r
134          * @param meta 配置するMetadata\r
135          * @param XLength X方向の長さ\r
136          * @param YLength Y方向の長さ\r
137          * @param XDirection X方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
138          * @param YDirection Y方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
139          * @return Object\r
140          */\r
141         public static Object  lineXY(World par1World,int X,int Y,int Z,int Block,int meta,int XLength,int YLength,int XDirection,int YDirection)\r
142         {\r
143                 Object DataBox=null;\r
144                 DataBox = lineX(par1World,X,Y,Z,Block,meta,XLength,XDirection);\r
145                 DataBox = lineY(par1World,X,Y,Z,Block,YLength,meta,YDirection);\r
146                 return DataBox;\r
147         }\r
148 \r
149         /**\r
150          * XZ方向に線状にBlockを配置します。\r
151          * Directionが0の場合、特殊な計算式で\r
152          * +,-方向:loop-1の長さになります。\r
153          * @param par1World\r
154          * @param X 基準X座標\r
155          * @param Y 基準Y座標\r
156          * @param Z 基準Z座標\r
157          * @param Block 配置するBlock\r
158          * @param meta 配置するMetadata\r
159          * @param XLength X方向の長さ\r
160          * @param ZLength Y方向の長さ\r
161          * @param XDirection X方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
162          * @param ZDirection Z方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
163          * @return Object\r
164          */\r
165         public static Object  lineXZ(World par1World,int X,int Y,int Z,int Block,int meta,int XLength,int ZLength,int XDirection,int ZDirection)\r
166         {\r
167                 Object DataBox=null;\r
168                 DataBox = lineX(par1World,X,Y,Z,Block,meta,XLength,XDirection);\r
169                 DataBox = lineZ(par1World,X,Y,Z,Block,meta,ZLength,ZDirection);\r
170                 return DataBox;\r
171         }\r
172 \r
173         /**\r
174          * YZ方向に線状にBlockを配置します。\r
175          * Directionが0の場合、特殊な計算式で\r
176          * +,-方向:loop-1の長さになります。\r
177          * @param par1World\r
178          * @param X 基準X座標\r
179          * @param Y 基準Y座標\r
180          * @param Z 基準Z座標\r
181          * @param Block 配置するBlock\r
182          * @param meta 配置するMetadata\r
183          * @param YLength X方向の長さ\r
184          * @param ZLength Y方向の長さ\r
185          * @param YDirection Y方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
186          * @param ZDirection Z方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
187          * @return Object\r
188          */\r
189         public static Object  lineYZ(World par1World,int X,int Y,int Z,int Block,int meta,int YLength,int ZLength,int YDirection,int ZDirection)\r
190         {\r
191                 Object DataBox=null;\r
192                 DataBox = lineY(par1World,X,Y,Z,Block,meta,YLength,YDirection);\r
193                 DataBox = lineZ(par1World,X,Y,Z,Block,meta,ZLength,ZDirection);\r
194                 return DataBox;\r
195         }\r
196 \r
197         /**\r
198          * XYZ方向に線状にBlockを配置します。\r
199          * Directionが0の場合、特殊な計算式で\r
200          * +,-方向:loop-1の長さになります。\r
201          * @param par1World\r
202          * @param X 基準X座標\r
203          * @param Y 基準Y座標\r
204          * @param Z 基準Z座標\r
205          * @param Block 配置するBlock\r
206          * @param meta 配置するMetadata\r
207          * @param XLength X方向の長さ\r
208          * @param YLength Y方向の長さ\r
209          * @param ZLength Z方向の長さ\r
210          * @param XDirection X方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
211          * @param YDirection Y方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
212          * @param ZDirection Z方向指定(+方向:1,-方向:-1,中心から-+の方向:0)\r
213          * @return Object\r
214          */\r
215         public static Object  lineXYZ(World par1World,int X,int Y,int Z,int Block,int meta,int XLength,int YLength,int ZLength,int XDirection,int YDirection,int ZDirection)\r
216         {\r
217                 Object DataBox=null;\r
218                 DataBox = lineX(par1World,X,Y,Z,Block,meta,XLength,XDirection);\r
219                 DataBox = lineY(par1World,X,Y,Z,Block,meta,YLength,YDirection);\r
220                 DataBox = lineZ(par1World,X,Y,Z,Block,meta,ZLength,ZDirection);\r
221                 return DataBox;\r
222         }\r
223 \r
224         /**\r
225          * X方向の壁を作成します。\r
226          * Directionは1で固定です。\r
227          * @param par1World\r
228          * @param X 基準X座標\r
229          * @param Y 基準Y座標\r
230          * @param Z 基準Z座標\r
231          * @param Block 配置するBlock\r
232          * @param meta 配置するMetadata\r
233          * @param Length 幅\r
234          * @param height 高さ\r
235          * @return Object\r
236          */\r
237         public static Object wallX(World par1World,int X,int Y,int Z,int Block,int meta,int Length,int height)\r
238         {\r
239                 Object DataBox = null;\r
240                 for(int loop = 0;loop < Length;loop++){\r
241                         lineY(par1World, X - (Length/2) + loop, Y, Z, Block,meta, height, 1);\r
242                 }\r
243                 return DataBox;\r
244         }\r
245 \r
246         /**\r
247          * Z方向の壁を作成します。\r
248          * Directionは1で固定です。\r
249          * @param par1World\r
250          * @param X 基準X座標\r
251          * @param Y 基準Y座標\r
252          * @param Z 基準Z座標\r
253          * @param Block 配置するBlock\r
254          * @param meta 配置するMetadata\r
255          * @param Length 幅\r
256          * @param height 高さ\r
257          * @return Object\r
258          */\r
259         public static Object wallZ(World par1World,int X,int Y,int Z,int Block,int meta,int Length,int height)\r
260         {\r
261                 Object DataBox = null;\r
262                 for(int loop = 0;loop < Length;loop++){\r
263                         lineY(par1World, X, Y, Z - (Length/2) + loop, Block,meta, height, 1);\r
264                 }\r
265                 return DataBox;\r
266         }\r
267 \r
268         /**\r
269          * 辺だけの四角を作成します。\r
270          * @param par1World\r
271          * @param X 基準X座標\r
272          * @param Y 基準Y座標\r
273          * @param Z 基準Z座標\r
274          * @param Block 配置するBlock\r
275          * @param meta 配置するMetadata\r
276          * @param LengthX X方向の長さ\r
277          * @param LengthZ  Z方向の長さ\r
278          * @return Object\r
279          */\r
280         public static Object spuareFrame(World par1World,int X,int Y,int Z,int Block,int meta,int LengthX,int LengthZ)\r
281         {\r
282                 Object DataBox = null;\r
283                 DataBox = lineX(par1World, X, Y, Z + (LengthZ/2), Block,meta, LengthX/2+1, 0);\r
284                 DataBox = lineX(par1World, X, Y, Z - (LengthZ/2), Block,meta, LengthX/2+1, 0);\r
285                 DataBox = lineZ(par1World, X + (LengthX/2), Y, Z, Block,meta, LengthZ/2+1, 0);\r
286                 DataBox = lineZ(par1World, X - (LengthX/2), Y, Z, Block,meta, LengthZ/2+1, 0);\r
287                 return DataBox;\r
288         }\r
289 \r
290         /**\r
291          * 辺だけの箱を作成します。\r
292          * @param par1World\r
293          * @param X 基準X座標\r
294          * @param Y 基準Y座標\r
295          * @param Z 基準Z座標\r
296          * @param Block 配置するBlock\r
297          * @param meta 配置するMetadata\r
298          * @param LengthX X方向の長さ\r
299          * @param LengthZ  Z方向の長さ\r
300          * @param height 高さ\r
301          * @return Object\r
302          */\r
303         public static Object boxFrame(World par1World,int X,int Y,int Z,int Block,int meta,int LengthX,int LengthZ,int height)\r
304         {\r
305                 Object DataBox=null;\r
306                 DataBox = lineX(par1World, X, Y, Z + (LengthZ/2), Block,meta, LengthX/2, 0);\r
307                 DataBox = lineX(par1World, X, Y, Z - (LengthZ/2), Block,meta, LengthX/2, 0);\r
308                 DataBox = lineX(par1World, X, Y + height-1, Z + (LengthZ/2), Block,meta, LengthX/2, 0);\r
309                 DataBox = lineX(par1World, X, Y + height-1, Z - (LengthZ/2), Block,meta, LengthX/2, 0);\r
310 \r
311                 DataBox = lineY(par1World,X +(LengthX/2),Y,Z +(LengthZ/2),Block,meta,height,1);\r
312                 DataBox = lineY(par1World,X -(LengthX/2),Y,Z +(LengthZ/2),Block,meta,height,1);\r
313                 DataBox = lineY(par1World,X +(LengthX/2),Y,Z - (LengthZ/2),Block,meta,height,1);\r
314                 DataBox = lineY(par1World,X -(LengthX/2),Y,Z - (LengthZ/2),Block,meta,height,1);\r
315 \r
316                 DataBox = lineZ(par1World, X + (LengthX/2), Y, Z, Block,meta, LengthZ/2, 0);\r
317                 DataBox = lineZ(par1World, X - (LengthX/2), Y, Z, Block,meta, LengthZ/2, 0);\r
318                 DataBox = lineZ(par1World, X + (LengthX/2), Y + height-1, Z, Block,meta, LengthZ/2, 0);\r
319                 DataBox = lineZ(par1World, X - (LengthX/2), Y + height-1, Z, Block,meta, LengthZ/2, 0);\r
320                 return DataBox;\r
321         }\r
322 \r
323         /**\r
324          * 四角を作成します。\r
325          * @param par1World\r
326          * @param X 基準X座標\r
327          * @param Y 基準Y座標\r
328          * @param Z 基準Z座標\r
329          * @param Block 配置するBlock\r
330          * @param meta 配置するMetadata\r
331          * @param LengthX X方向の長さ\r
332          * @param LengthZ  Z方向の長さ\r
333          * @return Object\r
334          */\r
335         public static Object square(World par1World,int X,int Y,int Z,int Block,int meta,int LengthX,int LengthZ)\r
336         {\r
337                 Object DataBox = null;\r
338                 int loop1 = 0;\r
339                 for(loop1=0; loop1 < LengthZ; loop1++){\r
340                         DataBox = lineX(par1World,X - (LengthX/2),Y,Z - (LengthZ/2) + loop1,Block,meta,LengthX,1);\r
341                 }\r
342                 return DataBox;\r
343         }\r
344 \r
345         /**\r
346          * 箱を生成します。\r
347          * @param par1World\r
348          * @param X 基準X座標\r
349          * @param Y 基準Y座標\r
350          * @param Z 基準Z座標\r
351          * @param Block 配置するBlock\r
352          * @param meta 配置するMetadata\r
353          * @param LengthX X方向の長さ\r
354          * @param LengthZ  Z方向の長さ\r
355          * @param height 高さ\r
356          * @return Object\r
357          */\r
358         public static Object box(World par1World,int X,int Y,int Z,int Block,int meta,int LengthX,int LengthZ,int height)\r
359         {\r
360                 Object DataBox = null;\r
361                 DataBox = square(par1World, X, Y, Z, Block, meta,LengthX,LengthZ);\r
362                 DataBox = square(par1World,X,Y+height,Z,Block,meta,LengthX,LengthZ);\r
363                 DataBox = wallX(par1World,X,Y,Z-(LengthZ/2),Block,meta,LengthX,height);\r
364                 DataBox = wallZ(par1World,X-(LengthX/2),Y,Z,Block,meta,LengthZ,height);\r
365                 DataBox = wallX(par1World,X,Y,Z+(LengthZ/2),Block,meta,LengthX,height);\r
366                 DataBox = wallZ(par1World,X+(LengthX/2),Y,Z,Block,meta,LengthZ,height);\r
367                 return DataBox;\r
368         }\r
369 \r
370         /**\r
371          * Blockで埋め尽くされた箱を生成します。\r
372          * @param par1World\r
373          * @param X 基準X座標\r
374          * @param Y 基準Y座標\r
375          * @param Z 基準Z座標\r
376          * @param Block 配置するBlock\r
377          * @param meta 配置するMetadata\r
378          * @param LengthX X方向の長さ\r
379          * @param LengthZ  Z方向の長さ\r
380          * @param height 高さ\r
381          * @return Object\r
382          */\r
383         public static Object fillBox(World par1World , int X,int Y,int Z,int Block,int meta,int LengthX,int LengthZ,int height)\r
384         {\r
385                 Object DataBox = null;\r
386                 DataBox = square(par1World, X, Y, Z, Block,meta, LengthX,LengthZ);\r
387                 DataBox = square(par1World,X,Y+height,Z,Block,meta,LengthX,LengthZ);\r
388                 DataBox = wallX(par1World,X,Y,Z-(LengthZ/2),Block,meta,LengthX,height);\r
389                 DataBox = wallZ(par1World,X-(LengthX/2),Y,Z,Block,meta,LengthZ,height);\r
390                 DataBox = wallX(par1World,X,Y,Z+(LengthZ/2),Block,meta,LengthX,height);\r
391                 DataBox = wallZ(par1World,X+(LengthX/2),Y,Z,Block,meta,LengthZ,height);\r
392 \r
393                 for(int i = 0; i < LengthX - 1; i++)\r
394                 {\r
395                         DataBox = wallZ(par1World,X + 1 - LengthX / 2 + i, Y , Z , Block ,meta,LengthZ, height);\r
396                 }\r
397 \r
398                 return DataBox;\r
399         }\r
400 \r
401         /**\r
402          * 座標ごとにデータを指定して配置します。\r
403          * 配列になっているので、順番に指定してください。\r
404          * @param par1World\r
405          * @param X 基準X座標\r
406          * @param Y 基準Y座標\r
407          * @param Z 基準Z座標\r
408          * @param Block 配置するBlock\r
409          * @param meta 配置するMetadata\r
410          * @param XPosition 配置する相対X座標\r
411          * @param YPosition 配置する相対Y座標\r
412          * @param ZPosition 配置する相対Z座標\r
413          * @param Option\r
414          * @return Object\r
415          */\r
416         public static Object fineSetBlock(World par1World,int X,int Y,int Z,int[] Block,int[] meta,int[] XPosition,int[] YPosition,int[] ZPosition,Object[] Option){\r
417                 Object DataBox = null;\r
418                 for(int i=0;i<Block.length;i++){\r
419                         DataBox = par1World.setBlockAndMetadata(X+XPosition[i], Y+YPosition[i], Z+ZPosition[i], Block[i],meta[i]);\r
420                 }\r
421 \r
422                 if(Option!=null){\r
423                         for(int j=0;j<Option.length;j++){\r
424                                 DataBox = Option[j];\r
425                         }\r
426                 }\r
427                 return DataBox;\r
428         }\r
429 \r
430         /**\r
431          * X方向に台形を作成します。\r
432          * 必ずbottom/(upper*3)*(height/upper)かupper/(bottom*3)*(height/buttom)が整数になるようにしてください。\r
433          * @param par1World\r
434          * @param X 基準X座標\r
435          * @param Y 基準Y座標\r
436          * @param Z 基準Z座標\r
437          * @param Block 配置するBlock\r
438          * @param meta 配置するMetadata\r
439          * @param upperSide 上辺の長さ\r
440          * @param bottomSide 下辺の長さ\r
441          * @param height 高さ\r
442          * @return Object\r
443          */\r
444         public static Object trapezoidX(World par1World,int X,int Y,int Z,int Block,int meta,int upperSide,int bottomSide,int height){\r
445                 Object dataBox = null;\r
446                 int Rate=0;\r
447                 int Math=0;\r
448                 int XRate=0;\r
449                 int YRate = 0;\r
450                 for(int i=0;i<height;i++){\r
451                         YRate++;\r
452                         Math++;\r
453                         XRate++;\r
454                         if(upperSide < bottomSide){\r
455                                 if(Math == bottomSide/(upperSide*3)*(height/upperSide)){\r
456                                         Rate++;\r
457                                         Math=0;\r
458                                 }\r
459                         }\r
460 \r
461                         if(bottomSide < upperSide){\r
462                                 if(Math == upperSide/(bottomSide*3)*(height/bottomSide)){\r
463                                         Rate--;\r
464                                         Math=0;\r
465                                 }\r
466                         }\r
467 \r
468                         dataBox=lineZ(par1World, X+XRate-1, Y+YRate, Z, Block, meta, upperSide+Rate, 0);\r
469                 }\r
470                 return dataBox;\r
471         }\r
472 \r
473         /**\r
474          * Y方向のXラインに台形を作成します。\r
475          * 必ずbottom/(upper*3)*(height/upper)かupper/(bottom*3)*(height/buttom)が整数になるようにしてください。\r
476          * @param par1World\r
477          * @param X 基準X座標\r
478          * @param Y 基準Y座標\r
479          * @param Z 基準Z座標\r
480          * @param Block 配置するBlock\r
481          * @param meta 配置するMetadata\r
482          * @param upperSide 上辺の長さ\r
483          * @param bottomSide 下辺の長さ\r
484          * @param height 高さ\r
485          * @return Object\r
486          */\r
487         public static Object trapezoidY_X(World par1World,int X,int Y,int Z,int Block,int meta,int upperSide,int bottomSide,int height){\r
488                 Object dataBox = null;\r
489                 int Rate=0;\r
490                 int Math=0;\r
491                 int YRate = 0;\r
492                 for(int i=0;i<height;i++){\r
493                         YRate++;\r
494                         Math++;\r
495                         if(upperSide < bottomSide){\r
496                                 if(Math == bottomSide/(upperSide*3)*(height/upperSide)){\r
497                                         Rate++;\r
498                                         Math=0;\r
499                                 }\r
500                         }\r
501 \r
502                         if(bottomSide < upperSide){\r
503                                 if(Math == upperSide/(bottomSide*3)*(height/bottomSide)){\r
504                                         Rate--;\r
505                                         Math=0;\r
506                                 }\r
507                         }\r
508 \r
509                         dataBox=lineZ(par1World, X, Y+YRate, Z, Block, meta, upperSide+Rate, 0);\r
510                 }\r
511                 return dataBox;\r
512         }\r
513 \r
514         /**\r
515          * Y方向のZラインに台形を作成します。\r
516          * 必ずbottom/(upper*3)*(height/upper)かupper/(bottom*3)*(height/buttom)が整数になるようにしてください。\r
517          * @param par1World\r
518          * @param X 基準X座標\r
519          * @param Y 基準Y座標\r
520          * @param Z 基準Z座標\r
521          * @param Block 配置するBlock\r
522          * @param meta 配置するMetadata\r
523          * @param upperSide 上辺の長さ\r
524          * @param bottomSide 下辺の長さ\r
525          * @param height 高さ\r
526          * @return Object\r
527          */\r
528         public static Object trapezoidY_Z(World par1World,int X,int Y,int Z,int Block,int meta,int upperSide,int bottomSide,int height){\r
529                 Object dataBox = null;\r
530                 int Rate=0;\r
531                 int Math=0;\r
532                 int YRate = 0;\r
533                 for(int i=0;i<height;i++){\r
534                         YRate++;\r
535                         Math++;\r
536                         if(upperSide < bottomSide){\r
537                                 if(Math == bottomSide/(upperSide*3)*(height/upperSide)){\r
538                                         Rate++;\r
539                                         Math=0;\r
540                                 }\r
541                         }\r
542 \r
543                         if(bottomSide < upperSide){\r
544                                 if(Math == upperSide/(bottomSide*3)*(height/bottomSide)){\r
545                                         Rate--;\r
546                                         Math=0;\r
547                                 }\r
548                         }\r
549 \r
550                         dataBox=lineX(par1World, X, Y+YRate, Z, Block, meta, upperSide+Rate, 0);\r
551                 }\r
552                 return dataBox;\r
553         }\r
554 \r
555         /**\r
556          * Z方向に台形を作成します。\r
557          * 必ずbottom/(upper*3)*(height/upper)かupper/(bottom*3)*(height/buttom)が整数になるようにしてください。\r
558          * @param par1World\r
559          * @param X 基準X座標\r
560          * @param Y 基準Y座標\r
561          * @param Z 基準Z座標\r
562          * @param Block 配置するBlock\r
563          * @param meta 配置するMetadata\r
564          * @param upperSide 上辺の長さ\r
565          * @param bottomSide 下辺の長さ\r
566          * @param height 高さ\r
567          * @return Object\r
568          */\r
569         public static Object TrapezoidZ(World par1World,int X,int Y,int Z,int Block,int meta,int upperSide,int bottomSide,int height){\r
570                 Object dataBox = null;\r
571                 int Rate=0;\r
572                 int Math=0;\r
573                 int ZRate=0;\r
574                 for(int i=0;i<height;i++){\r
575                         Math++;\r
576                         ZRate++;\r
577                         if(upperSide < bottomSide){\r
578                                 if(Math == bottomSide/(upperSide*3)*(height/upperSide)){\r
579                                         Rate++;\r
580                                         Math=0;\r
581                                 }\r
582                         }\r
583 \r
584                         if(bottomSide < upperSide){\r
585                                 if(Math == upperSide/(bottomSide*3)*(height/bottomSide)){\r
586                                         Rate--;\r
587                                         Math=0;\r
588                                 }\r
589                         }\r
590 \r
591                         dataBox=lineX(par1World, X, Y, Z+ZRate, Block, meta, upperSide+Rate, 0);\r
592                 }\r
593                 return dataBox;\r
594         }\r
595 \r
596 }