OSDN Git Service

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