Browse Source

votestreak and xmas event

mloeschenkohl 2 years ago
parent
commit
b1d97f64f4
53 changed files with 6893 additions and 724 deletions
  1. 0 0
      docu_minecraft_forge.php
  2. 5135 0
      docu_minecraft_paper.php
  3. 0 154
      jan/4d_j_r_core.txt
  4. 349 0
      jan/4d_j_r_core_2.txt
  5. 0 0
      jan/4d_j_r_core_backup(old).txt
  6. 48 0
      jan/fireball.txt
  7. 11 0
      jan/human_talk.txt
  8. 49 6
      jan/portals.txt
  9. 13 6
      jan/recoil.txt
  10. 21 1
      jan/slime_boots.txt
  11. 71 174
      jan/tictactoe.txt
  12. 69 175
      jan/tictactoe_2.txt
  13. 10 3
      minigames/among_us/among_us.txt
  14. 21 13
      minigames/bedwars/bedwars.txt
  15. 14 13
      minigames/buttons/buttons.txt
  16. 59 103
      minigames/jumpnrun/4d/4d_j_r_core.txt
  17. 411 0
      minigames/jumpnrun/4d/4d_j_r_core_old.txt
  18. 16 0
      minigames/jumpnrun/4d/4d_j_r_map3.txt
  19. 1 1
      minigames/jumpnrun/todesjumpnrun.txt
  20. 1 2
      minigames/sammelfieber/sfmap1.txt
  21. 6 0
      minigames/sammelfieber/sfmap10.txt
  22. 6 0
      minigames/sammelfieber/sfmap11.txt
  23. 6 0
      minigames/sammelfieber/sfmap12.txt
  24. 6 0
      minigames/sammelfieber/sfmap13.txt
  25. 6 0
      minigames/sammelfieber/sfmap14.txt
  26. 6 0
      minigames/sammelfieber/sfmap15.txt
  27. 6 0
      minigames/sammelfieber/sfmap16.txt
  28. 6 0
      minigames/sammelfieber/sfmap17.txt
  29. 6 0
      minigames/sammelfieber/sfmap18.txt
  30. 6 0
      minigames/sammelfieber/sfmap19.txt
  31. 1 2
      minigames/sammelfieber/sfmap2.txt
  32. 6 0
      minigames/sammelfieber/sfmap20.txt
  33. 6 0
      minigames/sammelfieber/sfmap21.txt
  34. 1 2
      minigames/sammelfieber/sfmap3.txt
  35. 6 0
      minigames/sammelfieber/sfmap4.txt
  36. 6 0
      minigames/sammelfieber/sfmap5.txt
  37. 6 0
      minigames/sammelfieber/sfmap6.txt
  38. 6 0
      minigames/sammelfieber/sfmap7.txt
  39. 6 0
      minigames/sammelfieber/sfmap8.txt
  40. 6 0
      minigames/sammelfieber/sfmap9.txt
  41. 1 1
      minigames/snowfight/snowfight.txt
  42. 0 0
      minigames/snowfight/snowmap1.txt
  43. 0 0
      minigames/snowfight/snowmap2.txt
  44. 296 0
      minigames/tictactoe/tictactoe.txt
  45. 2 1
      startscript.txt
  46. 1 0
      survival/trader.txt
  47. 105 22
      system/commands.txt
  48. 23 4
      system/gamecenter.txt
  49. 1 1
      system/hawkeye.txt
  50. 4 5
      system/perms.txt
  51. 4 4
      system/ranklist.txt
  52. 7 29
      utils/u_games.txt
  53. 40 2
      utils/u_general.txt

+ 0 - 0
docu_minecraft.php → docu_minecraft_forge.php


+ 5135 - 0
docu_minecraft_paper.php

