123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- event.load("block_click");
- doors = list.new();
- orig_value_map = map.new();
- 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 (player.isSneaking(player)) {
- goto("main");
- }
- if(block.isAutomaticDoor(block) && action == "RIGHT_CLICK_BLOCK") {
- if(cancel) {
- goto("main");
- }
- player_spec = player.getAutoCloseDoor(player);
- open_value = block.isOpen(block);
- if(block.isDoor(block)) {
- goto("door");
- }elseif(block.isTrapdoor(block)) {
- goto("trapdoor");
- }
-
- 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");
- @door
- 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");
- @trapdoor
- open_value = block.isOpen(block);
- state_facing = block.getDirectionalFace(block);
- trapdoors = list.new();
- block_loc = block.getLocation(block);
- list.add(trapdoors, block_loc);
- if(player_spec) {
- list.add(doors, block);
- if(!map.contains(orig_value_map, block_loc)) {
- map.add(orig_value_map, block_loc, open_value);
- }
- sgoto(60, "closedoor");
- }
- if(state_facing == "NORTH" || state_facing == "SOUTH") {
- trapdoor_loc_2 = loc.mod(block_loc, -1, 0, 0);
- trapdoor_loc_3 = loc.mod(block_loc, 1, 0, 0);
-
- if (state_facing == "NORTH") {
- opposite_loc = loc.mod(block_loc, 0, 0, -1);
- } else {
- opposite_loc = loc.mod(block_loc, 0, 0, 1);
- }
- } elseif(state_facing == "EAST" || state_facing == "WEST") {
- trapdoor_loc_2 = loc.mod(block_loc, 0, 0, -1);
- trapdoor_loc_3 = loc.mod(block_loc, 0, 0, 1);
-
- if (state_facing == "EAST"){
- opposite_loc = loc.mod(block_loc, 1, 0, 0);
- } else {
- opposite_loc = loc.mod(block_loc, -1, 0, 0);
- }
- }
- block2 = block.get(trapdoor_loc_2);
- block3 = block.get(trapdoor_loc_3);
- block4 = block.get(opposite_loc);
- if (isNeighbouring_Trapdoor(block2, state_facing)) {
- list.add(trapdoors, trapdoor_loc_2);
-
- if(player_spec) {
- list.add(doors, block2);
- if(!map.contains(orig_value_map, trapdoor_loc_2)) {
- map.add(orig_value_map, trapdoor_loc_2, open_value);
- }
- sgoto(60, "closedoor");
- }
- }
- if (isNeighbouring_Trapdoor(block3, state_facing)) {
- list.add(trapdoors, trapdoor_loc_3);
- if(player_spec) {
- list.add(doors, block3);
- if(!map.contains(orig_value_map, trapdoor_loc_3)) {
- map.add(orig_value_map, trapdoor_loc_3, open_value);
- }
- sgoto(60, "closedoor");
- }
- }
- if ( isOpposite_Trapdoor(block4, state_facing)){
- list.add(trapdoors, opposite_loc);
- state_facing2 = block.getDirectionalFace(block4);
- if(player_spec) {
- list.add(doors, block4);
- if(!map.contains(orig_value_map, opposite_loc)) {
- map.add(orig_value_map, opposite_loc, open_value);
- }
- sgoto(60, "closedoor");
- }
-
- if(state_facing == "NORTH" || state_facing == "SOUTH") {
- ntrapdoor_loc_2 = loc.mod(opposite_loc, -1, 0, 0);
- ntrapdoor_loc_3 = loc.mod(opposite_loc, 1, 0, 0);
- }elseif(state_facing == "EAST" || state_facing == "WEST") {
- ntrapdoor_loc_2 = loc.mod(opposite_loc, 0, 0, -1);
- ntrapdoor_loc_3 = loc.mod(opposite_loc, 0, 0, 1);
- }
- nblock2 = block.get(ntrapdoor_loc_2);
- nblock3 = block.get(ntrapdoor_loc_3);
- if (isNeighbouring_Trapdoor(nblock2, state_facing2)){
- list.add(trapdoors, ntrapdoor_loc_2);
- if(player_spec) {
- list.add(doors, nblock2);
- if(!map.contains(orig_value_map, ntrapdoor_loc_2)) {
- map.add(orig_value_map, ntrapdoor_loc_2, open_value);
- }
- sgoto(60, "closedoor");
- }
- }
- if (isNeighbouring_Trapdoor(nblock3, state_facing2)){
- list.add(trapdoors, ntrapdoor_loc_3);
- if(player_spec) {
- list.add(doors, nblock3);
- if(!map.contains(orig_value_map, ntrapdoor_loc_3)) {
- map.add(orig_value_map, ntrapdoor_loc_3, open_value);
- }
- sgoto(60, "closedoor");
- }
- }
- }
- door.openlist(trapdoors, open_value);
- goto("main");
- @closedoor
- block = list.getIndex(doors, 0);
- list.removeIndex(doors, 0);
- if(block.isAutomaticDoor(block)) {
- //close door
- open_value = block.isOpen(block);
- if(block.isDoor(block)) {
- 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");
- }
- door.open(block, !open_value);
- }
- goto("main");
- function door.openlist(doors_list, open_value){
- list_it = iterator(doors_list);
- //msg("dev",text.new(doors_list));
-
- while (hasNext(list_it)){
- door_loc = next(list_it);
- block2 = block.get(door_loc);
- open_value_2 = block.isOpen(block2);
-
- if(open_value && open_value_2) {
- door.open(block2, false);
- } elseif(!open_value && !open_value_2) {
- door.open(block2, true);
- }
- }
- }
- 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 isNeighbouring_Trapdoor(block, state_facing){
- if(block.isTrapdoor(block)){
- return block.getDirectionalFace(block) == state_facing;
- }
- return false;
- }
- function isOpposite_Trapdoor(block, state_facing){
- if(!block.isTrapdoor(block)){
- return false;
- }
- state_facing2 = block.getDirectionalFace(block);
- if (state_facing == "NORTH" && state_facing2 == "SOUTH" || state_facing == "SOUTH" && state_facing2 == "NORTH"){
- return true;
- }
- if (state_facing == "EAST" && state_facing2 == "WEST" || state_facing == "WEST" && state_facing2 == "EAST"){
- return true;
- }
- return false;
- }
- 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;
- }
- function block.isAutomaticDoor(block) {
- return block.hasTag(block, $doors_tag) || block.hasTag(block, $trapdoors_tag) || block.hasTag(block, $fencegates_tag);
- }
- function block.isDoor(block) {
- return block.hasTag(block, $doors_tag);
- }
- function block.isTrapdoor(block) {
- return block.hasTag(block, $trapdoors_tag);
- }
|