123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- event.load("block_click");
- doors = list.new();
- orig_value_map = map.new();
- auto_door_tag = block.getTag("km:auto_door");
- doors_tag = block.getTag("minecraft:wooden_doors");
- trapdoors_tag = block.getTag("minecraft:wooden_trapdoors");
- fencegates_tag = block.getTag("minecraft:fence_gates");
- block_sound_category = sound.getCategory("BLOCKS");
- open_door_sound = sound.get("BLOCK_WOODEN_DOOR_OPEN");
- close_door_sound = sound.get("BLOCK_WOODEN_DOOR_CLOSE");
- open_trapdoor_sound = sound.get("BLOCK_WOODEN_TRAPDOOR_OPEN");
- close_trapdoor_sound = sound.get("BLOCK_WOODEN_TRAPDOOR_CLOSE");
- open_fencegate_sound = sound.get("BLOCK_FENCE_GATE_OPEN");
- close_fencegate_sound = sound.get("BLOCK_FENCE_GATE_CLOSE");
- msg.string("dev", "§bDoors §rloaded.");
- @main
- wait();
- loc = entity.getLocation(player);
- world_name = world.getName(loc.getWorld(loc));
- if(world.isSurvName(world_name)) {
- ignoreGoto(event);
- }
- goto("main");
- @block_click
- if(block == null) {
- goto("main");
- }
- if(block.hasTag(block, auto_door_tag) && action == "RIGHT_CLICK_BLOCK") {
- if(cancel) {
- goto("main");
- }
- player_spec = player.getAutoCloseDoor(player);
- open_value = block.isOpen(block);
- if(block.hasTag(block, doors_tag)) {
- if(!open_value) {
- if(player_spec) {
- list.add(doors, block);
- sgoto(60, "closedoor");
- }
- }
- //Double door
- door_block_2 = block.getSecondDoor(block);
- if(door_block_2 == null) {
- goto("main");
- }
- open_value_2 = block.isOpen(door_block_2);
- if(open_value && open_value_2) {
- door.open(door_block_2, false);
- } elseif(!open_value && !open_value_2) {
- door.open(door_block_2, true);
- if(player_spec) {
- list.add(doors, door_block_2);
- sgoto(60, "closedoor");
- }
- }
- goto("main");
- }
- if(player_spec) {
- block_loc = block.getLocation(block);
- if(!map.contains(orig_value_map, block_loc)) {
- map.add(orig_value_map, block_loc, open_value);
- }
- list.add(doors, block);
- sgoto(60, "closedoor");
- }
- }
- goto("main");
- @closedoor
- block = list.getIndex(doors, 0);
- list.removeIndex(doors, 0);
- if(block.hasTag(block, auto_door_tag)) {
- //close door
- open_value = block.isOpen(block);
- if(block.hasTag(block, doors_tag)) {
- if(open_value) {
- door.open(block, false);
- }
- goto("main");
- }
- //toggle door
- door_loc = block.getLocation(block);
- orig_value = map.get(orig_value_map, door_loc);
- if(orig_value == null) {
- goto("main");
- }
- map.remove(orig_value_map, door_loc);
- if(orig_value == open_value) {
- goto("main");
- }
- if(open_value) {
- door.open(block, false);
- goto("main");
- }
- door.open(block, true);
- }
- goto("main");
- function door.open(block, boolean) {
- block.setOpen(block, boolean);
- //sound
- location = block.getLocation(block);
- if(boolean) {
- if(block.hasTag(block, $doors_tag)) {
- sound.spawn(location, $open_door_sound, $block_sound_category);
- } elseif(block.hasTag(block, $trapdoors_tag)) {
- sound.spawn(location, $open_trapdoor_sound, $block_sound_category);
- } elseif(block.hasTag(block, $fencegates_tag)) {
- sound.spawn(location, $open_fencegate_sound, $block_sound_category);
- }
- } else {
- if(block.hasTag(block, $doors_tag)) {
- sound.spawn(location, $close_door_sound, $block_sound_category);
- } elseif(block.hasTag(block, $trapdoors_tag)) {
- sound.spawn(location, $close_trapdoor_sound, $block_sound_category);
- } elseif(block.hasTag(block, $fencegates_tag)) {
- sound.spawn(location, $close_fencegate_sound, $block_sound_category);
- }
- }
- }
- function block.getSecondDoor(door_block_1) {
- door_loc_1 = block.getLocation(door_block_1);
- state_facing = block.getDirectionalFace(door_block_1);
- state_hinge = block.getDoorHinge(door_block_1);
- if(state_facing == "NORTH") {
- if(state_hinge == "RIGHT") {
- door_loc_2 = loc.mod(door_loc_1, -1, 0, 0);
- } else {
- door_loc_2 = loc.mod(door_loc_1, 1, 0, 0);
- }
- } elseif(state_facing == "EAST") {
- if(state_hinge == "RIGHT") {
- door_loc_2 = loc.mod(door_loc_1, 0, 0, -1);
- } else {
- door_loc_2 = loc.mod(door_loc_1, 0, 0, 1);
- }
- } elseif(state_facing == "SOUTH") {
- if(state_hinge == "RIGHT") {
- door_loc_2 = loc.mod(door_loc_1, 1, 0, 0);
- } else {
- door_loc_2 = loc.mod(door_loc_1, -1, 0, 0);
- }
- } else {
- if(state_hinge == "RIGHT") {
- door_loc_2 = loc.mod(door_loc_1, 0, 0, 1);
- } else {
- door_loc_2 = loc.mod(door_loc_1, 0, 0, -1);
- }
- }
- door_block_2 = block.get(door_loc_2);
- if(block.hasTag(door_block_2, $doors_tag)) {
- if(block.isSameDoorHalf(door_block_1, door_block_2)) {
- state_hinge_2 = block.getDoorHinge(door_block_2);
- if(state_hinge == "LEFT" && state_hinge_2 == "RIGHT" || state_hinge == "RIGHT" && state_hinge_2 == "LEFT") {
- return door_block_2;
- }
- }
- }
- return null;
- }
- function block.isSameDoorHalf(door_block_1, door_block_2) {
- state_half = block.getBisectedHalf(door_block_1);
- state_half_2 = block.getBisectedHalf(door_block_2);
- return state_half == state_half_2;
- }
|