Factions/src/com/massivecraft/factions/FPlayerColl.java

112 lines
3.1 KiB
Java
Raw Normal View History

package com.massivecraft.factions;
import java.io.File;
import java.lang.reflect.Type;
import java.util.Map;
2013-04-12 08:56:26 +02:00
import java.util.Map.Entry;
2013-04-12 08:56:26 +02:00
import com.massivecraft.mcore.store.MStore;
import com.massivecraft.mcore.store.SenderColl;
import com.massivecraft.mcore.util.DiscUtil;
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
2013-04-12 08:56:26 +02:00
public class FPlayerColl extends SenderColl<FPlayer>
{
2013-04-12 08:56:26 +02:00
// -------------------------------------------- //
// INSTANCE & CONSTRUCT
// -------------------------------------------- //
2013-04-12 08:56:26 +02:00
private static FPlayerColl i = new FPlayerColl();
public static FPlayerColl get() { return i; }
2013-04-09 13:22:23 +02:00
private FPlayerColl()
{
2013-04-12 08:56:26 +02:00
super(MStore.getDb(ConfServer.dburi), Factions.get(), Const.COLLECTION_BASENAME_PLAYER, FPlayer.class, true, true);
}
2013-04-12 08:56:26 +02:00
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
// TODO: Init and migration routine!
@Override
2013-04-12 08:56:26 +02:00
public void init()
{
super.init();
this.migrate();
}
public void migrate()
{
2013-04-12 08:56:26 +02:00
// Create file objects
File oldFile = new File(Factions.get().getDataFolder(), "players.json");
File newFile = new File(Factions.get().getDataFolder(), "players.json.migrated");
// Already migrated?
if ( ! oldFile.exists()) return;
// Read the file content through GSON.
Type type = new TypeToken<Map<String, FPlayer>>(){}.getType();
Map<String, FPlayer> id2fplayer = Factions.get().gson.fromJson(DiscUtil.readCatch(oldFile), type);
// Set the data
for (Entry<String, FPlayer> entry : id2fplayer.entrySet())
{
String playerId = entry.getKey();
FPlayer fplayer = entry.getValue();
FPlayerColl.get().create(playerId).load(fplayer);
}
// Mark as migrated
oldFile.renameTo(newFile);
}
2013-04-12 08:56:26 +02:00
// -------------------------------------------- //
// EXTRAS
// -------------------------------------------- //
public void clean()
{
2013-04-12 08:56:26 +02:00
for (FPlayer fplayer : this.getAll())
{
2013-04-09 12:58:39 +02:00
if ( ! FactionColl.i.exists(fplayer.getFactionId()))
{
2013-04-10 08:40:41 +02:00
Factions.get().log("Reset faction data (invalid faction) for player "+fplayer.getName());
fplayer.resetFactionData(false);
}
}
}
public void autoLeaveOnInactivityRoutine()
{
2013-04-09 13:15:25 +02:00
if (ConfServer.autoLeaveAfterDaysOfInactivity <= 0.0)
{
return;
}
long now = System.currentTimeMillis();
2013-04-09 13:15:25 +02:00
double toleranceMillis = ConfServer.autoLeaveAfterDaysOfInactivity * 24 * 60 * 60 * 1000;
2013-04-12 08:56:26 +02:00
for (FPlayer fplayer : this.getAll())
{
if (fplayer.isOffline() && now - fplayer.getLastLoginTime() > toleranceMillis)
{
2013-04-09 13:15:25 +02:00
if (ConfServer.logFactionLeave || ConfServer.logFactionKick)
Factions.get().log("Player "+fplayer.getName()+" was auto-removed due to inactivity.");
// if player is faction leader, sort out the faction since he's going away
if (fplayer.getRole() == Rel.LEADER)
{
Faction faction = fplayer.getFaction();
if (faction != null)
fplayer.getFaction().promoteNewLeader();
}
fplayer.leave(false);
fplayer.detach();
}
}
}
}