mirror of
				https://github.com/sys4-fr/server-nalc.git
				synced 2025-10-31 04:25:32 +01:00 
			
		
		
		
	Itemframes mod update
MAJ de "itemframe" (Suppression de la version Carbone, ajout de la version de VanessaE provenant de "homedecor_modpack" étant plus à jour et corrigeant entre autre un bugfix qui faisait crasher le serveur, et une auto-regénération des objets framed si un clearobjects est effectué)
This commit is contained in:
		| @@ -3,10 +3,10 @@ local tmp = {} | ||||
| minetest.register_entity("itemframes:item",{ | ||||
| 	hp_max = 1, | ||||
| 	visual="wielditem", | ||||
| 	visual_size = {x = 0.3333, y = 0.3333}, | ||||
| 	visual_size={x=.33,y=.33}, | ||||
| 	collisionbox = {0,0,0,0,0,0}, | ||||
| 	physical = false, | ||||
| 	textures = {"air"}, | ||||
| 	physical=false, | ||||
| 	textures={"air"}, | ||||
| 	on_activate = function(self, staticdata) | ||||
| 		if tmp.nodename ~= nil and tmp.texture ~= nil then | ||||
| 			self.nodename = tmp.nodename | ||||
| @@ -15,7 +15,7 @@ minetest.register_entity("itemframes:item",{ | ||||
| 			tmp.texture = nil | ||||
| 		else | ||||
| 			if staticdata ~= nil and staticdata ~= "" then | ||||
| 				local data = staticdata:split(";") | ||||
| 				local data = staticdata:split(';') | ||||
| 				if data and data[1] and data[2] then | ||||
| 					self.nodename = data[1] | ||||
| 					self.texture = data[2] | ||||
| @@ -23,15 +23,15 @@ minetest.register_entity("itemframes:item",{ | ||||
| 			end | ||||
| 		end | ||||
| 		if self.texture ~= nil then | ||||
| 			self.object:set_properties({textures = {self.texture}}) | ||||
| 			self.object:set_properties({textures={self.texture}}) | ||||
| 		end | ||||
| 		if self.nodename == "itemframes:pedestal" then | ||||
| 			self.object:set_properties({automatic_rotate = 0.5}) | ||||
| 			self.object:set_properties({automatic_rotate=1}) | ||||
| 		end | ||||
| 	end, | ||||
| 	get_staticdata = function(self) | ||||
| 		if self.nodename ~= nil and self.texture ~= nil then | ||||
| 			return self.nodename .. ";" .. self.texture | ||||
| 			return self.nodename .. ';' .. self.texture | ||||
| 		end | ||||
| 		return "" | ||||
| 	end, | ||||
| @@ -39,17 +39,17 @@ minetest.register_entity("itemframes:item",{ | ||||
| 
 | ||||
| 
 | ||||
| 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} | ||||
| 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, node) | ||||
| 	local objs = nil | ||||
| 	if node.name == "itemframes:frame" then | ||||
| 		objs = minetest.get_objects_inside_radius(pos, 0.5) | ||||
| 		objs = minetest.env:get_objects_inside_radius(pos, .5) | ||||
| 	elseif node.name == "itemframes:pedestal" then | ||||
| 		objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y + 1, z = pos.z}, 0.5) | ||||
| 		objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y+1,z=pos.z}, .5) | ||||
| 	end | ||||
| 	if objs then | ||||
| 		for _, obj in ipairs(objs) do | ||||
| @@ -62,19 +62,20 @@ end | ||||
| 
 | ||||
| local update_item = function(pos, node) | ||||
| 	remove_item(pos, node) | ||||
| 	local meta = minetest.get_meta(pos) | ||||
| 	local meta = minetest.env:get_meta(pos) | ||||
| 	if meta:get_string("item") ~= "" then | ||||
| 		if node.name == "itemframes:frame" then | ||||
| 			local posad = facedir[node.param2] | ||||
| 			pos.x = pos.x + posad.x * 6.5 / 16 | ||||
| 			pos.y = pos.y + posad.y * 6.5 / 16 | ||||
| 			pos.z = pos.z + posad.z * 6.5 / 16 | ||||
| 			if not posad then return end | ||||
| 			pos.x = pos.x + posad.x*6.5/16 | ||||
| 			pos.y = pos.y + posad.y*6.5/16 | ||||
| 			pos.z = pos.z + posad.z*6.5/16 | ||||
| 		elseif node.name == "itemframes:pedestal" then | ||||
| 			pos.y = pos.y + 0.5 + 0.3333 | ||||
| 			pos.y = pos.y + 12/16+.33 | ||||
| 		end | ||||
| 		tmp.nodename = node.name | ||||
| 		tmp.texture = ItemStack(meta:get_string("item")):get_name() | ||||
| 		local e = minetest.add_entity(pos,"itemframes:item") | ||||
| 		local e = minetest.env:add_entity(pos,"itemframes:item") | ||||
| 		if node.name == "itemframes:frame" then | ||||
| 			local yaw = math.pi*2 - node.param2 * math.pi/2 | ||||
| 			e:setyaw(yaw) | ||||
| @@ -83,12 +84,12 @@ local update_item = function(pos, node) | ||||
| end | ||||
| 
 | ||||
| local drop_item = function(pos, node) | ||||
| 	local meta = minetest.get_meta(pos) | ||||
| 	local meta = minetest.env:get_meta(pos) | ||||
| 	if meta:get_string("item") ~= "" then | ||||
| 		if node.name == "itemframes:frame" then | ||||
| 			minetest.add_item(pos, meta:get_string("item")) | ||||
| 			minetest.env:add_item(pos, meta:get_string("item")) | ||||
| 		elseif node.name == "itemframes:pedestal" then | ||||
| 			minetest.add_item({x=pos.x,y=pos.y+1,z=pos.z}, meta:get_string("item")) | ||||
| 			minetest.env:add_item({x=pos.x,y=pos.y+1,z=pos.z}, meta:get_string("item")) | ||||
| 		end | ||||
| 		meta:set_string("item","") | ||||
| 	end | ||||
| @@ -99,23 +100,24 @@ 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} }, | ||||
| 	selection_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}, | ||||
| 	groups = { choppy=2,dig_immediate=2 }, | ||||
| 	legacy_wallmounted = true, | ||||
| 	sounds = default.node_sound_defaults(), | ||||
| 	after_place_node = function(pos, placer, itemstack) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		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) | ||||
| 		if not itemstack then return end | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		if clicker:get_player_name() == meta:get_string("owner") then | ||||
| 			drop_item(pos,node) | ||||
| 			local s = itemstack:take_item() | ||||
| @@ -125,14 +127,14 @@ minetest.register_node("itemframes:frame",{ | ||||
| 		return itemstack | ||||
| 	end, | ||||
| 	on_punch = function(pos,node,puncher) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		if puncher:get_player_name() == meta:get_string("owner") then | ||||
| 			drop_item(pos, node) | ||||
| 		end | ||||
| 	end, | ||||
| 	can_dig = function(pos,player) | ||||
| 		 | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		return player:get_player_name() == meta:get_string("owner") | ||||
| 	end, | ||||
| }) | ||||
| @@ -142,25 +144,24 @@ minetest.register_node("itemframes:pedestal",{ | ||||
| 	description = "Pedestal", | ||||
| 	drawtype = "nodebox", | ||||
| 	node_box = { type = "fixed", fixed = { | ||||
| 		{-7/16, -8/16, -7/16, 7/16, -7/16, 7/16}, -- Bottom plate | ||||
| 		{-6/16, -7/16, -6/16, 6/16, -6/16, 6/16}, -- Bottom plate (upper) | ||||
| 		{-0.25, -6/16, -0.25, 0.25, 7/16, 0.25}, -- Pillar | ||||
| 		{-7/16, 7/16, -7/16, 7/16, 8/16, 7/16}, -- Top plate | ||||
| 		{-7/16, -8/16, -7/16, 7/16, -7/16, 7/16}, -- bottom plate | ||||
| 		{-6/16, -7/16, -6/16, 6/16, -6/16, 6/16}, -- bottom plate (upper) | ||||
| 		{-0.25, -6/16, -0.25, 0.25, 11/16, 0.25}, -- pillar | ||||
| 		{-7/16, 11/16, -7/16, 7/16, 12/16, 7/16}, -- top plate | ||||
| 	} }, | ||||
| 	--selection_box = { type = "fixed", fixed = {-7/16, -0.5, -7/16, 7/16, 12/16, 7/16} }, | ||||
| 	tiles = {"itemframes_pedestal.png"}, | ||||
| 	paramtype = "light", | ||||
| 	groups = {cracky = 2}, | ||||
| 	groups = { cracky=3 }, | ||||
| 	sounds = default.node_sound_defaults(), | ||||
| 	 | ||||
| 	after_place_node = function(pos, placer, itemstack) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		meta:set_string("owner",placer:get_player_name()) | ||||
| 		meta:set_string("infotext","Pedestal (owned by "..placer:get_player_name()..")") | ||||
| 	end, | ||||
| 	 | ||||
| 	on_rightclick = function(pos, node, clicker, itemstack) | ||||
| 		if not itemstack then return end | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		if clicker:get_player_name() == meta:get_string("owner") then | ||||
| 			drop_item(pos,node) | ||||
| 			local s = itemstack:take_item() | ||||
| @@ -169,38 +170,47 @@ minetest.register_node("itemframes:pedestal",{ | ||||
| 		end | ||||
| 		return itemstack | ||||
| 	end, | ||||
| 	 | ||||
| 	on_punch = function(pos,node,puncher) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		if puncher:get_player_name() == meta:get_string("owner") then | ||||
| 			drop_item(pos,node) | ||||
| 		end | ||||
| 	end, | ||||
| 	 | ||||
| 	can_dig = function(pos,player) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		 | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		return player:get_player_name() == meta:get_string("owner") | ||||
| 	end, | ||||
| }) | ||||
| 
 | ||||
| minetest.register_craft({ | ||||
| 	output = "itemframes:frame", | ||||
| 	recipe = { | ||||
| 		{"default:stick", "default:stick", "default:stick"}, | ||||
| 		{"default:stick", "default:paper", "default:stick"}, | ||||
| 		{"default:stick", "default:stick", "default:stick"}, | ||||
| 	} | ||||
| -- automatically restore entities lost from frames/pedestals | ||||
| -- due to /clearobjects or similar | ||||
| 
 | ||||
| minetest.register_abm({ | ||||
| 	nodenames = { "itemframes:frame", "itemframes:pedestal" }, | ||||
| 	interval = 15, | ||||
| 	chance = 1, | ||||
| 	action = function(pos, node, active_object_count, active_object_count_wider) | ||||
| 		if #minetest.get_objects_inside_radius(pos, 0.5) > 0 then return end | ||||
| 		update_item(pos, node) | ||||
| 	end | ||||
| }) | ||||
| 
 | ||||
| -- crafts | ||||
| 
 | ||||
| minetest.register_craft({ | ||||
| 	output = "itemframes:pedestal", | ||||
| 	output = 'itemframes:frame', | ||||
| 	recipe = { | ||||
| 		{"default:stone", "default:stone", "default:stone"}, | ||||
| 		{"             ", "default:stone", "             "}, | ||||
| 		{"default:stone", "default:stone", "default:stone"}, | ||||
| 		{'default:stick', 'default:stick', 'default:stick'}, | ||||
| 		{'default:stick', 'default:paper', 'default:stick'}, | ||||
| 		{'default:stick', 'default:stick', 'default:stick'}, | ||||
| 	} | ||||
| }) | ||||
| minetest.register_craft({ | ||||
| 	output = 'itemframes:pedestal', | ||||
| 	recipe = { | ||||
| 		{'default:stone', 'default:stone', 'default:stone'}, | ||||
| 		{'', 'default:stone', ''}, | ||||
| 		{'default:stone', 'default:stone', 'default:stone'}, | ||||
| 	} | ||||
| }) | ||||
| 
 | ||||
| if minetest.setting_getbool("log_mods") then | ||||
| 	minetest.log("action", "Carbone: [itemframes] loaded.") | ||||
| end | ||||
							
								
								
									
										
											BIN
										
									
								
								mods/homedecor_modpack/itemframes/textures/itemframes_frame.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mods/homedecor_modpack/itemframes/textures/itemframes_frame.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 104 B | 
							
								
								
									
										
											BIN
										
									
								
								mods/homedecor_modpack/itemframes/textures/itemframes_pedestal.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mods/homedecor_modpack/itemframes/textures/itemframes_pedestal.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 340 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 564 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 286 B | 
		Reference in New Issue
	
	Block a user