mirror of
				https://github.com/tacigar/maidroid.git
				synced 2025-10-31 11:15:22 +01:00 
			
		
		
		
	Merge pull request #19 from tacigar/tacigar/core_entity
[ADD] Core Entity in core writer
This commit is contained in:
		| @@ -28,6 +28,17 @@ local dye_core_map = { | |||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	-- get_nearest_core_entity returns the nearest core entity. | ||||||
|  | 	local function get_nearest_core_entity(pos) | ||||||
|  | 		local all_objects = minetest.get_objects_inside_radius(pos, 1.0) | ||||||
|  | 		for _, object in ipairs(all_objects) do | ||||||
|  | 			if object:get_luaentity().name == "maidroid_tool:core_entity" then | ||||||
|  | 				return object:get_luaentity() | ||||||
|  | 			end | ||||||
|  | 		end | ||||||
|  | 		return nil | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	-- can_dig is a common callback for the core writer. | 	-- can_dig is a common callback for the core writer. | ||||||
| 	local function can_dig(pos, player) | 	local function can_dig(pos, player) | ||||||
| 		local meta = minetest.get_meta(pos) | 		local meta = minetest.get_meta(pos) | ||||||
| @@ -62,6 +73,9 @@ local dye_core_map = { | |||||||
| 				meta:set_string("output_core", "") | 				meta:set_string("output_core", "") | ||||||
| 				inventory:set_stack("core", 1, ItemStack(output_core)) | 				inventory:set_stack("core", 1, ItemStack(output_core)) | ||||||
| 				minetest.swap_node(pos, {name = "maidroid_tool:core_writer"}) | 				minetest.swap_node(pos, {name = "maidroid_tool:core_writer"}) | ||||||
|  |  | ||||||
|  | 				local core_entity = get_nearest_core_entity(pos) | ||||||
|  | 				core_entity:stop_rotate() | ||||||
| 			end | 			end | ||||||
|  |  | ||||||
| 		else -- else the core writer is inactive. | 		else -- else the core writer is inactive. | ||||||
| @@ -80,6 +94,9 @@ local dye_core_map = { | |||||||
| 				inventory:set_stack("dye", 1, dye_stack) | 				inventory:set_stack("dye", 1, dye_stack) | ||||||
|  |  | ||||||
| 				minetest.swap_node(pos, {name = "maidroid_tool:core_writer_active"}) | 				minetest.swap_node(pos, {name = "maidroid_tool:core_writer_active"}) | ||||||
|  |  | ||||||
|  | 				local core_entity = get_nearest_core_entity(pos) | ||||||
|  | 				core_entity:start_rotate() | ||||||
| 			end | 			end | ||||||
| 		end | 		end | ||||||
| 		return true | 		return true | ||||||
| @@ -141,14 +158,32 @@ local dye_core_map = { | |||||||
| 			inventory:set_size("dye", 1) | 			inventory:set_size("dye", 1) | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		local function on_metadata_inventory_put(pos) | 		local function on_metadata_inventory_put(pos, listname, index, stack, player) | ||||||
| 			local timer = minetest.get_node_timer(pos) | 			local timer = minetest.get_node_timer(pos) | ||||||
| 			timer:start(1.0) | 			timer:start(1.0) | ||||||
|  |  | ||||||
|  | 			local meta = minetest.get_meta(pos) | ||||||
|  | 			if listname == "core" then | ||||||
|  | 				local entity_position = { | ||||||
|  | 					x = pos.x, y = pos.y + 0.65, z = pos.z | ||||||
|  | 				} | ||||||
|  | 				local object = minetest.add_entity(entity_position, "maidroid_tool:core_entity") | ||||||
|  | 			end | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		local function on_metadata_inventory_move(pos) | 		local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) | ||||||
| 			local timer = minetest.get_node_timer(pos) | 			local meta = minetest.get_meta(pos) | ||||||
| 			timer:start(1.0) | 			local inventory = meta:get_inventory() | ||||||
|  | 			local stack = inventory:get_stack(from_list, from_index) | ||||||
|  |  | ||||||
|  | 			on_metadata_inventory_put(pos, listname, to_index, stack, player) | ||||||
|  | 		end | ||||||
|  |  | ||||||
|  | 		local function on_metadata_inventory_take(pos, listname, index, stack, player) | ||||||
|  | 			if listname == "core" then | ||||||
|  | 				local core_entity = get_nearest_core_entity(pos) | ||||||
|  | 				core_entity.object:remove() | ||||||
|  | 			end | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		local function allow_metadata_inventory_take(pos, listname, index, stack, player) | 		local function allow_metadata_inventory_take(pos, listname, index, stack, player) | ||||||
| @@ -171,6 +206,7 @@ local dye_core_map = { | |||||||
| 			on_construct                   = on_construct, | 			on_construct                   = on_construct, | ||||||
| 			on_metadata_inventory_put      = on_metadata_inventory_put, | 			on_metadata_inventory_put      = on_metadata_inventory_put, | ||||||
| 			on_metadata_inventory_move     = on_metadata_inventory_move, | 			on_metadata_inventory_move     = on_metadata_inventory_move, | ||||||
|  | 			on_metadata_inventory_take     = on_metadata_inventory_take, | ||||||
| 			allow_metadata_inventory_put   = allow_metadata_inventory_put, | 			allow_metadata_inventory_put   = allow_metadata_inventory_put, | ||||||
| 			allow_metadata_inventory_move  = allow_metadata_inventory_move, | 			allow_metadata_inventory_move  = allow_metadata_inventory_move, | ||||||
| 			allow_metadata_inventory_take  = allow_metadata_inventory_take, | 			allow_metadata_inventory_take  = allow_metadata_inventory_take, | ||||||
| @@ -266,19 +302,25 @@ end) () | |||||||
| 		paramtype2  = "facedir", | 		paramtype2  = "facedir", | ||||||
| 	}) | 	}) | ||||||
|  |  | ||||||
|  | 	local function on_activate(self, staticdata) | ||||||
|  | 		self.object:set_properties{textures = {"maidroid_tool:core_node"}} | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local function start_rotate(self) | ||||||
|  | 		self.object:set_properties{automatic_rotate = 1} | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local function stop_rotate(self) | ||||||
|  | 		self.object:set_properties{automatic_rotate = 0} | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	minetest.register_entity("maidroid_tool:core_entity", { | 	minetest.register_entity("maidroid_tool:core_entity", { | ||||||
| 		physical       = false, | 		physical      = false, | ||||||
| 		visual         = "wielditem", | 		visual        = "wielditem", | ||||||
| 		visual_size    = {x = 0.5, y = 0.5}, | 		visual_size   = {x = 0.5, y = 0.5}, | ||||||
| 		collisionbox   = {0, 0, 0, 0, 0, 0}, | 		collisionbox  = {0, 0, 0, 0, 0, 0}, | ||||||
|  | 		on_activate   = on_activate, | ||||||
| 		on_activate = function(self, staticdata) | 		start_rotate  = start_rotate, | ||||||
| 			self.object:set_properties{textures = {"maidroid_tool:core_node"}} | 		stop_rotate   = stop_rotate, | ||||||
| 		end, |  | ||||||
|  |  | ||||||
| 		on_step = function(self, dtime) |  | ||||||
| 			local yaw = self.object:getyaw() |  | ||||||
| 			self.object:setyaw(yaw + 0.1) |  | ||||||
| 		end, |  | ||||||
| 	}) | 	}) | ||||||
| end) () | end) () | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user