123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- sign.started(gamesignloc);
- event.load("function_key");
- event.load("living_pre_hurt");
- event.load("player_move");
- event.load("player_logout");
- event.load("player_giveup");
- event.load("player_join");
- event.load("block_break");
- games = world.getGames();
- gamename = "§a4D-Jump'n'Run";
- maxplayers = 1;
- x1 = loc.getX(Edge_1);
- x2 = loc.getX(Edge_2);
- x3 = loc.getX(Edge_3);
- x4 = x3 + x2 - x1;
- Spawn_X = loc.getX(Start_Pos)-0.5;
- y1 = loc.getY(Edge_1);
- y2 = loc.getY(Edge_2);
- y3 = loc.getY(Edge_3);
- y4 = y3 + y2 - y1;
- Spawn_Y = loc.getY(Start_Pos);
- z1 = loc.getZ(Edge_1);
- z2 = loc.getZ(Edge_2);
- z3 = loc.getZ(Edge_3);
- z4 = z3 + z2 - z1;
- Spawn_Z = loc.getZ(Start_Pos)-0.5;
- //XYZ -> WYZ -> XYW -> XYZ
- Dimension_Blocks = list.new();
- event.addMoveData(loc1, loc2, -1, -1);
- current_w = 0;
- current_x = 0;
- current_z = 0;
- currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
- current_layer = array.new(6);
- current_layer[0] = current_w;//0 = W, 1 = X, 2 = Z
- current_layer[1] = current_x;//current_layer[a] 0 = W, 1 = X, 2 = Z
- current_layer[2] = current_z;
- current_layer[3] = current_w;
- current_layer[4] = current_x;
- current_layer[5] = current_z;
- x_difference = x2-x1;
- z_difference = z2-z2;
- w_difference = Layer_amount;
- difference_array = array.new(6);
- difference_array[0] = w_difference;
- difference_array[1] = x_difference;
- difference_array[2] = z_difference;
- difference_array[3] = w_difference;
- difference_array[4] = x_difference;
- difference_array[5] = z_difference;
- @wait
- wait();
- if(event == "living_pre_hurt") {
- if(!isPlayer(living_entity)) {
- goto("wait");
- }
- player = living_entity;
- }
- if(!player.hasMinigameId(player, script_id)) {
- goto("wait");
- }
- if(event == "player_join"){
- entity.teleport(player, Start_Pos);
- player.clearInventory(player);
- stacks.set(player, 5, "km:arrow_left");
- stacks.set(player, 6, "km:arrow_right");
- stacks.set(player, 7, "km:arrow_down");
- stacks.set(player, 8, "km:arrow_up");
- stacks.setActive(player, true);
- for(layer_var = 0; layer_var < Layer_amount; layer_var++){
- temp_list = list.new();
- x_d = layer_var * Layer_difference_X;
- y_d = layer_var * Layer_difference_Y;
- z_d = layer_var * Layer_difference_Z;
- for(x = x1 - x_d; x <= x2 - x_d; x++){
- for(y = y1 - y_d; y <= y2 - y_d; y++){
- for(z = z1 - z_d; z <= z2 - z_d; z++){
- temp_loc = loc.new(games, x, y, z);
- if(!block.isAir(temp_loc)){
- D_Array = array.new(4);
- D_Array[0] = x - x1 + x_d;//X
- D_Array[1] = y - y1 + y_d;//Y
- D_Array[2] = z - z1 + z_d;//Z
- D_Array[3] = layer_var;//W
- temp_array = array.new(2);
- temp_array[0] = D_Array;
- temp_array[1] = block.getType(temp_loc);
- list.add(Dimension_Blocks, temp_array);//Dimensional_Blocks -> Koords4D,Block
- }
- }
- }
- }
- }
- goto("wait");
- }
- if(event == "block_break"){
- cancel = true;
- goto("wait");
- }
- if(event == "living_pre_hurt") {
- cancel = true;
- goto("wait");
- }
- if(event == "function_key"){
- if(key == 6){
- goto("dimensional_turn_down");
- }
- if(key == 7){
- goto("dimensional_turn_up");
- }
- if(key == 8){
- goto("remove_layer");
- }
- if(key == 9){
- goto("add_layer");
- }
- goto("wait");
- }
- if(event == "player_move"){
- //if(current_layer[1] == finish_layer){
- game_stop("You did it!");
- //}
- goto("wait");
- }
- if(event == "player_logout"){
- game_stop(null);
- }
- if(event == "player_giveup"){
- game_stop("You left :(");
- }
- goto("wait");
- @remove_layer
- if(current_layer[currently_active_dimensions] <= 0 || current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
- if(current_layer[currently_active_dimensions] == 0){
- current_layer[currently_active_dimensions] = -1;
- remove_blocks();
- }
- if(current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
- current_layer[currently_active_dimensions]--;
- }
- }else{
- remove_blocks();
- current_layer[currently_active_dimensions]--;
- place_blocks(current_layer);
- }
- if(currently_active_dimensions < 3){
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- goto("wait");
- @add_layer
- if(current_layer[currently_active_dimensions] >= difference_array[currently_active_dimensions] - 1 || current_layer[currently_active_dimensions] < -1){
- if(current_layer[currently_active_dimensions] == difference_array[currently_active_dimensions] - 1){
- remove_blocks();
- }
- if(current_layer[currently_active_dimensions] < -1){
- current_layer[currently_active_dimensions]++;
- }
- }else{
- remove_blocks();
- current_layer[currently_active_dimensions]++;
- place_blocks(current_layer);
- }
- if(currently_active_dimensions < 3){
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- goto("wait");
- @dimensional_turn_up
- remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
- temp_layer = current_layer[currently_active_dimensions];
- temp_player_loc = entity.getLocation(player);
- if(currently_active_dimensions == 0){//XYZ to WYZ
- currently_active_dimensions++;//0 = W, 1 = X, 2 = Z
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(temp_player_loc))-Spawn_X;
- 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));
- }else{
- if(currently_active_dimensions == 1){//WYZ to WYX
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- 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));
- }else{
- if(currently_active_dimensions == 2){//WYX to ZYX
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- 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));
- }else{
- if(currently_active_dimensions == 3){//ZYX to ZYW
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- 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));
- }else{
- if(currently_active_dimensions == 4){//ZYW to XYW
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- 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));
- }else{
- if(currently_active_dimensions == 5){//XYW to XYZ
- currently_active_dimensions = 0;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- 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));
- }}}}}}
- if(currently_active_dimensions < 3){//um es nicht bei jedem if-else schreiben zu m?ssen, und die layer aktiv zu halten.
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- place_blocks(current_layer);
- goto("wait");
- @dimensional_turn_down
- remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
- temp_layer = current_layer[currently_active_dimensions];
- temp_player_loc = entity.getLocation(player);
- if(currently_active_dimensions == 0){//XYZ to XYW
- currently_active_dimensions = 5;//0 = W, 1 = X, 2 = Z, 3 = W, 4 = X, 5 = Z
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- 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));
- }else{
- if(currently_active_dimensions == 1){//WYZ to XYZ
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- 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));
- }else{
- if(currently_active_dimensions == 2){//WYX to WYZ
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- 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));
- }else{
- if(currently_active_dimensions == 3){//ZYX to WYX
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- 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));
- }else{
- if(currently_active_dimensions == 4){//ZYW to ZYX
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- 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));
- }else{
- if(currently_active_dimensions == 5){//XYW to ZYW
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- 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));
- }}}}}}
- if(currently_active_dimensions < 3){
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- place_blocks(current_layer);
- goto("wait");
- function remove_blocks(){
- for(x = $x3; x < $x3 + $x2 - $x1 + 1; x++){
- for(y = $y3; y < $y3 + $y2 - $y1 + 1; y++){
- for(z = $z3; z < $z3 + $z2 - $z1 + 1; z++){
- temp_loc = loc.new($games, x, y, z);
- block.set(temp_loc, "minecraft:air");
- }
- }
- }
- }
- function place_blocks(current_layer){
- for(a = 0; a < list.getSize($Dimension_Blocks); a++){
- temp_array = list.getIndex($Dimension_Blocks, a);
- 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
- //0 = XYZ, 1 = WYZ, 2 = XYW
- //x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
- X_place = 0;
- Y_place = -1;
- Z_place = 0;
- if($currently_active_dimensions == 0){//0 = XYZ
- if(D_Array[3] == current_layer[$currently_active_dimensions]){
- X_place = D_Array[0];
- Y_place = D_Array[1];
- Z_place = D_Array[2];
- }
- }else{
- if($currently_active_dimensions == 1){//1 = WYZ
- if(D_Array[0] == current_layer[$currently_active_dimensions]){
- X_place = D_Array[3];
- Y_place = D_Array[1];
- Z_place = D_Array[2];
- }
- }else{
- if($currently_active_dimensions == 2){//2 = WYX
- if(D_Array[2] == current_layer[$currently_active_dimensions]){
- X_place = D_Array[3];
- Y_place = D_Array[1];
- Z_place = D_Array[0];
- }
- }else{
- if($currently_active_dimensions == 3){//3 = ZYX
- if(D_Array[3] == current_layer[$currently_active_dimensions]){
- X_place = D_Array[2];
- Y_place = D_Array[1];
- Z_place = D_Array[0];
- }
- }else{
- if($currently_active_dimensions == 4){//4 = ZYW
- if(D_Array[0] == current_layer[$currently_active_dimensions]){
- X_place = D_Array[2];
- Y_place = D_Array[1];
- Z_place = D_Array[3];
- }
- }else{
- if($currently_active_dimensions == 5){//5 = XYW
- if(D_Array[2] == current_layer[$currently_active_dimensions]){
- X_place = D_Array[0];
- Y_place = D_Array[1];
- Z_place = D_Array[3];
- }
- }}}}}}
- if(Y_place > -1){
- X_place = X_place + $x3;
- Y_place = Y_place + $y3;
- Z_place = Z_place + $z3;
- temp_loc = loc.new($games,X_place,Y_place,Z_place);
- if(X_place < $x4+1 && Y_place < $y4+1 && Z_place < $z4+1){
- block.set(temp_loc, temp_array[1]);
- }
- }
- }
- }
- function game_stop(message){
- remove_blocks();
- $currently_active_dimensions = 0;
- $current_layer[$currently_active_dimensions] = 0;
- place_blocks($current_layer);
- if(message != null){
- msg.prefix($player, $gamename, message);
- }
- script = script.getFromId($script_id);
- minigame.kickPlayer(script, $player);
- minigame.term(script, $gamesignloc);
- term();
- }
|