diff options
Diffstat (limited to 'lua')
| -rwxr-xr-x | lua/visual.lua | 105 | 
1 files changed, 56 insertions, 49 deletions
| diff --git a/lua/visual.lua b/lua/visual.lua index ccd3dd2..8f99e5e 100755 --- a/lua/visual.lua +++ b/lua/visual.lua @@ -77,9 +77,16 @@ core.register_entity("drawers:visual", {  			colbox = {0, -0.4374, -0.4374,  0, 0.4374, 0.4374}  		end +		-- drawer values +		local meta = core.get_meta(self.drawer_pos) +		self.count = meta:get_int("count") +		self.itemName = meta:get_string("name") +		self.maxCount = meta:get_int("max_count") +		self.itemStackMax = meta:get_int("base_stack_max") +		self.stackMaxFactor = meta:get_int("stack_max_factor") +  		-- infotext -		local meta = core.get_meta(self.drawer_pos)  		local infotext = meta:get_string("entity_infotext") .. "\n\n\n\n\n"  		self.object:set_properties({ @@ -101,21 +108,19 @@ core.register_entity("drawers:visual", {  	on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)  		local meta = core.get_meta(self.drawer_pos) -		local count = meta:get_int("count") -		if count <= 0 then +		if self.count <= 0 then  			return  		end -		local name = meta:get_string("name") -		local remove_count = 1 +		local removeCount = 1  		if not puncher:get_player_control().sneak then -			remove_count = ItemStack(name):get_stack_max() +			removeCount = ItemStack(self.itemName):get_stack_max()  		end -		if remove_count > count then remove_count = count end +		if removeCount > self.count then removeCount = self.count end -		local stack = ItemStack(name) -		stack:set_count(remove_count) +		local stack = ItemStack(self.itemName) +		stack:set_count(removeCount)  		local inv = puncher:get_inventory()  		if not inv:room_for_item("main", stack) then @@ -123,25 +128,23 @@ core.register_entity("drawers:visual", {  		end  		inv:add_item("main", stack) -		count = count - remove_count -		meta:set_int("count", count) +		self.count = self.count - removeCount +		meta:set_int("count", self.count)  		-- update infotext -		local stack_max_factor = meta:get_int("stack_max_factor") -		local base_stack_max = meta:get_int("base_stack_max") -		local item_description = "" -		if core.registered_items[name] then -			item_description = core.registered_items[name].description +		local itemDescription = "" +		if core.registered_items[self.itemName] then +			itemDescription = core.registered_items[self.itemName].description  		end -		if count <= 0 then +		if self.count <= 0 then  			meta:set_string("name", "")  			self.texture = "drawers_empty.png" -			item_description = "Empty" +			itemDescription = "Empty"  		end -		local infotext = drawers.gen_info_text(item_description, -			count, stack_max_factor, base_stack_max) +		local infotext = drawers.gen_info_text(itemDescription, +			self.count, self.stackMaxFactor, self.itemStackMax)  		meta:set_string("entity_infotext", infotext)  		self.object:set_properties({ @@ -151,18 +154,9 @@ core.register_entity("drawers:visual", {  	end,  	try_insert_stack = function(self, itemstack, insert_stack) -		local node = core.get_node(self.drawer_pos)  		local stackCount = itemstack:get_count()  		local stackName = itemstack:get_name() -		local meta = core.get_meta(self.drawer_pos) -		local dName = meta:get_string("name") -		local dCount = meta:get_int("count") -		local dMaxCount = meta:get_int("max_count") - -		local dStackMax = meta:get_int("base_stack_max") -		local dStackMaxFactor = meta:get_int("stack_max_factor") -  		-- if nothing to be added, return  		if stackCount <= 0 then return itemstack end  		-- if no itemstring, return @@ -174,55 +168,68 @@ core.register_entity("drawers:visual", {  		end  		-- if current itemstring is not empty -		if dName ~= "" then +		if self.itemName ~= "" then  			-- check if same item -			if stackName ~= dName then return itemstack end +			if stackName ~= self.itemName then return itemstack end  		else -- is empty -			dName = stackName -			dCount = 0 +			self.itemName = stackName +			self.count = 0  			-- get new stack max -			dStackMax = ItemStack(dName):get_stack_max() -			dMaxCount = dStackMax * dStackMaxFactor +			self.itemStackMax = ItemStack(self.itemName):get_stack_max() +			self.maxCount = self.itemStackMax * self.stackMaxFactor  			-- Don't add items stackable only to 1 -			if dStackMax == 1 then +			if self.itemStackMax == 1 then  				return itemstack  			end - -			meta:set_string("name", stackName) -			meta:set_int("base_stack_max", dStackMax) -			meta:set_int("max_count", dStackMaxFactor)  		end  		-- set new counts:  		-- if new count is more than max_count -		if (dCount + stackCount) > dMaxCount then -			dCount = dMaxCount -			itemstack:set_count((dCount + stackCount) - dMaxCount) +		if (self.count + stackCount) > self.maxCount then +			self.count = self.maxCount +			itemstack:set_count((self.count + stackCount) - self.maxCount)  		else -- new count fits -			dCount = dCount + stackCount +			self.count = self.count + stackCount  			-- this is for only removing one  			itemstack:set_count(itemstack:get_count() - stackCount)  		end -		-- set new drawer count -		meta:set_int("count", dCount) + +		-- get meta +		local meta = core.get_meta(self.drawer_pos)  		-- update infotext -		local infotext = drawers.gen_info_text(core.registered_items[dName].description, -			dCount, dStackMaxFactor, dStackMax) +		local itemDescription +		if core.registered_items[self.itemName] then +			itemDescription = core.registered_items[self.itemName].description +		else +			itemDescription = "Empty" +		end +		local infotext = drawers.gen_info_text(itemDescription, +			self.count, self.stackMaxFactor, self.itemStackMax)  		meta:set_string("entity_infotext", infotext)  		-- texture -		self.texture = drawers.get_inv_image(dName) +		self.texture = drawers.get_inv_image(self.itemName)  		self.object:set_properties({  			infotext = infotext .. "\n\n\n\n\n",  			textures = {self.texture}  		}) +		self.saveMetaData(self, meta) +  		if itemstack:get_count() == 0 then itemstack = ItemStack("") end  		return itemstack +	end, + +	saveMetaData = function(self, meta) +		meta:set_int("count", self.count) +		meta:set_string("name", self.itemName) +		meta:set_int("max_count", self.maxCount) +		meta:set_int("base_stack_max", self.itemStackMax) +		meta:set_int("stack_max_factor", self.stackMaxFactor)  	end  }) | 
