Browse Source

updates updates updates

mloeschenkohl 3 years ago
parent
commit
128deed18f

+ 4 - 0
docu_core.php

@@ -12,6 +12,10 @@
             <td class="bold">Examples</td>
             <td>a = 3 * (5 - 1);<br>a++;<br>a <<= 3;</td>
         </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td><< and >> are not implemented at the moment</td>
+        </tr>
     </table>
     <table>
 		<tr>

+ 366 - 0
docu_minecraft.php

@@ -1444,6 +1444,16 @@
             <td class="bold">Format</td>
             <td>item.addFlag(itemstack, <a href="https://papermc.io/javadocs/paper/1.18/org/bukkit/inventory/ItemFlag.html" target="_blank">flag</a>)</td>
         </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.removeFlag</th>
+            <th class="desc">removes a flag from an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.removeFlag(itemstack, <a href="https://papermc.io/javadocs/paper/1.18/org/bukkit/inventory/ItemFlag.html" target="_blank">flag</a>)</td>
+        </tr>
     </table>
     <table>
         <tr>
@@ -3741,6 +3751,16 @@
             <td>inv.getID(inventory)</td>
         </tr>
     </table>
+    <table>
+        <tr>
+            <th class="command">inv.closeAll()</th>
+            <th class="desc">closes all custom inventories of all players</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.closeAll()</td>
+        </tr>
+    </table>
 </section>
 
 <section id="World">
@@ -5192,4 +5212,350 @@
             <td>double from 0 to 1</td>
         </tr>
     </table>
