From df4855f7e7c964eafff70149267aa57dd1dbea28 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Thu, 7 Jan 2016 22:04:09 +0000 Subject: [PATCH] Add doors and wield3d --- mods/doors/README.txt | 46 ++ mods/doors/depends.txt | 2 + mods/doors/init.lua | 502 ++++++++++++++++++ mods/doors/sounds/doors_door_close.ogg | Bin 0 -> 6161 bytes mods/doors/sounds/doors_door_open.ogg | Bin 0 -> 6184 bytes mods/doors/textures/doors_brown.png | Bin 0 -> 109 bytes mods/doors/textures/doors_glass.png | Bin 0 -> 128 bytes mods/doors/textures/doors_glass_a.png | Bin 0 -> 158 bytes mods/doors/textures/doors_glass_b.png | Bin 0 -> 158 bytes mods/doors/textures/doors_glass_side.png | Bin 0 -> 82 bytes mods/doors/textures/doors_grey.png | Bin 0 -> 105 bytes mods/doors/textures/doors_obsidian_glass.png | Bin 0 -> 130 bytes .../doors/textures/doors_obsidian_glass_a.png | Bin 0 -> 128 bytes .../doors/textures/doors_obsidian_glass_b.png | Bin 0 -> 128 bytes .../textures/doors_obsidian_glass_side.png | Bin 0 -> 82 bytes mods/doors/textures/doors_steel.png | Bin 0 -> 132 bytes mods/doors/textures/doors_steel_a.png | Bin 0 -> 273 bytes mods/doors/textures/doors_steel_b.png | Bin 0 -> 260 bytes mods/doors/textures/doors_trapdoor.png | Bin 0 -> 257 bytes mods/doors/textures/doors_trapdoor_side.png | Bin 0 -> 173 bytes mods/doors/textures/doors_wood.png | Bin 0 -> 130 bytes mods/doors/textures/doors_wood_a.png | Bin 0 -> 294 bytes mods/doors/textures/doors_wood_b.png | Bin 0 -> 291 bytes mods/wield32/.gitignore | 7 + mods/wield32/LICENSE.md | 4 + mods/wield32/README.md | 15 + mods/wield32/depends.txt | 2 + mods/wield32/init.lua | 132 +++++ mods/wield32/location.lua | 32 ++ mods/wield32/textures/wield3d_trans.png | Bin 0 -> 146 bytes mods/wield32/wield3d.conf.example | 11 + 31 files changed, 753 insertions(+) create mode 100644 mods/doors/README.txt create mode 100644 mods/doors/depends.txt create mode 100644 mods/doors/init.lua create mode 100644 mods/doors/sounds/doors_door_close.ogg create mode 100644 mods/doors/sounds/doors_door_open.ogg create mode 100644 mods/doors/textures/doors_brown.png create mode 100644 mods/doors/textures/doors_glass.png create mode 100644 mods/doors/textures/doors_glass_a.png create mode 100644 mods/doors/textures/doors_glass_b.png create mode 100644 mods/doors/textures/doors_glass_side.png create mode 100644 mods/doors/textures/doors_grey.png create mode 100644 mods/doors/textures/doors_obsidian_glass.png create mode 100644 mods/doors/textures/doors_obsidian_glass_a.png create mode 100644 mods/doors/textures/doors_obsidian_glass_b.png create mode 100644 mods/doors/textures/doors_obsidian_glass_side.png create mode 100644 mods/doors/textures/doors_steel.png create mode 100644 mods/doors/textures/doors_steel_a.png create mode 100644 mods/doors/textures/doors_steel_b.png create mode 100644 mods/doors/textures/doors_trapdoor.png create mode 100644 mods/doors/textures/doors_trapdoor_side.png create mode 100644 mods/doors/textures/doors_wood.png create mode 100644 mods/doors/textures/doors_wood_a.png create mode 100644 mods/doors/textures/doors_wood_b.png create mode 100644 mods/wield32/.gitignore create mode 100644 mods/wield32/LICENSE.md create mode 100644 mods/wield32/README.md create mode 100644 mods/wield32/depends.txt create mode 100644 mods/wield32/init.lua create mode 100644 mods/wield32/location.lua create mode 100644 mods/wield32/textures/wield3d_trans.png create mode 100644 mods/wield32/wield3d.conf.example diff --git a/mods/doors/README.txt b/mods/doors/README.txt new file mode 100644 index 0000000..5ae63ca --- /dev/null +++ b/mods/doors/README.txt @@ -0,0 +1,46 @@ +Minetest Game mod: doors +======================== +version: 1.3 + +License of source code: +----------------------- +Copyright (C) 2012 PilzAdam +modified by BlockMen (added sounds, glassdoors[glass, obsidian glass], trapdoor) + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + +License of textures +-------------------------------------- +following Textures created by Fernando Zapata (CC BY-SA 3.0): + door_wood.png + door_wood_a.png + door_wood_a_r.png + door_wood_b.png + door_wood_b_r.png + +following Textures created by BlockMen (WTFPL): + door_trapdoor.png + door_obsidian_glass_side.png + +following textures created by celeron55 (CC BY-SA 3.0): + door_trapdoor_side.png + door_glass_a.png + door_glass_b.png + +following Textures created by PenguinDad (CC BY-SA 4.0): + door_glass.png + door_obsidian_glass.png + +All other textures (created by PilzAdam): WTFPL + + +License of sounds +-------------------------------------- +Opening-Sound created by CGEffex (CC BY 3.0), modified by BlockMen + door_open.ogg +Closing-Sound created by bennstir (CC BY 3.0) + door_close.ogg diff --git a/mods/doors/depends.txt b/mods/doors/depends.txt new file mode 100644 index 0000000..5e28bee --- /dev/null +++ b/mods/doors/depends.txt @@ -0,0 +1,2 @@ +default +screwdriver? diff --git a/mods/doors/init.lua b/mods/doors/init.lua new file mode 100644 index 0000000..6a5ee24 --- /dev/null +++ b/mods/doors/init.lua @@ -0,0 +1,502 @@ +doors = {} + +-- Registers a door +function doors.register_door(name, def) + def.groups.not_in_creative_inventory = 1 + + local box = {{-0.5, -0.5, -0.5, 0.5, 0.5, -0.5+1.5/16}} + + if not def.node_box_bottom then + def.node_box_bottom = box + end + if not def.node_box_top then + def.node_box_top = box + end + if not def.selection_box_bottom then + def.selection_box_bottom= box + end + if not def.selection_box_top then + def.selection_box_top = box + end + + if not def.sound_close_door then + def.sound_close_door = "doors_door_close" + end + if not def.sound_open_door then + def.sound_open_door = "doors_door_open" + end + + + minetest.register_craftitem(name, { + description = def.description, + inventory_image = def.inventory_image, + + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + + local ptu = pointed_thing.under + local nu = minetest.get_node(ptu) + if minetest.registered_nodes[nu.name].on_rightclick then + return minetest.registered_nodes[nu.name].on_rightclick(ptu, nu, placer, itemstack) + end + + local pt = pointed_thing.above + local pt2 = {x=pt.x, y=pt.y, z=pt.z} + pt2.y = pt2.y+1 + if + not minetest.registered_nodes[minetest.get_node(pt).name].buildable_to or + not minetest.registered_nodes[minetest.get_node(pt2).name].buildable_to or + not placer or + not placer:is_player() + then + return itemstack + end + + if minetest.is_protected(pt, placer:get_player_name()) or + minetest.is_protected(pt2, placer:get_player_name()) then + minetest.record_protection_violation(pt, placer:get_player_name()) + return itemstack + end + + local p2 = minetest.dir_to_facedir(placer:get_look_dir()) + local pt3 = {x=pt.x, y=pt.y, z=pt.z} + if p2 == 0 then + pt3.x = pt3.x-1 + elseif p2 == 1 then + pt3.z = pt3.z+1 + elseif p2 == 2 then + pt3.x = pt3.x+1 + elseif p2 == 3 then + pt3.z = pt3.z-1 + end + if minetest.get_item_group(minetest.get_node(pt3).name, "door") == 0 then + minetest.set_node(pt, {name=name.."_b_1", param2=p2}) + minetest.set_node(pt2, {name=name.."_t_1", param2=p2}) + else + minetest.set_node(pt, {name=name.."_b_2", param2=p2}) + minetest.set_node(pt2, {name=name.."_t_2", param2=p2}) + minetest.get_meta(pt):set_int("right", 1) + minetest.get_meta(pt2):set_int("right", 1) + end + + if def.only_placer_can_open then + local pn = placer:get_player_name() + local meta = minetest.get_meta(pt) + meta:set_string("doors_owner", pn) + meta:set_string("infotext", "Owned by "..pn) + meta = minetest.get_meta(pt2) + meta:set_string("doors_owner", pn) + meta:set_string("infotext", "Owned by "..pn) + end + + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end, + }) + + local tt = def.tiles_top + local tb = def.tiles_bottom + + local function after_dig_node(pos, name, digger) + local node = minetest.get_node(pos) + if node.name == name then + minetest.node_dig(pos, node, digger) + end + end + + local function check_and_blast(pos, name) + local node = minetest.get_node(pos) + if node.name == name then + minetest.remove_node(pos) + end + end + + local function make_on_blast(base_name, dir, door_type, other_door_type) + if def.only_placer_can_open then + return function() end + else + return function(pos, intensity) + check_and_blast(pos, base_name .. door_type) + pos.y = pos.y + dir + check_and_blast(pos, base_name .. other_door_type) + end + end + end + + local function on_rightclick(pos, dir, check_name, replace, replace_dir, params) + pos.y = pos.y+dir + if minetest.get_node(pos).name ~= check_name then + return + end + local p2 = minetest.get_node(pos).param2 + p2 = params[p2+1] + + minetest.swap_node(pos, {name=replace_dir, param2=p2}) + + pos.y = pos.y-dir + minetest.swap_node(pos, {name=replace, param2=p2}) + + local snd_1 = def.sound_close_door + local snd_2 = def.sound_open_door + if params[1] == 3 then + snd_1 = def.sound_open_door + snd_2 = def.sound_close_door + end + + if minetest.get_meta(pos):get_int("right") ~= 0 then + minetest.sound_play(snd_1, {pos = pos, gain = 0.3, max_hear_distance = 10}) + else + minetest.sound_play(snd_2, {pos = pos, gain = 0.3, max_hear_distance = 10}) + end + end + + local function check_player_priv(pos, player) + if not def.only_placer_can_open then + return true + end + local meta = minetest.get_meta(pos) + local pn = player:get_player_name() + return meta:get_string("doors_owner") == pn + end + + local function on_rotate(pos, node, dir, user, check_name, mode, new_param2) + if not check_player_priv(pos, user) then + return false + end + if mode ~= screwdriver.ROTATE_FACE then + return false + end + + pos.y = pos.y + dir + if not minetest.get_node(pos).name == check_name then + return false + end + if minetest.is_protected(pos, user:get_player_name()) then + minetest.record_protection_violation(pos, user:get_player_name()) + return false + end + + local node2 = minetest.get_node(pos) + node2.param2 = (node2.param2 + 1) % 4 + minetest.swap_node(pos, node2) + + pos.y = pos.y - dir + node.param2 = (node.param2 + 1) % 4 + minetest.swap_node(pos, node) + return true + end + + minetest.register_node(name.."_b_1", { + tiles = {tb[2], tb[2], tb[2], tb[2], tb[1], tb[1].."^[transformfx"}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + drop = name, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = def.node_box_bottom + }, + selection_box = { + type = "fixed", + fixed = def.selection_box_bottom + }, + groups = def.groups, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + pos.y = pos.y+1 + after_dig_node(pos, name.."_t_1", digger) + end, + + on_rightclick = function(pos, node, clicker) + if check_player_priv(pos, clicker) then + on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0}) + end + end, + + on_rotate = function(pos, node, user, mode, new_param2) + return on_rotate(pos, node, 1, user, name.."_t_1", mode) + end, + + can_dig = check_player_priv, + sounds = def.sounds, + sunlight_propagates = def.sunlight, + on_blast = make_on_blast(name, 1, "_b_1", "_t_1") + }) + + minetest.register_node(name.."_t_1", { + tiles = {tt[2], tt[2], tt[2], tt[2], tt[1], tt[1].."^[transformfx"}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + drop = "", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = def.node_box_top + }, + selection_box = { + type = "fixed", + fixed = def.selection_box_top + }, + groups = def.groups, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + pos.y = pos.y-1 + after_dig_node(pos, name.."_b_1", digger) + end, + + on_rightclick = function(pos, node, clicker) + if check_player_priv(pos, clicker) then + on_rightclick(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2", {1,2,3,0}) + end + end, + + on_rotate = function(pos, node, user, mode, new_param2) + return on_rotate(pos, node, -1, user, name.."_b_1", mode) + end, + + can_dig = check_player_priv, + sounds = def.sounds, + sunlight_propagates = def.sunlight, + on_blast = make_on_blast(name, -1, "_t_1", "_b_1") + }) + + minetest.register_node(name.."_b_2", { + tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + drop = name, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = def.node_box_bottom + }, + selection_box = { + type = "fixed", + fixed = def.selection_box_bottom + }, + groups = def.groups, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + pos.y = pos.y+1 + after_dig_node(pos, name.."_t_2", digger) + end, + + on_rightclick = function(pos, node, clicker) + if check_player_priv(pos, clicker) then + on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2}) + end + end, + + on_rotate = function(pos, node, user, mode, new_param2) + return on_rotate(pos, node, 1, user, name.."_t_2", mode) + end, + + can_dig = check_player_priv, + sounds = def.sounds, + sunlight_propagates = def.sunlight, + on_blast = make_on_blast(name, 1, "_b_2", "_t_2") + }) + + minetest.register_node(name.."_t_2", { + tiles = {tt[2], tt[2], tt[2], tt[2], tt[1].."^[transformfx", tt[1]}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + drop = "", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = def.node_box_top + }, + selection_box = { + type = "fixed", + fixed = def.selection_box_top + }, + groups = def.groups, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + pos.y = pos.y-1 + after_dig_node(pos, name.."_b_2", digger) + end, + + on_rightclick = function(pos, node, clicker) + if check_player_priv(pos, clicker) then + on_rightclick(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1", {3,0,1,2}) + end + end, + + on_rotate = function(pos, node, user, mode, new_param2) + return on_rotate(pos, node, -1, user, name.."_b_2", mode) + end, + + can_dig = check_player_priv, + sounds = def.sounds, + sunlight_propagates = def.sunlight, + on_blast = make_on_blast(name, -1, "_t_2", "_b_2") + }) + +end + +doors.register_door("doors:door_wood", { + description = "Wooden Door", + inventory_image = "doors_wood.png", + groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2,door=1}, + tiles_bottom = {"doors_wood_b.png", "doors_brown.png"}, + tiles_top = {"doors_wood_a.png", "doors_brown.png"}, + sounds = default.node_sound_wood_defaults(), + sunlight = false, +}) + +minetest.register_craft({ + output = "doors:door_wood", + recipe = { + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"} + } +}) + +doors.register_door("doors:door_steel", { + description = "Steel Door", + inventory_image = "doors_steel.png", + groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1}, + tiles_bottom = {"doors_steel_b.png", "doors_grey.png"}, + tiles_top = {"doors_steel_a.png", "doors_grey.png"}, + only_placer_can_open = true, + sounds = default.node_sound_wood_defaults(), + sunlight = false, +}) + +minetest.register_craft({ + output = "doors:door_steel", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"} + } +}) + +doors.register_door("doors:door_glass", { + description = "Glass Door", + inventory_image = "doors_glass.png", + groups = {snappy=1,cracky=1,oddly_breakable_by_hand=3,door=1}, + tiles_bottom = {"doors_glass_b.png", "doors_glass_side.png"}, + tiles_top = {"doors_glass_a.png", "doors_glass_side.png"}, + sounds = default.node_sound_glass_defaults(), + sunlight = true, +}) + +minetest.register_craft({ + output = "doors:door_glass", + recipe = { + {"default:glass", "default:glass"}, + {"default:glass", "default:glass"}, + {"default:glass", "default:glass"} + } +}) + +doors.register_door("doors:door_obsidian_glass", { + description = "Obsidian Glass Door", + inventory_image = "doors_obsidian_glass.png", + groups = {snappy=1,cracky=1,oddly_breakable_by_hand=3,door=1}, + tiles_bottom = {"doors_obsidian_glass_b.png", "doors_obsidian_glass_side.png"}, + tiles_top = {"doors_obsidian_glass_a.png", "doors_obsidian_glass_side.png"}, + sounds = default.node_sound_glass_defaults(), + sunlight = true, +}) + +minetest.register_craft({ + output = "doors:door_obsidian_glass", + recipe = { + {"default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass"} + } +}) + + +----trapdoor---- + +function doors.register_trapdoor(name, def) + local name_closed = name + local name_opened = name.."_open" + + def.on_rightclick = function (pos, node) + local newname = node.name == name_closed and name_opened or name_closed + local sound = false + if node.name == name_closed then sound = def.sound_open end + if node.name == name_opened then sound = def.sound_close end + if sound then + minetest.sound_play(sound, {pos = pos, gain = 0.3, max_hear_distance = 10}) + end + minetest.set_node(pos, {name = newname, param1 = node.param1, param2 = node.param2}) + end + + def.on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple + + -- Common trapdoor configuration + def.drawtype = "nodebox" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.is_ground_content = false + + local def_opened = table.copy(def) + local def_closed = table.copy(def) + + def_closed.node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} + } + def_closed.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} + } + def_closed.tiles = { def.tile_front, def.tile_front, def.tile_side, def.tile_side, + def.tile_side, def.tile_side } + + def_opened.node_box = { + type = "fixed", + fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5} + } + def_opened.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5} + } + def_opened.tiles = { def.tile_side, def.tile_side, def.tile_side, def.tile_side, + def.tile_front, def.tile_front } + def_opened.drop = name_closed + def_opened.groups.not_in_creative_inventory = 1 + + minetest.register_node(name_opened, def_opened) + minetest.register_node(name_closed, def_closed) +end + + + +doors.register_trapdoor("doors:trapdoor", { + description = "Trapdoor", + inventory_image = "doors_trapdoor.png", + wield_image = "doors_trapdoor.png", + tile_front = "doors_trapdoor.png", + tile_side = "doors_trapdoor_side.png", + groups = {snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=2, door=1}, + sounds = default.node_sound_wood_defaults(), + sound_open = "doors_door_open", + sound_close = "doors_door_close" +}) + +minetest.register_craft({ + output = 'doors:trapdoor 2', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', 'group:wood', 'group:wood'}, + {'', '', ''}, + } +}) diff --git a/mods/doors/sounds/doors_door_close.ogg b/mods/doors/sounds/doors_door_close.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fede4af323d1b4322180c4a2a0734a60077b4121 GIT binary patch literal 6161 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 literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_glass.png b/mods/doors/textures/doors_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..49ec245c1672b6c51664c1f4d7327e501d71fa59 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uK)l4KXBmj!-pT!XL5%C z1sO|%{DK)Ap4~_Ta#THC978ywlM{G&Qxg(coY>sd1P)%{P!SPnWMOyWad{BV9?Zlr X=`r&rp9bSVpaup{S3j3^P6+a`z~Q2i#HX`09BJ%(M literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_obsidian_glass_a.png b/mods/doors/textures/doors_obsidian_glass_a.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ac83d09d4f978330381944e2ca09138254aebb GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t{_1H0eLk;Q!^h?AcwIe z$S;_|;n|HeAV<~H#W95AdNN1vEU8lu4jeeZp*}-G%0Y*vaYC*`*rAqHy@EL+3|_lA VShk1sB>^=sc)I$ztaD0e0sw#{AIty% literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_obsidian_glass_b.png b/mods/doors/textures/doors_obsidian_glass_b.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ac83d09d4f978330381944e2ca09138254aebb GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t{_1H0eLk;Q!^h?AcwIe z$S;_|;n|HeAV<~H#W95AdNN1vEU8lu4jeeZp*}-G%0Y*vaYC*`*rAqHy@EL+3|_lA VShk1sB>^=sc)I$ztaD0e0sw#{AIty% literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_obsidian_glass_side.png b/mods/doors/textures/doors_obsidian_glass_side.png new file mode 100644 index 0000000000000000000000000000000000000000..aa4c63aac9cb88b6361fa5964c4892504eac3841 GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga%mF?jt^xuAZ#3u32XeVQT^vI= bt|un|*-Q+Kj}-S916d57u6{1-oD!MTNsI(6#ay?gui?Yn&W@|iPdwr}5l?%cV92M<1Y@L=c8orZ>nhYlT5Q&SV#Yf%W) z%vciS7tG-B>_!@p)8^^o7$R}mw?C5aumOjQVfRMa^*jG3a);y^$@{;^G!eS6X{q(& zgp3udf?ZhzMa7?39aX!1wl%`F41=Ba2;`Kd#IboMVb`|GFUf&SyiIZ1% zwwc9s9e(8Gb!KUT$v&kMBGUOA>ze*IZ4F6#*R89!$`2*S5B{<>lns+S<9fxy{YZ&(F`x%ge#R!X_prGcz+TE-pL5 zYnA{20EtONK~xyiHI0D|10e`QOGR#|)9wF%b~LwZVzl*9F!4R7!OT$Nso*8i*h(CD z(|zylx9q~?ZbDiOw8%?DD|;tBM-fgm31p8V%<)gm6ifvK3NX`%2v7`-U8U*zrGTg7 z#>?~RfC6d7M{8v>BQsYVEPC&Kt+{lCwpiA8xhSb)jB)9d^!NdQa0LjPaAQvZ0000< KMNUMnLSTZ7zjes~ literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_trapdoor.png b/mods/doors/textures/doors_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..e92c8b2e1a8aa8593be3e37a933ce4ea1ab58b75 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!eSlAhE0AtWGniT7I5EdO(OW&( zNxd_}Xj+xSAdr&KH*Mz;w$(pxq3fu6{1-oD!MlW%6% zF`3{Ov%K9CWo=F;|9=s)N0t3&(96x?##`+SZqI6;b8?Tt)N0E~mXj0>*VsqZ`J85I U{P6RE9?%8`Pgg&ebxsLQ0G<9l@&Et; literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_wood.png b/mods/doors/textures/doors_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a62ab156db2d81442bcef039fed5148d09e9bd GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0YyCl{4Hyt~5}p(1ZCf zkk42WA7~I`NswPKgTu2MX+TcDr;B5V#O2Wb+d_vGI9vqv8!}9mo%~;)Wmu+mwlX3$ zJ%XX=T+=-Vo+Q>ed#9HK_tZJ)omsb2zEd%Wk7rHrUcL#bE!%pyi=vKQDw*-KGO8(6 z;p<(uq_4q?nLD?dJxf0o`D3o)?Nj?Fm#uBsweN43k@B|vN7rn)sw$DQymQJ-!NsfG ms(X45UX~CSTzM&_hEePlo8kxMzq5c&WAJqKb6Mw<&;$UzR%Vz0 literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_wood_b.png b/mods/doors/textures/doors_wood_b.png new file mode 100644 index 0000000000000000000000000000000000000000..966509827e65cdfec58d15fb9f8182220b762dbf GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Q-Dv1YpRcGy02=2hjNmqa)!UU zyQx&XyHZksX{@WFkEKkYtz2%PW@?aGq?3GRm}P#5R;-Vai?M{7nwo>YSYDL1fq}tX zD?>4$X>&YX977~7yY`3k9X8-`&OA9O{gTDwf8n~V3~!t5d9o%Py7Jtn_?%|ri_YZR zX5xb1qkitySd(i1>X1mVOSM{cmPV4^szn@(yzR4#-8(J>>2K)f)1Pr?W51oz2d&*w zUE7vy-NkZQJooJD_#H1USxh)7@%S9C@pnTzdAp*1_C(nW&X@V_1%+!Cixo{d5vU}% l+Q;ok!S{R8hS|11m@1dE?X~Q WIELD3D_RETRY_TIME then + for name, state in pairs(player_wielding) do + if state == 0 then + local player = minetest.get_player_by_name(name) + if player then + add_wield_entity(player) + else + player_wielding[name] = nil + end + end + end + timer = 0 + end +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + if name then + player_wielding[name] = nil + end +end) + +minetest.register_on_joinplayer(function(player) + player_wielding[player:get_player_name()] = 0 + minetest.after(WIELD3D_INIT_DELAY, add_wield_entity, player) +end) + diff --git a/mods/wield32/location.lua b/mods/wield32/location.lua new file mode 100644 index 0000000..3b2906c --- /dev/null +++ b/mods/wield32/location.lua @@ -0,0 +1,32 @@ +-- Wielded Item Location Overrides - [item_name] = {bone, position, rotation} + +local bone = "Arm_Right" + +wield3d_location = { + ["default:torch"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["default:sapling"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["flowers:dandelion_white"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["flowers:dandelion_yellow"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["flowers:geranium"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["flowers:rose"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["flowers:tulip"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["flowers:viola"] = {bone, {x=0.2, y=6.5, z=3}, {x=-100, y=182, z=83}}, + ["default:shovel_wood"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["default:shovel_stone"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["default:shovel_steel"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["default:shovel_bronze"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["default:shovel_mese"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["default:shovel_diamond"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["bucket:bucket_empty"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["bucket:bucket_water"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["bucket:bucket_lava"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["screwdriver:screwdriver"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["screwdriver:screwdriver1"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["screwdriver:screwdriver2"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["screwdriver:screwdriver3"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["screwdriver:screwdriver4"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["vessels:glass_bottle"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["vessels:drinking_glass"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, + ["vessels:steel_bottle"] = {bone, {x=0, y=6.5, z=3}, {x=-90, y=137, z=83}}, +} + diff --git a/mods/wield32/textures/wield3d_trans.png b/mods/wield32/textures/wield3d_trans.png new file mode 100644 index 0000000000000000000000000000000000000000..a82df66a8568319b5f1faa784304b0fb1e2faa39 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPggqHdz5J?FrjFR|AEFJY5_^EKVmU iNU$zW5b0s!U|?VoU|?*uUsVK@W$<+Mb6Mw<&;$TBM