mloeschenkohl 2 years ago
parent
commit
2943c93ec4

+ 303 - 0
jan/4d_change_dimensions.txt

@@ -0,0 +1,303 @@
+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");
+
+gamename = "$a4D-Jump'n'Run";
+
+maxplayers = 1;
+
+x1 = loc.getX(Edge_1);
+x2 = loc.getX(Edge_2);
+x3 = loc.getX(Edge_3);
+
+y1 = loc.getY(Edge_1);
+y2 = loc.getY(Edge_2);
+y3 = loc.getY(Edge_3);
+
+z1 = loc.getZ(Edge_1);
+z2 = loc.getZ(Edge_2);
+z3 = loc.getZ(Edge_3);
+
+//XYZ -> WYZ -> XYW -> XYZ
+Dimension_Blocks = list.new();
+
+event.addMoveData(loc1, loc2, -1, -1);
+
+current_w = 0;
+current_x = x3;
+current_z = z3;
+currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+current_layer = array.new(3, 2);
+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;
+x_difference = x2-x1;
+z_difference = z2-z2;
+w_difference = w2-w1;
+difference_array = array.new();
+difference_array[0] = x_difference;
+difference_array[1] = y_difference;
+difference_array[2] = 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, 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;//X
+						D_Array[1] = y;//Y
+						D_Array[2] = z;//Z
+						D_Array[3] = layer_var;//W
+						temp_array = array.new(2);
+						temp_array[0] = D_Array;
+						temp_array[1] = block.get(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 == 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){
+		remove_blocks(current_layer);
+	}
+	current_layer[currently_active_dimensions]--;
+}else{
+	remove_blocks(current_layer);
+	current_layer[currently_active_dimensions]--;
+	place_blocks(current_layer);
+}
+goto("wait");
+
+@add_layer
+if(current_layer[currently_active_dimensions] >= difference_array[currently_active_dimensions] - 1 || current_layer[currently_active_dimensions] < 0){
+	if(current_layer[currently_active_dimensions] == difference_array[currently_active_dimensions] - 1){
+		remove_blocks(current_layer);
+	}
+	current_layer[currently_active_dimensions]++;// = 0;
+}else{
+	remove_blocks(current_layer);
+	current_layer[currently_active_dimensions]++;
+	place_blocks(current_layer);
+}
+goto("wait");
+
+@dimensional_turn_up
+remove_blocks(current_layer);//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+if(currently_active_dimensions == 0){//XYZ to WYZ
+	currently_active_dimensions++;
+	current_layer[1] = math.round(loc.getX(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 1){//WYZ to WYX
+	currently_active_dimensions++;
+	current_layer[2] = math.round(loc.getZ(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 2){//WYX to ZYX
+	currently_active_dimensions++;
+	current_layer[0] = math.round(loc.getX(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 3){//ZYX to ZYW
+	currently_active_dimensions++;
+	current_layer[1] = math.round(loc.getZ(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 4){//ZYW to XYW
+	currently_active_dimensions++;
+	current_layer[2] = math.round(loc.getX(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 5){//XYW to XYZ
+	currently_active_dimensions = 0;
+	current_layer[0] = math.round(loc.getZ(entity.getLocation(player)));
+}
+place_blocks(current_layer);
+goto("wait");
+
+@dimensional_turn_down
+remove_blocks(current_layer);//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+if(currently_active_dimensions == 0){//XYZ to XYW
+	currently_active_dimensions = 5;
+	current_layer[2] = math.round(loc.getZ(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 1){//XYW to ZYW
+	currently_active_dimensions--;
+	current_layer[1] = math.round(loc.getX(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 2){//ZYW to ZYX
+	currently_active_dimensions--;
+	current_layer[0] = math.round(loc.getZ(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 3){//ZYX to WYX
+	currently_active_dimensions--;
+	current_layer[2] = math.round(loc.getX(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 4){//WYX to WYZ
+	currently_active_dimensions--;
+	current_layer[1] = math.round(loc.getZ(entity.getLocation(player)));
+}
+if(currently_active_dimensions == 5){//WYZ to XYZ
+	currently_active_dimensions--;
+	current_layer[0] = math.round(loc.getX(entity.getLocation(player)));
+}
+place_blocks(current_layer);
+goto("wait");
+
+
+
+function remove_blocks(current_layer){
+	for(a = 0; a < list.getSize($Dimension_Blocks); a++){
+		temp_array = list.getIndex($Dimension_Blocks, a);//Dimensional_Blocks -> Array[Koords4D,Block]
+		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 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+		//x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
+		if(currently_active_dimensions == 0){//0 = XYZ
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[2];
+		}
+		if(currently_active_dimensions == 1){//1 = WYZ
+			X_place = D_Array[3];
+			Y_place = D_Array[1];	
+			Z_place = D_Array[2];
+		}
+		if(currently_active_dimensions == 2){//2 = WYX
+			X_place = D_Array[3];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+		}
+		if(currently_active_dimensions == 3){//3 = ZYX
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+		}
+		if(currently_active_dimensions == 4){//4 = ZYW
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+		}
+		if(currently_active_dimensions == 5){//5 = XYW
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+		}
+		X_place = X_place + x3;
+		Y_place = Y_place + y3;
+		Z_place = Z_place + z3;
+		block.set(loc.new(games,X_place,Y_place,Z_place), "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
+		if(currently_active_dimensions == 0){//0 = XYZ
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[2];
+		}
+		if(currently_active_dimensions == 1){//1 = WYZ
+			X_place = D_Array[3];
+			Y_place = D_Array[1];	
+			Z_place = D_Array[2];
+		}
+		if(currently_active_dimensions == 2){//2 = WYX
+			X_place = D_Array[3];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+		}
+		if(currently_active_dimensions == 3){//3 = ZYX
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+		}
+		if(currently_active_dimensions == 4){//4 = ZYW
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+		}
+		if(currently_active_dimensions == 5){//5 = XYW
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+		}
+		X_place = X_place + x3;
+		Y_place = Y_place + y3;
+		Z_place = Z_place + z3;
+		block.set(loc.new(games,X_place,Y_place,Z_place), temp_array[1]);
+	}
+}
+
+function game_stop(message){
+	remove_blocks($current_layer[currently_active_dimensions]);
+	place_blocks(0);
+	if(message != null){
+		msg.prefix($player, $gamename, message);
+	}
+	script = script.getFromId($script_id);
+	minigame.kickPlayer(script, $player);
+	minigame.term(script, $gamesignloc);
+	term();
+}

+ 154 - 0
jan/4d_j_r_core.txt

@@ -0,0 +1,154 @@
+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");
+
+gamename = "§a4D-Jump'n'Run";
+
+maxplayers = 1;
+
+x1 = loc.getX(Edge_1);
+x2 = loc.getX(Edge_2);
+x3 = loc.getX(Edge_3);
+
+y1 = loc.getY(Edge_1);
+y2 = loc.getY(Edge_2);
+y3 = loc.getY(Edge_3);
+
+z1 = loc.getZ(Edge_1);
+z2 = loc.getZ(Edge_2);
+z3 = loc.getZ(Edge_3);
+
+Layer = array.new(Layer_amount, 2);
+
+event.addMoveData(loc1, loc2, -1, -1);
+
+current_layer = 0;
+
+@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, 7, "km:arrow_left");
+	stacks.set(player, 8, "km:arrow_right");
+	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)){
+						temp_loc2 = loc.new(games, x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d);
+						list.add(temp_list, temp_loc2);
+					}
+				}
+			}
+		}
+		Layer[layer_var, 0] = temp_list;
+		Layer[layer_var, 1] = block_type_array[layer_var];
+	}
+	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 == 8){
+		goto("remove_layer");
+	}
+	if(key == 9){
+		goto("add_layer");
+	}
+	goto("wait");
+}
+if(event == "player_move"){
+	//if(current_layer == 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
+//remove_blocks(current_layer);
+if(current_layer <= 0 || current_layer > Layer_amount - 1){
+	if(current_layer == 0){
+		remove_blocks(current_layer);
+	}
+	current_layer--;// = Layer_amount - 1;
+}else{
+	remove_blocks(current_layer);
+	current_layer--;
+	place_blocks(current_layer);
+}
+//place_blocks(current_layer);
+goto("wait");
+
+@add_layer
+//remove_blocks(current_layer);
+if(current_layer >= Layer_amount - 1 || current_layer < 0){
+	if(current_layer == Layer_amount - 1){
+		remove_blocks(current_layer);
+	}
+	current_layer++;// = 0;
+}else{
+	remove_blocks(current_layer);
+	current_layer++;
+	place_blocks(current_layer);
+}
+//place_blocks(current_layer);
+goto("wait");
+
+function remove_blocks(current_layer){
+	temp_list = $Layer[current_layer, 0];
+	for(a = 0; a < list.getSize(temp_list); a++){
+		block.set(list.getIndex(temp_list, a), "minecraft:air");
+	}
+}
+function place_blocks(current_layer){
+	temp_list = $Layer[current_layer, 0];
+	for(a = 0; a < list.getSize(temp_list); a++){
+		block.set(list.getIndex(temp_list, a), $Layer[current_layer, 1]);
+	}
+}
+
+function game_stop(message){
+	remove_blocks($current_layer);
+	place_blocks(0);
+	if(message != null){
+		msg.prefix($player, $gamename, message);
+	}
+	script = script.getFromId($script_id);
+	minigame.kickPlayer(script, $player);
+	minigame.term(script, $gamesignloc);
+	term();
+}

+ 154 - 0
jan/4d_j_r_core_backup.txt

@@ -0,0 +1,154 @@
+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");
+
+gamename = "§a4D-Jump'n'Run";
+
+maxplayers = 1;
+
+x1 = loc.getX(Edge_1);
+x2 = loc.getX(Edge_2);
+x3 = loc.getX(Edge_3);
+
+y1 = loc.getY(Edge_1);
+y2 = loc.getY(Edge_2);
+y3 = loc.getY(Edge_3);
+
+z1 = loc.getZ(Edge_1);
+z2 = loc.getZ(Edge_2);
+z3 = loc.getZ(Edge_3);
+
+Layer = array.new(Layer_amount, 2);
+
+event.addMoveData(loc1, loc2, -1, -1);
+
+current_layer = 0;
+
+@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, 7, "km:arrow_left");
+	stacks.set(player, 8, "km:arrow_right");
+	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)){
+						temp_loc2 = loc.new(games, x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d);
+						list.add(temp_list, temp_loc2);
+					}
+				}
+			}
+		}
+		Layer[layer_var, 0] = temp_list;
+		Layer[layer_var, 1] = block_type_array[layer_var];
+	}
+	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 == 8){
+		goto("remove_layer");
+	}
+	if(key == 9){
+		goto("add_layer");
+	}
+	goto("wait");
+}
+if(event == "player_move"){
+	//if(current_layer == 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
+//remove_blocks(current_layer);
+if(current_layer <= 0 || current_layer > Layer_amount - 1){
+	if(current_layer == 0){
+		remove_blocks(current_layer);
+	}
+	current_layer--;// = Layer_amount - 1;
+}else{
+	remove_blocks(current_layer);
+	current_layer--;
+	place_blocks(current_layer);
+}
+//place_blocks(current_layer);
+goto("wait");
+
+@add_layer
+//remove_blocks(current_layer);
+if(current_layer >= Layer_amount - 1 || current_layer < 0){
+	if(current_layer == Layer_amount - 1){
+		remove_blocks(current_layer);
+	}
+	current_layer++;// = 0;
+}else{
+	remove_blocks(current_layer);
+	current_layer++;
+	place_blocks(current_layer);
+}
+//place_blocks(current_layer);
+goto("wait");
+
+function remove_blocks(current_layer){
+	temp_list = $Layer[current_layer, 0];
+	for(a = 0; a < list.getSize(temp_list); a++){
+		block.set(list.getIndex(temp_list, a), "minecraft:air");
+	}
+}
+function place_blocks(current_layer){
+	temp_list = $Layer[current_layer, 0];
+	for(a = 0; a < list.getSize(temp_list); a++){
+		block.set(list.getIndex(temp_list, a), $Layer[current_layer, 1]);
+	}
+}
+
+function game_stop(message){
+	remove_blocks($current_layer);
+	place_blocks(0);
+	if(message != null){
+		msg.prefix($player, $gamename, message);
+	}
+	script = script.getFromId($script_id);
+	minigame.kickPlayer(script, $player);
+	minigame.term(script, $gamesignloc);
+	term();
+}

+ 48 - 0
jan/portals.txt

@@ -0,0 +1,48 @@
+event.load("block_place");
+event.load("block_break");
+event.load("player_move");
+
+port_locs = map.new();
+port_idmap= map.new();
+portalids = list.new();
+portalkey = 1;
+@wait
+wait();
+
+if(player.getName(player) == "SirTerence7"){
+
+if(event == "block_place"){
+	if(block_type == "minecraft:redstone_torch"){
+		new_id = event.addMoveData(block_loc, loc.mod(block_loc,0.5,1,0.5), -1, -1, player);
+		list.add(portalids, new_id);
+		map.add(port_idmap, block_loc, new_id);
+		map.add(port_locs, portalkey, block_loc);
+		msg("dev", new_id);
+		portalkey++;
+	}
+	goto("wait");
+}
+/*if(event == "block_break"){
+	temp_id = map.get(port_idmap, block_loc);
+	event.removeMoveData(temp_id);
+	goto("wait");
+}*/
+if(event == "player_move" && portalkey > 2){
+	motion_array = entity.getMotion(player);
+	msg("dev", id);
+	temp_key = list.getIndexOf(portalids, id);
+	if(temp_key > 0){
+		msg("dev", temp_key);
+		if(math.round(temp_key/2) == temp_key/2){
+			temp_coords = map.get(port_locs, temp_key-1);
+		}else{
+			temp_coords = map.get(port_locs, temp_key+1);
+		}
+		msg("dev", temp_coords);
+		entity.teleport(player, temp_coords);
+		entity.throw(player, motion_array[0], motion_array[1], motion_array[2]);
+	}
+	goto("wait");
+}
+}
+goto("wait");

+ 17 - 0
jan/snow_liquids.txt

@@ -0,0 +1,17 @@
+event.load("projectile_hit");
+
+@wait
+wait();
+
+if(isPlayer(shooter)){
+	if(player.getName(shooter) == "SirTerence7"){
+		//msg("dev", projectile);
+		//if(entity.getType(projectile) == "SnowballEntity"){//entity.minecraft.snowball
+		//	msg("dev", "Erfolg");
+			location = entity.getLocation(projectile);
+			falling_block_entity = entity.spawn("falling_block", location, "{BlockState:{Name:\"minecraft:snow\"},Time:1,Motion:[0.0,0.0,0.0],DropItem:0,HurtEntities:1}");
+		//}
+	//entity.throw(falling_block_entity, x, y, z);
+	}
+}
+goto("wait");

+ 6 - 19
jan/tictactoe.txt

@@ -35,13 +35,6 @@ list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -51));
 list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -51));
 
 winning_blocks = list.new();
