4d_j_r_core_2.txt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  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. if(currently_active_dimensions < 3){
  141. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  142. }else{
  143. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  144. }
  145. goto("wait");
  146. @add_layer
  147. if(current_layer[currently_active_dimensions] >= difference_array[currently_active_dimensions] - 1 || current_layer[currently_active_dimensions] < -1){
  148. if(current_layer[currently_active_dimensions] == difference_array[currently_active_dimensions] - 1){
  149. remove_blocks();
  150. }
  151. if(current_layer[currently_active_dimensions] < -1){
  152. current_layer[currently_active_dimensions]++;
  153. }
  154. }else{
  155. remove_blocks();
  156. current_layer[currently_active_dimensions]++;
  157. place_blocks(current_layer);
  158. }
  159. if(currently_active_dimensions < 3){
  160. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  161. }else{
  162. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  163. }
  164. goto("wait");
  165. @dimensional_turn_up
  166. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  167. temp_layer = current_layer[currently_active_dimensions];
  168. temp_player_loc = entity.getLocation(player);
  169. if(currently_active_dimensions == 0){//XYZ to WYZ
  170. currently_active_dimensions++;
  171. current_layer[1] = math.roundDown(loc.getX(temp_player_loc)+0.5)-x3;
  172. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  173. }else{
  174. if(currently_active_dimensions == 1){//WYZ to WYX
  175. currently_active_dimensions++;
  176. current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player))+0.5)-z3;
  177. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  178. }else{
  179. if(currently_active_dimensions == 2){//WYX to ZYX
  180. currently_active_dimensions++;
  181. current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player))+0.5)-x3;
  182. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  183. }else{
  184. if(currently_active_dimensions == 3){//ZYX to ZYW
  185. currently_active_dimensions++;
  186. current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player))+0.5)-z3;
  187. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  188. }else{
  189. if(currently_active_dimensions == 4){//ZYW to XYW
  190. currently_active_dimensions++;
  191. current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player))+0.5)-x3;
  192. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  193. }else{
  194. if(currently_active_dimensions == 5){//XYW to XYZ
  195. currently_active_dimensions = 0;
  196. current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player))+0.5)-z3;
  197. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  198. }}}}}}
  199. if(currently_active_dimensions < 3){
  200. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  201. }else{
  202. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  203. }
  204. place_blocks(current_layer);
  205. goto("wait");
  206. @dimensional_turn_down
  207. remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
  208. temp_layer = current_layer[currently_active_dimensions];
  209. temp_player_loc = entity.getLocation(player);
  210. if(currently_active_dimensions == 0){//XYZ to XYW
  211. currently_active_dimensions = 5;
  212. current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player))+0.5)-z3;
  213. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  214. }else{
  215. if(currently_active_dimensions == 1){//XYW to ZYW
  216. currently_active_dimensions--;
  217. current_layer[1] = math.roundDown(loc.getX(entity.getLocation(player))+0.5)-x3;
  218. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  219. }else{
  220. if(currently_active_dimensions == 2){//ZYW to ZYX
  221. currently_active_dimensions--;
  222. current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player))+0.5)-z3;
  223. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  224. }else{
  225. if(currently_active_dimensions == 3){//ZYX to WYX
  226. currently_active_dimensions--;
  227. current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player))+0.5)-x3;
  228. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  229. }else{
  230. if(currently_active_dimensions == 4){//WYX to WYZ
  231. currently_active_dimensions--;
  232. current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player))+0.5)-z3;
  233. entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
  234. }else{
  235. if(currently_active_dimensions == 5){//WYZ to XYZ
  236. currently_active_dimensions--;
  237. current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player))+0.5)-x3;
  238. entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
  239. }}}}}}
  240. if(currently_active_dimensions < 3){
  241. current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
  242. }else{
  243. current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
  244. }
  245. place_blocks(current_layer);
  246. goto("wait");
  247. function remove_blocks(){
  248. for(x = $x3; x < $x3 + $x2 - $x1 + 1; x++){
  249. for(y = $y3; y < $y3 + $y2 - $y1 + 1; y++){
  250. for(z = $z3; z < $z3 + $z2 - $z1 + 1; z++){
  251. temp_loc = loc.new($games, x, y, z);
  252. block.set(temp_loc, "minecraft:air");
  253. }
  254. }
  255. }
  256. }
  257. function place_blocks(current_layer){
  258. for(a = 0; a < list.getSize($Dimension_Blocks); a++){
  259. temp_array = list.getIndex($Dimension_Blocks, a);
  260. 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
  261. //0 = XYZ, 1 = WYZ, 2 = XYW
  262. //x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
  263. X_place = 0;
  264. Y_place = -1;
  265. Z_place = 0;
  266. if($currently_active_dimensions == 0){//0 = XYZ
  267. if(D_Array[3] == current_layer[$currently_active_dimensions]){
  268. X_place = D_Array[0];
  269. Y_place = D_Array[1];
  270. Z_place = D_Array[2];
  271. }
  272. }else{
  273. if($currently_active_dimensions == 1){//1 = WYZ
  274. if(D_Array[0] == current_layer[$currently_active_dimensions]){
  275. X_place = D_Array[3];
  276. Y_place = D_Array[1];
  277. Z_place = D_Array[2];
  278. }
  279. }else{
  280. if($currently_active_dimensions == 2){//2 = WYX
  281. if(D_Array[2] == current_layer[$currently_active_dimensions]){
  282. X_place = D_Array[3];
  283. Y_place = D_Array[1];
  284. Z_place = D_Array[0];
  285. }
  286. }else{
  287. if($currently_active_dimensions == 3){//3 = ZYX
  288. if(D_Array[3] == current_layer[$currently_active_dimensions]){
  289. X_place = D_Array[2];
  290. Y_place = D_Array[1];
  291. Z_place = D_Array[0];
  292. }
  293. }else{
  294. if($currently_active_dimensions == 4){//4 = ZYW
  295. if(D_Array[0] == current_layer[$currently_active_dimensions]){
  296. X_place = D_Array[2];
  297. Y_place = D_Array[1];
  298. Z_place = D_Array[3];
  299. }
  300. }else{
  301. if($currently_active_dimensions == 5){//5 = XYW
  302. if(D_Array[2] == current_layer[$currently_active_dimensions]){
  303. X_place = D_Array[0];
  304. Y_place = D_Array[1];
  305. Z_place = D_Array[3];
  306. }
  307. }}}}}}
  308. if(Y_place > -1){
  309. X_place = X_place + $x3;
  310. Y_place = Y_place + $y3;
  311. Z_place = Z_place + $z3;
  312. temp_loc = loc.new($games,X_place,Y_place,Z_place);
  313. block.set(temp_loc, temp_array[1]);
  314. }
  315. }
  316. }
  317. function game_stop(message){
  318. remove_blocks();
  319. $currently_active_dimensions = 0;
  320. $current_layer[$currently_active_dimensions] = 0;
  321. place_blocks($current_layer);
  322. if(message != null){
  323. msg.prefix($player, $gamename, message);
  324. }
  325. script = script.getFromId($script_id);
  326. minigame.kickPlayer(script, $player);
  327. minigame.term(script, $gamesignloc);
  328. term();
  329. }