summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeg9 <dazeg9@gmail.com>2013-04-07 10:31:42 +0200
committerZeg9 <dazeg9@gmail.com>2013-04-07 10:31:42 +0200
commit8cf5e9e55e63ac53127dafc456406717ab27258a (patch)
treef6a1cf4853360b9076757c8d580f46603f8cda6f
downloaditemframes-8cf5e9e55e63ac53127dafc456406717ab27258a.tar.gz
itemframes-8cf5e9e55e63ac53127dafc456406717ab27258a.tar.bz2
itemframes-8cf5e9e55e63ac53127dafc456406717ab27258a.zip
Initial commit
-rw-r--r--.gitignore1
-rw-r--r--itemframes/depends.txt1
-rw-r--r--itemframes/init.lua100
-rw-r--r--itemframes/textures/itemframes_frame.pngbin0 -> 180 bytes
-rw-r--r--modpack.txt0
5 files changed, 102 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b25c15b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*~
diff --git a/itemframes/depends.txt b/itemframes/depends.txt
new file mode 100644
index 0000000..4ad96d5
--- /dev/null
+++ b/itemframes/depends.txt
@@ -0,0 +1 @@
+default
diff --git a/itemframes/init.lua b/itemframes/init.lua
new file mode 100644
index 0000000..933ddad
--- /dev/null
+++ b/itemframes/init.lua
@@ -0,0 +1,100 @@
+minetest.register_entity("itemframes:item",{
+ hp_max = 1,
+ visual="wielditem",
+ visual_size={x=.33,y=.33},
+ collisionbox = {0,0,0,0,0,0},
+ physical=false,
+ textures={"air"}
+})
+
+local facedir = {}
+facedir[0] = {x=0,y=0,z=1} --
+facedir[1] = {x=1,y=0,z=0} --
+facedir[2] = {x=0,y=0,z=-1} --
+facedir[3] = {x=-1,y=0,z=0} --
+
+local remove_item = function(pos)
+ objs = minetest.env:get_objects_inside_radius(pos, .5)
+ for _, obj in ipairs(objs) do
+ if obj:get_luaentity().name == "itemframes:item" then
+ obj:remove()
+ end
+ end
+end
+
+local update_item = function(pos, node)
+ remove_item(pos)
+ local meta = minetest.env:get_meta(pos)
+ if meta:get_string("item") ~= "" then
+ posad = facedir[node.param2]
+ pos.x = pos.x + posad.x*7/16
+ pos.y = pos.y + posad.y*7/16
+ pos.z = pos.z + posad.z*7/16
+ local e = minetest.env:add_entity(pos,"itemframes:item")
+ local name = meta:get_string("item")
+ e:set_properties({textures={name}})
+ local yaw = math.pi*2 - node.param2 * math.pi/2
+ e:setyaw(yaw)
+ end
+end
+
+local drop_item = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ if meta:get_string("item") ~= "" then
+ minetest.env:add_item(pos, meta:get_string("item"))
+ meta:set_string("item","")
+ end
+ remove_item(pos)
+end
+
+minetest.register_node("itemframes:frame",{
+ description = "Item frame",
+ drawtype = "nodebox",
+ node_box = { type = "fixed", fixed = {-0.5, -0.5, 7/16, 0.5, 0.5, 0.5} },
+ tiles = {"itemframes_frame.png"},
+ inventory_image = "itemframes_frame.png",
+ wield_image = "itemframes_frame.png",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ sunlight_propagates = true,
+ groups = { choppy=2,dig_immediate=2 },
+ legacy_wallmounted = true,
+ sounds = default.node_sound_defaults(),
+ after_place_node = function(pos, placer, itemstack)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner",placer:get_player_name())
+ meta:set_string("infotext","Item frame (owned by "..placer:get_player_name()..")")
+ end,
+ on_rightclick = function(pos, node, clicker, itemstack)
+ local meta = minetest.env:get_meta(pos)
+ if clicker:get_player_name() == meta:get_string("owner") then
+ drop_item(pos,clicker)
+ meta:set_string("item",itemstack:get_name())
+ itemstack:take_item()
+ update_item(pos,node)
+ end
+ return itemstack
+ end,
+ on_punch = function(pos,node,puncher)
+ local meta = minetest.env:get_meta(pos)
+ if puncher:get_player_name() == meta:get_string("owner") then
+ drop_item(pos)
+ end
+ end,
+ can_dig = function(pos,player)
+
+ local meta = minetest.env:get_meta(pos)
+ return player:get_player_name() == meta:get_string("owner")
+ end,
+})
+
+
+minetest.register_abm({
+ nodenames = {"itemframes:frame"},
+ interval = 1.0,
+ chance = 2,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ update_item(pos,node)
+ end,
+}) -- This allows items to reappear in frames when chunks are unloaded
+
diff --git a/itemframes/textures/itemframes_frame.png b/itemframes/textures/itemframes_frame.png
new file mode 100644
index 0000000..cf46532
--- /dev/null
+++ b/itemframes/textures/itemframes_frame.png
Binary files differ
diff --git a/modpack.txt b/modpack.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/modpack.txt