-playing_players = list.new();
-
-ttt_start_loc_list = list.new();
-list.add(ttt_start_loc_list, loc.new(games_world, -427, 147, -50));
-list.add(ttt_start_loc_list, loc.new(games_world, -431, 147, -54));
-list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -50));
-list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -46));
 
 @start
 for(a = 0; a < list.getSize(tic_tac_toe_blocks); a++){
@@ -53,19 +46,14 @@ goto("wait");
 wait();
 
 if(event == "block_click"){
-	if(list.contains(ttt_start_loc_list, block_loc)){
-		list.add(playing_players, player);
-	}
 }
 if(event == "block_place"){
-	if(list.contains(playing_players, player)){
-		if(is.tictactoe_placeable(block_loc)){
-			if(is.triplet(block_loc)){
-				goto("tic_tac_toe_win");
-			}		
-		}else{
-			cancel = true;
-		}
+	if(is.tictactoe_placeable(block_loc)){
+		if(is.triplet(block_loc)){
+			goto("tic_tac_toe_win");
+		}		
+	}else{
+		cancel = true;
 	}
 }
 goto("wait");
@@ -80,7 +68,6 @@ for(a = 0; a < list.getSize(winning_blocks); a++){
 	block.set(list.getIndex(winning_blocks, a), "minecraft:red_wool");
 }
 list.clear(winning_blocks);
-list.clear(playing_players);
 goto("wait");
 
 

+ 309 - 0
jan/tictactoe_2.txt

@@ -0,0 +1,309 @@
+event.load("block_place");
+event.load("block_click");
+event.load("function_key");
+tic_tac_toe_blocks = list.new();
+
+/*games_world = world.getGames();
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -49));
+
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -50));
+
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -51));*/
+
+winning_blocks = list.new();
+playing_players = list.new();
+
+ttt_start_loc_list = list.new();
+list.add(ttt_start_loc_list, loc.new(games_world, -427, 147, -50));
+list.add(ttt_start_loc_list, loc.new(games_world, -431, 147, -54));
+list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -50));
+list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -46));
+
+placed_blocks = list.new();
+
+dimension = 3;
+dem_array = array-new[dimension - 3]
+for(a = 0; a < dimension - 2; a++){
+	dem_array[a] = 0;
+}
+length = 3;
+
+@end
+for(a = 0; a < list.getSize(placed_blocks); a++){
+	block.set(list.getIndex(placed_blocks, a), "minecraft:air");
+}
+list.clear(placed_blocks);
+goto("wait");
+
+@wait
+wait();
+
+if(event == "block_click"){
+	if(list.contains(ttt_start_loc_list, block_loc)){
+		list.add(playing_players, player);
+	}
+}
+if(event == "block_place"){
+	if(list.contains(playing_players, player)){
+		if(is.tictactoe_placeable(block_loc)){
+			temp_array = array.new[dimension - 2];
+			temp_array[0] = block_loc;
+			
+			list.add(placed_blocks, temp_array)
+			if(is.triplet(block_loc)){
+				goto("tic_tac_toe_win");
+			}		
+		}else{
+			cancel = true;
+		}
+	}
+}
+if(event == "function_key"){
+	if(list.contains(playing_players, player)){
+		
+	}
+}
+goto("wait");
+
+@tic_tac_toe_win
+msg(player, "You won.");
+for(a = 0; a < list.getSize(tic_tac_toe_blocks); a++){
+	block.set(list.getIndex(tic_tac_toe_blocks, a), "minecraft:air");
+}
+list.add(winning_blocks, block_loc);
+for(a = 0; a < list.getSize(winning_blocks); a++){
+	block.set(list.getIndex(winning_blocks, a), "minecraft:red_wool");
+}
+list.clear(winning_blocks);
+list.clear(playing_players);
+goto("wait");
+
+
+function is.tictactoe_placeable(block_loc){
+	if(!list.contains($tic_tac_toe_blocks, block_loc)){
+		return false;
+	}
+	loc.addY(block_loc, -1);
+	if(block.isAir(block_loc)){
+		loc.addY(block_loc, 1);
+		return false;
+	}else{
+		loc.addY(block_loc, 1);
+	}
+	return true;
+}
+
+function is.triplet(block_loc){
+	if(triplet.straight(block_loc)){
+		return true;
+	}
+	if(triplet.cross(block_loc)){
+		return true;
+	}
+	if(triplet.cross_cross(block_loc)){
+		return true;
+	}
+	else{
+		return false;
+	}
+}
+
+function triplet.straight(block_loc){
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.addX(block_loc, -length + 1);
+	for(a = 0; a < 2 * length - 2; a++){
+		temp_block_count = temp_block_count + is.blockType(block_loc);
+		loc.addX(block_loc, 1);
+	}
+	loc.addX(block_loc, -length+1);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.addY(block_loc, -length + 1);
+	for(a = 0; a < 2 * length - 2; a++){
+		temp_block_count = temp_block_count + is.blockType(block_loc);
+		loc.addY(block_loc, 1);	
+	}
+	loc.addY(block_loc, -length + 1);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.addZ(block_loc, -length + 1);
+	for(a = 0; a < 2 * length - 2; a++){
+		temp_block_count = temp_block_count + is.blockType(block_loc);
+		loc.addZ(block_loc, 1);
+	}
+	loc.addZ(block_loc, -length + 1);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	return false;
+}
+
+function triplet.cross(block_loc){
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
+	loc.addY(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
+	loc.addY(block_loc, -2);
+	loc.addZ(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	return false;
+}
+
+function triplet.cross_cross(block_loc){
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, 2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
+	loc.addY(block_loc, 2);
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	return false;
+}
+
+function t_loc_add(block_loc, x, y, z){
+	loc.add(block_loc,x, y ,z);
+	return block_loc;
+}
+
+function is.blockType(block_loc){
+	if(block.getType(block_loc) == $block_type){
+		list.add($winning_blocks, block_loc);
+		return 1;
+	}else{
+		return 0;
+	}
+}

+ 3 - 0
minigames/among_us/among_us.txt

@@ -4698,6 +4698,9 @@ function set_engine(player, inv, direction) {
 }
 
 function cam.enter(player) {
+	if(player.isOnCam(player)) {
+		return;
+	}
 	entity.clearEffects(player);
 	entity.addEffect(player, "invisibility", 999999, 1, false);
 	entity.addEffect(player, "night_vision", 999999, 0, false);

+ 2 - 2
minigames/bedwars/bedwars.txt

@@ -365,7 +365,7 @@ item.setAmount(priceitem, item.getAmount(priceitem) * factor);
 if(player.getItemAmount(player, false, priceitem) < item.getAmount(priceitem)) {
 	goto("checkgame");
 }
-player.removeItem(player, priceitem);
+player.removeItemNbt(player, priceitem);
 if(item_type == "minecraft:red_bed") {
 	goto("setnewbed");
 }
@@ -755,7 +755,7 @@ goto("checkgame");
 
 @nobed
 money.addBoost(player, 32);
-minigame.speakAll(gamename, concat(tempcolor, player_name, " §ewoke up from his dream."));
+minigame.speakAll(gamename, concat(tempcolor, player_name, " §ewoke up from their dream."));
 showstats(player, false, false);
 script = script.getFromId(script_id);
 minigame.kickplayer(script, player);

+ 401 - 0
minigames/jumpnrun/4d/4d_j_r_core.txt

@@ -0,0 +1,401 @@
+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);
+
+y1 = loc.getY(Edge_1);
+y2 = loc.getY(Edge_2);
+y3 = loc.getY(Edge_3);
+
+z1 = loc.getZ(Edge_1);
+z2 = loc.getZ(Edge_2);
+z3 = loc.getZ(Edge_3);
+
+//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);
+}
+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);
+}
+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++;
+	current_layer[1] = math.roundDown(loc.getX(temp_player_loc))-x3;
+	current_layer[4] = current_layer[1];
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+}else{
+if(currently_active_dimensions == 1){//WYZ to WYX
+	currently_active_dimensions++;
+	current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
+	current_layer[5] = current_layer[2];
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+}else{
+if(currently_active_dimensions == 2){//WYX to ZYX
+	currently_active_dimensions++;
+	current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
+	current_layer[3] = current_layer[0];
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+}else{
+if(currently_active_dimensions == 3){//ZYX to ZYW
+	currently_active_dimensions++;
+	current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
+	current_layer[4] = current_layer[1];
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+}else{
+if(currently_active_dimensions == 4){//ZYW to XYW
+	currently_active_dimensions++;
+	current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
+	current_layer[5] = current_layer[2];
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+}else{
+if(currently_active_dimensions == 5){//XYW to XYZ
+	currently_active_dimensions = 0;
+	current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
+	current_layer[3] = current_layer[0];
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+}}}}}}
+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;
+	current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
+	current_layer[5] = current_layer[2];
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+}else{
+if(currently_active_dimensions == 1){//XYW to ZYW
+	currently_active_dimensions--;
+	current_layer[1] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
+	current_layer[4] = current_layer[1];
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+}else{
+if(currently_active_dimensions == 2){//ZYW to ZYX
+	currently_active_dimensions--;
+	current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
+	current_layer[3] = current_layer[0];
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+}else{
+if(currently_active_dimensions == 3){//ZYX to WYX
+	currently_active_dimensions--;
+	current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
+	current_layer[5] = current_layer[2];
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+}else{
+if(currently_active_dimensions == 4){//WYX to WYZ
+	currently_active_dimensions--;
+	current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
+	current_layer[4] = current_layer[1];
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+}else{
+if(currently_active_dimensions == 5){//WYZ to XYZ
+	currently_active_dimensions--;
+	current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
+	current_layer[3] = current_layer[0];
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+}}}}}}
+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");
+			}
+		}
+	}
+	/*for(a = 0; a < list.getSize($Dimension_Blocks); a++){
+		temp_array = list.getIndex($Dimension_Blocks, a);//Dimensional_Blocks -> Array[Koords4D,Block]
+		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 = WYX, 3 = ZYX, 4 = ZYW, 5 = 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);
+			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);
+			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();
+}

+ 154 - 0
minigames/jumpnrun/4d/4d_j_r_core_backup(old).txt

@@ -0,0 +1,154 @@
+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");
+
+gamename = "§a4D-Jump'n'Run";
+
+maxplayers = 1;
+
+x1 = loc.getX(Edge_1);
+x2 = loc.getX(Edge_2);
+x3 = loc.getX(Edge_3);
+
+y1 = loc.getY(Edge_1);
+y2 = loc.getY(Edge_2);
+y3 = loc.getY(Edge_3);
+
+z1 = loc.getZ(Edge_1);
+z2 = loc.getZ(Edge_2);
+z3 = loc.getZ(Edge_3);
+
+Layer = array.new(Layer_amount, 2);
+
+event.addMoveData(loc1, loc2, -1, -1);
+
+current_layer = 0;
+
+@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, 7, "km:arrow_left");
+	stacks.set(player, 8, "km:arrow_right");
+	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)){
+						temp_loc2 = loc.new(games, x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d);
+						list.add(temp_list, temp_loc2);
+					}
+				}
+			}
+		}
+		Layer[layer_var, 0] = temp_list;
+		Layer[layer_var, 1] = block_type_array[layer_var];
+	}
+	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 == 8){
+		goto("remove_layer");
+	}
+	if(key == 9){
+		goto("add_layer");
+	}
+	goto("wait");
+}
+if(event == "player_move"){
+	//if(current_layer == 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
+//remove_blocks(current_layer);
+if(current_layer <= 0 || current_layer > Layer_amount - 1){
+	if(current_layer == 0){
+		remove_blocks(current_layer);
+	}
+	current_layer--;// = Layer_amount - 1;
+}else{
+	remove_blocks(current_layer);
+	current_layer--;
+	place_blocks(current_layer);
+}
+//place_blocks(current_layer);
+goto("wait");
+
+@add_layer
+//remove_blocks(current_layer);
+if(current_layer >= Layer_amount - 1 || current_layer < 0){
+	if(current_layer == Layer_amount - 1){
+		remove_blocks(current_layer);
+	}
+	current_layer++;// = 0;
+}else{
+	remove_blocks(current_layer);
+	current_layer++;
+	place_blocks(current_layer);
+}
+//place_blocks(current_layer);
+goto("wait");
+
+function remove_blocks(current_layer){
+	temp_list = $Layer[current_layer, 0];
+	for(a = 0; a < list.getSize(temp_list); a++){
+		block.set(list.getIndex(temp_list, a), "minecraft:air");
+	}
+}
+function place_blocks(current_layer){
+	temp_list = $Layer[current_layer, 0];
+	for(a = 0; a < list.getSize(temp_list); a++){
+		block.set(list.getIndex(temp_list, a), $Layer[current_layer, 1]);
+	}
+}
+
+function game_stop(message){
+	remove_blocks($current_layer);
+	place_blocks(0);
+	if(message != null){
+		msg.prefix($player, $gamename, message);
+	}
+	script = script.getFromId($script_id);
+	minigame.kickPlayer(script, $player);
+	minigame.term(script, $gamesignloc);
+	term();
+}

+ 27 - 0
minigames/jumpnrun/4d/4d_j_r_map1.txt

@@ -0,0 +1,27 @@
+gamesignloc = minigame.getSignLoc("jr_sign_4D_1");
+
+games = world.getGames();
+Edge_1 = loc.new(games,-5, 88,-3017);//immer kleiner/negativer
+Edge_2 = loc.new(games, 4, 97,-3008);//als Edge_2
+Edge_3 = loc.new(games,-5, 99,-3017);//startpunkt zum pasten (negativster wert)
+
+Start_Pos = loc.new(games,-4.5, 99,-3016.5);
+
+loc1 = loc.new(games, 4, 107,-3008);
+loc2 = loc.new(games, 5, 108,-3007);
+
+Layer_amount = 7;
+Layer_difference_X = 0;
+Layer_difference_Y = 11;
+Layer_difference_Z = 0;
+
+//finish_layer = 0; //layer in dem sich der Checkpoint/Ausgang befindet
+/*
+block_type_array = array.new(Layer_amount);
+block_type_array[0] = "km:silver_block";
+block_type_array[1] = "minecraft:red_stained_glass";
+block_type_array[2] = "minecraft:orange_stained_glass";
+block_type_array[3] = "minecraft:yellow_stained_glass";
+block_type_array[4] = "minecraft:lime_stained_glass";
+block_type_array[5] = "minecraft:blue_stained_glass";
+block_type_array[6] = "minecraft:purple_stained_glass";*/