+</section>
+
+<section id="Whitelist">
+	<table>
+        <tr>
+            <th class="command">whitelist.enable</th>
+            <th class="desc">enables the whitelist</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>whitelist.enable()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">whitelist.disable</th>
+            <th class="desc">disables the whitelist</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>whitelist.disable()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">whitelist.add</th>
+            <th class="desc">adds a player to the whitelist</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>whitelist.add(uuid / uuid_string / player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">whitelist.remove</th>
+            <th class="desc">removes a player from the whitelist</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>whitelist.remove(uuid / uuid_string / player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">whitelist.clear</th>
+            <th class="desc">clears the whitelist</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>whitelist.clear()</td>
+        </tr>
+    </table>
+</section>
+
+<section id="Armorstand">
+	<table>
+        <tr>
+            <th class="command">as.getBodyPose</th>
+            <th class="desc">returns the body pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.getBodyPose(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.getHeadPose</th>
+            <th class="desc">returns the head pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.getHeadPose(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.getLeftArmPose</th>
+            <th class="desc">returns the left arm pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.getLeftArmPose(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.getRightArmPose</th>
+            <th class="desc">returns the right arm pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.getRightArmPose(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.getLeftLegPose</th>
+            <th class="desc">returns the left leg pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.getLeftLegPose(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.getRightLegPose</th>
+            <th class="desc">returns the right leg pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.getRightLegPose(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.hasArms</th>
+            <th class="desc">returns true if an armor stand has arms</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.hasArms(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.hasBasePlate</th>
+            <th class="desc">returns true if an armor stand has a base plate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.hasBasePlate(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.isMarker</th>
+            <th class="desc">returns true if an armor stand is a marker</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.isMarker(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.isSmall</th>
+            <th class="desc">returns true if an armor stand is small</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.isSmall(armor_stand)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setArms</th>
+            <th class="desc">sets that an armor stand can have arms</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setArms(armor_stand, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setBasePlate</th>
+            <th class="desc">sets that an armor stand can have a base plate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setBasePlate(armor_stand, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setMarker</th>
+            <th class="desc">sets that an armor stand can be a marker</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setMarker(armor_stand, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setSmall</th>
+            <th class="desc">sets that an armor stand is small</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setSmall(armor_stand, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.canMove</th>
+            <th class="desc">sets that an armor stand can move</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.canMove(armor_stand, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.canTick</th>
+            <th class="desc">sets that an armor stand can tick</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.canTick(armor_stand, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setBodyPose</th>
+            <th class="desc">sets the body pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setBodyPose(armor_stand, euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setHeadPose</th>
+            <th class="desc">sets the head pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setHeadPose(armor_stand, euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setLeftArmPose</th>
+            <th class="desc">sets the left arm pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setLeftArmPose(armor_stand, euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setRightArmPose</th>
+            <th class="desc">sets the right arm pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setRightArmPose(armor_stand, euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setLeftLegPose</th>
+            <th class="desc">sets the left leg pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setLeftLegPose(armor_stand, euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">as.setRightLegPose</th>
+            <th class="desc">sets the right leg pose of an armor stand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>as.setRightLegPose(armor_stand, euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">euler.new</th>
+            <th class="desc">returns a new created euler angle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>euler.new(x, y, z)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">euler.getX</th>
+            <th class="desc">returns the x angle of an euler angle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>euler.getX(euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">euler.getY</th>
+            <th class="desc">returns the y angle of an euler angle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>euler.getY(euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">euler.getZ</th>
+            <th class="desc">returns the z angle of an euler angle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>euler.getZ(euler_angle)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">euler.setX</th>
+            <th class="desc">sets the x angle of an euler angle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>euler.setX(euler_angle, value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">euler.setY</th>
+            <th class="desc">sets the y angle of an euler angle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>euler.setY(euler_angle, value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">euler.setZ</th>
+            <th class="desc">sets the z angle of an euler angle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>euler.setZ(euler_angle, value)</td>
+        </tr>
+    </table>
 </section>

+ 1 - 1
startcommands.txt

@@ -1,3 +1,3 @@
 modTimer(-1000);
-script.startNamed("Commands", "system/commands", "utils/u_general", "utils/u_commands", "utils/u_skills");
+script.startNamed("Commands", "system/commands", "utils/u_general", "utils/u_commands", "utils/u_cmdhelp", "utils/u_skills");
 term();

+ 2 - 2
startscript.txt

@@ -9,7 +9,7 @@ script.startNamed("Perms", "utils/u_error", "system/perms", "utils/u_general");
 script.startNamed("Playerdata", "utils/u_error", "system/player_data", "utils/u_general");
 script.startNamed("Chat", "utils/u_error", "system/chat", "utils/u_general");
 script.startNamed("Commands", "startcommands");
-	//script.startNamed("Creative", "utils/u_error", "system/creative", "utils/u_general");
+script.startNamed("Creative", "utils/u_error", "system/creative", "utils/u_general");
 script.startNamed("Copyisland", "system/copyisland", "utils/u_general");
 script.startNamed("Damage", "utils/u_error", "system/damage", "utils/u_general");
 script.startNamed("Doors", "utils/u_error", "system/doors", "utils/u_general");
@@ -24,7 +24,7 @@ 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");
 script.startNamed("Market", "utils/u_error", "system/market", "utils/u_general");
-script.startNamed("Shops", "utils/u_error", "system/chestshops", "utils/u_general");
+script.startNamed("ChestShops", "utils/u_error", "system/chestshops", "utils/u_general");
 script.startNamed("Humans", "utils/u_error", "system/humans", "utils/u_general");
 script.startNamed("Survival", "utils/u_error", "survival/survival", "utils/u_general");
 //script.startNamed("Skills", "utils/u_error", "survival/skills", "utils/u_general", "utils/u_skills");

+ 1 - 0
stop.txt

@@ -2,6 +2,7 @@ event.load("player_join");
 
 sgoto(400, "announce");
 msg("online", text.new("§4The server will restart soon!!!"));
+setMOTD("§d§k# §eMundus Crassus §d§k# §f-  [§d1.18.1§f]\n§4Server is restarting!");
 
 @wait
 wait();

+ 2 - 1
survival/herobrine.txt

@@ -38,7 +38,7 @@ if(event == "block_break") {
 	if(!world.isSurvName(world_name)) {
 		goto("main");
 	}
-	r = math.random(1, 2000);
+	r = math.random(1, 15000);
 	if(r == 1) {
 		spawnHerobrine(player);
 	}
@@ -65,5 +65,6 @@ function spawnHerobrine(player) {
 	human.setSkin(ent, "ewogICJ0aW1lc3RhbXAiIDogMTYyMjMwNDY0MjU3MSwKICAicHJvZmlsZUlkIiA6ICI0NWY3YTJlNjE3ODE0YjJjODAwODM5MmRmN2IzNWY0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJfSnVzdERvSXQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTUyM2UxZjA2ZDhlMTM5OWMwNjhhYTU3NjhmMDUzMDI1N2FhYjIxYTM0ZTk1NTY5MzNlNjM0NTUxODY0MjVhNiIKICAgIH0KICB9Cn0=", "PAL4UKYIgCe3RwmxfT6p05DDqc0kW2HTvlNNRuP3npXyuL68Hifjtiuu6OiJ/IQ/YGsjKf3Ni219teFFBJqEUJNEskC7CWnJxHWRq/WkSNDJXVKvBW6JjOYN607HSlBhifn4ZAxasol0bqVRURVG+0BwDUHXIGy4LRSu10/SLhsAmvwKhwYJiQ1xgnerqfzeWmPQSDZOo30Fxo6jNRnJ7v0VBGR8awImOfVsKE3SuEeys47U5AqXrHIp88s36aGOsIa0Bs6NHutW/L6Wbg9BHGUs93NGnjP9jxXizhGITF45KBXNl7gXPPjMnK7/CGOTuxuABc+MVAptB4cHCksnfaSMexryluQuwzWzOJTX1NCMGlYFREDq4c3GgVWJ7Yo2xWOwcy+XZxJXNchQ5/vzA3dv+XdU4zcD93OOhuv9PDoUTlmQgLFQLFbxM6Bq6cSQg3Wybi7wO6jQzBIVpZaswrOo/wgHuXbDkA9rv5uONjQQbKHJQjVjgIrbbUpX3+Kh4MkgBEUztxNvbgbt5RK0knwtYhscKDyrP5AAwp9CX6JnmbKXIRVWtx6b3JNPYC9I6FtBCoGxo6OfHl3f/okncszIh+40Sif3IdMrW+H5g3MxMkn5eHP4nOHRL24izlLUM52gS/TUgpG0dJrG6XMOR3w6KqTxcT/4vyxwlmJ+iDg=");
 	human.setAi(ent, 1);
 	human.canMove(ent, true);
+	living.setEquip(ent, slot.getHand(), item.create("IRON_SWORD", 1, null, null));
 	set.add($herobrines, ent);
 }

+ 275 - 320
survival/survival.txt

@@ -1,6 +1,6 @@
-//event.load("entity_click");
+event.load("entity_click");
 //event.load("inv_click");
-//event.load("snuvi_click");
+event.load("snuvi_click");
 event.load("player_pre_respawn");
 event.load("player_post_respawn");
 event.load("living_death");
@@ -73,37 +73,14 @@ gambler_inv_id = inv.getId(gambler_inv);
 inv.setItem(gambler_inv, 0, read.item("km:coin_copper", 1, "§f1 snuvi"));
 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"));
+inv.setItem(gambler_inv, 3, read.item("minecraft:netherite_block", 1, "§fAll in"));*/
 
-bankmenu = inv.new("233330000233330000000000000233200000233200000");
-//bankmenu = inv.new("233330000 233330000 000000000 233200000 233200000");
+bankmenu = inv.new("222200000", text.new("Banker"));
 bankinvid = inv.getId(bankmenu);
-coin_gold = read.item("km:coin_gold");
-coin_silver = read.item("km:coin_silver");
-coin_copper = read.item("km:coin_copper");
-coin_silver64 = read.item("km:coin_silver", 64);
-coin_copper64 = read.item("km:coin_copper", 64);
-arrow_left = read.item("km:arrow_left", 1, "§fchange to");
-arrow_right = read.item("km:arrow_right", 1, "§fchange to");
-
-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("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: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"));*/
+inv.setItem(bankmenu, 0, item.custom.create("COPPER_COIN", 1, "§f1 snuvi", null));
+inv.setItem(bankmenu, 1, item.custom.create("SILVER_COIN", 1, "§f64 snuvi", null));
+inv.setItem(bankmenu, 2, item.custom.create("GOLD_COIN", 1, "§f4096 snuvi", null));
+inv.setItem(bankmenu, 3, item.create("NETHERITE_BLOCK", 1, "§fAll snuvis", null));
 
 msg.string("dev", "§bSurvival §rloaded.");
 @wait
@@ -205,194 +182,195 @@ if(!hasPvpOn(player)) {
 goto("wait");
 
 @entity_click
-if(hand == "OFF_HAND") {
+if(slot.isOffHand(hand)) {
 	goto("wait");
 }
-if(entity.getType(entity) == "human") {
-	entity_name = entity.getName(entity);
-	if(entity_name == "Administrator\n§cmarvinius") {
-		item = living.getHand(player);
-		item_name = item.getName(item);
-		if(removeFormat(item_name) == "Beer") {
-			sound.spawnForPlayer(player, $sound_drink_milk, $sound_category_master, 1, 1);
-			msg.prefix(player, "§cmarvinius", "Prost!");
-		}
-		else{
-			msg.prefix(player, "§cmarvinius", "Ich mag Gösser.");
-		}
-		goto("wait");
-	}
-	if(entity_name == "Owner\n§4kajetanjohannes") {
-		item = living.getHand(player);
-		item_type = item.getType(item);
-		sound.spawnForPlayer(player, $sound_slime_place, $sound_category_master, 1, 1);
-		if(item_type == "minecraft:redstone") {
-			rand_number = math.roundup(math.random(0,3));
-			if(rand_number == 0){
-				temp_message = "WUSIWUSIWUSIWUSIWUSIWUSIWUSIWUSI";
-			}
-			if(rand_number == 1){
-				temp_message = "Wusi!";
-			}
-			if(rand_number == 2){
-				temp_message = "Wusi?";
-			}
-			if(rand_number == 3){
-				temp_message = "Wusi.";
-			}
-			msg.prefix(player, "§4kajetanjohannes", temp_message);
-			goto("wait");
-		}
-		if(item_type == "minecraft:ice" || item_type == "minecraft:blue_ice" || item_type == "minecraft:packed_ice"){
-			msg.prefix(player, "§4kajetanjohannes", "§bDas sieht nach mir aus.");
-		}else{
-			msg.prefix(player, "§4kajetanjohannes", "wusi");
-		}
+if(!entity.isHuman(entity)) {
 	goto("wait");
+}
+entity_name = human.getName(entity);
+if(entity_name == "Administrator\n§cmarvinius") {
+	item = living.getHand(player);
+	item_name = item.getName(item);
+	if(removeFormat(item_name) == "Beer") {
+		sound.spawnForPlayer(player, $sound_drink_milk, $sound_category_master, 1, 1);
+		msg.prefix(player, "§cmarvinius", "Prost!");
 	}
-	if(entity_name == "Supporter\n§bImKillerKatze") {
-		rand_number = math.roundup(math.random(0,25));
-		if(rand_number > 13){
-			sound.spawnForPlayer(player, $sound_cat, $sound_category_master, 1, 1);
-			msg.prefix(player, "§bImKillerKatze", "Miau");
-			goto("wait");
+	else{
+		msg.prefix(player, "§cmarvinius", "Ich mag Gösser.");
+	}
+	goto("wait");
+}
+if(entity_name == "Owner\n§4kajetanjohannes") {
+	item = living.getHand(player);
+	item_type = item.getType(item);
+	sound.spawnForPlayer(player, $sound_slime_place, $sound_category_master, 1, 1);
+	if(item_type == "minecraft:redstone") {
+		rand_number = math.roundup(math.random(0,3));
+		if(rand_number == 0){
+			temp_message = "WUSIWUSIWUSIWUSIWUSIWUSIWUSIWUSI";
 		}
-		if(rand_number < 12){
-			sound.spawnForPlayer(player, $sound_stray_cat, $sound_category_master, 1, 1);
-			msg.prefix(player, "§bImKillerKatze", "Miau!");
-			goto("wait");
+		if(rand_number == 1){
+			temp_message = "Wusi!";
 		}
-		else{
-			sound.spawnForPlayer(player, $sound_purreow, $sound_category_master, 1, 1);
-			msg.prefix(player, "§bImKillerKatze", "Schnurrr!");
-			goto("wait");
+		if(rand_number == 2){
+			temp_message = "Wusi?";
+		}
+		if(rand_number == 3){
+			temp_message = "Wusi.";
 		}
+		msg.prefix(player, "§4kajetanjohannes", temp_message);
+		goto("wait");
+	}
+	if(item_type == "minecraft:ice" || item_type == "minecraft:blue_ice" || item_type == "minecraft:packed_ice"){
+		msg.prefix(player, "§4kajetanjohannes", "§bDas sieht nach mir aus.");
+	}else{
+		msg.prefix(player, "§4kajetanjohannes", "wusi");
 	}
-	if(entity_name == "Administrator\n§cwertibaldi") {
-			msg.prefix(player, "§cwertibaldi", "Kann grad nicht, bin im Einsatz für den Katastrophenschutz.");
+goto("wait");
+}
+if(entity_name == "Supporter\n§bImKillerKatze") {
+	rand_number = math.roundup(math.random(0,25));
+	if(rand_number > 13){
+		sound.spawnForPlayer(player, $sound_cat, $sound_category_master, 1, 1);
+		msg.prefix(player, "§bImKillerKatze", "Miau");
 		goto("wait");
 	}
-	if(entity_name == "Administrator\n§cMentorMentos") {
-		item = living.getHand(player);
-		item_name = item.getName(item);
-		if(removeFormat(item_name) == "Beer") {
-			msg.prefix(player, "§cMentorMentos", "Folg mir auf Twitch! ");
-			msg(player, string.getLinkText("Klick mich an :D","https://www.twitch.tv/Mentor_Mentos"));
-		}
-		else{
-			msg.prefix(player, "§cMentorMentos", "Ich mag Kölsch.");
-		}
+	if(rand_number < 12){
+		sound.spawnForPlayer(player, $sound_stray_cat, $sound_category_master, 1, 1);
+		msg.prefix(player, "§bImKillerKatze", "Miau!");
 		goto("wait");
 	}
-	if(entity_name == "Moderator\n§9SirTerence7") {
-		rand_number = math.roundup(math.random(0,7));
-		if(rand_number < 4){
-			msg.prefix(player, "§9SirTerence7", "Mathe bla... bla... bla...");
-		}
-		if(rand_number == 4){
-			msg.prefix(player, "§9SirTerence7", "Fraktale bla... bla... bla...");
-		}
-		if(rand_number == 5){
-			msg.prefix(player, "§9SirTerence7", "Höhere Dimensionen bla... bla... bla...");
-		}
-		if(rand_number == 6){
-			msg.prefix(player, "§9SirTerence7", "*redet mit Händen weiter*");
-		}
-		if(rand_number == 7){
-			msg.prefix(player, "§9SirTerence7", "*wechselt voller Faszination zwischen scheinbar zusammenhangslosen Themen hin und her*");
-		}
+	else{
+		sound.spawnForPlayer(player, $sound_purreow, $sound_category_master, 1, 1);
+		msg.prefix(player, "§bImKillerKatze", "Schnurrr!");
+		goto("wait");
+	}
+}
+if(entity_name == "Administrator\n§cwertibaldi") {
+		msg.prefix(player, "§cwertibaldi", "Kann grad nicht, bin im Einsatz für den Katastrophenschutz.");
+	goto("wait");
+}
+if(entity_name == "Administrator\n§cMentorMentos") {
+	item = living.getHand(player);
+	item_name = item.getName(item);
+	if(removeFormat(item_name) == "Beer") {
+		msg.prefix(player, "§cMentorMentos", "Folg mir auf Twitch! ");
+		msg(player, string.getLinkText("Klick mich an :D","https://www.twitch.tv/Mentor_Mentos"));
+	}
+	else{
+		msg.prefix(player, "§cMentorMentos", "Ich mag Kölsch.");
+	}
+	goto("wait");
+}
+if(entity_name == "Moderator\n§9SirTerence7") {
+	rand_number = math.roundup(math.random(0,7));
+	if(rand_number < 4){
+		msg.prefix(player, "§9SirTerence7", "Mathe bla... bla... bla...");
+	}
+	if(rand_number == 4){
+		msg.prefix(player, "§9SirTerence7", "Fraktale bla... bla... bla...");
+	}
+	if(rand_number == 5){
+		msg.prefix(player, "§9SirTerence7", "Höhere Dimensionen bla... bla... bla...");
+	}
+	if(rand_number == 6){
+		msg.prefix(player, "§9SirTerence7", "*redet mit Händen weiter*");
+	}
+	if(rand_number == 7){
+		msg.prefix(player, "§9SirTerence7", "*wechselt voller Faszination zwischen scheinbar zusammenhangslosen Themen hin und her*");
+	}
 
 
-		rand_number = math.roundup(math.random(0,500));
-		if(rand_number <= 2){
-			sound.spawnForPlayer(player, $music_chirp, $sound_category_master, 1, 1);
+	rand_number = math.roundup(math.random(0,500));
+	if(rand_number <= 2){
+		sound.spawnForPlayer(player, $music_chirp, $sound_category_master, 1, 1);
+	}else{
+		rand_pitch = math.roundup(math.random(4, list.getSize(Sound_Pitch_List)-5));
+		if(rand_number < 200){
+			pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-4);
+			pitch2 = list.getIndex(Sound_Pitch_List, rand_pitch);
+			pitch3 = list.getIndex(Sound_Pitch_List, rand_pitch+3);
 		}else{
-			rand_pitch = math.roundup(math.random(4, list.getSize(Sound_Pitch_List)-5));
-			if(rand_number < 200){
+			if(rand_number < 300){
 				pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-4);
+				pitch1_2 = list.getIndex(Sound_Pitch_List, rand_pitch-2);
 				pitch2 = list.getIndex(Sound_Pitch_List, rand_pitch);
+				pitch3_2 = list.getIndex(Sound_Pitch_List, rand_pitch+1);
 				pitch3 = list.getIndex(Sound_Pitch_List, rand_pitch+3);
+				sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.5, pitch1_2);
+				sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.5, pitch3_2);
+				sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.75, pitch1_2);
+				sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.75, pitch3_2);
 			}else{
-				if(rand_number < 300){
-					pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-4);
-					pitch1_2 = list.getIndex(Sound_Pitch_List, rand_pitch-2);
-					pitch2 = list.getIndex(Sound_Pitch_List, rand_pitch);
-					pitch3_2 = list.getIndex(Sound_Pitch_List, rand_pitch+1);
-					pitch3 = list.getIndex(Sound_Pitch_List, rand_pitch+3);
-					sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.5, pitch1_2);
-					sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.5, pitch3_2);
-					sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.75, pitch1_2);
-					sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.75, pitch3_2);
-				}else{
-					pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-3);
-					pitch2 = list.getIndex(Sound_Pitch_List, rand_pitch);
-					pitch3 = list.getIndex(Sound_Pitch_List, rand_pitch+4);
-				}
+				pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-3);
+				pitch2 = list.getIndex(Sound_Pitch_List, rand_pitch);
+				pitch3 = list.getIndex(Sound_Pitch_List, rand_pitch+4);
 			}
-			sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.8, pitch1);
-			sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.9, pitch2);
-			sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.8, pitch2);
-			sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.9, pitch1);
-			sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 1, pitch2);
-			sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.9, pitch3);
 		}
-		goto("wait");
+		sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.8, pitch1);
+		sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.9, pitch2);
+		sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.8, pitch2);
+		sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.9, pitch1);
+		sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 1, pitch2);
+		sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.9, pitch3);
 	}
-	if(entity_name == "Moderator\n§9Mareeeen") {
-		rand_number = math.roundup(math.random(0,5));
-		if(rand_number > 1){
-			msg.prefix(player, "§9Mareeeen", "Wo ist die Schokolade versteckt!?");
-		}else{
-			msg.prefix(player, "§9Mareeeen", "Ich esse deine Schokolade!");
-			sound.spawnForPlayer(player, $sound_eating, $sound_category_master, 1, 1);
-		}
-		goto("wait");
-	}
-	
-	if(entity_name == "Info-Point") {
-		msg(player, string.getSpacer());
-		msg(player, string.getClickText("§r [§cclick§r] [§eSurvival§r]", "/infopoint1"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eAdventure§r]", "/infopoint2"));
-		msg(player, string.getClickText("§r [§cclick§r] [§ePlots§r]", "/infopoint3"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eClans§r]", "/infopoint4"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eCities§r]", "/infopoint5"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eShops§r]", "/infopoint6"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eMinigames§r]", "/infopoint7"), " ", string.getClickText("§f[§bTeleport§f]", "/games"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eQuests§r]", "/infopoint8"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eCreative§r]", "/infopoint12"), " ", string.getClickText("§f[§bTeleport§f]", "/creative"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eRanking§r]", "/infopoint9"), " ", string.getLinkText("§f[§bRanks§f]", "https://minecraft.hammerle.me/?site=ranks"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eRules§r]", "/infopoint10"), " ", string.getLinkText("§f[§bFake Rules§f]", "https://minecraft.hammerle.me/?site=rules"));
-		msg(player, string.getClickText("§r [§cclick§r] [§eNote§r]", "/infopoint11"));
-		goto("wait");
-	}
-	if(entity_name == "Banker") {
-		inv.open(bankmenu, player, "Banker");
-		goto("wait");
+	goto("wait");
+}
+if(entity_name == "Moderator\n§9Mareeeen") {
+	rand_number = math.roundup(math.random(0,5));
+	if(rand_number > 1){
+		msg.prefix(player, "§9Mareeeen", "Wo ist die Schokolade versteckt!?");
+	}else{
+		msg.prefix(player, "§9Mareeeen", "Ich esse deine Schokolade!");
+		sound.spawnForPlayer(player, $sound_eating, $sound_category_master, 1, 1);
 	}
-	if(entity_name == "Adventure") {
-		if(!player.isOnAdventure(player)) {
-			msg.prefix(player, "§5Adventure", "You aren't on an adventure. Click the chest in the teleporter to start an adventure.");
-			goto("wait");
-		}
-		player.setAdventure(player, false);
-		adventures = player.getAdventureAmounts(player);
-		if(adventures == null) {
-			adventures = 0;
-		}
-		player.setAdventureAmounts(player, ++adventures);
-		msg.prefix(player, "§5Adventure", "Congratulations, you finished your adventure, here ist your reward!");
-		if(adventures == 10) {
-			offerRank(player, "rank.pioneer");
-		} elseif(adventures == 5) {
-			offerRank(player, "rank.explorer");
-		} elseif(adventures == 1) {
-			offerRank(player, "rank.adventurer");
-		}
-		removeAdventureDisplay(player);
-		player.safeGiveItem(player, item.getAmber());
-		money.addBoost(player, 4096);
+	goto("wait");
+}
+
+if(entity_name == "Info-Point") {
+	msg(player, string.getSpacer());
+	msg(player, string.getClickText("§r [§cclick§r] [§eSurvival§r]", "/infopoint1"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eAdventure§r]", "/infopoint2"));
+	msg(player, string.getClickText("§r [§cclick§r] [§ePlots§r]", "/infopoint3"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eClans§r]", "/infopoint4"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eCities§r]", "/infopoint5"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eShops§r]", "/infopoint6"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eMinigames§r]", "/infopoint7"), " ", string.getClickText("§f[§bTeleport§f]", "/games"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eQuests§r]", "/infopoint8"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eCreative§r]", "/infopoint12"), " ", string.getClickText("§f[§bTeleport§f]", "/creative"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eRanking§r]", "/infopoint9"), " ", string.getLinkText("§f[§bRanks§f]", "https://minecraft.hammerle.me/?site=ranks"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eRules§r]", "/infopoint10"), " ", string.getLinkText("§f[§bFake Rules§f]", "https://minecraft.hammerle.me/?site=rules"));
+	msg(player, string.getClickText("§r [§cclick§r] [§eNote§r]", "/infopoint11"));
+	goto("wait");
+}
+if(entity_name == "Banker") {
+	inv.open(bankmenu, player);
+	goto("wait");
+}
+if(entity_name == "Adventure") {
+	if(!player.isOnAdventure(player)) {
+		msg.prefix(player, "§5Adventure", "You aren't on an adventure. Click the chest in the teleporter to start an adventure.");
 		goto("wait");
 	}
+	player.setAdventure(player, false);
+	adventures = player.getAdventureAmounts(player);
+	if(adventures == null) {
+		adventures = 0;
+	}
+	player.setAdventureAmounts(player, ++adventures);
+	msg.prefix(player, "§5Adventure", "Congratulations, you finished your adventure, here ist your reward!");
+	if(adventures == 10) {
+		offerRank(player, "rank.pioneer");
+	} elseif(adventures == 5) {
+		offerRank(player, "rank.explorer");
+	} elseif(adventures == 1) {
+		offerRank(player, "rank.adventurer");
+	}
+	removeAdventureDisplay(player);
+	player.safeGiveItem(player, item.getAmber());
+	money.addBoost(player, 4096);
+	goto("wait");
 }
 goto("wait");
 
@@ -411,141 +389,57 @@ if(set.contains(tp_set, player_uuid)) {
 goto("wait");
 
 @snuvi_click
+inv_id = inv.getId(inv);
 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 == 11 || inv_slot == 12 || inv_slot == 15 || inv_slot == 16)  {
-		if(inv_slot == 11) {
-			//1 Silbermünze --> 64 Kupfermünzen
-			from_item = coin_silver;
-			to_item = coin_copper64;
-			message = "Not enough silvercoins in inventory.";
-			item_type = "km:coin_copper";
-			needed_inv_coins = silver_inv;
-		}
-		elseif(inv_slot == 12) {
-			//64 Kupfermünzen --> 1 Silbermünze
-			from_item = coin_copper64;
-			to_item = coin_silver;
-			message = "Not enough coppercoins in inventory.";
-			item_type = "km:coin_silver";
-			needed_inv_coins = copper_inv;
-		}
-		elseif(inv_slot == 15) {
-			//1 Goldmünze --> 64 Silbermünzen
-			from_item = coin_gold;
-			to_item = coin_silver64;
-			message = "Not enough goldcoins in inventory.";
-			item_type = "km:coin_silver";
-			needed_inv_coins = gold_inv;
-		}
-		elseif(inv_slot == 16) {
-			//64 Silbermünzen --> 1 Goldmünze
-			from_item = coin_silver64;
-			to_item = coin_gold;
-			message = "Not enough silvercoins in inventory.";
-			item_type = "km:coin_gold";
-			needed_inv_coins = silver_inv;
-		}
-		item_1 = item.clone(from_item);
-		item.setAmount(item_1, item.getAmount(item_1) * factor);
-		item_2 = item.clone(to_item);
-		item.setAmount(item_2, item.getAmount(item_2) * factor);
-		amount1 = item.getAmount(item_1);
-		amount2 = item.getAmount(item_2);
-		if(needed_inv_coins * factor < amount1 * factor) {
-			msg.prefix(player, prefix_money, message);
-			goto("wait");
-		}
-		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, item_1);
-			msg.prefix(player, prefix_money, "Not enough space in inventory.");
-			goto("wait");
+	//Einzahlen
+	if(click == "RIGHT" || click == "SHIFT_RIGHT") {
+		amount_items = 1;
+		if(click == "SHIFT_RIGHT") {
+			amount_items = 64;
+		}
+		player_inv = player.getInv(player);
+		gold_item = item.custom.create("GOLD_COIN", 1, null, null);
+		silver_item = item.custom.create("SILVER_COIN", 1, null, null);
+		copper_item = item.custom.create("COPPER_COIN", 1, null, null);
+		gold_inv = inv.getItemAmount(player_inv, gold_item);
+		silver_inv = inv.getItemAmount(player_inv, silver_item);
+		copper_inv = inv.getItemAmount(player_inv, copper_item);
+		if(inv_slot == 0) {
+			depositSnuvis(player, amount_items, 0, 0);
+		}
+		elseif(inv_slot == 1) {
+			depositSnuvis(player, 0, amount_items, 0);
+		}
+		elseif(inv_slot == 2) {
+			depositSnuvis(player, 0, 0, amount_items);
+		}
+		elseif(inv_slot == 3) {
+			gold_inv = inv.getItemAmount(player_inv, item.custom.create("GOLD_COIN", 1, null, null));
+			silver_inv = inv.getItemAmount(player_inv, item.custom.create("SILVER_COIN", 1, null, null));
+			copper_inv = inv.getItemAmount(player_inv, item.custom.create("COPPER_COIN", 1, null, null));
+			depositSnuvis(player, copper_inv, silver_inv, gold_inv);
 		}
-		inv.update(player);
-		msg.prefix(player, prefix_money, "Exchange succesfull.");
 		goto("wait");
 	}
-	//Kontobewegungen
-	if(inv_slot == 1 || inv_slot == 6) {
-		betrag = 1 * factor;
-		coin_inv = copper_inv;
-	}
-	elseif(inv_slot == 2 || inv_slot == 7) {
-		betrag = 64 * factor;
-		coin_inv = silver_inv;
-	}
-	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;
+	//Auszahlen
+	if(click == "LEFT" || click == "SHIFT_LEFT") {
+		amount_items = 1;
+		if(click == "SHIFT_LEFT") {
+			amount_items = 64;
 		}
-	}
-	//Einzahlen
-	if(inv_slot > 0 && inv_slot < 5) {
-		if(coin_inv < 1 * factor) {
-			msg.prefix(player, prefix_money, "Coins not in inventory.");
-			goto("wait");
+		if(inv_slot == 0) {
+			withdrawSnuvis(player, amount_items, 0, 0);
 		}
-		if(betrag == 0) {
-			msg.prefix(player, prefix_money, "No coins in your inventory.");
-			goto("wait");
+		elseif(inv_slot == 1) {
+			withdrawSnuvis(player, 0, amount_items, 0);
 		}
-		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 {
-			remove_item = item.clone(inv.getItem(bankmenu, inv_slot));	
-			item.setAmount(remove_item, item.getAmount(remove_item) * factor);
-			player.removeItemNbt(player, remove_item);
+		elseif(inv_slot == 2) {
+			withdrawSnuvis(player, 0, 0, amount_items);
 		}
-		inv.update(player);
-		goto("wait");
-	}
-	//Auszahlen
-	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);
-			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.safeGiveItem(player, coin_item);
-				coin_item = read.item("km:coin_silver", silver_amount);
-				player.safeGiveItem(player, coin_item);
-				coin_item = read.item("km:coin_copper", copper_amount);
-				player.safeGiveItem(player, coin_item);
-			} else {
-				item = inv.getItem(bankmenu, inv_slot);
-				new_item = read.item(item.getType(item), item.getAmount(item) * factor);
-				player.safeGiveItem(player, new_item);
-			}
-			inv.update(player);
+		elseif(inv_slot == 3) {
+			a = money.split(getMoney(player));
+			withdrawSnuvis(player, a[2], a[1], a[0]);
 		}
-		goto("wait");
 	}
 	goto("wait");
 }
@@ -591,6 +485,59 @@ if(inv_id == gambler_inv_id) {
 }
 goto("wait");
 
+function depositSnuvis(player, copper, silver, gold) {
+	gold_item = item.custom.create("GOLD_COIN", 1, null, null);
+	silver_item = item.custom.create("SILVER_COIN", 1, null, null);
+	copper_item = item.custom.create("COPPER_COIN", 1, null, null);
+	player_inv = player.getInv(player);
+	gold_inv = inv.getItemAmount(player_inv, gold_item);
+	silver_inv = inv.getItemAmount(player_inv, silver_item);
+	copper_inv = inv.getItemAmount(player_inv, copper_item);
+	if(copper > copper_inv || silver > silver_inv || gold > gold_inv) {
+		player.action(player, text.new("Not enough coins in inventory."));
+		return;
+	}
+	if(copper > 0) {
+		item.setAmount(copper_item, copper);
+		inv.removeItem(player_inv, copper_item);
+	}
+	if(silver > 0) {
+		item.setAmount(silver_item, silver);
+		inv.removeItem(player_inv, silver_item);
+	}
+	if(gold > 0) {
+		item.setAmount(gold_item, gold);
+		inv.removeItem(player_inv, gold_item);
+	}
+	sum = copper + silver * 64 + gold * 4096;
+	money.add(player, sum);
+}
+
+function withdrawSnuvis(player, copper, silver, gold) {
+	sum = copper + silver * 64 + gold * 4096;
+	if(!hasEnoughMoney(player, sum)) {
+		player.action(player, text.new("Not enough snuvis on your account."));
+		return;
+	}
+	if(copper > 0) {
+		copper_item = item.custom.create("COPPER_COIN", 1, null, null);
+		item.setAmount(copper_item, copper);
+		player.safeGiveItem(player, copper_item);
+	}
+	if(silver > 0) {
+		silver_item = item.custom.create("SILVER_COIN", 1, null, null);
+		item.setAmount(silver_item, silver);
+		player.safeGiveItem(player, silver_item);
+	}
+	if(gold > 0) {
+		gold_item = item.custom.create("GOLD_COIN", 1, null, null);
+		item.setAmount(gold_item, gold);
+		player.safeGiveItem(player, gold_item);
+	}
+	sum = copper + silver * 64 + gold * 4096;
+	money.sub(player, sum);
+}
+
 function fire_ring(location, block_string, radius){
 	loc_x = loc.getX(location);
 	loc_y = loc.getY(location);
@@ -636,6 +583,14 @@ if(action == "RIGHT_CLICK_AIR") {
 	msg.prefix(player, "§eClock", string.concat(string.number(time_h), ":", time_m));
 	goto("wait");
 }
+if(action == "RIGHT_CLICK_BLOCK") {
+	if(block.isType(block, "SPAWNER")) {
+		if(!player.isCreative(player)) {
+			cancel = true;
+			goto("wait");
+		}
+	}
+}
 goto("wait");
 if(hand == "OFF_HAND") {
 	goto("wait");

+ 7 - 8
system/chat.txt

@@ -48,7 +48,7 @@ list.add(falldeaths, string.concat(colorcodedeath, " tripped on a banana peal.")
 list.add(falldeaths, string.concat(colorcodedeath, " jumped into the depths."));
 list.add(falldeaths, string.concat(colorcodedeath, " jumped into death."));
 list.add(falldeaths, string.concat(colorcodedeath, " forgot their wings."));
-list.add(falldeaths, string.concat(colorcodedeath, " forgot their RedBull."));
+list.add(falldeaths, string.concat(colorcodedeath, " forgot their RedBell."));
 
 firedeaths = list.new();
 list.add(firedeaths, string.concat(colorcodedeath, " looks hot today."));
@@ -104,6 +104,7 @@ if(first_join) {
 	player.setFirstJoin(player, true);
 }
 player.setHeadName(player);
+player.setLoggedIp(player, player.getIp(player));
 silentjoin = player.getSilentJoin(player);
 if(silentjoin) {
 	message = null;
@@ -209,19 +210,17 @@ list = map.getOrDefault(causetolist, damage_type, defaultdeaths);
 if(damage_type == "player") {
 	killer = player.getFromDamageSource(damage_source);
 	killer_name = player.getName(killer);
-	item = living.getEquip(killer, read.slot("HAND"));
-	//if(item.hasName(item)) {
-	//	message1 = string.concat(death_prefix, fullname, colorcodedeath, " killed by ", killer_name, " with ");
-//		message2 = item.getFullText(item);
-		//message = text.concat2(message1, message2);
-	//} else {
+	item = living.getHand(killer);
+	if(item.hasName(item)) {
+		message = text.merge(text.new(string.concat(death_prefix, fullname, colorcodedeath, " was killed by ", killer_name, " with ")), text.item(item.getName(item), item), text.new("§9."));
+	} else {
 		list.clear(list);
 		list.add(list, string.concat(death_prefix, fullname, colorcodedeath, " got their last honour from ", killer_name, "."));
 		list.add(list, string.concat(death_prefix, fullname, colorcodedeath, " died by ", killer_name, "'s hand."));
 		list.add(list, string.concat(death_prefix, fullname, colorcodedeath, " was killed by ", killer_name, "."));
 		list.add(list, string.concat(death_prefix, fullname, colorcodedeath, " lost a bet to ", killer_name, "."));
 		message = text.new(list.getIndex(list, math.random(0, list.getSize(list) - 1)));
-	//}
+	}
 } else {
 	message = text.new(string.concat(death_prefix, fullname, list.getIndex(list, math.random(0, list.getSize(list) - 1))));
 }

+ 35 - 25
system/chestshops.txt

@@ -1,4 +1,4 @@
-event.load("inv_click");
+event.load("snuvi_click");
 event.load("inv_close");
 event.load("block_click");
 
@@ -11,13 +11,9 @@ wait();
 ignoreGoto(event);
 goto("main");
 
-@inv_click
-inv_size = inv.getSize(inv);
-if(inv_slot >= inv_size || inv_slot < 0) {
-	goto("main");
-}
+@snuvi_click
 title_string = string.removeFormat(string.text(inv_title));
-if(!string.startsWith(title_string, "Shop", 0)) {
+if(!string.startsWith(title_string, "ChestShop", 0)) {
 	goto("main");
 }
 cancel = true;
@@ -43,11 +39,6 @@ if(!block.isWallSign(sign_block)) {
 	goto("main");
 }
 factor = 1;
-if(click == "SHIFT_LEFT") {
-	factor = 8;
-}
-buy_price = shop.getBuyPrice(inv) * factor;
-sell_price = shop.getSellPrice(inv) * factor;
 chest_block = block.getShopChest(sign_block);
 if(!block.isChest(chest_block)) {
 	map.remove(invid_to_sign_block, inv_id);
@@ -58,6 +49,11 @@ if(!block.isChest(chest_block)) {
 block_inv = block.getInventory(chest_block);
 if(inv_slot == 3) { //Buy
 	itemstack = inv.getItem(inv, 4);
+	if(click == "SHIFT_LEFT") {
+		factor = math.roundDown(item.getMaxAmount(itemstack) / item.getAmount(itemstack));
+	}
+	buy_price = shop.getBuyPrice(inv) * factor;
+	item.removeFlag(itemstack, "HIDE_DESTROYS");
 	itemstack_2 = item.clone(itemstack);
 	if(click == "SHIFT_LEFT") {
 		item.setAmount(itemstack_2, item.getAmount(itemstack_2) * factor);
@@ -92,6 +88,11 @@ if(inv_slot == 3) { //Buy
 	money.sub(player, buy_price);
 }  elseif(inv_slot == 12) { //Sell
 	itemstack = inv.getItem(inv, 11);
+	if(click == "SHIFT_LEFT") {
+		factor = math.roundDown(item.getMaxAmount(itemstack) / item.getAmount(itemstack));
+	}
+	sell_price = shop.getSellPrice(inv) * factor;
+	item.removeFlag(itemstack, "HIDE_DESTROYS");
 	itemstack_2 = item.clone(itemstack);
 	if(click == "SHIFT_LEFT") {
 		item.setAmount(itemstack_2, item.getAmount(itemstack_2) * factor);
@@ -159,7 +160,7 @@ if(block.isWallSign(block)) {
 		msg.prefix(player, prefix_shop, "No item in chest.");
 		goto("main");
 	}
-	inv = inv.new("111111111111111111", text.new(string.concat("§8Shop of ", owner_name)));
+	inv = inv.new("000200000000200002", text.new(string.concat("§8ChestShop of ", owner_name)));
 	shop.setBuyElement(block, inv, item.clone(item_stack));
 	shop.setSellElement(block, inv, item.clone(item_stack));
 	inv.setItem(inv, 17, item.custom.create("CROSS_RED", 1, "§fClose", null));
@@ -194,9 +195,7 @@ function shop.setBuyElement(sign_block, inv, item_stack) {
 	if(gold != 0) {
 		inv.setItem(inv, index, item.custom.create("GOLD_COIN", gold, null, null));
 	}
-	lore_list = list.new();
-	list.add(lore_list, text.new("§5Shift Click means 8x Buy"));
-	inv.setItem(inv, 3, item.custom.create("ARROW_RIGHT", 1, "§fBuy", lore_list));
+	inv.setItem(inv, 3, item.custom.create("ARROW_RIGHT", 1, "§fBuy", null));
 	inv.setItem(inv, 4, item_stack);
 }
 
@@ -228,9 +227,7 @@ function shop.setSellElement(sign_block, inv, item_stack) {
 		inv.setItem(inv, index, item.custom.create("GOLD_COIN", gold, null, null));
 	}
 	inv.setItem(inv, 11, sell_stack);
-	lore_list = list.new();
-	list.add(lore_list, text.new("§5Shift Click means 8x Sell"));
-	inv.setItem(inv, 12, item.custom.create("ARROW_RIGHT", 1, "§fSell", lore_list));
+	inv.setItem(inv, 12, item.custom.create("ARROW_RIGHT", 1, "§fSell", null));
 }
 
 
@@ -266,13 +263,14 @@ function shop.getItemAmount(inv, slot) {
 	if(item == null) {
 		return 0;
 	}
-	if(item.getType(item) == "km:coin_gold") {
+	custom = item.getCustom(item);
+	if(isGoldCoin(custom)) {
 		return item.getAmount(item) * 64 * 64;
 	}
-	if(item.getType(item) == "km:coin_silver") {
+	if(isSilverCoin(custom)) {
 		return item.getAmount(item) * 64;
 	}
-	if(item.getType(item) == "km:coin_copper") {
+	if(isCopperCoin(custom)) {
 		return item.getAmount(item);
 	}
 	return 0;
@@ -288,8 +286,20 @@ function shop.getBuyPrice(inv) {
 
 function shop.getSellPrice(inv) {
 	snuvis = 0;
-	snuvis += shop.getItemAmount(inv, 7);
-	snuvis += shop.getItemAmount(inv, 8);
-	snuvis += shop.getItemAmount(inv, 9);
+	snuvis += shop.getItemAmount(inv, 13);
+	snuvis += shop.getItemAmount(inv, 14);
+	snuvis += shop.getItemAmount(inv, 15);
 	return snuvis;
+}
+
+function isCopperCoin(custom_item) {
+	return string(custom_item) == "COPPER_COIN";
+}
+
+function isSilverCoin(custom_item) {
+	return string(custom_item) == "SILVER_COIN";
+}
+
+function isGoldCoin(custom_item) {
+	return string(custom_item) == "GOLD_COIN";
 }

File diff suppressed because it is too large
+ 492 - 213
system/commands.txt


+ 24 - 0
system/creative.txt

@@ -0,0 +1,24 @@
+event.load("player_pre_respawn");
+event.load("player_post_respawn");
+
+crea_respawn = set.new();
+
+msg.string("dev", "§bCreative §rloaded.");
+@wait
+wait();
+ignoreGoto(event);
+goto("wait");
+
+@player_pre_respawn
+if(loc.isInCreativeWorld(entity.getLocation(player))) {
+	set.add(crea_respawn, player.getUuid(player));
+}
+goto("wait");
+
+@player_post_respawn
+player_uuid = player.getUuid(player);
+if(set.contains(crea_respawn, player_uuid)) {
+	set.remove(crea_respawn, player_uuid);
+	entity.teleport(player, world.getCreativeSpawn());
+}
+goto("wait");

+ 4 - 1
system/damage.txt

@@ -80,7 +80,7 @@ function updateEntityName(entity) {
 
 	entity_name = entity.getName(living_entity);
 	if(entity_name == null) {
-		string_name = null;
+		string_name = "";
 	} else {
 		string_name = string.text(entity_name);
 	}
@@ -100,6 +100,9 @@ function updateEntityName(entity) {
 		setEntityName(living_entity, health, max_health, null);
 		return;
 	}
+	if(heart_index < 2) {
+		return;
+	}
 	string_name = string.subString(string_name, 0, heart_index - 2);
 	setEntityName(living_entity, health, max_health, string_name);
 }

+ 1 - 1
system/doors.txt

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

+ 14 - 2
system/humans.txt

@@ -1,6 +1,6 @@
 event.load("entity_click");
 
-emerald = item.create("EMERALD", 1, "§fMarkt", null);
+emerald = item.create("EMERALD", 1, "§fMarket", null);
 quest_book = item.create("ENCHANTED_BOOK", 1, "§eQuests", null);
 
 farmer_inv = createMainMenu("Farmer", true, false);
@@ -10,6 +10,10 @@ alena_inv = createMainMenu("Alena", true, false);
 mason_inv = createMainMenu("Mason", true, false);
 priest_inv = createMainMenu("Priest", true, false);
 mage_inv = createMainMenu("Mage", true, false);
+lumberjack_inv = createMainMenu("Lumberjack", true, false);
+butcher_inv = createMainMenu("Butcher", true, false);
+librarian_inv = createMainMenu("Librarian", true, false);
+nether_inv = createMainMenu("Nether Merchant", true, false);
 
 msg.string("dev", "§bHumans §rloaded.");
 @main
@@ -39,6 +43,14 @@ if(entity_name == "Farmer") {
 	inv.open(priest_inv, player);
 } elseif(entity_name == "Mage") {
 	inv.open(mage_inv, player);
+} elseif(entity_name == "Lumberjack") {
+	inv.open(lumberjack_inv, player);
+} elseif(entity_name == "Butcher") {
+	inv.open(butcher_inv, player);
+} elseif(entity_name == "Librarian") {
+	inv.open(librarian_inv, player);
+} elseif(entity_name == "Nether Merchant") {
+	inv.open(nether_inv, player);
 }
 goto("main");
 
@@ -51,4 +63,4 @@ function createMainMenu(inv_name, market, quests) {
 		inv.setItem(inv, 1, $quest_book);
 	}
 	return inv;
-}
+}

+ 5 - 2
system/init.txt

@@ -1,3 +1,8 @@
+//---------- Worlds ----------
+
+//world.load("creative");
+//world.load("games");
+
 //---------- ScriptVars ----------
 
 config = config.new("scripts/configs", "server");
@@ -36,9 +41,7 @@ table.setsize(":", 2);
 table.setEmpty1(string.concat(string.fromCode(63502), " "));
 table.setEmpty2(string.concat(string.fromCode(63501), " "));
 
-msg("dev", text.new("A"));
 human.setPrefix("§d§oNPC §e| §7§o");
 human.setSuffix("");
-msg("dev", text.new("B"));
 
 term();

+ 66 - 6
system/market.txt

@@ -4,7 +4,7 @@ mainHand = read.slot("HAND");
 openMarkets = set.new();
 
 // Miner
-miner = inv.new("222222222", text.new("Miner"));
+miner = inv.new("222222222222222222", text.new("Miner"));
 inv.setItem(miner, 0, newItem(material.get("DIAMOND")));
 inv.setItem(miner, 1, newItem(material.get("IRON_INGOT")));
 inv.setItem(miner, 2, newItem(material.get("GOLD_INGOT")));
@@ -14,6 +14,7 @@ inv.setItem(miner, 5, newItem(material.get("LAPIS_LAZULI")));
 inv.setItem(miner, 6, newItem(material.get("REDSTONE")));
 inv.setItem(miner, 7, newItem(material.get("FLINT")));
 inv.setItem(miner, 8, newItem(material.get("EMERALD")));
+inv.setItem(miner, 9, newItem(material.get("QUARTZ")));
 set.add(openMarkets, inv.getId(miner));
 // Farmer
 farmer = inv.new("222222222", text.new("Farmer"));
@@ -48,7 +49,7 @@ item.addFlag(sturm, "HIDE_POTION_EFFECTS");
 inv.setItem(tavern, 1, newSellItem(sturm, 1, 64));
 red_bull = read.item("{Count:1b,id:'minecraft:potion',tag:{Potion:'minecraft:water'}}");
 item.addPotion(red_bull, "LEVITATION", 600, 0);
-item.setName(red_bull, text.new("§fRed Bull"));
+item.setName(red_bull, text.new("§fRed Bell"));
 item.addFlag(red_bull, "HIDE_POTION_EFFECTS");
 inv.setItem(tavern, 2, newSellItem(red_bull, 1, 20));
 set.add(openMarkets, inv.getId(tavern));
@@ -62,7 +63,6 @@ inv.setItem(priest, 4, newItem(material.get("PHANTOM_MEMBRANE")));
 inv.setItem(priest, 5, newItem(material.get("ENDER_PEARL")));
 inv.setItem(priest, 6, newItem(material.get("STRING")));
 inv.setItem(priest, 7, newItem(material.get("GUNPOWDER")));
-inv.setItem(priest, 8, newItem(material.get("BLAZE_ROD")));
 set.add(openMarkets, inv.getId(priest));
 // Mason
 mason = inv.new("222222222222222222", text.new("Mason"));
@@ -93,6 +93,54 @@ inv.setItem(mage, 5, newSellItem(item.new(material.get("FOX_SPAWN_EGG")), 1, 256
 inv.setItem(mage, 6, newSellItem(item.new(material.get("HORSE_SPAWN_EGG")), 1, 256));
 inv.setItem(mage, 7, newSellItem(item.new(material.get("STRIDER_SPAWN_EGG")), 1, 256));
 set.add(openMarkets, inv.getId(mage));
+// Lumberjack
+lumberjack = inv.new("222222222222222222", text.new("Lumberjack"));
+inv.setItem(lumberjack, 0, newItem(material.get("OAK_LOG")));
+inv.setItem(lumberjack, 1, newItem(material.get("SPRUCE_LOG")));
+inv.setItem(lumberjack, 2, newItem(material.get("BIRCH_LOG")));
+inv.setItem(lumberjack, 3, newItem(material.get("JUNGLE_LOG")));
+inv.setItem(lumberjack, 4, newItem(material.get("ACACIA_LOG")));
+inv.setItem(lumberjack, 5, newItem(material.get("DARK_OAK_LOG")));
+inv.setItem(lumberjack, 6, newItem(material.get("OAK_SAPLING")));
+inv.setItem(lumberjack, 7, newItem(material.get("SPRUCE_SAPLING")));
+inv.setItem(lumberjack, 8, newItem(material.get("BIRCH_SAPLING")));
+inv.setItem(lumberjack, 9, newItem(material.get("JUNGLE_SAPLING")));
+inv.setItem(lumberjack, 10, newItem(material.get("ACACIA_SAPLING")));
+inv.setItem(lumberjack, 11, newItem(material.get("DARK_OAK_SAPLING")));
+set.add(openMarkets, inv.getId(lumberjack));
+// Butcher
+butcher = inv.new("222222222", text.new("Butcher"));
+inv.setItem(butcher, 0, newItem(material.get("BEEF")));
+inv.setItem(butcher, 1, newItem(material.get("CHICKEN")));
+inv.setItem(butcher, 2, newItem(material.get("PORKCHOP")));
+inv.setItem(butcher, 3, newItem(material.get("RABBIT")));
+inv.setItem(butcher, 4, newItem(material.get("MUTTON")));
+inv.setItem(butcher, 5, newItem(material.get("FEATHER")));
+inv.setItem(butcher, 6, newItem(material.get("RABBIT_HIDE")));
+inv.setItem(butcher, 7, newItem(material.get("RABBIT_FOOT")));
+inv.setItem(butcher, 8, newItem(material.get("LEATHER")));
+set.add(openMarkets, inv.getId(butcher));
+// Librarian
+librarian = inv.new("222222222", text.new("Librarian"));
+inv.setItem(librarian, 0, newItem(material.get("INK_SAC")));
+inv.setItem(librarian, 1, newItem(material.get("WRITABLE_BOOK")));
+inv.setItem(librarian, 2, newItem(material.get("BOOK")));
+inv.setItem(librarian, 3, newItem(material.get("BOOKSHELF")));
+set.add(openMarkets, inv.getId(librarian));
+// Nether Merchant
+nether = inv.new("222222222222222222", text.new("Librarian"));
+inv.setItem(nether, 0, newItem(material.get("BLAZE_ROD")));
+inv.setItem(nether, 1, newItem(material.get("GHAST_TEAR")));
+inv.setItem(nether, 2, newItem(material.get("NETHER_WART")));
+inv.setItem(nether, 3, newItem(material.get("MAGMA_CREAM")));
+inv.setItem(nether, 4, newItem(material.get("WARPED_STEM")));
+inv.setItem(nether, 5, newItem(material.get("CRIMSON_STEM")));
+inv.setItem(nether, 6, newItem(material.get("NETHERRACK")));
+inv.setItem(nether, 7, newItem(material.get("BASALT")));
+inv.setItem(nether, 8, newItem(material.get("BLACKSTONE")));
+inv.setItem(nether, 9, newItem(material.get("GLOWSTONE")));
+inv.setItem(nether, 10, newItem(material.get("SHROOMLIGHT")));
+set.add(openMarkets, inv.getId(nether));
 
 emerald = material.get("EMERALD");
 
@@ -126,7 +174,7 @@ function hasSnuvis(player, amount) {
 }
 
 function removeSnuvis(player, amount) {
-	money.sub(player, amount);
+	money.subWithoutPopUp(player, amount);
 }
 
 function calculatePrices(material) {
@@ -214,7 +262,7 @@ config.saveAsync(stock);
 save = false;
 goto("loop");
 
-@entity_click
+/*@entity_click
 if(hand == mainHand) {
     goto("loop");
 }
@@ -236,7 +284,9 @@ if(string.contains(name, "Miner", 0)) {
     inv.open(mason, player);
 } elseif(string.contains(name, "Mage", 0)) {
     inv.open(mage, player);
-}
+} elseif(string.contains(name, "Lumberjack", 0)) {
+    inv.open(lumberjack, player);
+} */
 
 goto("loop");
 
@@ -261,6 +311,14 @@ if(item.getType(item) == emerald) {
 		inv.open(mason, player);
 	} elseif(title_string == "Mage") {
 		inv.open(mage, player);
+	} elseif(title_string == "Lumberjack") {
+		inv.open(lumberjack, player);
+	} elseif(title_string == "Butcher") {
+		inv.open(butcher, player);
+	} elseif(title_string == "Librarian") {
+		inv.open(librarian, player);
+	} elseif(title_string == "Nether Merchant") {
+		inv.open(nether, player);
 	}
 }
 if(!set.contains(openMarkets, inv.getId(inv))) {
@@ -304,6 +362,7 @@ if(lore == null || list.getSize(lore) == 0) {
         lostSnuvis += price;
     }
     if(lostSnuvis > 0) {
+		money.popUp(player, lostSnuvis * -1, false);
         msg(player, text.new(string.concat("§eYou spent §6", string.number(lostSnuvis), "§e Snuvis.")));
     }
 } else {
@@ -328,6 +387,7 @@ if(lore == null || list.getSize(lore) == 0) {
         config.set(stock, material, onStock - buyAmount);
     }
     if(lostSnuvis > 0) {
+		money.popUp(player, lostSnuvis * -1, false);
         msg(player, text.new(string.concat("§eYou spent §6", string.number(lostSnuvis), "§e Snuvis.")));
         updateItem(inv, inv_slot, material);
         save();

+ 33 - 6
system/perms.txt

@@ -68,6 +68,18 @@ perm.addToGroup(0, "voteshop");
 perm.addToGroup(0, "warp");
 
 perm.addToGroup(1, "isOwner");
+perm.addToGroup(1, "bukkit.command.paper");
+perm.addToGroup(1, "bukkit.command.paper.version");
+perm.addToGroup(1, "bukkit.command.paper.dumpitem");
+perm.addToGroup(1, "bukkit.command.paper.playermobcaps");
+perm.addToGroup(1, "bukkit.command.paper.heap");
+perm.addToGroup(1, "bukkit.command.paper.chunkinfo");
+perm.addToGroup(1, "bukkit.command.paper.fixlight");
+perm.addToGroup(1, "bukkit.command.paper.syncloadinfo");
+perm.addToGroup(1, "bukkit.command.paper.entity");
+perm.addToGroup(1, "bukkit.command.paper.mobcaps");
+perm.addToGroup(1, "bukkit.command.paper.reload");
+perm.addToGroup(1, "bukkit.command.paper.debug");
 perm.addToGroup(1, "bukkit.command.plugins");
 perm.addToGroup(1, "bukkit.command.reload");
 perm.addToGroup(1, "minecraft.command.datapack");
@@ -76,11 +88,11 @@ perm.addToGroup(1, "minecraft.command.op");
 perm.addToGroup(1, "minecraft.command.worldborder");
 
 perm.addToGroup(2, "isAdmin");
+perm.addToGroup(2, "butcher");
 perm.addToGroup(2, "copyisland");
 perm.addToGroup(2, "enderchest");
 perm.addToGroup(2, "entities");
 perm.addToGroup(2, "gamemode.other");
-perm.addToGroup(2, "gamerule.write");
 perm.addToGroup(2, "inv.loadFrom");
 perm.addToGroup(2, "inv.saveFor");
 perm.addToGroup(2, "iteminfo");
@@ -100,7 +112,7 @@ perm.addToGroup(2, "minecraft.command.scoreboard");
 perm.addToGroup(2, "minecraft.command.tag");
 perm.addToGroup(2, "minecraft.command.team");
 perm.addToGroup(2, "minecraft.command.whitelist");
-perm.addToGroup(2, "money");
+perm.addToGroup(2, "minecraft.commandblock");
 perm.addToGroup(2, "lightning");
 perm.addToGroup(2, "perm.removeall");
 perm.addToGroup(2, "plot.moreinfo");
@@ -122,6 +134,7 @@ perm.addToGroup(2, "weather");
 perm.addToGroup(2, "world");
 
 perm.addToGroup(3, "isMod");
+perm.addToGroup(3, "armorstand");
 perm.addToGroup(3, "ass");
 perm.addToGroup(3, "ban");
 perm.addToGroup(3, "boost");
@@ -129,6 +142,7 @@ perm.addToGroup(3, "coreprotect.co");
 perm.addToGroup(3, "coreprotect.core");
 perm.addToGroup(3, "coreprotect.coreprotect");
 perm.addToGroup(3, "coreprotect.*");
+perm.addToGroup(3, "customitems.*");
 perm.addToGroup(3, "datatools");
 perm.addToGroup(3, "enchant");
 perm.addToGroup(3, "feed");
@@ -136,6 +150,7 @@ perm.addToGroup(3, "fly");
 perm.addToGroup(3, "fly.other");
 perm.addToGroup(3, "gamemode");
 perm.addToGroup(3, "gamerule");
+perm.addToGroup(3, "gamerule.write");
 perm.addToGroup(3, "grow");
 perm.addToGroup(3, "hat");
 perm.addToGroup(3, "head");
@@ -156,7 +171,8 @@ perm.addToGroup(3, "minecraft.command.give");
 perm.addToGroup(3, "minecraft.command.kill");
 perm.addToGroup(3, "minecraft.command.seed");
 perm.addToGroup(3, "minecraft.command.summon");
-perm.addToGroup(3, "mute");
+perm.addToGroup(3, "minecraft.command.teleport");
+perm.addToGroup(3, "minecraft.debugstick");
 perm.addToGroup(3, "news");
 perm.addToGroup(3, "lastseen");
 perm.addToGroup(3, "logo");
@@ -171,6 +187,7 @@ perm.addToGroup(3, "playtime.other");
 perm.addToGroup(3, "playtime.year");
 perm.addToGroup(3, "plot.bypass");
 perm.addToGroup(3, "plot.other");
+perm.addToGroup(3, "potion");
 perm.addToGroup(3, "quest");
 perm.addToGroup(3, "script.error");
 perm.addToGroup(3, "seen");
@@ -181,18 +198,18 @@ perm.addToGroup(3, "silentjoin");
 perm.addToGroup(3, "speed");
 perm.addToGroup(3, "startgame.jump");
 perm.addToGroup(3, "suicide.other");
-perm.addToGroup(3, "teleport");
-perm.addToGroup(3, "teleport.other");
 perm.addToGroup(3, "tempfly");
+perm.addToGroup(3, "tip.mod");
 perm.addToGroup(3, "top");
+perm.addToGroup(3, "tp.other");
 perm.addToGroup(3, "tppos");
 perm.addToGroup(3, "unban");
 perm.addToGroup(3, "unjail");
-perm.addToGroup(3, "unmute");
 perm.addToGroup(3, "user.money");
 perm.addToGroup(3, "vanish");
 perm.addToGroup(3, "warp.create");
 perm.addToGroup(3, "yeet");
+perm.addToGroup(3, "world");
 
 perm.addToGroup(4, "isSupporter");
 perm.addToGroup(4, "isTeam");
@@ -201,12 +218,15 @@ perm.addToGroup(4, "block");
 perm.addToGroup(4, "color");
 perm.addToGroup(4, "icon");
 perm.addToGroup(4, "kick");
+perm.addToGroup(4, "mute");
 perm.addToGroup(4, "perm");
 perm.addToGroup(4, "perm.toggle");
 perm.addToGroup(4, "setmessage");
 perm.addToGroup(4, "skills.other");
 perm.addToGroup(4, "tempban");
 perm.addToGroup(4, "tip");
+perm.addToGroup(4, "tp");
+perm.addToGroup(4, "unmute");
 perm.addToGroup(4, "user.other");
 perm.addToGroup(4, "warn");
 	
@@ -253,8 +273,10 @@ perm.addToGroup(6, "stats.remove");
 perm.addToGroup(7, "isBuilder");
 perm.addToGroup(7, "isTeam");
 perm.addToGroup(7, "allsounds");
+perm.addToGroup(7, "armorstand");
 perm.addToGroup(7, "ass");
 perm.addToGroup(7, "color");
+perm.addToGroup(7, "customitems");
 perm.addToGroup(7, "datatools");
 perm.addToGroup(7, "fly");
 perm.addToGroup(7, "gamemode");
@@ -266,8 +288,12 @@ perm.addToGroup(7, "logo");
 perm.addToGroup(7, "minecraft.command.give");
 perm.addToGroup(7, "minecraft.command.setblock");
 perm.addToGroup(7, "minecraft.command.summon");
+perm.addToGroup(7, "minecraft.debugstick");
+perm.addToGroup(7, "missing.brush");
+perm.addToGroup(7, "missing./sel");
 perm.addToGroup(7, "perm");
 perm.addToGroup(7, "perm.toggle");
+perm.addToGroup(7, "potion");
 perm.addToGroup(7, "setmessage");
 perm.addToGroup(7, "sign");
 perm.addToGroup(7, "speed");
@@ -297,6 +323,7 @@ perm.addToGroup(10, "perm");
 perm.addToGroup(10, "perm.toggle");
 perm.addToGroup(10, "ride");
 perm.addToGroup(10, "setmessage");
+perm.addToGroup(10, "tip");
 
 perm.addToGroup(11, "isSponsor");
 perm.addToGroup(11, "color");

+ 5 - 2
system/player_data.txt

@@ -4,14 +4,17 @@ 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");
+playerdata.loadAll("games_data");
+playerdata.loadAll("story_data");
 msg.string("dev", "§bPlayerdata §rloaded");
 
 function playerdata.loadAll(name) {
 	player_data_map = map.new();
 	setScriptVar(name, player_data_map);
 	dir = file.new(string.concat("scripts/configs/player_data/", name));
+	if(!file.exists(dir)) {
+		return;
+	}
 	list = file.getList(dir);
 	iter = list.iterator(list);
 	while(hasNext(iter)) {

+ 3 - 1
test6.txt

@@ -1 +1,3 @@
+world.load("games");
+world.load("creative");
+msg("dev", text.new("load"));

+ 1313 - 0
utils/u_cmdhelp.txt

@@ -0,0 +1,1313 @@
+function setCommandHelps() {
+	command.clearHelp();
+	command.clearIgnored();
+	command.clearNoPerm();
+	//Vanilla ignorieren, danach neu setzen
+	command.addIgnored("time");
+	command.addIgnored("tp");
+	command.addIgnored("help");
+	command.addIgnored("ban");
+	command.addIgnored("kick");
+	command.addIgnored("gamemode");
+	command.addIgnored("gamerule");
+	command.addIgnored("enchant");
+	command.addIgnored("jumpto");
+
+	command.addNoPerm("/br");
+	command.addNoPerm("/brush");
+	command.addNoPerm("/desel");
+	command.addNoPerm("/deselect");
+	command.addNoPerm("/sel");
+	command.addNoPerm("/toggleplace");
+	command.addNoPerm(";");
+	command.addNoPerm("brush");
+	command.addNoPerm("none");
+	command.addNoPerm("toggleplace");
+	command.addNoPerm("tool");
+	command.addNoPerm("br");
+	command.addNoPerm("icanhasbukkit");
+	command.addNoPerm("we");
+	command.addNoPerm("worldedit");
+	command.addNoPerm("worldedit:we");
+	command.addNoPerm("worldedit:worldedit");
+	command.addNoPerm("worldedit:/br");
+	command.addNoPerm("worldedit:/brush");
+	command.addNoPerm("worldedit:/desel");
+	command.addNoPerm("worldedit:/deselect");
+	command.addNoPerm("worldedit:/sel");
+	command.addNoPerm("worldedit:/toggleplace");
+	command.addNoPerm("worldedit:;");
+	command.addNoPerm("worldedit:brush");
+	command.addNoPerm("worldedit:none");
+	command.addNoPerm("worldedit:toggleplace");
+	command.addNoPerm("worldedit:tool");
+	command.addNoPerm("worldedit:br");
+	command.addNoPerm("worldedit:icanhasbukkit");
+	
+	commandhelp.add("afk");
+	commandhelp.add("back");
+	commandhelp.add("boost");
+	commandhelp.add("color");
+	commandhelp.add("colour");
+	commandhelp.add("customitems");
+	commandhelp.add("fuckit");
+	commandhelp.add("giveup");
+	commandhelp.add("hack");
+	commandhelp.add("hat");
+	commandhelp.add("head");
+	commandhelp.add("hub");
+	commandhelp.add("icon");
+	commandhelp.add("iteminfo");
+	commandhelp.add("jumpto");
+	commandhelp.add("l");
+	commandhelp.add("lag");
+	commandhelp.add("leave");
+	commandhelp.add("lightning");
+	commandhelp.add("live");
+	commandhelp.add("logo");
+	commandhelp.add("mem");
+	commandhelp.add("memory");
+	commandhelp.add("nowb");
+	commandhelp.add("ping");
+	commandhelp.add("ram");
+	commandhelp.add("rank");
+	commandhelp.add("repair");
+	commandhelp.add("report");
+	commandhelp.add("ride");
+	commandhelp.add("settings");
+	commandhelp.add("silentjoin");
+	commandhelp.add("skipnight");
+	commandhelp.add("skull");
+	commandhelp.add("startgame");
+	commandhelp.add("thor");
+	commandhelp.add("top");
+	commandhelp.add("vote");
+	commandhelp.add("voteshop");
+	
+	commandhelp.addChildPlayer("mute");
+	commandhelp.addChildPlayer("unmute");
+	commandhelp.addChildPlayer("tpa");
+	commandhelp.addChildPlayer("tpaccept");
+	commandhelp.addChildPlayer("tpahere");
+	commandhelp.addChildPlayer("tpaccepthere");
+	commandhelp.addChildPlayer("head");
+	commandhelp.addChildPlayer("seen");
+	commandhelp.addChildPlayer("heal");
+	commandhelp.addChildPlayer("feed");
+	
+	help = command.newHelp("start", "start");
+	command.addHelpChild(help, command.newHelpLiteral("ai"));
+	command.addHelpChild(help, command.newHelpLiteral("chat"));
+	command.addHelpChild(help, command.newHelpLiteral("commands"));
+	command.addHelpChild(help, command.newHelpLiteral("copyisland"));
+	command.addHelpChild(help, command.newHelpLiteral("creative"));
+	command.addHelpChild(help, command.newHelpLiteral("damage"));
+	command.addHelpChild(help, command.newHelpLiteral("doors"));
+	command.addHelpChild(help, command.newHelpLiteral("fixitems"));
+	command.addHelpChild(help, command.newHelpLiteral("gemstones"));
+	command.addHelpChild(help, command.newHelpLiteral("harvest"));
+	command.addHelpChild(help, command.newHelpLiteral("herobrine"));
+	command.addHelpChild(help, command.newHelpLiteral("humans"));
+	command.addHelpChild(help, command.newHelpLiteral("lectern"));
+	command.addHelpChild(help, command.newHelpLiteral("loom"));
+	command.addHelpChild(help, command.newHelpLiteral("games"));
+	command.addHelpChild(help, command.newHelpLiteral("mails"));
+	command.addHelpChild(help, command.newHelpLiteral("market"));
+	command.addHelpChild(help, command.newHelpLiteral("mobarena"));
+	command.addHelpChild(help, command.newHelpLiteral("perms"));
+	command.addHelpChild(help, command.newHelpLiteral("playerdata"));
+	command.addHelpChild(help, command.newHelpLiteral("playtime"));
+	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"));
+	command.addHelpChild(help, command.newHelpLiteral("stats"));
+	command.addHelpChild(help, command.newHelpLiteral("story"));
+	command.addHelpChild(help, command.newHelpLiteral("survival"));
+	command.addHelpChild(help, command.newHelpLiteral("ticket"));
+	command.addHelpChild(help, command.newHelpLiteral("timber"));
+	command.addHelpChild(help, command.newHelpLiteral("tiploop"));
+	command.addHelpChild(help, command.newHelpLiteral("trader"));
+	command.addHelp(help);
+
+	addGmHelp("gamemode");
+	addGmHelp("gm");
+	addAsHelp("armorstand");
+	addAsHelp("as");
+
+	help = command.newHelp("vanish", "vanish");
+	//vanish [on] [player]
+	helpArg0 = command.newHelpLiteral("on");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//vanish [off] [player]
+	helpArg0 = command.newHelpLiteral("off");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	commandhelp.addAlias("v", "vanish", helpArg0);
+	
+	help = command.newHelp("databank", "databank");
+	//databank showtables
+	command.addHelpChild(help, command.newHelpLiteral("showtables"));
+	//databank showfields <table>
+	helpArg0 = command.newHelpLiteral("showfields");
+	command.addHelpChild(helpArg0, command.newHelpString("table", false));
+	command.addHelpChild(help, helpArg0);
+	//databank showdataypes <table>
+	helpArg0 = command.newHelpLiteral("showdataypes");
+	command.addHelpChild(helpArg0, command.newHelpString("table", false));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("copyisland", "copyisland");
+	//copyisland copy/paste
+	command.addHelpChild(help, command.newHelpLiteral("copy"));
+	command.addHelpChild(help, command.newHelpLiteral("paste"));
+	//copyisland pos1/pos2
+	command.addHelpChild(help, command.newHelpLiteral("pos1"));
+	command.addHelpChild(help, command.newHelpLiteral("pos2"));
+	command.addHelp(help);
+	
+	help = command.newHelp("fly", "fly");
+	helpArg0 = command.newHelpSpecial("Player", "player", "fly.other");
+	command.addHelpChild(helpArg0, command.newHelpLiteral("on"));
+	command.addHelpChild(helpArg0, command.newHelpLiteral("off"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("enchant", "enchant");
+	helpArg0 = command.newHelpSpecial("Enchantment", "enchantment");
+	command.addHelpChild(helpArg0, command.newHelpInt("level", 0, 100));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("allsounds", "allsounds");
+	command.addHelpChild(help, command.newHelpLiteral("start"));
+	command.addHelpChild(help, command.newHelpLiteral("stop"));
+	command.addHelp(help);
+	
+	help = command.newHelp("spawn", "spawn");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "tp.other"));
+	command.addHelp(help);
+	
+	help = command.newHelp("games", "games");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "tp.other"));
+	command.addHelp(help);
+	
+	help = command.newHelp("creative", "creative");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "tp.other"));
+	command.addHelp(help);
+	
+	help = command.newHelp("ass", "ass");
+	//ass set <name>
+	helpArg0 = command.newHelpLiteral("set");
+	command.addHelpChild(helpArg0, command.newHelpString("name", true));
+	command.addHelpChild(help, helpArg0);
+	//ass name <name>
+	helpArg0 = command.newHelpLiteral("name");
+	command.addHelpChild(helpArg0, command.newHelpString("name", true));
+	command.addHelpChild(help, helpArg0);
+	//ass remove
+	command.addHelpChild(help, command.newHelpLiteral("remove"));
+	command.addHelp(help);
+	
+	help = command.newHelp("tppos", "tppos");
+	helpArg0 = command.newHelpInt("x", -32000, 32000);
+	helpArg1 = command.newHelpInt("y", 0, 1000);
+	helpArg2 = command.newHelpInt("z", -32000, 32000);
+	helpArg3 = command.newHelpString("world", false);
+	helpArg4 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg3, helpArg4);
+	command.addHelpChild(helpArg2, helpArg3);
+	command.addHelpChild(helpArg1, helpArg2);
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("stats", "stats");
+	addStatsGameHelp(help, "AmongUs");
+	addStatsGameHelp(help, "BedWars");
+	addStatsGameHelp(help, "RageMode");
+	addStatsGameHelp(help, "JR-Endless");
+	addStatsGameHelp(help, "Rebuild");
+	addStatsGameHelp(help, "FastBridge");
+	addStatsGameHelp(help, "Snowfight");
+	addStatsGameHelp(help, "JR-Death");
+	addStatsGameHelp(help, "JR-Ice");
+	addStatsGameHelp(help, "JR-Rooms");
+	addStatsGameHelp(help, "Letters");
+	addStatsGameHelp(help, "Sammelfieber");
+	addStatsGameHelp(help, "Buttons");
+	addStatsGameHelp(help, "HideAndSeek");
+	addStatsGameHelp(help, "Inverting");
+	addStatsGameHelp(help, "Spleef");
+	addStatsGameHelp(help, "Knockfight");
+	addStatsGameHelp(help, "Leapfrog");
+	addStatsGameHelp(help, "Parcour");
+	addStatsGameHelp(help, "Halma");
+	addStatsGameHelp(help, "ShoppingChaos");
+	addStatsGameHelp(help, "MengerRun");
+	command.addHelp(help);
+	
+	help = command.newHelp("setspawn", "setspawn");
+	command.addHelpChild(help, command.newHelpLiteral("server"));
+	command.addHelpChild(help, command.newHelpLiteral("games"));
+	command.addHelpChild(help, command.newHelpLiteral("creative"));
+	command.addHelp(help);
+	
+	addDtHelp("datatools");
+	addDtHelp("dt");
+	
+	help = command.newHelp("help", "help");
+	helpArg0 = command.newHelpInt("page", 1, 100);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	commandhelp.addAlias("mimimi", "help", helpArg0);
+	
+	help = command.newHelp("suicide", "suicide");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "suicide.other"));
+	command.addHelp(help);
+	
+	help = command.newHelp("tempfly", "tempfly");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpInt("seconds", 1, 10000));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("tempban", "tempban");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	helpArg1 = command.newHelpInt("days", 0, 100);
+	helpArg2 = command.newHelpInt("hours", 0, 100);
+	helpArg3 = command.newHelpInt("minutes", 0, 100);
+	command.addHelpChild(helpArg3, command.newHelpString("reason", true));
+	command.addHelpChild(helpArg2, helpArg3);
+	command.addHelpChild(helpArg1, helpArg2);
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("unban", "unban");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	commandhelp.addAlias("pardon", "unban", helpArg0);
+	
+	help = command.newHelp("ban", "ban");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("silentban", "silentban");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("kick", "kick");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("silentkick", "silentkick");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("answer", "answer");
+	helpArg0 = command.newHelpString("message", true);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	commandhelp.addAlias("r", "answer", helpArg0);
+	
+	help = command.newHelp("time", "time");
+	//time set <time>
+	helpArg0 = command.newHelpLiteral("set");
+	command.addHelpChild(helpArg0, command.newHelpInt("time", 0, 100000));
+	command.addHelpChild(help, helpArg0);
+	//time add <time>
+	helpArg0 = command.newHelpLiteral("add");
+	command.addHelpChild(helpArg0, command.newHelpInt("time", 0, 100000));
+	command.addHelpChild(help, helpArg0);
+	//time day / noon / night / midnight
+	command.addHelpChild(help, command.newHelpLiteral("day"));
+	command.addHelpChild(help, command.newHelpLiteral("noon"));
+	command.addHelpChild(help, command.newHelpLiteral("night"));
+	command.addHelpChild(help, command.newHelpLiteral("midnight"));
+	command.addHelp(help);
+	
+	help = command.newHelp("enderchest", "enderchest");
+	//enderchest [player] <from-player>
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpString("from-player", false));
+	command.addHelpChild(help, helpArg0);
+	//enderchest [player] <from-player>
+	command.addHelpChild(help, command.newHelpString("from-player", false));
+	command.addHelp(help);
+	
+	help = command.newHelp("nickname", "nickname");
+	command.addHelpChild(help, command.newHelpString("name", true));
+	command.addHelpChild(help, command.newHelpLiteral("remove"));
+	command.addHelp(help);
+	
+	help = command.newHelp("perm", "perm");
+	//perm give <player> <perm>
+	helpArg0 = command.newHelpLiteral("give", "perm.give");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpLiteral("owner", "isOwner"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("admin", "isAdmin"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("moderator", "isAdmin"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("supporter"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("builder"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("worldedit"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("vip"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("developer"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("devmaster"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("yt"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("streamer"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("sponsor"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("creative"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//perm remove <player> <perm>
+	helpArg0 = command.newHelpLiteral("remove", "perm.remove");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpLiteral("owner", "isOwner"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("admin", "isAdmin"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("moderator", "isAdmin"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("supporter"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("builder"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("worldedit"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("vip"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("developer"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("devmaster"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("yt"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("streamer"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("sponsor"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("creative"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//perm removeall <player>
+	helpArg0 = command.newHelpLiteral("removeall", "perm.removeall");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//perm list <player>
+	helpArg0 = command.newHelpLiteral("list", "perm.list");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//perm toggle
+	command.addHelpChild(help, command.newHelpLiteral("toggle", "perm.toggle"));
+	command.addHelp(help);
+	
+	addScriptHelp("s");
+	addScriptHelp("script");
+	addHomeHelp("home");
+	addHomeHelp("h");
+	
+	help = command.newHelp("block", "block");
+	//block info
+	command.addHelpChild(help, command.newHelpLiteral("info"));
+	//block public
+	command.addHelpChild(help, command.newHelpLiteral("public"));
+	//block remove
+	command.addHelpChild(help, command.newHelpLiteral("remove"));
+	command.addHelp(help);
+	
+	help = command.newHelp("plot", "plot");
+	//plot info
+	command.addHelpChild(help, command.newHelpLiteral("info"));
+	command.addHelpChild(help, command.newHelpLiteral("i"));
+	//plot pos1/pos2
+	command.addHelpChild(help, command.newHelpLiteral("pos1"));
+	command.addHelpChild(help, command.newHelpLiteral("pos2"));
+	//plot create/create3D
+	command.addHelpChild(help, command.newHelpLiteral("create"));
+	command.addHelpChild(help, command.newHelpLiteral("create3D"));
+	//plot remove
+	helpArg0 = command.newHelpLiteral("remove");
+	command.addHelpChild(helpArg0, command.newHelpInt("id", 0, 10000));
+	command.addHelpChild(help, helpArg0);
+	//plot name <name>
+	helpArg0 = command.newHelpLiteral("name");
+	command.addHelpChild(helpArg0, command.newHelpString("name", true));
+	helpArg1 = command.newHelpInt("id", 0, 10000);
+	command.addHelpChild(helpArg1, command.newHelpString("name", true));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//plot share <name>
+	helpArg0 = command.newHelpLiteral("share");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpInt("id", 0, 10000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//plot kick <name>
+	helpArg0 = command.newHelpLiteral("kick");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpInt("id", 0, 10000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//plot raise
+	command.addHelpChild(help, command.newHelpLiteral("raise"));
+	//plot leader <name>
+	helpArg0 = command.newHelpLiteral("leader");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpInt("id", 0, 10000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//plot mod <name>
+	helpArg0 = command.newHelpLiteral("mod");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpInt("id", 0, 10000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//plot chest <name>
+	helpArg0 = command.newHelpLiteral("chest");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpInt("id", 0, 10000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//plot sell <price>
+	helpArg0 = command.newHelpLiteral("sell");
+	command.addHelpChild(helpArg0, command.newHelpInt("price", 1, 10000));
+	command.addHelpChild(help, helpArg0);
+	//plot moreinfo
+	command.addHelpChild(help, command.newHelpLiteral("moreinfo", "plot.moreinfo"));
+	//plot listall
+	command.addHelpChild(help, command.newHelpLiteral("listall"));
+	//plot flags <int> <boolean>
+	helpArg0 = command.newHelpLiteral("flags");
+	helpArg1 = command.newHelpInt("int", 1, 1000);
+	command.addHelpChild(helpArg1, command.newHelpBool("boolean"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//plot expand <anzahl>
+	helpArg0 = command.newHelpLiteral("expand");
+	helpArg1 = command.newHelpInt("anzahl", 1, 1000);
+	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);
+	commandhelp.addAlias("p", "plot", helpArg0);
+	
+	help = command.newHelp("warp", "warp");
+	//warp set [group] <name>
+	helpArg0 = command.newHelpLiteral("set", "warp.create");
+	command.addHelpChild(helpArg0, command.newHelpString("name", false, "warp.create"));
+	helpArg1 = command.newHelpString("group", false, "warp.create");
+	command.addHelpChild(helpArg1, command.newHelpString("name", false, "warp.create"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//warp delete [group] <name>
+	helpArg0 = command.newHelpLiteral("delete", "warp.create");
+	command.addHelpChild(helpArg0, command.newHelpString("name", false, "warp.create"));
+	helpArg1 = command.newHelpString("group", false, "warp.create");
+	command.addHelpChild(helpArg1, command.newHelpString("name", false, "warp.create"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//warp groups
+	command.addHelpChild(help, command.newHelpLiteral("groups", "warp.create"));
+	//warp list [group]
+	helpArg0 = command.newHelpLiteral("list");
+	command.addHelpChild(helpArg0, command.newHelpString("group", false, "warp.create"));
+	command.addHelpChild(help, helpArg0);
+	//warp [group] <name>
+	helpArg0 = command.newHelpString("name", false);
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpString("group", false, "warp.create");
+	command.addHelpChild(helpArg0, command.newHelpString("name", false));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("tp", "tp");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "to-player", "tp.other"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("lastseen", "lastseen");
+	command.addHelpChild(help, command.newHelpInt("amount", 1, 100));
+	command.addHelp(help);
+	
+	help = command.newHelp("human", "human");
+	//human spawn
+	helpArg0 = command.newHelpLiteral("spawn");
+	command.addHelpChild(helpArg0, command.newHelpString("name", true));
+	command.addHelpChild(help, helpArg0);
+	//human set <name>
+	helpArg0 = command.newHelpLiteral("set");
+	command.addHelpChild(helpArg0, command.newHelpString("name", false));
+	command.addHelpChild(help, helpArg0);
+	//human skin <name>
+	helpArg0 = command.newHelpLiteral("skin");
+	command.addHelpChild(helpArg0, command.newHelpString("name", false));
+	command.addHelpChild(help, helpArg0);
+	//human name
+	helpArg0 = command.newHelpLiteral("name");
+	command.addHelpChild(helpArg0, command.newHelpString("name", true));
+	command.addHelpChild(help, helpArg0);
+	//human kill
+	command.addHelpChild(help, command.newHelpLiteral("remove"));
+	command.addHelp(help);
+	
+	help = command.newHelp("mail", "mail");
+	//mail <player> <message>
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	//mail new
+	command.addHelpChild(help, command.newHelpLiteral("new"));
+	//mail inbox
+	command.addHelpChild(help, command.newHelpLiteral("inbox"));
+	//mail outbox
+	command.addHelpChild(help, command.newHelpLiteral("outbox"));
+	//mail reset
+	command.addHelpChild(help, command.newHelpLiteral("reset", "mail.reset"));
+	command.addHelp(help);
+	
+	help = command.newHelp("entities", "entities");
+	command.addHelpChild(help, command.newHelpString("world", false));
+	command.addHelp(help);
+	
+	help = command.newHelp("playtime", "playtime");
+	//playtime [player]
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player"));
+	//playtime all
+	command.addHelpChild(help, command.newHelpLiteral("all"));
+	//playtime month [1-12] [year]
+	helpArg0 = command.newHelpLiteral("month");
+	helpArg1 = command.newHelpInt("int", 1, 12);
+	command.addHelpChild(helpArg1, command.newHelpInt("year", 2019, 2024));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//playtime year [year]
+	helpArg0 = command.newHelpLiteral("year");
+	command.addHelpChild(helpArg0, command.newHelpInt("year", 2019, 2024));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("user", "user");
+	//user info <player>
+	helpArg0 = command.newHelpLiteral("info");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "user.other"));
+	command.addHelpChild(help, helpArg0);
+	//user addmoney <player> <money>
+	helpArg0 = command.newHelpLiteral("addmoney", "user.money");
+	helpArg1 = command.newHelpSpecial("Player", "player", "user.money");
+	command.addHelpChild(helpArg1, command.newHelpInt("money", -10000000, 10000000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//user setmoney <player> <money>
+	helpArg0 = command.newHelpLiteral("setmoney", "user.money");
+	helpArg1 = command.newHelpSpecial("Player", "player", "user.money");
+	command.addHelpChild(helpArg1, command.newHelpInt("money", -10000000, 10000000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("skills", "skills");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "user.other"));
+	command.addHelp(help);
+	
+	help = command.newHelp("grow", "grow");
+	command.addHelpChild(help, command.newHelpInt("int", 0, 1000));
+	command.addHelp(help);
+	
+	help = command.newHelp("news", "news");
+	command.addHelpChild(help, command.newHelpString("text", true));
+	command.addHelp(help);
+	
+	help = command.newHelp("inv", "inv");
+	//inv ignore
+	command.addHelpChild(help, command.newHelpLiteral("ignore"));
+	//inv see <player>
+	helpArg0 = command.newHelpLiteral("see");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//inv reload <player>
+	helpArg0 = command.newHelpLiteral("reload");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//inv loadFrom <player> <world>
+	helpArg0 = command.newHelpLiteral("loadFrom");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpString("world", false));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//inv saveFor <player> <world>
+	helpArg0 = command.newHelpLiteral("saveFor");
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpString("world", false));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("warn", "warn");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player"));
+	command.addHelp(help);
+	
+	help = command.newHelp("jail", "jail");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player"));
+	command.addHelp(help);
+	
+	help = command.newHelp("unjail", "unjail");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player"));
+	command.addHelp(help);
+	
+	help = command.newHelp("friend", "friend");
+	//friend add <player>
+	helpArg0 = command.newHelpLiteral("add");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//friend remove <player>
+	helpArg0 = command.newHelpLiteral("remove");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//friend list
+	command.addHelpChild(help, command.newHelpLiteral("list"));
+	command.addHelp(help);
+	
+	help = command.newHelp("sign", "sign");
+	helpArg0 = command.newHelpInt("1-4", 1, 4);
+	command.addHelpChild(helpArg0, command.newHelpString("text", true));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("speed", "speed");
+	helpArg0 = command.newHelpInt("int", 1, 10);
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "speed.other"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("errordebug", "errordebug");
+	command.addHelpChild(help, command.newHelpLiteral("list"));
+	command.addHelpChild(help, command.newHelpLiteral("clear"));
+	command.addHelp(help);
+	
+	help = command.newHelp("error", "error");
+	command.addHelpChild(help, command.newHelpLiteral("list"));
+	command.addHelpChild(help, command.newHelpLiteral("clear"));
+	command.addHelp(help);
+	
+	help = command.newHelp("mailbox", "mailbox");
+	//mailbox show <player>
+	helpArg0 = command.newHelpLiteral("show");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "mailbox.other"));
+	command.addHelpChild(help, helpArg0);
+	//mailbox send <player>
+	helpArg0 = command.newHelpLiteral("send");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("world", "world");
+	//world info
+	command.addHelpChild(help, command.newHelpLiteral("info"));
+	//world tp <world> [player]
+	helpArg0 = command.newHelpLiteral("tp");
+	helpArg1 = command.newHelpString("world", false);
+	command.addHelpChild(helpArg1, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//world list
+	command.addHelpChild(help, command.newHelpLiteral("list"));
+	//world diffi <world> <diffi>
+	helpArg0 = command.newHelpLiteral("diffi");
+	helpArg1 = command.newHelpString("world", false);
+	command.addHelpChild(helpArg1, command.newHelpLiteral("PEACEFUL"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("EASY"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("NORMAL"));
+	command.addHelpChild(helpArg1, command.newHelpLiteral("HARD"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//world setspawn
+	helpArg0 = command.newHelpLiteral("setspawn");
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("quest", "quest");
+	//quest see
+	command.addHelpChild(help, command.newHelpLiteral("see"));
+	//quest term <player>
+	helpArg0 = command.newHelpLiteral("term");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("pvp", "pvp");
+	helpArg0 = command.newHelpLiteral("on");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "pvp.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("off");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "pvp.other"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("game", "game");
+	command.addHelpChild(help, command.newHelpLiteral("open"));
+	command.addHelpChild(help, command.newHelpLiteral("close"));
+	command.addHelp(help);
+	
+	help = command.newHelp("party", "party");
+	//party invite <player>
+	helpArg0 = command.newHelpLiteral("invite");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//party accept <player>
+	helpArg0 = command.newHelpLiteral("accept");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//party deny <player>
+	helpArg0 = command.newHelpLiteral("deny");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//party kick <player>
+	helpArg0 = command.newHelpLiteral("kick");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//party leave
+	command.addHelpChild(help, command.newHelpLiteral("leave"));
+	//party promote <player>
+	helpArg0 = command.newHelpLiteral("promote");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//party demote <player>
+	helpArg0 = command.newHelpLiteral("demote");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//party disband
+	command.addHelpChild(help, command.newHelpLiteral("disband"));
+	//party list
+	command.addHelpChild(help, command.newHelpLiteral("list"));
+	command.addHelp(help);
+	
+	help = command.newHelp("var", "var");
+	helpArg0 = command.newHelpInt("id", 0, 1000000);
+	command.addHelpChild(helpArg0, command.newHelpString("varname", false));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("msg", "msg");
+	helpArg0 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("setservermessage", "setservermessage");
+	command.addHelpChild(help, command.newHelpString("message", true));
+	command.addHelp(help);
+	
+	help = command.newHelp("gamerule", "gamerule");
+	addGameRuleBoolean(help, "announceAdvancements");
+	addGameRuleBoolean(help, "commandBlockOutput");
+	addGameRuleBoolean(help, "disableElytraMovementCheck");
+	addGameRuleBoolean(help, "disableRaids");
+	addGameRuleBoolean(help, "doDaylightCycle");
+	addGameRuleBoolean(help, "doEntityDrops");
+	addGameRuleBoolean(help, "doFireTick");
+	addGameRuleBoolean(help, "doInsomnia");
+	addGameRuleBoolean(help, "doImmediateRespawn");
+	addGameRuleBoolean(help, "doLimitedCrafting");
+	addGameRuleBoolean(help, "doMobLoot");
+	addGameRuleBoolean(help, "doMobSpawning");
+	addGameRuleBoolean(help, "doPatrolSpawning");
+	addGameRuleBoolean(help, "doTileDrops");
+	addGameRuleBoolean(help, "doTraderSpawning");
+	addGameRuleBoolean(help, "doWeatherCycle");
+	addGameRuleBoolean(help, "drowningDamage");
+	addGameRuleBoolean(help, "fallDamage");
+	addGameRuleBoolean(help, "fireDamage");
+	addGameRuleBoolean(help, "forgiveDeadPlayers");
+	addGameRuleBoolean(help, "freezeDamage");
+	addGameRuleBoolean(help, "keepInventory");
+	addGameRuleBoolean(help, "logAdminCommands");
+	addGameRuleInt(help, "maxCommandChainLength", 0, 100000);
+	addGameRuleInt(help, "maxEntityCramming", 0, 100);
+	addGameRuleBoolean(help, "mobGriefing");
+	addGameRuleInt(help, "playersSleepingPercentage", 0, 100);
+	addGameRuleInt(help, "randomTickSpeed", 0, 4096);
+	addGameRuleBoolean(help, "reducedDebugInfo");
+	addGameRuleBoolean(help, "respawnBlocksExplode");
+	addGameRuleBoolean(help, "sendCommandFeedback");
+	addGameRuleBoolean(help, "showDeathMessages");
+	addGameRuleBoolean(help, "spawnRadius");
+	addGameRuleBoolean(help, "spectatorsGenerateChunks");
+	addGameRuleBoolean(help, "universalAnger");
+	command.addHelp(help);
+	
+	help = command.newHelp("potion", "potion");
+	helpArg1 = command.newHelpInt("duration", 0, 10000);
+	command.addHelpChild(helpArg1, command.newHelpInt("power", 0, 50));
+	list = getPotionTypes();
+	iter = iterator(list);
+	while(hasNext(iter)) {
+		potion_name = next(iter);
+		addPotionName(help, helpArg1, potion_name);
+	}
+	command.addHelp(help);
+	
+	help = command.newHelp("clan", "clan");
+	//clan invite <name>
+	helpArg0 = command.newHelpLiteral("invite");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//clan accept <id/name/tag>
+	helpArg0 = command.newHelpLiteral("invite");
+	command.addHelpChild(helpArg0, command.newHelpInt("id", 1, 500));
+	command.addHelpChild(helpArg0, command.newHelpString("name", false));
+	command.addHelpChild(helpArg0, command.newHelpString("tag", false));
+	command.addHelpChild(help, helpArg0);
+	//clan info [id/name/tag]
+	helpArg0 = command.newHelpLiteral("info");
+	command.addHelpChild(helpArg0, command.newHelpInt("id", 1, 500));
+	command.addHelpChild(helpArg0, command.newHelpString("name", false));
+	command.addHelpChild(helpArg0, command.newHelpString("tag", false));
+	command.addHelpChild(help, helpArg0);
+	//clan create <name> <tag>
+	helpArg0 = command.newHelpLiteral("create");
+	helpArg1 = command.newHelpString("name", false);
+	command.addHelpChild(helpArg1, command.newHelpString("false", false));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//clan kick <name>
+	helpArg0 = command.newHelpLiteral("kick");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//clan leader <name>
+	helpArg0 = command.newHelpLiteral("leader");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//clan mod <name>
+	helpArg0 = command.newHelpLiteral("mod");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//clan degrade <name>
+	helpArg0 = command.newHelpLiteral("degrade");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//clan leave
+	command.addHelpChild(help, command.newHelpLiteral("leave"));
+	//clan rename <name> <tag>
+	helpArg0 = command.newHelpLiteral("rename");
+	helpArg1 = command.newHelpString("name", false);
+	command.addHelpChild(helpArg1, command.newHelpString("false", false));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//clan disband
+	command.addHelpChild(help, command.newHelpLiteral("disband"));
+	//clan msg <message>
+	helpArg0 = command.newHelpLiteral("msg");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	//clan mail <message>
+	helpArg0 = command.newHelpLiteral("mail");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	//clan shout <message>
+	helpArg0 = command.newHelpLiteral("shout");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	//clan deposit <money>
+	helpArg0 = command.newHelpLiteral("deposit");
+	command.addHelpChild(helpArg0, command.newHelpInt("money", 0, 1000));
+	command.addHelpChild(help, helpArg0);
+	//clan withdraw <money>
+	helpArg0 = command.newHelpLiteral("withdraw");
+	command.addHelpChild(helpArg0, command.newHelpInt("money", 0, 1000));
+	command.addHelpChild(help, helpArg0);
+	//clan party
+	command.addHelpChild(help, command.newHelpLiteral("party"));
+	//clan setspawn
+	command.addHelpChild(help, command.newHelpLiteral("setspawn"));
+	//clan spawn
+	command.addHelpChild(help, command.newHelpLiteral("spawn"));
+	//clan list
+	command.addHelpChild(help, command.newHelpLiteral("list"));
+	command.addHelp(help);
+	
+	help = command.newHelp("shop", "shop");
+	//shop create
+	command.addHelpChild(help, command.newHelpLiteral("create"));
+	//shop remove
+	helpArg0 = command.newHelpLiteral("remove");
+	command.addHelpChild(helpArg0, command.newHelpLiteral("buy"));
+	command.addHelpChild(helpArg0, command.newHelpLiteral("sell"));
+	command.addHelpChild(help, helpArg0);
+	//shop buy <amount> <price>
+	helpArg0 = command.newHelpLiteral("buy");
+	helpArg1 = command.newHelpInt("amount", 0, 1000);
+	command.addHelpChild(helpArg1, command.newHelpInt("price", 0, 10000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//shop sell <amount> <price>
+	helpArg0 = command.newHelpLiteral("sell");
+	helpArg1 = command.newHelpInt("amount", 0, 1000);
+	command.addHelpChild(helpArg1, command.newHelpInt("price", 0, 10000));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("setmessage", "setmessage");
+	//setmessage info
+	command.addHelpChild(help, command.newHelpLiteral("info"));
+	//setmessage join <message>
+	helpArg0 = command.newHelpLiteral("join");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	//setmessage leave <message>
+	helpArg0 = command.newHelpLiteral("leave");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	//setmessage delete <player>
+	helpArg0 = command.newHelpLiteral("delete");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "setmessage.delete"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("tip", "tip");
+	//tipp list
+	helpArg0 = command.newHelpLiteral("list");
+	command.addHelpChild(help, helpArg0);
+	//tipp add <tipp> <text>
+	helpArg0 = command.newHelpLiteral("add");
+	helpArg1 = command.newHelpString("tip", false);
+	command.addHelpChild(helpArg1, command.newHelpString("text", true));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//tipp remove <tipp>
+	helpArg0 = command.newHelpLiteral("remove");
+	command.addHelpChild(helpArg0, command.newHelpString("tip", false));
+	command.addHelpChild(help, helpArg0);
+	//tipp <tipp> [player]
+	helpArg0 = command.newHelpString("tip", false);
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player"));
+	command.addHelpChild(help, helpArg0);
+	//tipp loop <tip> <boolean>
+	helpArg0 = command.newHelpLiteral("loop");
+	helpArg1 = command.newHelpString("tip", false);
+	command.addHelpChild(helpArg1, command.newHelpBool("boolean"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("ticket", "ticket");
+	//ticket new <message>
+	helpArg0 = command.newHelpLiteral("new");
+	command.addHelpChild(helpArg0, command.newHelpString("message", true));
+	command.addHelpChild(help, helpArg0);
+	//ticket stop <ticket-id>
+	helpArg0 = command.newHelpLiteral("stop");
+	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000));
+	command.addHelpChild(help, helpArg0);
+	//ticket list
+	command.addHelpChild(help, command.newHelpLiteral("list", "isSupporter"));
+	//ticket get [ticket-id]
+	helpArg0 = command.newHelpLiteral("get");
+	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000, "isSupporter"));
+	command.addHelpChild(help, helpArg0);
+	//ticket finish <ticket-id>
+	helpArg0 = command.newHelpLiteral("finish");
+	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000, "isSupporter"));
+	command.addHelpChild(help, helpArg0);
+	//ticket release <ticket-id>
+	helpArg0 = command.newHelpLiteral("release");
+	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000, "isSupporter"));
+	command.addHelpChild(help, helpArg0);
+	//ticket report <ticket-id>
+	helpArg0 = command.newHelpLiteral("report");
+	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000, "isSupporter"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+	
+	help = command.newHelp("yeet", "yeet");
+	command.addHelpChild(help, command.newHelpInt("strength", 1, 10000000000000));
+	command.addHelp(help);
+	
+	command.sendHelp();
+}
+
+function addPotionName(help, helpArg1, potion_name) {
+	helpArg0 = command.newHelpLiteral(potion_name);
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+}
+	
+function addGameRuleBoolean(help, gamerule) {
+	helpArg0 = command.newHelpLiteral(gamerule);
+	command.addHelpChild(helpArg0, command.newHelpBool("boolean"));
+	command.addHelpChild(help, helpArg0);
+}
+
+function addGameRuleInt(help, gamerule, from, to) {
+	helpArg0 = command.newHelpLiteral(gamerule);
+	command.addHelpChild(helpArg0, command.newHelpInt("value", from, to));
+	command.addHelpChild(help, helpArg0);
+}
+
+function commandhelp.add(command) {
+	help = command.newHelp(command, command);
+	command.addHelp(help);
+	return help;
+}
+
+function commandhelp.addChildString(command, arg0, bool) {
+	help = command.newHelp(command, command);
+	command.addHelpChild(help, command.newHelpString(arg0, bool));
+	command.addHelp(help);
+}
+
+function commandhelp.addChildPlayer(command) {
+	help = command.newHelp(command, command);
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player"));
+	command.addHelp(help);
+}
+
+function commandhelp.addChildBool(command, arg0) {
+	help = command.newHelp(command, command);
+	command.addHelpChild(help, command.newHelpBool(arg0));
+	command.addHelp(help);
+}
+
+function commandhelp.addAlias(alias, command, helpArg0) {
+	help = command.newHelp(alias, command);
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+}
+
+function addScriptHelp(command) {
+	help = command.newHelp(command, "script");
+	//script start <scripts>
+	helpArg0 = command.newHelpLiteral("start");
+	command.addHelpChild(helpArg0, command.newHelpString("scrips...", true));
+	command.addHelpChild(help, helpArg0);
+	//script s <scripts>
+	helpArg0 = command.newHelpLiteral("s");
+	command.addHelpChild(helpArg0, command.newHelpString("scrips...", true));
+	command.addHelpChild(help, helpArg0);
+	//script see
+	command.addHelpChild(help, command.newHelpLiteral("see"));
+	//script term
+	helpArg0 = command.newHelpLiteral("term");
+	command.addHelpChild(helpArg0, command.newHelpLiteral("all"));
+	command.addHelpChild(helpArg0, command.newHelpInt("id", 0, 1000000));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+}
+
+function addHomeHelp(command) {
+	help = command.newHelp(command, "home");
+	//home set
+	helpArg0 = command.newHelpLiteral("set");
+	command.addHelpChild(helpArg0, command.newHelpString("name", false));
+	command.addHelpChild(help, helpArg0);
+	//home delete
+	helpArg0 = command.newHelpLiteral("delete");
+	command.addHelpChild(helpArg0, command.newHelpString("name", false));
+	command.addHelpChild(help, helpArg0);
+	//home list
+	helpArg0 = command.newHelpLiteral("list");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "home.other"));
+	command.addHelpChild(help, helpArg0);
+	//home <name>
+	helpArg0 = command.newHelpString("name", false);
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "home.other"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+}
+
+function addStatsGameHelp(help, game) {
+	helpArg0 = command.newHelpLiteral(game);
+	command.addHelpChild(helpArg0, command.newHelpLiteral("top"));
+	command.addHelpChild(helpArg0, command.newHelpInt("rank", 1, 1000));
+	helpArg1 = command.newHelpSpecial("Player", "player");
+	command.addHelpChild(helpArg1, command.newHelpLiteral("remove", "stats.remove"));
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+}
+
+function addAsHelp(command) {
+	help = command.newHelp(command, "armorstand");
+	//as name <name>
+	helpArg0 = command.newHelpLiteral("name");
+	command.addHelpChild(helpArg0, command.newHelpString("name", true));
+	command.addHelpChild(help, helpArg0);
+	//as visible <true/false>3
+	addAsBoolHelp(help, "visible");
+	//as arms <true/false>
+	addAsBoolHelp(help, "arms");
+	//as small <true/false>
+	addAsBoolHelp(help, "small");
+	//as baseplate <true/false>
+	addAsBoolHelp(help, "baseplate");
+	//as marker <true/false>
+	addAsBoolHelp(help, "marker");
+	//as move <true/false>
+	addAsBoolHelp(help, "move");
+	//as tick <true/false>
+	addAsBoolHelp(help, "tick");
+	//as setpose <bodypart> <x> <y> <z>
+	helpArg0 = command.newHelpLiteral("setpose");
+	helpArg2 = command.newHelpInt("x", -360, 360);
+	helpArg3 = command.newHelpInt("y", -360, 360);
+	helpArg4 = command.newHelpInt("z", -360, 360);
+	command.addHelpChild(helpArg3, helpArg4);
+	command.addHelpChild(helpArg2, helpArg3);
+	addAsBodypartHelp(help, helpArg0, helpArg2, "head");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "body");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "leftarm");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "rightarm");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "leftleg");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "rightleg");
+	//as addpose <bodypart> <x> <y> <z>
+	helpArg0 = command.newHelpLiteral("addpose");
+	helpArg2 = command.newHelpInt("x", -360, 360);
+	helpArg3 = command.newHelpInt("y", -360, 360);
+	helpArg4 = command.newHelpInt("z", -360, 360);
+	command.addHelpChild(helpArg3, helpArg4);
+	command.addHelpChild(helpArg2, helpArg3);
+	addAsBodypartHelp(help, helpArg0, helpArg2, "head");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "body");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "leftarm");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "rightarm");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "leftleg");
+	addAsBodypartHelp(help, helpArg0, helpArg2, "rightleg");
+	command.addHelp(help);
+}
+
+function addAsBoolHelp(help, subcommand) {
+	helpArg0 = command.newHelpLiteral(subcommand);
+	command.addHelpChild(helpArg0, command.newHelpBool("boolean"));
+	command.addHelpChild(help, helpArg0);
+}
+
+function addAsBodypartHelp(help, helpArg0, helpArg2, bodypart) {
+	helpArg1 = command.newHelpLiteral(bodypart);
+	command.addHelpChild(helpArg1, helpArg2);
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+}
+
+function addGmHelp(command) {
+	help = command.newHelp(command, "gamemode");
+	helpArg0 = command.newHelpLiteral("adventure");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("creative");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("spectator");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("survival");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("a");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("c");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("w");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpLiteral("s");
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	helpArg0 = command.newHelpInt("0-3", 0, 3);
+	command.addHelpChild(helpArg0, command.newHelpSpecial("Player", "player", "gamemode.other"));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+}
+
+function addDtHelp(command) {
+	help = command.newHelp(command, "datatools");
+	//datatools item-flag <name>
+	helpArg0 = command.newHelpLiteral("item-flag");
+	item_flags = getItemFlags();
+	iter = iterator(item_flags);
+	while(hasNext(iter)) {
+		command.addHelpChild(helpArg0, command.newHelpLiteral(next(iter)));
+	}
+	command.addHelpChild(help, helpArg0);
+	//datatools item-attribute <attribute> <slot> <double> <op>
+	helpArg0 = command.newHelpLiteral("item-attribute");
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_ARMOR"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_ARMOR_TOUGHNESS"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_ATTACK_DAMAGE"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_ATTACK_KNOCKBACK"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_ATTACK_SPEED"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_FLYING_SPEED"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_FOLLOW_RANGE"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_KNOCKBACK_RESISTANCE"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_LUCK"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_MAX_HEALTH"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("GENERIC_MOVEMENT_SPEED"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("HORSE_JUMP_STRENGTH"));
+	command.addHelpChild(helpArg0, addDtAttributeAttributHelp("ZOMBIE_SPAWN_REINFORCEMENTS"));
+	command.addHelpChild(help, helpArg0);
+	//datatools entity-hide
+	command.addHelpChild(help, command.newHelpLiteral("entity-hide"));
+	//datatools entity-show
+	command.addHelpChild(help, command.newHelpLiteral("entity-show"));
+	//datatools frame-hide
+	command.addHelpChild(help, command.newHelpLiteral("frame-hide"));
+	//datatools frame-show
+	command.addHelpChild(help, command.newHelpLiteral("frame-show"));
+	//datatools entity-name <name>
+	helpArg0 = command.newHelpLiteral("entity-name");
+	helpArg1 = command.newHelpString("name", true);
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//datatools name-visibility <name>
+	helpArg0 = command.newHelpLiteral("name-visibility");
+	command.addHelpChild(helpArg0, command.newHelpBool("boolean"));
+	command.addHelpChild(help, helpArg0);
+	//datatools item-name <name>
+	helpArg0 = command.newHelpLiteral("item-name");
+	helpArg1 = command.newHelpString("name", true);
+	command.addHelpChild(helpArg0, helpArg1);
+	command.addHelpChild(help, helpArg0);
+	//datatools entity-print
+	command.addHelpChild(help, command.newHelpLiteral("entity-print"));
+	//datatools item-lore <line> <lore>
+	helpArg0 = command.newHelpLiteral("item-lore");
+	command.addHelpChild(helpArg0, command.newHelpString("lore", true));
+	command.addHelpChild(help, helpArg0);
+	command.addHelp(help);
+}
+
+function addDtAttributeAttributHelp(attribut) {
+	helpArg1 = command.newHelpLiteral(attribut);
+	command.addHelpChild(helpArg1, addDtAttributeSlotHelp("HAND"));
+	command.addHelpChild(helpArg1, addDtAttributeSlotHelp("OFF_HAND"));
+	command.addHelpChild(helpArg1, addDtAttributeSlotHelp("HEAD"));
+	command.addHelpChild(helpArg1, addDtAttributeSlotHelp("CHEST"));
+	command.addHelpChild(helpArg1, addDtAttributeSlotHelp("LEGS"));
+	command.addHelpChild(helpArg1, addDtAttributeSlotHelp("FEET"));
+	return helpArg1;
+}
+
+function addDtAttributeSlotHelp(slot) {
+	helpArg2 = command.newHelpLiteral(slot);
+	helpArg3 = command.newHelpInt("double", 0, 1000);
+	command.addHelpChild(helpArg3, command.newHelpLiteral("ADD_NUMBER"));
+	command.addHelpChild(helpArg3, command.newHelpLiteral("ADD_SCALAR"));
+	command.addHelpChild(helpArg3, command.newHelpLiteral("MULTIPLY_SCALAR_1"));
+	command.addHelpChild(helpArg2, helpArg3);
+	return helpArg2;
+}

+ 73 - 0
utils/u_commands.txt

@@ -127,4 +127,77 @@ function getRickRollSoundDists() {
 	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
 	return RickRollSoundDists;
+}
+
+function getBobbyCarSounds() {
+	bobbyCarSounds = list.new();
+	list.add(bobbyCarSounds, math.pow(2, 4 / 12));
+	list.add(bobbyCarSounds, math.pow(2, 2 / 12));
+	list.add(bobbyCarSounds, math.pow(2, 1 / 12));
+	list.add(bobbyCarSounds, math.pow(2, 4 / 12));
+	list.add(bobbyCarSounds, math.pow(2, -3 / 12));
+	list.add(bobbyCarSounds, math.pow(2, 1 / 12));
+	list.add(bobbyCarSounds, math.pow(2, -1 / 12));
+	list.add(bobbyCarSounds, math.pow(2, 2 / 12));
+	list.add(bobbyCarSounds, math.pow(2, -4 / 12));
+	list.add(bobbyCarSounds, math.pow(2, -1 / 12));
+	list.add(bobbyCarSounds, math.pow(2, -3 / 12));
+	list.add(bobbyCarSounds, math.pow(2, -1 / 12));
+	list.add(bobbyCarSounds, math.pow(2, 1 / 12));
+	return bobbyCarSounds;
+}
+
+function getBobbyCarSoundDists() {
+	bobbyCarSoundDists = list.new();
+	list.add(bobbyCarSoundDists, 8);
+	list.add(bobbyCarSoundDists, 8);
+	list.add(bobbyCarSoundDists, 4);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 4);
+	list.add(bobbyCarSoundDists, 6);
+	list.add(bobbyCarSoundDists, 6);
+	return bobbyCarSoundDists;
+}
+
+function getPotionTypes() {
+	list = list.new();
+	list.add(list, "ABSORPTION");
+	list.add(list, "BAD_OMEN");
+	list.add(list, "BLINDNESS");
+	list.add(list, "CONDUIT_POWER");
+	list.add(list, "CONFUSION");
+	list.add(list, "DAMAGE_RESISTANCE");
+	list.add(list, "DOLPHINS_GRACE");
+	list.add(list, "FAST_DIGGING");
+	list.add(list, "FIRE_RESISTANCE");
+	list.add(list, "GLOWING");
+	list.add(list, "HARM");
+	list.add(list, "HEAL");
+	list.add(list, "HEALTH_BOOST");
+	list.add(list, "HERO_OF_THE_VILLAGE");
+	list.add(list, "HUNGER");
+	list.add(list, "INCREASE_DAMAGE");
+	list.add(list, "INVISIBILITY");
+	list.add(list, "JUMP");
+	list.add(list, "LEVITATION");
+	list.add(list, "LUCK");
+	list.add(list, "NIGHT_VISION");
+	list.add(list, "POISON");
+	list.add(list, "REGENERATION");
+	list.add(list, "SATURATION");
+	list.add(list, "SLOW");
+	list.add(list, "SLOW_DIGGING");
+	list.add(list, "SLOW_FALLING");
+	list.add(list, "SPEED");
+	list.add(list, "UNLUCK");
+	list.add(list, "WATER_BREATHING");
+	list.add(list, "WEAKNESS");
+	list.add(list, "WITHER");
+	return list;
 }

+ 67 - 11
utils/u_general.txt

@@ -283,7 +283,6 @@ function isSameDay(timestamp_1, timestamp_2) {
 }
 
 function player.hasMinigame(player) {
-	return false;
 	id_set = player.getMinigameIds(player);
 	if(set.getSize(id_set) > 0)  {
 		return true;
@@ -395,7 +394,7 @@ function world.getGamesSpawn() {
 }
 
 function world.getCreativeSpawn() {
-	return read.location(config.getString(getServerConfig(), "creative", "world:0:0:0"));
+	return read.location(config.getString(getServerConfig(), "creativespawn", "world:0:0:0"));
 }
 
 function world.getOverWorld() {
@@ -604,7 +603,11 @@ function inv.loadFromPlayer(sec_player, from_player_or_id, world) {
 	
 	//Allgemeine Daten
 	if(from_player_or_id == player.getId(sec_player)) {
-		living.setHealth(sec_player, config.getDouble(config, "health", 20));
+		health = config.getDouble(config, "health", 20);
+		if(health > 20) {
+			health = 20;
+		}
+		living.setHealth(sec_player, health);
 		player.setHunger(sec_player, config.getDouble(config, "hunger", 20));
 		player.setSaturation(sec_player, config.getDouble(config, "saturation", 5));
 		player.setExp(sec_player, config.getDouble(config, "xp", 0));
@@ -1388,8 +1391,8 @@ function player.teleport(player, location, setBackPos) {
 	world_change = player.checkForWorldChange(player, location);
 	if(world_change) {
 		//Inventory
-		//player.changeInv(player, from_world, to_world);
-		//entity.clearEffects(player);
+		player.changeInv(player, from_world, to_world);
+		living.clearEffects(player);
 		//Party
 		if(player.isInParty(player) && player.isPartyLeader(player)) {
 			party_id = player.getPartyId(player);
@@ -1522,6 +1525,10 @@ function player.getValid(player_or_id) {
 //Msg-Utils
 //--------------------------------------------------
 
+function msg.action(receiver, string) {
+	player.action(receiver, text.new(string));
+}
+
 function msg.string(receiver, string) {
 	msg(receiver, text.new(string));
 }
@@ -1736,6 +1743,13 @@ function entity.isHuman(entity) {
 	return entity.getType(entity) == "human";
 }
 
+function entity.isArmorstand(entity) {
+	if(entity == null) {
+		return false;
+	}
+	return entity.getType(entity) == "armor_stand";
+}
+
 //--------------------------------------------------
 //Player-Utils
 //--------------------------------------------------
@@ -1821,6 +1835,17 @@ function player.setLeaveMessage(player_or_id, message) {
 	config.saveAsync(config);
 }
 
+function player.setLoggedIp(player_or_id, ip) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "ip", ip);
+	config.saveAsync(config);
+}
+
+function player.getLoggedIp(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getString(config, "ip", "-");
+}
+
 function player.isLive(player) {
 	player_uuid = player.getUuid(player);
 	live_set = getScriptVar("live_set");
@@ -2424,8 +2449,8 @@ function sign.setString(block, row, string) {
 	block.setSign(block, row, text.new(string));
 }
 
-function block.isType(block, type) {
-	return block.getType(block) == material.get(type);
+function block.isType(block, type_string) {
+	return block.getType(block) == material.get(type_string);
 }
 
 function block.isAir(block) {
@@ -2525,6 +2550,21 @@ function money.sub(player_or_id, money) {
 	money.popUp(player, money * -1, false);
 }
 
+function money.subWithoutPopUp(player_or_id, money) {
+	if(money == 0) {
+		return;
+	}
+	config = playerdata.getSurvival(player_or_id);
+	new_money = config.getDouble(config, "money", 0) - money;
+	config.set(config, "money", new_money);
+	config.saveAsync(config);
+	player = player.getValid(player_or_id);
+	if(player == null) {
+		return;
+	}
+	displayMoney(player, new_money);
+}
+
 function addMoney(player_or_id, money) { //Deprecated
 	money.add(player_or_id, money);
 }
@@ -2688,6 +2728,19 @@ function plot.getIdListFromLocation(location) {
 	return list;
 }
 
+function plot.getHighestId(location) {
+	list = plot.get(location);
+	iter = iterator(list);
+	highest = -1;
+	while(hasNext(iter)) {
+		plot_id = plot.getId(next(iter));
+		if(plot_id > highest) {
+			highest = plot_id;
+		}
+	}
+	return highest;
+}
+
 function plot.addPlayer(plot, player_name) {
 	list = plot.getOwners(plot);
 	uuid = player.getUuid(player_name);
@@ -3010,13 +3063,13 @@ function loc.round(location) {
 //--------------------------------------------------
 
 function living.setAi(bool) {
-	config = getScriptVar("server_config");
+	config = getServerConfig();
 	config.set(config, "spawnWithAi", bool);
 	config.saveAsync(config);
 }
 
 function living.getAi() {
-	config = getScriptVar("server_config");
+	config = getServerConfig();
 	return config.getBool(config, "spawnWithAi", true);
 }
 
@@ -3121,18 +3174,21 @@ function rank.checkCriteria(player, tech_name) {
 			clan_id = player.getClanId(player);
 			return clan.getMembersAmount(clan_id) >= 5;
 		}
+		return false;
 	}
 	if(tech_name == "rank.chief") {
 		if(player.isClanLeader(player)) {
 			clan_id = player.getClanId(player);
 			return clan.getMembersAmount(clan_id) >= 10;
 		}
+		return false;
 	}
 	if(tech_name == "rank.lord") {
 		if(player.isClanLeader(player)) {
 			clan_id = player.getClanId(player);
 			return clan.getMembersAmount(clan_id) >= 15;
 		}
+		return false;
 	}
 	//Quests
 	if(tech_name == "rank.volunteer") {
@@ -3433,7 +3489,7 @@ function player.isNicked(player) {
 //--------------------------------------------------
 
 function mail.send(from_name, to_name, message) {
-	server_config = getScriptVar("server_config");
+	server_config = getServerConfig();
 	mail_id = config.getDouble(server_config, "mail_id", 0) + 1;
 	config.set(server_config, "mail_id", mail_id);
 	config.saveAsync(server_config);
@@ -3699,7 +3755,7 @@ function clan.isExistingName(name) {
 }
 
 function clan.getNextFreeId() {
-	server_config = getScriptVar("server_config");
+	server_config = getServerConfig();
 	id = config.getDouble(server_config, "clan.id.next", 0) + 1;
 	config.set(server_config, "clan.id.next", id);
 	config.saveAsync(server_config);

Some files were not shown because too many files changed in this diff