1 dragonblocks.registerGroup({
4 dragonblocks.registerGroup({
7 plants.registerTree = function(obj){
8 if(! (obj.name && obj.tree && obj.growtimeMin && obj.growtimeMax && obj.saplingDropChance))
10 obj.desc = obj.desc || dblib.humanFormat(obj.name);
11 obj.leavesName = obj.leavesName || "Leaves";
12 obj.treeName = obj.treeName || "Tree";
13 obj.woodName = obj.woodName || "Wood";
14 obj.saplingName = obj.saplingName || "Sapling";
15 obj.woodFromTree = obj.woodFromTree || 1;
16 let name = "plants:" + obj.name;
17 let texture = "plants_" + obj.name;
18 obj.tree.replace("leaves", name + "_leaves");
19 obj.tree.replace("tree", name + "_tree");
20 obj.tree.addFunction((node, x, y) => {
21 if(node.stable && node.name != name + "_sapling")
24 dragonblocks.registerNode({
25 name: name + "_sapling",
28 texture: texture + "_sapling.png",
32 dragonblocks.setTimer("growTimer", dblib.random(obj.growtimeMin, obj.growtimeMax), _ => {obj.tree.apply(x, y);}, dragonblocks.getNode(x, y).meta);
35 dragonblocks.clearTimer("growTimer", dragonblocks.getNode(x, y).meta);
38 if(dragonblocks.getNode(x, y + 1) && ! dragonblocks.getNode(x, y + 1).toNode().inGroup("dirt"))
41 desc: obj.desc + " " + obj.saplingName,
42 stacksize: obj.stacksize,
45 dragonblocks.registerNode({
50 texture: texture + "_tree.png",
51 groups: ["choppy", "plants_tree"],
53 desc: obj.desc + " " + obj.treeName,
54 stacksize: obj.stacksize,
57 setTimeout(_ => {dragonblocks.getNode(x, y).mobstable = true})
60 dragonblocks.registerNode({
63 texture: texture + "_wood.png",
64 groups: ["choppy", "plants_wood"],
66 desc: obj.desc + " " + obj.woodName,
67 stacksize: obj.stacksize,
70 dragonblocks.registerNode({
71 name: name + "_leaves",
75 texture: texture + "_leaves.png",
79 if(dblib.random(0, obj.saplingDropChance) == 0)
80 return name + "_sapling";
81 return name + "_leaves";
83 desc: obj.desc + " " + obj.leavesName,
84 stacksize: obj.stacksize,
87 dragonblocks.registerRecipe({
88 result: name + "_wood " + obj.woodFromTree,
94 plants.registerSimple = function(obj){
95 if(! obj || ! obj.name || ! obj.growtimeMin || ! obj.growtimeMax || ! obj.maxHeight || ! obj.growOn)
97 obj.desc = obj.desc || dblib.humanFormat(obj.name);
98 obj.hardness = obj.hardness || 2,
99 obj.groups = obj.groups || ["snappy"];
100 let name = "plants:" + obj.name;
101 dragonblocks.registerNode({
103 texture: "plants_" + obj.name + ".png",
105 mobstable: obj.mobstable,
107 hardness: obj.hardness,
108 desc: obj.desc || dblib.humanFormat(obj.name),
110 let meta = dragonblocks.getNode(x, y).meta;
111 meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
112 meta.growInterval = setInterval(_ => {
113 if(! dragonblocks.getNode(x, y - 1) || dragonblocks.getNode(x, y - 1).stable)
114 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
117 if(! dragonblocks.getNode(x, iy))
118 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
119 else if(iy == y + obj.maxHeight)
120 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
121 else if(! dragonblocks.itemMatch(obj.growOn, dragonblocks.getNode(x, iy)))
123 else if(dragonblocks.getNode(x, iy).name == name)
126 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
129 if(meta.growTime <= 0)
130 dragonblocks.setNode(x, y - 1, name);
133 onremove: (x, y) => {
134 clearInterval(dragonblocks.getNode(x, y).meta.growInterval);
137 if(obj.dropAbove && dragonblocks.getNode(x, y - 1) && dragonblocks.getNode(x, y - 1).name == name)
138 dragonblocks.player.digEnd(x, y - 1);
140 stacksize: obj.stacksize,
144 plants.registerFlower = function(){}
145 plants.registerGrass = function(){}