+ 16 - 0
minigames/jumpnrun/4d/4d_j_r_map2.txt

@@ -0,0 +1,16 @@
+gamesignloc = minigame.getSignLoc("lab_sign_4D_2");
+
+games = world.getGames();
+Edge_1 = loc.new(games,-5, 187,-2509);//immer kleiner/negativer
+Edge_2 = loc.new(games, 4, 197,-2500);//als Edge_2
+Edge_3 = loc.new(games,-5, 198,-2509);//startpunkt zum pasten (negativster wert)
+
+Start_Pos = loc.new(games,-4.5, 199,-2508.5);
+
+loc1 = loc.new(games, 4, 201,-2500);
+loc2 = loc.new(games, 5, 203,-2499);
+
+Layer_amount = 10;
+Layer_difference_X = 0;
+Layer_difference_Y = 11;
+Layer_difference_Z = 0;

+ 4 - 0
story/admont/core.txt

@@ -179,6 +179,10 @@ if(inv_name == "Quests: Dieter") {
 }
 if(inv_name == "Quests: Zauberlehrling") {
 	if(inv_slot == 0) {
+		if(script.isActiveName("scripts/story/admont/felsmagier.txt")) {
+			msg.prefix(player, "§dZauberlehrling", "Diese Quest ist momentan aktiv und kann nicht vergeben werden.");
+			goto("wait");
+		}
 		quest.start(player, "story/admont/felsmagier");
 		goto("wait");
 	}

+ 2 - 0
survival/survival.txt

@@ -1,3 +1,5 @@
+setMoney(114, 0);
+
 event.load("entity_click");
 event.load("container_click");
 event.load("inv_click");

+ 4 - 4
survival/trader.txt

@@ -96,11 +96,11 @@ if(event == "entity_click") {
 	}
 	if(entity_name == "Hans") {
 		shop = shop.new();
-		shop.addOffer(shop, read.item("minecraft:string", 2), read.item("km:coin_copper", 3), 999);
+		shop.addOffer(shop, read.item("minecraft:string", 2), read.item("km:coin_copper", 1), 999);
 		shop.addOffer(shop, read.item("minecraft:rotten_flesh", 1), read.item("km:coin_copper", 1), 999);
-		shop.addOffer(shop, read.item("minecraft:bone", 2), read.item("km:coin_copper", 3), 999);
-		shop.addOffer(shop, read.item("minecraft:gunpowder", 1), read.item("km:coin_copper", 3), 999);
-		shop.addOffer(shop, read.item("minecraft:ender_pearl", 1), read.item("km:coin_copper", 8), 999);
+		shop.addOffer(shop, read.item("minecraft:bone", 2), read.item("km:coin_copper", 1), 999);
+		shop.addOffer(shop, read.item("minecraft:gunpowder", 1), read.item("km:coin_copper", 1), 999);
+		shop.addOffer(shop, read.item("minecraft:ender_pearl", 1), read.item("km:coin_copper", 1), 999);
 		shop.open(shop, player, shop_name);
 		goto("wait");
 	}

+ 5 - 0
system/chestshops.txt

@@ -20,6 +20,11 @@ if(inv_slot == 10) {
 	goto("wait");
 }
 sign_loc = map.get(invid_to_sign_loc, inv_id);
+if(sign_loc == null) {
+	inv.close(player);
+	msg.prefix(player, prefix_shop, "Defect shop.");
+	goto("wait");
+}
 if(!isAWallSign(sign_loc)) {
 	map.remove(invid_to_sign_loc, inv_id);
 	inv.close(player);

+ 171 - 8
system/commands.txt

@@ -98,6 +98,7 @@ command.register("lastseen", "Shows the last players online");
 command.register("lightning", "Summons a lightning_bolt");
 command.register("list", "List all players online");
 command.register("mail", "Mail-Commands");
+command.register("mailbox", "Mailbox-Commands");
 command.register("memory", "Returns RAM-usage");
 command.register("msg", "Send a private message");
 command.register("mute", "Mutes a player");
@@ -775,6 +776,36 @@ if(event == "entity_click") {
 	goto("wait");
 }
 if(event == "inv_click") {
+	//mailbox
+	if(text.startsWith(inv_name, "Mailbox", 0)) {
+		if(player.isOnAdventure(player)) {
+			msg.prefix(player, prefix_commands, "You can't use the mailbox while on adventure.");
+			goto("wait");
+		}
+		if(click_type == "QUICK_MOVE") {
+			if(perm.has(player, "mailbox.other")) {
+				//Clone item
+				player.safeGiveItem(player, item);
+				inv.update(player);
+				goto("wait");
+			}
+		}
+		//Take item
+		player.safeGiveItem(player, item);
+		inv.setItem(inv, inv_slot, item.getAir());
+		inv.update(player);
+		split_list = text.split(" ", inv_name);
+		p_name = list.getIndex(split_list, 2);
+		p_uuid = player.getUuid(p_name);
+		if(p_uuid == null) {
+			inv.close(player);
+			msg.prefix(player, prefix_commands, "Mailbox closed. Unknown player.");
+			goto("wait");
+		}
+		p_id = player.getId(p_uuid);
+		mailbox.setItem(p_id, inv_slot, item.getAir());
+		goto("wait");
+	}
 	//inv see
 	if(set.contains(invseeids, inv_id)) {
 		//On inv_click in an invsee inventory
@@ -1142,6 +1173,77 @@ if(event == "player_data_tick") {
 }
 goto("wait");
 
+@mailbox
+location = entity.getLocation(player);
+world_name = world.getName(loc.getWorld(entity.getLocation(player)));
+if(!world.isSurvName(world_name)) {
+	msg.prefix(player, prefix_commands, "You can't use this command in this world.");
+	goto("wait");
+}
+if(size == 0) {
+	msg.prefix(player, prefix_commands, "/mailbox...");
+	if(perm.has(player, "mailbox.other")) {
+		msg(player, "§6 - show [player] §rOpen a players mailbox.");
+	} else {
+		msg(player, "§6 - show §rOpen your mailbox.");
+	}
+	msg(player, "§6 - send <player> §rSend the item in your mainhand to a mailbox.");
+	goto("wait");
+}
+arg0 = text.toLowerCase(list.getIndex(args, 0));
+if(arg0 == "send") {
+	if(size != 2) {
+		msg.prefix(player, prefix_commands, "/mailbox send <player>");
+		goto("wait");
+	}
+	item = living.getHand(player);
+	if(item.getType(item) == "minecraft:air") {
+		msg.prefix(player, prefix_commands, "You have to hold an item in your mainhand.");
+		goto("wait");
+	}
+	to_name = list.getIndex(args, 1);
+	if(!checkIfEverOnline(to_name)) {
+		msg.prefix(player, prefix_commands, "This player has never been online.");
+		goto("wait");
+	}
+	to_player_id = player.getId(player.getUuid(to_name));
+	index = mailbox.getFreeIndex(to_player_id);
+	if(index == -1) {
+		msg.prefix(player, prefix_commands, "No free space in mailbox.");
+		goto("wait");
+	}
+	living.setEquip(player, "hand", item.getAir());
+	mailbox.setItem(to_player_id, index, item);
+	msg.send(player, to_name, prefix_commands, concat(player.getName(player), " sent you items to your mailbox."), true);
+	goto("wait");
+}
+if(arg0 == "show") {
+	if(size == 1) {
+		from_player_id = player.getId(player);
+	} elseif(size == 2) {
+		if(!perm.has(player, "mailbox.other")) {
+			perm.no(player, "mailbox.other");
+			goto("wait");
+		}
+		from_name = list.getIndex(args, 1);
+		if(!checkIfEverOnline(from_name)) {
+			msg.prefix(player, prefix_commands, "This player has never been online.");
+			goto("wait");
+		}
+		from_player_id = player.getId(player.getUuid(from_name));
+	} else {
+		if(perm.has(player, "mailbox.other")) {
+			msg.prefix(player, prefix_commands, "/mailbox show [player]");
+		} else {
+			msg.prefix(player, prefix_commands, "/mailbox show");
+		}
+		goto("wait");
+	}
+	mailbox.show(player, from_player_id);
+	goto("wait");
+}
+goto("wait");
+
 @entities
 if(size != 1) {
 	msg.prefix(player, prefix_quest, "/entities <world>");
@@ -2395,7 +2497,7 @@ if(block.isAir(loc)) {
 	goto("wait");
 }
 y = loc.getY(loc);
-while(!block.isAir(loc)) {
+while(y < 254 && !block.isAir(loc)) {
 	loc.setY(loc, y);
 	y++;
 }
@@ -3577,7 +3679,7 @@ player_loc = entity.getLocation(player);
 y = 255;
 loc.setY(player_loc, y);
 
-while(block.isAir(player_loc)) {
+while(y > 0 && block.isAir(player_loc)) {
 	loc.setY(player_loc, y);
 	y--;
 }
@@ -4288,6 +4390,8 @@ if(p_uuid == null) {
 message = text.replace(text.concatList(text_args, " ", 0, size - 1), "&", "§");
 if(text.startsWith(message, "https://", 0)) {
 	message = text.link(message, message);
+} else {
+	message = text.concat("§e", message);
 }
 if(player.getId(p_uuid) == 18) {
 	msg(sender, "§6[ -> §cSERVER§6] ", message);
@@ -4298,8 +4402,8 @@ if(player.getId(p_uuid) == 18) {
 		msg.prefix(sender, prefix_commands, "This player is not online.");
 		goto("wait");
 	}
-	msg(sender, concat("§6[§cme §6-> §c", player.getName(p)), "§6] ", concat("§e", message));
-	msg(p, concat("§6[§c", sender_name), " §6-> §cme§6] ", concat("§e", message));
+	msg(sender, concat("§6[§cme §6-> §c", player.getName(p)), "§6] ", message);
+	msg(p, concat("§6[§c", sender_name), " §6-> §cme§6] ", message);
 }
 map.add(answer_map, p_uuid, player_uuid);
 map.add(answer_map, player_uuid, p_uuid);
@@ -4323,6 +4427,8 @@ if(p_uuid == null) {
 message = text.replace(text.concatList(text_args, " ", 1, size - 1), "&", "§");
 if(text.startsWith(message, "https://", 0)) {
 	message = text.link(message, message);
+} else {
+	message = text.concat("§e", message);
 }
 if(text.toUpperCase(p_name) == "SERVER") {
 	msg("SERVER", concat("§6[§c", sender_name), "§6] ", message);
@@ -4333,8 +4439,8 @@ if(text.toUpperCase(p_name) == "SERVER") {
 		msg.prefix(sender, prefix_commands, "This player is not online.");
 		goto("wait");
 	}
-	msg(p, concat("§6[§c", sender_name), " §6-> §cme§6] ", concat("§e", message));
-	msg(sender, concat("§6[§cme §6-> §c", player.getName(p)), "§6] ", concat("§e", message));
+	msg(p, concat("§6[§c", sender_name), " §6-> §cme§6] ", message);
+	msg(sender, concat("§6[§cme §6-> §c", player.getName(p)), "§6] ", message);
 }
 player_uuid = player.getUuid(sender);
 map.add(answer_map, p_uuid, player_uuid);
@@ -9226,6 +9332,17 @@ function setCommandHelps() {
 	command.addHelpChild(help, command.newHelpLiteral("clear"));
 	command.addHelp(help);
 	
+	help = command.newHelp("mailbox", "mailbox");
+	//mailbox show <player>
+	helpArg0 = command.newHelpLiteral("show");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "mailbox.other"));
+	command.addHelpChild(help, helpArg0);
+	//mailbox send <player>
+	helpArg0 = command.newHelpLiteral("send");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
 	help = command.newHelp("world", "world");
 	//world info
 	command.addHelpChild(help, command.newHelpLiteral("info"));
@@ -9966,8 +10083,6 @@ goto("wait");
 
 function tpBottom(player) {
 	player_loc = entity.getLocation(player);
-	entity.teleport($p, loc.new(world.get("overworld"), 204, 69, 259));
-	waitfor(5);
 	y = loc.getY(player_loc);
 	while(y > 0 && block.isAir(player_loc)) {
 		loc.setY(player_loc, y);
@@ -10129,4 +10244,52 @@ function hawkeye.getAmountOfAll() {
 
 function hawkeye.getEventName(event_id) {
 	return map.get($event_map, event_id);
+}
+
+//--------------------------------------------------
+//Mailbox-Utils
+//--------------------------------------------------
+
+function mailbox.setItem(player_id, index, item) {
+	pfad = "scripts/configs/inv_data/mailbox";
+	config = config.new(pfad, player_id);
+	if(config.exists(config)) {
+		config.load(config);
+	}
+	item_string = text.item(item);
+	config.set(config, concat("item-", text.number(index)), item_string);
+	config.saveAsync(config);
+}
+
+function mailbox.getFreeIndex(player_id) {
+	pfad = "scripts/configs/inv_data/mailbox";
+	config = config.new(pfad, player_id);
+	if(config.exists(config)) {
+		config.load(config);
+	}
+	for(i = 0; i < 27; i++) {
+		item_string = config.getString(config, concat("item-", text.number(i)), "minecraft:air");
+		if(item_string == "minecraft:air") {
+			return i;
+		}
+	}
+	return -1;
+}
+
+function mailbox.show(to_player, player_id) {
+	pfad = "scripts/configs/inv_data/mailbox";
+	config = config.new(pfad, player_id);
+	if(config.exists(config)) {
+		config.load(config);
+	}
+	inv = inv.new("333333333333333333333333333");
+	for(i = 0; i < 27; i++) {
+		item_string = config.getString(config, concat("item-", text.number(i)), "minecraft:air");
+		item = read.item(item_string);
+		if(item == null) {
+			continue;
+		}
+		inv.setItem(inv, i, item);
+	}
+	inv.open(inv, to_player, concat("Mailbox from ", player.getNameFromId(player_id)));
 }

+ 3 - 0
system/doors.txt

@@ -125,6 +125,9 @@ function door.open(location) {
 }
 
 function door.close(location) {
+	if(location == null) {
+		return;
+	}
 	block.property.setBool(location, $open_prop, false);
 	//half
 	half_value = block.property.getValue(location, $half_prop);

+ 2 - 0
system/gamecenter.txt

@@ -90,6 +90,8 @@ minigame.addSign("snowsign1", true, loc.new(gamesworld, -419, 158, -40), "miniga
 minigame.addSign("snowsign2", true, loc.new(gamesworld, -420, 158, -40), "minigames/snowgame/snowgame", "minigames/snowgame/snowmap2", false);
 //minigame.addSign("damesign1", false, loc.new(gamesworld, -411, 158, -44), "minigames/dame/dame", "minigames/dame/dame_map1", false);
 minigame.addSign("among_us_sign1", true, loc.new(gamesworld, -417, 157, -41), "minigames/among_us/among_us", "minigames/among_us/among_us_map1", false);
+minigame.addSign("jr_sign_4D_1", true, loc.new(gamesworld, -396, 156, -51), "minigames/jumpnrun/4d/4d_j_r_core", "minigames/jumpnrun/4d/4d_j_r_map1", true);
+minigame.addSign("lab_sign_4D_2", true, loc.new(gamesworld, -396, 156, -50), "minigames/jumpnrun/4d/4d_j_r_core", "minigames/jumpnrun/4d/4d_j_r_map2", true);
 setScriptVar("gamesigns", gamesignsmap);
 
 games_inv = inv.new("333333333333333333333333333");

+ 3 - 0
system/perms.txt

@@ -22,6 +22,7 @@ perm.registerGroup(0, "questanswer");
 perm.registerGroup(0, "report");
 perm.registerGroup(0, "uuid");
 perm.registerGroup(0, "mail");
+perm.registerGroup(0, "mailbox");
 perm.registerGroup(0, "ticket");
 perm.registerGroup(0, "plot");
 perm.registerGroup(0, "leave");
@@ -102,6 +103,7 @@ perm.registerGroup(2, "adminshop");
 perm.registerGroup(2, "entities");
 perm.registerGroup(2, "tag");
 perm.registerGroup(2, "team");
+perm.registerGroup(2, "mailbox.other");
 perm.registerGroup(2, "suicide");
 perm.registerGroup(2, "advancement");
 perm.registerGroup(2, "experience");
@@ -350,6 +352,7 @@ perm.registerGroup(12, "inv.ignore");
 perm.registerGroup(12, "inv.see");
 perm.registerGroup(12, "inv.reload");
 perm.registerGroup(12, "feed");
+perm.registerGroup(12, "mailbox.other");
 perm.registerGroup(12, "mute");
 perm.registerGroup(12, "suicide");
 perm.registerGroup(12, "quest");