1
+ //PandongEditor WorldEditPlus.
2
+ //ⓒ 2015-2016 Pandong & Irenebode All rights reserved.
3
+
4
+ const sdcard = android . os . Environment . getExternalStorageDirectory ( ) . getAbsolutePath ( ) ;
5
+
6
+ var cm = clientMessage ;
7
+
8
+ var Pos = {
9
+ start : [ 0 , 0 , 0 ] ,
10
+ end : [ 0 , 0 , 0 ]
11
+ } ;
12
+
13
+ var board = {
14
+ rotate : [ ] ,
15
+ flip : [ ]
16
+ } ;
17
+
18
+ var worldEditMemory = {
19
+ pos1 : [ null , null , null ] ,
20
+ pos2 : [ null , null , null ] ,
21
+ blockSave : new Array ( ) ,
22
+ lastWorkSavings : {
23
+ changedBlocks : new Array ( )
24
+ } ,
25
+ lastUndoSavings : {
26
+ changedBlocks : new Array ( )
27
+ } ,
28
+ copy : {
29
+ copiedBlocks : new Array ( )
30
+ }
31
+ }
32
+
33
+ function procCmd ( cmd ) {
34
+ var file = new java . io . File ( sdcard + "/WorldEditPlus.txt" ) ;
35
+ if ( file . exists ( ) ) {
36
+ var str = cmd . toLowerCase ( ) . split ( " " ) ;
37
+ switch ( str [ 0 ] ) {
38
+ case "/rotate" :
39
+ case "/회전" :
40
+ if ( Pos . start == null || Pos . end == null ) {
41
+ cm ( "좌표를 설정 해주세요" ) ;
42
+ break ;
43
+ }
44
+ plus . rotate ( parseInt ( str [ 1 ] ) , [ Player . getX ( ) , Player . getY ( ) , Player . getZ ( ) ] , str [ 2 ] ) ;
45
+ break ;
46
+
47
+ case "/flip" :
48
+ case "/반전" :
49
+ if ( Pos . start == null || Pos . end == null ) {
50
+ cm ( "좌표를 설정 해주세요" ) ;
51
+ break ;
52
+ }
53
+ plus . flip ( str [ 1 ] ) ;
54
+ break ;
55
+ }
56
+ file . delete ( ) ;
57
+ }
58
+ }
59
+
60
+ function useItem ( x , y , z , i , b , s , id , bd ) {
61
+ var file = new java . io . File ( sdcard + "/WorldEditPlus.txt" ) ;
62
+ if ( file . exists ( ) ) {
63
+ if ( i == 271 ) {
64
+ setTile ( x , y , z , Level . getTile ( x , y , z ) , Level . getData ( x , y , z ) ) ;
65
+ Pos . start = [ x , y , z ] ;
66
+ //cm("첫번째 지점이 (" + worldEditMemory.pos2 + ") 으로 설정 되었습니다");
67
+ }
68
+ }
69
+ file . delete ( ) ;
70
+ }
71
+
72
+ /*
73
+ function startDestroyBlock(x, y, z) {
74
+ var file = new java.io.File(sdcard+"/WorldEditPlus.txt");
75
+ if(file.exists()) {
76
+ if(Player.getCarriedItem( ) == 271) {
77
+ setTile(x, y, z, Level.getTile(x, y, z), Level.getData(x, y, z));
78
+ worldEditMemory.blockSave.push({bx : x, by : y, bz : z, id : Level.getTile(x, y, z), data : Level.getData(x, y, z), delay : 0});
79
+ Pos.end = [x, y, z];
80
+ }
81
+ }
82
+ file.delete();
83
+ }
84
+ */
85
+
86
+ function destroyBlock ( x , y , z ) {
87
+ var file = new java . io . File ( sdcard + "/WorldEditPlus.txt" ) ;
88
+ if ( file . exists ( ) ) {
89
+ if ( Player . getCarriedItem ( ) == 271 ) {
90
+ setTile ( x , y , z , Level . getTile ( x , y , z ) , Level . getData ( x , y , z ) ) ;
91
+ worldEditMemory . blockSave . push ( { bx : x , by : y , bz : z , id : Level . getTile ( x , y , z ) , data : Level . getData ( x , y , z ) , delay : 0 } ) ;
92
+ Pos . end = [ x , y , z ] ;
93
+ //cm("두번째 지점이 (" + worldEditMemory.pos2 + ") 으로 설정 되었습니다");
94
+ }
95
+ }
96
+ file . delete ( ) ;
97
+ }
98
+
99
+ var plus = {
100
+ rotate : function ( degree , pos ) {
101
+ var sx = ( Pos . start [ 0 ] < Pos . end [ 0 ] ? Pos . start [ 0 ] : Pos . end [ 0 ] ) ;
102
+ var sy = ( Pos . start [ 1 ] < Pos . end [ 1 ] ? Pos . start [ 1 ] : Pos . end [ 1 ] ) ;
103
+ var sz = ( Pos . start [ 2 ] < Pos . end [ 2 ] ? Pos . start [ 2 ] : Pos . end [ 2 ] ) ;
104
+
105
+ var ex = ( Pos . start [ 0 ] > Pos . end [ 0 ] ? Pos . start [ 0 ] : Pos . end [ 0 ] ) ;
106
+ var ey = ( Pos . start [ 1 ] > Pos . end [ 1 ] ? Pos . start [ 1 ] : Pos . end [ 1 ] ) ;
107
+ var ez = ( Pos . start [ 2 ] > Pos . end [ 2 ] ? Pos . start [ 2 ] : Pos . end [ 2 ] ) ;
108
+
109
+ var count = 0 ;
110
+ board . rotate = [ ] ;
111
+
112
+ for ( var x = 0 ; x < ex - sx + 1 ; x ++ ) {
113
+ board . rotate [ x ] = [ ] ;
114
+ for ( var y = 0 ; y < ey - sy + 1 ; y ++ ) {
115
+ board . rotate [ x ] [ y ] = [ ] ;
116
+ for ( var z = 0 ; z < ez - sz + 1 ; z ++ ) {
117
+ board . rotate [ x ] [ y ] [ z ] = {
118
+ id : getTile ( sx + x , sy + y , sz + z ) ,
119
+ data : getData ( sx + x , sy + y , sz + z )
120
+ } ;
121
+ count ++ ;
122
+ }
123
+ }
124
+ }
125
+
126
+ if ( degree % 90 != 0 || degree > 360 || degree < 0 || degree == NaN ) {
127
+ cm ( "각도를 읽을 수 없습니다." ) ;
128
+ return ;
129
+ }
130
+
131
+ switch ( degree ) {
132
+ case 0 :
133
+ case 360 :
134
+ break ;
135
+
136
+ case 90 :
137
+ pos = [ Player . getX ( ) , Player . getY ( ) , Player . getZ ( ) ] ;
138
+ for ( var xx = 0 ; xx < board . rotate . length ; xx ++ ) for ( var yy = 0 ; yy < board . rotate [ 0 ] . length ; yy ++ ) for ( var zz = 0 ; zz < board . rotate [ 0 ] [ 0 ] . length ; zz ++ ) {
139
+ setTile ( pos [ 0 ] - zz + board . rotate [ 0 ] [ 0 ] . length - 1 , pos [ 1 ] + yy , pos [ 2 ] + xx , board . rotate [ xx ] [ yy ] [ zz ] . id , board . rotate [ xx ] [ yy ] [ zz ] . data ) ;
140
+ }
141
+ break ;
142
+
143
+ case 180 :
144
+ pos = [ Player . getX ( ) , Player . getY ( ) , Player . getZ ( ) ] ;
145
+ for ( var xx = 0 ; xx < board . rotate . length ; xx ++ ) for ( var yy = 0 ; yy < board . rotate [ 0 ] . length ; yy ++ ) for ( var zz = 0 ; zz < board . rotate [ 0 ] [ 0 ] . length ; zz ++ ) {
146
+ setTile ( pos [ 0 ] - xx + board . rotate [ 0 ] [ 0 ] . length - 1 , pos [ 1 ] + yy , pos [ 2 ] - zz , board . rotate [ xx ] [ yy ] [ zz ] . id , board . rotate [ xx ] [ yy ] [ zz ] . data ) ;
147
+ }
148
+ break ;
149
+
150
+ case 270 :
151
+ pos = [ Player . getX ( ) , Player . getY ( ) , Player . getZ ( ) ] ;
152
+ for ( var xx = 0 ; xx < board . rotate . length ; xx ++ ) for ( var yy = 0 ; yy < board . rotate [ 0 ] . length ; yy ++ ) for ( var zz = 0 ; zz < board . rotate [ 0 ] [ 0 ] . length ; zz ++ ) {
153
+ setTile ( pos [ 0 ] + zz + board . rotate [ 0 ] [ 0 ] . length - 1 , pos [ 1 ] + yy , pos [ 2 ] + - xx , board . rotate [ xx ] [ yy ] [ zz ] . id , board . rotate [ xx ] [ yy ] [ zz ] . data ) ;
154
+ }
155
+ break ;
156
+ }
157
+ cm ( count + "개의 블럭을 " + degree + "도만큼 회전하였습니다." ) ;
158
+ } ,
159
+
160
+ flip : function ( ) {
161
+ var sx = ( Pos . start [ 0 ] < Pos . end [ 0 ] ? Pos . start [ 0 ] : Pos . end [ 0 ] ) ;
162
+ var sy = ( Pos . start [ 1 ] < Pos . end [ 1 ] ? Pos . start [ 1 ] : Pos . end [ 1 ] ) ;
163
+ var sz = ( Pos . start [ 2 ] < Pos . end [ 2 ] ? Pos . start [ 2 ] : Pos . end [ 2 ] ) ;
164
+
165
+ var ex = ( Pos . start [ 0 ] > Pos . end [ 0 ] ? Pos . start [ 0 ] : Pos . end [ 0 ] ) ;
166
+ var ey = ( Pos . start [ 1 ] > Pos . end [ 1 ] ? Pos . start [ 1 ] : Pos . end [ 1 ] ) ;
167
+ var ez = ( Pos . start [ 2 ] > Pos . end [ 2 ] ? Pos . start [ 2 ] : Pos . end [ 2 ] ) ;
168
+
169
+ var count = 0 ;
170
+ board . flip = [ ] ;
171
+
172
+ for ( var x = 0 ; x < ex - sx + 1 ; x ++ ) {
173
+ board . flip [ x ] = [ ] ;
174
+ for ( var y = 0 ; y < ey - sy + 1 ; y ++ ) {
175
+ board . flip [ x ] [ y ] = [ ] ;
176
+ for ( var z = 0 ; z < ez - sz + 1 ; z ++ ) {
177
+ board . flip [ x ] [ y ] [ z ] = {
178
+ id : getTile ( sx + x , sy + y , sz + z ) ,
179
+ data : getData ( sx + x , sy + y , sz + z )
180
+ } ;
181
+ }
182
+ }
183
+ }
184
+
185
+ for ( var xx = 0 ; xx < board . flip . length ; xx ++ ) for ( var yy = 0 ; yy < board . flip [ 0 ] . length ; yy ++ ) for ( var zz = 0 ; zz < board . flip [ 0 ] [ 0 ] . length ; zz ++ ) {
186
+ setTile ( sx + xx , board . flip [ 0 ] . length - 1 - yy + sy , sz + zz , board . flip [ xx ] [ yy ] [ zz ] . id , board . flip [ xx ] [ yy ] [ zz ] . data ) ;
187
+ count ++ ;
188
+ }
189
+ cm ( count + "개의 블럭을 반전시켰습니다." ) ;
190
+ }
191
+ }
192
+
193
+ function getData ( x , y , z ) {
194
+ var file = new java . io . File ( sdcard + "/WorldEditPlus.txt" ) ;
195
+ if ( file . exists ( ) ) {
196
+ if ( x != undefined && y != undefined && z != undefined ) {
197
+ return net . zhuoweizhang . mcpelauncher . ScriptManager . nativeGetData ( x , y , z ) ;
198
+ }
199
+ file . delete ( ) ;
200
+ }
201
+ }
202
+
203
+ //ⓒ 2015-2016 Pandong & Irenebode All rights reserved.
0 commit comments