local reg_node = ocutil.safe_register_node -- =================================================================== if true then local str = minetest.setting_get ("placecraft_drawtype") if ocutil.str_nonempty (str) then if str == "mobs" then str = "mob" end if str == "sprites" then str = "sprite" end placecraft.drawtype = str end end -- =================================================================== placecraft.panic = function (s) ocutil.panic ("placecraft: " .. s) end -- =================================================================== local null_use = function (itemstack, player, pointed_thing) return itemstack end -- =================================================================== local make_use = function (ent_name, on_use) if on_use == nil then on_use = null_use end local ent_rec = minetest.registered_entities [ent_name] if ent_rec == nil then placecraft.panic ("make_use: " .. ent_name) end return function (itemstack, player, pointed_thing) local pos = pointed_thing.under if pos ~= nil then pos.y = pos.y + 1 local obj = minetest.get_node (pos) if obj.name == "air" then local vs = ent_rec.visual_size if vs ~= nil then local sz = vs.y or 1 if sz >= 0.25 and sz < 1.00 then pos.y = pos.y - ((1 - sz) / 2) elseif sz > 1.00 and sz <= 3.00 then pos.y = pos.y + ((sz - 1) / 2) end end minetest.add_entity (pos, ent_name) itemstack:take_item() return itemstack end end return on_use (itemstack, player, pointed_thing) end end -- =================================================================== placecraft.register_item = function (item_name, obj_params) -- =================================================================== if type (item_name ) ~= "string" then placecraft.panic ("584844") end if type (obj_params) ~= "table" then placecraft.panic ("584845") end -- =================================================================== local basename = item_name:gsub (":", "_") local drawtype = obj_params.drawtype local groups = obj_params.groups local image = obj_params.image local vsize = obj_params.vsize local narrow = obj_params.narrow -- =================================================================== if drawtype == nil then drawtype = placecraft.drawtype end if drawtype == "mobs" then drawtype = "mob" end if drawtype == "sprites" then drawtype = "sprite" end local sprite_prefix = "pcsprites:" if drawtype == "mob" then sprite_prefix = "pcmobs:" end -- =================================================================== local inv_image = obj_params.inv or obj_params.inventory_image local sprite_image = obj_params.sprite or obj_params.sprite_image local wield_image = obj_params.wield or obj_params.wield_image -- =================================================================== if ocutil.str_empty (inv_image ) then inv_image = nil end if ocutil.str_empty (wield_image ) then wield_image = nil end if ocutil.str_empty (sprite_image ) then sprite_image = nil end -- =================================================================== if inv_image == nil then inv_image = image end if wield_image == nil then wield_image = image end if sprite_image == nil then sprite_image = image end -- =================================================================== obj_params.inventory_image = inv_image obj_params.wield_image = wield_image -- =================================================================== local sprite_name if drawtype == "mob" or drawtype == "sprite" then sprite_name = sprite_prefix .. basename placecraft.register_mob (basename, sprite_image, vsize, narrow) placecraft.register_sprite (basename, sprite_image, vsize, narrow) else local prefixes = { "pcmobs", "pcsprites" } for _, prefix in ipairs (prefixes) do local entity_name = prefix .. ":" .. basename minetest.register_entity (":" .. entity_name, { on_activate = function (self) self.object:remove() end }) end end -- =================================================================== if drawtype == "plantlike" then if groups == nil then groups = {} else groups = ocutil.clone_table (groups) end groups ['choppy' ] = 2 groups ['dig_immediate' ] = 3 obj_params.drawtype = "plantlike" obj_params.groups = groups obj_params.tiles = { image } obj_params.inventory_image = inventory_image obj_params.wield_image = wield_image obj_params.paramtype = "light" obj_params.sunlight_propagates = true obj_params.visual_scale = vsize obj_params.walkable = false local sprite_collision = { -0.50 , -0.50 , -0.50 , 0.50 , 0.50 , 0.50 } local cbox = sprite_collision local hsize = 1 if vsize == nil then vsize = 1 end if narrow == nil then narrow = "" end if ocutil.str_true (narrow) then hsize = 0.60 elseif ocutil.starts_with (narrow, "0.") then hsize = narrow end if vsize ~= 1 or hsize ~= 1 then cbox = ocutil.clone_table (sprite_collision) for ii=1,#cbox do cbox [ii] = cbox [ii] * vsize if ii ~= 2 and ii ~= 5 then cbox [ii] = cbox [ii] * hsize end end end obj_params.selection_box = { type = "fixed" , fixed = cbox , } reg_node (item_name, obj_params, narrow) else obj_params.on_use = make_use (sprite_name, obj_params.on_use) ocutil.safe_register_item (item_name, obj_params) end end -- =================================================================== -- End of file.