if (minetest.get_modpath("intllib")) then dofile(minetest.get_modpath("intllib").."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end end teletool = {} teletool.settings = {} function teletool.teleport(player, pointed_thing) local pos = pointed_thing.above local over1 = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) local over2 = minetest.get_node({x=pos.x,y=pos.y+2,z=pos.z}) local src = player:getpos() local dest = {x=pos.x, y=math.ceil(pos.y)-0.5, z=pos.z} minetest.add_particlespawner({ amount = 25, time = 0.1, minpos = {x=src.x-0.4, y=src.y+0.25, z=src.z-0.4}, maxpos = {x=src.x+0.4, y=src.y+0.75, z=src.z+0.4}, minvel = {x=-0.1, y=-0.1, z=-0.1}, maxvel = {x=0, y=0.1, z=0}, minexptime=1, maxexptime=1.5, minsize=1, maxsize=1.25, texture = "teletool_particle_departure.png", }) minetest.sound_play( {name="teletool_teleport1", gain=1}, {pos=src, max_hear_distance=12}) player:setpos(dest) minetest.add_particlespawner({ amount = 25, time = 0.1, minpos = {x=dest.x-0.4, y=dest.y+0.25, z=dest.z-0.4}, maxpos = {x=dest.x+0.4, y=dest.y+0.75, z=dest.z+0.4}, minvel = {x=0, y=-0.1, z=0}, maxvel = {x=0.1, y=0.1, z=0.1}, minexptime=1, maxexptime=1.5, minsize=1, maxsize=1.25, texture = "teletool_particle_arrival.png", }) minetest.after(0.5, function(dest) minetest.sound_play( {name="teletool_teleport2", gain=1}, {pos=dest, max_hear_distance=12}) end, dest) end minetest.register_tool("teletool:teletool_infinite", { description = S("infinite point teleporter"), range = 20.0, tool_capabilities = {}, wield_image = "teletool_teletool_infinite.png", inventory_image = "teletool_teletool_infinite.png", on_use = function(itemstack, user, pointed_thing) local failure = false if(pointed_thing.type == "node") then teletool.teleport(user, pointed_thing) else failure = true end if failure then minetest.sound_play( {name="teletool_fail", gain=0.5}, {pos=user:getpos(), max_hear_distance=4}) end return itemstack end, }) if(minetest.get_modpath("technic")) then technic.register_power_tool("teletool:teletool_technic", 50000) minetest.register_tool("teletool:teletool_technic", { description = S("electronic point teleporter"), range = 20.0, tool_capabilities = {}, wield_image = "teletool_teletool_technic.png", inventory_image = "teletool_teletool_technic.png", on_use = function(itemstack, user, pointed_thing) local failure = false if(pointed_thing.type == "node") then local meta = minetest.deserialize(itemstack:get_metadata()) if not meta or not meta.charge then return end if meta.charge >= 1000 then meta.charge = meta.charge - 1000 teletool.teleport(user, pointed_thing) technic.set_RE_wear(itemstack, meta.charge, 50000) itemstack:set_metadata(minetest.serialize(meta)) else failure = true end else failure = true end if failure then minetest.sound_play( {name="teletool_fail", gain=0.5}, {pos=user:getpos(), max_hear_distance=4}) end return itemstack end, -- Technic data wear_represents = "technic_RE_charge", on_refill = technic.refill_RE_charge }) end if(minetest.get_modpath("mana") ~= nil) then minetest.register_tool("teletool:teletool_mana", { description = S("magical point teleporter"), range = 20.0, tool_capabilities = {}, wield_image = "teletool_teletool_mana.png", inventory_image = "teletool_teletool_mana.png", on_use = function(itemstack, user, pointed_thing) local failure = false if(pointed_thing.type == "node") then if(mana.subtract(user:get_player_name(), 20)) then teletool.teleport(user, pointed_thing) else failure = true end else failure = true end if failure then minetest.sound_play( {name="teletool_fail", gain=0.5}, {pos=user:getpos(), max_hear_distance=4}) end return itemstack end, }) end if(minetest.get_modpath("default") ~= nil and minetest.get_modpath("technic") ~= nil) then minetest.register_craft({ output = "teletool:teletool_technic", recipe = { {"", "default:mese_crystal", ""}, {"technic:stainless_steel_ingot", "technic:red_energy_crystal", "technic:stainless_steel_ingot"}, {"technic:stainless_steel_ingot", "technic:battery", "technic:stainless_steel_ingot"} } }) end minetest.register_alias("teletool:teletool", "teletool:teletool_infinite")