OSDN Git Service

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