From ffa9d2d0fd7ba72a84d9a2f754ac7aa22b657779 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Tue, 8 Feb 2022 10:58:25 +0100 Subject: [PATCH] add basic chains and lantern model and API --- mods/ITEMS/mcl_lanterns/init.lua | 161 ++++++++++++++++++ mods/ITEMS/mcl_lanterns/mod.conf | 6 + .../models/mcl_lanterns_chain.obj | 24 +++ .../models/mcl_lanterns_lantern_floor.obj | 106 ++++++++++++ mods/ITEMS/mcl_lanterns/register.lua | 8 + .../textures/mcl_lanterns_chain.png | Bin 0 -> 224 bytes .../textures/mcl_lanterns_chain_inv.png | Bin 0 -> 217 bytes .../textures/mcl_lanterns_lantern.png | Bin 0 -> 8789 bytes .../textures/mcl_lanterns_lantern_inv.png | Bin 0 -> 5736 bytes 9 files changed, 305 insertions(+) create mode 100644 mods/ITEMS/mcl_lanterns/init.lua create mode 100644 mods/ITEMS/mcl_lanterns/mod.conf create mode 100644 mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj create mode 100644 mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj create mode 100644 mods/ITEMS/mcl_lanterns/register.lua create mode 100755 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png create mode 100755 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png create mode 100755 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png create mode 100755 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png diff --git a/mods/ITEMS/mcl_lanterns/init.lua b/mods/ITEMS/mcl_lanterns/init.lua new file mode 100644 index 000000000..d59bb558e --- /dev/null +++ b/mods/ITEMS/mcl_lanterns/init.lua @@ -0,0 +1,161 @@ +local S = minetest.get_translator("mcl_lanterns") +local modpath = minetest.get_modpath("mcl_lanterns") + +mcl_lanterns = {} + + +function mcl_lanterns.register_lantern(name, def) + local itemstring_floor = "mcl_lanterns:"..name.."_floor" + local itemstring_ceiling = "mcl_lanterns:"..name.."_ceiling" + + minetest.register_node(itemstring_floor, { + description = def.description, + drawtype = "mesh", + mesh = "mcl_lanterns_lantern_floor.obj", + inventory_image = def.texture_inv, + wield_image = def.texture_inv, + tiles = {{ + name = def.texture, + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + light_source = def.light_level, + groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + selection_box = { + type = "fixed", + fixed = { + {-0.1875, -0.5, -0.1875, 0.1875, -0.0625, 0.1875}, + {-0.125, -0.0625, -0.125, 0.125, 0.0625, 0.125}, + {-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625}, + }, + }, + collision_box = { + type = "fixed", + fixed = { + {-0.1875, -0.5, -0.1875, 0.1875, -0.0625, 0.1875}, + {-0.125, -0.0625, -0.125, 0.125, 0.0625, 0.125}, + {-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625}, + }, + }, + --sounds = default.node_sound_wood_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) + local fakestack = itemstack + if wdir == 0 then + fakestack:set_name(itemstring_ceiling) + elseif wdir == 1 then + fakestack:set_name(itemstring_floor) + end + + itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) + itemstack:set_name(itemstring_floor) + + return itemstack + end, + --floodable = true, + --on_flood = on_flood, + on_rotate = false + }) + + minetest.register_node(itemstring_ceiling, { + drawtype = "mesh", + mesh = "mcl_lanterns_lantern_floor.obj", + tiles = {{ + name = def.texture, + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + light_source = def.light_level, + groups = {dig_immediate=3, not_in_creative_inventory=1}, + drop = itemstring_floor, + selection_box = { + type = "wallmounted", + wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, + }, + --sounds = default.node_sound_wood_defaults(), + --floodable = true, + --on_flood = on_flood, + on_rotate = false + }) +end + +minetest.register_node("mcl_lanterns:chain", { + description = S("Chain"), + _doc_items_longdesc = S("Chains are metallic decoration blocks."), + inventory_image = "mcl_lanterns_chain_inv.png", + tiles = {"mcl_lanterns_chain.png"}, + drawtype = "mesh", + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = "clip", + mesh = "mcl_lanterns_chain.obj", + is_ground_content = false, + sunlight_propagates = true, + collision_box = { + type = "fixed", + fixed = { + {-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, + } + }, + groups = {pickaxey = 1, deco_block = 1}, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local param2 = 0 + + local placer_pos = placer:get_pos() + if placer_pos then + local dir = { + x = p1.x - placer_pos.x, + y = p1.y - placer_pos.y, + z = p1.z - placer_pos.z + } + param2 = minetest.dir_to_facedir(dir) + end + + if p0.y - 1 == p1.y then + param2 = 20 + elseif p0.x - 1 == p1.x then + param2 = 16 + elseif p0.x + 1 == p1.x then + param2 = 12 + elseif p0.z - 1 == p1.z then + param2 = 8 + elseif p0.z + 1 == p1.z then + param2 = 4 + end + + return minetest.item_place(itemstack, placer, pointed_thing, param2) + end, + _mcl_blast_resistance = 6, + _mcl_hardness = 5, +}) + +dofile(modpath.."/register.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/mod.conf b/mods/ITEMS/mcl_lanterns/mod.conf new file mode 100644 index 000000000..104722123 --- /dev/null +++ b/mods/ITEMS/mcl_lanterns/mod.conf @@ -0,0 +1,6 @@ +name = mcl_lanterns +description = Add lanterns and chains to MineClone2 +depends = +optional_depends = +author = AFCMS +title = MineClone2 Lanterns \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj new file mode 100644 index 000000000..94a7b8971 --- /dev/null +++ b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj @@ -0,0 +1,24 @@ +# Blender v3.0.1 OBJ File: 'chain.blend' +# www.blender.org +o Plane +v 0.066291 0.500000 0.066291 +v 0.066291 -0.500000 0.066291 +v -0.066291 0.500000 -0.066291 +v -0.066291 -0.500000 -0.066291 +v -0.066291 0.500000 0.066291 +v -0.066291 -0.500000 0.066291 +v 0.066291 0.500000 -0.066291 +v 0.066291 -0.500000 -0.066291 +vt -0.000000 1.000000 +vt 0.000000 -0.000000 +vt 0.187500 0.000000 +vt 0.187500 1.000000 +vt 0.187500 1.000000 +vt 0.187500 -0.000000 +vt 0.375000 -0.000000 +vt 0.375000 1.000000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 5/5/2 6/6/2 8/7/2 7/8/2 diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj new file mode 100644 index 000000000..a6125886a --- /dev/null +++ b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj @@ -0,0 +1,106 @@ +# Blender v3.0.1 OBJ File: 'lantern.blend' +# www.blender.org +o Cube +v 0.187500 -0.062500 -0.187500 +v 0.187500 -0.500000 -0.187500 +v 0.187500 -0.062500 0.187500 +v 0.187500 -0.500000 0.187500 +v -0.187500 -0.062500 -0.187500 +v -0.187500 -0.500000 -0.187500 +v -0.187500 -0.062500 0.187500 +v -0.187500 -0.500000 0.187500 +v 0.125000 0.062500 -0.125000 +v 0.125000 -0.062500 -0.125000 +v 0.125000 0.062500 0.125000 +v 0.125000 -0.062500 0.125000 +v -0.125000 0.062500 -0.125000 +v -0.125000 -0.062500 -0.125000 +v -0.125000 0.062500 0.125000 +v -0.125000 -0.062500 0.125000 +v 0.066291 0.187500 0.066291 +v 0.066291 0.062500 0.066291 +v -0.066291 0.187500 -0.066291 +v -0.066291 0.062500 -0.066291 +v -0.066291 0.187500 0.066291 +v -0.066291 0.062500 0.066291 +v 0.066291 0.187500 -0.066291 +v 0.066291 0.062500 -0.066291 +vt 0.000000 0.062500 +vt 0.375000 0.062500 +vt 0.375000 0.437500 +vt 0.000000 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt -0.000000 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt 0.000000 0.437500 +vt 0.562500 0.125000 +vt 0.937500 0.125000 +vt 0.937500 0.250000 +vt 0.562500 0.250000 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt 0.000000 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt -0.000000 0.437500 +vt 0.062500 0.125000 +vt 0.312500 0.125000 +vt 0.312500 0.375000 +vt 0.062500 0.375000 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.500000 0.770833 +vt 0.500000 0.770833 +vt 0.500000 0.770833 +vt 0.500000 0.770833 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.687500 0.937500 +vt 0.687500 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.937500 +vt 0.687500 0.937500 +vt 0.687500 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.937500 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +s off +f 1/1/1 5/2/1 7/3/1 3/4/1 +f 4/5/2 3/6/2 7/7/2 8/8/2 +f 8/9/3 7/10/3 5/11/3 6/12/3 +f 6/13/4 2/14/4 4/15/4 8/16/4 +f 2/17/5 1/18/5 3/19/5 4/20/5 +f 6/21/6 5/22/6 1/23/6 2/24/6 +f 9/25/1 13/26/1 15/27/1 11/28/1 +f 12/29/2 11/30/2 15/31/2 16/32/2 +f 16/33/3 15/34/3 13/35/3 14/36/3 +f 14/37/4 10/38/4 12/39/4 16/40/4 +f 10/41/5 9/42/5 11/43/5 12/44/5 +f 14/45/6 13/46/6 9/47/6 10/48/6 +f 17/49/7 18/50/7 20/51/7 19/52/7 +f 21/53/8 22/54/8 24/55/8 23/56/8 diff --git a/mods/ITEMS/mcl_lanterns/register.lua b/mods/ITEMS/mcl_lanterns/register.lua new file mode 100644 index 000000000..a2c513eb2 --- /dev/null +++ b/mods/ITEMS/mcl_lanterns/register.lua @@ -0,0 +1,8 @@ +local S = minetest.get_translator("mcl_lanterns") + +mcl_lanterns.register_lantern("lantern", { + description = S("Lantern"), + texture = "mcl_lanterns_lantern.png", + texture_inv = "mcl_lanterns_lantern_inv.png", + light_level = 15, +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png new file mode 100755 index 0000000000000000000000000000000000000000..ee523c9226d618aa4cb6c31a11a3130f5a464495 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4zno)T;l9p8gwEk^p$Q0V@_g2Q-{l1>zGwi z@Aw!B$~!zJ95KsYyDcmAiGt?@mtBUNFWxJAly*(+s`Z}wBb7smKQuk=C!1%P X=Z%n-=TjLN7#KWV{an^LB{Ts5eacSO literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png new file mode 100755 index 0000000000000000000000000000000000000000..61a300fede1736bbafa7e07d7b106756b9c18edf GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4v!UEBNu&{sqK98AveyI5R`u-1o!X+y!+r(z@aP!~a-`}(F9?U%O{r!E( zclY+5{_*#BIol>)1vZ{X4l38AeOhwVt;HlHB-lK43W|y@nTctzF$mq#{u{dX{4@pz O1_n=8KbLh*2~7ZS$VFNJ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png new file mode 100755 index 0000000000000000000000000000000000000000..c9cc5b9958c962387a6ee72e277c225a5673fb7a GIT binary patch literal 8789 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