Allow hovercraft to be ownable & unusable by non-owners

This commit is contained in:
Jordan Irwin 2021-05-29 01:35:16 -07:00
parent 051dfe6fee
commit e993d073a6
4 changed files with 37 additions and 3 deletions

View File

@ -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,

View File

@ -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
View File

@ -0,0 +1,2 @@
hover.ownable = core.settings:get_bool("mount_ownable", true)

3
settingtypes.txt Normal file
View File

@ -0,0 +1,3 @@
# Hovercrafts can only be used by owners.
mount_ownable (Ownable hovercrafts) bool true