mloeschenkohl 2 years ago
parent
commit
709f316555
51 changed files with 1448 additions and 519 deletions
  1. 3 1
      .gitignore
  2. 31 0
      jan/human_walk.txt
  3. 50 0
      jan/recoil.txt
  4. 110 0
      jan/rickroll.txt
  5. 20 0
      jan/slime_boots.txt
  6. 16 3
      minigames/among_us/among_us.txt
  7. 25 20
      minigames/bedwars/bedwars.txt
  8. 3 3
      minigames/bedwars/region_bwmap5.txt
  9. 1 1
      minigames/buttons/buttons.txt
  10. 10 1
      minigames/fastbridge/fastbridge.txt
  11. 17 0
      minigames/halma/halma.txt
  12. 1 1
      minigames/hideandseek/hideandseek.txt
  13. 1 1
      minigames/inverting/invertingclmap1.txt
  14. 1 1
      minigames/inverting/invertingclmap2.txt
  15. 1 1
      minigames/inverting/invertingclmap3.txt
  16. 1 1
      minigames/inverting/invertingmap1.txt
  17. 1 1
      minigames/inverting/invertingmap2.txt
  18. 1 1
      minigames/inverting/invertingmap3.txt
  19. 41 33
      minigames/jumpnrun/jr_core.txt
  20. 8 3
      minigames/jumpnrun/jr_map_rooms.txt
  21. 1 1
      minigames/jumpnrun/jumpnrun.txt
  22. 2 0
      minigames/knockfight/knockfight.txt
  23. 5 2
      minigames/ragemode/ragemode.txt
  24. 7 3
      minigames/sammelfieber/sammelfieber.txt
  25. 6 0
      minigames/sammelfieber/sfranked.txt
  26. 6 2
      minigames/shoppingchaos/shoppingchaos.txt
  27. 9 1
      minigames/snowgame/snowgame.txt
  28. 2 0
      startscript.txt
  29. 88 0
      survival/amber.txt
  30. 1 1
      survival/harvest.txt
  31. 1 1
      survival/herobrine.txt
  32. 25 19
      survival/lectern.txt
  33. 4 4
      survival/mobspawning.txt
  34. 259 0
      survival/recipes.txt
  35. 96 281
      survival/survival.txt
  36. 4 1
      system/chat.txt
  37. 23 12
      system/chestshops.txt
  38. 183 47
      system/commands.txt
  39. 2 2
      system/damage.txt
  40. 1 1
      system/doors.txt
  41. 1 1
      system/hawkeye.txt
  42. 0 0
      system/modt_loop.txt
  43. 9 2
      system/perms.txt
  44. 1 0
      system/player_data.txt
  45. 2 2
      system/ranklist.txt
  46. 273 1
      system/skills.txt
  47. 5 0
      system/wartung.txt
  48. 4 29
      test.txt
  49. 0 2
      test5.txt
  50. 10 0
      utils/u_games.txt
  51. 76 32
      utils/u_general.txt

+ 3 - 1
.gitignore

@@ -1,9 +1,11 @@
 meta/
 x509.pem
 configs/
+bugs/
 SnuviTranslator.jar
 Archiv/troll.txt
 test.txt
 test2.txt
 test3.txt
-test4.txt
+test4.txt
+test5.txt

+ 31 - 0
jan/human_walk.txt

@@ -0,0 +1,31 @@
+player = read.player("marvinius");
+human = human.spawn(entity.getLocation(player));
+for(h = 0; h < 5; h++) {
+	yawHuman(human, 0);
+	for(i = 0; i < 20; i++) {
+		waitfor(2);
+		entity.throw(human, 0, 0, 0.2);
+	}
+	yawHuman(human, -90);
+	for(i = 0; i < 20; i++) {
+		waitfor(2);
+		entity.throw(human, 0.2, 0, 0);
+	}
+	yawHuman(human, 180);
+	for(i = 0; i < 20; i++) {
+		waitfor(2);
+		entity.throw(human, 0, 0, -0.2);
+	}
+	yawHuman(human, 90);
+	for(i = 0; i < 20; i++) {
+		waitfor(2);
+		entity.throw(human, -0.2, 0, 0);
+	}
+}
+entity.remove(human);
+
+function yawHuman(human, yaw) {
+	loc = entity.getLocation(human);
+	loc.setYaw(loc, yaw);
+	entity.teleport(human, loc);
+}

+ 50 - 0
jan/recoil.txt

@@ -0,0 +1,50 @@
+event.load("player_toss");
+//-event.load("left_click_air");
+event.load("fishing");
+/*item_list = list.new();
+list.add(item_list, "minecraft:bow");
+list.add(item_list, "minecraft:crossbow");
+list.add(item_list, "km:sling");
+list.add(item_list, "minecraft:trident");
+*/
+level = 2;
+max_level = 5;
+level = max_level+1-level;
+mult = 1;
+
+@wait
+wait();
+/*-if(event == "left_click_air"){
+	mult = -0.25;
+	mult2 = 0;
+	array2 = entity.getMotion(player);
+	if(math,abs(array2[1]) > 0.1){
+		goto("wait");
+	}
+}-*/
+
+name = player.getName(player);
+if(name == "SirTerence7" || name == "Mareeeen"){
+	/*item_type = item.getType(item);
+	if(list.contains(item_list, item_type)){
+		power_level = enchantment.getLevel(enchantment.get("power"), item);
+		multishot_level = enchantment.getLevel(enchantment.get("multishot"), item);
+		piercing_level = enchantment.getLevel(enchantment.get("piercing"), item);
+		impaling_level = enchantment.getLevel(enchantment.get("impaling"), item);
+		strength = 2*power_level + 6*multishot_level + 2*piercing_level + 2*impaling_level + 1;*/
+		strength = 0.225;
+		array = entity.getLook(player);
+		array2 = entity.getMotion(player);
+		if(event == "player_toss"){
+			amount = item.getAmount(item);
+			strength = 0.125 * (1+math.log(amount)/math.log(level));
+		}
+		x = array2[0] - array[0] * mult * strength;
+		y = array2[1] - array[1] * mult * 0.75 * strength;
+		z = array2[2] - array[2] * mult * strength;
+		entity.throw(player, x, y, z);
+		//mult = 1;
+	//}
+}
+goto("wait");
+

+ 110 - 0
jan/rickroll.txt

@@ -0,0 +1,110 @@
+rickIndex = 0;
+sound_category_master = sound.getCategory("master");
+sound_flute = sound.get("block.note_block.flute");
+sound_harp = sound.get("block.note_block.harp");
+sound_pling = sound.get("block.note_block.pling");
+playing = false;
+
+RickRollSounds = list.new();
+list.add(RickRollSounds, math.pow(2, -6 / 12));//6
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, -1 / 12));//11
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, 3 / 12));//15
+list.add(RickRollSounds, math.pow(2, 3 / 12));//15
+list.add(RickRollSounds, math.pow(2, 1 / 12));//13
+list.add(RickRollSounds, math.pow(2, -6 / 12));//6
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, -1 / 12));//11
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, 1 / 12));//13
+list.add(RickRollSounds, math.pow(2, 1 / 12));//13
+list.add(RickRollSounds, math.pow(2, -1 / 12));//11
+list.add(RickRollSounds, math.pow(2, -2 / 12));//10
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, -6 / 12));//6
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, -1 / 12));//11
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, -1 / 12));//11
+list.add(RickRollSounds, math.pow(2, 1 / 12));//13
+list.add(RickRollSounds, math.pow(2, -2 / 12));//10
+list.add(RickRollSounds, math.pow(2, -4 / 12));//8
+list.add(RickRollSounds, math.pow(2, -6 / 12));//6
+list.add(RickRollSounds, math.pow(2, -6 / 12));//6
+list.add(RickRollSounds, math.pow(2, -6 / 12));//6
+list.add(RickRollSounds, math.pow(2, 1 / 12));//13
+list.add(RickRollSounds, math.pow(2, -1 / 12));//11
+//6,8,11,8,15,15,13,6,8,11,8,13,13,11,10,8,6,8,11,8,11,13,10,8,6,6,6,13,11
+
+RickRollSoundDists = list.new();
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 12);//6
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 8);//4
+list.add(RickRollSoundDists, 4);//2
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 2);//1
+list.add(RickRollSoundDists, 4);//2
+list.add(RickRollSoundDists, 4);//2
+list.add(RickRollSoundDists, 6);//3
+list.add(RickRollSoundDists, 8);//4
+list.add(RickRollSoundDists, 2);//1
+//2,2,2,2,2,6,6,12,2,2,2,2,6,6,6,2,6,2,2,2,2,8,4,6,2,4,4,6,8
+
+event.load("player_toss");
+List_Max = list.getSize(RickRollSoundDists);
+
+@wait
+wait();
+name = player.getName(player);
+if(name == "SirTerence7"){
+	if(!playing){
+		playing = true;
+		rickIndex = 0;
+		goto("Music_play");
+	}
+}
+goto("wait");
+
+@Music_play
+if(rickIndex < List_Max) {
+	pitch = list.getIndex(RickRollSounds, rickIndex);
+	RickSound(pitch);
+	ticks = 2 + list.getIndex(RickRollSoundDists, rickIndex);
+	sgoto(ticks, "Music_play");
+}
+rickIndex++;
+playing = false;
+goto("wait");
+
+function RickSound(pitch) {
+	//iter = list.iterator(players.toList());
+	//while(hasNext(iter)) {
+		//online_player = player.get(next(iter));
+		online_player = player.get(player.getUuid("SirTerence7"));
+		if(online_player == null) {
+			continue;
+		}
+		sound.spawnForPlayer(online_player, $sound_flute, $sound_category_master, 1, pitch);
+		sound.spawnForPlayer(online_player, $sound_harp, $sound_category_master, 1, pitch);
+		sound.spawnForPlayer(online_player, $sound_pling, $sound_category_master, 1, pitch);
+	//}
+}

+ 20 - 0
jan/slime_boots.txt

@@ -0,0 +1,20 @@
+event.load("living_pre_hurt");
+
+@wait
+wait();
+//funktioniert leider nicht, da prehurt zu spät kommt
+
+if(isPlayer(living_entity)){
+	if(player.getName(living_entity) == "SirTerence7"){
+		damage_type = damage.getType(damage_source);
+		if(damage_type == "fall"){
+			cancel = true;
+			array = entity.getMotion(living_entity);
+			x = array[0];
+			y = math.abs(array[1]);
+			z = array[2];
+			entity.throw(living_entity, x, y, z);
+		}
+	}
+}
+goto("wait");

+ 16 - 3
minigames/among_us/among_us.txt

@@ -1,9 +1,6 @@
 /*
 TODO
 
-? bug: impostor und task partikel verschwinden nach sabotagen
-? bug: manchmal instant meeting skip
-
 --- Version 2 ---
 Hüte
 Door Closing
@@ -3164,6 +3161,11 @@ if(key == 4) {
 		human = player.getTargetEntity(player, 4, "me.km.entities.EntityHuman");
 		if(human != null) {
 			p_uuid = map.get(cam_map_4, human);
+			if(p_uuid == null) {
+				entity.remove(human);
+				msg.prefix(player, gamename, concat("Fehlerhaftes Human-Entity entfernt."));
+				goto("checkgame");
+			}
 			p = player.get(p_uuid);
 			//Angeschauten Spieler töten
 			cam.leave(p);
@@ -5396,12 +5398,18 @@ iter = list.iterator(impostors_list);
 while(hasNext(iter)) {
 	p_uuid = next(iter);
 	p_name = player.getName(p_uuid);
+	p = player.get(p_uuid);
 	string = concat(amongus.getPlayerColorCode(p_uuid), p_name);
 	if(imp_string == "") {
 		imp_string = string;
 	} else {
 		imp_string = concat(imp_string, ", ", string);
 	}
+	if(winners == "§cImpostors") {
+		money.addBoost(p, 128);
+	} else {
+		money.addBoost(p, 32);
+	}
 }
 iter = list.iterator(player_list);
 while(hasNext(iter)) {
@@ -5411,6 +5419,11 @@ while(hasNext(iter)) {
 	msg.prefix(p, $gamename, concat("§4Impostors: §r", imp_string));
 	inv.close(p);
 	player.mute(p, false);
+	if(winners == "§bCrewmates") {
+		money.addBoost(p, 128);
+	} else {
+		money.addBoost(p, 32);
+	}
 }
 //Building-Perms wieder geben
 for(i = 0; i < list.getSize(removed_perms); i++) {

+ 25 - 20
minigames/bedwars/bedwars.txt

@@ -1,5 +1,6 @@
 rankingtable = "bwranks";
 game_short = "bw";
+game_tab = "§bBW";
 specific_lobby_handling = true;
 no_core_reset = true;
 
@@ -283,7 +284,9 @@ for(i = 0; i < list.getSize(player_list); i++) {
 	p = player.get(list.getIndex(player_list, i));
 	p_name = player.getName(p);
 	tempteam = map.get(players, p_name);
-	player.action(p, concat(map.get(colorcodes, tempteam), "Team ", map.get(teamcolortext2, tempteam)));
+	color = bedwars.getTeamColor(p);
+	player.action(p, concat(color, "Team ", map.get(teamcolortext2, tempteam)));
+	minigame.setTabName(p, game_tab, color);
 }
 
 @checkgame
@@ -310,11 +313,14 @@ if(text.class(entity) == "EntityHuman") {
 goto("checkgame");
 
 @inv_click
-cancel = true;
 item_type = item.getType(item);
 if(item_type == "minecraft:air") {
 	goto("checkgame");
 }
+factor = 1;
+if(click_type == "QUICK_MOVE") {
+	factor = 8;
+}
 shopmenu = map.get(shopmenus, player.getId(player));
 if(inv_slot < 9) {
 	for(slot = 9; slot < 36; slot++) {
@@ -354,7 +360,8 @@ if(inv_slot < 9) {
 if(item_type == "km:coin_copper" || item_type == "km:coin_silver" || item_type == "km:coin_gold" || item_type == "minecraft:air") {
 	goto("checkgame");
 }
-priceitem = inv.getItem(shopmenu, inv_slot + 9);
+priceitem = item.clone(inv.getItem(shopmenu, inv_slot + 9));
+item.setAmount(priceitem, item.getAmount(priceitem) * factor);
 if(player.getItemAmount(player, false, priceitem) < item.getAmount(priceitem)) {
 	goto("checkgame");
 }
@@ -364,28 +371,18 @@ if(item_type == "minecraft:red_bed") {
 }
 if(item_type == "minecraft:leather_helmet" || item_type == "minecraft:leather_leggings" || item_type == "minecraft:leather_boots") {
 	clothescolor = map.get(clothescode, map.get(players, player_name));
-	temp = player.giveItem(player, read.item(concat("{id:\"", item_type, "\",Count:1b,tag:{Enchantments:[{lvl:1s,id:\"minecraft:protection\"},{lvl:1s,id:\"minecraft:unbreaking\"}],display:{color:", clothescolor, "}}}")));
-	if(item.getType(temp) != "minecraft:air") {
-		item.drop(entity.getLocation(player), temp);
-	}
-	inv.update(player);
-	goto("checkgame");
-}
-if(item_type == "minecraft:smooth_sandstone") {
+	item = read.item(concat("{id:\"", item_type, "\",Count:1b,tag:{Enchantments:[{lvl:1s,id:\"minecraft:protection\"},{lvl:1s,id:\"minecraft:unbreaking\"}],display:{color:", clothescolor, "}}}"));
+} elseif(item_type == "minecraft:smooth_sandstone") {
 	team = map.get(players, player_name);
 	item_type = map.get(concrete_types, team);
 	item_amount = item.getAmount(inv.getItem(shopmenu, inv_slot));
-	temp = player.giveItem(player, read.item(item_type, item_amount));
-	if(item.getType(temp) != "minecraft:air") {
-		item.drop(entity.getLocation(player), temp);
-	}
-	inv.update(player);
-	goto("checkgame");
+	item = read.item(item_type, item_amount);
 }
-temp = player.giveItem(player, item);
-if(item.getType(temp) != "minecraft:air") {
-	item.drop(entity.getLocation(player), temp);
+if(click_type == "QUICK_MOVE") {
+	item = item.clone(item);
+	item.setAmount(item, item.getAmount(item) * factor);
 }
+player.safeGiveItem(player, item);
 inv.update(player);
 goto("checkgame");
 
@@ -757,6 +754,7 @@ if(map.get(teambedbroken, tempplayerteam)) {
 goto("checkgame");
 
 @nobed
+money.addBoost(player, 32);
 minigame.speakAll(gamename, concat(tempcolor, player_name, " §ewoke up from his dream."));
 showstats(player, false, false);
 script = script.getFromId(script_id);
@@ -860,6 +858,7 @@ winningteam = map.get(teamidtolist, list.getIndex(allteams, 0));
 for(i = 0; i < list.getSize(winningteam); i++) {
 	player_name = list.getIndex(winningteam, i);
 	player = read.player(player_name);
+	money.addBoost(player, 128);
 	msg.prefix(player, gamename, "§eYou won this game!");
 	showstats(player, true, true);
 	script = script.getFromId(script_id);
@@ -996,3 +995,9 @@ function setShopmenu9(shopmenu) {
 	inv.setItem(shopmenu, 34, read.item("km:coin_gold", 3));
 	inv.setItem(shopmenu, 35, read.item("km:coin_silver", 3));
 }
+
+function bedwars.getTeamColor(player) {
+	team = map.get($players, player.getName(player));
+	color = map.get($colorcodes, team);
+	return color;
+}

+ 3 - 3
minigames/bedwars/region_bwmap5.txt

@@ -26,9 +26,9 @@ list.add(foot_bed_loc, loc.new(gamesworld, -5000, 51, -4938));
 
 head_bed_loc = list.new(); //Liste aller Locs Kopfteile der Betten
 list.add(head_bed_loc, loc.new(gamesworld, -5063, 51, -5000));
-list.add(head_bed_loc, loc.new(gamesworld, -4937, 47, -5000));
-list.add(head_bed_loc, loc.new(gamesworld, -5000, 47, -5063));
-list.add(head_bed_loc, loc.new(gamesworld, -5000, 47, -4937));
+list.add(head_bed_loc, loc.new(gamesworld, -4937, 51, -5000));
+list.add(head_bed_loc, loc.new(gamesworld, -5000, 51, -5063));
+list.add(head_bed_loc, loc.new(gamesworld, -5000, 51, -4937));
 
 bed_facing = map.new(); //Map in welche Richtung das Bett schaut
 map.add(bed_facing, 0, "west");

+ 1 - 1
minigames/buttons/buttons.txt

@@ -106,7 +106,7 @@ if(diff != null) {
 	msg(player, " §e- §rBeat own record by §e", text.number(diff));
 }
 minigame.statsLine(player, "§e", "Played games", text.number(playedgames));
-money.addBoost(player, math.round(clicked / 4));
+money.addBoost(player, math.round(clicked));
 
 @player_giveup
 @player_logout

+ 10 - 1
minigames/fastbridge/fastbridge.txt

@@ -127,7 +127,16 @@ if(seconds == 0) {
     if(minutes == -1) {
 		sortPoints();
 		array = list.getIndex(points, 0);
-		wincore(player.get(array[0]));
+		winner = player.get(array[0]);
+		for(i = 0; i < list.getSize(player_list); i++) {
+			p = player.get(list.getIndex(player_list, i));
+			if(p == winner) {
+				money.addBoost(p, 64);
+			} else {
+				money.addBoost(p, 16);
+			}
+		}
+		wincore(winner);
 	}
 } else {
     seconds--;

+ 17 - 0
minigames/halma/halma.txt

@@ -1,5 +1,6 @@
 rankingtable = "halmaranks";
 game_short = "halma";
+game_tab = "§eHalma";
 
 teams = map.new();
 block_click_catcher = set.new();
@@ -69,6 +70,8 @@ for(i = 0; i < list.getSize(player_list); i++) {
 		entry = next(iter);
 		block.set(entry, concat(banner_type, "[rotation=", rotation, "]"));
 	}
+	color = map.get(colors_map, i);
+	minigame.setTabName(player, game_tab, color);
 }
 
 next_player = player.get(list.getIndex(player_list, math.random(0, list.getSize(player_list) - 1)));
@@ -77,6 +80,12 @@ jump_moves = false;
 
 @wait
 wait();
+if(event == "living_pre_hurt") {
+	if(!isPlayer(living_entity)) {
+		goto("wait");
+	}
+	player = living_entity;
+}
 if(player.hasMinigameId(player, script_id)) {
 	ignoreGoto(event);
 }
@@ -190,6 +199,14 @@ while(hasNext(iter)) {
 }
 if(won) {
 	winner = player;
+	for(i = 0; i < list.getSize(player_list); i++) {
+		p = player.get(list.getIndex(player_list, i));
+		if(p == winner) {
+			money.addBoost(p, 128);
+		} else {
+			money.addBoost(p, 32);
+		}
+	}
 	goto("win");
 }
 token_loc = null;

+ 1 - 1
minigames/hideandseek/hideandseek.txt

@@ -443,7 +443,7 @@ for(i = 0; i < list.getSize(player_list); i++) {
 	msg.prefix(p, gamename, concat("§6", winnername, "§r has won."));
 	player.tpGamesLobby(p);
 	resetplayer(p);
-	money.addBoost(p, math.round(map.get(points, p_uuid) / 3));
+	money.addBoost(p, math.round(map.get(points, p_uuid)));
 	
 	p_id = player.getId(p);
 	last_record = ranking.getPoints(rankingtable, p_id);

+ 1 - 1
minigames/inverting/invertingclmap1.txt

@@ -10,4 +10,4 @@ gamesignsmap = getScriptVar("gamesigns");
 gamesignloc = map.get(gamesignsmap, "invertingclsign1");
 map = "5x5cl";
 maxplayers = 1;
-money = 5;
+money = 50;

+ 1 - 1
minigames/inverting/invertingclmap2.txt

@@ -10,4 +10,4 @@ gamesignsmap = getScriptVar("gamesigns");
 gamesignloc = map.get(gamesignsmap, "invertingclsign2");
 map = "7x7cl";
 maxplayers = 1;
-money = 10;
+money = 100;

+ 1 - 1
minigames/inverting/invertingclmap3.txt

@@ -10,4 +10,4 @@ gamesignsmap = getScriptVar("gamesigns");
 gamesignloc = map.get(gamesignsmap, "invertingclsign3");
 map = "10x10cl";
 maxplayers = 1;
-money = 20;
+money = 200;

+ 1 - 1
minigames/inverting/invertingmap1.txt

@@ -9,4 +9,4 @@ tploc = loc.new(gamesworld, 2003.5, 101, 1996.5);
 gamesignloc = minigame.getSignLoc("invertingsign1");
 map = "5x5";
 maxplayers = 1;
-money = 5;
+money = 50;

+ 1 - 1
minigames/inverting/invertingmap2.txt

@@ -10,4 +10,4 @@ gamesignsmap = getScriptVar("gamesigns");
 gamesignloc = map.get(gamesignsmap, "invertingsign2");
 map = "7x7";
 maxplayers = 1;
-money = 10;
+money = 100;

+ 1 - 1
minigames/inverting/invertingmap3.txt

@@ -10,4 +10,4 @@ gamesignsmap = getScriptVar("gamesigns");
 gamesignloc = map.get(gamesignsmap, "invertingsign3");
 map = "10x10";
 maxplayers = 1;
-money = 20;
+money = 200;

+ 41 - 33
minigames/jumpnrun/jr_core.txt

@@ -28,7 +28,20 @@ if(player.hasMinigameId(player, script_id)) {
 goto("wait");
 
 @player_join
-jumpstage = jr.getRunModule(player);
+amount_checkpoints = list.getSize(spawn_locs) - 1;
+single_uuid = player.getUuid(player);
+jr.setStarttime();
+all_modules = jr.getModule(player);
+if(all_modules < amount_checkpoints) {
+	jumpstage = all_modules;
+	run_time = jr.getTime(player);
+	jr.setLoopTime(run_time);
+	jr.setRunTime(player, run_time);
+} else {
+	jumpstage = jr.getRunModule(player);
+	jr.setLoopTime(jr.getRunTime(player));
+}
+
 checkpoints = list.new();
 for(i = 0; i < list.getSize(spawn_locs); i++) {
 	loc = list.getIndex(spawn_locs, i);
@@ -43,15 +56,6 @@ for(i = 0; i < list.getSize(spawn_locs); i++) {
 	}
 	event.addMoveData(b_loc, b_loc_2, -1, -1, player);
 }
-
-single_uuid = player.getUuid(player);
-jr.setStarttime();
-all_modules = jr.getModule(player);
-if(all_modules < 20) {
-	jr.setLoopTime(jr.getTime(player));
-} else {
-	jr.setLoopTime(jr.getRunTime(player));
-}
 player.blockCommands(player);
 entity.teleport(player, list.getIndex(spawn_locs, jumpstage));
 player.clearInventory(player);
@@ -81,10 +85,12 @@ if(key == 1) {
 	living.setHealth(player, 20);
 	jr.teleportModule(player, jumpstage);
 	entity.setBurning(player, 0);
+	jr.setLoopTime(jr.getRunTime(player));
+	jr.setStarttime();
 	goto("wait");
 }
 if(key == 2) {
-	for(i = 1; i <= jumpstage; i++) {
+	for(i = 1; i < amount_checkpoints; i++) {
 		location1 = list.getIndex(checkpoints, i);
 		location2 = loc.mod(location1, 1, 1, 1);
 		event.addMoveData(location1, location2, -1, -1, player);
@@ -131,35 +137,42 @@ loc = loc.new(gamesworld, x, y, z);
 index = list.getIndexOf(checkpoints, loc);
 if(index > jumpstage) {
 	player.action(player, "§aCheckpoint gesetzt");
+	money.addBoost(player, 10);
 	msg.prefix(player, "§6Commands", concat("§r", text.number(index), ".Checkpoint erreicht"));
 	jumpstage = index;
 	gosub("stage_specific");
 }
 //Alltime first try or already done?
 all_modules = jr.getModule(player);
-if(all_modules == 20) {
+if(all_modules == amount_checkpoints) {
 	alltime_first_try = false;
 } else {
 	alltime_first_try = true;
 }
-jr.setEndtime();
-time = endtime - starttime;
-run_time = jr.getRunTime(player) + time;
-jr.setRunTime(player, run_time);
+run_time = jr.addRunTime(player, time.getMillis() - starttime);
 jr.setRunModule(player, jumpstage);
 jr.setStarttime();
 
-if(alltime_first_try) {
-	jr.setModuleAndTime(player, jumpstage, run_time);
+all_time = jr.getTime(player);
+//if(alltime_first_try) {
+	if(jumpstage > all_modules) {
+		jr.setModuleAndTime(player, jumpstage, run_time);
+		goto("wait");
+	}
+	if(jumpstage == all_modules) {
+		if(all_time == 0 || run_time < all_time) {
+			jr.setModuleAndTime(player, jumpstage, run_time);
+			msg.prefix(player, gamename, "Neuer Rekord!!!");
+		}
+	}
 	goto("wait");
-}
-if(jumpstage == 20) {
-	all_time = jr.getTime(player);
+//}
+/*if(jumpstage == amount_checkpoints) {
 	if(all_time == 0 || run_time < all_time) {
 		jr.setModuleAndTime(player, jumpstage, run_time);
 		msg.prefix(player, gamename, "Neuer Rekord!!!");
 	}
-}
+}*/
 goto("wait");
 
 @loop
