local core = minetest -- core.write_json / core.parse_json has problems when called on {} local serialize = core.serialize local deserialize = core.deserialize local InviteParty = {} local super = party_api.party_classes.default_party local __index = function (_, key) return InviteParty[key] or super[key] end InviteParty.getData = function(self) local result = super.getData(self) result.invite_required = self.invite_required result.invited = self.invited return result end InviteParty.join = function (self, playername) if self.invite_required then local invite_list = deserialize(self.invited) if not invite_list[playername] then -- TODO: Notify that someone wanted to join?) return false, "Missing invitation for this party" end invite_list[playername] = nil self.invited = serialize(invite_list) end return super.join(self, playername) end InviteParty.setInviteRequired = function (self, value) -- turn value into a bool value = not not value self.invite_required = value if value == false then party.invited = serialize({}) return "Invite is now OFF" else return "Invite is now ON" end end InviteParty.invite = function (self, playername) if not self.invite_required then return false, "No invite required" end local invite_list = deserialize(self.invited) invite_list[playername] = true self.invited = serialize(invite_list) return "OK" end InviteParty.cancelInvite = function (self, playername) if not self.invite_required then return false, "No invite required" end local invite_list = deserialize(self.invited) invite_list[playername] = nil self.invited = serialize(invite_list) return "OK" end local load = function (partyname, data, members) local party = super(partyname, data, members) party.invite_required = data.invite_required party.invited = data.invited return setmetatable(party, {__index = __index}) end local create = function(partyname, invite_required) local party = super(partyname) -- turn invite_required into a bool party.invite_required = not not invite_required party.invited = serialize({}) return setmetatable(party, {__index = __index}) end local call = function (_, ...) if #{...} < 3 then return create(...) end if #{...} == 3 then return load(...) end end return setmetatable({}, { __call = call, __index = __index, })