timber.txt 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //event.load("block_break");
  2. event.load("block_click");
  3. prop_persistent = block.getProperty("persistent");
  4. tag_log_burn = block.getTag("logs_that_burn");
  5. @wait
  6. wait();
  7. if(event == "block_click") {
  8. if(player.getName(player) == "marvinius") {
  9. if(block.isTree(block_loc)) {
  10. block.removeTree(block_loc);
  11. }
  12. }
  13. }
  14. if(event == "block_break") {
  15. if(block.isTree(block_loc)) {
  16. tree_locs = block.removeTree(block_loc);
  17. }
  18. }
  19. goto("wait");
  20. function block.isTree(break_loc) {
  21. block = block.get(break_loc);
  22. if(!block.hasTag($tag_log_burn, block)) {
  23. return false;
  24. }
  25. block_type = block.getType(break_loc);
  26. //neighbours on same level found? return false
  27. mod_loc = loc.mod(break_loc, 1, 0, 0);
  28. if(block.getType(mod_loc) == block_type) {
  29. return false;
  30. }
  31. loc.add(mod_loc, -2, 0, 0);
  32. if(block.getType(mod_loc) == block_type) {
  33. return false;
  34. }
  35. loc.add(mod_loc, 1, 0, 1);
  36. if(block.getType(mod_loc) == block_type) {
  37. return false;
  38. }
  39. loc.add(mod_loc, 0, 0, -2);
  40. if(block.getType(mod_loc) == block_type) {
  41. return false;
  42. }
  43. loc.add(mod_loc, 0, 0, 1);
  44. //search top logs
  45. while(block.getType(mod_loc) == block_type) {
  46. loc.add(mod_loc, 0, 1, 0);
  47. }
  48. state = block.getState(mod_loc, $prop_persistent);
  49. if(state == null || state) {
  50. return false;
  51. }
  52. leave_type = "minecraft:birch_leaves";
  53. return true;
  54. }
  55. function block.removeTree(break_loc) {
  56. c = 0;
  57. list = list.new();
  58. list2 = list.new();
  59. set = set.new();
  60. block_type = block.getType(break_loc);
  61. list.add(list, break_loc);
  62. list.add(list2, break_loc);
  63. while(list.getSize(list) != 0) {
  64. index = list.getSize(list) - 1;
  65. loc = list.getIndex(list, index);
  66. mod_loc = loc.mod(loc, 1, 0, 0);
  67. if(block.isTreePart(set, mod_loc, block_type)) {
  68. block.addTreePart(list, list2, set, mod_loc);
  69. }
  70. loc.add(mod_loc, -2, 0, 0);
  71. if(block.isTreePart(set, mod_loc, block_type)) {
  72. block.addTreePart(list, list2, set, mod_loc);
  73. }
  74. loc.add(mod_loc, 1, 0, 1);
  75. if(block.isTreePart(set, mod_loc, block_type)) {
  76. block.addTreePart(list, list2, set, mod_loc);
  77. }
  78. loc.add(mod_loc, 0, 0, -2);
  79. if(block.isTreePart(set, mod_loc, block_type)) {
  80. block.addTreePart(list, list2, set, mod_loc);
  81. }
  82. loc.add(mod_loc, 0, 1, 1);
  83. if(block.isTreePart(set, mod_loc, block_type)) {
  84. block.addTreePart(list, list2, set, mod_loc);
  85. }
  86. list.removeIndex(list, index);
  87. c++;
  88. if(c > 60) {
  89. msg("dev", "break");
  90. break;
  91. }
  92. }
  93. msg("dev", c, " ", set.getSize(set), " ", list.getSize(list2));
  94. return;
  95. }
  96. function block.isTreePart(set, location, tree_type) {
  97. if(block.getType(location) == tree_type) {
  98. return true;
  99. }
  100. state = block.getState(location, $prop_persistent);
  101. if(state != null && ! state) {
  102. return true;
  103. }
  104. set.add(set, location);
  105. return false;
  106. }
  107. function block.addTreePart(list, list2, set, location) {
  108. //if(!set.contains(set, location)) {
  109. list.add(list, location);
  110. list.add(list2, location);
  111. set.add(set, location);
  112. block.set(location, "minecraft:glass");
  113. //}
  114. }