4d_j_r_core.txt 13 KB

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