OSDN Git Service

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