Invitations as inner entities

This commit is contained in:
Magnus Ulf Jørgensen
2017-04-20 11:05:56 +02:00
parent f10da26159
commit 60c9d7fcac
11 changed files with 199 additions and 80 deletions

View File

@ -13,7 +13,6 @@ import com.massivecraft.massivecore.collections.MassiveList;
import com.massivecraft.massivecore.collections.MassiveMap;
import com.massivecraft.massivecore.collections.MassiveMapDef;
import com.massivecraft.massivecore.collections.MassiveSet;
import com.massivecraft.massivecore.collections.MassiveSetDef;
import com.massivecraft.massivecore.mixin.MixinMessage;
import com.massivecraft.massivecore.money.Money;
import com.massivecraft.massivecore.predicate.Predicate;
@ -21,6 +20,7 @@ import com.massivecraft.massivecore.predicate.PredicateAnd;
import com.massivecraft.massivecore.predicate.PredicateVisibleTo;
import com.massivecraft.massivecore.ps.PS;
import com.massivecraft.massivecore.store.Entity;
import com.massivecraft.massivecore.store.EntityInternalMap;
import com.massivecraft.massivecore.store.SenderColl;
import com.massivecraft.massivecore.util.IdUtil;
import com.massivecraft.massivecore.util.MUtil;
@ -70,7 +70,7 @@ public class Faction extends Entity<Faction> implements FactionsParticipator
this.setCreatedAtMillis(that.createdAtMillis);
this.setHome(that.home);
this.setPowerBoost(that.powerBoost);
this.setInvitedPlayerIds(that.invitedPlayerIds);
this.invitations.load(that.invitations);
this.setRelationWishes(that.relationWishes);
this.setFlagIds(that.flags);
this.setPermIds(that.perms);
@ -92,6 +92,12 @@ public class Faction extends Entity<Faction> implements FactionsParticipator
}
}
// -------------------------------------------- //
// VERSION
// -------------------------------------------- //
public int version = 1;
// -------------------------------------------- //
// FIELDS: RAW
// -------------------------------------------- //
@ -136,7 +142,7 @@ public class Faction extends Entity<Faction> implements FactionsParticipator
// This is the ids of the invited players.
// They are actually "senderIds" since you can invite "@console" to your faction.
// Null means no one is invited
private MassiveSetDef<String> invitedPlayerIds = new MassiveSetDef<>();
private EntityInternalMap<Invitation> invitations = new EntityInternalMap<>(this, Invitation.class);
// The keys in this map are factionIds.
// Null means no special relation whishes.
@ -436,31 +442,14 @@ public class Faction extends Entity<Faction> implements FactionsParticipator
// RAW
public Set<String> getInvitedPlayerIds()
{
return this.invitedPlayerIds;
}
public void setInvitedPlayerIds(Collection<String> invitedPlayerIds)
{
// Clean input
MassiveSetDef<String> target = new MassiveSetDef<>(invitedPlayerIds);
// Detect Nochange
if (MUtil.equals(this.invitedPlayerIds, target)) return;
// Apply
this.invitedPlayerIds = target;
// Mark as changed
this.changed();
}
public EntityInternalMap<Invitation> getInvitations() { return this.invitations; }
// FINER
public boolean isInvited(String playerId)
{
return this.getInvitedPlayerIds().contains(playerId);
return this.getInvitations().containsKey(playerId);
}
public boolean isInvited(MPlayer mplayer)
@ -468,38 +457,20 @@ public class Faction extends Entity<Faction> implements FactionsParticipator
return this.isInvited(mplayer.getId());
}
public boolean setInvited(String playerId, boolean invited)
public boolean uninvite(String playerId)
{
List<String> invitedPlayerIds = new MassiveList<>(this.getInvitedPlayerIds());
boolean ret;
if (invited)
{
ret = invitedPlayerIds.add(playerId);
}
else
{
ret = invitedPlayerIds.remove(playerId);
}
this.setInvitedPlayerIds(invitedPlayerIds);
return ret;
return this.getInvitations().remove(playerId) != null;
}
public void setInvited(MPlayer mplayer, boolean invited)
public boolean uninvite(MPlayer mplayer)
{
this.setInvited(mplayer.getId(), invited);
return uninvite(mplayer.getId());
}
public List<MPlayer> getInvitedMPlayers()
public void invite(String playerId, Invitation invitation)
{
List<MPlayer> mplayers = new MassiveList<>();
for (String id : this.getInvitedPlayerIds())
{
MPlayer mplayer = MPlayer.get(id);
mplayers.add(mplayer);
}
return mplayers;
uninvite(playerId);
this.invitations.attach(invitation, playerId);
}
// -------------------------------------------- //

