123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- //event.load("block_break");
- event.load("block_click");
- prop_persistent = block.getProperty("persistent");
- tag_log_burn = block.getTag("logs_that_burn");
- @wait
- wait();
- if(event == "block_click") {
- if(player.getName(player) == "marvinius") {
- if(block.isTree(block_loc)) {
- block.removeTree(block_loc);
- }
- }
- }
- if(event == "block_break") {
- if(block.isTree(block_loc)) {
- tree_locs = block.removeTree(block_loc);
- }
- }
- goto("wait");
- function block.isTree(break_loc) {
- block = block.get(break_loc);
- if(!block.hasTag($tag_log_burn, block)) {
- return false;
- }
- block_type = block.getType(break_loc);
- //neighbours on same level found? return false
- mod_loc = loc.mod(break_loc, 1, 0, 0);
- if(block.getType(mod_loc) == block_type) {
- return false;
- }
- loc.add(mod_loc, -2, 0, 0);
- if(block.getType(mod_loc) == block_type) {
- return false;
- }
- loc.add(mod_loc, 1, 0, 1);
- if(block.getType(mod_loc) == block_type) {
- return false;
- }
- loc.add(mod_loc, 0, 0, -2);
- if(block.getType(mod_loc) == block_type) {
- return false;
- }
- loc.add(mod_loc, 0, 0, 1);
- //search top logs
- while(block.getType(mod_loc) == block_type) {
- loc.add(mod_loc, 0, 1, 0);
- }
- state = block.getState(mod_loc, $prop_persistent);
- if(state == null || state) {
- return false;
- }
- leave_type = "minecraft:birch_leaves";
- return true;
- }
- function block.removeTree(break_loc) {
- c = 0;
- list = list.new();
- list2 = list.new();
- set = set.new();
- block_type = block.getType(break_loc);
- list.add(list, break_loc);
- list.add(list2, break_loc);
- while(list.getSize(list) != 0) {
- index = list.getSize(list) - 1;
- loc = list.getIndex(list, index);
- mod_loc = loc.mod(loc, 1, 0, 0);
- if(block.isTreePart(set, mod_loc, block_type)) {
- block.addTreePart(list, list2, set, mod_loc);
- }
- loc.add(mod_loc, -2, 0, 0);
- if(block.isTreePart(set, mod_loc, block_type)) {
- block.addTreePart(list, list2, set, mod_loc);
- }
- loc.add(mod_loc, 1, 0, 1);
- if(block.isTreePart(set, mod_loc, block_type)) {
- block.addTreePart(list, list2, set, mod_loc);
- }
- loc.add(mod_loc, 0, 0, -2);
- if(block.isTreePart(set, mod_loc, block_type)) {
- block.addTreePart(list, list2, set, mod_loc);
- }
- loc.add(mod_loc, 0, 1, 1);
- if(block.isTreePart(set, mod_loc, block_type)) {
- block.addTreePart(list, list2, set, mod_loc);
- }
- list.removeIndex(list, index);
- c++;
- if(c > 60) {
- msg("dev", "break");
- break;
- }
- }
- msg("dev", c, " ", set.getSize(set), " ", list.getSize(list2));
- return;
- }
- function block.isTreePart(set, location, tree_type) {
- if(block.getType(location) == tree_type) {
- return true;
- }
- state = block.getState(location, $prop_persistent);
- if(state != null && ! state) {
- return true;
- }
- set.add(set, location);
- return false;
- }
- function block.addTreePart(list, list2, set, location) {
- //if(!set.contains(set, location)) {
- list.add(list, location);
- list.add(list2, location);
- set.add(set, location);
- block.set(location, "minecraft:glass");
- //}
- }
|