4d_j_r_core.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. sign.started(gamesignloc);
  2. event.load("function_key");
  3. event.load("living_pre_hurt");
  4. event.load("player_move");
  5. event.load("player_logout");
  6. event.load("player_giveup");
  7. event.load("player_join");
  8. event.load("block_break");
  9. games = world.getGames();
  10. gamename = "§a4D-Jump'n'Run";
  11. maxplayers = 1;
  12. x1 = loc.getX(Edge_1);
  13. x2 = loc.getX(Edge_2);
  14. x3 = loc.getX(Edge_3);
  15. y1 = loc.getY(Edge_1);
  16. y2 = loc.getY(Edge_2);
  17. y3 = loc.getY(Edge_3);
  18. z1 = loc.getZ(Edge_1);
  19. z2 = loc.getZ(Edge_2);
  20. z3 = loc.getZ(Edge_3);
  21. //XYZ -> WYZ -> XYW -> XYZ
  22. Dimension_Blocks = list.new();
  23. event.addMoveData(loc1, loc2, -1, -1);
  24. current_w = 0;
  25. current_x = 0;
  26. current_z = 0;
  27. currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  28. current_layer = array.new(6);
  29. current_layer[0] = current_w;//0 = W, 1 = X, 2 = Z
  30. current_layer[1] = current_x;//current_layer[a] 0 = W, 1 = X, 2 = Z
  31. current_layer[2] = current_z;
  32. current_layer[3] = current_w;
  33. current_layer[4] = current_x;
  34. current_layer[5] = current_z;
  35. x_difference = x2-x1;
  36. z_difference = z2-z2;
  37. w_difference = Layer_amount;
  38. difference_array = array.new(6);
  39. difference_array[0] = w_difference;
  40. difference_array[1] = x_difference;
  41. difference_array[2] = z_difference;
  42. difference_array[3] = w_difference;
  43. difference_array[4] = x_difference;
  44. difference_array[5] = z_difference;
  45. @wait
  46. wait();
  47. if(event == "living_pre_hurt") {
  48. if(!isPlayer(living_entity)) {
  49. goto("wait");
  50. }
  51. player = living_entity;
  52. }
  53. if(!player.hasMinigameId(player, script_id)) {
  54. goto("wait");
  55. }
  56. if(event == "player_join"){
  57. entity.teleport(player, Start_Pos);
  58. player.clearInventory(player);
  59. stacks.set(player, 5, "km:arrow_left");
  60. stacks.set(player, 6, "km:arrow_right");
  61. stacks.set(player, 7, "km:arrow_down");
  62. stacks.set(player, 8, "km:arrow_up");
  63. stacks.setActive(player, true);
  64. for(layer_var = 0; layer_var < Layer_amount; layer_var++){
  65. temp_list = list.new();
  66. x_d = layer_var * Layer_difference_X;
  67. y_d = layer_var * Layer_difference_Y;
  68. z_d = layer_var * Layer_difference_Z;
  69. for(x = x1 - x_d; x <= x2 - x_d; x++){
  70. for(y = y1 - y_d; y <= y2 - y_d; y++){
  71. for(z = z1 - z_d; z <= z2 - z_d; z++){
  72. temp_loc = loc.new(games, x, y, z);
  73. if(!block.isAir(temp_loc)){
  74. D_Array = array.new(4);
  75. D_Array[0] = x - x1 + x_d;//X
  76. D_Array[1] = y - y1 + y_d;//Y
  77. D_Array[2] = z - z1 + z_d;//Z
  78. D_Array[3] = layer_var;//W
  79. temp_array = array.new(2);
  80. temp_array[0] = D_Array;
  81. temp_array[1] = block.getType(temp_loc);
  82. list.add(Dimension_Blocks, temp_array);//Dimensional_Blocks -> Koords4D,Block
  83. }
  84. }
  85. }
  86. }
  87. }
  88. goto("wait");
  89. }
  90. if(event == "block_break"){
  91. cancel = true;
  92. goto("wait");
  93. }
  94. if(event == "living_pre_hurt") {
  95. cancel = true;
  96. goto("wait");
  97. }
  98. if(event == "function_key"){
  99. if(key == 6){
  100. goto("dimensional_turn_down");
  101. }
  102. if(key == 7){
  103. goto("dimensional_turn_up");
  104. }
  105. if(key == 8){
  106. goto("remove_layer");
  107. }
  108. if(key == 9){
  109. goto("add_layer");
  110. }
  111. goto("wait");
  112. }
  113. if(event == "player_move"){
  114. //if(current_layer[1] == finish_layer){
  115. game_stop("You did it!");
  116. //}
  117. goto("wait");
  118. }
  119. if(event == "player_logout"){
  120. game_stop(null);
  121. }
  122. if(event == "player_giveup"){
  123. game_stop("You left :(");
  124. }
  125. goto("wait");
  126. @remove_layer
  127. if(current_layer[currently_active_dimensions] <= 0 || current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
  128. if(current_layer[currently_active_dimensions] == 0){
  129. current_layer[currently_active_dimensions] = -1;
  130. remove_blocks();
  131. }
  132. if(current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
  133. current_layer[currently_active_dimensions]--;
  134. }
  135. }else{
  136. remove_blocks();
  137. current_layer[currently_active_dimensions]--;
  138. place_blocks(current_layer);
  139. }
  140. goto("wait");
  141. @add_layer
  142. if(current_layer[currently_active_dimensions] >= difference_array[currently_active_dimensions] - 1 || current_layer[currently_active_dimensions] < -1){
  143. if(current_layer[currently_active_dimensions] == difference_array[currently_active_dimensions] - 1){
  144. remove_blocks();
  145. }
  146. if(current_layer[currently_active_dimensions] < -1){
  147. current_layer[currently_active_dimensions]++;
  148. }
  149. }else{
  150. remove_blocks();
  151. current_layer[currently_active_dimensions]++;
  152. place_blocks(current_layer);
  153. }
  154. goto("wait");
  155. @dimensional_turn_up
  156. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  157. temp_layer = current_layer[currently_active_dimensions];
  158. temp_player_loc = entity.getLocation(player);
  159. if(currently_active_dimensions == 0){//XYZ to WYZ
  160. currently_active_dimensions++;
  161. current_layer[1] = math.roundDown(loc.getX(temp_player_loc))-x3;
  162. current_layer[4] = current_layer[1];
  163. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  164. }else{
  165. if(currently_active_dimensions == 1){//WYZ to WYX
  166. currently_active_dimensions++;
  167. current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
  168. current_layer[5] = current_layer[2];
  169. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  170. }else{
  171. if(currently_active_dimensions == 2){//WYX to ZYX
  172. currently_active_dimensions++;
  173. current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
  174. current_layer[3] = current_layer[0];
  175. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  176. }else{
  177. if(currently_active_dimensions == 3){//ZYX to ZYW
  178. currently_active_dimensions++;
  179. current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
  180. current_layer[4] = current_layer[1];
  181. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  182. }else{
  183. if(currently_active_dimensions == 4){//ZYW to XYW
  184. currently_active_dimensions++;
  185. current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
  186. current_layer[5] = current_layer[2];
  187. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  188. }else{
  189. if(currently_active_dimensions == 5){//XYW to XYZ
  190. currently_active_dimensions = 0;
  191. current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
  192. current_layer[3] = current_layer[0];
  193. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  194. }}}}}}
  195. place_blocks(current_layer);
  196. goto("wait");
  197. @dimensional_turn_down
  198. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  199. temp_layer = current_layer[currently_active_dimensions];
  200. temp_player_loc = entity.getLocation(player);
  201. if(currently_active_dimensions == 0){//XYZ to XYW
  202. currently_active_dimensions = 5;
  203. current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
  204. current_layer[5] = current_layer[2];
  205. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  206. }else{
  207. if(currently_active_dimensions == 1){//XYW to ZYW
  208. currently_active_dimensions--;
  209. current_layer[1] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
  210. current_layer[4] = current_layer[1];
  211. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  212. }else{
  213. if(currently_active_dimensions == 2){//ZYW to ZYX
  214. currently_active_dimensions--;
  215. current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
  216. current_layer[3] = current_layer[0];
  217. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  218. }else{
  219. if(currently_active_dimensions == 3){//ZYX to WYX
  220. currently_active_dimensions--;
  221. current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
  222. current_layer[5] = current_layer[2];
  223. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  224. }else{
  225. if(currently_active_dimensions == 4){//WYX to WYZ
  226. currently_active_dimensions--;
  227. current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
  228. current_layer[4] = current_layer[1];
  229. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  230. }else{
  231. if(currently_active_dimensions == 5){//WYZ to XYZ
  232. currently_active_dimensions--;
  233. current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
  234. current_layer[3] = current_layer[0];
  235. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  236. }}}}}}
  237. place_blocks(current_layer);
  238. goto("wait");
  239. function remove_blocks(){
  240. for(x = $x3; x < $x3 + $x2 - $x1 + 1; x++){
  241. for(y = $y3; y < $y3 + $y2 - $y1 + 1; y++){
  242. for(z = $z3; z < $z3 + $z2 - $z1 + 1; z++){
  243. temp_loc = loc.new($games, x, y, z);
  244. block.set(temp_loc, "minecraft:air");
  245. }
  246. }
  247. }
  248. /*for(a = 0; a < list.getSize($Dimension_Blocks); a++){
  249. temp_array = list.getIndex($Dimension_Blocks, a);//Dimensional_Blocks -> Array[Koords4D,Block]
  250. D_Array = temp_array[0];//temp_array[1] ist der Block, bei remove egal.
  251. //D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
  252. //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  253. //x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
  254. X_place = 0;
  255. Y_place = -1;
  256. Z_place = 0;
  257. if($currently_active_dimensions == 0){//0 = XYZ
  258. if(D_Array[3] == current_layer[$currently_active_dimensions]){
  259. X_place = D_Array[0];
  260. Y_place = D_Array[1];
  261. Z_place = D_Array[2];
  262. }
  263. }else{
  264. if($currently_active_dimensions == 1){//1 = WYZ
  265. if(D_Array[0] == current_layer[$currently_active_dimensions]){
  266. X_place = D_Array[3];
  267. Y_place = D_Array[1];
  268. Z_place = D_Array[2];
  269. }
  270. }else{
  271. if($currently_active_dimensions == 2){//2 = WYX
  272. if(D_Array[2] == current_layer[$currently_active_dimensions]){
  273. X_place = D_Array[3];
  274. Y_place = D_Array[1];
  275. Z_place = D_Array[0];
  276. }
  277. }else{
  278. if($currently_active_dimensions == 3){//3 = ZYX
  279. if(D_Array[3] == current_layer[$currently_active_dimensions]){
  280. X_place = D_Array[2];
  281. Y_place = D_Array[1];
  282. Z_place = D_Array[0];
  283. }
  284. }else{
  285. if($currently_active_dimensions == 4){//4 = ZYW
  286. if(D_Array[0] == current_layer[$currently_active_dimensions]){
  287. X_place = D_Array[2];
  288. Y_place = D_Array[1];
  289. Z_place = D_Array[3];
  290. }
  291. }else{
  292. if($currently_active_dimensions == 5){//5 = XYW
  293. if(D_Array[2] == current_layer[$currently_active_dimensions]){
  294. X_place = D_Array[0];
  295. Y_place = D_Array[1];
  296. Z_place = D_Array[3];
  297. }
  298. }}}}}}
  299. if(Y_place > -1){
  300. X_place = X_place + $x3;
  301. Y_place = Y_place + $y3;
  302. Z_place = Z_place + $z3;
  303. temp_loc = loc.new($games, X_place, Y_place, Z_place);
  304. block.set(temp_loc, "minecraft:air");
  305. }
  306. }*/
  307. }
  308. function place_blocks(current_layer){
  309. for(a = 0; a < list.getSize($Dimension_Blocks); a++){
  310. temp_array = list.getIndex($Dimension_Blocks, a);
  311. D_Array = temp_array[0];//temp_array[1] ist der Block, bei remove egal. D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
  312. //0 = XYZ, 1 = WYZ, 2 = XYW
  313. //x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
  314. X_place = 0;
  315. Y_place = -1;
  316. Z_place = 0;
  317. if($currently_active_dimensions == 0){//0 = XYZ
  318. if(D_Array[3] == current_layer[$currently_active_dimensions]){
  319. X_place = D_Array[0];
  320. Y_place = D_Array[1];
  321. Z_place = D_Array[2];
  322. }
  323. }else{
  324. if($currently_active_dimensions == 1){//1 = WYZ
  325. if(D_Array[0] == current_layer[$currently_active_dimensions]){
  326. X_place = D_Array[3];
  327. Y_place = D_Array[1];
  328. Z_place = D_Array[2];
  329. }
  330. }else{
  331. if($currently_active_dimensions == 2){//2 = WYX
  332. if(D_Array[2] == current_layer[$currently_active_dimensions]){
  333. X_place = D_Array[3];
  334. Y_place = D_Array[1];
  335. Z_place = D_Array[0];
  336. }
  337. }else{
  338. if($currently_active_dimensions == 3){//3 = ZYX
  339. if(D_Array[3] == current_layer[$currently_active_dimensions]){
  340. X_place = D_Array[2];
  341. Y_place = D_Array[1];
  342. Z_place = D_Array[0];
  343. }
  344. }else{
  345. if($currently_active_dimensions == 4){//4 = ZYW
  346. if(D_Array[0] == current_layer[$currently_active_dimensions]){
  347. X_place = D_Array[2];
  348. Y_place = D_Array[1];
  349. Z_place = D_Array[3];
  350. }
  351. }else{
  352. if($currently_active_dimensions == 5){//5 = XYW
  353. if(D_Array[2] == current_layer[$currently_active_dimensions]){
  354. X_place = D_Array[0];
  355. Y_place = D_Array[1];
  356. Z_place = D_Array[3];
  357. }
  358. }}}}}}
  359. if(Y_place > -1){
  360. X_place = X_place + $x3;
  361. Y_place = Y_place + $y3;
  362. Z_place = Z_place + $z3;
  363. temp_loc = loc.new($games,X_place,Y_place,Z_place);
  364. block.set(temp_loc, temp_array[1]);
  365. }
  366. }
  367. }
  368. function game_stop(message){
  369. remove_blocks();
  370. $currently_active_dimensions = 0;
  371. $current_layer[$currently_active_dimensions] = 0;
  372. place_blocks($current_layer);
  373. if(message != null){
  374. msg.prefix($player, $gamename, message);
  375. }
  376. script = script.getFromId($script_id);
  377. minigame.kickPlayer(script, $player);
  378. minigame.term(script, $gamesignloc);
  379. term();
  380. }