@@ -186,12 +199,6 @@ player.unblockCommands(player);
 
 all_time = jr.getTime(player);
 all_module = jr.getModule(player);
-
-jr.setEndtime();
-time = endtime - starttime;
-run_time = jr.getRunTime(player) + time;
-jr.setRunTime(player, run_time);
-
 minigame.statsHeader(player, gamename, "§e");
 minigame.statsLine(player, "§e", "Checkpoints", text.number(all_module));
 minigame.statsLine(player, "§e", "Time", time.getClockString(all_time / 1000));
@@ -213,11 +220,6 @@ function jr.setLoopTime(time) {
 function jr.setStarttime() {
 	$starttime = time.getMillis();
 }
-
-function jr.setEndtime() {
-	$endtime = time.getMillis();
-}
-
 //THIS RUN
 function jr.setRunModule(player_or_id, module) {
 	config = playerdata.getGames(player_or_id);
@@ -230,6 +232,12 @@ function jr.getRunModule(player_or_id) {
 	return config.getDouble(config, $module_tag_run, 0);
 }
 
+function jr.addRunTime(player_or_id, time) {
+	run_time = jr.getRunTime(player_or_id) + time;
+	jr.setRunTime(player_or_id, run_time);
+	return run_time;
+}
+
 function jr.setRunTime(player_or_id, time) {
 	config = playerdata.getGames(player_or_id);
 	config.set(config, $time_tag_run, time);

+ 8 - 3
minigames/jumpnrun/jr_map_rooms.txt

@@ -14,16 +14,21 @@ list.add(spawn_locs, loc.new(gamesworld, 1991.5, 107, 49.5, 0.0001, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1998.5, 101, 55.5, 90, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1991.5, 108, 57.5, 0.0001, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1990.5, 113, 62.5, 90, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 1973.5, 113, 64.5, 90, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1966.5, 99, 55.5, 180, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1969.5, 103, 18.5, 180, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1983.5, 107, -42.5, -90, 0.0001));
-list.add(spawn_locs, loc.new(gamesworld, 1998.5, 106, -44.5, 180, 0.0001));
-list.add(spawn_locs, loc.new(gamesworld, 2013.5, 112, -58.5, 180, 0.0001)); //10.Checkpoint
+list.add(spawn_locs, loc.new(gamesworld, 1998.5, 106, -44.5, 180, 0.0001)); //10. Checkpoint
+list.add(spawn_locs, loc.new(gamesworld, 2002.5, 116, -48.5, 180, 0.0001)); 
+list.add(spawn_locs, loc.new(gamesworld, 2006.5, 118, -39.5, 90, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 2020.5, 112, -27.5, 180, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 2019.5, 118, -50.5, 180, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 2013.5, 112, -58.5, 180, 0.0001)); 
 list.add(spawn_locs, loc.new(gamesworld, 2004.5, 116, -60.5, 90, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1987.5, 117, -65.5, 0.0001, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1975.5, 115, -61.5, 180, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 1979.5, 121, -70.5, -90, 0.0001));
-list.add(spawn_locs, loc.new(gamesworld, 1996.5, 119, -98.5, -90, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 1996.5, 119, -98.5, -90, 0.0001)); //20. Checkpoint 
 list.add(spawn_locs, loc.new(gamesworld, 2014.5, 119, -102.5, 180, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 2021.5, 120, -75.5, -90, 0.0001));
 list.add(spawn_locs, loc.new(gamesworld, 2034.5, 115, -88.5, -90, 0.0001));

+ 1 - 1
minigames/jumpnrun/jumpnrun.txt

@@ -142,7 +142,7 @@ function showStats(player, points) {
 	}
 	minigame.statsLine(player, "§e", "Your Record", text.number($player_record));
 	minigame.statsLine(player, "§e", "Server Record", text.number($server_record));
-	money.addBoost(player, math.round(points / 5));
+	money.addBoost(player, math.round(points));
 }
 
 function resetBlocks(old_loc, new_loc) {

+ 2 - 0
minigames/knockfight/knockfight.txt

@@ -99,6 +99,7 @@ if(damage_type == "outOfWorld") {
 	gosub("updatedisplay");
 	if(new_lifes == 0) {
 		minigame.speakAll(gamename, concat("§6", player_name, " §rhas been eliminated."));
+		money.addBoost(player, 32);
 		goto("leavegame");
 	}
 }
@@ -174,6 +175,7 @@ gosub("updatedisplay");
 showstats(player, false);
 if(list.getSize(player_list) < minplayers) {
 	winner = player.get(list.getIndex(player_list, 0));
+	money.addBoost(winner, 128);
 	showstats(winner, true);
 	minigame.kickPlayer(script, winner);
 	minigame.term(script, gamesignloc);

+ 5 - 2
minigames/ragemode/ragemode.txt

@@ -424,8 +424,10 @@ for(i = 0; i < list.getSize(player_list); i++) {
 		winningtext = "Yes";
 		wongames++;
 		minigame.setWon(p, "rm", wongames);
+		money.addBoost(p, 128);
 	} else {
 		winningtext = "No";
+		money.addBoost(p, 32);
 	}
 	
 	msg.prefix(p, gamename, concat("§8", winner_name, " §ehas won §cRageMode."));
@@ -543,19 +545,20 @@ function giveRmInventory(player) {
 	inv = getRmInventory(player);
 	@tryagain
 	counter = 0;
+	player_inv = player.getInv(player);
 	for(i = 0; i <= 8; i++) {
 		item = inv.getItem(inv, i);
 		if(item.getType(item) == "minecraft:air") {
 			counter++;
 		}
-		player.setInvSlot(player, i, item);
+		inv.setItem(player_inv, i, item);
 	}
 	if(counter != 5) {
 		inv = saveDefaultInventory(player);
 		msg.prefix(player, $gamename, "§eUngültiges Inventar erkannt. Default-Inventar wird verwendet.");
 		goto("tryagain");
 	}
-	player.setInvSlot(player, 9, $arrow);
+	inv.setItem(player_inv, 9, $arrow);
 }
 
 function showRmInventory(player) {

+ 7 - 3
minigames/sammelfieber/sammelfieber.txt

@@ -135,6 +135,12 @@ minigame.speakAll(gamename, "Drop and collect not counted items again.");
 
 @wait
 wait();
+if(event == "living_pre_hurt") {
+	if(!isPlayer(living_entity)) {
+		goto("wait");
+	}
+	player = living_entity;
+}
 if(player.hasMinigameId(player, script_id)) {
 	ignoreGoto(event);
 }
@@ -162,9 +168,7 @@ if(action == "right") {
 goto("wait");
 
 @living_pre_hurt
-if(isPlayer(living_entity)) {
-	cancel = true;
-}
+cancel = true;
 goto("wait");
 
 @block_break

+ 6 - 0
minigames/sammelfieber/sfranked.txt

@@ -44,6 +44,12 @@ minigame.speakAll(gamename, "Drop and collect not counted items again.");
 
 @wait
 wait();
+if(event == "living_pre_hurt") {
+	if(!isPlayer(living_entity)) {
+		goto("wait");
+	}
+	player = living_entity;
+}
 if(player.hasMinigameId(player, script_id)) {
 	ignoreGoto(event);
 }

+ 6 - 2
minigames/shoppingchaos/shoppingchaos.txt

@@ -1,5 +1,6 @@
 rankingtable = "shoppingranks";
 game_short = "sc";
+game_tab = "§eSC";
 specific_lobby_handling = true;
 no_core_reset = true;
 
@@ -273,7 +274,10 @@ while(list.getSize(waiters) != 0) {
 	list.add(teamlist, p_uuid);
 	list.remove(waiters, p_uuid);
 	map.add(players, p_uuid, team);
-	entity.setName(player.get(p_uuid), concat(map.get(colorcodes, team), player.getName(p_uuid)));
+	color = map.get(colorcodes, team);
+	p = player.get(p_uuid);
+	entity.setName(p, concat(color, player.getName(p_uuid)));
+	minigame.setTabName(p, game_tab, color);
 }
 
 event.load("player_post_respawn");
@@ -394,7 +398,7 @@ if(minutes == 0 && seconds == 0) {
 			} else {
 				team_string = concat(team_string, " ", player.getName(p_uuid));
 			}
-			money.addBoost(player.getId(p_uuid), math.round(teampoints / 3));
+			money.addBoost(player.getId(p_uuid), math.round(teampoints) * 2);
 		}
 		minigame.speakAll(gamename, concat(text.number(teampoints), map.get(colorcodes, team), " (", team_string, ")"));
 	}

+ 9 - 1
minigames/snowgame/snowgame.txt

@@ -1,5 +1,6 @@
 rankingtable = "snowranks";
 game_short = "snow";
+game_tab = "§6SNOW";
 specific_lobby_handling = true;
 no_core_reset = true;
 gamename = "§6SnowGame";
@@ -146,10 +147,12 @@ for(i = 0; i < list.getSize(player_list); i++) {
 	player.setGamemode(p, "survival");
 	player.setFly(p, false);
 	entity.teleport(p, map.get(spawnlocs, team));
-	player.action(p, concat(map.get(colorcodes, team), "Team ", map.get(teamcolortext2, team)));
+	color = map.get(colorcodes, team);
+	player.action(p, concat(color, "Team ", map.get(teamcolortext2, team)));
 	stacks.clear(p);
 	setStackIcons(p);
 	equipPlayer(p, team);
+	minigame.setTabName(p, game_tab, color);
 }
 sgoto(40, "loop");
 
@@ -343,6 +346,11 @@ function kickteam(team, show_time, won) {
 		showstats(p, show_time, won);
 		script = script.getFromId($script_id);
 		minigame.kickplayer(script, p);
+		if(won) {
+			money.addBoost(p, 128);
+		} else {
+			money.addBoost(p, 32);
+		}
 	}
 }
 

+ 2 - 0
startscript.txt

@@ -24,6 +24,7 @@ script.startNamed("Voxel", "system/voxel");
 script.startNamed("Mobspawning", "survival/mobspawning");
 script.startNamed("Fixitems", "utils/u_error", "system/fixitems");
 script.startNamed("Trader", "utils/u_error", "survival/trader");
+script.startNamed("Amber", "utils/u_error", "survival/amber", "utils/u_general");
 script.startNamed("Sitting", "utils/u_error", "system/sitting", "utils/u_general");
 script.startNamed("Ticket", "utils/u_error", "system/tickets", "utils/u_general");
 script.startNamed("Mails", "utils/u_error", "system/mailsystem", "utils/u_general");
@@ -35,6 +36,7 @@ script.startNamed("Story", "utils/u_error", "story/story", "utils/u_general");
 script.startNamed("QuestsAdmont", "utils/u_error", "story/admont/core", "utils/u_general", "utils/u_quest");
 script.startNamed("QuestsSchiffbruch", "utils/u_error", "story/schiffbruch/core", "utils/u_general", "utils/u_quest");
 script.startNamed("Workberries", "system/workberries");
+script.startNamed("Recipes", "survival/recipes");
 script.startNamed("Timber", "utils/u_error", "survival/timber", "utils/u_general");
 script.startNamed("Loom", "utils/u_error", "survival/loom", "utils/u_general");
 script.startNamed("Lectern", "utils/u_error", "survival/lectern", "utils/u_general");

+ 88 - 0
survival/amber.txt

@@ -0,0 +1,88 @@
+event.load("entity_click");
+event.load("inv_click");
+
+amber = item.getAmber();
+air = item.getAir();
+arrow_right = read.item("km:arrow_right", 1, "§fConvert");
+prefix_commands = "§6Commands";
+
+slot_head = read.slot("head");
+slot_chest = read.slot("chest");
+slot_legs = read.slot("legs");
+slot_feet = read.slot("feet");
+
+tag_helmet = item.getTag("km:helmet");
+tag_chestplate = item.getTag("km:chestplate");
+tag_leggings = item.getTag("km:leggings");
+tag_boots = item.getTag("km:boots");
+
+msg("dev", "§bAmber §rloaded.");
+@wait
+wait();
+if(event == "entity_click") {
+	if(hand == "OFF_HAND") {
+		goto("wait");
+	}
+	entity_type = entity.getType(entity);
+	if(entity_type != "human") {
+		goto("wait");
+	}
+	entity_name = entity.getName(entity);
+	if(entity_name != "Ludwig") {
+		goto("wait");
+	}
+	inv = inv.new("011020100");
+	inv.setItem(inv, 2, arrow_right);
+	inv.open(inv, player, "Gemstone-Anvil");
+	goto("wait");
+}
+if(event == "inv_click") {
+	if(inv_slot == 2) {
+		//Ziel-slot muss leer sein
+		item = inv.getItem(inv, 3);
+		if(item.getType(item) != "minecraft:air") {
+			msg.prefix(player, prefix_commands, "Third slot needs to be empty.");
+			goto("wait");
+		}
+		//Quell-slots müssen belegt sein
+		item_0 = inv.getItem(inv, 0);
+		item_type = item.getType(item_0);
+		if(item_type == "minecraft:air") {
+			msg.prefix(player, prefix_commands, "First slot is empty.");
+			goto("wait");
+		}
+		item_1 = inv.getItem(inv, 1);
+		item_type = item.getType(item_1);
+		if(item_type == "minecraft:air") {
+			msg.prefix(player, prefix_commands, "Second slot is empty.");
+			goto("wait");
+		}
+		//which gemstone
+		if(item.isAmber(item_1)) {
+			if(item.hasTag(tag_helmet, item_0)) {
+				slot = slot_head;
+			} elseif(item.hasTag(tag_chestplate, item_0)) {
+				slot = slot_chest;
+			} elseif(item.hasTag(tag_leggings, item_0)) {
+				slot = slot_legs;
+			} elseif(item.hasTag(tag_boots, item_0)) {
+				slot = slot_feet;
+			} else {
+				msg.prefix(player, prefix_commands, "First slot is not an armor part.");
+				goto("wait");
+			}
+			if(item.getAmount(item_0) != 1) {
+				msg.prefix(player, prefix_commands, "Only one armor part allowed.");
+				goto("wait");
+			}
+			item.addAttribute(item_0, "generic.movement_speed", slot, 0.02, 0);
+			inv.setItem(inv, 0, air) ;
+			inv.setItem(inv, 1, air) ;
+			inv.setItem(inv, 3, item_0);
+			inv.update(player);
+			goto("wait");
+		}
+		msg.prefix(player, prefix_commands, "Second slot needs to be one Amber.");
+	}
+}
+goto("wait");

+ 1 - 1
survival/harvest.txt

@@ -25,7 +25,7 @@ if(event == "block_drop") {
 	loc = entity.getLocation(player);
 }
 world_name = world.getName(loc.getWorld(loc));
-if(word.isSurvName(world_name)) {
+if(world.isSurvName(world_name)) {
 	ignoreGoto(event);
 }
 goto("wait");

+ 1 - 1
survival/herobrine.txt

@@ -35,7 +35,7 @@ if(event == "human_hurt") {
 if(event == "block_break") {
 	player_loc = entity.getLocation(player);
 	world_name = world.getName(loc.getWorld(player_loc));
-	if(!word.isSurvName(world_name)) {
+	if(!world.isSurvName(world_name)) {
 		goto("wait");
 	}
 	r = math.random(1, 2000);

+ 25 - 19
survival/lectern.txt

@@ -41,9 +41,6 @@ msg("dev", "§bLectern §rloaded.");
 wait();
 loc = entity.getLocation(player);
 world_name = world.getName(loc.getWorld(loc));
-if(world.isCreativeName(world_name)) {
-	goto("wait");
-}
 ignoreGoto(event);
 goto("wait");
 
@@ -186,11 +183,14 @@ if(lectern_action == 0) {
 		level = map.getValue(element);
 		betrag += level * 100 + extra;
 	}
-	if(!hasEnoughMoney(player.getId(player), betrag)) {
-		msg.prefix(player, prefix_money, concat("Not enough snuvis in inventory. This action costs ", text.number(betrag), " snuvis."));
-		goto("wait");
+	
+	if(!world.isCreativeName(world_name)) {
+		if(!hasEnoughMoney(player.getId(player), betrag)) {
+			msg.prefix(player, prefix_money, concat("Not enough snuvis in inventory. This action costs ", text.number(betrag), " snuvis."));
+			goto("wait");
+		}
+		subMoney(player, betrag);
 	}
-	subMoney(player, betrag);
 	
 	enchantment.writeToItem(map1, item1);
 	item.entity.set(item_entity1, item.clone(item1));
@@ -212,11 +212,13 @@ if(lectern_action == 0) {
 	
 	map_size = map.getSize(map2);
 	betrag = 100 * map_size;
-	if(!hasEnoughMoney(player.getId(player), betrag)) {
-		msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
-		goto("wait");
+	if(!world.isCreativeName(world_name)) {
+		if(!hasEnoughMoney(player.getId(player), betrag)) {
+			msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
+			goto("wait");
+		}
+		subMoney(player, betrag);
 	}
-	subMoney(player, betrag);
 	
 	item1 = read.item("minecraft:enchanted_book");
 	enchantment.writeToItem(map2, item1);
@@ -245,11 +247,13 @@ if(lectern_action == 0) {
 	map.remove(map2, key);
 	
 	betrag = 100 * value;
-	if(!hasEnoughMoney(player.getId(player), betrag)) {
-		msg.prefix(player, prefix_money, concat("Not enough snuvis in your ccount. This action costs ", text.number(betrag), " snuvis."));
-		goto("wait");
+	if(!world.isCreativeName(world_name)) {
+		if(!hasEnoughMoney(player.getId(player), betrag)) {
+			msg.prefix(player, prefix_money, concat("Not enough snuvis in your ccount. This action costs ", text.number(betrag), " snuvis."));
+			goto("wait");
+		}
+		subMoney(player, betrag);
 	}
-	subMoney(player, betrag);
 	
 	enchantment.writeToItem(map1, item1);
 	enchantment.writeToItem(map2, item2);
@@ -297,11 +301,13 @@ if(lectern_action == 0) {
 		level = map.getValue(element);
 		betrag += level * 100;
 	}
-	if(!hasEnoughMoney(player.getId(player), betrag)) {
-		msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
-		goto("wait");
+	if(!world.isCreativeName(world_name)) {
+		if(!hasEnoughMoney(player.getId(player), betrag)) {
+			msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
+			goto("wait");
+		}
+		subMoney(player, betrag);
 	}
-	subMoney(player, betrag);
 	
 	enchantment.writeToItem(map2, item2);
 	item.entity.set(item_entity2, item.clone(item2));

+ 4 - 4
survival/mobspawning.txt

@@ -1,9 +1,9 @@
 event.load("entity_join");
 
-x1 = 142;
-z1 = 235;
-x2 = 203;
-z2 = 294;
+x1 = 122;
+z1 = 215;
+x2 = 223;
+z2 = 314;
 
 msg("dev", "§bMobspawning §rloaded");
 @wait

+ 259 - 0
survival/recipes.txt

@@ -0,0 +1,259 @@
+event.load("entity_click");
+event.load("inv_click");
+
+items_list = list.new(); //Array-List: Alle Items mit Rezepten
+recipe_site_map = map.new();
+
+air = "minecraft:air";
+air_item = read.item("air");
+leather = "minecraft:leather";
+string = "minecraft:string";
+bronze_ingot = "km:bronze_ingot";
+copper_ingot = "km:copper_ingot";
+tin_ingot = "km:tin_ingot";
+silver_ingot = "km:silver_ingot";
+stick = "minecraft:stick";
+planks = "minecraft:oak_planks";
+cobblestone = "minecraft:cobblestone";
+iron_ingot = "minecraft:iron_ingot";
+gold_ingot = "minecraft:gold_ingot";
+diamond = "minecraft:diamond";
+book = "minecraft:book";
+birch_planks = "minecraft:birch_planks";
+dark_oak_planks = "minecraft:dark_oak_planks";
+jungle_planks = "minecraft:jungle_planks";
+spruce_planks = "minecraft:spruce_planks";
+acacia_planks = "minecraft:acacia_planks";
+coarse_dirt = "minecraft:coarse_dirt";
+gravel = "minecraft:gravel";
+wheat = "minecraft:wheat";
+grass = "minecraft:grass";
+iron_nugget = "minecraft:iron_nugget";
+hay_bundle = "km:hay_bundle";
+real_hay_block = "km:real_hay_block";
+cloth = "km:cloth";
+
+recipe.add(1, "minecraft:saddle", leather, leather, leather, leather, string, leather, air, iron_ingot, air);
+recipe.add(1, "km:bronze_helmet", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, air, bronze_ingot, air, air, air);
+recipe.add(1, "km:bronze_chestplate", bronze_ingot, air, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot);
+recipe.add(1, "km:bronze_leggings", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, air, bronze_ingot, bronze_ingot, air, bronze_ingot);
+recipe.add(1, "km:bronze_boots", bronze_ingot, air, bronze_ingot, bronze_ingot, air, bronze_ingot, air, air, air);
+recipe.add(1, "km:copper_helmet", copper_ingot, copper_ingot, copper_ingot, copper_ingot, air, copper_ingot, air, air, air);
+recipe.add(1, "km:copper_chestplate", copper_ingot, air, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
+recipe.add(1, "km:copper_leggings", copper_ingot, copper_ingot, copper_ingot, copper_ingot, air, copper_ingot, copper_ingot, air, copper_ingot);
+recipe.add(1, "km:copper_boots", copper_ingot, air, copper_ingot, copper_ingot, air, copper_ingot, air, air, air);
+recipe.add(1, "km:bookshelf_acacia", acacia_planks, acacia_planks, acacia_planks, book, book, book, acacia_planks, acacia_planks, acacia_planks);
+recipe.add(1, "km:bookshelf_birch", birch_planks, birch_planks, birch_planks, book, book, book, birch_planks, birch_planks, birch_planks);
+recipe.add(1, "km:bookshelf_dark_oak", dark_oak_planks, dark_oak_planks, dark_oak_planks, book, book, book, dark_oak_planks, dark_oak_planks, dark_oak_planks);
+recipe.add(1, "km:bookshelf_jungle", jungle_planks, jungle_planks, jungle_planks, book, book, book, jungle_planks, jungle_planks, jungle_planks);
+recipe.add(1, "km:bookshelf_spruce", spruce_planks, spruce_planks, spruce_planks, book, book, book, spruce_planks, spruce_planks, spruce_planks);
+recipe.add(1, "km:copper_block", copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
+recipe.add(1, "km:bronze_block", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot);
+recipe.add(1, "km:tin_block", tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot);
+recipe.add(1, "km:silver_block", silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot);
+recipe.add(1, "km:cooking_pot_copper", copper_ingot, air, copper_ingot, copper_ingot, air, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
+recipe.add(1, bronze_ingot, tin_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
+recipe.add(1, copper_ingot, air, air, air, air, "km:copper_ore", air, air, air, air);
+recipe.add(1, tin_ingot, air, air, air, air, "km:tin_ore", air, air, air, air);
+recipe.add(1, silver_ingot, air, air, air, air, "km:silver_ore", air, air, air, air);
+recipe.add(1, "km:spikes_bronze", air, bronze_ingot, air, bronze_ingot, bronze_ingot, bronze_ingot, air, air, air);
+recipe.add(1, "km:spikes_copper", air, copper_ingot, air, copper_ingot, copper_ingot, copper_ingot, air, air, air);
+recipe.add(1, "km:spikes_gold", air, gold_ingot, air, gold_ingot, gold_ingot, gold_ingot, air, air, air);
+recipe.add(1, "km:spikes_iron", air, iron_ingot, air, iron_ingot, iron_ingot, iron_ingot, air, air, air);
+recipe.add(1, "km:wooden_battleaxe", air, planks, planks, air, stick, planks, stick, air, air);
+recipe.add(1, "km:stone_battleaxe", air, cobblestone, cobblestone, air, stick, cobblestone, stick, air, air);
+recipe.add(1, "km:iron_battleaxe", air, iron_ingot, iron_ingot, air, stick, iron_ingot, stick, air, air);
+recipe.add(1, "km:golden_battleaxe", air, gold_ingot, gold_ingot, air, stick, gold_ingot, stick, air, air);
+recipe.add(1, "km:diamond_battleaxe", air, diamond, diamond, air, stick, diamond, stick, air, air);
+recipe.add(1, "km:copper_battleaxe", air, copper_ingot, copper_ingot, air, stick, copper_ingot, stick, air, air);
+recipe.add(1, "km:bronze_battleaxe", air, bronze_ingot, bronze_ingot, air, stick, bronze_ingot, stick, air, air);
+recipe.add(1, "km:copper_axe", air, copper_ingot, copper_ingot, air, copper_ingot, stick, air, air, stick);
+recipe.add(1, "km:bronze_axe", air, bronze_ingot, bronze_ingot, air, bronze_ingot, stick, air, air, stick);
+recipe.add(1, "km:wooden_dagger", air, air, planks, air, stick, air, air, air, air);
+recipe.add(1, "km:stone_dagger", air, air, cobblestone, air, stick, air, air, air, air);
+recipe.add(1, "km:iron_dagger", air, air, iron_ingot, air, stick, air, air, air, air);
+recipe.add(1, "km:golden_dagger", air, air, gold_ingot, air, stick, air, air, air, air);
+recipe.add(1, "km:diamond_dagger", air, air, diamond, air, stick, air, air, air, air);
+recipe.add(1, "km:copper_dagger", air, air, copper_ingot, air, stick, air, air, air, air);
+recipe.add(1, "km:bronze_dagger", air, air, bronze_ingot, air, stick, air, air, air, air);
+recipe.add(1, "km:copper_hoe", air, copper_ingot, copper_ingot, air, air, stick, air, air, stick);
+recipe.add(1, "km:bronze_hoe", air, bronze_ingot, bronze_ingot, air, air, stick, air, air, stick);
+recipe.add(1, "km:wooden_hammer", planks, planks, planks, planks, stick, planks, air, stick, air);
+recipe.add(1, "km:stone_hammer", cobblestone, cobblestone, cobblestone, cobblestone, stick, cobblestone, air, stick, air);
+recipe.add(1, "km:iron_hammer", iron_ingot, iron_ingot, iron_ingot, iron_ingot, stick, iron_ingot, air, stick, air);
+recipe.add(1, "km:golden_hammer", gold_ingot, gold_ingot, gold_ingot, gold_ingot, stick, gold_ingot, air, stick, air);
+recipe.add(1, "km:diamond_hammer", diamond, diamond, diamond, diamond, stick, diamond, air, stick, air);
+recipe.add(1, "km:copper_hammer", copper_ingot, copper_ingot, copper_ingot, copper_ingot, stick, copper_ingot, air, stick, air);
+recipe.add(1, "km:bronze_hammer", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, stick, bronze_ingot, air, stick, air);
+recipe.add(1, "km:copper_shovel", air, copper_ingot, air, air, stick, air, air, stick, air);
+recipe.add(1, "km:bronze_shovel", air, bronze_ingot, air, air, stick, air, air, stick, air);
+recipe.add(1, "km:wooden_scepter", air, stick, planks, air, stick, stick, stick, air, air);
+recipe.add(1, "km:stone_scepter", air, stick, cobblestone, air, stick, stick, stick, air, air);
+recipe.add(1, "km:iron_scepter", air, stick, iron_ingot, air, stick, stick, stick, air, air);
+recipe.add(1, "km:golden_scepter", air, stick, gold_ingot, air, stick, stick, stick, air, air);
+recipe.add(1, "km:diamond_scepter", air, stick, diamond, air, stick, stick, stick, air, air);
+recipe.add(1, "km:copper_scepter", air, stick, copper_ingot, air, stick, stick, stick, air, air);
+recipe.add(1, "km:bronze_scepter", air, stick, bronze_ingot, air, stick, stick, stick, air, air);
+recipe.add(1, "km:copper_pickaxe", copper_ingot, copper_ingot, copper_ingot, air, stick, air, air, stick, air);
+recipe.add(1, "km:bronze_pickaxe", bronze_ingot, bronze_ingot, bronze_ingot, air, stick, air, air, stick, air);
+recipe.add(1, "km:wooden_stick", air, air, planks, air, stick, air, planks, air, air);
+recipe.add(1, "km:stone_stick", air, air, cobblestone, air, stick, air, cobblestone, air, air);
+recipe.add(1, "km:iron_stick", air, air, iron_ingot, air, stick, air, iron_ingot, air, air);
+recipe.add(1, "km:golden_stick", air, air, gold_ingot, air, stick, air, gold_ingot, air, air);
+recipe.add(1, "km:diamond_stick", air, air, diamond, air, stick, air, diamond, air, air);
+recipe.add(1, "km:copper_stick", air, air, copper_ingot, air, stick, air, copper_ingot, air, air);
+recipe.add(1, "km:bronze_stick", air, air, bronze_ingot, air, stick, air, bronze_ingot, air, air);
+recipe.add(1, "km:copper_sword", air, copper_ingot, air, air, copper_ingot, air, air, stick, air);
+recipe.add(1, "km:bronze_sword", air, bronze_ingot, air, air, bronze_ingot, air, air, stick, air);
+recipe.add(1, "km:mushroom_stick_raw", air, "minecraft:brown_mushroom", "minecraft:brown_mushroom", air, stick, "minecraft:red_mushroom", air, air, air);
+recipe.add(1, "km:mushroom_stick_cooked", air, air, air, air, "km:mushroom_stick_raw", air, air, air, air);
+recipe.add(1, "km:fried_egg", air, air, air, air, "minecraft:egg", air, air, air, air);
+recipe.add(1, "km:crate_acacia", acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks);
+recipe.add(1, "km:crate_birch", birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks);
+recipe.add(1, "km:crate_big_oak", dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks);
+recipe.add(1, "km:crate_oak", planks, planks, planks, planks, planks, planks, planks, planks, planks);
+recipe.add(1, "km:crate_jungle", jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks);
+recipe.add(1, "km:crate_spruce", spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks);
+recipe.add(1, "km:coarse_dirt_slab", air, air, air, coarse_dirt, coarse_dirt, coarse_dirt, air, air, air);
+recipe.add(1, "km:gravel_slab", air, air, air, gravel, gravel, gravel, air, air, air);
+recipe.add(1, "km:straw_hat", air, wheat, air, wheat, wheat, wheat, air, air, air);
+recipe.add(1, hay_bundle, grass, grass, grass, grass, grass, grass, grass, grass, grass);
+recipe.add(1, real_hay_block, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle);
+recipe.add(1, "km:real_hay_bed", air, air, air, real_hay_block, real_hay_block, real_hay_block, air, air, air);
+recipe.add(1, "km:lantern", iron_nugget, iron_nugget, iron_nugget, "minecraft:glass_pane", "minecraft:torch", "minecraft:glass_pane", iron_nugget, iron_nugget, iron_nugget);
+recipe.add(1, "km:sling", stick, string, stick, stick, air, stick, air, stick, air);
+recipe.add(4, "minecraft:string", air, air, air, air, "minecraft:white_wool", air, air, air, air);
+recipe.add(4, "km:cloth_helmet", cloth, cloth, cloth, cloth, air, cloth, air, air, air);
+recipe.add(4, "km:cloth_chestplate", cloth, air, cloth, cloth, cloth, cloth, cloth, cloth, cloth);
+recipe.add(4, "km:cloth_leggings", cloth, cloth, cloth, cloth, air, cloth, cloth, air, cloth);
+recipe.add(4, "km:cloth_boots", cloth, air, cloth, cloth, air, cloth, air, air, air);
+
+msg("dev", "§bRecipes §rloaded.");
+@wait
+wait();
+if(event == "entity_click") {
+	if(hand == "OFF_HAND") {
+		goto("wait");
+	}
+	if(entity.getType(entity) != "human") {
+		goto("wait");
+	}
+	if(entity.getName(entity) == "Recipes") {
+		recipe_menu = inv.new("333333333333333333333333333333333333333333333200000022");
+		recipe.setPage(player, recipe_menu, 1);
+		inv.open(recipe_menu, player, "Recipes");
+	}
+	goto("wait");
+}
+if(event == "inv_click") {
+	if(inv_name == "Recipes") {
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		if(item_type == "km:return_red") {
+			page = map.getOrDefault($recipe_site_map, player.getUuid(player), 1);
+			recipe.setPage(player, inv, page);
+			goto("wait");
+		}
+		if(item_type == "minecraft:paper") {
+			name = item.getName(item);
+			if(text.contains(name, "<<") || text.contains(name, ">>")) {
+				page = removeFormat(name);
+				page = text.replace(page, "<<", "");
+				page = text.replace(page, ">>", "");
+				page = read.number(page);
+				if(inv_slot == 46) {
+					recipe.setPage(player, inv, page);
+				}
+				if(inv_slot == 47) {
+					recipe.setPage(player, inv, page);
+				}
+				goto("wait");
+			}
+		}
+		index = recipe.getIndexFromItemType(item_type);
+		if(index == null) {
+			goto("wait");
+		}
+		recipe.showRecipe(player, inv, index);
+	}
+}
+goto("wait");
+
+function recipe.add(result_amount, result_item, item1, item2, item3, item4, item5, item6, item7, item8, item9) {
+	array = array.new(11);
+	array[0] = result_amount;
+	array[1] = result_item;
+	array[2] = item1;
+	array[3] = item2;
+	array[4] = item3;
+	array[5] = item4;
+	array[6] = item5;
+	array[7] = item6;
+	array[8] = item7;
+	array[9] = item8;
+	array[10] = item9;
+	list.add($items_list, array);
+}
+
+function recipe.getIndexFromItemType(item_type) {
+	for(i = 0; i < list.getSize($items_list); i++) {
+		array = list.getIndex($items_list, i);
+		if(array[1] == item_type) {
+			return i;
+		}
+	}
+	return null;
+}
+
+function recipe.showRecipe(player, menu, index) {
+	for(i = 0; i < 48; i++) {
+		inv.setItem(menu, i, $air_item);
+	}
+	array = list.getIndex($items_list, index);
+	inv.setItem(menu, 23, read.item("km:arrow_right"));
+	inv.setItem(menu, 45, read.item("km:return_red", 1, "§fReturn to overview"));
+	inv.setItem(menu, 10, read.item(array[2]));
+	inv.setItem(menu, 11, read.item(array[3]));
+	inv.setItem(menu, 12, read.item(array[4]));
+	inv.setItem(menu, 19, read.item(array[5]));
+	inv.setItem(menu, 20, read.item(array[6]));
+	inv.setItem(menu, 21, read.item(array[7]));
+	inv.setItem(menu, 28, read.item(array[8]));
+	inv.setItem(menu, 29, read.item(array[9]));
+	inv.setItem(menu, 30, read.item(array[10]));
+	inv.setItem(menu, 25, read.item(array[1], array[0]));
+	inv.update(player);
+}
+
+function recipe.setPage(player, menu, page) {
+	map.add($recipe_site_map, player.getUuid(player), page);
+	size = list.getSize($items_list);
+	max_page = math.roundUp(size / 45);
+	if(page > max_page) {
+		return;
+	}
+	inv.setItem(menu, 45, $air_item);
+	if(page > 1) {
+		inv.setItem(menu, 46, read.item("minecraft:paper", 1, concat("§e", text.number(page - 1), " <<")));
+	} else {
+		inv.setItem(menu, 46, $air_item);
+	}
+	if(page < max_page) {
+		inv.setItem(menu, 47, read.item("minecraft:paper", 1, concat("§e>> ", text.number(page + 1))));
+	} else {
+		inv.setItem(menu, 47, $air_item);
+	}
+	max_index = size - 1;
+	for(i = 0; i < 45; i++) {
+		list_index = i + 45 * (page - 1);
+		if(list_index > max_index) {
+			inv.setItem(menu, i, $air_item);
+		} else {
+			array = list.getIndex($items_list, list_index);
+			inv.setItem(menu, i, read.item(array[1]));
+		}
+	}
+	inv.update(player);
+}

+ 96 - 281
survival/survival.txt

@@ -34,8 +34,6 @@ skill.add("Cobweb Miner", "skill.cobweb_miner", "minecraft:cobweb", "Swords incr
 
 clan.loadData();
 
-items_list = list.new(); //Array-List: Alle Items mit Rezepten
-recipe_site_map = map.new();
 tp_list = list.new();
 tp_map = map.new();
 tp_set = set.new();
@@ -70,131 +68,12 @@ gambler_loc = loc.new(overworld, 185, 68, 225);
 prefix_money = "§2Money";
 prefix_skill = "§2Skill";
 
-air = "minecraft:air";
-air_item = read.item(air);
-leather = "minecraft:leather";
-string = "minecraft:string";
-iron_ingot = "minecraft:iron_ingot";
-bronze_ingot = "km:bronze_ingot";
-copper_ingot = "km:copper_ingot";
-tin_ingot = "km:tin_ingot";
-silver_ingot = "km:silver_ingot";
-stick = "minecraft:stick";
-planks = "minecraft:oak_planks";
-cobblestone = "minecraft:cobblestone";
-iron_ingot = "minecraft:iron_ingot";
-gold_ingot = "minecraft:gold_ingot";
-diamond = "minecraft:diamond";
-book = "minecraft:book";
-birch_planks = "minecraft:birch_planks";
-dark_oak_planks = "minecraft:dark_oak_planks";
-jungle_planks = "minecraft:jungle_planks";
-spruce_planks = "minecraft:spruce_planks";
-acacia_planks = "minecraft:acacia_planks";
-coarse_dirt = "minecraft:coarse_dirt";
-gravel = "minecraft:gravel";
-wheat = "minecraft:wheat";
-grass = "minecraft:grass";
-iron_nugget = "minecraft:iron_nugget";
-hay_bundle = "km:hay_bundle";
-real_hay_block = "km:real_hay_block";
 sword_tag = item.getTag("km:sword");
 dye_tag = item.getTag("km:dye");
 leaves_tag = block.getTag("minecraft:leaves");
 sign_tag = block.getTag("minecraft:signs");
 prop_persistent = block.getProperty("persistent");
 
-recipe.add(1, "minecraft:saddle", leather, leather, leather, leather, string, leather, air, iron_ingot, air);
-recipe.add(1, "km:bronze_helmet", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, air, bronze_ingot, air, air, air);
-recipe.add(1, "km:bronze_chestplate", bronze_ingot, air, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot);
-recipe.add(1, "km:bronze_leggings", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, air, bronze_ingot, bronze_ingot, air, bronze_ingot);
-recipe.add(1, "km:bronze_boots", bronze_ingot, air, bronze_ingot, bronze_ingot, air, bronze_ingot, air, air, air);
-recipe.add(1, "km:copper_helmet", copper_ingot, copper_ingot, copper_ingot, copper_ingot, air, copper_ingot, air, air, air);
-recipe.add(1, "km:copper_chestplate", copper_ingot, air, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
-recipe.add(1, "km:copper_leggings", copper_ingot, copper_ingot, copper_ingot, copper_ingot, air, copper_ingot, copper_ingot, air, copper_ingot);
-recipe.add(1, "km:copper_boots", copper_ingot, air, copper_ingot, copper_ingot, air, copper_ingot, air, air, air);
-recipe.add(1, "km:bookshelf_acacia", acacia_planks, acacia_planks, acacia_planks, book, book, book, acacia_planks, acacia_planks, acacia_planks);
-recipe.add(1, "km:bookshelf_birch", birch_planks, birch_planks, birch_planks, book, book, book, birch_planks, birch_planks, birch_planks);
-recipe.add(1, "km:bookshelf_dark_oak", dark_oak_planks, dark_oak_planks, dark_oak_planks, book, book, book, dark_oak_planks, dark_oak_planks, dark_oak_planks);
-recipe.add(1, "km:bookshelf_jungle", jungle_planks, jungle_planks, jungle_planks, book, book, book, jungle_planks, jungle_planks, jungle_planks);
-recipe.add(1, "km:bookshelf_spruce", spruce_planks, spruce_planks, spruce_planks, book, book, book, spruce_planks, spruce_planks, spruce_planks);
-recipe.add(1, "km:copper_block", copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
-recipe.add(1, "km:bronze_block", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot);
-recipe.add(1, "km:tin_block", tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot, tin_ingot);
-recipe.add(1, "km:silver_block", silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot, silver_ingot);
-recipe.add(1, "km:cooking_pot_copper", copper_ingot, air, copper_ingot, copper_ingot, air, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
-recipe.add(1, bronze_ingot, tin_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot, copper_ingot);
-recipe.add(1, copper_ingot, air, air, air, air, "km:copper_ore", air, air, air, air);
-recipe.add(1, tin_ingot, air, air, air, air, "km:tin_ore", air, air, air, air);
-recipe.add(1, silver_ingot, air, air, air, air, "km:silver_ore", air, air, air, air);
-recipe.add(1, "km:spikes_bronze", air, bronze_ingot, air, bronze_ingot, bronze_ingot, bronze_ingot, air, air, air);
-recipe.add(1, "km:spikes_copper", air, copper_ingot, air, copper_ingot, copper_ingot, copper_ingot, air, air, air);
-recipe.add(1, "km:spikes_gold", air, gold_ingot, air, gold_ingot, gold_ingot, gold_ingot, air, air, air);
-recipe.add(1, "km:spikes_iron", air, iron_ingot, air, iron_ingot, iron_ingot, iron_ingot, air, air, air);
-recipe.add(1, "km:wooden_battleaxe", air, planks, planks, air, stick, planks, stick, air, air);
-recipe.add(1, "km:stone_battleaxe", air, cobblestone, cobblestone, air, stick, cobblestone, stick, air, air);
-recipe.add(1, "km:iron_battleaxe", air, iron_ingot, iron_ingot, air, stick, iron_ingot, stick, air, air);
-recipe.add(1, "km:golden_battleaxe", air, gold_ingot, gold_ingot, air, stick, gold_ingot, stick, air, air);
-recipe.add(1, "km:diamond_battleaxe", air, diamond, diamond, air, stick, diamond, stick, air, air);
-recipe.add(1, "km:copper_battleaxe", air, copper_ingot, copper_ingot, air, stick, copper_ingot, stick, air, air);
-recipe.add(1, "km:bronze_battleaxe", air, bronze_ingot, bronze_ingot, air, stick, bronze_ingot, stick, air, air);
-recipe.add(1, "km:copper_axe", air, copper_ingot, copper_ingot, air, copper_ingot, stick, air, air, stick);
-recipe.add(1, "km:bronze_axe", air, bronze_ingot, bronze_ingot, air, bronze_ingot, stick, air, air, stick);
-recipe.add(1, "km:wooden_dagger", air, air, planks, air, stick, air, air, air, air);
-recipe.add(1, "km:stone_dagger", air, air, cobblestone, air, stick, air, air, air, air);
-recipe.add(1, "km:iron_dagger", air, air, iron_ingot, air, stick, air, air, air, air);
-recipe.add(1, "km:golden_dagger", air, air, gold_ingot, air, stick, air, air, air, air);
-recipe.add(1, "km:diamond_dagger", air, air, diamond, air, stick, air, air, air, air);
-recipe.add(1, "km:copper_dagger", air, air, copper_ingot, air, stick, air, air, air, air);
-recipe.add(1, "km:bronze_dagger", air, air, bronze_ingot, air, stick, air, air, air, air);
-recipe.add(1, "km:copper_hoe", air, copper_ingot, copper_ingot, air, air, stick, air, air, stick);
-recipe.add(1, "km:bronze_hoe", air, bronze_ingot, bronze_ingot, air, air, stick, air, air, stick);
-recipe.add(1, "km:wooden_hammer", planks, planks, planks, planks, stick, planks, air, stick, air);
-recipe.add(1, "km:stone_hammer", cobblestone, cobblestone, cobblestone, cobblestone, stick, cobblestone, air, stick, air);
-recipe.add(1, "km:iron_hammer", iron_ingot, iron_ingot, iron_ingot, iron_ingot, stick, iron_ingot, air, stick, air);
-recipe.add(1, "km:golden_hammer", gold_ingot, gold_ingot, gold_ingot, gold_ingot, stick, gold_ingot, air, stick, air);
-recipe.add(1, "km:diamond_hammer", diamond, diamond, diamond, diamond, stick, diamond, air, stick, air);
-recipe.add(1, "km:copper_hammer", copper_ingot, copper_ingot, copper_ingot, copper_ingot, stick, copper_ingot, air, stick, air);
-recipe.add(1, "km:bronze_hammer", bronze_ingot, bronze_ingot, bronze_ingot, bronze_ingot, stick, bronze_ingot, air, stick, air);
-recipe.add(1, "km:copper_shovel", air, copper_ingot, air, air, stick, air, air, stick, air);
-recipe.add(1, "km:bronze_shovel", air, bronze_ingot, air, air, stick, air, air, stick, air);
-recipe.add(1, "km:wooden_scepter", air, stick, planks, air, stick, stick, stick, air, air);
-recipe.add(1, "km:stone_scepter", air, stick, cobblestone, air, stick, stick, stick, air, air);
-recipe.add(1, "km:iron_scepter", air, stick, iron_ingot, air, stick, stick, stick, air, air);
-recipe.add(1, "km:golden_scepter", air, stick, gold_ingot, air, stick, stick, stick, air, air);
-recipe.add(1, "km:diamond_scepter", air, stick, diamond, air, stick, stick, stick, air, air);
-recipe.add(1, "km:copper_scepter", air, stick, copper_ingot, air, stick, stick, stick, air, air);
-recipe.add(1, "km:bronze_scepter", air, stick, bronze_ingot, air, stick, stick, stick, air, air);
-recipe.add(1, "km:copper_pickaxe", copper_ingot, copper_ingot, copper_ingot, air, stick, air, air, stick, air);
-recipe.add(1, "km:bronze_pickaxe", bronze_ingot, bronze_ingot, bronze_ingot, air, stick, air, air, stick, air);
-recipe.add(1, "km:wooden_stick", air, air, planks, air, stick, air, planks, air, air);
-recipe.add(1, "km:stone_stick", air, air, cobblestone, air, stick, air, cobblestone, air, air);
-recipe.add(1, "km:iron_stick", air, air, iron_ingot, air, stick, air, iron_ingot, air, air);
-recipe.add(1, "km:golden_stick", air, air, gold_ingot, air, stick, air, gold_ingot, air, air);
-recipe.add(1, "km:diamond_stick", air, air, diamond, air, stick, air, diamond, air, air);
-recipe.add(1, "km:copper_stick", air, air, copper_ingot, air, stick, air, copper_ingot, air, air);
-recipe.add(1, "km:bronze_stick", air, air, bronze_ingot, air, stick, air, bronze_ingot, air, air);
-recipe.add(1, "km:copper_sword", air, copper_ingot, air, air, copper_ingot, air, air, stick, air);
-recipe.add(1, "km:bronze_sword", air, bronze_ingot, air, air, bronze_ingot, air, air, stick, air);
-recipe.add(1, "km:mushroom_stick_raw", air, "minecraft:brown_mushroom", "minecraft:brown_mushroom", air, stick, "minecraft:red_mushroom", air, air, air);
-recipe.add(1, "km:mushroom_stick_cooked", air, air, air, air, "km:mushroom_stick_raw", air, air, air, air);
-recipe.add(1, "km:fried_egg", air, air, air, air, "minecraft:egg", air, air, air, air);
-recipe.add(1, "km:crate_acacia", acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks, acacia_planks);
-recipe.add(1, "km:crate_birch", birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks, birch_planks);
-recipe.add(1, "km:crate_big_oak", dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks, dark_oak_planks);
-recipe.add(1, "km:crate_oak", planks, planks, planks, planks, planks, planks, planks, planks, planks);
-recipe.add(1, "km:crate_jungle", jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks, jungle_planks);
-recipe.add(1, "km:crate_spruce", spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks, spruce_planks);
-recipe.add(1, "km:coarse_dirt_slab", air, air, air, coarse_dirt, coarse_dirt, coarse_dirt, air, air, air);
-recipe.add(1, "km:gravel_slab", air, air, air, gravel, gravel, gravel, air, air, air);
-recipe.add(1, "km:straw_hat", air, wheat, air, wheat, wheat, wheat, air, air, air);
-recipe.add(1, hay_bundle, grass, grass, grass, grass, grass, grass, grass, grass, grass);
-recipe.add(1, real_hay_block, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle, hay_bundle);
-recipe.add(1, "km:real_hay_bed", air, air, air, real_hay_block, real_hay_block, real_hay_block, air, air, air);
-recipe.add(1, "km:lantern", iron_nugget, iron_nugget, iron_nugget, "minecraft:glass_pane", "minecraft:torch", "minecraft:glass_pane", iron_nugget, iron_nugget, iron_nugget);
-recipe.add(1, "km:sling", stick, string, stick, stick, air, stick, air, stick, air);
-recipe.add(4, "minecraft:string", air, air, air, air, "minecraft:white_wool", air, air, air, air);
-
 ench_flame = enchantment.get("flame");
 ench_unbreaking = enchantment.get("unbreaking");
 ench_sharpness = enchantment.get("sharpness");
@@ -209,7 +88,9 @@ inv.setItem(gambler_inv, 1, read.item("km:coin_silver", 1, "§f64 snuvis"));
 inv.setItem(gambler_inv, 2, read.item("km:coin_gold", 1, "§f4096 snuvis"));
 inv.setItem(gambler_inv, 3, read.item("minecraft:netherite_block", 1, "§fAll in"));
 
-bankmenu = inv.new("233302332233302332");
+//bankmenu = inv.new("233302332233302332");
+bankmenu = inv.new("233330000233330000000000000233200000233200000");
+//bankmenu = inv.new("233330000 233330000 000000000 233200000 233200000");
 bankinvid = inv.getId(bankmenu);
 coin_gold = read.item("km:coin_gold");
 coin_silver = read.item("km:coin_silver");
@@ -223,18 +104,20 @@ inv.setItem(bankmenu, 0, read.item("km:plus_green", 1, "§fDeposit..."));
 inv.setItem(bankmenu, 1, read.item("km:coin_copper", 1, "§f1 snuvi"));
 inv.setItem(bankmenu, 2, read.item("km:coin_silver", 1, "§f64 snuvis"));
 inv.setItem(bankmenu, 3, read.item("km:coin_gold", 1, "§f4096 snuvis"));
-inv.setItem(bankmenu, 4, read.item("km:coin_copper", 64, "§f64 snuvis"));
-inv.setItem(bankmenu, 5, arrow_left);
-inv.setItem(bankmenu, 6, arrow_right);
+inv.setItem(bankmenu, 4, read.item("minecraft:netherite_block", 1, "§fAll snuvis"));
+inv.setItem(bankmenu, 5, read.item("km:minus_red", 1, "§fWithdraw..."));
+inv.setItem(bankmenu, 6, read.item("km:coin_copper", 1, "§f1 snuvi"));
 inv.setItem(bankmenu, 7, read.item("km:coin_silver", 1, "§f64 snuvis"));
-inv.setItem(bankmenu, 8, read.item("km:minus_red", 1, "§fWithdraw..."));
-inv.setItem(bankmenu, 9, read.item("km:coin_copper", 1, "§f1 snuvi"));
-inv.setItem(bankmenu, 10, read.item("km:coin_silver", 1, "§f64 snuvis"));
-inv.setItem(bankmenu, 11, read.item("km:coin_gold", 1, "§f4096 snuvis"));
-inv.setItem(bankmenu, 12, read.item("km:coin_silver", 64, "§f4096 snuvis"));
-inv.setItem(bankmenu, 13, arrow_left);
-inv.setItem(bankmenu, 14, arrow_right);
-inv.setItem(bankmenu, 15, read.item("km:coin_gold", 1, "§f4096 snuvis"));
+inv.setItem(bankmenu, 8, read.item("km:coin_gold", 1, "§f4096 snuvis"));
+inv.setItem(bankmenu, 9, read.item("minecraft:netherite_block", 1, "§fAll snuvis"));
+inv.setItem(bankmenu, 10, read.item("km:coin_copper", 64, "§f64 snuvis"));
+inv.setItem(bankmenu, 11, arrow_left);
+inv.setItem(bankmenu, 12, arrow_right);
+inv.setItem(bankmenu, 13, read.item("km:coin_silver", 1, "§f64 snuvis"));
+inv.setItem(bankmenu, 14, read.item("km:coin_silver", 64, "§f4096 snuvis"));
+inv.setItem(bankmenu, 15, arrow_left);
+inv.setItem(bankmenu, 16, arrow_right);
+inv.setItem(bankmenu, 17, read.item("km:coin_gold", 1, "§f4096 snuvis"));
 
 msg("dev", "§bSurvival §rloaded.");
 @wait
@@ -276,7 +159,7 @@ if(event == "living_death" || event == "living_pre_hurt") {
 	loc = entity.getLocation(player);
 }
 world_name = world.getName(loc.getWorld(loc));
-if(word.isSurvName(world_name)) {
+if(world.isSurvName(world_name)) {
 	ignoreGoto(event);
 }
 goto("wait");
@@ -403,17 +286,12 @@ if(entity.getType(entity) == "human") {
 		msg(player, text.click("§r [§cclick§r] [§eShops§r]", "/infopoint6"));
 		msg(player, text.click("§r [§cclick§r] [§eMinigames§r]", "/infopoint7"), " ", text.click("§f[§bTeleport§f]", "/games"));
 		msg(player, text.click("§r [§cclick§r] [§eQuests§r]", "/infopoint8"), " ", text.click("§f[§bTeleport§f]", "/story"));
+		msg(player, text.click("§r [§cclick§r] [§eCreative§r]", "/infopoint12"), " ", text.click("§f[§bTeleport§f]", "/creative"));
 		msg(player, text.click("§r [§cclick§r] [§eRanking§r]", "/infopoint9"), " ", text.link("§f[§bRanks§f]", "https://minecraft.hammerle.me/?site=ranks"));
 		msg(player, text.click("§r [§cclick§r] [§eRules§r]", "/infopoint10"), " ", text.link("§f[§bFake Rules§f]", "https://minecraft.hammerle.me/?site=rules"));
 		msg(player, text.click("§r [§cclick§r] [§eNote§r]", "/infopoint11"));
 		goto("wait");
 	}
-	if(entity_name == "Recipes") {
-		recipe_menu = inv.new("333333333333333333333333333333333333333333333200000022");
-		recipe.setPage(player, recipe_menu, 1);
-		inv.open(recipe_menu, player, "Recipes");
-		goto("wait");
-	}
 	if(entity_name == "Banker") {
 		inv.open(bankmenu, player, "Banker");
 		goto("wait");
@@ -451,6 +329,7 @@ if(player.isOnAdventure(player)) {
 goto("wait");
 
 @container_click
+//Verhindert während eines (Abenteuer-)Teleports, die Benutzung des Spielerinventars (inkl. Crafting-Bereich!)
 player_uuid = player.getUuid(player);
 if(set.contains(tp_set, player_uuid)) {
 	cancel = true;
@@ -458,14 +337,17 @@ if(set.contains(tp_set, player_uuid)) {
 goto("wait");
 
 @inv_click
-cancel = true;
 if(inv_id == bankinvid) { //Bankmenü
+	factor = 1;
+	if(click_type == "QUICK_MOVE") {
+		factor = 8;
+	}
 	gold_inv = player.getItemAmount(player, false, coin_gold);
 	silver_inv = player.getItemAmount(player, false, coin_silver);
 	copper_inv = player.getItemAmount(player, false, coin_copper);
 	//Wechseln
-	if(inv_slot == 5 || inv_slot == 6 || inv_slot == 13 || inv_slot == 14)  {
-		if(inv_slot == 5) {
+	if(inv_slot == 11 || inv_slot == 12 || inv_slot == 15 || inv_slot == 16)  {
+		if(inv_slot == 11) {
 			//1 Silbermünze --> 64 Kupfermünzen
 			item1 = coin_silver;
 			item2 = coin_copper64;
@@ -473,7 +355,7 @@ if(inv_id == bankinvid) { //Bankmenü
 			item_type = "km:coin_copper";
 			coin_inv = silver_inv;
 		}
-		elseif(inv_slot == 6) {
+		elseif(inv_slot == 12) {
 			//64 Kupfermünzen --> 1 Silbermünze
 			item1 = coin_copper64;
 			item2 = coin_silver;
@@ -481,7 +363,7 @@ if(inv_id == bankinvid) { //Bankmenü
 			item_type = "km:coin_silver";
 			coin_inv = copper_inv;
 		}
-		elseif(inv_slot == 13) {
+		elseif(inv_slot == 15) {
 			//1 Goldmünze --> 64 Silbermünzen
 			item1 = coin_gold;
 			item2 = coin_silver64;
@@ -489,7 +371,7 @@ if(inv_id == bankinvid) { //Bankmenü
 			item_type = "km:coin_silver";
 			coin_inv = gold_inv;
 		}
-		elseif(inv_slot == 14) {
+		elseif(inv_slot == 16) {
 			//64 Silbermünzen --> 1 Goldmünze
 			item1 = coin_silver64;
 			item2 = coin_gold;
@@ -497,18 +379,22 @@ if(inv_id == bankinvid) { //Bankmenü
 			item_type = "km:coin_gold";
 			coin_inv = silver_inv;
 		}
-		amount1 = item.getAmount(item1);
-		amount2 = item.getAmount(item2);
-		if(coin_inv < amount1) {
+		item_1 = item.clone(item1);
+		item.setAmount(item_1, item.getAmount(item_1) * factor);
+		item_2 = item.clone(item2);
+		item.setAmount(item_2, item.getAmount(item_2) * factor);
+		amount1 = item.getAmount(item_1);
+		amount2 = item.getAmount(item_2);
+		if(coin_inv * factor < amount1) {
 			msg.prefix(player, prefix_money, message);
 			goto("wait");
 		}
-		player.removeItemNbt(player, item1);
-		notgiven = player.giveItem(player, item2);
+		player.removeItemNbt(player, item_1);
+		notgiven = player.giveItem(player, item_2);
 		if(item.getType(notgiven) != "minecraft:air") {
 			amount = item.getAmount(notgiven);
 			player.removeItemNbt(player, read.item(item_type, amount2 - amount));
-			player.giveItem(player, item1);
+			player.giveItem(player, item_1);
 			msg.prefix(player, prefix_money, "Not enough space in inventory.");
 			goto("wait");
 		}
@@ -517,40 +403,72 @@ if(inv_id == bankinvid) { //Bankmenü
 		goto("wait");
 	}
 	//Kontobewegungen
-	if(inv_slot == 1 || inv_slot == 9) {
-		betrag = 1;
+	if(inv_slot == 1 || inv_slot == 6) {
+		betrag = 1 * factor;
 		coin_inv = copper_inv;
 	}
-	elseif(inv_slot == 2 || inv_slot == 10) {
-		betrag = 64;
+	elseif(inv_slot == 2 || inv_slot == 7) {
+		betrag = 64 * factor;
 		coin_inv = silver_inv;
 	}
-	elseif(inv_slot == 3 || inv_slot == 11) {
-		betrag = 4096;
+	elseif(inv_slot == 3 || inv_slot == 8) {
+		betrag = 4096 * factor;
 		coin_inv = gold_inv;
 	}
+	elseif(inv_slot == 4 || inv_slot == 9) {
+		if(inv_slot == 4) {
+			betrag = copper_inv + silver_inv * 64 + gold_inv * 4096;
+			coin_inv = 8;
+		} elseif(inv_slot == 9) {
+			betrag = getMoney(player);
+			coin_inv = 8;
+		}
+	}
 	//Einzahlen
-	if(inv_slot > 0 && inv_slot < 4) {
-		player_id = player.getId(player);
-		if(coin_inv < 1) {
-			msg.prefix(player, prefix_money, "Coin not in inventory.");
+	if(inv_slot > 0 && inv_slot < 5) {
+		if(coin_inv < 1 * factor) {
+			msg.prefix(player, prefix_money, "Coins not in inventory.");
+			goto("wait");
+		}
+		if(betrag == 0) {
+			msg.prefix(player, prefix_money, "No coins in your inventory.");
+			goto("wait");
+		}
+		addMoney(player, betrag);
+		if(inv_slot == 4) {
+			player.removeItemNbt(player, read.item("km:coin_gold", gold_inv));
+			player.removeItemNbt(player, read.item("km:coin_silver", silver_inv));
+			player.removeItemNbt(player, read.item("km:coin_copper", copper_inv));
 		} else {
-			addMoney(player, betrag);
-			player.removeItemNbt(player, inv.getItem(bankmenu, inv_slot));
-			inv.update(player);
+			remove_item = item.clone(inv.getItem(bankmenu, inv_slot));	
+			item.setAmount(remove_item, item.getAmount(remove_item) * factor);
+			player.removeItemNbt(player, remove_item);
 		}
+		inv.update(player);
 		goto("wait");
 	}
 	//Auszahlen
-	if(inv_slot > 8 && inv_slot < 12) {
-		player_id = player.getId(player);
-		if(!hasEnoughMoney(player_id, betrag)) {
+	if(inv_slot > 5 && inv_slot < 10) {
+		if(!hasEnoughMoney(player, betrag)) {
 			msg.prefix(player, prefix_money, "Not enough snuvis on your account.");
 		} else {
 			subMoney(player, betrag);
-			item = inv.getItem(bankmenu, inv_slot);
-			new_item = read.item(item.getType(item), item.getAmount(item));
-			player.giveItem(player, new_item);
+			if(inv_slot == 9) {
+				gold_amount = math.roundDown(betrag / 4096);
+				betrag %= 4096;
+				silver_amount = math.roundDown(betrag / 64);
+				copper_amount = math.roundDown(betrag % 64);
+				coin_item = read.item("km:coin_gold", gold_amount);
+				player.giveItem(player, coin_item);
+				coin_item = read.item("km:coin_silver", silver_amount);
+				player.giveItem(player, coin_item);
+				coin_item = read.item("km:coin_copper", copper_amount);
+				player.giveItem(player, coin_item);
+			} else {
+				item = inv.getItem(bankmenu, inv_slot);
+				new_item = read.item(item.getType(item), item.getAmount(item) * factor);
+				player.giveItem(player, new_item);
+			}
 			inv.update(player);
 		}
 		goto("wait");
@@ -588,40 +506,14 @@ if(inv_id == gambler_inv_id) {
 	} else {
 		message = concat(player.getName(player), temp, text.number(amount), " snuvis.");
 	}
-	msg.radius("§2Gambler", message, entity.getLocation(player), 50);
-	goto("wait");
-}
-if(inv_name == "Recipes") {
-	item_type = item.getType(item);
-	if(item_type == "minecraft:air") {
-		goto("wait");
-	}
-	if(item_type == "km:return_red") {
-		page = map.getOrDefault($recipe_site_map, player.getUuid(player), 1);
-		recipe.setPage(player, inv, page);
-		goto("wait");
-	}
-	if(item_type == "minecraft:paper") {
-		name = item.getName(item);
-		if(text.contains(name, "<<") || text.contains(name, ">>")) {
-			page = removeFormat(name);
-			page = text.replace(page, "<<", "");
-			page = text.replace(page, ">>", "");
-			page = read.number(page);
-			if(inv_slot == 46) {
-				recipe.setPage(player, inv, page);
-			}
-			if(inv_slot == 47) {
-				recipe.setPage(player, inv, page);
-			}
-			goto("wait");
-		}
-	}
-	index = recipe.getIndexFromItemType(item_type);
-	if(index == null) {
-		goto("wait");
+	if(amount < 64) {
+		msg.prefix(player, "§2Gambler", message);
+	} elseif(amount >= 131072) {
+		msg.online("§2Gambler", message);
+	} else {
+		msg.radius("§2Gambler", message, entity.getLocation(player), 10);
 	}
-	recipe.showRecipe(player, inv, index);
+	goto("wait");
 }
 goto("wait");
 
@@ -1151,83 +1043,6 @@ function lottery.add(location, amount) {
 	return amount;
 }
 
-function recipe.add(result_amount, result_item, item1, item2, item3, item4, item5, item6, item7, item8, item9) {
-	array = array.new(11);
-	array[0] = result_amount;
-	array[1] = result_item;
-	array[2] = item1;
-	array[3] = item2;
-	array[4] = item3;
-	array[5] = item4;
-	array[6] = item5;
-	array[7] = item6;
-	array[8] = item7;
-	array[9] = item8;
-	array[10] = item9;
-	list.add($items_list, array);
-}
-
-function recipe.getIndexFromItemType(item_type) {
-	for(i = 0; i < list.getSize($items_list); i++) {
-		array = list.getIndex($items_list, i);
-		if(array[1] == item_type) {
-			return i;
-		}
-	}
-	return null;
-}
-
-function recipe.showRecipe(player, menu, index) {
-	for(i = 0; i < 48; i++) {
-		inv.setItem(menu, i, $air_item);
-	}
-	array = list.getIndex($items_list, index);
-	inv.setItem(menu, 23, read.item("km:arrow_right"));
-	inv.setItem(menu, 45, read.item("km:return_red", 1, "§fReturn to overview"));
-	inv.setItem(menu, 10, read.item(array[2]));
-	inv.setItem(menu, 11, read.item(array[3]));
-	inv.setItem(menu, 12, read.item(array[4]));
-	inv.setItem(menu, 19, read.item(array[5]));
-	inv.setItem(menu, 20, read.item(array[6]));
-	inv.setItem(menu, 21, read.item(array[7]));
-	inv.setItem(menu, 28, read.item(array[8]));
-	inv.setItem(menu, 29, read.item(array[9]));
-	inv.setItem(menu, 30, read.item(array[10]));
-	inv.setItem(menu, 25, read.item(array[1], array[0]));
-	inv.update(player);
-}
-
-function recipe.setPage(player, menu, page) {
-	map.add($recipe_site_map, player.getUuid(player), page);
-	size = list.getSize($items_list);
-	max_page = math.roundUp(size / 45);
-	if(page > max_page) {
-		return;
-	}
-	inv.setItem(menu, 45, $air_item);
-	if(page > 1) {
-		inv.setItem(menu, 46, read.item("minecraft:paper", 1, concat("§e", text.number(page - 1), " <<")));
-	} else {
-		inv.setItem(menu, 46, $air_item);
-	}
-	if(page < max_page) {
-		inv.setItem(menu, 47, read.item("minecraft:paper", 1, concat("§e>> ", text.number(page + 1))));
-	} else {
-		inv.setItem(menu, 47, $air_item);
-	}
-	max_index = size - 1;
-	for(i = 0; i < 45; i++) {
-		list_index = i + 45 * (page - 1);
-		if(list_index > max_index) {
-			inv.setItem(menu, i, $air_item);
-		} else {
-			array = list.getIndex($items_list, list_index);
-			inv.setItem(menu, i, read.item(array[1]));
-		}
-	}
-	inv.update(player);
-}
-
 function setDeathLoc(player) {
 	map.add($death_loc_map, player.getUuid(player), entity.getLocation(player));
 }

+ 4 - 1
system/chat.txt

@@ -197,7 +197,7 @@ if(perm.has(player, "color")) {
 if(text.startsWith(message, "https://", 0)) {
 	message = text.link(message, message);
 }
-msg.online(player, message);
+msg.chat(player, message);
 goto("wait");
 
 @living_death
@@ -206,6 +206,9 @@ world_name = world.getName(world);
 if(world.isCreativeName(world_name)) {
 	goto("wait");
 }
+if(world.isGamesName(world_name)) {
+	goto("wait");
+}
 damage_type = damage.getType(damage_source);
 list = map.getOrDefault(causetolist, damage_type, defaultdeaths);
 if(damage_type == "player") {

+ 23 - 12
system/chestshops.txt

@@ -14,7 +14,6 @@ ignoreGoto(event);
 goto("wait");
 
 @inv_click
-cancel = true;
 if(inv_slot == 10) {
 	map.remove(invid_to_sign_loc, inv_id);
 	inv.close(player);
@@ -27,9 +26,13 @@ if(!isAWallSign(sign_loc)) {
 	msg.prefix(player, prefix_shop, "No longer a shop.");
 	goto("wait");
 }
+factor = 1;
+if(click_type == "QUICK_MOVE") {
+	factor = 8;
+}
 adminshop = isAdminShop(sign_loc);
-buy_price = shop.getBuyPrice(inv);
-sell_price = shop.getSellPrice(inv);
+buy_price = shop.getBuyPrice(inv) * factor;
+sell_price = shop.getSellPrice(inv) * factor;
 chestloc1 = loc.mod(sign_loc, 0, -1, 0);
 chestloc2 = block.getSecChest(chestloc1);
 if(!isAChest(chestloc1)) {
@@ -40,6 +43,10 @@ if(!isAChest(chestloc1)) {
 }
 if(inv_slot == 3) { //Buy
 	itemstack = inv.getItem(inv, 4);
+	itemstack_2 = item.clone(itemstack);
+	if(click_type == "QUICK_MOVE") {
+		item.setAmount(itemstack_2, item.getAmount(itemstack_2) * factor);
+	}
 	//Check players money
 	if(!hasEnoughMoney(player, buy_price)) {
 		msg.prefix(player, prefix_shop, "You do not have enough money.");
@@ -51,20 +58,20 @@ if(inv_slot == 3) { //Buy
 			itemamount2 = block.getItemAmount(chestloc2, true, itemstack);
 		}
 		itemamount1 = block.getItemAmount(chestloc1, true, itemstack);
-		if(itemamount1 + itemamount2 < item.getAmount(itemstack)) {
+		if(itemamount1 + itemamount2 < item.getAmount(itemstack_2)) {
 			msg.prefix(player, prefix_shop, "Not enough items in chest.");
 			goto("wait");
 		}
 	}
 	//Items ins Inventar geben oder droppen
-	notgiven = player.giveItem(player, itemstack);
+	notgiven = player.giveItem(player, itemstack_2);
 	if(notgiven != null) {
 		item.drop(entity.getLocation(player), notgiven);
 	}
 	//In einem AdminShop werden keine Items abgelegt
 	if(!adminshop) {
-		itemstack2 = item.clone(itemstack);
-		notremoved = block.subItem(chestloc1, itemstack2);
+		itemstack_temp = item.clone(itemstack_2);
+		notremoved = block.subItem(chestloc1, itemstack_temp);
 		if(chestloc2 != null) {
 			block.subItem(chestloc2, notremoved);
 		}
@@ -83,6 +90,10 @@ if(inv_slot == 3) { //Buy
 	inv.update(player);
 }  elseif(inv_slot == 6) { //Sell
 	itemstack = inv.getItem(inv, 5);
+	itemstack_2 = item.clone(itemstack);
+	if(click_type == "QUICK_MOVE") {
+		item.setAmount(itemstack_2, item.getAmount(itemstack_2) * factor);
+	}
 	if(!adminshop) {
 		owner_player_id = text.convert(block.getSign(sign_loc, 3));
 		if(!isDouble(owner_player_id)) {
@@ -99,22 +110,22 @@ if(inv_slot == 3) { //Buy
 		}
 	}
 	//Items des Spielers checken
-	if(player.getItemAmount(player, true, itemstack) < item.getAmount(itemstack)) {
+	if(player.getItemAmount(player, true, itemstack) < item.getAmount(itemstack_2)) {
 		msg.prefix(player, prefix_shop, "You do not have enough items.");
 		goto("wait");
 	}
 	//Platz in der Kiste checken
 	if(!adminshop) {
 		//Versuche den ganzen ItemStack in der 1.Kiste unterzubringen
-		itemstack2 = item.clone(itemstack);
-		notinchest1 = block.addItem(chestloc1, itemstack2);
+		itemstack_temp = item.clone(itemstack_2);
+		notinchest1 = block.addItem(chestloc1, itemstack_temp);
 		if(item.getType(notinchest1) != "minecraft:air") {
 			//Versuche den Rest des ItemStack in der 2.Kiste unterzubringen
 			notinchest2 = block.addItem(chestloc2, notinchest1);
 			if(item.getType(notinchest1) != "minecraft:air") {
 				//Entferne die ItemStacks wieder
 				msg.prefix(player, prefix_shop, "Not enough space in chest.");
-				block.subItem(chestloc1, itemstack2);
+				block.subItem(chestloc1, itemstack_temp);
 				block.addItem(chestloc1, notinchest2);
 				goto("wait");
 			}
@@ -122,7 +133,7 @@ if(inv_slot == 3) { //Buy
 		subMoney(owner_player_id, sell_price);
 	}
 	addMoney(player, sell_price);
-	player.removeItem(player, itemstack);
+	player.removeItem(player, itemstack_2);
 	inv.update(player);
 }
 goto("wait");

+ 183 - 47
system/commands.txt

@@ -40,6 +40,7 @@ command.add("infopoint8");
 command.add("infopoint9");
 command.add("infopoint10");
 command.add("infopoint11");
+command.add("infopoint12");
 //Vanilla überschreiben
 command.add("help");
 command.add("butcher");
@@ -329,6 +330,33 @@ set.add(butcher_set, "zombified_piglin");
 set.add(butcher_set, "cod");
 set.add(butcher_set, "guardian");
 
+attribut_set = set.new();
+set.add(attribut_set, "generic.armor");
+set.add(attribut_set, "generic.armor_toughness");
+set.add(attribut_set, "generic.attack_damage");
+set.add(attribut_set, "generic.knockback_resistance");
+set.add(attribut_set, "generic.max_health");
+set.add(attribut_set, "generic.movement_speed");
+set.add(attribut_set, "generic.attack_speed");
+set.add(attribut_set, "generic.luck");
+
+not_blocked_cmd = set.new();
+set.add(not_blocked_cmd, "leave");
+set.add(not_blocked_cmd, "ban");
+set.add(not_blocked_cmd, "silentban");
+set.add(not_blocked_cmd, "kick");
+set.add(not_blocked_cmd, "silentkick");
+set.add(not_blocked_cmd, "warn");
+set.add(not_blocked_cmd, "tempban");
+set.add(not_blocked_cmd, "mute");
+set.add(not_blocked_cmd, "unmute");
+set.add(not_blocked_cmd, "unban");
+set.add(not_blocked_cmd, "tip");
+set.add(not_blocked_cmd, "var");
+set.add(not_blocked_cmd, "quest");
+set.add(not_blocked_cmd, "msg");
+set.add(not_blocked_cmd, "help");
+
 rank_array = array.new(25, 2);
 //Playtime
 rank.add(0, "rank.owner", "4Owner");
@@ -474,8 +502,8 @@ if(event == "custom_command") {
 	affectedname = player.getName(player);
 	player_name = player.getName(player);
 	affectedplayer = player;
-	if(command != "leave") {
-		if(player.isCommandBlocked(player)) {
+	if(player.isCommandBlocked(player)) {
+		if(!set.contains(not_blocked_cmd, command)) {
 			msg.prefix(player, prefix_commands, "The most important rule in competition: Sabotage!");
 			goto("wait");
 		}
@@ -524,7 +552,7 @@ if(event == "player_move") {
 }
 if(event == "block_click") {
 	world_name = world.getName(loc.getWorld(entity.getLocation(player)));
-	if(action == "right" && !word.isSurvName(world_name) && block.hasTag(beds_tag, block)) {
+	if(action == "right" && !world.isSurvName(world_name) && block.hasTag(beds_tag, block)) {
 		cancel = true;
 		goto("wait");
 	}
@@ -773,7 +801,7 @@ if(event == "inv_click") {
 		if(skill.isActive(skill_name)) {
 			player_loc = entity.getLocation(player);
 			world_name = world.getName(loc.getWorld(player_loc));
-			if(!word.isSurvName(world_name)) {
+			if(!world.isSurvName(world_name)) {
 				msg.prefix(player, prefix_skill, "You can't use this in this world.");
 				goto("wait");
 			}
@@ -924,8 +952,8 @@ if(event == "inv_click") {
 			inv.setItem(inv, inv_slot, read.item("minecraft:ender_pearl", 1, "§fAccept TPA-Requests", new_value));
 		}
 		elseif(inv_slot == 2) {
-			new_value = !showCoords.get(player);
-			showCoords.set(player, new_value);
+			new_value = !player.getShowcoords(player);
+			player.setShowcoords(player, new_value);
 			inv.setItem(inv, inv_slot, read.item("minecraft:compass", 1, "§fShow Coords", new_value));
 			if(!new_value) {
 				display.remove(player, 30);
@@ -969,7 +997,7 @@ if(event == "function_key") {
 		inv = inv.new("333333333");
 		inv.setItem(inv, 0, read.item("minecraft:oak_door", 1, "§fAutomatic Doors", player.getAutoCloseDoor(player)));
 		inv.setItem(inv, 1, read.item("minecraft:ender_pearl", 1, "§fAccept TPA-Requests", player.doesAcceptTpaRequests(player)));
-		inv.setItem(inv, 2, read.item("minecraft:compass", 1, "§fShow Coords", showCoords.get(player)));
+		inv.setItem(inv, 2, read.item("minecraft:compass", 1, "§fShow Coords", player.getShowcoords(player)));
 		inv.setItem(inv, 3, read.item("minecraft:oak_stairs", 1, "§fStair-Sitting", player.hasSittingActivated(player)));
 		inv.setItem(inv, 4, read.item("minecraft:iron_sword", 1, "§fPvP", hasPvpOn(player)));
 		inv.setItem(inv, 5, read.item("minecraft:bone", 1, "§fNo Pet Damage", player.getNoPetDamage(player)));
@@ -980,15 +1008,15 @@ if(event == "function_key") {
 	if(key == 2) {
 		player_loc = entity.getLocation(player);
 		world_name = world.getName(loc.getWorld(player_loc));
-		if(word.isSurvName(world_name) || world_name == "story") {
-			skill.showAll(player);
+		if(world.isSurvName(world_name) || world_name == "story") {
+			skill.showAll(player, player);
 		}
 		goto("wait");
 	}
 	if(key == 3) {
 		player_loc = entity.getLocation(player);
 		world_name = world.getName(loc.getWorld(player_loc));
-		if(!word.isSurvName(world_name)) {
+		if(!world.isSurvName(world_name)) {
 			goto("wait");
 		}
 		world_time = world.getTime(world.getOverWorld());
@@ -1052,7 +1080,23 @@ skip_night_started = false;
 goto("wait");
 
 @skills
-skill.showAll(player);
+//skills [player]
+if(size == 0) {
+	skill.showAll(player, player);
+	goto("wait");
+}
+if(!perm.has(player, "skills.other")) {
+	perm.no(player, "skills.other");
+	goto("wait");
+}
+p_name = list.getIndex(args, 0);
+p_uuid = player.getUuid(p_name);
+if(p_uuid == null) {
+	msg.prefix(player, prefix_tips, "This player has never been online.");
+	goto("wait");
+}
+from_p_id = player.getId(p_uuid);
+skill.showAll(from_p_id, player);
 goto("wait");
 
 @infopoint1
@@ -1110,6 +1154,11 @@ msg(player, getSpacer());
 msg.prefix(player, "§eNote", "§aEverything is self-coded. Worldedit is the only external mod we use.");
 goto("wait");
 
+@infopoint12
+msg(player, getSpacer());
+msg.prefix(player, "§eNote", "§aBe Creative in our creative world.");
+goto("wait");
+
 @party
 if(size == 0) {
 	@partyhelp
@@ -1136,14 +1185,20 @@ if(arg0 == "list") {
 			goto("wait");
 		}
 		list = party.getList(player.getPartyId(player));
-		table = table.new("§5", 13, 7);
+		width = 1;
+		if(list.getSize(list) > 9) {
+			width = 2;
+		}
+		table = table.new("§5", width, 13, 7);
 		msg(player, table.getStart(table));
-		msg(player, table.get(table, "§lName", "§lRole"));
+		msg(player, table.get(table, "§d#", "§d§lName", "§d§lRole"));
 		msg(player, table.getMiddle(table));
 		iter = list.iterator(list);
+		c = 0;
 		while(hasNext(iter)) {
+			c++;
 			p = player.get(next(iter));
-			msg(player, table.get(table, player.getName(p), player.getPartyRank(p)));
+			msg(player, table.get(table, text.number(c), player.getName(p), player.getPartyRank(p)));
 		}
 		msg(player, table.getEnd(table));
 	}
@@ -2055,10 +2110,10 @@ if(size == 1) {
 }
 if(player.hasMinigame(affectedplayer)) {
 	if(size == 1) {
-		msg.prefix(player, prefix_commands, "The player can't be teleported now.");
-	} else {
-		msg.prefix(player, prefix_commands, "You can't teleport now.");
+		msg.prefix(player, prefix_commands, "This player can't be teleported now.");
+		goto("wait");
 	}
+	msg.prefix(player, prefix_commands, "You can't teleport now.");
 	goto("wait");
 }
 if(player.teleport(affectedplayer, serverspawn, true)) {
@@ -2139,6 +2194,10 @@ if(player.isAfk(player)) {
 goto("wait");
 
 @afk
+if(player.hasMinigame(player)) {
+	msg.prefix(player, prefix_commands, "No afk while in a minigame :P");
+	goto("wait");
+}
 nickname = player.getNickname(player);
 if(player.isAfk(player)) {
 	msg.prefix("online", prefix_commands, concat(nickname, "§7 is back."));
@@ -2198,7 +2257,7 @@ list = players.toList();
 size = list.getSize(list);
 for(i = 0; i < size; i++) {
 	p = list.getIndex(list, i);
-	if(showcoords.get(p)) {
+	if(player.getShowcoords(p)) {
 		p_loc = entity.getLocation(p);
 		display.add(p, 30, concat("§6X§r ", text.number(loc.getCoord(p_loc, "bx")), " §6Y§r ", text.number(loc.getCoord(p_loc, "by")), " §6Z§r ", text.number(loc.getCoord(p_loc, "bz"))));
 	}
@@ -2241,6 +2300,9 @@ iter = list.iterator(online_list);
 while(hasNext(iter)) {	
 	uuid = next(iter);
 	p = player.get(uuid);
+	if(player.hasMinigame(p)) {
+		continue;
+	}
 	yaw = loc.getYaw(entity.getLocation(p));
 	a = map.get(afk_checker_map, uuid);
 	if(a == null) {
@@ -3065,6 +3127,7 @@ if(size != 1) {
 	@starthelp
 	msg.prefix(sender, prefix_commands, "/start ...");
 	msg(sender, " - ai");
+	msg(sender, " - amber");
 	msg(sender, " - chat");
 	msg(sender, " - commands");
 	msg(sender, " - creative");
@@ -3080,7 +3143,9 @@ if(size != 1) {
 	msg(sender, " - loom");
 	msg(sender, " - mails");
 	msg(sender, " - perms");
+	msg(sender, " - playerdata");
 	msg(sender, " - pumpkin");
+	msg(sender, " - recipes");
 	msg(sender, " - scheduler");
 	msg(sender, " - shop");
 	msg(sender, " - sitting");
@@ -3102,6 +3167,13 @@ if(arg0 == "ai") {
 	}
 	script.startNamed("Ai", "system/ai", "utils/u_general");
 }
+elseif(arg0 == "amber") {
+	script = script.get("Amber");
+	if(script != null) {
+		script.term(script);
+	}
+	script.startNamed("Amber", "utils/u_error", "survival/amber", "utils/u_general");
+}
 elseif(arg0 == "commands") {
 	script = script.startNamed("Commands", "system/commands", "utils/u_general", "utils/u_games");
 	if(script == null) {
@@ -3190,6 +3262,13 @@ elseif(arg0 == "loom") {
 elseif(arg0 == "perms") {
 	script.start("system/perms", "utils/u_general");
 }
+elseif(arg0 == "playerdata") {
+	script = script.get("Playerdata");
+	if(script != null) {
+		script.term(script);
+	}
+	script.startNamed("Playerdata", "utils/u_error", "system/player_data", "utils/u_general");
+}
 elseif(arg0 == "pumpkin") {
 	script = script.get("Pumpkin");
 	if(script != null) {
@@ -3197,6 +3276,13 @@ elseif(arg0 == "pumpkin") {
 	}
 	script.startNamed("Pumpkin", "utils/u_error", "survival/pumpkin", "utils/u_general");
 }
+elseif(arg0 == "recipes") {
+	script = script.get("Recipes");
+	if(script != null) {
+		script.term(script);
+	}
+	script.startNamed("Recipes", "survival/recipes");
+}
 elseif(arg0 == "stats") {
 	script = script.get("Ranklist");
 	if(script != null) {
@@ -3351,10 +3437,10 @@ if(size == 1) {
 }
 if(player.hasMinigame(affectedplayer)) {
 	if(size == 1) {
-		msg.prefix(player, prefix_commands, "The player can't be teleported now.");
-	} else {
-		msg.prefix(player, prefix_commands, "You can't teleport now.");
+		msg.prefix(player, prefix_commands, "This player can't be teleported now.");
+		goto("wait");
 	}
+	msg.prefix(player, prefix_commands, "You can't teleport now.");
 	goto("wait");
 }
 if(size == 1) {
@@ -3393,10 +3479,10 @@ if(size == 1) {
 }
 if(player.hasMinigame(affectedplayer)) {
 	if(size == 1) {
-		msg.prefix(player, prefix_commands, "The player can't be teleported now.");
-	} else {
-		msg.prefix(player, prefix_commands, "You can't teleport now.");
+		msg.prefix(player, prefix_commands, "This player can't be teleported now.");
+		goto("wait");
 	}
+	msg.prefix(player, prefix_commands, "You can't teleport now.");
 	goto("wait");
 }
 if(size == 1) {
@@ -3434,10 +3520,10 @@ if(size == 1) {
 }
 if(player.hasMinigame(affectedplayer)) {
 	if(size == 1) {
-		msg.prefix(player, prefix_commands, "The player can't be teleported now.");
-	} else {
-		msg.prefix(player, prefix_commands, "You can't teleport now.");
+		msg.prefix(player, prefix_commands, "This player can't be teleported now.");
+		goto("wait");
 	}
+	msg.prefix(player, prefix_commands, "You can't teleport now.");
 	goto("wait");
 }
 if(size == 1) {
@@ -3744,7 +3830,11 @@ if(arg0 == "attribute") {
 		msg.prefix(player, prefix_datatools, "Natural number expected.");
 		goto("wait");
 	}
-	attribut = concat("generic.", list.getIndex(args, 1));
+	attribut = concat("generic.", text.toLowerCase(list.getIndex(args, 1)));
+	if(!set.contains(attribut_set, attribut)) {
+		msg.prefix(player, prefix_datatools, "Unknown attribute.");
+		goto("wait");
+	}
 	slot = read.slot(list.getIndex(args, 2));
 	if(slot == null) {
 		msg.prefix(player, prefix_datatools, "Incorrect slot.");
@@ -4036,8 +4126,8 @@ if(player.getId(p_uuid) == 18) {
 		msg.prefix(sender, prefix_commands, "This player is not online.");
 		goto("wait");
 	}
-	msg(sender, text.concat2(concat("§6[ -> §c", player.getName(p), "§6] "), message));
-	msg(p, text.concat2(concat("§6[§c", sender_name, "§6] "), 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] ", concat("§e", message));
 }
 map.add(answer_map, p_uuid, player_uuid);
 map.add(answer_map, player_uuid, p_uuid);
@@ -4071,8 +4161,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] ", message);
-	msg(sender, concat("§6[ -> §c", player.getName(p)), "§6] ", 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] ", concat("§e", message));
 }
 player_uuid = player.getUuid(sender);
 map.add(answer_map, p_uuid, player_uuid);
@@ -4480,7 +4570,7 @@ if(size == 0) {
 	msg(player, "§d - create §rCreates a (sub-)plot (Y: 0 - 255)");
 	msg(player, "§d - create3D §rCreates a 3D (sub-)plot");
 	msg(player, "§d - remove [id] §rRemoves a plot");
-	msg(player, "§d - expand <anzahl> [id] §rExpands a plot");
+	msg(player, "§d - expand <anzahl> [direction] [id] §rExpands a plot");
 	msg(player, "§d - name [id] <name> §rRenames a plot");
 	msg(player, "§d - share <player> [id] §rAdd a player to a plot");
 	msg(player, "§d - kick <player> [id] §rRemove a player from a plot");
@@ -4927,7 +5017,7 @@ if(arg0 == "expand") {
 		}
 	} else {
 		if(size != 4) {
-			msg.prefix(player, prefix_commands, "/plot expand <anzahl> [direction] [plot_id]");
+			msg.prefix(player, prefix_commands, "/plot expand <anzahl> [<direction> <plot_id>]");
 			goto("wait");
 		}
 		direction = text.toLowerCase(list.getIndex(args, 2));
@@ -6013,7 +6103,7 @@ if(arg0 == "list") {
 }
 location = entity.getLocation(player);
 world_name = world.getName(loc.getWorld(entity.getLocation(player)));
-if(!word.isSurvName(world_name)) {
+if(!world.isSurvName(world_name)) {
 	msg.prefix(player, prefix_commands, "You can't use this command in this world.");
 	goto("wait");
 }
@@ -6099,6 +6189,10 @@ if(!player.doesAcceptTpaRequests(p)) {
  	msg.prefix(player, prefix_commands, concat("§c", p_name, "§r rejects teleport requests."));
 	goto("wait");
 }
+if(!player.canTeleport(p)) {
+	msg.prefix(player, prefix_commands, "This player can't teleport now.");
+	goto("wait");
+}
 world_name = world.getName(loc.getWorld(entity.getLocation(player)));
 if(world.isGamesName(world_name)) {
 	msg.prefix(player, prefix_commands, "You can't teleport in this world.");
@@ -6131,6 +6225,10 @@ if(p == null) {
 	msg.prefix(player, prefix_commands, "This player is not online.");
 	goto("wait");
 }
+if(!player.canTeleport(p)) {
+	msg.prefix(player, prefix_commands, "This player can't teleport now.");
+	goto("wait");
+}
 if(!player.doesAcceptTpaRequests(p)) {
 	msg.prefix(player, prefix_commands, concat("§c", p_name, "§r rejects teleport requests."));
 	goto("wait");
@@ -6167,6 +6265,14 @@ if(p == null) {
 	msg.prefix(player, prefix_commands, "This player is not online.");
 	goto("wait");
 }
+if(!player.canTeleport(player)) {
+	msg.prefix(player, prefix_commands, "This player can't teleport to you now.");
+	goto("wait");
+}
+if(!player.canTeleport(p)) {
+	msg.prefix(player, prefix_commands, "This player can't teleport to you now.");
+	//Kein return. Spieler A bekommt cancel adventure und Spieler B wird informiert.
+}
 world_name = world.getName(loc.getWorld(entity.getLocation(player)));
 if(world.isGamesName(world_name)) {
 	msg.prefix(player, prefix_commands, concat("§c", p_name, "§r isn't allowed to teleport to your world."));
@@ -6203,6 +6309,14 @@ if(p == null) {
 	msg.prefix(player, prefix_commands, "This player is not online.");
 	goto("wait");
 }
+if(!player.canTeleport(player)) {
+	msg.prefix(p, prefix_commands, "This player can't teleport to you now.");
+	//Kein return. Spieler A bekommt cancel adventure und Spieler B wird informiert.
+}
+if(!player.canTeleport(p)) {
+	msg.prefix(player, prefix_commands, "You must not teleport to this player now.");
+	goto("wait");
+}
 world_name = world.getName(loc.getWorld(entity.getLocation(player)));
 if(world.isGamesName(world_name)) {
 	msg.prefix(player, prefix_commands, "You can't teleport in this world.");
@@ -6251,9 +6365,9 @@ elseif(size == 2) {
 if(player.hasMinigame(affectedplayer)) {
 	if(size == 2) {
 		msg.prefix(player, prefix_commands, "This player can't be teleported now.");
-	} else {
-		msg.prefix(player, prefix_commands, "You can't teleport now.");
+		goto("wait");
 	}
+	msg.prefix(player, prefix_commands, "You can't teleport now.");
 	goto("wait");
 }
 to_player = read.player(to_name);
@@ -6711,9 +6825,9 @@ if(size == 5) {
 if(player.hasMinigame(affectedplayer)) {
 	if(size == 5) {
 		msg.prefix(player, prefix_commands, "This player can't be teleported now.");
-	} else {
-		msg.prefix(player, prefix_commands, "You can't teleport now.");
+		goto("wait");
 	}
+	msg.prefix(player, prefix_commands, "You can't teleport now.");
 	goto("wait");
 }
 if(player.teleport(affectedplayer, location, true)) {
@@ -6729,7 +6843,7 @@ if(size > 0) {
 	msg.prefix(player, prefix_commands, "/back");
 	goto("wait");
 }
-if(player.hasMinigame(player)) {
+if(!player.canTeleport(player)) {
 	msg.prefix(player, prefix_commands, "You can't teleport now.");
 	goto("wait");
 }
@@ -7625,8 +7739,7 @@ if(arg0 == "loadfrom") {
 		}
 		p = read.player(p_name);
 		if(p != null) {
-			msg.prefix(player, prefix_commands, "This player is online. Use /invsee");
-			goto("wait");
+			msg.prefix(player, prefix_commands, "§cThis player is online. Loaded inventory can differ from /inv see!");
 		}
 		from_player_or_id = player.getId(p_uuid);
 		world_name = list.getIndex(args, 2);
@@ -7697,12 +7810,12 @@ if(arg0 == "tp") {
 			goto("wait");
 		}
 	}
-	if(player.hasMinigame(affectedplayer)) {
+	if(!player.canTeleport(affectedplayer)) {
 		if(size == 3) {
 			msg.prefix(player, prefix_commands, "This player can't be teleported now.");
-		} else {
-			msg.prefix(player, prefix_commands, "You can't teleport now.");
+			goto("wait");
 		}
+		msg.prefix(player, prefix_commands, "You can't teleport now.");
 		goto("wait");
 	}
 	if(player != affectedplayer) {
@@ -8220,7 +8333,6 @@ function setCommandHelps() {
 	commandhelp.add("boost");
 	commandhelp.add("bug");
 	commandhelp.add("report");
-	commandhelp.add("skills");
 	commandhelp.add("startgame");
 	commandhelp.add("top");
 	commandhelp.add("ride");
@@ -8278,6 +8390,7 @@ function setCommandHelps() {
 	
 	help = command.newHelp("start", "start");
 	command.addHelpChild(help, command.newHelpLiteral("ai"));
+	command.addHelpChild(help, command.newHelpLiteral("amber"));
 	command.addHelpChild(help, command.newHelpLiteral("chat"));
 	command.addHelpChild(help, command.newHelpLiteral("commands"));
 	command.addHelpChild(help, command.newHelpLiteral("creative"));
@@ -8292,7 +8405,9 @@ function setCommandHelps() {
 	command.addHelpChild(help, command.newHelpLiteral("games"));
 	command.addHelpChild(help, command.newHelpLiteral("mails"));
 	command.addHelpChild(help, command.newHelpLiteral("perms"));
+	command.addHelpChild(help, command.newHelpLiteral("playerdata"));
 	command.addHelpChild(help, command.newHelpLiteral("pumpkin"));
+	command.addHelpChild(help, command.newHelpLiteral("recipes"));
 	command.addHelpChild(help, command.newHelpLiteral("scheduler"));
 	command.addHelpChild(help, command.newHelpLiteral("shop"));
 	command.addHelpChild(help, command.newHelpLiteral("sitting"));
@@ -8563,6 +8678,11 @@ function setCommandHelps() {
 	command.addHelpChild(help, helpArg0);
 	command.addHelp(help);
 	
+	help = command.newHelp("answer", "answer");
+	command.addHelpChild(help, command.newHelpString("message", true));
+	command.addHelp(help);
+	commandhelp.addAlias(help, "r", "answer");
+	
 	help = command.newHelp("time", "time");
 	//time set <time>
 	helpArg0 = command.newHelpLiteral("set");
@@ -8746,7 +8866,19 @@ function setCommandHelps() {
 	//plot expand <anzahl>
 	helpArg0 = command.newHelpLiteral("expand");
 	helpArg1 = command.newHelpInt("anzahl", 1, 1000);
-	command.addHelpChild(helpArg1, command.newHelpInt("id", 1, 10000));
+	helpArg3 = command.newHelpInt("id", 1, 10000);
+	helpArg2 = command.newHelpLiteral("north");
+	command.addHelpChild(helpArg2, helpArg3);
+	command.addHelpChild(helpArg1, helpArg2);
+	helpArg2 = command.newHelpLiteral("east");
+	command.addHelpChild(helpArg2, helpArg3);
+	command.addHelpChild(helpArg1, helpArg2);
+	helpArg2 = command.newHelpLiteral("south");
+	command.addHelpChild(helpArg2, helpArg3);
+	command.addHelpChild(helpArg1, helpArg2);
+	helpArg2 = command.newHelpLiteral("west");
+	command.addHelpChild(helpArg2, helpArg3);
+	command.addHelpChild(helpArg1, helpArg2);
 	command.addHelpChild(helpArg0, helpArg1);
 	command.addHelpChild(help, helpArg0);
 	command.addHelp(help);
@@ -8859,6 +8991,10 @@ function setCommandHelps() {
 	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "user.other"));
 	command.addHelp(help);
 	
+	help = command.newHelp("skills", "skills");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "user.other"));
+	command.addHelp(help);
+	
 	help = command.newHelp("cli", "cli");
 	command.addHelpChild(help, command.newHelpInt("int", 0, 1000));
 	command.addHelp(help);

+ 2 - 2
system/damage.txt

@@ -51,13 +51,13 @@ if(health <= 0) {
 }
 new_health = health + heal_amount;
 living.setHealth(living_entity, new_health);
-if(!isPlayer(living_entity)) {
+if(isLiving(living_entity) && !isPlayer(living_entity)) {
 	updateEntityName(living_entity);
 }
 goto("wait");
 
 @living_hurt
-if(isPlayer(living_entity)) {
+if(isPlayer(living_entity) || !isLiving(living_entity)) {
 	goto("wait");
 }
 if(list.getSize(entities_list) == 0) {

+ 1 - 1
system/doors.txt

@@ -24,7 +24,7 @@ msg("dev", "§bDoors §rloaded.");
 wait();
 loc = entity.getLocation(player);
 world_name = world.getName(loc.getWorld(loc));
-if(word.isSurvName(world_name) || world.isStoryName(world_name)) {
+if(world.isSurvName(world_name) || world.isStoryName(world_name)) {
 	ignoreGoto(event);
 }
 goto("wait");

+ 1 - 1
system/hawkeye.txt

@@ -74,7 +74,7 @@ if(event == "block_click") {
 	goto("wait");
 }
 world_name = world.getName(loc.getWorld(block_loc));
-if(word.isSurvName(world_name)) {
+if(world.isSurvName(world_name)) {
 	if(event == "block_break" || event == "block_place") {
 		if(!cancel) {
 			id = hawkeye.getNextId();

+ 0 - 0
system/release_loop.txt → system/modt_loop.txt


+ 9 - 2
system/perms.txt

@@ -84,6 +84,7 @@ perm.registerGroup(0, "infopoint8");
 perm.registerGroup(0, "infopoint9");
 perm.registerGroup(0, "infopoint10");
 perm.registerGroup(0, "infopoint11");
+perm.registerGroup(0, "infopoint12");
 
 //Admin-Rechte
 perm.registerGroup(2, "isAdmin");
@@ -182,8 +183,6 @@ perm.registerGroup(2, "inv.reload");
 perm.registerGroup(2, "inv.ignore");
 perm.registerGroup(2, "inv.loadFrom");
 perm.registerGroup(2, "inv.saveFor");
-perm.registerGroup(2, "op");
-perm.registerGroup(2, "deop");
 perm.registerGroup(2, "xp");
 perm.registerGroup(2, "vanish");
 perm.registerGroup(2, "mute");
@@ -212,6 +211,7 @@ perm.registerGroup(2, "locatebiome");
 perm.registerGroup(2, "quest");
 perm.registerGroup(2, "debug");
 perm.registerGroup(2, "user.other");
+perm.registerGroup(2, "skills.other");
 
 //Builder-Rechte
 perm.registerGroup(3, "isBuilder");
@@ -279,6 +279,7 @@ perm.registerGroup(5, "perm.toggle");
 perm.registerGroup(5, "error");
 perm.registerGroup(5, "errordebug");
 perm.registerGroup(5, "warp.create");
+perm.registerGroup(5, "skills.other");
 
 //Teleport-Rechte
 perm.registerGroup(6, "canTP");
@@ -301,6 +302,8 @@ perm.registerGroup(7, "datapack");
 perm.registerGroup(7, "reload");
 perm.registerGroup(7, "hawkeye.entries");
 perm.registerGroup(7, "worldborder");
+perm.registerGroup(7, "op");
+perm.registerGroup(7, "deop");
 
 //Perm-Group zur User-Simulation
 perm.registerGroup(8, "pseudoPerm");
@@ -318,6 +321,7 @@ perm.registerGroup(9, "tempban");
 perm.registerGroup(9, "allsounds");
 perm.registerGroup(9, "perm");
 perm.registerGroup(9, "perm.toggle");
+perm.registerGroup(9, "skills.other");
 
 //Owner
 perm.registerGroup(10, "isOwner");
@@ -325,6 +329,8 @@ perm.registerGroup(10, "isTeam");
 perm.registerGroup(10, "datapack");
 perm.registerGroup(10, "reload");
 perm.registerGroup(10, "worldborder");
+perm.registerGroup(10, "op");
+perm.registerGroup(10, "deop");
 
 //Streamer
 perm.registerGroup(11, "isStreamer");
@@ -389,6 +395,7 @@ perm.registerGroup(12, "plot.other");
 perm.registerGroup(12, "warp.create");
 perm.registerGroup(12, "boost");
 perm.registerGroup(12, "yeet");
+perm.registerGroup(12, "skills.other");
 
 //YTer
 perm.registerGroup(13, "isYT");

+ 1 - 0
system/player_data.txt

@@ -6,6 +6,7 @@ Configs sind dauerhaft geladen und werden z.B. in der ScriptVar "survival_data"
 playerdata.loadAll("survival_data");
 playerdata.loadAll("games_data");
 playerdata.loadAll("story_data");
+msg("dev", "§bPlayerdata §rloaded");
 
 function playerdata.loadAll(name) {
 	player_data_map = map.new();

+ 2 - 2
system/ranklist.txt

@@ -16,8 +16,8 @@ ranking.add("§5", "Rebuild", "rebuild", "rebuildranks", "All solved patterns",
 ranking.add("§d", "FastBridge", "fb", "fastbridgeranks", "Points Record", "DESC", null);
 ranking.add("§6", "SnowGame", "snow", "snowranks", "Kills", "DESC", null);
 ranking.add("§6", "TJR", "tjr", "tjrranks", "Checkpoints | Time", "DESC", "ASC");
-ranking.add("§b", "JR-Ice", "ijr", "icejrranks", "Checkpoints | Time", "DESC", "ASC");
-ranking.add("§b", "JR-Rooms", "jr_rooms", "jr_room_ranks", "Checkpoints | Time", "DESC", "ASC");
+ranking.add("§a", "JR-Ice", "ijr", "icejrranks", "Checkpoints | Time", "DESC", "ASC");
+ranking.add("§a", "JR-Rooms", "jr_rooms", "jr_room_ranks", "Checkpoints | Time", "DESC", "ASC");
 ranking.add("§a", "JR-Endless", "jr", "jumpranks", "Points Record", "DESC", null);
 ranking.add("§d", "Letters", "letter", "letterranks", "Time", "ASC", null);
 ranking.add("§a", "Sammelfieber", "sfsingle", "sfsingle", "Points Record", "DESC", null);

+ 273 - 1
system/skills.txt

@@ -1 +1,273 @@
-//Hier werden alle Events abgefangen und beeinflusst, je nachdem ob ein Skill aktiv ist oder nicht
+//Hier werden alle Events abgefangen und beeinflusst, je nachdem ob ein Skill aktiv ist oder nicht
+
+event.load("projectile_hit");
+event.load("living_death");
+event.load("block_break");
+event.load("player_post_respawn");
+
+prefix_skill = "§2Skill";
+
+setScriptVar("skills", list.new());
+skill.add("Keep Inventory", "skill.subcu_inv", "minecraft:chest", "Keeps the inventory on death", 100, false, false, true);
+skill.add("Comeback", "skill.comeback", "km:skill55", "Respawn at your death location", 100, false, false, true);
+skill.add("Head Hunter", "skill.head_human", "minecraft:player_head", "Drops a player's head with a 20% chance if you kill a player (5% if a staff member is killed)", 1000, true, false, false);
+skill.add("Mobheads", "skill.head_monster", "minecraft:zombie_head", "Drops a mobs's head with a 20% chance (zombie / skeleton / creeper)", 500, true, false, false);
+skill.add("Fly 10min", "skill.fly10min", "minecraft:elytra", "You can fly for 10 minutes", 500, false, true, false);
+skill.add("Grow", "skill.grow", "minecraft:farmland", "Grow seeds in radius 5", 25, false, true, false);
+skill.add("Haste", "skill.haste", "minecraft:iron_pickaxe", "Haste for 2 minutes", 25, false, true, false);
+skill.add("Speed", "skill.speed", "minecraft:iron_boots", "Speed for 2 minutes", 25, false, true, false);
+skill.add("Jump Boost", "skill.jump_boost", "minecraft:rabbit_foot", "JumpBoost Lvl.2 for 2 minutes", 25, false, true, false);
+skill.add("Dolphin", "skill.dolphin", "minecraft:fire_coral", "Swim like a dolphin for a minute", 25, false, true, false);
+skill.add("Block Up", "skill.block_up", "minecraft:diamond_pickaxe", "Break a block and the block above for a minute", 25, false, true, false);
+skill.add("Block Down", "skill.block_down", "minecraft:diamond_pickaxe", "Break a block and the block below for a minute", 25, false, true, false);
+skill.add("Timber", "skill.timber", "minecraft:iron_axe", "Break whole trees with an axe for a minute", 128, false, true, false);
+skill.add("Fire Arrow", "skill.fire_arrow", "minecraft:arrow", "For a minute with an flame enchanted bow your arrows ignite hit blocks", 50, false, true, false);
+skill.add("Better Shears", "skill.better_shears", "minecraft:shears", "Sharpness enchanted shears increase the radius for destruction of leaves", 500, true, false, true);
+skill.add("Cobweb Miner", "skill.cobweb_miner", "minecraft:cobweb", "Swords increase the radius for destruction of cobwebs", 250, true, false, true);
+
+msg("dev", "§bSurvival §rloaded.");
+@wait
+wait();
+//Wenn Event aus Survival-Welten, dann wird er verarbeitet
+if(event == "living_death") {
+	loc = entity.getLocation(living_entity);
+} else {
+	loc = entity.getLocation(player);
+}
+world_name = world.getName(loc.getWorld(loc));
+if(world.isSurvName(world_name)) {
+	ignoreGoto(event);
+}
+goto("wait");
+
+@projectile_hit
+if(!isPlayer(shooter)) {
+	goto("wait");
+}
+player = shooter;
+duration = data.getTimer(player, "skill.fire_arrow");
+if(duration > 0) {
+	if(loc_hit == null) {
+		goto("wait");
+	}
+	flame = enchantment.getLevel(ench_flame, living.getHand(player));
+	if(flame <= 0) {
+		goto("wait");
+	}
+	if(!plot.check(loc_hit, player, 3, true) && !perm.has(player, "plot.bypass")) {
+		msg.prefix(player, prefix_skill, "You have no permissions on this plot.");
+		goto("wait");
+	}
+	ent_loc = entity.getLocation(projectile);
+	if(block.isAir(ent_loc)){
+		block.set(ent_loc, "minecraft:fire");
+	}
+	fire_ring(ent_loc, "minecraft:fire", 0);
+}
+goto("wait");
+
+@player_post_respawn
+player_uuid = player.getUuid(player);
+if(set.contains(survival_respawn, player_uuid)) {
+	set.remove(survival_respawn, player_uuid);
+	if(player.isOnAdventure(player)) {
+		tp_loc = player.getAdventureStart(player);
+		entity.teleport(player, tp_loc);
+		goto("wait");
+	}
+	amount = skill.getAmount(player, "skill.comeback");
+	if(skill.isActivated(player, "skill.comeback") && amount > 0) {
+		new_amount = amount - 1;
+		skill.setAmount(player, "skill.comeback", new_amount);
+		msg.prefix(player, prefix_skill, concat("Used Comeback. New amount: ", text.number(new_amount)));
+		entity.teleport(player, getDeathLoc(player));
+		goto("wait");
+	}
+	entity.teleport(player, world.getServerSpawn());
+}
+goto("wait");
+
+@living_death
+if(isPlayer(living_entity)) {
+	player = living_entity;
+	amount = skill.getAmount(player, "skill.subcu_inv");
+	if(skill.isActivated(player, "skill.subcu_inv") && amount > 0) {
+		new_amount = amount - 1;
+		skill.setAmount(player, "skill.subcu_inv", new_amount);
+		msg.prefix(player, prefix_skill, concat("Used Subcutaneous Inventory. New amount: ", text.number(new_amount)));
+	} else {
+		player.dropInventory(player, loc);
+	}
+	killer = player.getFromDamageSource(damage_source);
+	if(isPlayer(killer)) {
+		amount = skill.getAmount(player, "skill.head_human");
+		if(amount >= 1) {
+			if(perm.has(player, "isTeam")) {
+				temp = math.random(1, 20);
+			} else {
+				temp = math.random(1, 5);
+			}
+			if(temp == 1) {
+				item.drop(loc, player.getHead(player.getUuid(player), player.getName(player)));
+			}
+		}
+	}
+	goto("wait");
+}
+killer = player.getFromDamageSource(damage_source);
+if(isPlayer(killer)) {
+	r = math.random(1, 20);
+	if(r == 1) {
+		amount = skill.getAmount(killer, "skill.head_monster");
+		if(amount >= 1) {
+			entity_type = entity.getType(living_entity);
+			if(entity_type == "creeper") {
+				item.drop(loc, read.item("minecraft:creeper_head"));
+				goto("wait");
+			}
+			if(entity_type == "zombie") {
+				item.drop(loc, read.item("minecraft:zombie_head"));
+				goto("wait");
+			}
+			if(entity_type == "skeleton") {
+				item.drop(loc, read.item("minecraft:skeleton_skull"));
+				goto("wait");
+			}
+		}
+	}
+}
+goto("wait");
+
+@block_break
+duration = data.getTimer(player, "block_down");
+if(duration > 0) {
+	do = true;
+	loc = loc.mod(block_loc, 0, -1, 0);
+	b_type = block.getType(loc);
+	if(b_type == "minecraft:bedrock" || b_type == "minecraft:end_portal_frame") {
+		do = false;
+	}
+	if(!plot.check(loc, player, 2, true)) {
+		do = false;
+	}
+	if(do) {
+		block.break(loc, player);
+	}
+}
+duration = data.getTimer(player, "block_up");
+if(duration > 0) {
+	do = true;
+	loc = loc.mod(block_loc, 0, 1, 0);
+	b_type = block.getType(loc);
+	if(b_type == "minecraft:bedrock" || b_type == "minecraft:end_portal_frame") {
+		do = false;
+	}
+	if(!plot.check(loc, player, 2, true)) {
+		do = false;
+	}
+	if(do) {
+		block.break(loc, player);
+	}
+}
+if(block_type == "minecraft:cobweb") {
+	if(cancel) {
+		goto("wait");
+	}
+	hand_item = living.getHand(player);
+	if(!item.hasTag(sword_tag, hand_item)) {
+		goto("wait");
+	}
+	amount = skill.getAmount(player, "skill.cobweb_miner");
+	if(amount <= 0) {
+		goto("wait");
+	}
+	if(!skill.isActivated(player, "skill.cobweb_miner")) {
+		goto("wait");
+	}
+	location = loc.mod(block_loc, 0, 0, 0);
+	cobweb_X = loc.getX(location);
+	cobweb_Y = loc.getY(location);
+	cobweb_Z = loc.getZ(location);
+	cobweb_radius = 1;
+	unbreaking_level = enchantment.getLevel(ench_unbreaking, hand_item);
+	for(a = -cobweb_radius; a < cobweb_radius + 1; a++) {
+		loc.setX(location, cobweb_X + a);
+		for(b = -cobweb_radius; b < cobweb_radius + 1; b++) {
+			loc.setY(location, cobweb_Y + b);
+			for(c = -cobweb_radius; c < cobweb_radius + 1; c++) {
+				loc.setZ(location, cobweb_Z + c);
+				if(math.abs(a) + math.abs(b) + math.abs(c) + math.random(0, 2) < cobweb_radius + 2) {
+					shear_cobweb(location, block_type, player, unbreaking_level);
+				}
+			}
+		}
+	}
+	goto("wait");
+}
+if(block.hasTag(leaves_tag, block)) {
+	if(cancel) {
+		goto("wait");
+	}
+	hand_item = living.getHand(player);
+	if(item.getType(hand_item) != "minecraft:shears") {
+		goto("wait");
+	}
+	if(block.property.getValue(block_loc, prop_persistent)){
+		goto("wait");
+	}
+	amount = skill.getAmount(player, "skill.better_shears");
+	if(amount <= 0) {
+		goto("wait");
+	}
+	if(!skill.isActivated(player, "skill.better_shears")) {
+		goto("wait");
+	}
+	location = loc.mod(block_loc, 0, 0, 0);
+	shears_X = loc.getX(location);
+	shears_Y = loc.getY(location);
+	shears_Z = loc.getZ(location);
+	unbreaking_level = enchantment.getLevel(ench_unbreaking, hand_item);
+	radius = enchantment.getLevel(ench_sharpness, hand_item);
+	if(radius > 0) {
+		cancel = true;
+	}
+	orig_item = block.toStack(location);
+	for(a = -radius; a < radius + 1; a++){
+		loc.setX(location, shears_X + a);
+		for(b = -radius; b < radius + 1; b++){
+			loc.setY(location, shears_Y + b);
+			for(c = -radius; c < radius + 1; c++){
+				loc.setZ(location, shears_Z + c);
+				if(math.abs(a) + math.abs(b) + math.abs(c) + math.random(0, 2) < radius + 2) {
+					shear_leave(location, block_type, orig_item, player, unbreaking_level);
+				}
+			}
+		}
+	}
+	goto("wait");
+}
+goto("wait");
+
+function shear_leave(block_loc, original_block_type, original_item, player, unbreaking_level){
+	if(block.getType(block_loc) != original_block_type) {
+		return;
+	}
+	if(block.property.getValue(block_loc, $prop_persistent)) {
+		return;
+	}
+	block.set(block_loc, "minecraft:air");
+	item.drop(block_loc, original_item);
+	if(player.isSurvival(player)) {
+		player.damageItem(player, 1);
+	}
+}
+
+function shear_cobweb(block_loc, original_block_type, player, unbreaking_level) {
+	if(block.getType(block_loc) != original_block_type) {
+		return;
+	}
+	block.break(block_loc, player);
+	if(math.random(0, 99) < 100 / (unbreaking_level + 1)) {
+		player.damageItem(player, 1);
+	}	
+}

+ 5 - 0
system/wartung.txt

@@ -0,0 +1,5 @@
+command("whitelist on");
+command("whitelist add marvinius");
+command("whitelist add kajetanjohannes");
+
+setMOTD("§bWartungsmodus!");

+ 4 - 29
test.txt

@@ -1,31 +1,6 @@
-player = read.player("marvinius");
-human = human.spawn(entity.getLocation(player));
-for(h = 0; h < 5; h++) {
-	yawHuman(human, 0);
-	for(i = 0; i < 20; i++) {
-		waitfor(2);
-		entity.throw(human, 0, 0, 0.2);
-	}
-	yawHuman(human, -90);
-	for(i = 0; i < 20; i++) {
-		waitfor(2);
-		entity.throw(human, 0.2, 0, 0);
-	}
-	yawHuman(human, 180);
-	for(i = 0; i < 20; i++) {
-		waitfor(2);
-		entity.throw(human, 0, 0, -0.2);
-	}
-	yawHuman(human, 90);
-	for(i = 0; i < 20; i++) {
-		waitfor(2);
-		entity.throw(human, -0.2, 0, 0);
-	}
-}
-entity.remove(human);
+p = read.player("marvinius");
+player.giveItem(p, item.getAmber());
 
-function yawHuman(human, yaw) {
-	loc = entity.getLocation(human);
-	loc.setYaw(loc, yaw);
-	entity.teleport(human, loc);
+function item.getAmber() {
+	return read.item("{id:\"km:flawless_gem_stone\",Count:1b,tag:{color:13664802,display:{Name:'{\"text\":\"§fAmber\"}'}}}");
 }

+ 0 - 2
test5.txt

@@ -1,2 +0,0 @@
-p = read.player("marvinius");
-player.setFly(p, true);

+ 10 - 0
utils/u_games.txt

@@ -191,6 +191,15 @@ return;
 //Minigame-Utils
 //--------------------------------------------------
 
+function minigame.setTabName(player, game_tab, team_color) {
+	if(team_color == null) {
+		team_color = "§r";
+	}
+	player_name = player.getName(player);
+	display_name = concat(game_tab, " §7| ", team_color, player_name);
+	player.setDisplayName(player, display_name);
+}
+
 function minigame.loadLobbyEvents() {
 	event.load("player_join");
 	event.load("player_logout");
@@ -431,6 +440,7 @@ function resetplayer(player) {
 	entity.setGravity(player, true);
 	inv.close(player);
 	displayMoney(player, getMoney(player));
+	player.setTabName(player);
 }
 
 //--------------------------------------------------

+ 76 - 32
utils/u_general.txt

@@ -385,7 +385,7 @@ function world.isStoryName(world_name) {
 	return world_name == "story";
 }
 
-function word.isSurvName(world_name) {
+function world.isSurvName(world_name) {
 	if(world_name == "overworld") {
 		return true;
 	} elseif(world_name == "the_end") {
@@ -398,7 +398,7 @@ function word.isSurvName(world_name) {
 
 function world.canUsePlots(world) {
 	world_name = world.getName(world);
-	if(word.isSurvName(world_name)) {
+	if(world.isSurvName(world_name)) {
 		return true;
 	}
 	if(world.isCreativeName(world_name)) {
@@ -409,7 +409,7 @@ function world.canUsePlots(world) {
 
 function world.addTimedStatus(world, index, time, message) {
 	world_name = world.getName(world);
-	if(word.isSurvName(world_name)) {
+	if(world.isSurvName(world_name)) {
 		worldlist = players.toWorldList(world.getOverWorld());
 		for(i = 0; i < list.getSize(worldlist); i++) {
 			status.addTimed(list.getIndex(worldlist, i), index, time, message);
@@ -448,7 +448,7 @@ function player.checkForWorldChange(player, location) {
 		return false;
 	}
 	//Wenn beide Welten in derselben Liste sind --> kein Wechsel
-	if(word.isSurvName(from_world_name) && word.isSurvName(to_world_name)) {
+	if(world.isSurvName(from_world_name) && world.isSurvName(to_world_name)) {
 		return false;
 	}
 	return true;
@@ -467,7 +467,7 @@ function player.changeInv(player, from_world, to_world) {
 	} else {
 		player.changeGamemode(player, to_world_name);
 	}
-	if(word.isSurvName(to_world_name)) {
+	if(world.isSurvName(to_world_name)) {
 		if(player.hasFly(player)) {
 			scheduler.addFly(2, player, true);
 		}
@@ -488,7 +488,7 @@ function player.changeGamemode(player, to_world_name) {
 		}
 		player.setGamemode(player, gm);
 		duration = data.getTimer(player, "fly");
-		if(word.isSurvName(to_world_name) && duration > 0) {
+		if(world.isSurvName(to_world_name) && duration > 0) {
 			scheduler.addFly(2, player, true);
 		}
 	}
@@ -498,7 +498,7 @@ function inv.saveForPlayer(sec_player, for_player_or_id, world) {
 		for_player_or_id = player.getId(for_player_or_id);
 	}
 	world_name = world.getName(world);
-	if(word.isSurvName(world_name)) {
+	if(world.isSurvName(world_name)) {
 		pfad = "scripts/configs/inv_data/survival";
 	} else {
 		pfad = concat("scripts/configs/inv_data/", world_name);
@@ -538,7 +538,7 @@ function inv.loadFromPlayer(sec_player, from_player_or_id, world) {
 		from_player_or_id = player.getId(from_player_or_id);
 	}
 	world_name = world.getName(world);
-	if(word.isSurvName(world_name)) {
+	if(world.isSurvName(world_name)) {
 		pfad = "scripts/configs/inv_data/survival";
 	} else {
 		pfad = concat("scripts/configs/inv_data/", world_name);
@@ -633,21 +633,6 @@ function text.getLinkMessage(string) {
 	}
 }
 
-//--------------------------------------------------
-//Showcoords-Utils
-//--------------------------------------------------
-
-function showCoords.get(player_or_id) {
-	config = playerdata.getSurvival(player_or_id);
-	return config.getBool(config, "showcoords", false);
-}
-
-function showCoords.set(player_or_id, bool) {
-	config = playerdata.getSurvival(player_or_id);
-	config.set(config, "showcoords", bool);
-	config.saveAsync(config);
-}
-
 //--------------------------------------------------
 //Quest-Utils
 //--------------------------------------------------
@@ -1427,6 +1412,9 @@ function player.teleport(player, location, setBackPos) {
 		msg(player, "[§5Adventure§r] Teleport blocked. ", text.click("[§5Cancel Adventure?§r]", concat("/stopadventure ", player)));
 		return false;
 	}
+	if(player.hasMinigame(player)) {
+		return false;
+	}
 	if(setBackPos) {
 		player.setBackPos(player);
 	}
@@ -1591,7 +1579,7 @@ function msg.quest(player, speaker, line_now, line_max, message) {
 	msg(player, concat("[§b", text.number(line_now), "§r/§b", text.number(line_max), "§r] §a", speaker, " §r| ", concat("§e", message)));
 }
 
-function msg.online(player, message) {
+function msg.chat(player, message) {
 	nickname = player.getNickName(player);
 	rank = getRank(player);
 	colorcode = text.subString(rank, 0, 2);
@@ -1631,6 +1619,10 @@ function msg.prefix(player, prefix, message) {
 	msg(player, concat("§r[", prefix, "§r] ", message));
 }
 
+function msg.online(prefix, message) {
+	msg("online", concat("§r[", prefix, "§r] "), message);
+}
+
 function msg.radius(prefix, message, location, radius) {
 	list = players.near(location, radius);
 	iter = list.iterator(list);
@@ -1678,10 +1670,44 @@ function item.getAir() {
 	return read.item("minecraft:air");
 }
 
+function item.isAmber(item) {
+	return text.item(item) == "{id:\"km:flawless_gem_stone\",Count:1b,tag:{color:13664802,display:{Name:'{\"text\":\"§fAmber\"}'}}}";
+}
+
+function item.isSapphire(item) {
+	return text.item(item) == "{id:\"km:flawless_gem_stone\",Count:1b,tag:{color:3289855,display:{Name:'{\"text\":\"§fSapphire\"}'}}}";
+}
+
+function item.isRuby(item) {
+	return text.item(item) == "{id:\"km:flawless_gem_stone\",Count:1b,tag:{color:16724530,display:{Name:'{\"text\":\"§fRuby\"}'}}}";
+}
+
+function item.getAmber() {
+	return read.item("{id:\"km:flawless_gem_stone\",Count:1b,tag:{color:13664802,display:{Name:'{\"text\":\"§fAmber\"}'}}}");
+}
+
+function item.getSapphire() {
+	return read.item("{id:\"km:flawless_gem_stone\",Count:1b,tag:{color:3289855,display:{Name:'{\"text\":\"§fSapphire\"}'}}}");
+}
+
+function item.getRuby() {
+	return read.item("{id:\"km:flawless_gem_stone\",Count:1b,tag:{color:16724530,display:{Name:'{\"text\":\"§fRuby\"}'}}}");
+}
+
 //--------------------------------------------------
 //Player-Utils
 //--------------------------------------------------
 
+function player.canTeleport(player) {
+	if(player.hasMinigame(player)) {
+		return false;
+	}
+	if(player.isOnAdventure(player)) {
+		return false;
+	}
+	return true;
+}
+
 function player.hasClearInventory(player) {
 	inv = player.getInv(player);
 	for(slot = 0; slot < 36; slot++) {
@@ -1847,7 +1873,7 @@ function player.showDefaultStacks(player) {
 	player_loc = entity.getLocation(player);
 	world_name = world.getName(loc.getWorld(player_loc));
 	stacks.clear(player);
-	if(word.isSurvName(world_name)) {
+	if(world.isSurvName(world_name)) {
 		stacks.set(player, 0, "km:gear");
 		stacks.set(player, 1, "km:golden_scepter");
 		stacks.set(player, 2, "minecraft:red_bed");
@@ -2213,6 +2239,17 @@ function player.setFirstJoin(player_or_id, boolean) {
 	config.saveAsync(config);
 }
 
+function player.getShowcoords(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getBool(config, "showcoords", true);
+}
+
+function player.setShowcoords(player_or_id, bool) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "showcoords", bool);
+	config.saveAsync(config);
+}
+
 function player.getFirstJoin(player_or_id) {
 	if(isPlayer(player_or_id)) {
 		player_id = player.getId(player_or_id);
@@ -2697,11 +2734,12 @@ function plot.removeAllPlayers(plot) {
 function plot.setEdges(plot, location1, location2) {
 	//Alte Daten abrufen
 	plot_name = plot.getName(plot);
+	plot_id = plot.getId(plot);
 	list = plot.getOwners(plot);
 	flags = plot.getFlags(plot);
 	//Neues Plot erstellen und altes Plot löschen
-	new_plot = plot.add(location1, location2);
 	plot.remove(plot, loc.getWorld(location1));
+	new_plot = plot.add(location1, location2, plot_id);
 	//Alte Daten auf neuem Plot setzen
 	plot.transferRanks(plot.getId(plot), plot.getId(new_plot));
 	plot.setName(new_plot, plot_name);
@@ -2915,12 +2953,12 @@ function skill.get(tech_name) {
 	}
 }
 
-function skill.getShopItem(player, tech_name) {
+function skill.getShopItem(player_or_id, tech_name) {
 	if(tech_name == null) {
 		return item.getAir();
 	}
 	skill = skill.get(tech_name);
-	amount = skill.getAmount(player, tech_name);
+	amount = skill.getAmount(player_or_id, tech_name);
 	permanent = skill[5];
 	if(permanent) {
 		if(amount == 0) {
@@ -2939,7 +2977,7 @@ function skill.getShopItem(player, tech_name) {
 	}
 	toggleable = skill[7];
 	if(toggleable) {
-		if(skill.isActivated(player, tech_name)) {
+		if(skill.isActivated(player_or_id, tech_name)) {
 			tog = "§fToggleable: §aActive";
 		} else {
 			tog = "§fToggleable: §cInactive";
@@ -3063,15 +3101,21 @@ function skill.showShop(player, tech_name1, tech_name2, tech_name3, tech_name4,
 	inv.open(inv, player, "Skillshop");
 }
 
-function skill.showAll(player) {
+function skill.showAll(from_player_or_id, to_player) {
 	inv = inv.new("333333333333333333333333333");
 	skill_list = getScriptVar("skills");
 	for(i = 0; i < list.getSize(skill_list); i++) {
 		a = list.getIndex(skill_list, i);
 		tech_name = a[1];
-		inv.setItem(inv, i, skill.getShopItem(player, tech_name));
+		inv.setItem(inv, i, skill.getShopItem(from_player_or_id, tech_name));
+	}
+	from_player_id = player.getValidId(from_player_or_id);
+	if(from_player_id == player.getValidId(to_player)) {
+		inv_name = "Skills";
+	} else {
+		inv_name = concat("Skills von ", player.getNameFromId(from_player_id));
 	}
-	inv.open(inv, player, "Skills");
+	inv.open(inv, to_player, inv_name);
 }
 
 //--------------------------------------------------