4d_j_r_core.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. sign.started(gamesignloc);
  2. event.load("block_click");
  3. event.load("entity_damage");
  4. event.load("player_move");
  5. event.load("player_quit");
  6. event.load("player_giveup");
  7. event.load("minigame_join");
  8. event.load("block_break");
  9. games = world.getGames();
  10. gamename = "§a4D-Jump'n'Run";
  11. maxplayers = 1;
  12. air_material = material.get("AIR");
  13. x1 = loc.getX(Edge_1);
  14. x2 = loc.getX(Edge_2);
  15. x3 = loc.getX(Edge_3);
  16. x4 = x3 + x2 - x1;
  17. Spawn_X = loc.getX(Start_Pos)-0.5;
  18. y1 = loc.getY(Edge_1);
  19. y2 = loc.getY(Edge_2);
  20. y3 = loc.getY(Edge_3);
  21. y4 = y3 + y2 - y1;
  22. Spawn_Y = loc.getY(Start_Pos);
  23. z1 = loc.getZ(Edge_1);
  24. z2 = loc.getZ(Edge_2);
  25. z3 = loc.getZ(Edge_3);
  26. z4 = z3 + z2 - z1;
  27. Spawn_Z = loc.getZ(Start_Pos)-0.5;
  28. //XYZ -> WYZ -> XYW -> XYZ
  29. Dimension_Blocks = list.new();
  30. event.addMoveData(loc1, loc2, -1, -1);
  31. currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  32. current_layer = array.new(6);
  33. current_layer[0] = 0;//0 = W, 1 = X, 2 = Z
  34. current_layer[1] = 0;//current_layer[a] 0 = W, 1 = X, 2 = Z
  35. current_layer[2] = 0;
  36. current_layer[3] = 0;
  37. current_layer[4] = 0;
  38. current_layer[5] = 0;
  39. difference_array = array.new(6);
  40. difference_array[0] = Layer_amount;
  41. difference_array[1] = x2-x1;
  42. difference_array[2] = z2-z2;
  43. difference_array[3] = Layer_amount;
  44. difference_array[4] = x2-x1;
  45. difference_array[5] = z2-z2;
  46. @wait
  47. wait();
  48. if(event == "entity_damage") {
  49. if(!isPlayer(entity)) {
  50. goto("wait");
  51. }
  52. player = entity;
  53. }
  54. if(!player.hasMinigameId(player, script_id)) {
  55. goto("wait");
  56. }
  57. if(event == "minigame_join"){
  58. msg.prefix(player, $gamename, "Game is Loading, please be patient.");
  59. entity.teleport(player, Start_Pos);
  60. player.clearInventory(player);
  61. player_inv = player.getInv(player);
  62. waitfor(10);
  63. remove_blocks();
  64. $currently_active_dimensions = 0;
  65. $current_layer[$currently_active_dimensions] = 0;
  66. inv.setItem(player_inv, 0, item.custom.create("ARROW_LEFT",1,"Turn down","Interdimensionally"));
  67. inv.setItem(player_inv, 1, item.custom.create("ARROW_RIGHT",1,"Turn up","Interdimensionally"));
  68. inv.setItem(player_inv, 2, item.custom.create("ARROW_DOWN",1,"Move down","background axis"));
  69. inv.setItem(player_inv, 3, item.custom.create("ARROW_UP",1,"Move up","background axis"));
  70. c = 0;
  71. for(layer_var = 0; layer_var < Layer_amount; layer_var++){
  72. x_d = layer_var * Layer_difference_X;
  73. y_d = layer_var * Layer_difference_Y;
  74. z_d = layer_var * Layer_difference_Z;
  75. for(x = x1 - x_d; x <= x2 - x_d; x++){
  76. for(y = y1 - y_d; y <= y2 - y_d; y++){
  77. for(z = z1 - z_d; z <= z2 - z_d; z++){
  78. c++;
  79. if(c > 500){
  80. c = 0;
  81. waitfor(2);
  82. }
  83. temp_block = block.get(loc.new(games, x, y, z));
  84. if(!block.isAir(temp_block)){
  85. D_Array = array.new(4);
  86. D_Array[0] = x - x1 + x_d;//X
  87. D_Array[1] = y - y1 + y_d;//Y
  88. D_Array[2] = z - z1 + z_d;//Z
  89. D_Array[3] = layer_var;//W
  90. temp_array = array.new(2);
  91. temp_array[0] = D_Array;
  92. temp_array[1] = block.getType(temp_block);
  93. list.add(Dimension_Blocks, temp_array);//Dimensional_Blocks -> Koords4D,Block
  94. }
  95. }
  96. }
  97. }
  98. }
  99. place_blocks($current_layer, Dimension_Blocks);
  100. msg.prefix(player, $gamename, "Game has loaded.");
  101. //msg.dev(list.getSize(Dimension_Blocks));
  102. goto("wait");
  103. }
  104. if(event == "block_break"){
  105. cancel = true;
  106. goto("wait");
  107. }
  108. if(event == "entity_damage") {
  109. cancel = true;
  110. goto("wait");
  111. }
  112. if(event == "block_click"){
  113. if(slot.isoffhand(hand)){
  114. goto("wait");
  115. }
  116. if(action == "PHYSICAL"){
  117. goto("wait");
  118. }
  119. player_hand = living.getHand(player);
  120. if(!item.hasName(player_hand)){
  121. goto("wait");
  122. }
  123. item_name = string.text(item.getName(player_hand));
  124. if(item_name == "Turn down"){
  125. goto("dimensional_turn_down");
  126. }
  127. if(item_name == "Turn up"){
  128. goto("dimensional_turn_up");
  129. }
  130. if(item_name == "Move down"){
  131. goto("remove_layer");
  132. }
  133. if(item_name == "Move up"){
  134. goto("add_layer");
  135. }
  136. goto("wait");
  137. }
  138. if(event == "player_move"){
  139. //if(current_layer[1] == finish_layer){
  140. game_stop("You did it!");
  141. //}
  142. goto("wait");
  143. }
  144. if(event == "player_quit"){
  145. game_stop(null);
  146. }
  147. if(event == "player_giveup"){
  148. game_stop("You left :(");
  149. }
  150. goto("wait");
  151. @remove_layer
  152. temp_player_loc = entity.getLocation(player);
  153. if(current_layer[currently_active_dimensions] <= 0 || current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
  154. if(current_layer[currently_active_dimensions] == 0){
  155. current_layer[currently_active_dimensions] = -1;
  156. remove_blocks();
  157. }
  158. if(current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
  159. current_layer[currently_active_dimensions]--;
  160. }
  161. }else{
  162. remove_blocks();
  163. current_layer[currently_active_dimensions]--;
  164. place_blocks(current_layer, Dimension_Blocks);
  165. }
  166. if(currently_active_dimensions < 3){
  167. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  168. }else{
  169. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  170. }
  171. entity.teleport(player,loc.mod(temp_player_loc, 0, 0.1, 0));
  172. goto("wait");
  173. @add_layer
  174. temp_player_loc = entity.getLocation(player);
  175. if(current_layer[currently_active_dimensions] >= difference_array[currently_active_dimensions] - 1 || current_layer[currently_active_dimensions] < -1){
  176. if(current_layer[currently_active_dimensions] == difference_array[currently_active_dimensions] - 1){
  177. remove_blocks();
  178. }
  179. if(current_layer[currently_active_dimensions] < -1){
  180. current_layer[currently_active_dimensions]++;
  181. }
  182. }else{
  183. remove_blocks();
  184. current_layer[currently_active_dimensions]++;
  185. place_blocks(current_layer, Dimension_Blocks);
  186. }
  187. if(currently_active_dimensions < 3){
  188. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  189. }else{
  190. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  191. }
  192. entity.teleport(player,loc.mod(temp_player_loc, 0, 0.1, 0));
  193. goto("wait");
  194. @dimensional_turn_up
  195. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  196. temp_layer = current_layer[currently_active_dimensions];
  197. temp_player_loc = entity.getLocation(player);
  198. if(currently_active_dimensions == 0){//XYZ to WYZ
  199. currently_active_dimensions++;//0 = W, 1 = X, 2 = Z
  200. current_layer[currently_active_dimensions] = math.roundDown(loc.getX(temp_player_loc))-Spawn_X;
  201. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  202. }elseif(currently_active_dimensions == 1){//WYZ to WYX
  203. currently_active_dimensions++;
  204. current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
  205. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  206. }elseif(currently_active_dimensions == 2){//WYX to ZYX
  207. currently_active_dimensions++;
  208. current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
  209. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  210. }elseif(currently_active_dimensions == 3){//ZYX to ZYW
  211. currently_active_dimensions++;
  212. current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
  213. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  214. }elseif(currently_active_dimensions == 4){//ZYW to XYW
  215. currently_active_dimensions++;
  216. current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
  217. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  218. }elseif(currently_active_dimensions == 5){//XYW to XYZ
  219. currently_active_dimensions = 0;
  220. current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
  221. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  222. }
  223. if(currently_active_dimensions < 3){//um es nicht bei jedem if-else schreiben zu m?ssen, und die layer aktiv zu halten.
  224. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  225. }else{
  226. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  227. }
  228. place_blocks(current_layer, Dimension_Blocks);
  229. goto("wait");
  230. @dimensional_turn_down
  231. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  232. temp_layer = current_layer[currently_active_dimensions];
  233. temp_player_loc = entity.getLocation(player);
  234. if(currently_active_dimensions == 0){//XYZ to XYW
  235. currently_active_dimensions = 5;//0 = W, 1 = X, 2 = Z, 3 = W, 4 = X, 5 = Z
  236. current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
  237. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  238. }elseif(currently_active_dimensions == 1){//WYZ to XYZ
  239. currently_active_dimensions--;
  240. current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
  241. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  242. }elseif(currently_active_dimensions == 2){//WYX to WYZ
  243. currently_active_dimensions--;
  244. current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
  245. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  246. }elseif(currently_active_dimensions == 3){//ZYX to WYX
  247. currently_active_dimensions--;
  248. current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
  249. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  250. }elseif(currently_active_dimensions == 4){//ZYW to ZYX
  251. currently_active_dimensions--;
  252. current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
  253. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
  254. }elseif(currently_active_dimensions == 5){//XYW to ZYW
  255. currently_active_dimensions--;
  256. current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
  257. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
  258. }
  259. if(currently_active_dimensions < 3){
  260. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  261. }else{
  262. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  263. }
  264. place_blocks(current_layer, Dimension_Blocks);
  265. goto("wait");
  266. function remove_blocks(){
  267. c = 0;
  268. for(x = $x3; x < $x3 + $x2 - $x1 + 1; x++){
  269. for(y = $y3; y < $y3 + $y2 - $y1 + 1; y++){
  270. for(z = $z3; z < $z3 + $z2 - $z1 + 1; z++){
  271. c++;
  272. if(c > 750){
  273. c = 0;
  274. waitfor(2);
  275. }
  276. block.setmaterial(block.get(loc.new($games, x, y, z)), $air_material);
  277. }
  278. }
  279. }
  280. }
  281. function place_blocks(current_layer, Dimension_Blocks){
  282. c = 0;
  283. temp_a_d = $currently_active_dimensions;
  284. temp_c_l = current_layer[temp_a_d];
  285. for(a = 0; a < list.getSize(Dimension_Blocks); a++){
  286. c++;
  287. if(c > 750){
  288. c = 0;
  289. waitfor(2);
  290. }
  291. temp_array = list.getIndex(Dimension_Blocks, a);
  292. D_Array = temp_array[0];//temp_array[1] ist der Block-Type, bei remove egal. D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
  293. //0 = XYZ, 1 = WYZ, 2 = XYW
  294. //x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
  295. X_place = 0;
  296. Y_place = -1;
  297. Z_place = 0;
  298. if(temp_a_d == 0){//0 = XYZ
  299. if(D_Array[3] == temp_c_l){
  300. X_place = D_Array[0];
  301. Y_place = D_Array[1];
  302. Z_place = D_Array[2];
  303. }
  304. }elseif(temp_a_d == 1){//1 = WYZ
  305. if(D_Array[0] == temp_c_l){
  306. X_place = D_Array[3];
  307. Y_place = D_Array[1];
  308. Z_place = D_Array[2];
  309. }
  310. }elseif(temp_a_d == 2){//2 = WYX
  311. if(D_Array[2] == temp_c_l){
  312. X_place = D_Array[3];
  313. Y_place = D_Array[1];
  314. Z_place = D_Array[0];
  315. }
  316. }elseif(temp_a_d == 3){//3 = ZYX
  317. if(D_Array[3] == temp_c_l){
  318. X_place = D_Array[2];
  319. Y_place = D_Array[1];
  320. Z_place = D_Array[0];
  321. }
  322. }elseif(temp_a_d == 4){//4 = ZYW
  323. if(D_Array[0] == temp_c_l){
  324. X_place = D_Array[2];
  325. Y_place = D_Array[1];
  326. Z_place = D_Array[3];
  327. }
  328. }elseif(temp_a_d == 5){//5 = XYW
  329. if(D_Array[2] == temp_c_l){
  330. X_place = D_Array[0];
  331. Y_place = D_Array[1];
  332. Z_place = D_Array[3];
  333. }
  334. }
  335. if(Y_place > -1){
  336. X_place = X_place + $x3;
  337. Y_place = Y_place + $y3;
  338. Z_place = Z_place + $z3;
  339. if(X_place < $x4+1 && Y_place < $y4+1 && Z_place < $z4+1){
  340. block.setmaterial(block.get(loc.new($games,X_place,Y_place,Z_place)), temp_array[1]);
  341. }
  342. }
  343. }
  344. }
  345. function game_stop(message){
  346. if(message != null){
  347. msg.prefix($player, $gamename, message);
  348. }
  349. script = script.getFromId($script_id);
  350. minigame.kickPlayer(script, $player);
  351. minigame.term(script, $gamesignloc);
  352. term();
  353. }