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, map, x, y) => {
21 if(node.stable && node.name != name + "_sapling")
24 dragonblocks.registerNode({
25 name: name + "_sapling",
28 texture: texture + "_sapling.png",
31 onset: (map, x, y) => {
32 dragonblocks.setTimer("growTimer", dblib.random(obj.growtimeMin, obj.growtimeMax), _ => {
33 obj.tree.apply(map, x, y);
34 }, map.getNode(x, y).meta);
36 onremove: (map, x, y) => {
37 dragonblocks.clearTimer("growTimer", map.getNode(x, y).meta);
39 onplace: (map, x, y) => {
40 if(map.getNode(x, y + 1) && ! map.getNode(x, y + 1).toNode().inGroup("dirt"))
43 desc: obj.desc + " " + obj.saplingName,
44 stacksize: obj.stacksize,
47 dragonblocks.registerNode({
52 texture: texture + "_tree.png",
53 groups: ["choppy", "plants_tree"],
55 desc: obj.desc + " " + obj.treeName,
56 stacksize: obj.stacksize,
58 onplace: (map, x, y) => {
60 map.getNode(x, y).mobstable = true;
64 dragonblocks.registerNode({
67 texture: texture + "_wood.png",
68 groups: ["choppy", "plants_wood"],
70 desc: obj.desc + " " + obj.woodName,
71 stacksize: obj.stacksize,
74 dragonblocks.registerNode({
75 name: name + "_leaves",
79 texture: texture + "_leaves.png",
83 if(dblib.random(0, obj.saplingDropChance) == 0)
84 return name + "_sapling";
85 return name + "_leaves";
87 desc: obj.desc + " " + obj.leavesName,
88 stacksize: obj.stacksize,
91 dragonblocks.registerRecipe({
92 result: name + "_wood " + obj.woodFromTree,
98 plants.registerSimple = function(obj){
99 if(! obj || ! obj.name || ! obj.growtimeMin || ! obj.growtimeMax || ! obj.maxHeight || ! obj.growOn)
101 obj.desc = obj.desc || dblib.humanFormat(obj.name);
102 obj.hardness = obj.hardness || 2,
103 obj.groups = obj.groups || ["snappy"];
104 let name = "plants:" + obj.name;
105 dragonblocks.registerNode({
107 texture: "plants_" + obj.name + ".png",
109 mobstable: obj.mobstable,
111 hardness: obj.hardness,
112 desc: obj.desc || dblib.humanFormat(obj.name),
113 onset: (map, x, y) => {
114 let meta = map.getNode(x, y).meta;
115 meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
116 meta.growInterval = setInterval(_ => {
117 if(! map.getNode(x, y - 1) || map.getNode(x, y - 1).stable)
118 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
121 if(! map.getNode(x, iy))
122 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
123 else if(iy == y + obj.maxHeight)
124 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
125 else if(! dragonblocks.itemMatch(obj.growOn, map.getNode(x, iy)))
127 else if(map.getNode(x, iy).name == name)
130 return meta.growTime = dblib.random(obj.growtimeMin, obj.growtimeMax);
133 if(meta.growTime <= 0)
134 map.setNode(x, y - 1, name);
137 onremove: (map, x, y) => {
138 clearInterval(map.getNode(x, y).meta.growInterval);
140 ondig: (map, x, y) => {
141 if(obj.dropAbove && map.getNode(x, y - 1) && map.getNode(x, y - 1).name == name)
142 dragonblocks.player.digEnd(x, y - 1);
144 stacksize: obj.stacksize,
148 plants.registerFlower = function(){}
149 plants.registerGrass = function(){}