@@ -0,0 +1,5135 @@
+<section id="Event-List">
+	<table>
+        <tr>
+            <th class="command"></th>
+            <th class="desc">footnote</th>
+        </tr>
+        <tr>
+            <td class="bold">*</td>
+            <td>writable</td>
+        </tr>
+        <tr>
+            <td class="bold">**</td>
+            <td>can be null</td>
+        </tr>
+        <tr>
+            <td class="bold">receiver</td>
+            <td>"dev" / "online" / "SERVER" / player</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living_hurt</th>
+            <th class="desc">an entity gets hurt</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>damage_source<br>*damage_amount<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living_heal</th>
+            <th class="desc">an entity gets healed</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>*heal_amount<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living_death</th>
+            <th class="desc">an entity dies</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>damage_source<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block_drop</th>
+            <th class="desc">a destroyed block drops something</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>**entity<br>**item<br>location<br>block<br>block_type<br>*drops with item-entities as list</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living_experience_drop</th>
+            <th class="desc">an entity dies and drops exp</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>*experience<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living_drop</th>
+            <th class="desc">an entity dies and drops something</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>damage_source<br>*drops with item-entities as list<br>looting (as double)<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity_click</th>
+            <th class="desc">an entity gets right_clicked</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>entity<br>hand ("MAIN_HAND", "OFF_HAND")<br>*cancel</td>
+        </tr>
+    </table>
+	</table>
+    <table>
+        <tr>
+            <th class="command">entity_join</th>
+            <th class="desc">an entity spawns</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>entity<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity_leave</th>
+            <th class="desc">an entity despawns</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>entity</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">animal_tame</th>
+            <th class="desc">an entity gets tamed</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>animal<br>tamer<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity_mount</th>
+            <th class="desc">an entity (dis)mounts another entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>rider<br>entity<br>mounting as boolean<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player_login</th>
+            <th class="desc">a player joins the server</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player_logout</th>
+            <th class="desc">a player leaves the server</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player_pre_respawn</th>
+            <th class="desc">the players will respawn</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>devs can set the spawn-location on this event</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player_post_respawn</th>
+            <th class="desc">the players has respawned</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>devs can refill the inventory on this event</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">living_pre_hurt</th>
+            <th class="desc">an entity gets hurt (event is thrown before living_hurt and cancels damage-animation and knockback)</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>damage_source<br>*damage_amount<br>*cancel</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">living_jump</th>
+            <th class="desc">an entity jumps</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player_sneak</th>
+            <th class="desc">a player sneaks</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>sneak as boolean</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">mob_griefing</th>
+            <th class="desc">an entity destroys the world</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>entity<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player_toss</th>
+            <th class="desc">a player tosses an item</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>item<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player_pickup</th>
+            <th class="desc">a player picks up an item</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>entity (item)<br>item<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player_move</th>
+            <th class="desc">a player moves in an before defined area</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>id</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block_break</th>
+            <th class="desc">a block is broken</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>block as object<br>block_loc<br>block_type (e.g. "minecraft:wool", "km:artefact")<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block_place</th>
+            <th class="desc">a block is placed</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>block as object<br>block_loc<br>block_type</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block_click</th>
+            <th class="desc">a block gets clicked</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>block as object<br>block_loc<br>block_type<br>action ("left", "right")<br>hand ("MAIN_HAND", "OFF_HAND")<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">bucket_use</th>
+            <th class="desc">a bucket is filled / vacated</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>has_block as boolean<br>**block<br>**block_loc<br>**block_type<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">container_click</th>
+            <th class="desc">a slot in an container gets clicked</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>slot as double<br>item_list<br>type as string<br>drag_type as double<br>click_type as string<br>*cancel</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>Custom inventories are not script-across.</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv_click</th>
+            <th class="desc">a slot in an inventory gets clicked</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>item<br>inv<br>inv_name<br>inv_slot as number<br>inv_id<br>click_type<br>*cancel</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>Custom inventories are not script-across.</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv_close</th>
+            <th class="desc">an inventory gets closed</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>inv<br>inv_id<br>inv_name</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item_use_start</th>
+            <th class="desc">an item gets started to be used with rightclick</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>item<br>duration as number<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item_use_finish</th>
+            <th class="desc">an item gets finished to be used with rightclick</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>item<br>result (result item)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">craft</th>
+            <th class="desc">a player crafts an item</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>*result</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">portal</th>
+            <th class="desc">a player switches the world</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>from world as string<br>to world as string</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">ender_teleport</th>
+            <th class="desc">an enderpearl lands</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>living_entity<br>location<b>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">fishing</th>
+            <th class="desc">a player fishes something</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>rod_damage<br>hook (entity)<br>*drops with itemstacks as list<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command</th>
+            <th class="desc">a player uses a vanilla command</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>command as string<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">custom_command</th>
+            <th class="desc">a player (or console) uses a custom-command</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player (null if console)<br>player_name (null if console) (deprecated)<br>command as string<br>args as list<br>text_args as list with strings only</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">chat</th>
+            <th class="desc">a player writes into chat</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>message as string<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">projectile_hit</th>
+            <th class="desc">a thrown projectile hits a block or an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>shooter<br>projectile<br>**entity_hit (=hitted entity)<br>**loc_hit (=hitted location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item_hit</th>
+            <th class="desc">the item thrown with living.shootProjectile() hits a block or an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>shooter<br>projectile (=thrown entity)<br>item<br>**entity_hit (=hitted entity)<br>**loc_hit (=hitted location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item_air_click</th>
+            <th class="desc">a player makes a rightclick into air with an item</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>hand ("MAIN_HAND", "OFF_HAND")<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">left_click_air</th>
+            <th class="desc">a player makes a leftclick into air</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">function_key</th>
+            <th class="desc">a player pushes one of the mod-functional-keys</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>key as number from 1 to 9<br>*cancel</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">human_hurt</th>
+            <th class="desc">an entity beats a human</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>entity<br>human</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">pre_explosion</th>
+            <th class="desc">explosions are cancelled on default</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>location<br>damage_source<br>*cancel|true</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">explosion</th>
+            <th class="desc">explosion</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>location<br>damage_source<br>*affected_blocks as list with BlockPos<br>affected_entities as list</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">missing_command</th>
+            <th class="desc">a player uses an non-existing command</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>**player<br>**player_name (deprecated)<br>command_name<br>sender_name</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">missing_perm</th>
+            <th class="desc">a player has no permissions for a used command</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>**player<br>**player_name (deprecated)<br>command_name<br>sender_name</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player_data_tick</th>
+            <th class="desc">thrown if timer from data.setTimer reached 0</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player<br>var</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player_elytra_start</th>
+            <th class="desc">thrown if a player starts using an elytra</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player_elytra_stop</th>
+            <th class="desc">thrown if a player stops using an elytra</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>player</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world_load</th>
+            <th class="desc">a world gets loaded</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>world</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">vote</th>
+            <th class="desc">a vote gets received</th>
+        </tr>
+        <tr>
+            <td class="bold">Variablen</td>
+            <td>from<br>name<br>ip<br>timestamp</td>
+        </tr>
+    </table>
+</section>
+<section id="Event">
+    <table>
+        <tr>
+            <th class="command">event.addMoveData</th>
+            <th class="desc">defines an area for player_move event and returns the move_id</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>event.addMoveData(location1, location2, cooldown, livingtime, [uuid / string_uuid / player])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>
+                cooldown: -1 terminated after a single trigger<br>
+                cooldown: > 0 clock rate in Ticks. no termination<br>
+				livingtime: -1 area lives forever<br>
+                livingtime: > 0 stays amount of ticks alive<br>
+				player / uuid: event only triggers for this player
+            </td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>on script termination this area will be removed</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">event.removeMoveData</th>
+            <th class="desc">removes a defined area for player_move event</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>event.removeMoveData(id)</td>
+        </tr>
+    </table>
+</section>
+<section id="Ban">
+	<table>
+        <tr>
+            <th class="command">ban.add</th>
+            <th class="desc">bans a player from the server</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>ban.add(uuid / string_uuid / player, reason, banner, [end_date])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>
+				reason as string<br>
+				banner as string (the person who bans, almost you can write in here what you want)<br>
+				end_date as calendar object
+			</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">ban.remove</th>
+            <th class="desc">unbans a player from the server</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>ban.remove(uuid / string_uuid / player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">ban.kick</th>
+            <th class="desc">kicks a player from the server</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>ban.kick(player, reason)</td>
+        </tr>
+    </table>
+</section>
+<section id="Block">
+    <table>
+        <tr>
+            <th class="command">block.set</th>
+            <th class="desc">set a block at a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.set(location, ItemString, [boolean|false])</td>
+        </tr>
+		<tr>
+            <td class="bold">Arguments</td>
+            <td>boolean true places without block update</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>block.set(loc, "km:apricot_leaves")<br>block.set(loc, "minecraft:oak_log[axis=x]")</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.clone</th>
+            <th class="desc">clone a block from a location to another</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.clone(from-location, to-location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.setSpawnerType</th>
+            <th class="desc">sets the spawnertype</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.setSpawnerType(location, entity_class)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.setSign</th>
+            <th class="desc">set text on a sign and returns true on success</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.setSign(location, row, text)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>block.setSign(row: 0 to 3)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.getSign</th>
+            <th class="desc">returns the text of a sign from a specific row or null if block is no sign</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getSign(location, row)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>block.setSign(row: 0 to 3)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.addItem</th>
+            <th class="desc">adds an itemstack to a container</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.addItem(location, itemstack)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the modified original itemstack that has not fit in. air itemstack if done perfectly</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.subItem</th>
+            <th class="desc">removes an itemstack from a container</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.subItem(location, itemstack)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the modified original itemstack that could not be removed. air itemstack if done perfectly</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.get</th>
+            <th class="desc">returns a block object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.get(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.getSecChest</th>
+            <th class="desc">returns the second location of a doublechest</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getSecChest(location)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.getInv</th>
+            <th class="desc">returns the (non-copy) inventory of a block</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getInv(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.getType</th>
+            <th class="desc">returns the type of a block at a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getType(location)</td>
+        </tr>
+		<tr>
+            <td class="bold">Examples</td>
+            <td>returns "minecraft:wool" / "km:artefact"</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.toStack</th>
+            <th class="desc">returns an itemstack from a block at a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.toStack(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.getItemAmount</th>
+            <th class="desc">returns the amount from a specific itemtype in an container</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getItemAmount(location, boolean, itemstack)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>true means exact itemstack</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.setDoorStatus</th>
+            <th class="desc">true opens a door</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.setDoorStatus(location, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.getDoorStatus</th>
+            <th class="desc">returns true if the door is open</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getDoorStatus(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.setTrapdoorStatus</th>
+            <th class="desc">true opens a trapdoor</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.setTrapdoorStatus(location, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.getTrapdoorStatus</th>
+            <th class="desc">returns true if the trapdoor is open</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getTrapdoorStatus(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.isAir</th>
+            <th class="desc">returns true if the block at the location is an air block</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.isAir(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.countAir</th>
+            <th class="desc">returns the amount of air blocks a location surrounded with</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.countAir(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">block.isSolid</th>
+            <th class="desc">returns true if the block is solid</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.isSolid(location)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.getTag</th>
+            <th class="desc">returns a tag</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getTag(String tag_name)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.hasTag</th>
+            <th class="desc">returns true if a block has a tag</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.hasTag(tag, Block)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.getProperties</th>
+            <th class="desc">returns a collection of properties</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getProperties(location)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.getProperty</th>
+            <th class="desc">returns a property</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getProperty(String property_name)</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>some properties has to be renamed. look here: <a href="https://git.hammerle.me/kjhammerle/minecraft-kajetans-mod/src/master/src/main/java/me/km/utils/Mapper.java" target="_blank">me.km.utils.Mapper</a></td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.property.getValue</th>
+            <th class="desc">returns the value of a property as double, string or boolean, demanding on the property</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.property.getValue(location, property)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.property.setInt</th>
+            <th class="desc">sets the value of a property</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.property.setInt(location, property, int)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.property.setBool</th>
+            <th class="desc">sets the value of a property</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.property.setBool(location, property, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.property.setEnum</th>
+            <th class="desc">sets the value of a property</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.property.setEnum(location, property, string))</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.setState</th>
+            <th class="desc">sets the state of a block</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.setState(location, state, [boolean])</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.getState</th>
+            <th class="desc">returns the state of a block</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.getState(location)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.newState</th>
+            <th class="desc">creates a block state</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.newState(state)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>block.newState("minecraft:stone")</td>
+        </tr>
+		<tr>
+			<td class="bold">Info</td>
+            <td>returns null if invalid state</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">block.break</th>
+            <th class="desc">breaks a block and drops the item</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>block.break(location, entity)</td>
+        </tr>
+		<tr>
+			<td class="bold">Info</td>
+            <td>entity can be null</td>
+        </tr>
+    </table>
+</section>
+<section id="Databank">
+    <table>
+        <tr>
+            <th class="command">databank.prepare</th>
+            <th class="desc">returns the prepared statement</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.prepare(sql-query, [boolean autoclose|true])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.setInt</th>
+            <th class="desc">sets an int into a statement</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.setInt(statement, index, int)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.setDouble</th>
+            <th class="desc">sets a double into a statement</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.setDouble(statement, index, double)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.setLong</th>
+            <th class="desc">sets a long into a statement</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.setLong(statement, index, long)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.setString</th>
+            <th class="desc">sets a string into a statement</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.setString(statement, index, string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.setBool</th>
+            <th class="desc">sets a boolean into a statement</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.setBool(statement, index, boolean)</td>
+        </tr>
+    </table>
+	
+    <table>
+        <tr>
+            <th class="command">databank.getInt</th>
+            <th class="desc">returns an int from a result set</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.getInt(result-set, index)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.getDouble</th>
+            <th class="desc">returns a double from a result set</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.getDouble(result-set, index)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.getLong</th>
+            <th class="desc">returns a long from a result set</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.getLong(result-set, index)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.getString</th>
+            <th class="desc">returns a string from a result set</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.getString(result-set, index)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.getBool</th>
+            <th class="desc">returns a boolean from a result set</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.getBool(result-set, index)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.execute</th>
+            <th class="desc">returns a result-set after executing the statement (for all reading queries like SHOW, SELECT)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.execute(statement)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.workerExecute</th>
+            <th class="desc">executing the statement (for all writing queries like UPDATE, DELETE, CREATE, INSERT, DROP)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.workerExecute(statement)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.next</th>
+            <th class="desc">returns true and jumps to the next entry if the result-set has a next entry</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.next(result-set)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">databank.close</th>
+            <th class="desc">manual closing of a result-set</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>databank.close(result-set)</td>
+        </tr>
+    </table>
+</section>
+<section id="Config">
+    <table>
+        <tr>
+            <th class="command">config.saveAsync</th>
+            <th class="desc">saves a config asynchronous</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>config.saveAsync(config)</td>
+        </tr>
+    </table>
+</section>
+<section id="Gamerule">
+	<table>
+        <tr>
+            <th class="command">gamerule.getKey</th>
+            <th class="desc">returns the gamerule_key</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.getKey(gamerule_string)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">gamerule.getValue</th>
+            <th class="desc">return the gamerule_value from a world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.getValue(world, gamerule_key)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">gamerule.isBool</th>
+            <th class="desc">returns true if the value is a boolean</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.isBool(gamerule_value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">gamerule.isInt</th>
+            <th class="desc">returns true if the value is an integer</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.isInt(gamerule_value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">gamerule.getBool</th>
+            <th class="desc">returns the gamerule_value as boolean</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.getBool(gamerule_value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">gamerule.getInt</th>
+            <th class="desc">returns the gamerule_value as integer</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.getInt(gamerule_value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">gamerule.setBool</th>
+            <th class="desc">sets a gamerule_value</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.setBool(gamerule_value, boolean)</td>
+        </tr>
+		<tr>
+			<td class="bold">Info</td>
+            <td>Gamerules in other worlds than the overworld are not persistent.</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">gamerule.setInt</th>
+            <th class="desc">sets a gamerule_value</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>gamerule.setInt(gamerule_value, value)</td>
+        </tr>
+		<tr>
+			<td class="bold">Info</td>
+            <td>Gamerules in other worlds than the overworld are not persistent.</td>
+        </tr>
+    </table>
+    </table>
+</section>
+<section id="General">
+    <table>
+        <tr>
+            <th class="command">msg</th>
+            <th class="desc">sends a message</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>msg(receiver, string)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">print</th>
+            <th class="desc">prints a text for devs</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>print(string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command</th>
+            <th class="desc">executes a Minecraft command from console</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command(minecraft command syntax as string without /)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">worker.hasWork</th>
+            <th class="desc">returns true if the worker is working</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>worker.hasWork()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">isPlayer</th>
+            <th class="desc">returns true if the argument is a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>isPlayer(anything)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">isLiving</th>
+            <th class="desc">returns true if the argument is a living entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>isLiving(anything)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">setMOTD</th>
+            <th class="desc">sets the server text in the server list</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>setMOTD(text)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">modTimer</th>
+            <th class="desc">modifies the timer for the auto scheduler</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>modTimer(milliseconds as long)</td>
+        </tr>
+    </table>
+</section>
+<section id="Item">
+    <table>
+        <tr>
+            <th class="command">item.drop</th>
+            <th class="desc">drops an itemstack at a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.drop(location, itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.get</th>
+            <th class="desc">returns an item as object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.get(itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.getType</th>
+            <th class="desc">returns the type of an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getType(itemstack)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>"minecraft:wool" / "km:artefact"</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.getAmount</th>
+            <th class="desc">returns the amount of items in an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getAmount(itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.setAmount</th>
+            <th class="desc">sets the amount of items for an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.setAmount(itemstack, value)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.getName</th>
+            <th class="desc">returns the name of an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getName(itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.setName</th>
+            <th class="desc">sets the name of an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.setName(itemstack, name)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.getLore</th>
+            <th class="desc">returns a list with all lores of an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getLore(ItemStack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.setLore</th>
+            <th class="desc">sets the lore for an itemstack with the elements in the list</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.setLore(itemstack, List)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.addLore</th>
+            <th class="desc">sets the lore for an itemstack for a specific row</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.addLore(itemstack, lore, row)</td>
+        </tr>
+    </table>
+	<table>
+	    <tr>
+            <th class="command">item.addAttribute</th>
+            <th class="desc">adds an attribute to an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.addAttribute(itemstack, attribute, slot, double, operation)</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>
+				attributes: generic.max_health, generic.follow_range, generic.knockback_resistance, generic.movement_speed, generic.flying_speed, generic.attack_damage, generic.attack_damage, generic.attack_knockback, generic.attack_speed, generic.armor, generic.armor_toughness, generic.luck, zombie.spawn_reinforcements, horse.jump_strength<br>
+				slots: mainhand, offhand, head, chest, legs, feet<br>
+				operation: 0 (ADDITION), 1 (MULTIPLY_BASE), 2 (MULTIPLY_TOTAL)
+			</td>
+        </tr>
+    </table>
+	<table>
+	    <tr>
+            <th class="command">item.clearAttributes</th>
+            <th class="desc">removes all custom attributes from an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.clearAttributes(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+	    <tr>
+            <th class="command">item.hasAttributes</th>
+            <th class="desc">returns true if an itemstack has custom attributes</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.hasAttributes(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+	    <tr>
+            <th class="command">item.addDefaultTags</th>
+            <th class="desc">adds the default attributes to an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.addDefaultTags(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.hide</th>
+            <th class="desc">hides something on an itemstack and returns true on success</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.hide(itemstack, name)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>name: "enchantments" / "attributes" / "unbreakable" / "destroys" / "placed_on" / "potion_effects"</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.addPotion</th>
+            <th class="desc">unknown</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.addPotion(itemstack, potion_name, duration, power)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.setCoolDown</th>
+            <th class="desc">sets the cooldown for an item-type</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.setCoolDown(player, itemstack, ticks)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.clone</th>
+            <th class="desc">returns a copy of an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.clone(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.getTag</th>
+            <th class="desc">returns a tag</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getTag(String tag_name)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.hasTag</th>
+            <th class="desc">returns true if an itemstack has a tag</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.hasTag(tag, itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.hasName</th>
+            <th class="desc">returns true if the itemstack has a modified name</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.hasName(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.getFullText</th>
+            <th class="desc">returns the full text object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getFullText(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.isDamageable</th>
+            <th class="desc">returns true if the itemstack is damageable</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.isDamageable(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.getMaxDamage</th>
+            <th class="desc">returns the maximum damage the itemstack can get</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getMaxDamage(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.setDamage</th>
+            <th class="desc">sets the damage of the itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.setDamage(itemstack, amount)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.getDamage</th>
+            <th class="desc">returns the damage of an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getDamage(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.getMaxAmount</th>
+            <th class="desc">returns the maximum amount of stackable items</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.getMaxAmount(itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.entity.get</th>
+            <th class="desc">returns an itemstack from an item-entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.entity.get(item-entity)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.entity.set</th>
+            <th class="desc">sets an itemstack to an item-entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.entity.set(item-entity, itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.entity.new</th>
+            <th class="desc">creates an item-entity from an itemstack and returns the item-entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.entity.new(location, itemstack)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">item.entity.spawn</th>
+            <th class="desc">spawns an item-entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.entity.spawn(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">item.entity.setLifespan</th>
+            <th class="desc">sets the lifespan of an item-entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>item.entity.setLifespan(item-entity, ticks)</td>
+        </tr>
+    </table>
+</section>
+<section id="Enchantment">
+	<table>
+        <tr>
+            <th class="command">enchantment.get</th>
+            <th class="desc">returns an enchantment</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>enchantment.get(enchantment_string)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td><a href="https://minecraft-de.gamepedia.com/Verzauberung#Verzauberungen" target="_blank">Minecraft Wiki Verzauberungen</a> (ID-Name verwenden)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">enchantment.add</th>
+            <th class="desc">adds an enchantment to an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>enchantment.add(enchantment, itemstack, level)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">enchantment.getLevel</th>
+            <th class="desc">returns the level of an enchantment an itemstack has</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>enchantment.getLevel(enchantment, itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">enchantment.readFromItem</th>
+            <th class="desc">returns a map with all enchantments from an item with the level as value</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>enchantment.readFromItem(itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">enchantment.writeToItem</th>
+            <th class="desc">transfers all enchantments from the map on the itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>enchantment.writeToItem(map, itemstack)</td>
+        </tr>
+    </table>
+</section>
+<section id="Error">
+	<table>
+        <tr>
+            <th class="command">error.clear</th> 
+            <th class="desc">clears all cached errors</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>error.clear()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">error.getSize</th> 
+            <th class="desc">returns the amount of all cached errors</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>error.getSize()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">error.getIndex</th> 
+            <th class="desc">returns the error from an index</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>error.getIndex(index)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">error.setConsolePrint</th> 
+            <th class="desc">true prints snuvi errors on console (not stack traces)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>error.setConsolePrint(boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">debug.clear</th> 
+            <th class="desc">clears all cached debug-messages</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>debug.clear()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">debug.getSize</th> 
+            <th class="desc">returns the amount of all cached debug-messages</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>debug.getSize()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">debug.getIndex</th> 
+            <th class="desc">returns the debug-message from an index</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>debug.getIndex(index)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">debug.setConsolePrint</th> 
+            <th class="desc">true prints snuvi debug-messages on console (not stack traces)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>debug.setConsolePrint(boolean)</td>
+        </tr>
+    </table>
+</section>
+<section id="Location">
+    <table>
+        <tr>
+            <th class="command">loc.new</th> 
+            <th class="desc">creates a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.new(World, x, y, z)<br>loc.new(World, x, y, z, yaw, pitch)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.getX</th>
+            <th class="desc">returns the x coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.getX(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.setX</th>
+            <th class="desc">sets the x coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.setX(location, value)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.addX</th>
+            <th class="desc">adds the value to the x coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.addX(location, value)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.getY</th>
+            <th class="desc">returns the y coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.getY(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.setY</th>
+            <th class="desc">sets the y coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.setY(location, value)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.addY</th>
+            <th class="desc">adds the value to the y coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.addY(location, value)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.getZ</th>
+            <th class="desc">returns the z coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.getZ(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.setZ</th>
+            <th class="desc">sets the z coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.setZ(location, value)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.addZ</th>
+            <th class="desc">adds the value to the z coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.addZ(location, value)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.setYaw</th>
+            <th class="desc">sets the yaw of a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.setYaw(location, Yaw)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.getYaw</th>
+            <th class="desc">returns the yaw of a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.getYaw(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.setPitch</th>
+            <th class="desc">sets the pitch of a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.setPitch(location, Pitch)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.getPitch</th>
+            <th class="desc">returns the pitch of a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.getPitch(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.getWorld</th>
+            <th class="desc">returns the world of a location as object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.getWorld(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.distance</th>
+            <th class="desc">returns the difference between two locations</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.distance(location1, location2)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>there is no error if the two locations have not the same world</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.isBetween</th>
+            <th class="desc">returns true if the location is between two other locations</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.isBetween(location, location1, location2)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.mod</th>
+            <th class="desc">returns a modified copy of the location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.mod(location, x, y, z)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.add</th>
+            <th class="desc">modifies the original location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.add(location, x, y, z)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.set</th>
+            <th class="desc">modifies the original location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.set(location, x, y, z)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.getCoord</th>
+            <th class="desc">returns information from location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.getCoord(location, w/x/y/z/bx/by/bz)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>w as world_name_string<br>b are block coordinates</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.sort</th>
+            <th class="desc">sort in lowest and highest coordinates</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.sort(location1, location2)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.setBlockPos</th>
+            <th class="desc">sets the coordinates of a location from a blockPos</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.setBlockPos(location, blockPos)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.iterator</th>
+            <th class="desc">returns the iterator for the area</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.iterator(world, x1, y1, z1, x2, y2, z2)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">loc.trace</th>
+            <th class="desc">returns the traced original location or false if no block is found</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.trace(location, direction_x, direction_y, direction_z, steps, boolean)</td>
+        </tr>
+		<tr>
+            <td class="bold">Arguments</td>
+            <td>boolean true means the block before the last one</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">loc.explode</th>
+            <th class="desc">makes an explosion at a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>loc.explode(location, entity, radius, fire_bool, block_damage_bool)</td>
+        </tr>
+		<tr>
+			<td class="bold">Info</td>
+            <td>entity can be null</td>
+        </tr>
+    </table>
+</section>
+<section id="Read">
+    <table>
+        <tr>
+            <th class="command">read.spawnMob</th>
+            <th class="desc">spawns a mob and returns the entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>read.spawnMob(location, nbt-tag)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">read.player</th>
+            <th class="desc">returns the object player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>read.player(playername)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">read.item</th>
+            <th class="desc">returns an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+			<td>
+				read.item(nbt-tag)<br>
+				read.item(item_type)<br>
+				read.item(item_type, item_amount)<br>
+				read.item(item_type, item_amount)<br>
+				read.item(item_type, item_amount, name)<br>
+				read.item(item_type, item_amount, name, lore1, lore2, ...)
+			</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>returns null if the item does not exist</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">read.location</th>
+            <th class="desc">returns a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>read.location("location")</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>worldname:x:y:z[:yaw:pitch]</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>read.location("gpvpnew:234:100:-341")<br>read.location("gpvpnew:234:100:-341:90:15")</td>
+        </tr>
+    </table>
+	<table>
+		<tr>
+			<th class="command">read.uuid</th>
+			<th class="desc">returns a uuid</th>
+		</tr>
+		<tr>
+			<td class="bold">Format</td>
+			<td>read.uuid("uuid")</td>
+		</tr>
+	</table>
+	<table>
+		<tr>
+			<th class="command">read.slot</th>
+			<th class="desc">returns a slot</th>
+		</tr>
+		<tr>
+			<td class="bold">Format</td>
+			<td>read.slot(slot)</td>
+		</tr>
+		<tr>
+			<td class="bold">Info</td>
+			<td>slot: "head" / "chest" / "legs" / "feet" / "hand" / "offhand"</td>
+		</tr>
+	</table>
+</section>
+<section id="Text">
+    <table>
+        <tr>
+            <th class="command">text.item</th>
+            <th class="desc">returns an nbt-tag from an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.item(itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">text.location</th>
+            <th class="desc">returns a string from a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.location(location)</td>
+        </tr>
+    </table>
+	<table>
+		<tr>
+			<th class="command">text.locationBlock</th>
+			<th class="desc">returns a string with rounded coordinates from a location</th>
+		</tr>
+		<tr>
+			<td class="bold">Format</td>
+			<td>text.locationBlock(location)</td>
+		</tr>
+	</table>
+    <table>
+        <tr>
+            <th class="command">text.entity</th>
+            <th class="desc">returns a string from a entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.entity(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">removeFormat</th>
+            <th class="desc">removes formatting</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>removeFormat(string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">text.click</th>
+            <th class="desc">returns a clickable text object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.click(show_text, execute_text)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>
+                msg(player, text.click("Click me", "and i will appear in the player's text screen"));<br>
+                <br>
+                msg(player, text.click("Click me", "/wusi"));<br>
+            </td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">text.hover</th>
+            <th class="desc">returns a hoverable text object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.hover(show_text, execute_text)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>
+                msg(player, text.hover("Move over this text", "to see this text"));<br>
+                <br>
+                msg(player, text.hover(text.click("Click or move over me", "to print text or execute a command like /wusi"), "or to show this hover_text"));<br>
+            </td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">text.link</th>
+            <th class="desc">returns a clickable message for links</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.link(message, link)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">text.copyText</th>
+            <th class="desc">returns a clickable message to copy text from a website</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.copyText(message, string)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">text.clipBoard</th>
+            <th class="desc">returns a clickable message to set text to the clipboard</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.clipBoard(message, string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">text.concat2</th>
+            <th class="desc">connects all given arguments and returns a string object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.concat2(arg, ...)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>Colorcodes gets lost with this.</td>
+        </tr>
+    </table>
+</section>
+<section id="Plot">
+    <table>
+        <tr>
+            <th class="command">plot.add</th>
+            <th class="desc">returns the created plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.add(location1, location2, [plot_id])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.remove</th>
+            <th class="desc">removes a plot from a world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.remove(plot, world)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getId</th>
+            <th class="desc">returns the plot_id</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getId(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.setName</th>
+            <th class="desc">sets the name of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.setName(plot, name)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getName</th>
+            <th class="desc">returns the name of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getName(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.get</th>
+            <th class="desc">returns a list with all plots at a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.get(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getMinX</th>
+            <th class="desc">returns the lowest x coordinate of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getMinX(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getMinY</th>
+            <th class="desc">returns the lowest y coordinate of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getMinY(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getMinZ</th>
+            <th class="desc">returns the lowest z coordinate of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getMinZ(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getMaxX</th>
+            <th class="desc">returns the lowest x coordinate of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getMaxX(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getMaxY</th>
+            <th class="desc">returns the lowest y coordinate of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getMaxY(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getMaxZ</th>
+            <th class="desc">returns the lowest z coordinate of a plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getMaxZ(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.intersecting</th>
+            <th class="desc">returns a list with all intersecting plots</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.intersecting(world, x1, y1, z1, x2, y2, z2)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.setFlags</th>
+            <th class="desc">sets all flags to the boolean</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.setFlags(plot, flags, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getFlags</th>
+            <th class="desc">returns all flags as double</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getFlags(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.hasFlags</th>
+            <th class="desc">returns true if all flags existing</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.hasFlags(plot, flags)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.getOwners</th>
+            <th class="desc">returns a list with all owners as uuid (modifying the list changes the owners)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.getOwners(plot)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.check</th>
+            <th class="desc">returns true if the player is owner of any plot from that location OR if any plot contains all given flags. returns empty if there is no plot</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.check(location, player, Int flags, Boolean empty)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>player can be null<br>flags: 0 if not desired<br>1 PLACE_FLAG<br>2 BREAK_FLAG<br>4 BUCKET_FLAG<br>8 HIT_AMBIENT_FLAG<br>16 BLOCK_INTERACT_FLAG<br>32 ENTITY_INTERACT_FLAG</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>
+				plot.check(loc, null, 1, false) ==> true if place_flag existing<br>
+				plot.check(loc, null, 2, false) ==> true if break_flag existing<br>
+				plot.check(loc, null, 3, false) ==> true if break_flag and place_flag existing<br>
+				plot.check(loc, player, 0, false) ==> true if player is owner<br>
+				plot.check(loc, player, 0, true) ==> true if player is owner or if there is no plot
+			</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">plot.iterator</th>
+            <th class="desc">returns the iterator for the plots in a world [for a player]</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>plot.iterator(world, [uuid])</td>
+        </tr>
+    </table>
+</section>
+<section id="Table">
+	<table>
+        <tr>
+            <th class="command">table.new</th>
+            <th class="desc">returns a table object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>table.new(color, width, width, width, ...)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">table.getStart</th>
+            <th class="desc">returns the tables head</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>table.getStart(table)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">table.getMiddle</th>
+            <th class="desc">returns a tables middle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>table.getMiddle(table)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">table.getEnd</th>
+            <th class="desc">returns the tables end</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>table.getEnd(table)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">table.get</th>
+            <th class="desc">returns a tables line</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>table.get(table, args...)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">table.setSize</th>
+            <th class="desc">defines the pixel size of a character</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>table.setSize("character", pixel_int)</td>
+        </tr>
+    </table>
+</section>
+<section id="Command">
+    <table>
+        <tr>
+            <th class="command">command.add</th>
+            <th class="desc">registers a custom command</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.add(string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.remove</th>
+            <th class="desc">removes a custom command</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.remove(string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.clear</th>
+            <th class="desc">removes all custom commands</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.clear()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.exists</th>
+            <th class="desc">returns true if a custom command exists</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.exists(string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.addIgnored</th>
+            <th class="desc">ignores a (vanilla) command-help</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.addIgnored(string)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.clearIgnored</th>
+            <th class="desc">removes all ignored command-helps</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.clearIgnored()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelp</th>
+            <th class="desc">returns a help-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelp(string, perm)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpLiteral</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpLiteral(string, [perm])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpBool</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpBool(string, [perm])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpDouble</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpDouble(string, min, max, [perm])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpFloat</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpFloat(string, min, max, [perm])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpInt</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpInt(string, min, max, [perm])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpLong</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpLong(string, min, max, [perm])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpString</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpString(string, boolean, [perm])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>boolean true means greedy</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.newHelpSpecial</th>
+            <th class="desc">returns a help-sub-object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.newHelpSpecial(type, string, [perm])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>type = "Item", "Block", "Potion", "Enchantment", "Player"</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.addHelp</th>
+            <th class="desc">registers a command-help</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.addHelp(help-object)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.addHelpChild</th>
+            <th class="desc">help-sub-object2 is added tp help-(sub-)object1 as a new argument</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.addHelpChild(help-(sub-)object1, help-sub-object2)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.addHelpAlias</th>
+            <th class="desc">help-object1 refers to help-object2</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.addHelpAlias(help-object1, help-object2)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.sendHelp</th>
+            <th class="desc">sends all registered command-helps to all players</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.sendHelp()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">command.clearHelp</th>
+            <th class="desc">removes all registered command-helps</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>command.clearHelp()</td>
+        </tr>
+    </table>
+</section>
+<section id="Scoreboard">
+    <table>
+        <tr>
+            <th class="command">sb.add</th>
+            <th class="desc">add text to the scoreboard</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sb.add(receiver, index, string)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>index as number from 1 to 99</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>vanilla handling:<br>
+				maximum 12 rows<br>
+				rows with the same content are only shown once<br>
+			</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">sb.remove</th>
+            <th class="desc">removes a row from the scoreboard</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sb.remove(receiver, index)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>index as number from 1 to 99</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">sb.reset</th>
+            <th class="desc">removes the whole scoreboard</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sb.reset(receiver)</td>
+        </tr>
+    </table>
+</section>
+<section id="Display">
+    <table>
+        <tr>
+            <th class="command">display.add</th>
+            <th class="desc">add icons or text to the players display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>display.add(receiver, index, string)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>index as number from 1 to 99</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>maximum 32 characters each row<br>
+				you will find all icons in the mod file .minecraft/mods/km-x.xx/assets/km/textures/gui/icons<br>
+				every icon has an id beginning with 1 in the left upper corner<br>
+				you show icons in this format: "#id-amount-" e.g. "#3-1-"<br>
+				fallback id is 0 (shows nothing)
+			</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">display.remove</th>
+            <th class="desc">removes a row from the display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>display.remove(receiver, index)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+			<td>index as number from 1 to 99</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">display.reset</th>
+            <th class="desc">removes the whole display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>display.reset(receiver)</td>
+        </tr>
+    </table>
+</section>
+<section id="Stacks">
+    <table>
+        <tr>
+            <th class="command">stacks.set</th>
+            <th class="desc">fills a slot of the stacks-display with an icon</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>stacks.set(receiver, index, item_name)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+			<td>index as number from 0 to 8</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">stacks.setActive</th>
+            <th class="desc">shows/removes the stacks-display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>stacks.setActive(receiver, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">stacks.clearIndex</th>
+            <th class="desc">clears a slot from the stacks-display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>stacks.clearIndex(receiver, index)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+			<td>index as number from 0 to 8</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">stacks.clear</th>
+            <th class="desc">clears the whole stacks-display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>stacks.clear(receiver)</td>
+        </tr>
+    </table>
+</section>
+<section id="Script">
+    <table>
+        <tr>
+            <th class="command">script.start</th>
+            <th class="desc">connects all scripts, starts them as one script and returns the script</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>script.start(scriptpath1, scriptpath2, ...)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">script.startNamed</th>
+            <th class="desc">connects all scripts, starts them as one script and returns the script</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>script.startNamed(custom_name, scriptpath1, scriptpath2, ...)</td>
+        </tr>
+			<td class="bold">Info</td>
+			<td>named scripts can be selected with script.get by their custom_name</td>
+		<tr>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">script.callEvent</th>
+            <th class="desc">calls an event</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>script.callEvent(event, [script])</td>
+        </tr>
+    </table>
+</section>
+<section id="Head">
+    <table>
+        <tr>
+            <th class="command">head.add</th>
+            <th class="desc">shows a player's head on the screen</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>head.add(receiver, id, head_player_name, x, y, width, height)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>
+				id: free selectable, non-global, per-player<br>
+				x/y/width/height: scale from 0 to 1<br>
+			</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">head.remove</th>
+            <th class="desc">removes a shown head</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>head.remove(receiver, id)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">head.reset</th>
+            <th class="desc">Removes all shown heads</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>head.reset(receiver)</td>
+        </tr>
+    </table>
+</section>
+<section id="Title">
+    <table>
+        <tr>
+            <th class="command">title.send</th>
+            <th class="desc">shows a player a title (and subtitle if set)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>title.send(player, title)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">title.setSub</th>
+            <th class="desc">sets a subtitle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>title.setSub(player, subtitle)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">title.setTime</th>
+            <th class="desc">sets the times for title</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>title.setTime(player, fadeIn|20, show|60, fadeOut|20)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>times in ticks</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">title.reset</th>
+            <th class="desc">resets the times for title to default</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>title.reset(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">title.clear</th>
+            <th class="desc">removes the shown title</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>title.clear(player)</td>
+        </tr>
+    </table>
+</section>
+<section id="Permission">
+    <table>
+        <tr>
+            <th class="command">perm.clear</th>
+            <th class="desc">removes all permissions</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>perm.clear()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">perm.registerGroup</th>
+            <th class="desc">adds a permission to a permission-group</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>perm.registerGroup(id, permission)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>id 0 = default<br>id 1 = worldedit</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">perm.registerPlayer</th>
+            <th class="desc">adds a permission-group to a a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>perm.registerPlayer(uuid / string_uuid / player, id)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">perm.unregisterPlayer</th>
+            <th class="desc">removes a permission-group from a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>perm.unregisterPlayer(uuid / string_uuid / player, id)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">perm.has</th>
+            <th class="desc">returns true if the player has the permission</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>perm.has(player, permission)</td>
+        </tr>
+    </table>
+</section>
+<section id="Player">
+    <table>
+        <tr>
+            <th class="command">players.toList</th>
+            <th class="desc">returns a list with all players online</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>players.toList()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">players.toWorldList</th>
+            <th class="desc">returns a list with all players in a world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>players.toWorldList(World)</td>
+        </tr>
+        <tr>
+            <td class="bold">Alias</td>
+            <td>world.getPlayers(World)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">players.near</th>
+            <th class="desc">returns a list with all players within a radius of a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>players.near(location, radius)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.damageArmor</th>
+            <th class="desc">damages an players armor, portioned on all armor parts</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.damageArmor(player, damage_float, damage_source)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.near</th>
+            <th class="desc">returns a list with all players within a radius of a player (without that player)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.near(player, radius)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">players.getAmount</th>
+            <th class="desc">returns the number of online players</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>players.getAmount()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getHead</th>
+            <th class="desc">returns a players head as an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getHead(uuid, name)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>uuid and(!) name of the player</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getNearest</th>
+            <th class="desc">returns the next player to a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getNearest(location)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.setDisplayName</th>
+            <th class="desc">set the player's name in tab list</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setDisplayName(player, display_name)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.speak (deprecated)</th>
+            <th class="desc">sends a message with prefix</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.speak(receiver, präfix, text)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.action</th>
+            <th class="desc">shows a message in the action bar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.action(receiver, text)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getTarget</th>
+            <th class="desc">returns the location from the block the player is looking at</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getTarget(player, radius|5, [blockmode|true], [fluidmode|true])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>blockmode: true ignores blocks without player collision<br>fluidmode: true does not ignores water</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.inventoryToList</th>
+            <th class="desc">returns a list with the inventory of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.inventoryToList(player)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>an empty slot is null<br>changes effects the player inventory directly</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getName</th>
+            <th class="desc">returns the name of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getName(uuid / string_uuid / player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getUuid</th>
+            <th class="desc">returns the uuid of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getUuid(player / player_name)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getUuidFromId</th>
+            <th class="desc">returns the uuid of a player from his id</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getUuidFromId(player_id)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getNameFromId</th>
+            <th class="desc">returns the name of a player from his id</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getNameFromId(player_id)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.getId</th>
+            <th class="desc">returns the id of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getId(player / uuid / string_uuid)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.get</th>
+            <th class="desc">returns the player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.get(uuid / string_uuid)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.respawn</th>
+            <th class="desc">awakes a player from death if the parser reaches wait() and activates the respawn events</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.respawn(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.setCompass</th>
+            <th class="desc">set the direction for a players compass</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setCompass(player, location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.setHunger</th>
+            <th class="desc">set the players hunger (vanilla default: 0-20)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setHunger(player, number)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getHunger</th>
+            <th class="desc">returns the players hunger as number</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getHunger(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.setSaturation</th>
+            <th class="desc">set the players saturation (vanilla default: 0-20)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setSaturation(player, number)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getSaturation</th>
+            <th class="desc">returns the players saturation as number</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getSaturation(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.setGamemode</th>
+            <th class="desc">set the gamemode for a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setGamemode(player, gamemode)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>gamemode as "survival" / "creative" / "adventure" / "spectator"</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.isSurvival</th>
+            <th class="desc">returns true if the player is in gamemode survival or adventure</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.isSurvival(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.isCreative</th>
+            <th class="desc">returns true if the player is in gamemode creative</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.isCreative(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.isAdventure</th>
+            <th class="desc">returns true if the player is in gamemode adventure or spectator</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.isAdventure(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.isSpectator</th>
+            <th class="desc">returns true if the player is in gamemode spectator</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.isSpectator(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.hasFly</th>
+            <th class="desc">returns true if the player can fly</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.hasFly(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.setFly</th>
+            <th class="desc">set true for a flying player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setFly(player, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getLastDamager</th>
+            <th class="desc">returns the entity which harmed the player the last time</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getLastDamager(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.dropInventory</th>
+            <th class="desc">drops the inventory from a player at a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.dropInventory(player, location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getItemAmount</th>
+			<th class="desc">returns the amount of an item-type from a players inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getItemAmount(player, boolean, itemstack)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>true means exact itemstack</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.damageItem</th>
+            <th class="desc">damages the item in a player's hand</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.damageItem(player, damage_amount)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>unbreaking (and more) is considered</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.setBedSpawn</th>
+            <th class="desc">sets the spawn-location for a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>
+				player.setBedSpawn(player, location, [yaw])<br>
+				player.setSpawn(player, location, [yaw])
+			</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getBedSpawn</th>
+            <th class="desc">returns the spawn-location for a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>
+				player.getBedSpawn(player)<br>
+				player.getSpawn(player)
+			</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.giveItem</th>
+            <th class="desc">gives an itemstack to a player and returns the itemstack which didn't fit in the players inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.giveItem(player, itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.removeItem</th>
+            <th class="desc">removes an itemstack from a player and returns the itemstack which couldn't be removed from the players inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.removeItem(player, itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.say</th>
+            <th class="desc">send a message to global chat, like a player has written the message by himself</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.say(player, text)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.getIP</th>
+            <th class="desc">returns the ip-address of a player as string</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getIp(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">player.clearInventory</th>
+            <th class="desc">clears the inventory of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.clearInventory(player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.openEnderchest</th>
+            <th class="desc">opens the enderchest from a player and shows it to a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.openEnderchest(from_player, to_player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.getInv</th>
+            <th class="desc">returns the (non-copy) players inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getInv(player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.getEnderInv</th>
+            <th class="desc">returns the (non-copy) players ender inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getEnderInv(player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.getTargetEntity</th>
+            <th class="desc">returns the targeted entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getTargetEntity(player, radius, class)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>player.getTargetEntity(player, 4, "net.minecraft.entity.player.EntityPlayer")</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.getLevel</th>
+            <th class="desc">returns the level of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getLevel(player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.setLevel</th>
+            <th class="desc">sets the level of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setLevel(player, level)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.getExp</th>
+            <th class="desc">returns the exp of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.getExp(player)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.setExp</th>
+            <th class="desc">sets the exp of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.setExp(player, exp)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.addTotalExp</th>
+            <th class="desc">modifies the exp of a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.addTotalExp(player, exp)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.hide</th>
+            <th class="desc">hides a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.hide(player)</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>bug: effects show the player</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">player.show</th>
+            <th class="desc">shows a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>player.show(player)</td>
+        </tr>
+    </table>
+</section>
+<section id="Inventory">
+    <table>
+        <tr>
+            <th class="command">inv.new</th>
+            <th class="desc">returns a new created custom-inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.new(String slotdata)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>slotdata: 0 = no slot / 1 = normal slot / 2 = button throws inv_click event, backgroundcolor like frame / 3 = button throws inv_click event, backgroundcolor different to frame</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>inv.new("002133")</td>
+        </tr>
+    </table>
+	</table>
+	<table>
+		<tr>
+            <th class="command">inv.getSize</th>
+            <th class="desc">returns the size of an inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.getSize(inventory)</td>
+        </tr>
+    <table>
+        <tr>
+            <th class="command">inv.setItem</th>
+            <th class="desc">sets an itemstack on a specific slot in an inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.setItem(inventory, slotindex, itemstack)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv.getItem</th>
+            <th class="desc">returns an itemstack from a specific slot of an inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.getItem(inventory, slotindex)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv.open</th>
+            <th class="desc">shows an custom-inventory to a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.open(inventory, player, inv_title)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv.close</th>
+            <th class="desc">closes an inventory from a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.close(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv.update</th>
+            <th class="desc">updates an inventory from a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.update(player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv.loadChest</th>
+            <th class="desc">copies the content of a chest and put it into an inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.loadChest(location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">inv.getID</th>
+            <th class="desc">returns the id of an inventory</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>inv.getID(inventory)</td>
+        </tr>
+    </table>
+</section>
+<section id="World">
+    <table>
+        <tr>
+            <th class="command">world.get</th>
+            <th class="desc">returns a world as object</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.get(world_name_string)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.getName</th>
+            <th class="desc">returns the name of a world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getName(World)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.setDifficulty</th>
+            <th class="desc">sets the difficulty of a world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.setDifficulty(difficulty_string)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>difficulty_string: PEACEFUL, EASY, NORMAL, HARD</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.setSpawn</th>
+            <th class="desc">sets the world spawn</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.setSpawn(World, Location, [yaw])</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.getSpawn</th>
+            <th class="desc">returns the world spawn as location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getSpawn(World)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.getAll</th>
+            <th class="desc">returns a list with all loaded worlds</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getAll()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.setTime</th>
+            <th class="desc">sets the time (0 - 24000) for a minecraft world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.setTime(World, time)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.getTime</th>
+            <th class="desc">returns the time (0 - 24000) of a minecraft world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getTime(World)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">world.hasStorm</th>
+            <th class="desc">returns true if it is raining in the world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.hasStorm(World)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.clearWeather</th>
+            <th class="desc">clears the weather in a world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.clearWeather(World, time)</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>effect of time unknown</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.setRain</th>
+            <th class="desc">sets the weather in a world to rain</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.setRain(World, time)</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>effect of time unknown</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.setThunder</th>
+            <th class="desc">sets the weather in a world to thunder</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.setThunder(World, time)</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>effect of time unknown</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.getEntities</th>
+            <th class="desc">returns a list with all entities from a world</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getEntities(world)</td>
+        </tr>
+    </table>
+</section>
+<section id="Entity">
+	<table>
+        <tr>
+            <th class="command">entity.getType</th>
+            <th class="desc">returns the type of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getType(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.setName</th>
+            <th class="desc">sets the name of an entity, true for an always visible name</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setName(entity, name, nameVisibility|false)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.getName</th>
+            <th class="desc">returns the name of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getName(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.getLocation</th>
+            <th class="desc">returns the location of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getLocation(entity / player)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.teleport</th>
+            <th class="desc">teleports an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.teleport(entity / player, location)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.setInvulnerable</th>
+            <th class="desc">sets an entity (in)vulverable</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setInvulnerable(entity / player, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.throw</th>
+            <th class="desc">throws an entity in relative direction to the entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.throw(entity / player, x, y, z)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>x/y/z is claimed in the interval from -3.9 to 3.9 by minecraft</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.setInvisible</th>
+            <th class="desc">sets an entity (in)visible</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setInvisible(entity / player, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.clearEffects</th>
+            <th class="desc">remove all effects from an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.clearEffects(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.remove</th>
+            <th class="desc">removes an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.remove(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.removeAll</th>
+            <th class="desc">remove specific entities from an area</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.removeAll(entity_class, location, radius)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>not all entity_classes are allowed (filtered and blocked)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>entity.removeAll("net.minecraft.entity.passive.CowEntity", location, radius)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.setSilent</th>
+            <th class="desc">true sets an entity silent</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setSilent(entity, boolean)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.mount</th>
+            <th class="desc">let an entity ride another entity (for any living entities)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.mount(entity, horse_entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.unmount</th>
+            <th class="desc">unmounts the rider</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.unmount(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.isWet</th>
+            <th class="desc">returns true if an entity is wet</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.isWet(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.isBurning</th>
+            <th class="desc">returns true if an entity burns</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.isBurning(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.setBurning</th>
+            <th class="desc">sets an entity on fire</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setBurning(entity, seconds)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>0 seconds extinguish the entity</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.setNoPickup</th>
+            <th class="desc">this arrow-entity cannot be picked up</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setNoPickup(arrow-entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.get</th>
+            <th class="desc">returns the next entity to a location</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.get(location, radius, entity_class)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>entity.get(location, radius, "net.minecraft.entity.passive.CowEntity")</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.getItemFromFrame</th>
+            <th class="desc">returns the itemstack of an itemframe</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getItemFromFrame(itemframe-entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.spawnItemFrame</th>
+            <th class="desc">sets an itemframe with an itemstack</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.spawnItemFrame(location, direction, itemstack)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>direction "north" / "east" / "south" / "west"</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.spawn</th>
+            <th class="desc">spawns an entity and returns the entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.spawn(type, location, [daten])</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.getEnchantmentModifier</th>
+            <th class="desc">returns the summarized enchantment modificator of the armor for the damagesource</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getEnchantmentModifier(entity, damagesource)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.setGravity</th>
+            <th class="desc">toggles the gravity of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setGravity(entity, boolean)</td>
+        </tr>
+    <table>
+        <tr>
+            <th class="command">entity.setPickupDelay</th>
+            <th class="desc">unknown</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setPickupDelay(item-entity, ticks)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.setGrowingAge</th>
+            <th class="desc">sets the growing age of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.setGrowingAge(entity, age_int)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.getEffectAmplifier</th>
+            <th class="desc">returns the amplifier (effect level), 0 if not existing</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.hasEffect(entity / player, effect)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>String <a href="https://minecraft-de.gamepedia.com/Statuseffekt" target="_blank">effect</a></td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.addEffect</th>
+            <th class="desc">adds an effect to an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.addEffect(entity / player, effect, ticks, amplifier, [particle|true])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>String <a href="https://minecraft-de.gamepedia.com/Statuseffekt" target="_blank">effect</a> / number ticks (infinite: 32760) / number amplifier (1 means potion-level 1)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.getPotionType</th>
+            <th class="desc">returns the type of a potion</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getPotionType(potion-entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.near</th>
+            <th class="desc">returns a list with all entities within a location / a radius of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.near(location / entity, radius)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">entity.getLook</th>
+            <th class="desc">returns an array with vectors</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getLook(entity / player)</td>
+        </tr>
+        <tr>
+            <td class="bold">Examples</td>
+            <td>array[0] = x<br>array[1] = y<br>array[2] = z</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.getMotion</th>
+            <th class="desc">returns an array with vectors</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getMotion(entity)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.addTag</th>
+            <th class="desc">adds a tag to an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.addTag(entity, tag as string)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.removeTag</th>
+            <th class="desc">removes a tag from an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.removeTag(entity, tag as string)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.clearTag</th>
+            <th class="desc">removes all tags from an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.clearTag(entity)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">entity.hasTag</th>
+            <th class="desc">returns true if an entity has a tag</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.hasTag(entity, tag as string)</td>
+        </tr>
+        <tr>
+			<td class="bold">Info</td>
+            <td>default entity-tags: no_tick, mod_spawned</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">creeper.explode</th>
+            <th class="desc">let a creeper explode</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>creeper.explode(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">sheep.isSheared</th>
+            <th class="desc">returns true if a sheep is sheared</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sheep.isSheared(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">sheep.getColor(entity)</th>
+            <th class="desc">returns the color of a sheep</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sheep.getColor(entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">pet.isTamed</th>
+            <th class="desc">returns true if a pet is tamed</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>pet.isTamed(tamable_entity)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">pet.setTamed</th>
+            <th class="desc">set tame state for a tamable entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>
+				pet.setTamed(tamable_entity, boolean, [owner])
+			</td>
+        </tr>
+		<tr>
+            <td class="bold">Example</td>
+            <td>
+				pet.setTamed(horse, true)<br>
+				pet.setTamed(horse, false)<br>
+				pet.setTamed(horse, true, owner)<br>
+				pet.setTamed(horse, false, owner)<br>
+			</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">pet.getOwner</th>
+            <th class="desc">returns the owner's uuid from an pet</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>pet.getOwner(tamable_entity)</td>
+        </tr>
+    </table>
+</section>
+<section id="Living">
+    <table>
+        <tr>
+            <th class="command">living.setHealth</th>
+            <th class="desc">sets the health points for an living_entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.setHealth(living_entity, amount)</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living.getHealth</th>
+            <th class="desc">returns the health points from an living_entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.getHealth(living_entity)</td>
+        </tr>
+	</table>
+	<table>
+        <tr>
+            <th class="command">living.damage</th>
+            <th class="desc">damages an living_entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.damage(living_entity, damage_amount, [damagesource])</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>triggers events on the next server tick</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living.heal</th>
+            <th class="desc">heals an living_entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.heal(living_entity, heal_amount)</td>
+        </tr>
+		<tr>
+            <td class="bold">Info</td>
+            <td>triggers events on the next server tick</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living.setEquip</th>
+            <th class="desc">set the equipment of an living_entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.setEquip(living_entity, bodypart, itemstack)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>bodypart: "head" / "chest" / "legs" / "feet" / "hand" / "offhand"</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living.getEquip</th>
+            <th class="desc">returns the equipment of an living_entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.getEquip(living_entity, bodypart)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>bodypart: "head" / "chest" / "legs" / "feet" / "hand" / "offhand"</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living.near</th>
+            <th class="desc">returns a list with all living entities within a location / a radius of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.near(location / entity, radius)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">living.removeAi</th>
+            <th class="desc">removes the AI of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.removeAi(living_entity)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command"></th>
+            <th class="desc">commands for living properties</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>
+				living.get...(living_entity)<br>
+				living.getBase...(living_entity)<br>
+				living.set..(living_entity, value)<br>
+				living.setPersistent...(living_entity, value)
+			</td>
+        </tr>
+        <tr>
+            <td class="bold">Properties</td>
+            <td>
+				...maxHealth<br>
+				...AttackKnockback<br>
+				...AttackDamage<br>
+				...AttackSpeed<br>
+				...FollowRange<br>
+				...Luck<br>
+				...Armor<br>
+				...ArmorThoughness<br>
+				...MovementSpeed<br>
+				...FlyingSpeed<br>
+				...KnockbackResistance
+			</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living.shootProjectile</th>
+            <th class="desc">returns the shooten entity. A projectile is shooten into viewing direction of the player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.shootProjectile(living_entity, String entity_class, Number power, [data])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>
+                data: always null, except for arrows and potions use itemstacks<br>
+                <br>
+                entity_classes:<br>
+                <br>
+                me.km.entities.EntityItemProjectile<br>
+                net.minecraft.entity.projectile.SnowballEntity<br>
+                net.minecraft.entity.projectile.EggEntity<br>
+                net.minecraft.entity.item.EnderPearlEntity<br>
+                net.minecraft.entity.projectile.PotionEntity<br>
+                net.minecraft.entity.item.ExpBottleEntity<br>
+                net.minecraft.entity.projectile.ArrowEntity<br>
+                net.minecraft.entity.projectile.TippedArrowEntity<br>
+                net.minecraft.entity.projectile.SpectralArrowEntity<br>
+                net.minecraft.entity.projectile.ArrowEntity<br>
+                net.minecraft.entity.projectile.SmallFireballEntity<br>
+                net.minecraft.entity.projectile.WitherSkullEntity<br>
+                net.minecraft.entity.projectile.DragonFireballEntity<br>
+                net.minecraft.entity.projectile.FireballEntity
+            </td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">living.isBlocking</th>
+            <th class="desc">returns true if an entity is blocking (e.g. activated shield)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>living.isBlocking(entity)</td>
+        </tr>
+    </table>
+</section>
+<section id="Particle">
+	<table>
+        <tr>
+            <th class="command">particle.get</th>
+            <th class="desc">returns particle data</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>particle.get(name, [data])</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>block particle: data = block_name<br>dust particle: data = float red, float green, float blue, float alpha<br>item particle: data = item_name</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">particle.getAll</th>
+            <th class="desc">returns a list with all particles</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>particle.getAll()</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">particle.spawn</th>
+            <th class="desc">spawns particle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>particle.spawn(location, particle_data, [count|1], [speed,0.0], [offX,0.0], [offY,0.0], [offZ,0.0])</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">particle.spawnPlayer</th>
+            <th class="desc">spawns particle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>particle.spawnPlayer(location, particle_data, player, [count|1], [speed,0.0], [offX,0.0], [offY,0.0], [offZ,0.0])</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">particle.spawnCircle</th>
+            <th class="desc">spawns particle</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>particle.spawnCircle(location, particle_data, instances, radius, [count|1], [speed,0.0], [offX,0.0], [offY,0.0], [offZ,0.0])<br>particle.spawnCircle(location, particle_data, instances, stepX, stepY, stepZ, [count|1], [speed,0.0], [offX,0.0], [offY,0.0], [offZ,0.0])</td>
+        </tr>
+    </table>
+</section>
+<section id="Sound">
+	<table>
+        <tr>
+            <th class="command">sound.get</th>
+            <th class="desc">returns a sound</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sound.get(String sound_name)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">sound.getCategory</th>
+            <th class="desc">returns a sound category</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sound.getCategory(String sound_category|"master")</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">sound.spawn</th>
+            <th class="desc">plays a sound</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sound.spawn(location, sound, soundCategory, [volume|1.0], [pitch|random von 0.9 - 1.0])</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">sound.spawnForPlayer</th>
+            <th class="desc">plays a sound for a player (not hearable for that one player!)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>sound.spawnForPlayer(player, sound, soundCategory, [volume|1.0], [pitch|random von 0.9 - 1.0])</td>
+        </tr>
+    </table>
+</section>
+<section id="Human">
+	<table>
+        <tr>
+            <th class="command">human.spawn</th>
+            <th class="desc">returns the new created human</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>human.spawn(location)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">human.setSkin</th>
+            <th class="desc">sets the skin of a human</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>human.setSkin(human, file_name OR uuid)</td>
+        </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>file_name is for skins saved local on our own server. if file_name not found, global skin are searched via uuid</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">human.setSlim</th>
+            <th class="desc">true makes the human slim (slim is for alex skins)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>human.setSlim(human, boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">human.setScale</th>
+            <th class="desc">sets the size of the human</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>human.setScale(human, value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">human.setStatue</th>
+            <th class="desc">toggles between human and statue</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>human.setStatue(human, bool)</td>
+        </tr>
+    </table>
+</section>
+<section id="Damage">
+	<table>
+        <tr>
+            <th class="command">damage.get</th>
+            <th class="desc">returns a damagesource</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>
+				damage.get(String damage_name)<br><br>
+				damage.get("thorns", entity)<br><br>
+				damage.get(entity, creative, armor, absolute, explosion, fire, magic, projectile)
+			</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+			 <td>
+				damage_name = inFire, lightningBolt, onFire, lava, hot_floor, inWall, cramming, drown, starve, cactus, fall, flyIntoWall, outOfWorld, generic, magic, wither, anvil, falling_block, dragon_breath, dryout, sweet_berry_bush
+				<br><br>
+                creative: boolean, true also deals damage in creative mode<br>
+                armor: boolean, true ignores armor<br>
+                absolute: boolean, true ignores enchantments and potions<br>
+                explosion: boolean, tag for explosion enchantment<br>
+                fire: boolean, tag for fire enchantment<br>
+                magic: boolean, true makes the damage magic<br>
+                projectile: boolean, tag for projectile enchantment<br>
+            </td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.getType</th>
+            <th class="desc">returns the type of a damagesource as string</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.getType(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.getImmediateSource</th>
+            <th class="desc">returns the direct damager entity of a damagesource</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.getImmediateSource(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.getTrueSource</th>
+            <th class="desc">returns the indirect damager entity of a damagesource</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.getTrueSource(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isCreativePlayer</th>
+            <th class="desc">returns true if the damagesource can damage an creative player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isCreativePlayer(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isAbsolute</th>
+            <th class="desc">returns true if the damage ignores modifications by potion effects or enchantments</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isAbsolute(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isDifficultyscaled</th>
+            <th class="desc">returns true if the damagesource will have its damageamount scaled based on the current difficulty</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isDifficultyscaled(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isExplosion</th>
+            <th class="desc">returns true if the damage is explosion based</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isExplosion(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isFire</th>
+            <th class="desc">returns true if the damage is fire based</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isFire(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isMagic</th>
+            <th class="desc">returns true if the damage is magic based</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isMagic(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isProjectile</th>
+            <th class="desc">returns true if the damage is projectile based</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isProjectile(damagesource)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">damage.isUnblockable</th>
+            <th class="desc">returns true if the damage cannot be blocked by armor</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>damage.isUnblockable(damagesource)</td>
+        </tr>
+    </table>
+</section>
+<section id="Data">
+	<table>
+        <tr>
+            <th class="command">data.set</th>
+            <th class="desc">sets data for a player (script-across)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>data.set(player, String varname, value)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">data.get</th>
+            <th class="desc">returns data from a player (script-across)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>data.get(player, String varname)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">data.setTimer</th>
+            <th class="desc">sets timed data for a player (script-across)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>data.setTimer(player, String varname, ticks)</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>set ticks to -1 to delete the timer. after the timer expires the event player_data_tick is thrown</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">data.getTimer</th>
+            <th class="desc">returns the remaining ticks of timed data (script-across)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>data.getTimer(player, String varname)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">data.clear</th>
+            <th class="desc">deletes all datas from a player (script-across)</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>data.clear(player)</td>
+        </tr>
+    </table>
+</section>
+<section id="Shop">
+	<table>
+        <tr>
+            <th class="command">shop.new</th>
+            <th class="desc">returns a new shop</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>shop.new()</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">shop.addOffer</th>
+            <th class="desc">adds an offer to a shop</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>shop.addOffer(shop, buy_item, sell_item, max_uses)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">shop.addDoubleOffer</th>
+            <th class="desc">adds a double offer to a shop</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>shop.addDoubleOffer(shop, buy_item_1, buy_item_2, sell_item, max_uses)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">shop.open</th>
+            <th class="desc">shows a shop to a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>shop.open(shop, player, shop_name)</td>
+        </tr>
+    </table>
+</section>
+<section id="Status">
+	<table>
+        <tr>
+            <th class="command">status.add</th>
+            <th class="desc">adds a message to the enchantment-display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>status.add(receiver, byte index, message)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">status.addTimed</th>
+            <th class="desc">adds a timed message to the enchantment-display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>status.addTimed(receiver, byte index, int time, message)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">status.remove</th>
+            <th class="desc">removes a single message from the enchantment-display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>status.remove(receiver, byte index)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">status.reset</th>
+            <th class="desc">removes all messages from the enchantment-display</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>status.reset(receiver)</td>
+        </tr>
+    </table>
+</section>
+<section id="Boss">
+	<table>
+        <tr>
+            <th class="command">boss.setColor</th>
+            <th class="desc">sets the color for the bossbar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.setColor("PINK" / "BLUE" / "RED" / "GREEN" / "YELLOW" / "PURPLE" / "WHITE")</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">boss.setCreateFog</th>
+            <th class="desc">sets a property for the bossbar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.setCreateFog(boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">boss.setDarkenSky</th>
+            <th class="desc">sets a property for the bossbar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.setDarkenSky(boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">boss.setPlayEndbossmusic</th>
+            <th class="desc">sets a property for the bossbar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.setPlayEndbossmusic(boolean)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">boss.setName</th>
+            <th class="desc">sets the name for the bossbar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.setName(string)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">boss.setOverlay</th>
+            <th class="desc">sets an overlay to split the bossbar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.setOverlay("PROGRESS" / "NOTCHED_6" / "NOTCHED_10" / "NOTCHED_12" / "NOTCHED_20")</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">boss.setPercent</th>
+            <th class="desc">sets the progress of the bossbar</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.setPercent(0 - 1)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">boss.send</th>
+            <th class="desc">sends the bossbar to the players</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>boss.send(receiver, "ADD" / "REMOVE" / "UPDATE_PCT" / "UPDATE_NAME" / "UPDATE_STYLE" / "UPDATE_PROPERTIES")</td>
+        </tr>
+        <tr>
+            <td class="bold">Arguments</td>
+            <td>
+			ADD sends name, percent, color, overlay, properties(booleans)<br>
+			UPDATE_PCT sends percent<br>
+			UPDATE_NAME sends name<br>
+			UPDATE_STYLE sends color, overlay<br>
+			UPDATE_PROPERTIES sends properties(booleans)<br>
+			</td>
+        </tr>
+    </table>
+</section>

+ 0 - 154
jan/4d_j_r_core.txt

@@ -1,154 +0,0 @@
-sign.started(gamesignloc);
-event.load("function_key");
-event.load("living_pre_hurt");
-event.load("player_move");
-event.load("player_logout");
-event.load("player_giveup");
-event.load("player_join");
-event.load("block_break");
-
-gamename = "§a4D-Jump'n'Run";
-
-maxplayers = 1;
-
-x1 = loc.getX(Edge_1);
-x2 = loc.getX(Edge_2);
-x3 = loc.getX(Edge_3);
-
-y1 = loc.getY(Edge_1);
-y2 = loc.getY(Edge_2);
-y3 = loc.getY(Edge_3);
-
-z1 = loc.getZ(Edge_1);
-z2 = loc.getZ(Edge_2);
-z3 = loc.getZ(Edge_3);
-
-Layer = array.new(Layer_amount, 2);
-
-event.addMoveData(loc1, loc2, -1, -1);
-
-current_layer = 0;
-
-@wait
-wait();
-if(event == "living_pre_hurt") {
-	if(!isPlayer(living_entity)) {
-		goto("wait");
-	}
-	player = living_entity;
-}
-if(!player.hasMinigameId(player, script_id)) {
-	goto("wait");
-}
-if(event == "player_join"){
-	entity.teleport(player, Start_Pos);
-	player.clearInventory(player);
-	stacks.set(player, 7, "km:arrow_left");
-	stacks.set(player, 8, "km:arrow_right");
-	stacks.setActive(player, true);
-	for(layer_var = 0; layer_var < Layer_amount; layer_var++){
-		temp_list = list.new();
-		x_d = layer_var * Layer_difference_X;
-		y_d = layer_var * Layer_difference_Y;
-		z_d = layer_var * Layer_difference_Z;
-		for(x = x1 - x_d; x <= x2 - x_d; x++){
-			for(y = y1 - y_d; y <= y2 - y_d; y++){
-				for(z = z1 - z_d; z <= z2 - z_d; z++){
-					temp_loc = loc.new(games, x, y, z);
-					if(!block.isAir(temp_loc)){
-						temp_loc2 = loc.new(games, x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d);
-						list.add(temp_list, temp_loc2);
-					}
-				}
-			}
-		}
-		Layer[layer_var, 0] = temp_list;
-		Layer[layer_var, 1] = block_type_array[layer_var];
-	}
-	goto("wait");
-}
-if(event == "block_break"){
-	cancel = true;
-	goto("wait");
-}
-if(event == "living_pre_hurt") {
-	cancel = true;
-	goto("wait");
-}
-if(event == "function_key"){
-	if(key == 8){
-		goto("remove_layer");
-	}
-	if(key == 9){
-		goto("add_layer");
-	}
-	goto("wait");
-}
-if(event == "player_move"){
-	//if(current_layer == finish_layer){
-	game_stop("You did it!");
-	//}
-	goto("wait");
-}
-if(event == "player_logout"){
-	game_stop(null);
-}
-if(event == "player_giveup"){
-	game_stop("You left :(");
-}
-goto("wait");
-
-@remove_layer
-//remove_blocks(current_layer);
-if(current_layer <= 0 || current_layer > Layer_amount - 1){
-	if(current_layer == 0){
-		remove_blocks(current_layer);
-	}
-	current_layer--;// = Layer_amount - 1;
-}else{
-	remove_blocks(current_layer);
-	current_layer--;
-	place_blocks(current_layer);
-}
-//place_blocks(current_layer);
-goto("wait");
-
-@add_layer
-//remove_blocks(current_layer);
-if(current_layer >= Layer_amount - 1 || current_layer < 0){
-	if(current_layer == Layer_amount - 1){
-		remove_blocks(current_layer);
-	}
-	current_layer++;// = 0;
-}else{
-	remove_blocks(current_layer);
-	current_layer++;
-	place_blocks(current_layer);
-}
-//place_blocks(current_layer);
-goto("wait");
-
-function remove_blocks(current_layer){
-	temp_list = $Layer[current_layer, 0];
-	for(a = 0; a < list.getSize(temp_list); a++){
-		block.set(list.getIndex(temp_list, a), "minecraft:air");
-	}
-}
-function place_blocks(current_layer){
-	temp_list = $Layer[current_layer, 0];
-	for(a = 0; a < list.getSize(temp_list); a++){
-		block.set(list.getIndex(temp_list, a), $Layer[current_layer, 1]);
-	}
-}
-
-function game_stop(message){
-	remove_blocks($current_layer);
-	place_blocks(0);
-	if(message != null){
-		msg.prefix($player, $gamename, message);
-	}
-	script = script.getFromId($script_id);
-	minigame.kickPlayer(script, $player);
-	minigame.term(script, $gamesignloc);
-	term();
-}

+ 349 - 0
jan/4d_j_r_core_2.txt

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

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


+ 48 - 0
jan/fireball.txt

@@ -0,0 +1,48 @@
+event.load("item_air_click");
+
+Explosion_Power = 0;
+blaze_shoot_sound = sound.get("entity.blaze.shoot");
+sound_category_master = sound.getCategory("master");
+Scepter_map = map.new();
+map.add(Scepter_map, "km:wooden_scepter", 0.1);
+map.add(Scepter_map, "km:stone_scepter", 0.2);
+map.add(Scepter_map, "km:copper_scepter", 0.3);
+map.add(Scepter_map, "km:bronze_scepter", 0.4);
+map.add(Scepter_map, "km:iron_scepter", 0.5);
+map.add(Scepter_map, "km:golden_scepter", 0.75);
+map.add(Scepter_map, "km:diamond_scepter", 1);
+
+@wait
+wait();
+if(player.getName(player) == "SirTerence7" || player.getName(player) == "Mareeeen" || player.getName(player) == "marvinius"){
+if(event == "item_air_click"){
+	player_hand = living.getEquip(player, "hand");
+	player_hand_item_type = item.getType(player_hand);
+	if(map.contains(Scepter_map, player_hand_item_type)){
+		Lore_List = item.getLore(player_hand);
+		//if(list.getSize(Lore_List) > 0){
+			//Lore_List_1 = list.getIndex(Lore_List, 0);
+			//if(Lore_List_1 == "Magic Item"){
+				Shooting_Power = map.get(Scepter_map, player_hand_item_type);
+				Look_array = entity.getLook(player);
+				Motion_array = entity.getMotion(player);
+				new_health = living.getHealth(player)-math.round(Shooting_Power*5);
+				if(new_health > 0.5){
+					living.setHealth(player, new_health);
+					x = Look_array[0] * Shooting_Power + Motion_array[0] * 0.75;
+					y = Look_array[1] * Shooting_Power + Motion_array[1] * 0.75 + 0.05;
+					z = Look_array[2] * Shooting_Power + Motion_array[2] * 0.75;
+					tag = text.concat("{ExplosionPower:", Explosion_Power, ",Motion:[",x,",",y,",",z,"],power:[",x/10,",",y/10,",",z/10,"]"/*,Invulnerable:1*/,",Owner:",player.getUuid(player),"}");
+					entity.spawn("fireball", loc.mod(entity.getLocation(player),x,y+0.5,z), tag);
+					sound.spawnForPlayer(player, blaze_shoot_sound, sound_category_master, 1, 1);
+					entity.throw(player, Motion_array[0] - Look_array[0] * Shooting_Power * 0.5, Motion_array[1] - Look_array[1] * Shooting_Power * 0.125 ,Motion_array[2] - Look_array[2] * Shooting_Power * 0.5);
+					//fireball = entity.spawn("fireball", entity.getLocation(player));
+					//living.damage(player, math.round(Shooting_Power*5), damage.get(false,true,true,true,true,true,true,false));
+					//entity.throw(fireball, x, y ,z);
+				}
+			//}
+		//}
+	}
+}
+}
+goto("wait");

+ 11 - 0
jan/human_talk.txt

@@ -32,6 +32,17 @@ if(entity_name == "Moderator\n§9SirTerence7") {
 	goto("wait");
 }
 
+if(entity_name == "Moderator\n§9Mareeeen") {
+	rand_number = math.roundup(math.random(0,5));
+	if(rand_number > 1){
+		msg.prefix(player, "§9Mareeeen", "Ich habe deine Schokolade gegessen!");
+		
+	}else{
+		msg.prefix(player, "§9Mareeeen", "Wo ist die Schokolade?");
+	}
+	goto("wait");
+}
+
 if(entity_name == "Owner\n§4kajetanjohannes") {
 	item = living.getHand(player);
 	item_type = item.getType(item);

+ 49 - 6
jan/portals.txt

@@ -2,15 +2,59 @@ event.load("block_place");
 event.load("block_break");
 event.load("player_move");
 
-port_locs = map.new();
-port_idmap= map.new();
 portalids = list.new();
-portalkey = 1;
+port_out_locs = map.new();
+open_portals_in = list.new();
+open_portals_out = list.new();
+
 @wait
 wait();
 
 if(player.getName(player) == "SirTerence7"){
+//one way portals:
+if(event == "block_place"){
+	if(block_type == "minecraft:redstone_torch"){
+		new_id = event.addMoveData(block_loc, loc.mod(block_loc,0.5,1,0.5), -1, -1, player);
+		list.add(portalids, new_id);
+		if(list.getSize(open_portals_out) > 0){
+			map.add(port_out_locs, new_id, list.getIndex(open_portals_out, 0));
+			list.removeIndex(open_portals_out, 0);
+		}else{
+			list.add(open_portals_in, new_id);
+		}
+		goto("wait");
+	}
+	if(block_type == "minecraft:torch"){
+		if(list.getSize(open_portals_in) > 0){
+			map.add(port_out_locs, list.getIndex(open_portals_in, 0), block_loc);
+			list.removeIndex(open_portals_in, 0);
+		}else{
+			list.add(open_portals_out, block_loc);
+		}
+		goto("wait");
+	}
+	goto("wait");
+}
+if(event == "block_break"){
+	goto("wait");
+}
+if(event == "player_move"){
+	if(list.contains(portalids,id)){
+		motion_array = entity.getMotion(player);
+		temp_coords = map.get(port_out_locs, id);
+		if(temp_coords != null){
+			entity.teleport(player, temp_coords);
+			entity.throw(player, motion_array[0], motion_array[1], motion_array[2]);
+		}
+	}
+	goto("wait");
+}
+}
+goto("wait");
 
+/*
+portalkey = 1;
+//
 if(event == "block_place"){
 	if(block_type == "minecraft:redstone_torch"){
 		new_id = event.addMoveData(block_loc, loc.mod(block_loc,0.5,1,0.5), -1, -1, player);
@@ -26,7 +70,7 @@ if(event == "block_place"){
 	temp_id = map.get(port_idmap, block_loc);
 	event.removeMoveData(temp_id);
 	goto("wait");
-}*/
+}*//*
 if(event == "player_move" && portalkey > 2){
 	motion_array = entity.getMotion(player);
 	msg("dev", id);
@@ -44,5 +88,4 @@ if(event == "player_move" && portalkey > 2){
 	}
 	goto("wait");
 }
-}
-goto("wait");
+}*/

+ 13 - 6
jan/recoil.txt

@@ -1,5 +1,5 @@
 event.load("player_toss");
-//-event.load("left_click_air");
+//event.load("left_click_air");
 event.load("fishing");
 /*item_list = list.new();
 list.add(item_list, "minecraft:bow");
@@ -31,17 +31,24 @@ if(name == "SirTerence7" || name == "Mareeeen"){
 		multishot_level = enchantment.getLevel(enchantment.get("multishot"), item);
 		piercing_level = enchantment.getLevel(enchantment.get("piercing"), item);
 		impaling_level = enchantment.getLevel(enchantment.get("impaling"), item);
-		strength = 2*power_level + 6*multishot_level + 2*piercing_level + 2*impaling_level + 1;*/
+		strength = 0.2*power_level + 0.6*multishot_level + 0.2*piercing_level + 0.2*impaling_level + 0.1;*/
 		strength = 0.225;
-		array = entity.getLook(player);
+		array1 = entity.getLook(player);
 		array2 = entity.getMotion(player);
 		if(event == "player_toss"){
 			amount = item.getAmount(item);
 			strength = 0.125 * (1+math.log(amount)/math.log(level));
 		}
-		x = array2[0] - array[0] * mult * strength;
-		y = array2[1] - array[1] * mult * 0.75 * strength;
-		z = array2[2] - array[2] * mult * strength;
+		if(math.abs(array2[1]) > 0.25){
+			x = array2[0]*0.5 - array1[0] * mult * 0.25 * strength;
+			y = array2[1]*0.75 - array1[1] * mult * 0.005 * strength;
+			z = array2[2]*0.5 - array1[2] * mult * 0.25 * strength;
+		}
+		else{
+			x = array2[0] - array1[0] * mult * strength;
+			y = array2[1] - array1[1] * mult * 0.75 * strength;
+			z = array2[2] - array1[2] * mult * strength;
+		}
 		entity.throw(player, x, y, z);
 		//mult = 1;
 	//}

+ 21 - 1
jan/slime_boots.txt

@@ -1,9 +1,29 @@
 event.load("living_pre_hurt");
-
+//event.load("player_move");
 @wait
 wait();
 //funktioniert leider nicht, da prehurt zu spät kommt
+//mgl mit area besser event.addMoveData usw
+/*
+loc = setArea(loc.mod(entity.getLoc(player)));
+id = event.addMoveData(loc, loc.mod(loc,0.5,1,0.5), -1, -1, player);
+if(event == player_move){
+	event.removeMoveData(id);
+}
+
+function setArea(loc){
+	for(a = loc.getY(loc); blocktest(loc); a--){}
+	return loc;
+}
 
+function blocktest(loc){
+	loc = loc.mod(loc, 0, -1, 0);
+	if(block.isAir(loc) && loc.getY(loc) > -1){
+		return true;
+	}
+	return false;
+}
+*/
 if(isPlayer(living_entity)){
 	if(player.getName(living_entity) == "SirTerence7"){
 		damage_type = damage.getType(damage_source);

+ 71 - 174
jan/tictactoe.txt

@@ -1,9 +1,13 @@
 event.load("block_place");
 event.load("block_click");
 
-tic_tac_toe_blocks = list.new();
-
 games_world = world.getGames();
+
+red_glass_loc = loc.new(games_world, -425, 149, -51);
+yellow_glass_loc = loc.new(games_world, -425, 149, -50);
+green_glass_loc = loc.new(games_world, -425, 149, -49);
+
+tic_tac_toe_blocks = list.new();
 list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -49));
 list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -49));
 list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -49));
@@ -35,252 +39,145 @@ list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -51));
 list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -51));
 
 winning_blocks = list.new();
+length = 3;
+setFieldToAir();
 
-@start
-for(a = 0; a < list.getSize(tic_tac_toe_blocks); a++){
-	block.set(list.getIndex(tic_tac_toe_blocks, a), "minecraft:air");
-}
-goto("wait");
-
+msg("dev", "§bTicTacToe §rloaded.");
 @wait
 wait();
-
-if(event == "block_click"){
+if(event == "block_click") {
+	if(block_loc == red_glass_loc) {
+		player.giveItem(player, read.item("minecraft:red_stained_glass", 32));
+	}
+	elseif(block_loc == yellow_glass_loc) {
+		player.giveItem(player, read.item("minecraft:yellow_stained_glass", 32));
+	}
+	elseif(block_loc == green_glass_loc) {
+		player.giveItem(player, read.item("minecraft:green_stained_glass", 32));
+	}
+	goto("wait");
 }
-if(event == "block_place"){
-	if(is.tictactoe_placeable(block_loc)){
-		if(is.triplet(block_loc)){
+if(event == "block_place") {
+	if(is.tictactoe_placeable(block_loc)) {
+		cancel = false;
+		if(is.triplet(block_loc)) {
 			goto("tic_tac_toe_win");
 		}		
-	}else{
-		cancel = true;
 	}
 }
 goto("wait");
 
 @tic_tac_toe_win
-msg(player, "You won.");
-for(a = 0; a < list.getSize(tic_tac_toe_blocks); a++){
-	block.set(list.getIndex(tic_tac_toe_blocks, a), "minecraft:air");
-}
+msg.radius("§b3D-TicTacToe", concat(player.getName(player), " won."), entity.getLocation(player), 5);
 list.add(winning_blocks, block_loc);
-for(a = 0; a < list.getSize(winning_blocks); a++){
+for(a = 0; a < list.getSize(winning_blocks); a++) {
 	block.set(list.getIndex(winning_blocks, a), "minecraft:red_wool");
 }
 list.clear(winning_blocks);
+waitfor(60);
+setFieldToAir();
 goto("wait");
 
 
-function is.tictactoe_placeable(block_loc){
-	if(!list.contains($tic_tac_toe_blocks, block_loc)){
+function is.tictactoe_placeable(block_loc) {
+	if(!list.contains($tic_tac_toe_blocks, block_loc)) {
 		return false;
 	}
 	loc.addY(block_loc, -1);
-	if(block.isAir(block_loc)){
+	if(block.isAir(block_loc)) {
 		loc.addY(block_loc, 1);
 		return false;
-	}else{
-		loc.addY(block_loc, 1);
 	}
+	loc.addY(block_loc, 1);
 	return true;
 }
 
-function is.triplet(block_loc){
-	if(triplet.straight(block_loc)){
-		return true;
-	}
-	if(triplet.cross(block_loc)){
+function is.triplet(block_loc) {
+	if(triplet.straight(block_loc)) {
 		return true;
 	}
-	if(triplet.cross_cross(block_loc)){
+	if(triplet.cross(block_loc)) {
 		return true;
 	}
-	else{
-		return false;
-	}
+	return triplet.cross_cross(block_loc);
 }
 
 function triplet.straight(block_loc){
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	loc.addX(block_loc, -2);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addX(block_loc, 1);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addX(block_loc, 2);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addX(block_loc, 1);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addX(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 0, 0)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	loc.addY(block_loc, -2);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addY(block_loc, 1);	
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addY(block_loc, 2);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addY(block_loc, 1);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addY(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 1, 0)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	loc.addZ(block_loc, -2);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addZ(block_loc, 1);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addZ(block_loc, 2);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addZ(block_loc, 1);
-	temp_block_count = temp_block_count + is.blockType(block_loc);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 0, 1)){
 		return true;
 	}
 	list.clear($winning_blocks);
 	return false;
 }
 
-function triplet.cross(block_loc){
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+function triplet.cross(block_loc) {
+	if(triplet.loop(block_loc, 1, 0, 1)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 0, -1)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
-	loc.addY(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 1, 1)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
-	loc.addY(block_loc, -2);
-	loc.addZ(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 1, -1)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 1, 0)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, -1, 1, 0)) {
 		return true;
 	}
 	list.clear($winning_blocks);
 	return false;
 }
 
-function triplet.cross_cross(block_loc){
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+function triplet.cross_cross(block_loc) {
+	if(triplet.loop(block_loc, 1, 1, 1)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, 2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, -1, 1, 1)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
-	loc.addY(block_loc, 2);
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, -1, 1)) {
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 1, -1)) {
 		return true;
 	}
 	list.clear($winning_blocks);
 	return false;
 }
 
-function t_loc_add(block_loc, x, y, z){
-	loc.add(block_loc,x, y ,z);
-	return block_loc;
+function triplet.loop(block_loc, x,y,z) {
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.add(block_loc, -2 * x, -2 * y, -2 * z);
+	for(a = 0; a < 2 * $length - 2; a++) {
+		temp_block_count = temp_block_count + is.blockType(block_loc);
+		loc.add(block_loc, x, y ,z);
+	}
+	loc.add(block_loc, -2 * x, -2 * y, -2 * z);
+	return temp_block_count > $length;
 }
 
-function is.blockType(block_loc){
-	if(block.getType(block_loc) == $block_type){
-		list.add($winning_blocks, block_loc);
+function is.blockType(block_loc) {
+	if(block.getType(block_loc) == $block_type) {
+		list.add($winning_blocks, loc.mod(block_loc, 0, 0, 0));
 		return 1;
-	}else{
-		return 0;
+	}
+	return 0;
+}
+
+function setFieldToAir() {
+	for(a = 0; a < list.getSize($tic_tac_toe_blocks); a++) {
+		block.set(list.getIndex($tic_tac_toe_blocks, a), "minecraft:air");
 	}
 }

+ 69 - 175
jan/tictactoe_2.txt

@@ -1,49 +1,14 @@
 event.load("block_place");
 event.load("block_click");
 event.load("function_key");
-tic_tac_toe_blocks = list.new();
-
-/*games_world = world.getGames();
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -49));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -49));
-
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -50));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -50));
-
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -51));
-list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -51));*/
+games_world = world.getGames();
 
 winning_blocks = list.new();
 playing_players = list.new();
 
-ttt_start_loc_list = list.new();
-list.add(ttt_start_loc_list, loc.new(games_world, -427, 147, -50));
-list.add(ttt_start_loc_list, loc.new(games_world, -431, 147, -54));
-list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -50));
-list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -46));
-
+start_loc = loc.new(games_world, start_x, start_y, start_z);
 placed_blocks = list.new();
+list.add(placed_blocks, start_loc);
 
 dimension = 3;
 dem_array = array-new[dimension - 3]
@@ -52,12 +17,17 @@ for(a = 0; a < dimension - 2; a++){
 }
 length = 3;
 
+@start
+list.add(placed_blocks, start_loc);
+block.set(start_loc, "minecraft:stone");
+goto("wait");
+
 @end
 for(a = 0; a < list.getSize(placed_blocks); a++){
 	block.set(list.getIndex(placed_blocks, a), "minecraft:air");
 }
 list.clear(placed_blocks);
-goto("wait");
+goto("start");
 
 @wait
 wait();
@@ -70,6 +40,7 @@ if(event == "block_click"){
 if(event == "block_place"){
 	if(list.contains(playing_players, player)){
 		if(is.tictactoe_placeable(block_loc)){
+			cancel = false;
 			temp_array = array.new[dimension - 2];
 			temp_array[0] = block_loc;
 			
@@ -77,8 +48,6 @@ if(event == "block_place"){
 			if(is.triplet(block_loc)){
 				goto("tic_tac_toe_win");
 			}		
-		}else{
-			cancel = true;
 		}
 	}
 }
@@ -102,21 +71,47 @@ list.clear(winning_blocks);
 list.clear(playing_players);
 goto("wait");
 
-
 function is.tictactoe_placeable(block_loc){
-	if(!list.contains($tic_tac_toe_blocks, block_loc)){
+	if(!ttt.has_neighbours){
 		return false;
 	}
 	loc.addY(block_loc, -1);
 	if(block.isAir(block_loc)){
 		loc.addY(block_loc, 1);
 		return false;
-	}else{
-		loc.addY(block_loc, 1);
 	}
+	loc.addY(block_loc, 1);
 	return true;
 }
 
+function ttt.has_neighbours(block_loc){
+	temp_loc = loc.mod(block_loc, 1, 0, 0);
+	if(list.contains(placed_blocks, temp_loc)){
+		return true;
+	}
+	temp_loc = loc.mod(block_loc, -1, 0, 0);
+	if(list.contains(placed_blocks, temp_loc)){
+		return true;
+	}
+	temp_loc = loc.mod(block_loc, 0, 1, 0);
+	if(list.contains(placed_blocks, temp_loc)){
+		return true;
+	}
+	temp_loc = loc.mod(block_loc, 0, -1, 0);
+	if(list.contains(placed_blocks, temp_loc)){
+		return true;
+	}
+	temp_loc = loc.mod(block_loc, 0, 0, 1);
+	if(list.contains(placed_blocks, temp_loc)){
+		return true;
+	}
+	temp_loc = loc.mod(block_loc, 0, 0, -1);
+	if(list.contains(placed_blocks, temp_loc)){
+		return true;
+	}
+	return false;
+}
+
 function is.triplet(block_loc){
 	if(triplet.straight(block_loc)){
 		return true;
@@ -127,43 +122,17 @@ function is.triplet(block_loc){
 	if(triplet.cross_cross(block_loc)){
 		return true;
 	}
-	else{
-		return false;
-	}
+	return false;
 }
 
 function triplet.straight(block_loc){
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	loc.addX(block_loc, -length + 1);
-	for(a = 0; a < 2 * length - 2; a++){
-		temp_block_count = temp_block_count + is.blockType(block_loc);
-		loc.addX(block_loc, 1);
-	}
-	loc.addX(block_loc, -length+1);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 0, 0)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	loc.addY(block_loc, -length + 1);
-	for(a = 0; a < 2 * length - 2; a++){
-		temp_block_count = temp_block_count + is.blockType(block_loc);
-		loc.addY(block_loc, 1);	
-	}
-	loc.addY(block_loc, -length + 1);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 1, 0)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	loc.addZ(block_loc, -length + 1);
-	for(a = 0; a < 2 * length - 2; a++){
-		temp_block_count = temp_block_count + is.blockType(block_loc);
-		loc.addZ(block_loc, 1);
-	}
-	loc.addZ(block_loc, -length + 1);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 0, 1)){
 		return true;
 	}
 	list.clear($winning_blocks);
@@ -171,70 +140,22 @@ function triplet.straight(block_loc){
 }
 
 function triplet.cross(block_loc){
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 0, 1)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 0, -1)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
-	loc.addY(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 1, 1)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
-	loc.addY(block_loc, -2);
-	loc.addZ(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 0, 1, -1)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 1, 0)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 0));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, -1, 1, 0)){
 		return true;
 	}
 	list.clear($winning_blocks);
@@ -242,68 +163,41 @@ function triplet.cross(block_loc){
 }
 
 function triplet.cross_cross(block_loc){
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 1, 1)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, 2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, -1, 1, 1)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
-	loc.addY(block_loc, 2);
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, -2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, -1, 1)){
 		return true;
 	}
-	list.clear($winning_blocks);
-	temp_block_count = 1;
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2,-2));
-	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
-	loc.addY(block_loc, -2);
-	loc.addX(block_loc, -2);
-	loc.addZ(block_loc, 2);
-	if(temp_block_count > 2){
+	if(triplet.loop(block_loc, 1, 1, -1)){
 		return true;
 	}
 	list.clear($winning_blocks);
 	return false;
 }
 
-function t_loc_add(block_loc, x, y, z){
-	loc.add(block_loc,x, y ,z);
-	return block_loc;
+function triplet.loop(block_loc, x,y,z){
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.add(block_loc, -($length-1)*x, -($length-1)*y, -($length-1)*z);
+	for(a = 0; a < 2 * $length - 1; a++){
+		temp_block_count = temp_block_count + is.blockType(block_loc);
+		loc.add(block_loc,x, y ,z);
+	}
+	loc.add(block_loc, -($length-1)*x, -($length-1)*y, -($length-1)*z);
+	if(temp_block_count > $length){
+		return true;
+	}
+	return false;
 }
 
 function is.blockType(block_loc){
 	if(block.getType(block_loc) == $block_type){
-		list.add($winning_blocks, block_loc);
+		list.add($winning_blocks, loc.mod(block_loc,0,0,0));
 		return 1;
-	}else{
-		return 0;
 	}
+	return 0;
 }

+ 10 - 3
minigames/among_us/among_us.txt

@@ -1824,6 +1824,10 @@ if(reactor_sabotaged) {
 		goto("checkgame");
 	}
 }
+if(inv_name == "§cFix Wiring") {
+	map.remove(wires_map, player_uuid);
+	goto("checkgame");
+}
 if(inv_name == "§cFix Communications") {
 	map.remove(comms_inv_map, player_uuid);
 	map.remove(comms_fix_map, player_uuid);
@@ -2728,14 +2732,14 @@ if(inv_name == "§cFix Lights") {
 if(inv_name == "§cDownload Data") {
 	if(item.getName(item) == "§rDownload") {
 		inv.setItem(inv, 11, air_item);
-		gosub("download_data_2");
+		goto("download_data_2");
 	}
 	goto("checkgame");
 }
 if(inv_name == "§cUpload Data") {
 	if(item.getName(item) == "§rUpload") {
 		inv.setItem(inv, 11, air_item);
-		gosub("download_data_2");
+		goto("download_data_2");
 	}
 	goto("checkgame");
 }
@@ -3834,6 +3838,7 @@ function killCrewmate(killer, crewmate) {
 	title.setSub(crewmate, concat("by ", killer_color_code, killer_name));
 	title.send(crewmate, "§cKILLED");
 	inv.close(crewmate);
+	$reactor_used = false;
 	sabotage.closedInv(crewmate);
 	player.setSpeed(crewmate, $move_speed * 1.5);
 	//Leiche an Mord-Location platzieren
@@ -4434,7 +4439,9 @@ goto("checkgame");
 p_uuid = list.getIndex(clear_ast_list, 0);
 list.removeIndex(clear_ast_list, 0);
 if(list.contains(clear_ast_list_2, p_uuid)) {
-	goto("checkgame");
+	if(list.getSize(clear_ast_list) == 0) {
+		goto("checkgame");
+	}
 }
 inv = map.get(clear_ast_map_3, p_uuid);
 my_list = map.get(clear_ast_map, p_uuid);

+ 21 - 13
minigames/bedwars/bedwars.txt

@@ -499,18 +499,20 @@ goto("checkgame");
 item_type = item.getType(living.getEquip(player, "hand"));
 if(item_type == "minecraft:gunpowder") {
 	if(!map.contains(warpinghome_tick, player)) {
+		player_uuid = player.getUuid(player);
 		player.removeItem(player, warp_powder);
 		player.giveItem(player, glowstone_dust);
-		map.add(warpinghome_loc, player, entity.getLocation(player));
-		map.add(warpinghome_tick, player, 0);
-		list.add(warpinghome_list, player);
+		map.add(warpinghome_loc, player_uuid, entity.getLocation(player));
+		map.add(warpinghome_tick, player_uuid, 0);
+		list.add(warpinghome_list, player_uuid);
 		sgoto(20, "warp_tick");
 		goto("checkgame");
 	}
 }
 if(item_type == "minecraft:glowstone_dust") {
-	map.remove(warpinghome_loc, player);
-	map.remove(warpinghome_tick, player);
+	player_uuid = player.getUuid(player);
+	map.remove(warpinghome_loc, player_uuid);
+	map.remove(warpinghome_tick, player_uuid);
 	player.removeItem(player, glowstone_dust);
 	player.giveItem(player, warp_powder);
 }
@@ -575,24 +577,29 @@ if(item_type == "minecraft:blaze_rod") {
 goto("checkgame");
 
 @warp_tick
-player = list.getIndex(warpinghome_list, 0);
+player_uuid = list.getIndex(warpinghome_list, 0);
+player = player.get(player_uuid);
+if(player == null) {
+	goto("checkgame");
+}
+list.removeIndex(warpinghome_list, 0);
 player_loc = entity.getLocation(player);
-warp_loc = map.get(warpinghome_loc, player);
+warp_loc = map.get(warpinghome_loc, player_uuid);
 if(warp_loc == null) {
 	goto("checkgame");
 }
 if(loc.distance(player_loc, warp_loc) > 1) {
-	map.remove(warpinghome_loc, player);
-	map.remove(warpinghome_tick, player);
+	map.remove(warpinghome_loc, player_uuid);
+	map.remove(warpinghome_tick, player_uuid);
 	player.removeItem(player, glowstone_dust);
 	player.giveItem(player, warp_powder);
 	goto("checkgame");
 }
-tick = map.get(warpinghome_tick, player) + 1;
+tick = map.get(warpinghome_tick, player_uuid) + 1;
 sound.spawnForPlayer(player, trap_sound, sound_category_ambient);
 if(tick == 5) {
-	map.remove(warpinghome_loc, player);
-	map.remove(warpinghome_tick, player);
+	map.remove(warpinghome_loc, player_uuid);
+	map.remove(warpinghome_tick, player_uuid);
 	player.removeItem(player, glowstone_dust);
 	player_name = player.getName(player);
 	tempteam = map.get(players, player_name);
@@ -600,7 +607,8 @@ if(tick == 5) {
 	entity.teleport(player, location);
 	goto("checkgame");
 }
-map.add(warpinghome_tick, player, tick);
+map.add(warpinghome_tick, player_uuid, tick);
+list.add(warpinghome_list, player_uuid);
 sgoto(20, "warp_tick");
 goto("checkgame");
 

+ 14 - 13
minigames/buttons/buttons.txt

@@ -15,18 +15,6 @@ factor = 0.98; //Faktor, um den tfn vermindert wird
 sgoto(tfn * 20, "gameover");
 gamename = "§2Buttons";
 
-@nextbutton
-while(toclick == lastclick) {
-	toclick = list.getIndex(buttons, math.random(0, list.getSize(buttons) - 1));
-}
-if(direction == "x") {
-	markedloc = loc.mod(toclick, number, 0, 0);
-	block.set(markedloc, markblock);
-} elseif(direction == "z") {
-	markedloc = loc.mod(toclick, 0, 0, number);
-	block.set(markedloc, markblock);
-}
-
 @wait
 wait();
 if(event == "living_pre_hurt") {
@@ -40,6 +28,19 @@ if(player.hasMinigameId(player, script_id)) {
 }
 goto("wait");
 
+@nextbutton
+while(toclick == lastclick) {
+	toclick = list.getIndex(buttons, math.random(0, list.getSize(buttons) - 1));
+}
+if(direction == "x") {
+	markedloc = loc.mod(toclick, number, 0, 0);
+	block.set(markedloc, markblock);
+} elseif(direction == "z") {
+	markedloc = loc.mod(toclick, 0, 0, number);
+	block.set(markedloc, markblock);
+}
+goto("wait");
+
 @player_join
 entity.teleport(player, spawn_loc);
 living.setHealth(player, 20);
@@ -54,7 +55,7 @@ status.addTimed(player, 0, tfn * 20, "Timer");
 display.add(player, 4, "Points: ", text.number(clicked));
 msg.prefix(player, "§2Buttons", "Click the correct button in time.");
 gameover_player = player;
-goto("wait");
+goto("nextbutton");
 
 @living_pre_hurt
 cancel = true;

+ 59 - 103
minigames/jumpnrun/4d/4d_j_r_core.txt

@@ -16,14 +16,20 @@ maxplayers = 1;
 x1 = loc.getX(Edge_1);
 x2 = loc.getX(Edge_2);
 x3 = loc.getX(Edge_3);
+x4 = x3 + x2 - x1;
+Spawn_X = loc.getX(Start_Pos)-0.5;
 
 y1 = loc.getY(Edge_1);
 y2 = loc.getY(Edge_2);
 y3 = loc.getY(Edge_3);
+y4 = y3 + y2 - y1;
+Spawn_Y = loc.getY(Start_Pos);
 
 z1 = loc.getZ(Edge_1);
 z2 = loc.getZ(Edge_2);
 z3 = loc.getZ(Edge_3);
+z4 = z3 + z2 - z1;
+Spawn_Z = loc.getZ(Start_Pos)-0.5;
 
 //XYZ -> WYZ -> XYW -> XYZ
 Dimension_Blocks = list.new();
@@ -148,6 +154,11 @@ if(current_layer[currently_active_dimensions] <= 0 || current_layer[currently_ac
 	current_layer[currently_active_dimensions]--;
 	place_blocks(current_layer);
 }
+if(currently_active_dimensions < 3){
+	current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions]; 
+}else{
+	current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions]; 
+}
 goto("wait");
 
 @add_layer
@@ -163,6 +174,11 @@ if(current_layer[currently_active_dimensions] >= difference_array[currently_acti
 	current_layer[currently_active_dimensions]++;
 	place_blocks(current_layer);
 }
+if(currently_active_dimensions < 3){
+	current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions]; 
+}else{
+	current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions]; 
+}
 goto("wait");
 
 @dimensional_turn_up
@@ -171,41 +187,40 @@ temp_layer = current_layer[currently_active_dimensions];
 temp_player_loc = entity.getLocation(player);
 
 if(currently_active_dimensions == 0){//XYZ to WYZ
-	currently_active_dimensions++;
-	current_layer[1] = math.roundDown(loc.getX(temp_player_loc))-x3;
-	current_layer[4] = current_layer[1];
-	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+	currently_active_dimensions++;//0 = W, 1 = X, 2 = Z
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getX(temp_player_loc))-Spawn_X;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
 }else{
 if(currently_active_dimensions == 1){//WYZ to WYX
 	currently_active_dimensions++;
-	current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
-	current_layer[5] = current_layer[2];
-	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
 }else{
 if(currently_active_dimensions == 2){//WYX to ZYX
 	currently_active_dimensions++;
-	current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
-	current_layer[3] = current_layer[0];
-	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
 }else{
 if(currently_active_dimensions == 3){//ZYX to ZYW
 	currently_active_dimensions++;
-	current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
-	current_layer[4] = current_layer[1];
-	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
 }else{
 if(currently_active_dimensions == 4){//ZYW to XYW
 	currently_active_dimensions++;
-	current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
-	current_layer[5] = current_layer[2];
-	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
 }else{
 if(currently_active_dimensions == 5){//XYW to XYZ
 	currently_active_dimensions = 0;
-	current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
-	current_layer[3] = current_layer[0];
-	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
 }}}}}}
+if(currently_active_dimensions < 3){//um es nicht bei jedem if-else schreiben zu m?ssen, und die layer aktiv zu halten.
+	current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions]; 
+}else{
+	current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions]; 
+}
 place_blocks(current_layer);
 goto("wait");
 
@@ -215,41 +230,40 @@ temp_layer = current_layer[currently_active_dimensions];
 temp_player_loc = entity.getLocation(player);
 
 if(currently_active_dimensions == 0){//XYZ to XYW
-	currently_active_dimensions = 5;
-	current_layer[2] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
-	current_layer[5] = current_layer[2];
-	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+	currently_active_dimensions = 5;//0 = W, 1 = X, 2 = Z, 3 = W, 4 = X, 5 = Z 
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
 }else{
-if(currently_active_dimensions == 1){//XYW to ZYW
+if(currently_active_dimensions == 1){//WYZ to XYZ
 	currently_active_dimensions--;
-	current_layer[1] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
-	current_layer[4] = current_layer[1];
-	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
 }else{
-if(currently_active_dimensions == 2){//ZYW to ZYX
+if(currently_active_dimensions == 2){//WYX to WYZ
 	currently_active_dimensions--;
-	current_layer[0] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
-	current_layer[3] = current_layer[0];
-	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
 }else{
 if(currently_active_dimensions == 3){//ZYX to WYX
 	currently_active_dimensions--;
-	current_layer[2] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
-	current_layer[5] = current_layer[2];
-	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
 }else{
-if(currently_active_dimensions == 4){//WYX to WYZ
+if(currently_active_dimensions == 4){//ZYW to ZYX
 	currently_active_dimensions--;
-	current_layer[1] = math.roundDown(loc.getZ(entity.getLocation(player)))-z3;
-	current_layer[4] = current_layer[1];
-	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-x3, loc.getY(temp_player_loc)-y3, temp_layer+0.5));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
 }else{
-if(currently_active_dimensions == 5){//WYZ to XYZ
+if(currently_active_dimensions == 5){//XYW to ZYW
 	currently_active_dimensions--;
-	current_layer[0] = math.roundDown(loc.getX(entity.getLocation(player)))-x3;
-	current_layer[3] = current_layer[0];
-	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-y3, loc.getZ(temp_player_loc)-z3));
+	current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
 }}}}}}
+if(currently_active_dimensions < 3){
+	current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions]; 
+}else{
+	current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions]; 
+}
 place_blocks(current_layer);
 goto("wait");
 
@@ -264,66 +278,6 @@ function remove_blocks(){
 			}
 		}
 	}
-	/*for(a = 0; a < list.getSize($Dimension_Blocks); a++){
-		temp_array = list.getIndex($Dimension_Blocks, a);//Dimensional_Blocks -> Array[Koords4D,Block]
-		D_Array = temp_array[0];//temp_array[1] ist der Block, bei remove egal. 
-		//D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
-		//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
-		//x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
-		X_place = 0;
-		Y_place = -1;
-		Z_place = 0;
-		if($currently_active_dimensions == 0){//0 = XYZ
-			if(D_Array[3] == current_layer[$currently_active_dimensions]){
-				X_place = D_Array[0];
-				Y_place = D_Array[1];
-				Z_place = D_Array[2];
-			}
-		}else{
-		if($currently_active_dimensions == 1){//1 = WYZ
-			if(D_Array[0] == current_layer[$currently_active_dimensions]){
-				X_place = D_Array[3];
-				Y_place = D_Array[1];	
-				Z_place = D_Array[2];
-
-			}
-		}else{
-		if($currently_active_dimensions == 2){//2 = WYX
-			if(D_Array[2] == current_layer[$currently_active_dimensions]){
-				X_place = D_Array[3];
-				Y_place = D_Array[1];	
-				Z_place = D_Array[0];
-			}
-		}else{
-		if($currently_active_dimensions == 3){//3 = ZYX
-			if(D_Array[3] == current_layer[$currently_active_dimensions]){
-				X_place = D_Array[2];
-				Y_place = D_Array[1];	
-				Z_place = D_Array[0];
-			}
-		}else{
-		if($currently_active_dimensions == 4){//4 = ZYW
-			if(D_Array[0] == current_layer[$currently_active_dimensions]){
-				X_place = D_Array[2];
-				Y_place = D_Array[1];	
-				Z_place = D_Array[3];
-			}
-		}else{
-		if($currently_active_dimensions == 5){//5 = XYW
-			if(D_Array[2] == current_layer[$currently_active_dimensions]){
-				X_place = D_Array[0];
-				Y_place = D_Array[1];	
-				Z_place = D_Array[3];
-			}
-		}}}}}}
-		if(Y_place > -1){
-			X_place = X_place + $x3;
-			Y_place = Y_place + $y3;
-			Z_place = Z_place + $z3;
-			temp_loc = loc.new($games, X_place, Y_place, Z_place);
-			block.set(temp_loc, "minecraft:air");
-		}
-	}*/
 }
 function place_blocks(current_layer){
 	for(a = 0; a < list.getSize($Dimension_Blocks); a++){
@@ -381,7 +335,9 @@ function place_blocks(current_layer){
 			Y_place = Y_place + $y3;
 			Z_place = Z_place + $z3;
 			temp_loc = loc.new($games,X_place,Y_place,Z_place);
-			block.set(temp_loc, temp_array[1]);
+			if(X_place < $x4+1 && Y_place < $y4+1 && Z_place < $z4+1){
+				block.set(temp_loc, temp_array[1]);
+			}
 		}
 	}
 }

+ 411 - 0
minigames/jumpnrun/4d/4d_j_r_core_old.txt

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

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

@@ -0,0 +1,16 @@
+gamesignloc = minigame.getSignLoc("jr_sign_4D_3");
+
+games = world.getGames();
+Edge_1 = loc.new(games,3, 221 ,-1997);//immer kleiner/negativer
+Edge_2 = loc.new(games, 13, 230,-1987);//als Edge_2
+Edge_3 = loc.new(games,3, 232,-1997);//startpunkt zum pasten (negativster wert)
+
+Start_Pos = loc.new(games, 3.5, 232,-1996.5);
+
+loc1 = loc.new(games, 8, 239,-1992);//Koordinaten vom Checkpoint
+loc2 = loc.new(games, 9, 240,-1991);
+
+Layer_amount = 12;
+Layer_difference_X = 0;
+Layer_difference_Y = 11;
+Layer_difference_Z = 0;

+ 1 - 1
minigames/jumpnrun/todesjumpnrun.txt

@@ -198,7 +198,7 @@ for(i = 0; i < list.getSize(checkpoints); i++) {
 	event.addMoveData(location1, location2, 3, -1, player);
 }
 
-gamename = "§cTodesJumpnRun";
+gamename = "§cJR-Death";
 player.blockCommands(player);
 resetplayer(player);
 player.setGamemode(player, "adventure");

+ 1 - 2
minigames/sammelfieber/sfmap1.txt

@@ -1,7 +1,6 @@
 gamesworld = world.get("games");
 spawn_loc = loc.new(gamesworld, -7897, 63, -111, -90, 0);
-gamesignsmap = getScriptVar("gamesigns");
-gamesignloc = map.get(gamesignsmap, "sfsign1");
+gamesignloc = minigame.getSignLoc("sfsign1");
 radius = 200;
 middleloc = loc.new(gamesworld, -7897, 63, -111);
 maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap10.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -3611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign10");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -3611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap11.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -4111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign11");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -4111);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap12.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -4611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign12");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -4611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap13.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -5111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign13");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -5111);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap14.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -5611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign14");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -5611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap15.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -6111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign15");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -6111);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap16.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -6611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign16");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -6611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap17.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -7111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign17");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -7111);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap18.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -7611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign18");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -7611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap19.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -8111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign19");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -8111);
+maxplayers = 1;

+ 1 - 2
minigames/sammelfieber/sfmap2.txt

@@ -1,7 +1,6 @@
 gamesworld = world.get("games");
 spawn_loc = loc.new(gamesworld, -7897, 63, 889, -90, 0);
-gamesignsmap = getScriptVar("gamesigns");
-gamesignloc = map.get(gamesignsmap, "sfsign2");
+gamesignloc = minigame.getSignLoc("sfsign2");
 radius = 200;
 middleloc = loc.new(gamesworld, -7897, 63, 889);
 maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap20.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -8611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign20");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -8611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap21.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -9111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign21");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -9111);
+maxplayers = 1;

+ 1 - 2
minigames/sammelfieber/sfmap3.txt

@@ -1,8 +1,7 @@
 specific_lobby_handling = true;
 gamesworld = world.get("games");
 spawn_loc = loc.new(gamesworld, -6897, 63, -111, -90, 0);
-gamesignsmap = getScriptVar("gamesigns");
-gamesignloc = map.get(gamesignsmap, "sfsign3");
+gamesignloc = minigame.getSignLoc("sfsign3");
 radius = 200;
 middleloc = loc.new(gamesworld, -6897, 63, -111);
 mapname = "Free Settings";

+ 6 - 0
minigames/sammelfieber/sfmap4.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign4");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap5.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -1111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign5");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -1111);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap6.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -1611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign6");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -1611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap7.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -2111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign7");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -2111);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap8.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -2611, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign8");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -2611);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap9.txt

@@ -0,0 +1,6 @@
+gamesworld = world.get("games");
+spawn_loc = loc.new(gamesworld, -7897, 63, -3111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign9");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -3111);
+maxplayers = 1;

+ 1 - 1
minigames/snowgame/snowgame.txt → minigames/snowfight/snowfight.txt

@@ -3,7 +3,7 @@ game_short = "snow";
 game_tab = "§6SNOW";
 specific_lobby_handling = true;
 no_core_reset = true;
-gamename = "§6SnowGame";
+gamename = "§6Snowfight";
 snow_stack = read.item("minecraft:snowball", 16);
 
 colorcodes = map.new();

+ 0 - 0
minigames/snowgame/snowmap1.txt → minigames/snowfight/snowmap1.txt


+ 0 - 0
minigames/snowgame/snowmap2.txt → minigames/snowfight/snowmap2.txt


+ 296 - 0
minigames/tictactoe/tictactoe.txt

@@ -0,0 +1,296 @@
+event.load("block_place");
+event.load("block_click");
+
+games_world = world.getGames();
+
+red_glass_loc = loc.new(games_world, -425, 149, -51);
+yellow_glass_loc = loc.new(games_world, -425, 149, -50);
+green_glass_loc = loc.new(games_world, -425, 149, -49);
+clear_loc = loc.new(games_world, -425, 148, -50);
+
+tic_tac_toe_blocks = list.new();
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -49));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -49));
+
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -50));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -50));
+
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -51));
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -51));
+
+winning_blocks = list.new();
+setFieldToAir();
+
+msg("dev", "§bTicTacToe §rloaded.");
+@wait
+wait();
+if(event == "block_click") {
+	if(block_loc == clear_loc) {
+		setFieldToAir();
+	}
+	elseif(block_loc == red_glass_loc) {
+		player.giveItem(player, read.item("minecraft:red_stained_glass", 32));
+	}
+	elseif(block_loc == yellow_glass_loc) {
+		player.giveItem(player, read.item("minecraft:yellow_stained_glass", 32));
+	}
+	elseif(block_loc == green_glass_loc) {
+		player.giveItem(player, read.item("minecraft:green_stained_glass", 32));
+	}
+	goto("wait");
+}
+if(event == "block_place") {
+	if(is.tictactoe_placeable(block_loc)) {
+		cancel = false;
+		if(is.triplet(block_loc)) {
+			goto("tic_tac_toe_win");
+		}		
+	}
+}
+goto("wait");
+
+@tic_tac_toe_win
+msg.radius("§b3D-TicTacToe", concat(player.getName(player), " won."), entity.getLocation(player), 5);
+list.add(winning_blocks, block_loc);
+for(a = 0; a < list.getSize(winning_blocks); a++) {
+	block.set(list.getIndex(winning_blocks, a), "minecraft:red_wool");
+}
+list.clear(winning_blocks);
+waitfor(60);
+setFieldToAir();
+goto("wait");
+
+
+function is.tictactoe_placeable(block_loc) {
+	if(!list.contains($tic_tac_toe_blocks, block_loc)) {
+		return false;
+	}
+	loc.addY(block_loc, -1);
+	if(block.isAir(block_loc)) {
+		loc.addY(block_loc, 1);
+		return false;
+	}
+	loc.addY(block_loc, 1);
+	return true;
+}
+
+function is.triplet(block_loc) {
+	if(triplet.straight(block_loc)) {
+		return true;
+	}
+	if(triplet.cross(block_loc)) {
+		return true;
+	}
+	return triplet.cross_cross(block_loc);
+}
+
+function triplet.straight(block_loc){
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.addX(block_loc, -2);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addX(block_loc, 1);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addX(block_loc, 2);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addX(block_loc, 1);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addX(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.addY(block_loc, -2);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addY(block_loc, 1);	
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addY(block_loc, 2);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addY(block_loc, 1);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addY(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	loc.addZ(block_loc, -2);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addZ(block_loc, 1);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addZ(block_loc, 2);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addZ(block_loc, 1);
+	temp_block_count = temp_block_count + is.blockType(block_loc);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	return false;
+}
+
+function triplet.cross(block_loc){
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
+	loc.addY(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
+	loc.addY(block_loc, -2);
+	loc.addZ(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 0));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	return false;
+}
+
+function triplet.cross_cross(block_loc){
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, 2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
+	loc.addY(block_loc, 2);
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, -2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	temp_block_count = 1;
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2,-2));
+	temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
+	loc.addY(block_loc, -2);
+	loc.addX(block_loc, -2);
+	loc.addZ(block_loc, 2);
+	if(temp_block_count > 2){
+		return true;
+	}
+	list.clear($winning_blocks);
+	return false;
+}
+
+function t_loc_add(block_loc, x, y, z){
+	loc.add(block_loc,x, y ,z);
+	return block_loc;
+}
+
+function is.blockType(block_loc) {
+	if(block.getType(block_loc) == $block_type) {
+		list.add($winning_blocks, loc.mod(block_loc, 0, 0, 0));
+		return 1;
+	}
+	return 0;
+}
+
+function setFieldToAir() {
+	for(a = 0; a < list.getSize($tic_tac_toe_blocks); a++) {
+		block.set(list.getIndex($tic_tac_toe_blocks, a), "minecraft:air");
+	}
+}

+ 2 - 1
startscript.txt

@@ -12,7 +12,7 @@ script.startNamed("Playerdata", "utils/u_error", "system/player_data", "utils/u_
 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("Copyisland", "system/copyisland");
+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");
 script.startNamed("Harvest", "utils/u_error", "survival/harvest", "utils/u_general");
@@ -41,6 +41,7 @@ script.startNamed("Timber", "utils/u_error", "survival/timber", "utils/u_general
 script.startNamed("Loom", "utils/u_error", "survival/loom", "utils/u_general");
 script.startNamed("Lectern", "utils/u_error", "survival/lectern", "utils/u_general");
 script.startNamed("Mobarena", "utils/u_error", "survival/mobarena", "utils/u_general");
+script.startNamed("TicTacToe", "utils/u_error", "minigames/tictactoe/tictactoe", "utils/u_general");
 script.startNamed("TipLoop", "utils/u_error", "system/tiploop", "utils/u_general");
 script.startNamed("Gamerules", "system/gamerules");
 script.startNamed("Scheduler", "utils/u_error", "system/scheduler", "utils/u_general");

+ 1 - 0
survival/trader.txt

@@ -119,6 +119,7 @@ if(event == "entity_click") {
 		shop.addOffer(shop, gem3, read.item("km:coin_gold", 1), 999);
 		shop.addOffer(shop, gem2, read.item("km:coin_gold", 2), 999);
 		shop.addOffer(shop, gem, read.item("km:coin_gold", 5), 999);
+		shop.addDoubleOffer(shop, read.item("km:coin_gold", 64), read.item("km:coin_gold", 64), read.item("minecraft:trident"), 999);
 		//shop.addOffer(shop, read.item("km:coin_gold", 1), gem3, 999);
 		//shop.addOffer(shop, read.item("km:coin_gold", 2), gem2, 999);
 		//shop.addOffer(shop, read.item("km:coin_gold", 5), gem, 999);

+ 105 - 22
system/commands.txt

@@ -19,8 +19,10 @@ waitfor(5); //Verhindert Endlos-Schleife durch "/start commands"
 
 setCommandHelps();
 command.clear();
-//Games
+
+//--- Register commands not shown on /help here ---
 command.add("hack");
+//Games
 command.add("nextplayer");
 command.add("invstats");
 command.add("topinvstats");
@@ -44,9 +46,8 @@ command.add("infopoint12");
 //Vanilla überschreiben
 command.add("help");
 command.add("butcher");
-command.add("yeet");
-command.add("kill");
 
+//--- Register commands shown on /help here ---
 alias_map = map.new();
 command_list = list.new();
 command_map = map.new();
@@ -164,7 +165,7 @@ command.register("warn", "Warns a player");
 command.register("warp", "Warp-Commands");
 command.register("weather", "Weather-Commands");
 command.register("world", "World-Commands");
-command.register("yeet", "Throws the Player");
+command.register("yeet", "Throws you in sight");
 
 command.registerAlias("afklo", "afk");
 command.registerAlias("itemdb", "iteminfo");
@@ -193,7 +194,6 @@ command.registerAlias("hub", "leave");
 command.registerAlias("fuckit", "giveup");
 command.registerAlias("ram", "memory");
 command.registerAlias("thor", "lightning");
-command.registerAlias("kill", "suicide");
 
 composter_par = particle.get("composter");
 wall_signs_tag = block.getTag("minecraft:wall_signs");
@@ -294,6 +294,7 @@ money.setBoostFactor(1);
 
 sgoto(100, "coordsloop");
 sgoto(1200, "afk_checker_loop");
+sgoto(1200, "minute_loop");
 
 lag_list = list.new();
 clan_invitations = list.new();
@@ -422,8 +423,9 @@ inv.setItem(skip_night_inv, 2, read.item("km:cross_red", 1, "§fNo"));
 skip_night_inv_id = inv.getId(skip_night_inv);
 
 vote_inv = inv.new("222222222");
-inv.setItem(vote_inv, 0, read.item("km:coin_gold", 1, "§fMoney Booster", "Doubles incoming money for 10 minutes.", "Cost: 6 VP"));
-inv.setItem(vote_inv, 1, read.item("minecraft:jukebox", 1, "§fRick is in the house", "Rickroles every player on the server.", "Cost: 2 VP"));
+inv.setItem(vote_inv, 0, read.item("km:coin_gold", 1, "§aMoney Booster", "§fCost: §e6 VP", "Doubles incoming money for 10 minutes."));
+inv.setItem(vote_inv, 1, read.item("minecraft:jukebox", 1, "§aRick is in the house", "§fCost: §e2 VP", "Rickroles every player on the server."));
+updateVoteInv();
 vote_inv_id = inv.getId(vote_inv);
 
 ha_tool = read.item("km:guild_block", 1, "§cHawkeye Tool", "Hawkeye Tool");
@@ -595,10 +597,25 @@ if(event == "vote") {
 		player.addVotePoints(p_id, 1);
 		msg.prefix("online", prefix_vote, concat("§b", name, "§r hat gerade gevoted!"));
 		if(from == "minecraft-server.eu") {
-			msg("online", "[", prefix_vote, "§r] " , text.link("https://minecraft-server.eu/vote/index/2227F", "https://minecraft-server.eu/vote/index/2227F"));
+			msg("online", "[", prefix_vote, "§r] " , text.link("minecraft-server.eu", "https://minecraft-server.eu/vote/index/2227F"));
 		} else {
-			msg("online", "[", prefix_vote, "§r] " , text.link("https://minecraft-server-list.com/server/478200/vote/", "https://minecraft-server-list.com/server/478200/vote/"));
+			msg("online", "[", prefix_vote, "§r] " , text.link("minecraft-server-list.com", "https://minecraft-server-list.com/server/478200/vote/"));
+		}
+		now_time = time.getMillis();
+		new_streak = player.getVoteStreak(p_id);
+		if(isFollowingDay(now_time, player.getLastVoteTime(p_id))) {
+			new_streak++;
 		}
+		if(new_streak == 14) {
+			new_streak = 0;
+			msg.survival(prefix_vote, concat(player.getName(p_uuid), " reached a votestreak of 14 and each player online (survival) gets a sapphire."));
+			sapphire = item.getSapphire();
+			world.giveItem(world.getOverWorld(), sapphire);
+			world.giveItem(world.getTheNether(), sapphire);
+			world.giveItem(world.getTheEnd(), sapphire);
+		}
+		player.setVoteStreak(p_id, new_streak);
+		player.setLastVoteTime(p_id, now_time);
 	}
 	goto("wait");
 }
@@ -842,7 +859,7 @@ if(event == "inv_click") {
 				goto("wait");
 			}
 			player.setVotePoints(player, vp - 6);
-			msg("online", "§6§k#§rMoney Booster activated!!!§6§k#");
+			msg.online(prefix_vote, concat(player.getName(player), " activated §dMoney Booster§r."));
 			money.setBoostFactor(2);
 			status.addTimed("online", 56, 12000, "Money Booster");
 			sgoto(12000, "resetMoneyBoost");
@@ -854,10 +871,22 @@ if(event == "inv_click") {
 				msg.prefix(player, prefix_commands, "Not enough vote points.");
 				goto("wait");
 			}
+			msg.online(prefix_vote, concat(player.getName(player), " activated §dRick is in the house§r."));
 			player.setVotePoints(player, vp - 2);
 			rickIndex = 0;
 			goto("RickRole_play");
 		}
+		if(inv_slot == 2) {
+			vp = player.getVotePoints(player);
+			if(vp < 1) {
+				msg.prefix(player, prefix_commands, "Not enough vote points.");
+				goto("wait");
+			}
+			player.setVotePoints(player, vp - 1);
+			increaseHomeBoost();
+			inv.update(player);
+			msg.online(prefix_vote, concat(player.getName(player), " spend their votepoints to §dMore Homes§r."));
+		}
 		goto("wait");
 	}
 	if(inv_id == skip_night_inv_id) {
@@ -1215,6 +1244,7 @@ if(arg0 == "send") {
 	living.setEquip(player, "hand", item.getAir());
 	mailbox.setItem(to_player_id, index, item);
 	msg.send(player, to_name, prefix_commands, concat(player.getName(player), " sent you items to your mailbox."), true);
+	msg.prefix(player, prefix_commands, "Item sent to player.");
 	goto("wait");
 }
 if(arg0 == "show") {
@@ -2093,12 +2123,12 @@ goto("wait");
 @vote
 link1 = "https://minecraft-server.eu/vote/index/2227F";
 link2 = "https://minecraft-server-list.com/server/478200/vote/";
-msg(player, "[", prefix_vote, "§r] ", text.link(link1, link1));
-msg(player, "[", prefix_vote, "§r] ", text.link(link2, link2));
+msg(player, "[", prefix_vote, "§r] ", text.link("minecraft-server.eu", link1));
+msg(player, "[", prefix_vote, "§r] ", text.link("minecraft-server-list.com", link2));
 goto("wait");
 
 @voteshop
-inv.open(vote_inv, player, concat("Your vote points: §6", text.number(player.getVotePoints(player))));
+inv.open(vote_inv, player, concat("Your vote points: §6", text.number(player.getVotePoints(player)), " §rStreak: §6", text.number(player.getVoteStreak(player))));
 goto("wait");
 
 @voxel
@@ -2560,6 +2590,20 @@ if(size > 0) {
 }
 goto("wait");
 
+@minute_loop
+cal = time.new(time.getMillis());
+timer_day = time.getDay(cal);
+if(old_timer_day == null) {
+	old_timer_day = timer_day;
+}
+if(timer_day != old_timer_day) {
+	old_timer_day = timer_day;
+	//Tageswechsel
+	decreaseHomeBoost();
+}
+sgoto(1200, "minute_loop");
+goto("wait");
+
 @afk_checker_loop
 online_list = players.toList();
 iter = list.iterator(online_list);
@@ -2669,8 +2713,8 @@ if(size < 0 || size > 1) {
 	goto("wait");
 }
 if(size == 1) {
-	if(!perm.has(player, "kill.other")) {
-		perm.no(player, "kill.other");
+	if(!perm.has(player, "suicide.other")) {
+		perm.no(player, "suicide.other");
 		goto("wait");
 	}
 	affectedname = list.getIndex(args, 0);
@@ -5309,6 +5353,8 @@ if(arg0 == "expand") {
 	x2 = plot.getMaxX(plot);
 	y2 = plot.getMaxY(plot);
 	z2 = plot.getMaxZ(plot);
+	old_length = math.abs(x1 - x2) + 1;
+	old_width = math.abs(z1 - z2) + 1;
 	if(direction == "east") {
 		old_x2 = x2;
 		x2 += anzahl;
@@ -5346,7 +5392,7 @@ if(arg0 == "expand") {
 		//Calc costs
 		length = math.abs(x1 - x2) + 1;
 		width = math.abs(z1 - z2) + 1;
-		snuvis = plot.calcCost(world, length, width);
+		snuvis = plot.calcCost(world, length, width) - plot.calcCost(world, old_length, old_width);
 		if(!hasEnoughMoney(player, snuvis)) {
 			msg.prefix(player, prefix_plot, concat("You'll need §6", text.number(snuvis), "§r snuvis for this."));
 			goto("wait");
@@ -6396,6 +6442,7 @@ if(arg0 == "set") {
 	} else {
 		max_homes = 5;
 	}
+	max_homes += getAdditionalVoteHomes();
 	if(home_amount >= max_homes) {
 		msg.prefix(player, prefix_commands, concat("You can only set ", text.number(max_homes), " homes."));
 		goto("wait");
@@ -8556,7 +8603,6 @@ function setCommandHelps() {
 	command.addIgnored("help");
 	command.addIgnored("ban");
 	command.addIgnored("kick");
-	command.addIgnored("kill");
 	command.addIgnored("gamemode");
 	command.addIgnored("enchant");
 	command.addIgnored("jumpto");
@@ -8768,8 +8814,8 @@ function setCommandHelps() {
 	addStatsGameHelp(help, "JR-Endless");
 	addStatsGameHelp(help, "Rebuild");
 	addStatsGameHelp(help, "FastBridge");
-	addStatsGameHelp(help, "SnowGame");
-	addStatsGameHelp(help, "TJR");
+	addStatsGameHelp(help, "Snowfight");
+	addStatsGameHelp(help, "JR-Death");
 	addStatsGameHelp(help, "JR-Ice");
 	addStatsGameHelp(help, "JR-Rooms");
 	addStatsGameHelp(help, "Letters");
@@ -8871,9 +8917,8 @@ function setCommandHelps() {
 	commandhelp.addAlias(help, "mimimi", "help");
 	
 	help = command.newHelp("suicide", "suicide");
-	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "kill.other"));
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "suicide.other"));
 	command.addHelp(help);
-	commandhelp.addAlias(help, "kill", "suicide");
 	
 	help = command.newHelp("tempfly", "tempfly");
 	helpArg0 = command.newHelpSpecial("Player", "player");
@@ -8885,7 +8930,7 @@ function setCommandHelps() {
 	helpArg0 = command.newHelpSpecial("Player", "player");
 	helpArg1 = command.newHelpInt("days", 0, 100);
 	helpArg2 = command.newHelpInt("hours", 0, 100);
-	helpArg3 = command.newHelpInt("minutes", 1, 100);
+	helpArg3 = command.newHelpInt("minutes", 0, 100);
 	command.addHelpChild(helpArg3, command.newHelpString("reason", true));
 	command.addHelpChild(helpArg2, helpArg3);
 	command.addHelpChild(helpArg1, helpArg2);
@@ -8893,6 +8938,11 @@ function setCommandHelps() {
 	command.addHelpChild(help, helpArg0);
 	command.addHelp(help);
 	
+	help = command.newHelp("unban", "unban");
+	command.addHelpChild(help, command.newHelpSpecial("Player", "player"));
+	command.addHelp(help);
+	commandhelp.addAlias(help, "pardon", "unban");
+	
 	help = command.newHelp("ban", "ban");
 	helpArg0 = command.newHelpSpecial("Player", "player");
 	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
@@ -10292,4 +10342,37 @@ function mailbox.show(to_player, player_id) {
 		inv.setItem(inv, i, item);
 	}
 	inv.open(inv, to_player, concat("Mailbox from ", player.getNameFromId(player_id)));
+}
+
+function updateVoteInv() {
+	inv.setItem($vote_inv, 2, read.item("km:skill20", 1, "§aMore Homes", "§fCost: §e1 VP", concat("§fCounter: §e", text.number(getHomeBoost())), "Every 20 VP the possible homes increase by one. Counter automatically shrinks by one every day."));
+}
+
+function getAdditionalVoteHomes() {
+	return math.roundDown(getHomeBoost() / 20);
+}
+
+function getHomeBoost() {
+	config = getScriptVar("server_config");
+	return config.getDouble(config, "homeBoostPoints", 0);
+
+}
+
+function increaseHomeBoost() {
+	config = getScriptVar("server_config");
+	points = config.getDouble(config, "homeBoostPoints", 0) + 1;
+	config.set(config, "homeBoostPoints", points);
+	config.saveAsync(config);
+	updateVoteInv();
+}
+
+function decreaseHomeBoost() {
+	config = getScriptVar("server_config");
+	points = config.getDouble(config, "homeBoostPoints", 0) - 1;
+	if(points < 0) {
+		points = 0;
+	}
+	config.set(config, "homeBoostPoints", points);
+	config.saveAsync(config);
+	updateVoteInv();
 }

+ 23 - 4
system/gamecenter.txt

@@ -55,6 +55,24 @@ minigame.addSign("rmmaploc5", true, loc.new(gamesworld, -411, 157, -43), "miniga
 minigame.addSign("sfsign1", true, loc.new(gamesworld, -398, 158, -47), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap1", true);
 minigame.addSign("sfsign2", true, loc.new(gamesworld, -398, 157, -47), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap2", true);
 minigame.addSign("sfsign3", true, loc.new(gamesworld, -399, 158, -47), "minigames/sammelfieber/sammelfieber", "minigames/sammelfieber/sfmap3", false);
+minigame.addSign("sfsign4", true, loc.new(gamesworld, -423, 153, -78), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap4", true);
+minigame.addSign("sfsign5", true, loc.new(gamesworld, -423, 153, -79), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap5", true);
+minigame.addSign("sfsign6", true, loc.new(gamesworld, -423, 153, -80), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap6", true);
+minigame.addSign("sfsign7", true, loc.new(gamesworld, -423, 152, -78), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap7", true);
+minigame.addSign("sfsign8", true, loc.new(gamesworld, -423, 152, -79), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap8", true);
+minigame.addSign("sfsign9", true, loc.new(gamesworld, -423, 152, -80), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap9", true);
+minigame.addSign("sfsign10", true, loc.new(gamesworld, -423, 151, -78), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap10", true);
+minigame.addSign("sfsign11", true, loc.new(gamesworld, -423, 151, -79), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap11", true);
+minigame.addSign("sfsign12", true, loc.new(gamesworld, -423, 151, -80), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap12", true);
+minigame.addSign("sfsign13", true, loc.new(gamesworld, -413, 153, -80), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap13", true);
+minigame.addSign("sfsign14", true, loc.new(gamesworld, -413, 153, -79), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap14", true);
+minigame.addSign("sfsign15", true, loc.new(gamesworld, -413, 153, -78), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap15", true);
+minigame.addSign("sfsign16", true, loc.new(gamesworld, -413, 152, -80), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap16", true);
+minigame.addSign("sfsign17", true, loc.new(gamesworld, -413, 152, -79), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap17", true);
+minigame.addSign("sfsign18", true, loc.new(gamesworld, -413, 152, -78), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap18", true);
+minigame.addSign("sfsign19", true, loc.new(gamesworld, -413, 151, -80), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap19", true);
+minigame.addSign("sfsign20", true, loc.new(gamesworld, -413, 151, -79), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap20", true);
+minigame.addSign("sfsign21", true, loc.new(gamesworld, -413, 151, -78), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap21", true);
 minigame.addSign("buttonssign1", true, loc.new(gamesworld, -399, 158, -65), "minigames/buttons/buttons", "minigames/buttons/buttonsmap1", true);
 minigame.addSign("buttonssign2", true, loc.new(gamesworld, -398, 158, -65), "minigames/buttons/buttons", "minigames/buttons/buttonsmap2", true);
 minigame.addSign("spleefsign1", true, loc.new(gamesworld, -419, 156, -40), "minigames/spleef/spleef", "minigames/spleef/spleefmap1", false);
@@ -70,9 +88,9 @@ minigame.addSign("invertingclsign1", true, loc.new(gamesworld, -396, 157, -57),
 minigame.addSign("invertingclsign2", true, loc.new(gamesworld, -396, 157, -56), "minigames/inverting/inverting", "minigames/inverting/invertingclmap2", true);
 minigame.addSign("invertingclsign3", true, loc.new(gamesworld, -396, 157, -55), "minigames/inverting/inverting", "minigames/inverting/invertingclmap3", true);
 //minigame.addSign("ctfsign1", false, loc.new(gamesworld, 13, 75, 64), "minigames/capturetheflag/capturetheflag", "minigames/capturetheflag/ctfmap1", false);
-minigame.addSign("jrmap", true, loc.new(gamesworld, -396, 157, -51), null, "minigames/jumpnrun/jumpnrun", true);
+minigame.addSign("jrmap", true, loc.new(gamesworld, -396, 158, -51), null, "minigames/jumpnrun/jumpnrun", true);
 minigame.addSign("parcoursign1", true, loc.new(gamesworld, -396, 158, -50), "minigames/parcour/parcour", "minigames/parcour/parcour_map1", true);
-minigame.addSign("tjrsign", true, loc.new(gamesworld, -396, 158, -51), null, "minigames/jumpnrun/todesjumpnrun", true);
+minigame.addSign("tjrsign", true, loc.new(gamesworld, -396, 157, -51), null, "minigames/jumpnrun/todesjumpnrun", true);
 minigame.addSign("jr_sign_ice", true, loc.new(gamesworld, -396, 157, -49), "minigames/jumpnrun/jr_core", "minigames/jumpnrun/jr_map_ice", true);
 minigame.addSign("jr_sign_room", true, loc.new(gamesworld, -396, 157, -50), "minigames/jumpnrun/jr_core", "minigames/jumpnrun/jr_map_rooms", true);
 minigame.addSign("fastbridgesign1", true, loc.new(gamesworld, -413, 157, -40), "minigames/fastbridge/fastbridge", "minigames/fastbridge/region_fastbridgemap1", false);
@@ -86,12 +104,13 @@ minigame.addSign("hideandseeksign2", true, loc.new(gamesworld, -414, 158, -40),
 minigame.addSign("shoppingsign1", true, loc.new(gamesworld, -415, 158, -40), "minigames/shoppingchaos/shoppingchaos", "minigames/shoppingchaos/shopping_map1", false);
 minigame.addSign("mengersign1", true, loc.new(gamesworld, -405, 157, -75), "minigames/mengerrun/mengerrun", "minigames/mengerrun/menger_map1", false);
 minigame.addSign("leapfrogsign1", true, loc.new(gamesworld, -399, 157, -65), "minigames/leapfrog/leapfrog", "minigames/leapfrog/leapfrogmap1", true);
-minigame.addSign("snowsign1", true, loc.new(gamesworld, -419, 158, -40), "minigames/snowgame/snowgame", "minigames/snowgame/snowmap1", false);
-minigame.addSign("snowsign2", true, loc.new(gamesworld, -420, 158, -40), "minigames/snowgame/snowgame", "minigames/snowgame/snowmap2", false);
+minigame.addSign("snowsign1", true, loc.new(gamesworld, -419, 158, -40), "minigames/snowfight/snowfight", "minigames/snowfight/snowmap1", false);
+minigame.addSign("snowsign2", true, loc.new(gamesworld, -420, 158, -40), "minigames/snowfight/snowfight", "minigames/snowfight/snowmap2", false);
 //minigame.addSign("damesign1", false, loc.new(gamesworld, -411, 158, -44), "minigames/dame/dame", "minigames/dame/dame_map1", false);
 minigame.addSign("among_us_sign1", true, loc.new(gamesworld, -417, 157, -41), "minigames/among_us/among_us", "minigames/among_us/among_us_map1", false);
 minigame.addSign("jr_sign_4D_1", true, loc.new(gamesworld, -396, 156, -51), "minigames/jumpnrun/4d/4d_j_r_core", "minigames/jumpnrun/4d/4d_j_r_map1", true);
 minigame.addSign("lab_sign_4D_2", true, loc.new(gamesworld, -396, 156, -50), "minigames/jumpnrun/4d/4d_j_r_core", "minigames/jumpnrun/4d/4d_j_r_map2", true);
+minigame.addSign("jr_sign_4D_3", true, loc.new(gamesworld, -396, 156, -49), "minigames/jumpnrun/4d/4d_j_r_core", "minigames/jumpnrun/4d/4d_j_r_map3", true);
 setScriptVar("gamesigns", gamesignsmap);
 
 games_inv = inv.new("333333333333333333333333333");

+ 1 - 1
system/hawkeye.txt

@@ -91,8 +91,8 @@ goto("wait");
 
 function hawkeye.addEntry(event, player, location, text) {
 	event_id = hawkeye.getEventId(event);
+	modTimer(-15);
 	stmt = databank.prepare("INSERT INTO hawkeye (player_id, event, world, x, y, z, time, text) VALUES (?,?,?,?,?,?,?,?)");
-	modTimer(-5);
 	databank.setInt(stmt, 1, player.getId(player));
 	databank.setInt(stmt, 2, event_id);
 	databank.setString(stmt, 3, world.getName(loc.getWorld(location)));

+ 4 - 5
system/perms.txt

@@ -104,7 +104,6 @@ perm.registerGroup(2, "entities");
 perm.registerGroup(2, "tag");
 perm.registerGroup(2, "team");
 perm.registerGroup(2, "mailbox.other");
-perm.registerGroup(2, "suicide");
 perm.registerGroup(2, "advancement");
 perm.registerGroup(2, "experience");
 perm.registerGroup(2, "particle");
@@ -176,7 +175,8 @@ perm.registerGroup(2, "jail");
 perm.registerGroup(2, "unjail");
 perm.registerGroup(2, "more");
 perm.registerGroup(2, "more.other");
-perm.registerGroup(2, "kill.other");
+perm.registerGroup(2, "kill");
+perm.registerGroup(2, "suicide.other");
 perm.registerGroup(2, "hat");
 perm.registerGroup(2, "repair");
 perm.registerGroup(2, "pvp.other");
@@ -225,7 +225,6 @@ perm.registerGroup(3, "warp.create");
 perm.registerGroup(3, "perm");
 perm.registerGroup(3, "perm.toggle");
 perm.registerGroup(3, "tip");
-perm.registerGroup(3, "suicide");
 perm.registerGroup(3, "setblock");
 perm.registerGroup(3, "summon");
 perm.registerGroup(3, "human");
@@ -272,7 +271,6 @@ perm.registerGroup(5, "var");
 perm.registerGroup(5, "tip");
 perm.registerGroup(5, "script");
 perm.registerGroup(5, "script.error");
-perm.registerGroup(5, "suicide");
 perm.registerGroup(5, "iteminfo");
 perm.registerGroup(5, "databank");
 perm.registerGroup(5, "start");
@@ -354,7 +352,6 @@ perm.registerGroup(12, "inv.reload");
 perm.registerGroup(12, "feed");
 perm.registerGroup(12, "mailbox.other");
 perm.registerGroup(12, "mute");
-perm.registerGroup(12, "suicide");
 perm.registerGroup(12, "quest");
 perm.registerGroup(12, "unmute");
 perm.registerGroup(12, "heal");
@@ -369,6 +366,8 @@ perm.registerGroup(12, "setmessage");
 perm.registerGroup(12, "enchant");
 perm.registerGroup(12, "memory");
 perm.registerGroup(12, "silentkick");
+perm.registerGroup(12, "kill");
+perm.registerGroup(12, "suicide.other");
 perm.registerGroup(12, "kick");
 perm.registerGroup(12, "warn");
 perm.registerGroup(12, "ban");

+ 4 - 4
system/ranklist.txt

@@ -14,8 +14,8 @@ ranking.add("§b", "BedWars", "bw", "bwranks", "All Kills", "DESC", null);
 ranking.add("§c", "RageMode", "rm", "rmranks", "All Kills", "DESC", null);
 ranking.add("§5", "Rebuild", "rebuild", "rebuildranks", "All solved patterns", "DESC", null);
 ranking.add("§d", "FastBridge", "fb", "fastbridgeranks", "Points Record", "DESC", null);
-ranking.add("§6", "SnowGame", "snow", "snowranks", "Kills", "DESC", null);
-ranking.add("§6", "TJR", "tjr", "tjrranks", "Checkpoints | Time", "DESC", "ASC");
+ranking.add("§6", "Snowfight", "snow", "snowranks", "Kills", "DESC", null);
+ranking.add("§c", "JR-Death", "tjr", "tjrranks", "Checkpoints | Time", "DESC", "ASC");
 ranking.add("§a", "JR-Ice", "ijr", "icejrranks", "Checkpoints | Time", "DESC", "ASC");
 ranking.add("§a", "JR-Rooms", "jr_rooms", "jr_room_ranks", "Checkpoints | Time", "DESC", "ASC");
 ranking.add("§a", "JR-Endless", "jr", "jumpranks", "Points Record", "DESC", null);
@@ -235,7 +235,7 @@ function showPlayerStats(player, gamename, table, p_name) {
 			sendTimedRank(player, p_name, rang, points);
 		} elseif(gamename == "Parcour") {
 			sendMsTimedRank(player, p_name, rang, points);
-		} elseif(gamename == "TJR") {
+		} elseif(gamename == "JR-Death") {
 			points--;
 			sec_points = a[2];
 			sendJrRank(player, p_name, rang, points, sec_points);
@@ -272,7 +272,7 @@ function showTopStats(player, gamename, table) {
 			sendTimedRank(player, p_name, rang, points);
 		} elseif(gamename == "Parcour") {
 			sendMsTimedRank(player, p_name, rang, points);
-		} elseif(gamename == "TJR") {
+		} elseif(gamename == "JR-Death") {
 			points--;
 			sec_points = a[2];
 			sendJrRank(player, p_name, rang, points, sec_points);

+ 7 - 29
utils/u_games.txt

@@ -452,45 +452,23 @@ function ranking.register(rankingtable) {
 	databank.workerExecute(databank.prepare(concat("CREATE TABLE IF NOT EXISTS ", rankingtable, " (player_id INT NOT NULL PRIMARY KEY, points INT NOT NULL, sec_points INT);")));
 }
 
-//Gibt zurück, ob der Spieler bereits im Ranking gelistet ist
-function ranking.isPlayerRegisterd(rankingtable, player_id) {
-	stmt = databank.prepare(concat("SELECT points FROM ", rankingtable, " WHERE player_id = ?;"));
-	databank.setInt(stmt, 1, player_id);
-	result = databank.execute(stmt);
-	if(databank.next(result)) {
-		registered = true;
-	} else {
-		registered = false;
-	}
-	databank.close(result);
-	databank.close(stmt);
-	return registered;
-}
-
 //Setzt die Rekord-Punkte eines Spielers
 function ranking.setPoints(rankingtable, player_or_id, points) {
-	player_id = player.getValidId(player_or_id);
-	if(ranking.isPlayerRegisterd(rankingtable, player_id)) {
-		stmt = databank.prepare(concat("UPDATE ", rankingtable, " SET points = ? WHERE player_id = ?;"), false);
-	} else {
-		stmt = databank.prepare(concat("INSERT INTO ", rankingtable, " (points, player_id) VALUES (?,?);"), false);
-	}
+	stmt = databank.prepare(concat("INSERT INTO ", rankingtable, " (points, player_id) VALUES (?,?) ON DUPLICATE KEY UPDATE points = ?;"), false);
 	databank.setInt(stmt, 1, points);
-	databank.setInt(stmt, 2, player_id);
+	databank.setInt(stmt, 2, player.getValidId(player_or_id));
+	databank.setInt(stmt, 3, points);
 	databank.workerExecute(stmt);
 }
 
 //Setzt die primären und sekundären Rekord-Punkte eines Spielers
 function ranking.setSecPoints(rankingtable, player_or_id, points, sec_points) {
-	player_id = player.getValidId(player_or_id);
-	if(ranking.isPlayerRegisterd(rankingtable, player_id)) {
-		stmt = databank.prepare(concat("UPDATE ", rankingtable, " SET points = ?, sec_points = ? WHERE player_id = ?;"), false);
-	} else {
-		stmt = databank.prepare(concat("INSERT INTO ", rankingtable, " (points, sec_points, player_id) VALUES (?,?,?);"), false);
-	}
+	stmt = databank.prepare(concat("INSERT INTO ", rankingtable, " (points, sec_points, player_id) VALUES (?,?,?) ON DUPLICATE KEY UPDATE points = ?, sec_points = ?;"), false);
 	databank.setInt(stmt, 1, points);
 	databank.setInt(stmt, 2, sec_points);
-	databank.setInt(stmt, 3, player_id);
+	databank.setInt(stmt, 3, player.getValidId(player_or_id));
+	databank.setInt(stmt, 4, points);
+	databank.setInt(stmt, 5, sec_points);
 	databank.workerExecute(stmt);
 }
 

+ 40 - 2
utils/u_general.txt

@@ -252,6 +252,14 @@ function getTimeString(millis) {
 	return timestring;
 }
 
+function isFollowingDay(timestamp_1, timestamp_2) {
+	cal_1 = time.new(timestamp_1);
+	time.nextDay(cal_1);
+	mid_1 = time.from(cal_1);
+	diff = timestamp_2 - mid_1;
+	return diff > 0 && diff < 86400000;
+}
+
 function player.hasMinigame(player) {
 	id_set = player.getMinigameIds(player);
 	if(set.getSize(id_set) > 0)  {
@@ -414,11 +422,11 @@ function world.addTimedStatus(world, index, time, message) {
 		for(i = 0; i < list.getSize(worldlist); i++) {
 			status.addTimed(list.getIndex(worldlist, i), index, time, message);
 		}
-		worldlist = players.toWorldList(world.get("the_end"));
+		worldlist = players.toWorldList(world.getTheEnd());
 		for(i = 0; i < list.getSize(worldlist); i++) {
 			status.addTimed(list.getIndex(worldlist, i), index, time, message);
 		}
-		worldlist = players.toWorldList(world.get("the_nether"));
+		worldlist = players.toWorldList(world.getTheNether());
 		for(i = 0; i < list.getSize(worldlist); i++) {
 			status.addTimed(list.getIndex(worldlist, i), index, time, message);
 		}
@@ -430,6 +438,14 @@ function world.addTimedStatus(world, index, time, message) {
 	}
 }
 
+function world.giveItem(world, item) {
+	world_list = players.toWorldList(world);
+	iter = iterator(world_list);
+	while(hasNext(iter)) {
+		player.safeGiveItem(next(iter), item);
+	}
+}
+
 //--------------------------------------------------
 //Inv-Utils
 //--------------------------------------------------
@@ -2211,6 +2227,28 @@ function player.setTipLoop(player_or_id, boolean) {
 	config.saveAsync(config);
 }
 
+function player.setVoteStreak(player_or_id, millis) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "votestreak", millis);
+	config.saveAsync(config);
+}
+
+function player.getVoteStreak(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getDouble(config, "votestreak", 0);
+}
+
+function player.setLastVoteTime(player_or_id, millis) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "lastvotetime", millis);
+	config.saveAsync(config);
+}
+
+function player.getLastVoteTime(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getDouble(config, "lastvotetime", 0);
+}
+
 function player.setVotePoints(player_or_id, amount) {
 	config = playerdata.getSurvival(player_or_id);
 	config.set(config, "votepoints", amount);