2 tnt.explosion = new dragonblocks.Schematic([
3 ["", "air", "air", "air", ""],
4 ["air", "air", "air", "air", "air"],
5 ["air", "air", "§air", "air", "air"],
6 ["air", "air", "air", "air", "air"],
7 ["", "air", "air", "air", ""],
9 tnt.explosion.addFunction((node, map, x, y) => {
10 if(node.onblast && node.onblast(map, x, y) == false)
12 return dblib.random(0, 100) < 90;
14 tnt.ignite = function(map, x, y, time){
15 dragonblocks.setTimer("tntTimer", time, _ => {
16 tnt.explode(map, x, y);
17 }, map.getNode(x, y).meta);
19 tnt.explode = function(map, x, y){
20 map.setNode(x, y, "air");
21 dragonblocks.playSound("tnt_explode.ogg");
22 tnt.explosion.apply(map, x, y);
24 dragonblocks.registerNode({
30 texture: "tnt_tnt.png",
32 dragonblocks.playSound("tnt_ignite.ogg");
33 map.setNode(x, y, "tnt:active_tnt");
35 onblast: (map, x, y) => {
36 tnt.ignite(map, x, y, 0.1);
38 onclick: (map, x, y) => {
39 if(dragonblocks.player.getWieldedItem().item == "torch:torch"){
40 dragonblocks.playSound("tnt_ignite.ogg");
41 map.setNode(x, y, "tnt:active_tnt");
46 dragonblocks.registerNode({
47 name: "tnt:active_tnt",
52 texture: "tnt_active_tnt.png",
53 onset: (map, x, y) => {
54 tnt.ignite(map, x, y, 4);
64 dragonblocks.registerNode({
65 name: "tnt:gunpowder",
71 texture: "tnt_gunpowder.png",
72 onclick: (map, x, y) => {
73 if(dragonblocks.player.getWieldedItem().item == "torch:torch_floor")
74 map.setNode(x, y, "tnt:active_gunpowder");
78 dragonblocks.registerNode({
79 name: "tnt:active_gunpowder",
84 desc: "Gunpowder (active)",
85 texture: "tnt_active_gunpowder.png",
86 drops: "tnt:gunpowder",
87 onset: (map, x, y) => {
88 let meta = map.getNode(x, y).meta;
89 meta.gunpowderTime = 1;
90 meta.gunpowderInterval = setInterval(_ => {
91 meta.gunpowderTime -= 0.1;
92 if(meta.gunpowderTime <= 0){
93 map.setNode(x, y, "air");
94 for(let [ix, iy] of [[x - 1, y], [x + 1, y], [x, y - 1], [x, y + 1]]){
95 if(map.getNode(ix, iy).name == "tnt:gunpowder")
96 map.setNode(ix, iy, "tnt:active_gunpowder");
97 else if(map.getNode(ix, iy).name == "tnt:tnt")
98 tnt.ignite(map, ix, iy, tnt.time);
100 clearInterval(meta.gunpowderInterval);
104 onremove: (map, x, y) => {
105 clearInterval(map.getNode(x, y).meta.gunpowderInterval);