allow_extra_data_values = true; max_brush_radius = 5; //use-inventory (not working): enable = false; allow_override = true; creative_mode_overrides = false; //super-pickaxe (not working): drop_items = true; many_drop_items = false; max_super_pickaxe_size = 5; //navigation-wand (not working): navigation_item = 345; max_distance = 100; //history (not working): size = 15; expiration = 10; //(working) coloured_messages = false; wand_item = 271; toggle_wand = false; show_help_on_first_use = true; /*############################## VARIABLES ##############################*/ var first_use = false; var blocks = [["air", 0], ["stone", 1], ["grass", 2], ["dirt", 3], ["cobblestone", 4], ["wood", 5], ["planks", 5], ["sapling", 6], ["bedrock", 7], ["water", 8], ["flowing_water", 8], ["stationary_water", 9], ["lava", 10], ["flowing_lava", 10], ["stationary_water", 11], ["sand", 12], ["gravel", 13], ["gold_ore", 14], ["iron_ore", 15], ["coal_ore", 16], ["log", 17], ["leaves", 18], ["sponge", 19], ["glass", 20], ["lapis_lazuli_ore", 21], ["lapis_ore", 21], ["lapis_lazuli_block", 22], ["lapis_block", 22], ["sandstone", 24], ["bed", 26], ["powered_rail", 27], ["golden_rail", 27], ["web", 30], ["long_grass", 31], ["tallgrass", 31], ["dead_bush", 32], ["deadbush", 32], ["cloth", 35], ["wool", 35], ["yellow_flower", 37], ["red_flower", 38], ["brown_mushroom", 39], ["red_mushroom", 40], ["gold_block", 41], ["iron_block", 42], ["double_step", 43], ["double_stone_slab", 43], ["step",44 ], ["stone_slab", 44], ["brick", 45], ["brick_block", 45], ["tnt", 46], ["bookcase", 47], ["bookshelf", 47], ["mossy_cobblestone", 48], ["obsidian", 49], ["torch", 50], ["fire", 51], ["mob_spawner", 52], ["wooden_stairs", 53], ["oak_stairs", 53], ["oak_wood_stairs", 53], ["chest", 54], ["diamond_ore", 56], ["diamond_block", 57], ["workbench", 58], ["crafting_table", 58], ["crops", 59], ["wheat", 59], ["soil", 60], ["farmland", 60], ["furnace", 61], ["burning_furnace", 62], ["lit_furnace", 62], ["sign_post", 63], ["standing_sign", 63], ["wooden_door", 64], ["ladder", 65], ["minecart_tracks", 66], ["rails", 66], ["cobblestone_stairs", 67], ["stone_stairs", 67], ["wall_sign", 68], ["iron_door", 71], ["redstone_ore", 73], ["unlit_redstone_ore", 73], ["glowing_redstone_ore", 74], ["lit_redstone_ore", 74], ["snow_layer", 78], ["snow", 78], ["ice", 79], ["snow_block", 80], ["cactus", 81], ["clay", 82], ["reed", 83], ["reeds", 83], ["fence", 85], ["pumpkin", 86], ["netherstone", 87], ["netherrack", 87], ["lightstone", 89], ["glowstone", 89], ["jackolantern", 91], ["lit_pumpkin", 91], ["cake_block", 92], ["cake", 92], ["trap_door", 96], ["trapdoor", 96], ["silverfish_block", 97], ["monster_egg", 97], ["stone_brick", 98], ["stonebrick", 98], ["brown_mushroom_cap", 99], ["brown_mushroom_block", 99], ["red_mushroom_cap", 100], ["red_mushroom_block", 100], ["iron_bars", 101], ["glass_pane", 102], ["melon_block", 103], ["melon", 103], ["pumpkin_stem", 104], ["melon_stem", 105], ["vine", 106], ["fence_gate", 107], ["brick_stairs", 108], ["stone_brick_stairs", 109], ["myclium", 110], ["lily_pad", 111], ["waterlily", 111], ["nether_brick", 112], ["nether_brick_fence", 113], ["nether_brick_stairs", 114], ["end_portal_frame", 120], ["end_stone", 121], ["double_wooden_step", 125], ["double_wooden_slab", 125], ["wooden_step", 126], ["wooden_slab", 126], ["cocoa_plant", 127], ["cocoa", 127], ["sandstone_stairs", 128], ["emerald_ore", 129], ["emerald_block", 133], ["spruce_wood_stairs", 134], ["spruce_stairs", 134], ["birch_wood_stairs", 135], ["birch_stairs", 135], ["jungle_wood_stairs", 136], ["jungle_stairs", 136], ["cobblestone_wall", 139], ["carrots", 141], ["potatoes", 142], ["quartz_block", 155], ["quartz_stairs", 156], ["stained_clay", 159], ["stained_hardened_clay", 159], ["leaves2", 161], ["log2", 162], ["acacia_wood_stairs", 163], ["acacia_stairs", 163], ["dark_oak_wood_stairs", 164], ["dark_oak_stairs", 164], ["hay_block", 170], ["carpet", 171], ["hardened_clay", 172], ["coal_block", 173], ["packed_ice", 174], ["double_plant", 175], ["spruce_fence_gate", 183], ["birch_fence_gate", 184], ["jungle_fence_gate", 185], ["acacia_fence_gate", 186], ["dark_oak_fence_gate", 187], ["podzol", 243], ["beetroot", 244], ["stone_cutter", 245], ["stonecutter", 245], ["glowing_obsidian", 246], ["nether_reactor_core", 247], ["nether_reactor", 247]]; //var ctx = com.mojang.minecraftpe.MainActivity.currentMainActivity.get(); var BTN; var selector = 1; var pos1 = null; var pos2 = null; var minX, minY, minZ, maxX, maxY, maxZ; c = []; c1 = []; c2 = []; r = []; clipboard = []; undo = []; var undoX, undoY, undoZ; brush = []; mask = -1; var count = 1; /*############################## COMMAND REGISTRATION ##############################*/ function procCmd(command) { var cmd = command.split(" "); if(cmd[1] && allow_extra_data_values == true) c = cmd[1].split(":"); else c[0] = cmd[1]; if(cmd[2] && allow_extra_data_values == true) c1 = cmd[2].split(":"); else c1[0] = cmd[2]; if(cmd[2]) r = cmd[2].split(","); else { r[0] = cmd[2]; r[1] = cmd[2]; } if(cmd[3] && allow_extra_data_values == true) c2 = cmd[3].split(":"); else c2[0] = cmd[3]; switch(cmd[0]) { /*############ HELP ############*/ case "help": case "/help": if(cmd[1]) showHelp(cmd[1]); else showHelp("1"); break; /*############ WAND ############*/ case "wand": case "/wand": switch(Level.getGameMode()) { case 0: Player.addItemInventory(wand_item, 1, 0); break; case 1: Entity.setCarriedItem(getPlayerEnt(), wand_item, 1, 0); break; } if(show_help_on_first_use == true && first_use == false) { first_use = true; Msg("Destroy block: select pos #1; Tap block: select pos #2") } break; /*############ TOGGLEEDITWAND ############*/ case "toggleeditwand": switch(toggle_wand) { case false: toggle_wand = true; Msg("Edit wand disabled."); break; case true: toggle_wand = false; Msg("Edit wand enabled."); break; } break; /*############ SEL ############*/ case "/sel": case ";": case "/desel": case "/deselect": if(!cmd[1]) { pos1 = null; pos2 = null; Msg("Selection cleared."); } switch(cmd[1]) { case "cuboid": selector = 1; Msg("Cuboid: destroy block for point 1, tap block for point 2"); break; } break; /*############ POSITIONS ############*/ case "/pos1": if(cmd[1] && cmd[2] && cmd[3]) { pos1 = [Math.round(cmd[1]), Math.round(cmd[2]), Math.round(cmd[3])]; Msg("First Position set to (" + pos1[0] + ".0, " + pos1[1] + ".0, " + pos1[2] + ".0)."); } else if(!cmd[1]) { pos1 = [pX, Math.round(pY), pZ]; Msg("First Position set to (" + pos1[0] + ".0, " + pos1[1] + ".0, " + pos1[2] + ".0)."); } else if(cmd[1] && (!cmd[2] || !cmd[3])) Msg("§cYou must either specify 0 or 3 coordiante values."); else if(cmd[4]) Msg("§cToo many arguments."); break; case "/pos2": if(cmd[1] && cmd[2] && cmd[3]) { pos2 = [Math.round(cmd[1]), Math.round(cmd[2]), Math.round(cmd[3])]; Msg("Second Position set to (" + pos2[0] + ".0, " + pos2[1] + ".0, " + pos2[2] + ".0)."); } else if(!cmd[1]) { pos2 = [pX, Math.round(pY), pZ]; Msg("Second Position set to (" + pos2[0] + ".0, " + pos2[1] + ".0, " + pos2[2] + ".0)."); } else if(cmd[1] && (!cmd[2] || !cmd[3])) Msg("§cYou must either specify 0 or 3 coordiante values."); else if(cmd[4]) Msg("§cToo many arguments."); break; /*############ UNDO ############*/ case "undo": case "/undo": Undo(); break; /*############ PASTE ############*/ case "/paste": if(!cmd[1] && clipboard != null) { saveUndoPaste(); paste(0); } else if(clipboard == null) Msg("§No clipboard content."); else if(cmd[1]) Msg("§cToo many arguments."); break; /*############ CLEARCLIPBOARD ############*/ case "clearclipboard": clipboard = null; break; default: for(var i = 0; i < blocks.length; i++) { if(blocks[i][0] == c[0]) c[0] = blocks[i][1]; if(blocks[i][0] == c1[0]) c1[0] = blocks[i][1]; if(blocks[i][0] == c2[0]) c2[0] = blocks[i][1]; if(i == blocks.length - 1) { if(pos1 == null || pos2 == null || pos1 != null || pos2 != null) { switch(cmd[0]) { /*############ MASK ############*/ case "mask": if(cmd[1] && cmd[1] >= 0 && cmd[1] <= 255) { mask = c[0]; Msg("Brush mask set."); } else if(cmd[1] < 0 || cmd[1] > 255) Msg("§cNot a valid block id/name."); else if(!cmd[1]) { mask = -1; Msg("Brush mask disabled."); } break; /*############ BRUSH ############*/ case "/br": if(Player.getCarriedItem() > 255) { if(cmd[1]) { switch(cmd[1]) { case "c": case "cyl": case "cylinder": if(c1[0] != "h" && c1[0] <= 255 && c1[0] >= 0) { if(cmd[3] && !cmd[4] && cmd[3] <= max_brush_radius) { brush = ["cylinder", c1[0], c1[1], cmd[3], 1, false]; Msg("Cylinder brush shape equipped (" + cmd[3] + " by 1)."); dismissBrushButton(); openBrushButton(); } else if(cmd[4] && c1[0] <= 255 && c1[0] >= 0 && !cmd[5] && cmd[3] <= max_brush_radius && cmd[4] <= max_brush_radius) { brush = ["cylinder", c1[0], c1[1], cmd[3], cmd[4], false]; Msg("Cylinder brush shape equipped (" + cmd[3] + " by " + cmd[4] + ")."); dismissBrushButton(); openBrushButton(); } else if(cmd[3] > max_brush_radius || cmd[4] > max_brush_radius) Msg("§cThe radius must be smaller than " + max_brush_radius + "."); else if(cmd[5]) Msg("§cToo many arguments."); else if(!cmd[3]) Msg("§cYou need to specify a radius."); } else if(cmd[2] == "h") { if(c2[0] && c2[0] >= 0 && c2[0] <= 255) { if(cmd[4] && !cmd[5] && cmd[4] <= max_brush_radius) { brush = ["cylinder", c2[0], c2[1], cmd[4], 1, true]; Msg("Hollow cylinder brush shape equipped (" + cmd[3] + " by 1)."); dismissBrushButton(); openBrushButton(); } else if(cmd[5] && !cmd[6] && cmd[4] <= max_brush_radius && cmd[5] <= max_brush_radius) { brush = ["cylinder", c2[0], c2[1], cmd[4], cmd[5], true]; Msg("Hollow cylinder brush shape equipped (" + cmd[3] + " by " + cmd[4] + ")."); dismissBrushButton(); openBrushButton(); } else if(cmd[4] > max_brush_radius || cmd[5] > max_brush_radius) Msg("§cThe radius must be smaller than " + max_brush_radius + "."); else if(cmd[6]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); } else if(c2[0] > 255 || c2[0] < 0) Msg("§cInvalid block id/name."); else if(!c2[0]) Msg("§cYou need to specify a block."); } else if(c1[0] > 255 || c1[0] < 0) Msg("§cInvalid block id/name."); else if(!cmd[2]) Msg("§cYou need to specify a block."); break; case "s": case "sphere": case "cylinder": if(c1[0] != "h" && c1[0] <= 255 && c1[0] >= 0) { if(cmd[3] && !cmd[4] && cmd[3] <= max_brush_radius) { brush = ["sphere", c1[0], c1[1], cmd[3], 0, false]; Msg("Sphere brush shape equipped (" + cmd[3] + ")."); dismissBrushButton(); openBrushButton(); } else if(cmd[3] > max_brush_radius) Msg("§cThe radius must be smaller than " + max_brush_radius + "."); else if(cmd[4]) Msg("§cToo many arguments."); else if(!cmd[3]) Msg("§cYou need to specify a radius."); } else if(cmd[2] == "h") { if(c2[0] && c2[0] >= 0 && c2[0] <= 255) { if(cmd[4] && !cmd[5] && cmd[4] <= max_brush_radius) { brush = ["sphere", c2[0], c2[1], cmd[4], 0, true]; Msg("Sphere brush shape equipped (" + cmd[4] + ")."); dismissBrushButton(); openBrushButton(); } else if(cmd[4] > max_brush_radius) Msg("§cThe radius must be smaller than " + max_brush_radius + "."); else if(cmd[5]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); } else if(c2[0] > 255 || c2[0] < 0) Msg("§cInvalid block id/name."); else if(!c2[0]) Msg("§cYou need to specify a block."); } else if(c1[0] > 255 || c1[0] < 0) Msg("§cInvalid block id/name."); else if(!cmd[2]) Msg("§cYou need to specify a block."); break; default: Msg("§cInvalid brush."); break; } } else Msg("§cYou need to specify a brush."); } else Msg("§cCan't bind tool to a block."); break; /*############ CYLINDER ############*/ case "/cyl": if(cmd[1]) { if(cmd[2] && !cmd[3]) { saveUndoCylinder(cmd[2] * 2, pY, cmd[2] * 2, cmd[2], 1); cylinder(c[0], c[1], cmd[2], 1, 0, false); } else if(cmd[3] && !cmd[4]) { saveUndoCylinder(cmd[2] * 2, cmd[3], cmd[2] * 2, cmd[2], cmd[3]); cylinder(c[0], c[1], cmd[2], cmd[3], 0, false); } else if(cmd[4]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); } else Msg("§cYou need to specify a block."); break; /*############ HOLLOW CYLINDER ############*/ case "/hcyl": if(cmd[1]) { if(cmd[2] && !cmd[3]) { saveUndoCylinder(cmd[2] * 2, pY, cmd[2] * 2, cmd[2], 1); cylinder(c[0], c[1], cmd[2], 1, 0, true); } else if(cmd[3] && !cmd[4]) { saveUndoCylinder(cmd[2] * 2, pY, cmd[2] * 2, cmd[2], 1); cylinder(c[0], c[1], cmd[2], cmd[3], 0, true); } else if(cmd[4]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); } else Msg("§cYou need to specify a block."); break; /*############ SPHERE ############*/ case "/sphere": if(cmd[1]) { if(cmd[2] && !cmd[3]) { saveUndoSphere(cmd[2] * 2, cmd[2] * 2, cmd[2] * 2, cmd[2]); sphere(c[0], c[1], cmd[2], 0, false); } else if(cmd[3]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); } else Msg("§cYou need to specify a block."); break; /*############ HOLLOW SPHERE ############*/ case "/hsphere": if(cmd[1]) { if(cmd[2] && !cmd[3]) { saveUndoSphere(cmd[2] * 2, cmd[2] * 2, cmd[2] * 2, cmd[2]); sphere(c[0], c[1], cmd[2], 0, true); } else if(cmd[3]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); } else Msg("§cYou need to specify a block."); break; /*############ FORESTGEN ############*/ case "forestgen": if(cmd[1] && !cmd[2]) { saveUndoSphere(cmd[1] * 2, cmd[1] * 2, cmd[1] * 2, cmd[1]); forestgen(cmd[1], "oak", 50, 0); } else if(cmd[2] && !cmd[4]) { switch(cmd[2]) { case "oak": case "tree": case "regular": saveUndoSphere(cmd[1] * 2, cmd[1] * 2, cmd[1] * 2, cmd[1]); if(cmd[3] && cmd[3] <= 100) forestgen(cmd[1], "oak", cmd[3], 0); else if(!cmd[3]) forestgen(cmd[1], "oak", 50, 0); else Msg("§cDensity must be smaller than 100."); break; case "birch": saveUndoSphere(cmd[1] * 2, cmd[1] * 2, cmd[1] * 2, cmd[1]); if(cmd[3] && cmd[3] <= 100) forestgen(cmd[1], "birch", cmd[3], 0); else if(!cmd[3]) forestgen(cmd[1], "birch", 50, 0); else Msg("§cDensity must be smaller than 100."); break; case "spruce": case "redwood": case "sequoia": saveUndoSphere(cmd[1] * 2, cmd[1] * 2, cmd[1] * 2, cmd[1]); if(cmd[3] && cmd[3] <= 100) forestgen(cmd[1], "spruce", cmd[3], 0); else if(!cmd[3]) forestgen(cmd[1], "spruce", 50, 0); else Msg("§cDensity must be smaller than 100."); break; case "jungle": case "smalljungle": saveUndoSphere(cmd[1] * 2, cmd[1] * 2, cmd[1] * 2, cmd[1]); if(cmd[3] && cmd[3] <= 100) forestgen(cmd[1], "jungle", cmd[3], 0); else if(!cmd[3]) forestgen(cmd[1], "jungle", 50, 0); else Msg("§cDensity must be smaller than 100."); break; default: Msg("§cInvalid tree name."); break; } } else if(cmd[4]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); break; /*############ PUMPKINS ############*/ case "pumpkins": if(cmd[1] && !cmd[2]) { saveUndoSphere(cmd[1] * 2, cmd[1] * 2, cmd[1] * 2, cmd[1]); pumpkins(cmd[1], 0); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a radius."); break; /*############ DEFAULT ############*/ case "undo": case "/undo": case "/count": case "/copy": case "/cut": case "/paste": case "/set": case "/line": case "/re": case "/rep": case "/replace": case "/overlay": case "/center": case "/middle": case "/walls": case "/outline": case "/faces": case "/hollow": case "/forest": case "/flora": if(pos1 == null || pos2 == null) Msg("§cYou need to make a selection first."); break; default: Msg("§cUnknown command. Type ''help'' for help."); break; } } if(pos1 != null && pos2 != null) { switch(cmd[0]) { /*############ COUNT ############*/ case "/count": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { count(c[0], c[1], 0, false); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ SIZE ############*/ case "/size": break; /*############ COPY ############*/ case "/copy": if(cmd[1] && cmd[1] >= 0 && cmd[1] <= 255 && !cmd[2]) copy((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1, 0, cmd[1]); else if(cmd[1] < 0 && cmd[1] > 255) Msg("§cInvalid block id/name."); else if(cmd[2]) Msg("§cToo many arguments."); else copy((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1, 0, 0); break; /*############ CUT ############*/ case "/cut": if(cmd[1] && cmd[1] >= 0 && cmd[1] <= 255 && !cmd[2]) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); cut((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1, 0, cmd[1]); } else if(cmd[1] < 0 && cmd[1] > 255) Msg("§cInvalid block id/name."); else if(cmd[2]) Msg("§cToo many arguments."); else { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); cut((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1, 0, 0); } break; /*############ SET ############*/ case "/set": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); set(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ LINE ############*/ case "/line": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); line(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ REPLACE ############*/ case "/re": case "/rep": case "/replace": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); replace(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2] && !cmd[3]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); replace1(c1[0], c1[1], c[0], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[3]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ OVERLAY ############*/ case "/overlay": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); overlay(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ CENTER ############*/ case "/center": case "/middle": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); center(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ WALLS ############*/ case "/walls": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); walls(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ OUTLINE ############*/ case "/outline": case "/faces": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); outline(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cYou need to specify a block."); break; /*############ HOLLOW ############*/ case "/hollow": if(cmd[1] && !cmd[2]) { if(c[0] >= 0 && c[0] <= 255) { saveUndoDefault((maxX - minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); hollow(c[0], c[1], 0); } else Msg("§cInvalid block id/name."); } else if(cmd[2]) Msg("§cToo many arguments."); else hollow(0, 0, 0); break; /*############ FOREST ############*/ case "/forest": if(cmd[1] && !cmd[3]) { switch(cmd[1]) { case "oak": case "tree": case "regular": saveUndoTree((maxX- minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); if(cmd[2] && cmd[2] <= 100) forest("oak", cmd[2], 0); else if(!cmd[2]) forest("oak", 50, 0); else Msg("§cDensity must be smaller than 100."); break; case "birch": saveUndoTree((maxX- minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); if(cmd[2] && cmd[2] <= 100) forest("birch", cmd[2], 0); else if(!cmd[2]) forest("birch", 50, 0); else Msg("§cDensity must be smaller than 100."); break; case "spruce": case "redwood": case "sequoia": saveUndoTree((maxX- minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); if(cmd[2] && cmd[2] <= 100) forest("spruce", cmd[2], 0); else if(!cmd[2]) forest("spruce", 50, 0); else Msg("§cDensity must be smaller than 100."); break; case "jungle": case "smalljungle": saveUndoTree((maxX- minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); if(cmd[2] && cmd[2] <= 100) forest("jungle", cmd[2], 0); else if(!cmd[2]) forest("jungle", 50, 0); else Msg("§cDensity must be smaller than 100."); break; default: Msg("§cInvalid tree name."); break; } } else if(cmd[3]) Msg("§cToo many arguments."); else { saveUndoTree((maxX- minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); if(cmd[2] && cmd[2] <= 100) forest("oak", cmd[2], 0); else if(!cmd[2]) forest("oak", 50, 0); else Msg("§cDensity must be smaller than 100."); } break; /*############ FLORA ############*/ case "/flora": saveUndoDefault((maxX- minX) + 1, (maxY - minY) + 1, (maxZ - minZ) + 1); if(cmd[1] && !cmd[2] && cmd[1] <= 100) flora(cmd[1], 0); else if(!cmd[1]) flora(50, 0); else if(cmd[2]) Msg("§cToo many arguments."); else Msg("§cDensity must be smaller than 100."); break; } } } } break; } } /*############################## POSITIONS ##############################*/ function useItem(x, y, z, item, block, side) { if(item == wand_item && toggle_wand == false) { preventDefault(); switch(selector) { case 1: pos2 = [x, y, z]; Msg("Second Position set to (" + pos2[0] + ".0, " + pos2[1] + ".0, " + pos2[2] + ".0)."); break; } } } function destroyBlock(x, y, z, side) { if(getCarriedItem() == wand_item && toggle_wand == false) { preventDefault(); if(Level.getGameMode() == 1) { switch(selector) { case 1: pos1 = [x, y, z]; Msg("First Position set to (" + pos1[0] + ".0, " + pos1[1] + ".0, " + pos1[2] + ".0)."); break; } } } } function startDestroyBlock(x, y, z, side) { if(getCarriedItem() == wand_item && toggle_wand == false) { if(Level.getGameMode() == 0) { preventDefault(); switch(selector) { case 1: pos1 = [x, y, z]; Msg("First Position set to (" + pos1[0] + ".0, " + pos1[1] + ".0, " + pos1[2] + ".0)."); break; } } } } /*############################## NORMAL FUNCTIONS ##############################*/ function modTick() { if(pos1 != null && pos2 != null) { minX = Math.min(pos1[0], pos2[0]); minY = Math.min(pos1[1], pos2[1]); minZ = Math.min(pos1[2], pos2[2]); maxX = Math.max(pos1[0], pos2[0]); maxY = Math.max(pos1[1], pos2[1]); maxZ = Math.max(pos1[2], pos2[2]); } pX = Math.round(getPlayerX()); pY = getPlayerY() - 1; pZ = Math.round(getPlayerZ()); Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir(); Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir();Dir(); if(Player.getCarriedItem() < 256) dismissBrushButton(); } function Dir() { var pitch = ((Entity.getPitch(getPlayerEnt()) + 90) * Math.PI) / 180; var yaw = ((Entity.getYaw(getPlayerEnt()) + 90) * Math.PI) / 180; var xYaw = pX + ((Math.sin(pitch) * Math.cos(yaw)) * count); var yPitch = pY + ((Math.cos(pitch)) * count); var zYaw = pZ + ((Math.sin(pitch) * Math.sin(yaw)) * count); //WIP: Commented because of unfinished world /* if(getTile(xYaw, yPitch, zYaw) == 0 && count < 100) count++; else { xDir = pX + ((Math.sin(pitch) * Math.cos(yaw)) * count); yDir = pY + ((Math.cos(pitch)) * (count - 1)); zDir = pZ + ((Math.sin(pitch) * Math.sin(yaw)) * count); count = 1; } */ } /*############################## WORLDEDIT FUNCTIONS ##############################*/ /*############ HELP ############*/ function showHelp(Help) { switch(Help) { case "1": Msg("Showing help page 1/6:"); Msg(" //br [-h] [heigth]"); Msg(" //center "); Msg(" //copy [leave-block]"); Msg(" //count "); Msg(" //cut [leave-block]"); break; case "2": Msg("Showing help page 2/6:"); Msg(" //cyl [height]"); Msg(" //flora [density]"); Msg(" //forest [type [density]]"); Msg(" /forestgen [type [density]]"); Msg(" /help [page/command name]"); break; case "3": Msg("Showing help page 3/6:"); Msg(" //hcyl [height]"); Msg(" //hollow [block]"); Msg(" //hsphere ") Msg(" //line "); Msg(" //outline "); break; case "4": Msg("Showing help page 4/6:"); Msg(" //overlay "); Msg(" //paste"); Msg(" /pumpkins "); Msg(" //pos1 [x, y, z]") Msg(" //pos2 [x, y, z]"); break; case "5": Msg("Showing help page 5/6:"); Msg(" //replace "); Msg(" //replace "); Msg(" //sel [selector]"); Msg(" //set "); Msg(" //sphere "); break; case "6": Msg("Showing help page 6/6:"); Msg(" /undo, //undo"); Msg(" /toggleeditwand"); Msg(" //walls "); Msg(" /wand"); break; default: Msg("§cInvalid help."); break; } } /*############ UNDO ############*/ function Undo() { for(var a = 0; a < undo.length; a++) { for(var b = 0; b < undo[0].length; b++) { for(var c = 0; c < undo[0][0].length; c++) { setTile(undoX + a, undoY + b, undoZ + c, undo[a][b][c][0], undo[a][b][c][1]); } } } Msg("Undo successful."); } function saveUndoDefault(x, y, z) { undoX = minX; undoY = minY; undoZ = minZ; undo = [x]; for(var a = 0; a < x; a++) { undo[a] = [y]; for(var b = 0; b < y; b++) { undo[a][b] = [z]; for(var c = 0; c < z; c++) { undo[a][b][c] = [getTile(minX + a, minY + b, minZ + c), Level.getData(minX + a, minY + b, minZ + c)]; } } } } function saveUndoTree(x, y, z) { undoX = minX; undoY = minY; undoZ = minZ; undo = [x]; for(var a = -3; a < x + 3; a++) { undo[a] = [y]; for(var b = 0; b < y + 15; b++) { undo[a][b] = [z]; for(var c = -3; c < z + 3; c++) { undo[a][b][c] = [getTile(minX + a, minY + b, minZ + c), Level.getData(minX + a, minY + b, minZ + c)]; } } } } function saveUndoCylinder(x, y, z, Radius, Height) { undoX = pX - Radius; undoY = pY; undoZ = pZ - Radius; undo = [x]; for(var a = -x; a <= x; a++) { undo[a] = [y]; for(var b = 0; b < Height; b++) { undo[a][b] = [z]; for(var c = -z; c <= x; c++) { undo[a][b][c] = [getTile(pX - Radius + a, pY + b, pZ - Radius + c), Level.getData(pX - Radius + a, pY + b, pZ - Radius + c)]; } } } } function saveUndoSphere(x, y, z, Radius) { undoX = pX - Radius; undoY = pY - Radius; undoZ = pZ - Radius; undo = [x]; for(var a = -x; a < x; a++) { undo[a] = [y]; for(var b = -y; b < y; b++) { undo[a][b] = [z]; for(var c = -z; c < x; c++) { undo[a][b][c] = [getTile(pX - Radius + a, pY - Radius + b, pZ - Radius + c), Level.getData(pX - Radius + a, pY - Radius + b, pZ - Radius + c)]; } } } } function saveUndoPaste() { x = clipboard.length; y = clipboard[0].length; z = clipboard[0][0].length; undoX = pX; undoY = pY; undoZ = pZ; undo = [x]; for(var a = 0; a <= x; a++) { undo[a] = [y]; for(var b = 0; b <= y; b++) { undo[a][b] = [z]; for(var c = 0; c <= z; c++) { undo[a][b][c] = [getTile(pX + a, pY + b, pZ + c), Level.getData(pX + a, pY + b, pZ + c)]; } } } } /*############ COPY ############*/ function copy(x, y, z, affected, Block) { clipboard = [x] for(var a = 0; a < x; a++) { clipboard[a] = [y] for(var b = 0; b < y; b++) { clipboard[a][b] = [z] for(var c = 0; c < z; c++) { if(getTile(minX + a, minY + b, minZ + c) == Block) clipboard[a][b][c] = [0, 0]; else clipboard[a][b][c] = [getTile(minX + a, minY + b, minZ + c), Level.getData(minX + a, minY + b, minZ + c)]; affected++; } } } Msg(affected + " block(s) were copied."); } /*############ CUT ############*/ function cut(x, y, z, affected, Block) { clipboard = [x] for(var a = 0; a < x; a++) { clipboard[a] = [y] for(var b = 0; b < y; b++) { clipboard[a][b] = [z] for(var c = 0; c < z; c++) { if(getTile(minX + a, minY + b, minZ + c) == Block) { setTile(minX + a, minY + b, minZ + c, 0, 0); clipboard[a][b][c] = [0, 0]; } else { setTile(minX + a, minY + b, minZ + c, 0, 0); clipboard[a][b][c] = [getTile(minX + a, minY + b, minZ + c), Level.getData(minX + a, minY + b, minZ + c)]; } affected++; } } } Msg(affected + " block(s) were cutted."); } /*############ PASTE ############*/ function paste(affected) { for(var a = 0; a < clipboard.length; a++) { for(var b = 0; b < clipboard[0].length; b++) { for(var c = 0; c < clipboard[0][0].length; c++) { setTile(pX + a, pY + b, pZ + c, clipboard[a][b][c][0], clipboard[a][b][c][1]); affected++; } } } Msg(affected + " block(s) were pasted."); } /*############ CYLINDER ############*/ function cylinder(Block, Data, Radius, Height, affected, Hollow) { for(var x = -Radius; x <= Radius; x++) { for(var y = 0; y < Height; y++) { for(var z = -Radius; z <= Radius; z++) { if(x * x + z * z <= Radius * Radius) { if(Hollow == false) { setTile(pX + x, pY + y, pZ + z, Block, Data); affected++; } else { if(x * x + z * z > (Radius - 1) * (Radius - 1)) { setTile(pX + x, pY + y, pZ + z, Block, Data); affected++; } } } } } } Msg(affected + " block(s) have been created."); } function brushCylinder(Block, Data, Radius, Height, Hollow, a, b, c) { for(var x = -Radius; x <= Radius; x++) { for(var y = 0; y < Height; y++) { for(var z = -Radius; z <= Radius; z++) { if(x * x + z * z <= Radius * Radius) { if(mask == -1) { if(Hollow == false) setTile(a + x, b + y - 1, c + z, Block, Data); else { if(x * x + z * z > (Radius - 1) * (Radius - 1)) setTile(a + x, b + y - 1, c + z, Block, Data); } } else { if(getTile(a + x, b + y, c + z) == mask) { if(Hollow == false) setTile(a + x, b + y - 1, c + z, Block, Data); else { if(x * x + z * z > (Radius - 1) * (Radius - 1)) setTile(a + x, b + y - 1, c + z, Block, Data); } } } } } } } } /*############ SPHERE ############*/ function sphere(Block, Data, Radius, affected, Hollow) { for(var x = -Radius; x <= Radius; x++) { for(var y = -Radius; y <= Radius; y++) { for(var z = -Radius; z <= Radius; z++) { if(x * x + y * y + z * z <= Radius * Radius) { if(Hollow == false) { setTile(pX + x, pY + y, pZ + z, Block, Data); affected++; } else { if(x * x + y * y + z * z > (Radius - 1) * (Radius - 1)) { setTile(pX + x, pY + y, pZ + z, Block, Data); affected++; } } } } } } Msg(affected + " block(s) have been created."); } function brushSphere(Block, Data, Radius, Hollow, a, b, c) { for(var x = -Radius; x <= Radius; x++) { for(var y = -Radius; y <= Radius; y++) { for(var z = -Radius; z <= Radius; z++) { if(x * x + y * y + z * z <= Radius * Radius) { if(mask == -1) { if(Hollow == false) setTile(a + x, b + y - 1, c + z, Block, Data); else { if(x * x + y * y + z * z > (Radius - 1) * (Radius - 1)) setTile(a + x, b + y - 1, c + z, Block, Data); } } else { if(getTile(a + x, b + y, c + z) == mask) { if(Hollow == false) setTile(a + x, b + y - 1, c + z, Block, Data); else { if(x * x + y * y + z * z > (Radius - 1) * (Radius - 1)) setTile(a + x, b + y - 1, c + z, Block, Data); } } } } } } } } /*############ FORESTGEN ############*/ function forestgen(Radius, Type, Density, affected) { for(var x = -Radius; x <= Radius; x++) { for(var y = -Radius; y <= Radius; y++) { for(var z = -Radius; z <= Radius; z++) { if(Math.floor(Math.random() * 400) + 0 <= Density && (getTile(pX + x, pY + y - 1, pZ + z) == 2 || getTile(pX + x, pY + y - 1, pZ + z) == 3) && getTile(pX + x, pY + y, pZ + z) == 0) { switch(Type) { case "oak": affected++; forestOak(pX + x, pY + y - 1, pZ + z); break; case "birch": affected++; forestBirch(pX + x, pY + y - 1, pZ + z); break; case "spruce": if(Math.floor(Math.random() * 10) + 1 == 1) { affected++; forestSpruce(pX + x, pY + y - 1, pZ + z); } break; case "jungle": affected++; forestJungle(pX + x, pY + y - 1, pZ + z); break; } } } } } Msg(affected + " tree(s) have been created."); } /*############ PUMPKINS ############*/ function pumpkins(Radius, affected) { for(var x = -Radius; x <= Radius; x++) { for(var y = -Radius; y <= Radius; y++) { for(var z = -Radius; z <= Radius; z++) { if(Math.floor(Math.random() * 200) + 1 == 1 && (getTile(pX + x, pY + y - 1, pZ + z) == 2 || getTile(pX + x, pY + y - 1, pZ + z) == 3) && getTile(pX + x, pY + y, pZ + z) == 0) { createPumpkins(pX + x, pY + y, pZ + z); affected++; } } } } Msg(affected + " pumpkin patche(s) created."); } /*############ COUNT ############*/ function count(Block, Data, affected, useData) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(useData == true) { if(getTile(x, y, z) == Block && Level.getData(x, y, z) == Data) affected++; } else { if(getTile(x, y, z) == Block) affected++; } } } } Msg("Counted: " + affected); } /*############ SET ############*/ function set(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { setTile(x, y, z, Block, Data); affected++; } } } Msg(affected + " block(s) have been changed."); } /*############ LINE ############*/ function line(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if((x == minX && y == minY) || (x == minX && z == minZ) || (x == minX && y == maxY) || (x == minX && z == maxZ) || (x == maxX && y == minY) || (x == maxX && z == minZ) || (x == maxX && y == maxY) || (x == maxX && z == maxZ) || (y == minY && z == minZ) || (y == minY && z == maxZ) || (y == maxY && z == minZ) || (y == maxY && z == maxZ)) { setTile(x, y, z, Block, Data); affected++; } } } } Msg(affected + " block(s) have been changed."); } /*############ REPLACE ############*/ function replace(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(getTile(x, y, z) != 0) { setTile(x, y, z, Block, Data); affected++; } } } } Msg(affected + " block(s) have been replaced."); } function replace1(Block, Data, RBlock, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(getTile(x, y, z) == RBlock) { setTile(x, y, z, Block, Data); affected++; } } } } Msg(affected + " block(s) have been replaced."); } /*############ OVERLAY ############*/ function overlay(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var z = minZ; z <= maxZ; z++) { for(var y = maxY; y >= minY; y--) { if(getTile(x, y, z) != 0 && getTile(x, y + 1, z) == 0) { setTile(x, y + 1, z, Block, Data); affected++; break; return y; } } } } Msg(affected + " block(s) have been overlaid."); } /*############ CENTER ############*/ function center(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(x == Math.round((minX + maxX) / 2) && y == Math.round((minY + maxY) / 2) && z == Math.round((minZ + maxZ) / 2)) { setTile(x, y, z, Block, Data); affected++; } } } } Msg("Center set (" + affected + " block(s) changed)."); } /*############ WALLS ############*/ function walls(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(x == minX || x == maxX || z == minZ || z == maxZ) { setTile(x, y, z, Block, Data); affected++; } } } } Msg(affected + " block(s) have been changed."); } /*############ OUTLINE ############*/ function outline(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(x == minX || x == maxX || y == minY || y == maxY || z == minZ || z == maxZ) { setTile(x, y, z, Block, Data); affected++; } } } } Msg(affected + " block(s) have been changed."); } /*############ HOLLOW ############*/ function hollow(Block, Data, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(x != minX && x != maxX && y != minY && y != maxY && z != minZ && z != maxZ) { setTile(x, y, z, Block, Data); affected++; } } } } Msg(affected + " block(s) have been changed."); } /*############ FOREST ############*/ function forest(Type, Density, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(Math.floor(Math.random() * 400) + 0 <= Density && (getTile(x, y - 1, z) == 2 || getTile(x, y - 1, z) == 3) && getTile(x, y, z) == 0) { switch(Type) { case "oak": affected++; forestOak(x, y - 1, z); break; case "birch": affected++; forestBirch(x, y - 1, z); break; case "spruce": if(Math.floor(Math.random() * 10) + 1 == 1) { affected++; forestSpruce(x, y - 1, z); } break; case "jungle": affected++; forestJungle(x, y - 1, z); break; } } } } } Msg(affected + " tree(s) have been created."); } /*############ FLORA ############*/ function flora(Density, affected) { for(var x = minX; x <= maxX; x++) { for(var y = minY; y <= maxY; y++) { for(var z = minZ; z <= maxZ; z++) { if(Math.floor(Math.random() * 150) + 0 <= Density && (getTile(x, y - 1, z) == 2 || getTile(x, y - 1, z) == 3) && getTile(x, y, z) == 0) { if(Math.floor(Math.random() * 3) + 0 == 0) { affected++; setTile(x, y, z, 31, Math.floor(Math.random() * 2) + 0); } else if(Math.floor(Math.random() * 3) + 0 == 1) { affected++; setTile(x, y, z, 37, 0); } else if(Math.floor(Math.random() * 3) + 0 == 2) { affected++; setTile(x, y, z, 38, Math.floor(Math.random() * 9) + 0); } } else if(Math.floor(Math.random() * 150) + 0 <= Density && getTile(x, y - 1, z) == 12 && getTile(x, y, z) == 0) { if(Math.floor(Math.random() * 2) + 0 == 0) { affected++; setTile(x, y, z, 81, 0); } else if(Math.floor(Math.random() * 2) + 0 == 1) { affected++; setTile(x, y, z, 32, 0); } } } } } Msg(affected + " flora created."); } /*############################## TREE GENERATION ##############################*/ function forestOak(x, y, z) { var height = Math.floor(Math.random() * 3) + 1; for(var a = -2; a < 3; a++) { for(var b = 1; b < 3; b++) { for(var c = -2; c < 3; c++) { if(getTile(x + a, y + b + height, z + c) == 0) { setTile(x + a, y + b + height, z + c, 18, 0); } } } } for(var d = 0; d <= height + 2; d++) { setTile(x, y + d + 1, z, 17, 0); } setTile(x + 1, y + height + 3, z, 18, 0); setTile(x - 1, y + height + 3, z, 18, 0); setTile(x, y + height + 3, z + 1, 18, 0); setTile(x, y + height + 3, z - 1, 18, 0); setTile(x, y + height + 4, z, 18, 0); setTile(x + 1, y + height + 4, z, 18, 0); setTile(x - 1, y + height + 4, z, 18, 0); setTile(x, y + height + 4, z + 1, 18, 0); setTile(x, y + height + 4, z - 1, 18, 0); } function forestBirch(x, y, z) { var height = Math.floor(Math.random() * 4) + 2; for(var a = -2; a < 3; a++) { for(var b = 1; b < 3; b++) { for(var c = -2; c < 3; c++) { if(getTile(x + a, y + b + height, z + c) == 0) { setTile(x + a, y + b + height, z + c, 18, 2); } } } } for(var d = 0; d <= height + 2; d++) { setTile(x, y + d + 1, z, 17, 2); } setTile(x + 1, y + height + 3, z, 18, 2); setTile(x - 1, y + height + 3, z, 18, 2); setTile(x, y + height + 3, z + 1, 18, 2); setTile(x, y + height + 3, z - 1, 18, 2); setTile(x, y + height + 4, z, 18, 2); setTile(x + 1, y + height + 4, z, 18, 2); setTile(x - 1, y + height + 4, z, 18, 2); setTile(x, y + height + 4, z + 1, 18, 2); setTile(x, y + height + 4, z - 1, 18, 2); } function forestSpruce(x, y, z) { var height = 4; for(var a = -2; a < 3; a++) { for(var b = 0; b < 1; b++) { for(var c = -2; c < 3; c++) { if(getTile(x + a, y + b + height + 1, z + c) == 0) { setTile(x + a, y + b + height + 1, z + c, 18, 1); setTile(x + 2, y + b + height + 1, z + 2, 0, 0); setTile(x - 2, y + b + height + 1, z - 2, 0, 0); setTile(x + 2, y + b + height + 1, z - 2, 0, 0); setTile(x - 2, y + b + height + 1, z + 2, 0, 0); } } } } for(var a = -2; a < 3; a++) { for(var b = 0; b < 1; b++) { for(var c = -2; c < 3; c++) { if(getTile(x + a, y + b + height - 1, z + c) == 0) { setTile(x + a, y + b + height - 1, z + c, 18, 1); setTile(x + 2, y + b + height - 1, z + 2, 0, 0); setTile(x - 2, y + b + height - 1, z - 2, 0, 0); setTile(x + 2, y + b + height - 1, z - 2, 0, 0); setTile(x - 2, y + b + height - 1, z + 2, 0, 0); } } } } for(var a = -3; a < 4; a++) { for(var b = 0; b < 1; b++) { for(var c = -3; c < 4; c++) { if(getTile(x + a, y + b + height - 2, z + c) == 0) { setTile(x + a, y + b + height - 2, z + c, 18, 1); setTile(x + 3, y + b + height - 2, z + 3, 0, 0); setTile(x - 3, y + b + height - 2, z - 3, 0, 0); setTile(x + 3, y + b + height - 2, z - 3, 0, 0); setTile(x - 3, y + b + height - 2, z + 3, 0, 0); setTile(x + 3, y + b + height - 2, z + 2, 0, 0); setTile(x + 3, y + b + height - 2, z - 2, 0, 0); setTile(x - 3, y + b + height - 2, z + 2, 0, 0); setTile(x - 3, y + b + height - 2, z - 2, 0, 0); setTile(x + 2, y + b + height - 2, z + 3, 0, 0); setTile(x - 2, y + b + height - 2, z + 3, 0, 0); setTile(x + 2, y + b + height - 2, z - 3, 0, 0); setTile(x - 2, y + b + height - 2, z - 3, 0, 0); } } } } for(var d = 0; d <= height + 2; d++) { setTile(x, y + d + 1, z, 17, 1); } setTile(x + 1, y + height, z, 18, 1); setTile(x - 1, y + height, z, 18, 1); setTile(x, y + height, z + 1, 18, 1); setTile(x, y + height, z - 1, 18, 1); setTile(x + 1, y + height + 2, z, 18, 1); setTile(x - 1, y + height + 2, z, 18, 1); setTile(x, y + height + 2, z + 1, 18, 1); setTile(x, y + height + 2, z - 1, 18, 1); setTile(x, y + height + 3, z, 18, 1); setTile(x + 1, y + height + 4, z, 18, 1); setTile(x - 1, y + height + 4, z, 18, 1); setTile(x, y + height + 4, z + 1, 18, 1); setTile(x, y + height + 4, z - 1, 18, 1); setTile(x, y + height + 4, z, 18, 1); } function forestJungle(x, y, z) { var height = Math.floor(Math.random() * 6) + 2; for(var a = -2; a < 3; a++) { for(var b = 1; b < 3; b++) { for(var c = -2; c < 3; c++) { if(getTile(x + a, y + b + height, z + c) == 0) { setTile(x + a, y + b + height, z + c, 18, 3); } } } } for(var d = 0; d <= height + 2; d++) { setTile(x, y + d + 1, z, 17, 3); switch(Math.floor(Math.random() * 10) + 1) { case 1: for(var e = 0; e <= height + 2; e++) { if(getTile(x + 1, y + e, z) == 0) { setTile(x + 1, y + e, z, 106, 2); } } break; case 2: for(var e = 0; e <= height + 2; e++) { if(getTile(x - 1, y + e, z) == 0) { setTile(x - 1, y + e, z, 106, 8); } } break; case 3: for(var e = 0; e <= height + 2; e++) { if(getTile(x, y + e, z + 1) == 0) { setTile(x, y + e, z + 1, 106, 4); } } break; case 4: for(var e = 0; e <= height + 2; e++) { if(getTile(x, y + e, z - 1) == 0) { setTile(x, y + e, z - 1, 106, 1); } } break; } } setTile(x + 1, y + height + 3, z, 18, 3); setTile(x - 1, y + height + 3, z, 18, 3); setTile(x, y + height + 3, z + 1, 18, 3); setTile(x, y + height + 3, z - 1, 18, 3); setTile(x, y + height + 4, z, 18, 3); setTile(x + 1, y + height + 4, z, 18, 3); setTile(x - 1, y + height + 4, z, 18, 3); setTile(x, y + height + 4, z + 1, 18, 3); setTile(x, y + height + 4, z - 1, 18, 3); } function createPumpkins(x, y, z) { switch(Math.floor(Math.random() * 3) + 1) { case 1: setTile(x, y, z, 86, 0); setTile(x + 2, y, z, 86, 0); setTile(x - 2, y, z - 1, 86, 0); setTile(x + 3, y, z + 2, 86, 0); setTile(x - 2, y, z + 3, 86, 0); setTile(x, y, z - 3, 86, 0); setTile(x, y, z + 2, 86, 0); setTile(x + 1, y, z - 1, 18, 0); setTile(x - 2, y, z + 1, 18, 0); setTile(x + 1, y, z + 1, 18, 0); setTile(x, y, z - 2, 18, 0); break; case 2: setTile(x + 3, y, z, 86, 0); setTile(x + 2, y, z, 86, 0); setTile(x - 1, y, z - 1, 86, 0); setTile(x + 3, y, z + 2, 86, 0); setTile(x - 4, y, z + 2, 86, 0); setTile(x + 1, y, z - 2, 86, 0); setTile(x + 1, y, z - 3, 18, 0); setTile(x - 2, y, z + 1, 18, 0); setTile(x + 1, y, z + 1, 18, 0); setTile(x + 1, y, z - 2, 18, 0); break; case 3: setTile(x, y, z + 1, 86, 0); setTile(x + 2, y, z, 86, 0); setTile(x + 2, y, z - 1, 86, 0); setTile(x + 3, y, z + 4, 86, 0); setTile(x - 1, y, z + 3, 86, 0); setTile(x + 1, y, z - 2, 86, 0); setTile(x + 1, y, z - 1, 18, 0); setTile(x - 2, y, z + 1, 18, 0); setTile(x + 1, y, z, 18, 0); setTile(x, y, z - 3, 18, 0); break; } } /*############################## MESSAGES ##############################*/ function Msg(msg) { switch(coloured_messages) { case false: clientMessage(msg); break; case true: clientMessage("§d" + msg); break; } } /*############################## GUI ##############################*/ function openBrushButton() { } function dismissBrushButton() { }