Allow hovercraft to be ownable & unusable by non-owners
This commit is contained in:
parent
051dfe6fee
commit
e993d073a6
27
hover.lua
27
hover.lua
@ -1,4 +1,3 @@
|
||||
hover = {}
|
||||
|
||||
function hover:register_hovercraft(name, def)
|
||||
minetest.register_entity(name, {
|
||||
@ -22,6 +21,9 @@ function hover:register_hovercraft(name, def)
|
||||
on_activate = function(self, staticdata, dtime_s)
|
||||
self.object:set_armor_groups({immortal=1})
|
||||
self.object:set_animation({x=0, y=24}, 30)
|
||||
|
||||
local sdata = core.deserialize(staticdata)
|
||||
self.owner = sdata.owner
|
||||
end,
|
||||
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)
|
||||
if not puncher or not puncher:is_player() then return end
|
||||
@ -31,6 +33,11 @@ function hover:register_hovercraft(name, def)
|
||||
end
|
||||
|
||||
local pname = puncher:get_player_name()
|
||||
if hover.ownable and self.owner and pname ~= self.owner then
|
||||
core.chat_send_player(pname, "You cannot take " .. self.owner .. "'s hovercraft.")
|
||||
return
|
||||
end
|
||||
|
||||
local stack = ItemStack(name)
|
||||
local pinv = puncher:get_inventory()
|
||||
if not pinv:room_for_item("main", stack) then
|
||||
@ -48,6 +55,7 @@ function hover:register_hovercraft(name, def)
|
||||
if not clicker or not clicker:is_player() then
|
||||
return
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
if self.player and clicker == self.player then
|
||||
if self.sound then
|
||||
@ -61,6 +69,12 @@ function hover:register_hovercraft(name, def)
|
||||
clicker:set_animation({x=0, y=0})
|
||||
clicker:set_detach()
|
||||
elseif not self.player then
|
||||
local pname = clicker:get_player_name()
|
||||
if hover.ownable and self.owner and pname ~= self.owner then
|
||||
core.chat_send_player(pname, "You cannot ride " .. self.owner .. "'s hovercraft.")
|
||||
return
|
||||
end
|
||||
|
||||
self.player = clicker
|
||||
|
||||
local attach_y = 16.5
|
||||
@ -176,7 +190,16 @@ function hover:register_hovercraft(name, def)
|
||||
end
|
||||
self.object:set_velocity(self.velocity)
|
||||
end,
|
||||
|
||||
get_staticdata = function(self)
|
||||
local sdata = {
|
||||
owner = self.owner,
|
||||
}
|
||||
|
||||
return core.serialize(sdata)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craftitem(name, {
|
||||
description = def.description,
|
||||
inventory_image = def.inventory_image,
|
||||
@ -186,7 +209,7 @@ function hover:register_hovercraft(name, def)
|
||||
return
|
||||
end
|
||||
pointed_thing.under.y = pointed_thing.under.y + 0.5
|
||||
minetest.add_entity(pointed_thing.under, name)
|
||||
minetest.add_entity(pointed_thing.under, name, core.serialize({owner=placer:get_player_name()}))
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
|
8
init.lua
8
init.lua
@ -1,4 +1,10 @@
|
||||
dofile(minetest.get_modpath("hovercraft").."/hover.lua")
|
||||
|
||||
hover = {}
|
||||
hover.modname = core.get_current_modname()
|
||||
hover.modpath = core.get_modpath(hover.modname)
|
||||
|
||||
dofile(hover.modpath .. "/settings.lua")
|
||||
dofile(hover.modpath .. "/hover.lua")
|
||||
|
||||
hover:register_hovercraft("hovercraft:hover_red" ,{
|
||||
description = "Red Hovercraft",
|
||||
|
2
settings.lua
Normal file
2
settings.lua
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
hover.ownable = core.settings:get_bool("mount_ownable", true)
|
3
settingtypes.txt
Normal file
3
settingtypes.txt
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
# Hovercrafts can only be used by owners.
|
||||
mount_ownable (Ownable hovercrafts) bool true
|
Loading…
x
Reference in New Issue
Block a user