From 82314efd532e869d7c0e791d7a80115801b52a8e Mon Sep 17 00:00:00 2001 From: poikilos <7557867+poikilos@users.noreply.github.com> Date: Fri, 12 May 2017 17:08:40 -0400 Subject: [PATCH] added first working version of mock_tnt (WIP mod) --- etc/Mods,WIP/mock_tnt/README.txt | 15 + etc/Mods,WIP/mock_tnt/depends.txt | 3 + .../mock_tnt/etc/8bit/mock_tnt_blast.png | Bin 0 -> 893 bytes .../mock_tnt/etc/mock_tnt_background.png | Bin 0 -> 348 bytes .../mock_tnt/etc/mock_tnt_side-normal.png | Bin 0 -> 854 bytes .../mock_tnt/etc/mock_tnt_tnt_item.png | Bin 0 -> 292 bytes .../mock_tnt/etc/mock_tnt_tnt_node.png | Bin 0 -> 193 bytes .../mock_tnt/etc/mock_tnt_tnt_object.png | Bin 0 -> 254 bytes etc/Mods,WIP/mock_tnt/init.lua | 471 ++++++++++++++++++ .../mock_tnt/textures/mock_tnt_blast.png | Bin 0 -> 198 bytes .../mock_tnt/textures/mock_tnt_boom.png | Bin 0 -> 250 bytes .../mock_tnt/textures/mock_tnt_bottom.png | Bin 0 -> 563 bytes .../mock_tnt/textures/mock_tnt_side.png | Bin 0 -> 831 bytes .../mock_tnt/textures/mock_tnt_smoke.png | Bin 0 -> 872 bytes .../mock_tnt/textures/mock_tnt_top.png | Bin 0 -> 855 bytes .../mock_tnt_top_burning_animated.png | Bin 0 -> 1021 bytes etc/Mods,WIP/mock_tnt/update local.bat | 3 + etc/minetestserver-install-git-ENABLE_REDIS | 3 +- .../homedecor_modpack/homedecor/crafts.lua | 2 +- 19 files changed, 495 insertions(+), 2 deletions(-) create mode 100644 etc/Mods,WIP/mock_tnt/README.txt create mode 100644 etc/Mods,WIP/mock_tnt/depends.txt create mode 100644 etc/Mods,WIP/mock_tnt/etc/8bit/mock_tnt_blast.png create mode 100644 etc/Mods,WIP/mock_tnt/etc/mock_tnt_background.png create mode 100644 etc/Mods,WIP/mock_tnt/etc/mock_tnt_side-normal.png create mode 100644 etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_item.png create mode 100644 etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_node.png create mode 100644 etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_object.png create mode 100644 etc/Mods,WIP/mock_tnt/init.lua create mode 100644 etc/Mods,WIP/mock_tnt/textures/mock_tnt_blast.png create mode 100644 etc/Mods,WIP/mock_tnt/textures/mock_tnt_boom.png create mode 100644 etc/Mods,WIP/mock_tnt/textures/mock_tnt_bottom.png create mode 100644 etc/Mods,WIP/mock_tnt/textures/mock_tnt_side.png create mode 100644 etc/Mods,WIP/mock_tnt/textures/mock_tnt_smoke.png create mode 100644 etc/Mods,WIP/mock_tnt/textures/mock_tnt_top.png create mode 100644 etc/Mods,WIP/mock_tnt/textures/mock_tnt_top_burning_animated.png create mode 100644 etc/Mods,WIP/mock_tnt/update local.bat diff --git a/etc/Mods,WIP/mock_tnt/README.txt b/etc/Mods,WIP/mock_tnt/README.txt new file mode 100644 index 0000000..0b55072 --- /dev/null +++ b/etc/Mods,WIP/mock_tnt/README.txt @@ -0,0 +1,15 @@ +# Mock TNT +Mod for Minetest + +## Usage +* Place in mods folder such as in your subgame +* "Unknown Explosive" (mock_tnt:mock_tnt) can coexist with TNT if TNT is enabled, but gunpowder and mock_tnt work even if enable_tnt is false. + +## Differences from regular TNT +* Does not harm any block or entity + +## Known Issues +* also ignite gunpowder with "default:torch", "fire:permanent_flame" (minetest_game only ignites via "fire:basic_flame", "default:lava_source", "default:lava_flowing") -- for some reason torch works already but permanent_flame does not +* Make gunpowder ignite via "building_blocks:Fireplace" +* Make TNT ignite via neighbors "throwing:arrow_fireworks_blue", "throwing:arrow_fireworks_red" +* Make "fire:flint_and_steel" item ignite TNT and gunpowder \ No newline at end of file diff --git a/etc/Mods,WIP/mock_tnt/depends.txt b/etc/Mods,WIP/mock_tnt/depends.txt new file mode 100644 index 0000000..1a59d96 --- /dev/null +++ b/etc/Mods,WIP/mock_tnt/depends.txt @@ -0,0 +1,3 @@ +default + + diff --git a/etc/Mods,WIP/mock_tnt/etc/8bit/mock_tnt_blast.png b/etc/Mods,WIP/mock_tnt/etc/8bit/mock_tnt_blast.png new file mode 100644 index 0000000000000000000000000000000000000000..b6aeabdabcda849a0ff499f88790860e1b482828 GIT binary patch literal 893 zcmV-@1A_dCP)uFP?LeNAyJ!n8_cvsr>5U~w`gtGNKIRr72g z4RBo-;T)n)OiV1+4_ka((s;SCPd*jlMH$-dHsh%)E_yM0%`X3(c8L2ej<0kyO(PMV zbJkN($`eWY{XXk|4Tbp`3n}G|blVUV3I(cjCPJoJn$bzfD;$x;FbuSAnBj{xi~rtc z`E1$ZhaX>IsvaBrCh2sVor6x&XYHi zl?u>xohXVBGL7__Jl}LMO_N6tY=R)5>AXYz{=07$^|a0J8*jKgenaYmJH&C!%Dp1p zV3a!_X0WFg*liqBE=sm`k7=F{__R7jG-9GOTA<5|8%dAOFbspugJHg2m|-gC^L}Zi zoClzf#k>tl9LKb}D$~=`EY0QEIq1@CHnDROMN!Z+4QG(2R!#vB={5@s3pkEL{WL}a zSf11IeV3`SE~OSEVvL zimIv@hJhoJB;*xKGde=1sm_@c3I%Q(0?qS0)~b14h)Gswbe=w2$23j;xV)rN&NDHd z!Ic)TU$^-8;)HL%TBUKGr1A0>giNDUW=HvLtAnblH2!t~SiP4el}fRHI&2*T0goQo zn5N0|O$X^U5i(5_MQF;{T}mYv;q2jvThwYcO*i1n&u#ixbUGa-^D#gF+M?g@^T|iI z*xnzova*6MFHqjU>a3@cNF>OrU3}l?q@!Ssc9^$^%>gRq;XkC5OyzufVTS(!^<9R8 TB$E^(00000NkvXXu0mjf%pH|? literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/etc/mock_tnt_background.png b/etc/Mods,WIP/mock_tnt/etc/mock_tnt_background.png new file mode 100644 index 0000000000000000000000000000000000000000..db7a3e68c4f657a0242f23cb755b6458349696a9 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbtGZK`1_)(qI_GG*=4iR) zYP;rZyX9%S15v(?2M`tLdKMb`ml+0D7zb4v2UnT|SDA!VnFd#zhE|(}*4V@}+s3x; zdA#maq3ukdv77}Sk;M!Q+`=Ht$S`Y;1W=H@#M9T6{UIxlpcS`G>YSfIp(UO!jv*44 zb^R|+I_$u)Npa`o*IH-Ia{vAJ_s)COd`6?m<;W*yg|M@lN=!TU&ySrk)AKDy$=(ac zwEXYypZGv$so`#OVYTkAg6qkBTf~i&-JW?aimwgXF1f~X z&4hjB=QFwkQzv{pJwxhx`2Sts{y#SSbG3@KAn=KE;Est>^XA@qrY7+HR^SVZjUqW0 ky{=xne${-3?^07cp6{F!>eN@Y1KrEu>FVdQ&MBb@0L~|ZZU6uP literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/etc/mock_tnt_side-normal.png b/etc/Mods,WIP/mock_tnt/etc/mock_tnt_side-normal.png new file mode 100644 index 0000000000000000000000000000000000000000..53fd642ade4f88215b84a36f08a8c85e3dc7905a GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47%v9+gt$uR21)7#OX-J78-z(2 zhDsZT%K(v4gsf47v~jqMafGaKq^wDloJq8tX_TC4v^)@*0a1*CS**Nytb%!r0+6(b zRRp0pB}*WRSF!@41Z5CPRJKl3u>qnaMcZT*+hkSSBvspFWxEu0+Z0v1WHk^{Hb3Q&k;+C{5iVO~WBg)iGVuFhyTCQ1It~olcSvs!ST5dVIZn;|SIoj?y zTJHHe?m0T{xjG(sIvxeO9(j5mxq2RX`arH{o~~z}9*8V705ZIQC|}>JK+ij0&$~e1 zyGY-s$iS!22uS)C8v7O-`4yS?l^FS#8vB=+0Lj2IlfY8bz%sMIa`V74^T2Y8;7YTQ za)>(e<{`4R$e&4nP#!+wnJ zfpN@P;1OBOz`!jG!i)^F=12eq*-JcqUD+S9@(8i>?p<+S8<+?rJY5_^BrYc>B&0lh zDkvZ%u)TQO#pj7h2?2gQTyIEFyx3ASXd_5qv%kjVw#k!*4^7m&XZRfgXGG603bjvd|)mL`1nqTIbkL6b; zC2a`s);#h4)%WH4H*fG^P-sfVhwt~yW v(E0w7FJj&NYNgYyGZPgV4Qorq*cfIcxIEdTx#~4A*cd!r{an^LB{Ts5fVwI( literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_item.png b/etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_item.png new file mode 100644 index 0000000000000000000000000000000000000000..c8cf616a710463e4b8694bb94718180259387564 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbtGZK`1_)(qI_GG*=4iR) zYP;rZyX9%S15v(?2M`tLdKMb`ml+0D7zb4v2UnT|SDA!VnFd#zhE|(}*4V@}+s3x; zdA#maq3ukdu~R%<977}|SsNI`m<>5xj?Z1w#GA1ATK)gYzf@x1Z`=B8j;Hsx$6xQJ zDk(kBy!fZdHSohPfoBFBNt<`3Xtb$ha;?t3xpBGn+cnc_pBC>s$9KDLLWBLJWeazw zcJ*>H2`^+T%Bb?#^>j^fn){QIrMiDko?o{vHF{D}1LHl097FT(6KpDiwtQ%1u9C>p i$vkU0d0TPXOL^9xyjk-qZoLM&kHOQ`&t;ucLK6UmVQ^Cb literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_node.png b/etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_node.png new file mode 100644 index 0000000000000000000000000000000000000000..cb59ff4677a745d8e9b5c4f4ccd9a357e3f4db0c GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjtFESshof1Tzei_n!T*Ma zODsoofl|4iE{-7;w^VyNc^M3O4*mEx|L3E5K^UwRkD_o2J;q1ci;S(pS>UpU(Y5C=Lm+@ZhV=WL$@vyd* pJlM=VIhJY1ifAV9(wOK2c2XOdlz4w6w*f6?@O1TaS?83{1OVH!MqU5_ literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_object.png b/etc/Mods,WIP/mock_tnt/etc/mock_tnt_tnt_object.png new file mode 100644 index 0000000000000000000000000000000000000000..c0166c31f8ff34468d52ff0accbb6bd592261e6c GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyLIFM@u0YzH!MuT?;XlLw|6Bh2 z|NlRBjSbW49#KZGqeF 4 then + pos.x, pos.z = center.x, center.z + break + end + pos.x = center.x + math.random(-radius, radius) + pos.z = center.z + math.random(-radius, radius) + def = reg_nodes[minetest.get_node(pos).name] + i = i + 1 + until def and not def.walkable +end + + +-- minetest.register_node( "mock_tnt:mock_tnt", { +-- description = "Unknown Explosive", +-- tiles = { "mock_tnt_top.png", "mock_tnt_sides.png", "mock_tnt_sides.png", "mock_tnt_sides.png", "mock_tnt_sides.png", "mock_tnt_sides.png" }, +-- is_ground_content = true, +-- groups = {cracky = 1, level = 2}, +-- sounds = default.node_sound_sand_defaults(), +-- }) + +minetest.register_alias("tnt:tnt", "mock_tnt:mock_tnt") + +-- Only when "not" to not overlap tnt mod: +if not enable_tnt then + minetest.register_craft({ + output = "mock_tnt:mock_tnt", + recipe = { + {"group:wood", "tnt:gunpowder", "group:wood"}, + {"tnt:gunpowder", "tnt:gunpowder", "tnt:gunpowder"}, + {"group:wood", "tnt:gunpowder", "group:wood"} + } + }) + + minetest.register_abm({ + label = "mock_tnt ignition", + nodenames = {"group:tnt", "tnt:gunpowder"}, + neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing", "default:torch", "fire:permanent_flame"}, + interval = 4, + chance = 1, + action = function(pos, node) + mock_tnt.burn(pos, node.name) + end, + }) +end + + +local function add_effects(pos, radius) + minetest.add_particle({ + pos = pos, + velocity = vector.new(), + acceleration = vector.new(), + expirationtime = 0.4, + size = radius * 10, + collisiondetection = false, + vertical = false, + texture = "mock_tnt_boom.png", + }) + minetest.add_particlespawner({ + amount = 64, + time = 0.5, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -10, y = -10, z = -10}, + maxvel = {x = 10, y = 10, z = 10}, + minacc = vector.new(), + maxacc = vector.new(), + minexptime = 1, + maxexptime = 2.5, + minsize = radius * 3, + maxsize = radius * 5, + texture = "mock_tnt_smoke.png", + }) + + -- we just dropped some items. Look at the items entities and pick + -- one of them to use as texture + local texture = "mock_tnt_blast.png" --fallback texture + -- local most = 0 + -- for name, stack in pairs(drops) do + -- local count = stack:get_count() + -- if count > most then + -- most = count + -- local def = minetest.registered_nodes[name] + -- if def and def.tiles and def.tiles[1] then + -- texture = def.tiles[1] + -- end + -- end + -- end + + minetest.add_particlespawner({ + amount = 64, + time = 0.1, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -3, y = 0, z = -3}, + maxvel = {x = 3, y = 5, z = 3}, + minacc = {x = 0, y = -10, z = 0}, + maxacc = {x = 0, y = -10, z = 0}, + minexptime = 0.8, + maxexptime = 2.0, + minsize = radius * 0.66, + maxsize = radius * 2, + texture = texture, + collisiondetection = true, + }) +end + +function mock_tnt.burn(pos, nodename) + local name = nodename or minetest.get_node(pos).name + local group = minetest.get_item_group(name, "mock_tnt") + if group > 0 then + minetest.sound_play("tnt_ignite", {pos = pos}) + minetest.set_node(pos, {name = name .. "_burning"}) + minetest.get_node_timer(pos):start(1) + elseif name == "tnt:gunpowder" then + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end +end + +local function UNUSED_mock_tnt_explode(pos, radius, ignore_protection, ignore_on_blast) + -- NOTE: register_tnt def param and register_tnt itself leave ignore_protection undefined + -- which translates to false below. + pos = vector.round(pos) + -- scan for adjacent TNT nodes first, and enlarge the explosion + local vm1 = VoxelManip() + local p1 = vector.subtract(pos, 2) + local p2 = vector.add(pos, 2) + local minp, maxp = vm1:read_from_map(p1, p2) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm1:get_data() + local count = 0 + local c_tnt = minetest.get_content_id("mock_tnt:mock_tnt") + local c_tnt_burning = minetest.get_content_id("mock_tnt:mock_tnt_burning") + local c_tnt_boom = minetest.get_content_id("mock_tnt:boom") + local c_air = minetest.get_content_id("air") + + for z = pos.z - 2, pos.z + 2 do + for y = pos.y - 2, pos.y + 2 do + local vi = a:index(pos.x - 2, y, z) + for x = pos.x - 2, pos.x + 2 do + local cid = data[vi] + if cid == c_tnt or cid == c_tnt_boom or cid == c_tnt_burning then + count = count + 1 + data[vi] = c_air + end + vi = vi + 1 + end + end + end + + vm1:set_data(data) + vm1:write_to_map() + + -- recalculate new radius + radius = math.floor(radius * math.pow(count, 1/3)) + + -- perform the explosion + local vm = VoxelManip() + local pr = PseudoRandom(os.time()) + p1 = vector.subtract(pos, radius) + p2 = vector.add(pos, radius) + minp, maxp = vm:read_from_map(p1, p2) + a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + data = vm:get_data() + + local drops = {} + local on_blast_queue = {} + + local c_fire = minetest.get_content_id("fire:basic_flame") + -- for z = -radius, radius do + -- for y = -radius, radius do + -- local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z) + -- for x = -radius, radius do + -- local r = vector.length(vector.new(x, y, z)) + -- if (radius * radius) / (r * r) >= (pr:next(80, 125) / 100) then + -- local cid = data[vi] + -- local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} + -- if cid ~= c_air then + -- data[vi] = destroy(drops, p, cid, c_air, c_fire, + -- on_blast_queue, ignore_protection, + -- ignore_on_blast) + -- end + -- end + -- vi = vi + 1 + -- end + -- end + -- end + + -- vm:set_data(data) + -- vm:write_to_map() + -- vm:update_map() + -- vm:update_liquids() + + -- call check_single_for_falling for everything within 1.5x blast radius + for y = -radius * 1.5, radius * 1.5 do + for z = -radius * 1.5, radius * 1.5 do + for x = -radius * 1.5, radius * 1.5 do + local rad = {x = x, y = y, z = z} + local s = vector.add(pos, rad) + local r = vector.length(rad) + if r / radius < 1.4 then + minetest.check_single_for_falling(s) + end + end + end + end + + for _, queued_data in pairs(on_blast_queue) do + local dist = math.max(1, vector.distance(queued_data.pos, pos)) + local intensity = (radius * radius) / (dist * dist) + local node_drops = queued_data.on_blast(queued_data.pos, intensity) + if node_drops then + for _, item in pairs(node_drops) do + add_drop(drops, item) + end + end + end + + return drops, radius +end + +function mock_tnt.boom(pos, def) + minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) + minetest.set_node(pos, {name = "mock_tnt:boom"}) + -- local drops, radius = mock_tnt_explode(pos, def.radius, def.ignore_protection, + -- def.ignore_on_blast) + -- append entity drops + -- local damage_radius = (radius / def.radius) * def.damage_radius + local damage_radius = def.damage_radius + -- entity_physics(pos, damage_radius, drops) + -- if not def.disable_drops then + -- eject_drops(drops, pos, radius) + -- end + -- add_effects(pos, radius, drops) + add_effects(pos, damage_radius) +end + +minetest.register_node("mock_tnt:boom", { + drawtype = "airlike", + light_source = default.LIGHT_MAX, + walkable = false, + drop = "", + groups = {dig_immediate = 3}, + on_construct = function(pos) + minetest.get_node_timer(pos):start(0.4) + end, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, + -- unaffected by explosions + on_blast = function() end, +}) + +function mock_tnt.register_tnt(def) + local name + if not def.name:find(':') then + name = "mock_tnt:" .. def.name + else + name = def.name + def.name = def.name:match(":([%w_]+)") + end + if not def.tiles then def.tiles = {} end + local tnt_top = def.tiles.top or def.name .. "_top.png" + local tnt_bottom = def.tiles.bottom or def.name .. "_bottom.png" + local tnt_side = def.tiles.side or def.name .. "_side.png" + local tnt_burning = def.tiles.burning or def.name .. "_top_burning_animated.png" + if not def.damage_radius then def.damage_radius = def.radius * 2 end + + -- if "not" since only make fake if real does not exist: + + -- if not enable_tnt then + minetest.register_node(":" .. name, { + description = def.description, + tiles = { tnt_top, tnt_bottom, tnt_side }, + is_ground_content = false, + groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, + sounds = default.node_sound_sand_defaults(), + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + minetest.set_node(pos, {name = name .. "_burning"}) + end + end, + on_blast = function(pos, intensity) + minetest.after(0.1, function() + mock_tnt.boom(pos, def) + end) + end, + mesecons = {effector = + {action_on = + function(pos) + mock_tnt.boom(pos, def) + end + } + }, + on_burn = function(pos) + minetest.set_node(pos, {name = name .. "_burning"}) + end, + on_ignite = function(pos, igniter) + minetest.set_node(pos, {name = name .. "_burning"}) + end, + }) + -- end + + minetest.register_node(":" .. name .. "_burning", { + tiles = { + { + name = tnt_burning, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + tnt_bottom, tnt_side + }, + light_source = 5, + drop = "", + sounds = default.node_sound_sand_defaults(), + groups = {falling_node = 1}, + on_timer = function(pos, elapsed) + mock_tnt.boom(pos, def) + end, + -- unaffected by explosions + on_blast = function() end, + on_construct = function(pos) + minetest.sound_play("tnt_ignite", {pos = pos}) + minetest.get_node_timer(pos):start(4) + minetest.check_for_falling(pos) + end, + }) +end + +mock_tnt.register_tnt({ + name = "mock_tnt:mock_tnt", + description = "Unknown Explosive", + radius = tnt_radius, +}) + + + +-- ALREADY DONE by minetest_game tnt mod even if tnt_enable is false: + +-- minetest.register_node("tnt:gunpowder_burning", { +-- drawtype = "raillike", +-- paramtype = "light", +-- sunlight_propagates = true, +-- walkable = false, +-- light_source = 5, +-- tiles = {{ +-- name = "mock_tnt_gunpowder_burning_straight_animated.png", +-- animation = { +-- type = "vertical_frames", +-- aspect_w = 16, +-- aspect_h = 16, +-- length = 1, +-- } +-- }, +-- { +-- name = "mock_tnt_gunpowder_burning_curved_animated.png", +-- animation = { +-- type = "vertical_frames", +-- aspect_w = 16, +-- aspect_h = 16, +-- length = 1, +-- } +-- }, +-- { +-- name = "mock_tnt_gunpowder_burning_t_junction_animated.png", +-- animation = { +-- type = "vertical_frames", +-- aspect_w = 16, +-- aspect_h = 16, +-- length = 1, +-- } +-- }, +-- { +-- name = "mock_tnt_gunpowder_burning_crossing_animated.png", +-- animation = { +-- type = "vertical_frames", +-- aspect_w = 16, +-- aspect_h = 16, +-- length = 1, +-- } +-- }}, +-- selection_box = { +-- type = "fixed", +-- fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, +-- }, +-- drop = "", +-- groups = {dig_immediate = 2, attached_node = 1, connect_to_raillike = minetest.raillike_group("gunpowder")}, +-- sounds = default.node_sound_leaves_defaults(), +-- on_timer = function(pos, elapsed) +-- for dx = -1, 1 do +-- for dz = -1, 1 do +-- for dy = -1, 1 do +-- if not (dx == 0 and dz == 0) then +-- mock_tnt.burn({ +-- x = pos.x + dx, +-- y = pos.y + dy, +-- z = pos.z + dz, +-- }) +-- end +-- end +-- end +-- end +-- minetest.remove_node(pos) +-- end, +-- -- unaffected by explosions +-- on_blast = function() end, +-- on_construct = function(pos) +-- minetest.sound_play("mock_tnt_gunpowder_burning", {pos = pos, gain = 2}) +-- minetest.get_node_timer(pos):start(1) +-- end, +-- }) +-- +-- minetest.register_craft({ +-- output = "tnt:gunpowder 5", +-- type = "shapeless", +-- recipe = {"default:coal_lump", "default:gravel"} +-- }) + +-- minetest.register_node("tnt:gunpowder", { +-- description = "Gun Powder", +-- drawtype = "raillike", +-- paramtype = "light", +-- is_ground_content = false, +-- sunlight_propagates = true, +-- walkable = false, +-- tiles = {"mock_tnt_gunpowder_straight.png", "mock_tnt_gunpowder_curved.png", "mock_tnt_gunpowder_t_junction.png", "mock_tnt_gunpowder_crossing.png"}, +-- inventory_image = "mock_tnt_gunpowder_inventory.png", +-- wield_image = "mock_tnt_gunpowder_inventory.png", +-- selection_box = { +-- type = "fixed", +-- fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, +-- }, +-- groups = {dig_immediate = 2, attached_node = 1, flammable = 5, +-- connect_to_raillike = minetest.raillike_group("gunpowder")}, +-- sounds = default.node_sound_leaves_defaults(), +-- +-- on_punch = function(pos, node, puncher) +-- if puncher:get_wielded_item():get_name() == "default:torch" then +-- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) +-- end +-- end, +-- on_blast = function(pos, intensity) +-- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) +-- end, +-- on_burn = function(pos) +-- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) +-- end, +-- on_ignite = function(pos, igniter) +-- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) +-- end, +-- }) diff --git a/etc/Mods,WIP/mock_tnt/textures/mock_tnt_blast.png b/etc/Mods,WIP/mock_tnt/textures/mock_tnt_blast.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa3192ad99166242611b3775910aed40e513d40 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#AuErFxV25JNgz-t)zif>#Nu>vf&}a01d#`f{{QLWhm-p9eDiN?&7Es| zlC9=%#hW+V*U#Ty|L@Po+sDh>^&bWuZ}M)MIC0|4#>U2(ot>Q%8#_Bir(3DT2!*e! rTmAd<=SO$#?e*^LEqIu1t5?d9*{^=F@2lr^poI*cu6{1-oD!M21s zKV;<*<~5Le%h(PS%J6h?4B@!$d(M!r!GMD`z-q_#V{!+iXH+oy7L;q;S@4CesMfyl zBmWcLC(MFDMQ2RbpOHRr=SrRfkKi&+3IFt6NAB#MAHwW^zMf|Rqu2zWHUAPXzBuR? q^jd>OyZ~3tMv*uKUiy#4>&URNwb&+uV%ZoJFkNb~i8s$jd4^bX=!d za<+QQFaQ9Nrc&VUVRhdD^p$CzJp%6SINS^Xi)bFfthFnPVAZ@V5di`b*?xwbn|IZ2 z)~*wPM!2RNZb0OzJpTOZ?No~D(Aq63R`1RhfD&=IYaV6L=ilFbnnl{NBaiJmt9hpc z1OQE?wBrD?nTLCtXEy_L2h+TGL_3ZTRe<)J!d(WHvV@1-cenxQa{x5w?lb^pVK-~_ zYS)$5a-W9`126!n=YBq)|DUB74A8i)2mlE8VH~gbt@{mg7GaTbT{UGQCSrbh{ni)c zvh?R6;&xpCcu1OaUY7Iu?8c>17{K{_hPmA>JnH_Q<{5}oN}8s2oe`1d`96~8J4TCEY`W}366bnRQX{{s`;H9>_X(F_0p002ovPDHLkV1i#o B`RD)u literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/textures/mock_tnt_side.png b/etc/Mods,WIP/mock_tnt/textures/mock_tnt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..41a12f44993e548cacd2a76f77dd7ff1a3d8af66 GIT binary patch literal 831 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47%v9+gt$uR21)7#OX-J78-z(2 zhDsZT%K(v4gsf47v~jqMafGaKq^wDloJq8tX_TC4v^)@*0a1*CS**Nytb%!r0+6(b zRRp0pB}*WRSF!@41Z5CPRJKl3u>qnaMcZT*+hkSSBvspFWxEu0+Z0v1WHk^{Hb3Q&k;+C{5iVO~WBg)iGVuFhyTCQ1It~olcSvs!ST5dVIZn;|SIoj?y zTJHHe?m0T{xjG(sIvxeO9(j5mxq2RX`arH{o~~z}9*8V705ZIQC|}>JK+ij0&$~e1 zyGY-s$iS!22uS)C8v7O-`4yS?l^FS#8vB=+0Lj2IlfY8bz%sMIa`V74^T2Y8;7YTQ za)>(e<{`4R$e&4nP#!+wnJ zfpN@P;1OBOz`!jG!i)^F=12eq*-JcqUD+S9@`y6ZWii`-1117SPZ!4!iOanGclDhL zW!m?<#_`vk>eDoK{cI$&a_bVKPnQI8cdSS}{VdhztiZ95%^Qx)NSwF-+Rln~cIS&f z3U0izHS^TEUCAFi7Dl?R*|x6v>X9P*xbpn|`y05DbDHxf#fBxU4-H5;Ik9D{DqE%i zZ}IM@O*ZMv7JC|437(6Yb}##U_{;(YDUs^?1-~}_`uqD^h=t#;J$``)#Ml1`Y(9LY z$KuBF1Kjhc+)TKlsd)KB_|J!ny=Hx#pmF}$Pv@l}diTTg`k3@oUns}Sza!eceCE%> z@bvBypV_|WQVz0Q)%a0r6ZvdLYP%*IOSJGV>7ZzxOMR8sFXgyAGMs*RT}kqaxPOcd Xf>9rL#cY)Vh7W_MtDnm{r-UW|8p9&~ literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/textures/mock_tnt_smoke.png b/etc/Mods,WIP/mock_tnt/textures/mock_tnt_smoke.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc6de65a0a373f9cdec8bb60f9a18c6d1b8a940 GIT binary patch literal 872 zcmV-u1DE`XP)0?V0009ANklco@ z`&1Q;O`02M2_cL4*~Z4k4<{!l7e!G#1VJ!eUtiCql*tnyNs@)b!^6*dz229Mu}-7W zXh%_06GGU-;jk>r@)dyJmY0{$=jP`AJUBS`8^9a;5fDYur%I_W>h=1%QtHKcJQi7& z5v?^CV}%gn{e^`E#u%GFJw4@ndwbLv^VbvL>gwwAR;%@~5TZ#45tGS;Qc4M>6t3$! zl+s3$B=06kVt2b;>+I|-nNFu83IP3ne>+Xnt;NN~cZ@MCj$>LB1)-F}^E~*zPt!ED z!Y~XR$5}c)KJE^O!`{x$j=U_@qy=gFMZ#C@BaQ?GRA10=frhg)M_P?2wALt!f;f&t zdc7W`lq~?ab`S&(=Uf4>CzA;gLLkdBc%FwSiV#H+7-J~Q5|mO{mPIC$iDy|Bq?Ccp zIk#_aZiwr;CQVZ?#=scEXf(oXHiPTBV2nX)4coS%l%io6>dVVZQdQN84dAtua(a7v zTLnR2TCEl-%Mwyb#Bq!)%TN>rYPH(qLs3-~vMei=QX!R6j+)KpcK~9~^QtV%%)`S2 z!Z3u^8k}>}Xf#X^1jh3`!#Oun%1Q_kXIb{sQxeb5&wsIP`;#O|{Ml?q|6PVL#yp;1 zRh6NXB97x&O8NWd=H^TKEQ#L=Ax?x4W6pV@l+vE(>1MNOIOjUgbDgHC4#V&b=lu2B z+S-o*U_C3+eYe|v#Ta|xx~`N`f>K&cr_(%5(|kN0r-YCj#@HVKzVCE8KmV_dkGi|N y+YZC<>oiU0=I7^mzu&*w+S;0~uC9LbU++K83s>b}8Ep0d0000qnaMcZT*+hkSSBvspFWxEu0+Z0v1WHk^{Hb3Q&k;+C{5iVO~WBg)iGVuFhyTCQ1It~olcSvs!ST5dVIZn;|SIoj?y zTJHHe?m0T{xjG(sIvxeO9(j5mxq2RX`arH{o~~z}9*8V705ZIQC|}>JK+ij0&$~e1 zyGY-s$iS!22uS)C8v7O-`4yS?l^FS#8vB=+0Lj2IlfY8bz%sMIa`V74^T2Y8;7YTQ za)>(e<{`4R$e&4nP#!+wnJ zfpN@P;1OBOz`!jG!i)^F=12eq*-JcqUD+S9@(8i335u9y0~3Lyr;B5V#O36Kgp_Ab z1qFlzwij=^_&hNwAt6cB^Xs>QaF2k{DHBbur6(m^HRPJwZ)Rf9%lmE8m!8LI4}=3e zdd_x#m}`3axNf9tQ*Wbtn3dV~O{v$`{OP(Ap)V=NW*lw1dc~x+NZYqd1H;s|rSUiw zNliQ(8=U@i+tkz_QmecSIc8WK@y~lT&$QUhKRqz2!L)fpSx{(X@bNXB!BWM4WVbGn z(76)C^=bF7<)!{FR`vRP-<%*2z@@h)J2xX|P3Bq;^NC^!0-~2q^v|zaxBh%z(WR+k zPm&&N54mveOtIFd@{gwc;erY29L8eYAzmgWCR_RYCYn47OXEm-dO!PC{xWt~$(69AKWA7ual literal 0 HcmV?d00001 diff --git a/etc/Mods,WIP/mock_tnt/textures/mock_tnt_top_burning_animated.png b/etc/Mods,WIP/mock_tnt/textures/mock_tnt_top_burning_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..08997e83fcdefbd9424030ce75e0eb864595e534 GIT binary patch literal 1021 zcmV@n0|J9Ut|Nrd;AjYnAXtZ4$!>R_d!Lt? zGjk5&HVvU$u|Z&V{)9-|1w~`P7*I79%ccbbswyeZ!;qOpG9g-n zNZwz2@jAySAgBsD4FGSx_i?>kmQ4$yzAOx)v6jlNvuJW+4$&wG8nv|EKUjbGNxSH#?T|y@ z7)8Wal`Tq&!$3r2$yI)_+H=nP(my;tw1A>&5G|3-S#r)X=9CCj$$M)N4b)9L_8S8R z0III3w8rhW$mQ4%mJ8-+QX*qeMOYU3t13(-ngUI7FjZ>II&M9$B%=V=l zw=`!e3ou5r)Ll!Ce))OBAu1Y!D8_IIRCqNA)>7DPTv13$#yem6lv13783q85QLT45 zB_um-2M!^pL25XU*plcb!O zEfJENx4q;{uzOjl!UdN(M2fB&rvC0DyaUk1q6paTs`-QH=9`vD#~v%l2Bg-aoK_ z@YI8~pqgXM^K`L?hsTFk90koQ=dX4yIKQB|_+F8)U!{J8Tl_S>1aDnhD2 z{-1qtb=%&(|HgX%VAqGlDaGK+V$SKgeE@*V^#K5$*9Uy!!PCwI&w*!N?;liMvv^^z zUUuDTS+z~sb*`?dt}piR@c8h`!XVh`Vb|Lc{9|Kj0q*Zb;QG9: -sudo add-apt-repository ppa:chris-lea/redis-server +#this ppa doesn't work anymore (tested 2017-04) +#sudo add-apt-repository ppa:chris-lea/redis-server sudo apt-get update sudo apt-get install redis-server diff --git a/games/ENLIVEN/mods/homedecor_modpack/homedecor/crafts.lua b/games/ENLIVEN/mods/homedecor_modpack/homedecor/crafts.lua index d99f79f..5f445f3 100644 --- a/games/ENLIVEN/mods/homedecor_modpack/homedecor/crafts.lua +++ b/games/ENLIVEN/mods/homedecor_modpack/homedecor/crafts.lua @@ -2936,7 +2936,7 @@ minetest.register_craft({ { "default:steel_ingot","default:steel_ingot","default:steel_ingot" } }, }) -minetest.register_alias("homedecor:beer_tap", "homedecor:drink_tap") +-- already done in gastronomy.lua: minetest.register_alias("homedecor:beer_tap", "homedecor:drink_tap") minetest.register_craft({ output = "homedecor:swing",