View File

@ -0,0 +1,47 @@
package com.massivecraft.factions.entity;
import com.massivecraft.massivecore.store.EntityInternal;
public class Invitation extends EntityInternal<Invitation>
{
// -------------------------------------------- //
// OVERRIDE: ENTITY
// -------------------------------------------- //
@Override
public Invitation load(Invitation that)
{
this.inviterId = that.inviterId;
this.creationMillis = that.creationMillis;
return this;
}
// -------------------------------------------- //
// FIELDS
// -------------------------------------------- //
private String inviterId;
public String getInviterId() { return inviterId; }
public void setInviterId(String inviterId) { this.inviterId = inviterId; }
private Long creationMillis;
public Long getCreationMillis() { return creationMillis; }
public void setCreationMillis(Long creationMillis) { this.creationMillis = creationMillis; }
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public Invitation()
{
this(null, null);
}
public Invitation(String inviterId, Long creationMillis)
{
this.inviterId = inviterId;
this.creationMillis = creationMillis;
}
}

View File

@ -70,7 +70,7 @@ public class MPlayer extends SenderEntity<MPlayer> implements FactionsParticipat
return this;
}
// -------------------------------------------- //
// IS DEFAULT
// -------------------------------------------- //

View File

@ -0,0 +1,69 @@
package com.massivecraft.factions.entity.migrator;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.massivecore.store.migrator.MigratorFieldConvert;
import com.massivecraft.massivecore.store.migrator.MigratorFieldRename;
import com.massivecraft.massivecore.store.migrator.MigratorRoot;
import com.massivecraft.massivecore.xlib.gson.JsonElement;
import com.massivecraft.massivecore.xlib.gson.JsonObject;
public class MigratorFaction001Invitations extends MigratorRoot
{
// -------------------------------------------- //
// INSTANCE & CONSTRUCT
// -------------------------------------------- //
private static com.massivecraft.factions.entity.migrator.MigratorFaction001Invitations i = new com.massivecraft.factions.entity.migrator.MigratorFaction001Invitations();
public static com.massivecraft.factions.entity.migrator.MigratorFaction001Invitations get() { return i; }
private MigratorFaction001Invitations()
{
super(Faction.class);
this.addInnerMigrator(MigratorFieldRename.get("invitedPlayerIds", "invitations"));
this.addInnerMigrator(new MigratorFaction001InvitationsField());
}
public class MigratorFaction001InvitationsField extends MigratorFieldConvert
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
private MigratorFaction001InvitationsField()
{
super("invitations");
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
public Object migrateInner(JsonElement idList)
{
JsonObject ret = new JsonObject();
//EntityInternalMap<Invitation> ret = new EntityInternalMap<>(null, Invitation.class);
// If non-null
if (!idList.isJsonNull())
{
// ... and proper type ...
if (!idList.isJsonArray()) throw new IllegalArgumentException(idList.toString());
// ... fill!
for (JsonElement playerId : idList.getAsJsonArray())
{
String id = playerId.getAsString();
// Create invitation
JsonObject invitation = new JsonObject();
// Attach
ret.add(id, invitation);
}
}
return ret;
}
}
}