doors.txt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. event.load("block_click");
  2. doors = list.new();
  3. trapdoors = list.new();
  4. fencegates = list.new();
  5. orig_state = map.new();
  6. doors_tag = block.getTag("minecraft:wooden_doors");
  7. trapdoors_tag = block.getTag("minecraft:wooden_trapdoors");
  8. fencegates_tag = block.getTag("minecraft:fence_gates");
  9. open_prop = block.getProperty("open");
  10. msg("dev", "§bDoors §rloaded.");
  11. @wait
  12. wait();
  13. loc = entity.getLocation(player);
  14. world_name = world.getName(loc.getWorld(loc));
  15. if(isSurvWorldName(world_name) || isStoryWorldName(world_name)) {
  16. ignoreGoto(event);
  17. }
  18. goto("wait");
  19. @block_click
  20. if(block.hasTag(doors_tag, block) && action == "right") {
  21. player_spec = player.getAutoCloseDoor(player);
  22. door_state_1 = block.getDoorStatus(block_loc);
  23. if(!door_state_1) {
  24. if(player_spec) {
  25. list.add(doors, block_loc);
  26. sgoto(60, "closedoor");
  27. }
  28. }
  29. //Nach Doppeltür suchen
  30. door_loc_2 = block.getSecondDoor(block_loc);
  31. if(door_loc_2 != null) {
  32. door_state_2 = block.getDoorStatus(door_loc_2);
  33. if(door_state_1 && door_state_2) {
  34. block.setDoorStatus(door_loc_2, false);
  35. } elseif(!door_state_1 && !door_state_2) {
  36. block.setDoorStatus(door_loc_2, true);
  37. if(player_spec) {
  38. list.add(doors, door_loc_2);
  39. sgoto(60, "closedoor");
  40. }
  41. }
  42. }
  43. goto("wait");
  44. }
  45. if(block.hasTag(trapdoors_tag, block) && action == "right") {
  46. player_spec = player.getAutoCloseDoor(player);
  47. if(player_spec) {
  48. if(!map.contains(orig_state, block_loc)) {
  49. state = block.getTrapdoorStatus(block_loc);
  50. map.add(orig_state, block_loc, state);
  51. }
  52. list.add(trapdoors, block_loc);
  53. sgoto(60, "toggletrapdoor");
  54. }
  55. goto("wait");
  56. }
  57. if(block.hasTag(fencegates_tag, block) && action == "right") {
  58. player_spec = player.getAutoCloseDoor(player);
  59. if(player_spec) {
  60. if(!map.contains(orig_state, block_loc)) {
  61. state = block.getState(block_loc, open_prop);
  62. map.add(orig_state, block_loc, state);
  63. }
  64. list.add(fencegates, block_loc);
  65. sgoto(60, "togglefencegate");
  66. }
  67. goto("wait");
  68. }
  69. goto("wait");
  70. @closedoor
  71. doorloc = list.getIndex(doors, 0);
  72. list.removeIndex(doors, 0);
  73. if(block.hasTag(doors_tag, block.get(doorloc))) {
  74. if(block.getDoorStatus(doorloc)) {
  75. block.setDoorStatus(doorloc, false);
  76. }
  77. }
  78. goto("wait");
  79. @toggletrapdoor
  80. doorloc = list.getIndex(trapdoors, 0);
  81. list.removeIndex(trapdoors, 0);
  82. if(block.hasTag(trapdoors_tag, block.get(doorloc))) {
  83. state = map.get(orig_state, doorloc);
  84. if(state == null) {
  85. goto("wait");
  86. }
  87. map.remove(orig_state, doorloc);
  88. if(block.getTrapdoorStatus(doorloc) != state) {
  89. block.setTrapdoorStatus(doorloc, state);
  90. }
  91. }
  92. goto("wait");
  93. @togglefencegate
  94. doorloc = list.getIndex(fencegates, 0);
  95. list.removeIndex(fencegates, 0);
  96. if(block.hasTag(fencegates_tag, block.get(doorloc))) {
  97. state = map.get(orig_state, doorloc);
  98. if(state == null) {
  99. goto("wait");
  100. }
  101. map.remove(orig_state, doorloc);
  102. if(block.getState(doorloc, open_prop) != state) {
  103. //TODO
  104. }
  105. }
  106. goto("wait");