mirror of
https://github.com/MassiveCraft/Factions.git
synced 2024-11-27 04:35:21 +01:00
Halfway through adding in universe support
This commit is contained in:
parent
de703d3461
commit
9fc75b1fcf
@ -18,6 +18,10 @@ public class Const
|
|||||||
public static final String COLLECTION_BASENAME_PLAYER = COLLECTION_BASENAME_+"player";
|
public static final String COLLECTION_BASENAME_PLAYER = COLLECTION_BASENAME_+"player";
|
||||||
public static final String COLLECTION_BASENAME_FACTION = COLLECTION_BASENAME_+"faction";
|
public static final String COLLECTION_BASENAME_FACTION = COLLECTION_BASENAME_+"faction";
|
||||||
|
|
||||||
|
// Aspect Ids
|
||||||
|
|
||||||
|
public static final String ASPECT_ID = "factions";
|
||||||
|
|
||||||
// Defautlt faction ids
|
// Defautlt faction ids
|
||||||
public static final String FACTIONID_NONE = "0";
|
public static final String FACTIONID_NONE = "0";
|
||||||
public static final String FACTIONID_SAFEZONE = "-1";
|
public static final String FACTIONID_SAFEZONE = "-1";
|
||||||
|
@ -12,9 +12,8 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
|
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.mcore.ps.PS;
|
import com.massivecraft.mcore.ps.PS;
|
||||||
|
|
||||||
@ -178,7 +177,7 @@ public enum FPerm
|
|||||||
|
|
||||||
if (testSubject instanceof CommandSender)
|
if (testSubject instanceof CommandSender)
|
||||||
{
|
{
|
||||||
rpSubject = FPlayerColl.get().get(testSubject);
|
rpSubject = FPlayer.get(testSubject);
|
||||||
}
|
}
|
||||||
else if (testSubject instanceof RelationParticipator)
|
else if (testSubject instanceof RelationParticipator)
|
||||||
{
|
{
|
||||||
@ -213,7 +212,7 @@ public enum FPerm
|
|||||||
}
|
}
|
||||||
public boolean has(Object testSubject, PS ps, boolean informIfNot)
|
public boolean has(Object testSubject, PS ps, boolean informIfNot)
|
||||||
{
|
{
|
||||||
TerritoryAccess access = BoardColl.get().getTerritoryAccessAt(ps);
|
TerritoryAccess access = BoardColls.get().getTerritoryAccessAt(ps);
|
||||||
|
|
||||||
if (this.isTerritoryPerm())
|
if (this.isTerritoryPerm())
|
||||||
{
|
{
|
||||||
@ -224,7 +223,7 @@ public enum FPerm
|
|||||||
{
|
{
|
||||||
FPlayer notify = null;
|
FPlayer notify = null;
|
||||||
if (testSubject instanceof CommandSender)
|
if (testSubject instanceof CommandSender)
|
||||||
notify = FPlayerColl.get().get(testSubject);
|
notify = FPlayer.get(testSubject);
|
||||||
else if (testSubject instanceof FPlayer)
|
else if (testSubject instanceof FPlayer)
|
||||||
notify = (FPlayer)testSubject;
|
notify = (FPlayer)testSubject;
|
||||||
if (notify != null)
|
if (notify != null)
|
||||||
|
@ -20,9 +20,9 @@ import com.massivecraft.factions.chat.tag.ChatTagTagforce;
|
|||||||
import com.massivecraft.factions.chat.tag.ChatTagTitle;
|
import com.massivecraft.factions.chat.tag.ChatTagTitle;
|
||||||
import com.massivecraft.factions.cmd.*;
|
import com.massivecraft.factions.cmd.*;
|
||||||
import com.massivecraft.factions.entity.Board;
|
import com.massivecraft.factions.entity.Board;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
import com.massivecraft.factions.entity.FPlayerColls;
|
||||||
import com.massivecraft.factions.entity.FactionColl;
|
import com.massivecraft.factions.entity.FactionColls;
|
||||||
import com.massivecraft.factions.entity.MConfColl;
|
import com.massivecraft.factions.entity.MConfColl;
|
||||||
import com.massivecraft.factions.integration.LWCFeatures;
|
import com.massivecraft.factions.integration.LWCFeatures;
|
||||||
import com.massivecraft.factions.integration.SpoutFeatures;
|
import com.massivecraft.factions.integration.SpoutFeatures;
|
||||||
@ -38,6 +38,9 @@ import com.massivecraft.factions.task.AutoLeaveTask;
|
|||||||
import com.massivecraft.factions.task.EconLandRewardTask;
|
import com.massivecraft.factions.task.EconLandRewardTask;
|
||||||
|
|
||||||
import com.massivecraft.mcore.MPlugin;
|
import com.massivecraft.mcore.MPlugin;
|
||||||
|
import com.massivecraft.mcore.usys.Aspect;
|
||||||
|
import com.massivecraft.mcore.usys.AspectColl;
|
||||||
|
import com.massivecraft.mcore.usys.Multiverse;
|
||||||
import com.massivecraft.mcore.util.MUtil;
|
import com.massivecraft.mcore.util.MUtil;
|
||||||
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
|
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
|
||||||
|
|
||||||
@ -63,6 +66,11 @@ public class Factions extends MPlugin
|
|||||||
// Listeners
|
// Listeners
|
||||||
public TodoFactionsPlayerListener playerListener;
|
public TodoFactionsPlayerListener playerListener;
|
||||||
|
|
||||||
|
// Aspects
|
||||||
|
private Aspect aspect;
|
||||||
|
public Aspect getAspect() { return this.aspect; }
|
||||||
|
public Multiverse getMultiverse() { return this.getAspect().getMultiverse(); }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE
|
// OVERRIDE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -75,15 +83,23 @@ public class Factions extends MPlugin
|
|||||||
// Load Server Config
|
// Load Server Config
|
||||||
ConfServer.get().load();
|
ConfServer.get().load();
|
||||||
|
|
||||||
|
// Initialize Aspects
|
||||||
|
this.aspect = AspectColl.get().get(Const.ASPECT_ID, true);
|
||||||
|
this.aspect.register();
|
||||||
|
this.aspect.setDesc(
|
||||||
|
"<i>If the factions system even is enabled and how it's configured.",
|
||||||
|
"<i>What factions exists and what players belong to them."
|
||||||
|
);
|
||||||
|
|
||||||
// Register Faction accountId Extractor
|
// Register Faction accountId Extractor
|
||||||
// TODO: Perhaps this should be placed in the econ integration somewhere?
|
// TODO: Perhaps this should be placed in the econ integration somewhere?
|
||||||
MUtil.registerExtractor(String.class, "accountId", ExtractorFactionAccountId.get());
|
MUtil.registerExtractor(String.class, "accountId", ExtractorFactionAccountId.get());
|
||||||
|
|
||||||
// Initialize Collections
|
// Initialize Collections
|
||||||
MConfColl.get().init();
|
MConfColl.get().init();
|
||||||
FPlayerColl.get().init();
|
FPlayerColls.get().init();
|
||||||
FactionColl.get().init();
|
FactionColls.get().init();
|
||||||
BoardColl.get().init();
|
BoardColls.get().init();
|
||||||
|
|
||||||
// Commands
|
// Commands
|
||||||
this.outerCmdFactions = new CmdFactions();
|
this.outerCmdFactions = new CmdFactions();
|
||||||
|
@ -5,7 +5,7 @@ import com.massivecraft.factions.Perm;
|
|||||||
import com.massivecraft.factions.TerritoryAccess;
|
import com.massivecraft.factions.TerritoryAccess;
|
||||||
import com.massivecraft.factions.cmd.arg.ARFPlayer;
|
import com.massivecraft.factions.cmd.arg.ARFPlayer;
|
||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
|
import com.massivecraft.factions.cmd.arg.ARFaction;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.factions.integration.SpoutFeatures;
|
import com.massivecraft.factions.integration.SpoutFeatures;
|
||||||
@ -36,7 +36,7 @@ public class CmdFactionsAccess extends FCommand
|
|||||||
type = (type == null) ? "" : type.toLowerCase();
|
type = (type == null) ? "" : type.toLowerCase();
|
||||||
PS chunk = PS.valueOf(me).getChunk(true);
|
PS chunk = PS.valueOf(me).getChunk(true);
|
||||||
|
|
||||||
TerritoryAccess territory = BoardColl.get().getTerritoryAccessAt(chunk);
|
TerritoryAccess territory = BoardColls.get().getTerritoryAccessAt(chunk);
|
||||||
Faction locFaction = territory.getHostFaction();
|
Faction locFaction = territory.getHostFaction();
|
||||||
boolean accessAny = Perm.ACCESS_ANY.has(sender, false);
|
boolean accessAny = Perm.ACCESS_ANY.has(sender, false);
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import com.massivecraft.factions.Factions;
|
|||||||
import com.massivecraft.factions.Perm;
|
import com.massivecraft.factions.Perm;
|
||||||
import com.massivecraft.factions.Rel;
|
import com.massivecraft.factions.Rel;
|
||||||
import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
|
import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
import com.massivecraft.factions.entity.FPlayerColl;
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
@ -69,7 +69,7 @@ public class CmdFactionsHome extends FCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Faction faction = BoardColl.get().getFactionAt(PS.valueOf(me));
|
Faction faction = BoardColls.get().getFactionAt(PS.valueOf(me));
|
||||||
Location loc = me.getLocation().clone();
|
Location loc = me.getLocation().clone();
|
||||||
|
|
||||||
// if player is not in a safe zone or their own faction territory, only allow teleport if no enemies are nearby
|
// if player is not in a safe zone or their own faction territory, only allow teleport if no enemies are nearby
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
package com.massivecraft.factions.cmd;
|
package com.massivecraft.factions.cmd;
|
||||||
|
|
||||||
import com.massivecraft.factions.Perm;
|
import com.massivecraft.factions.Perm;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.mcore.cmd.arg.ARBoolean;
|
import com.massivecraft.mcore.cmd.arg.ARBoolean;
|
||||||
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
|
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
|
||||||
import com.massivecraft.mcore.cmd.req.ReqIsPlayer;
|
import com.massivecraft.mcore.cmd.req.ReqIsPlayer;
|
||||||
import com.massivecraft.mcore.ps.PS;
|
import com.massivecraft.mcore.ps.PS;
|
||||||
|
|
||||||
|
|
||||||
public class CmdFactionsMap extends FCommand
|
public class CmdFactionsMap extends FCommand
|
||||||
{
|
{
|
||||||
public CmdFactionsMap()
|
public CmdFactionsMap()
|
||||||
@ -49,7 +48,7 @@ public class CmdFactionsMap extends FCommand
|
|||||||
|
|
||||||
public void showMap()
|
public void showMap()
|
||||||
{
|
{
|
||||||
sendMessage(BoardColl.get().getMap(myFaction, PS.valueOf(me), fme.getPlayer().getLocation().getYaw()));
|
sendMessage(BoardColls.get().getMap(myFaction, PS.valueOf(me), fme.getPlayer().getLocation().getYaw()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.massivecraft.factions.cmd;
|
package com.massivecraft.factions.cmd;
|
||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.factions.entity.MConf;
|
import com.massivecraft.factions.entity.MConf;
|
||||||
import com.massivecraft.factions.event.FactionsEventLandUnclaim;
|
import com.massivecraft.factions.event.FactionsEventLandUnclaim;
|
||||||
@ -29,7 +29,7 @@ public class CmdFactionsUnclaim extends FCommand
|
|||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
PS chunk = PS.valueOf(me).getChunk(true);
|
PS chunk = PS.valueOf(me).getChunk(true);
|
||||||
Faction otherFaction = BoardColl.get().getFactionAt(chunk);
|
Faction otherFaction = BoardColls.get().getFactionAt(chunk);
|
||||||
|
|
||||||
// FPerm
|
// FPerm
|
||||||
if ( ! FPerm.TERRITORY.has(sender, otherFaction, true)) return;
|
if ( ! FPerm.TERRITORY.has(sender, otherFaction, true)) return;
|
||||||
@ -54,7 +54,7 @@ public class CmdFactionsUnclaim extends FCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BoardColl.get().removeAt(chunk);
|
BoardColls.get().removeAt(chunk);
|
||||||
SpoutFeatures.updateTerritoryDisplayLoc(chunk);
|
SpoutFeatures.updateTerritoryDisplayLoc(chunk);
|
||||||
myFaction.msg("%s<i> unclaimed some land.", fme.describeTo(myFaction, true));
|
myFaction.msg("%s<i> unclaimed some land.", fme.describeTo(myFaction, true));
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import com.massivecraft.factions.Factions;
|
|||||||
import com.massivecraft.factions.Perm;
|
import com.massivecraft.factions.Perm;
|
||||||
import com.massivecraft.factions.Rel;
|
import com.massivecraft.factions.Rel;
|
||||||
import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
|
import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.MConf;
|
import com.massivecraft.factions.entity.MConf;
|
||||||
import com.massivecraft.factions.event.FactionsEventLandUnclaimAll;
|
import com.massivecraft.factions.event.FactionsEventLandUnclaimAll;
|
||||||
import com.massivecraft.factions.integration.Econ;
|
import com.massivecraft.factions.integration.Econ;
|
||||||
@ -45,7 +45,7 @@ public class CmdFactionsUnclaimall extends FCommand
|
|||||||
// TODO: this event cannot be cancelled yet.
|
// TODO: this event cannot be cancelled yet.
|
||||||
|
|
||||||
// Apply
|
// Apply
|
||||||
BoardColl.get().removeAll(myFaction);
|
BoardColls.get().removeAll(myFaction);
|
||||||
|
|
||||||
// Inform
|
// Inform
|
||||||
myFaction.msg("%s<i> unclaimed ALL of your faction's land.", fme.describeTo(myFaction, true));
|
myFaction.msg("%s<i> unclaimed ALL of your faction's land.", fme.describeTo(myFaction, true));
|
||||||
|
@ -32,7 +32,7 @@ public class Board extends Entity<Board> implements BoardInterface
|
|||||||
|
|
||||||
public static Board get(Object oid)
|
public static Board get(Object oid)
|
||||||
{
|
{
|
||||||
return BoardColl.get().get(oid);
|
return BoardColls.get().get2(oid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -169,7 +169,7 @@ public class Board extends Entity<Board> implements BoardInterface
|
|||||||
{
|
{
|
||||||
TerritoryAccess territoryAccess = entry.getValue();
|
TerritoryAccess territoryAccess = entry.getValue();
|
||||||
|
|
||||||
if (FactionColl.get().containsId(territoryAccess.getHostFactionId())) continue;
|
if (FactionColls.get().get(this).containsId(territoryAccess.getHostFactionId())) continue;
|
||||||
|
|
||||||
PS ps = entry.getKey();
|
PS ps = entry.getKey();
|
||||||
this.removeAt(ps);
|
this.removeAt(ps);
|
||||||
|
@ -1,35 +1,25 @@
|
|||||||
package com.massivecraft.factions.entity;
|
package com.massivecraft.factions.entity;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.Const;
|
|
||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.factions.Factions;
|
||||||
import com.massivecraft.factions.RelationParticipator;
|
import com.massivecraft.factions.RelationParticipator;
|
||||||
import com.massivecraft.factions.TerritoryAccess;
|
import com.massivecraft.factions.TerritoryAccess;
|
||||||
import com.massivecraft.mcore.ps.PS;
|
import com.massivecraft.mcore.ps.PS;
|
||||||
import com.massivecraft.mcore.ps.PSBuilder;
|
|
||||||
import com.massivecraft.mcore.store.Coll;
|
import com.massivecraft.mcore.store.Coll;
|
||||||
import com.massivecraft.mcore.store.MStore;
|
import com.massivecraft.mcore.store.MStore;
|
||||||
import com.massivecraft.mcore.util.DiscUtil;
|
|
||||||
import com.massivecraft.mcore.util.MUtil;
|
import com.massivecraft.mcore.util.MUtil;
|
||||||
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
|
|
||||||
|
|
||||||
public class BoardColl extends Coll<Board> implements BoardInterface
|
public class BoardColl extends Coll<Board> implements BoardInterface
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// INSTANCE & CONSTRUCT
|
// CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static BoardColl i = new BoardColl();
|
public BoardColl(String name)
|
||||||
public static BoardColl get() { return i; }
|
|
||||||
private BoardColl()
|
|
||||||
{
|
{
|
||||||
super(Const.COLLECTION_BASENAME_BOARD, Board.class, MStore.getDb(ConfServer.dburi), Factions.get(), true, true);
|
super(name, Board.class, MStore.getDb(ConfServer.dburi), Factions.get(), true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -46,50 +36,6 @@ public class BoardColl extends Coll<Board> implements BoardInterface
|
|||||||
return MUtil.extract(String.class, "worldName", oid);
|
return MUtil.extract(String.class, "worldName", oid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init()
|
|
||||||
{
|
|
||||||
super.init();
|
|
||||||
|
|
||||||
this.migrate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void migrate()
|
|
||||||
{
|
|
||||||
// Create file objects
|
|
||||||
File oldFile = new File(Factions.get().getDataFolder(), "board.json");
|
|
||||||
File newFile = new File(Factions.get().getDataFolder(), "board.json.migrated");
|
|
||||||
|
|
||||||
// Already migrated?
|
|
||||||
if ( ! oldFile.exists()) return;
|
|
||||||
|
|
||||||
// Read the file content through GSON.
|
|
||||||
Type type = new TypeToken<Map<String,Map<String,TerritoryAccess>>>(){}.getType();
|
|
||||||
Map<String,Map<String,TerritoryAccess>> worldCoordIds = Factions.get().gson.fromJson(DiscUtil.readCatch(oldFile), type);
|
|
||||||
|
|
||||||
// Set the data
|
|
||||||
for (Entry<String,Map<String,TerritoryAccess>> entry : worldCoordIds.entrySet())
|
|
||||||
{
|
|
||||||
String worldName = entry.getKey();
|
|
||||||
Board board = this.get(worldName);
|
|
||||||
for (Entry<String,TerritoryAccess> entry2 : entry.getValue().entrySet())
|
|
||||||
{
|
|
||||||
String[] ChunkCoordParts = entry2.getKey().trim().split("[,\\s]+");
|
|
||||||
int chunkX = Integer.parseInt(ChunkCoordParts[0]);
|
|
||||||
int chunkZ = Integer.parseInt(ChunkCoordParts[1]);
|
|
||||||
PS ps = new PSBuilder().chunkX(chunkX).chunkZ(chunkZ).build();
|
|
||||||
|
|
||||||
TerritoryAccess territoryAccess = entry2.getValue();
|
|
||||||
|
|
||||||
board.setTerritoryAccessAt(ps, territoryAccess);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mark as migrated
|
|
||||||
oldFile.renameTo(newFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE: BOARD
|
// OVERRIDE: BOARD
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
233
src/com/massivecraft/factions/entity/BoardColls.java
Normal file
233
src/com/massivecraft/factions/entity/BoardColls.java
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
package com.massivecraft.factions.entity;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Const;
|
||||||
|
import com.massivecraft.factions.Factions;
|
||||||
|
import com.massivecraft.factions.RelationParticipator;
|
||||||
|
import com.massivecraft.factions.TerritoryAccess;
|
||||||
|
import com.massivecraft.mcore.ps.PS;
|
||||||
|
import com.massivecraft.mcore.ps.PSBuilder;
|
||||||
|
import com.massivecraft.mcore.store.Coll;
|
||||||
|
import com.massivecraft.mcore.store.Colls;
|
||||||
|
import com.massivecraft.mcore.store.Entity;
|
||||||
|
import com.massivecraft.mcore.usys.Aspect;
|
||||||
|
import com.massivecraft.mcore.util.DiscUtil;
|
||||||
|
import com.massivecraft.mcore.util.MUtil;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
public class BoardColls extends Colls<BoardColl, Board> implements BoardInterface
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static BoardColls i = new BoardColls();
|
||||||
|
public static BoardColls get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: COLLS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BoardColl createColl(String collName)
|
||||||
|
{
|
||||||
|
return new BoardColl(collName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Aspect getAspect()
|
||||||
|
{
|
||||||
|
return Factions.get().getAspect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBasename()
|
||||||
|
{
|
||||||
|
return Const.COLLECTION_BASENAME_UCONF;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BoardColl get(Object o)
|
||||||
|
{
|
||||||
|
if (o == null) return null;
|
||||||
|
|
||||||
|
if (o instanceof Entity)
|
||||||
|
{
|
||||||
|
return this.getForUniverse(((Entity<?>)o).getUniverse());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof Coll)
|
||||||
|
{
|
||||||
|
return this.getForUniverse(((Coll<?>)o).getUniverse());
|
||||||
|
}
|
||||||
|
|
||||||
|
String worldName = MUtil.extract(String.class, "worldName", o);
|
||||||
|
if (worldName == null) return null;
|
||||||
|
return this.getForWorld(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init()
|
||||||
|
{
|
||||||
|
super.init();
|
||||||
|
|
||||||
|
this.migrate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void migrate()
|
||||||
|
{
|
||||||
|
// Create file objects
|
||||||
|
File oldFile = new File(Factions.get().getDataFolder(), "board.json");
|
||||||
|
File newFile = new File(Factions.get().getDataFolder(), "board.json.migrated");
|
||||||
|
|
||||||
|
// Already migrated?
|
||||||
|
if ( ! oldFile.exists()) return;
|
||||||
|
|
||||||
|
// Read the file content through GSON.
|
||||||
|
Type type = new TypeToken<Map<String,Map<String,TerritoryAccess>>>(){}.getType();
|
||||||
|
Map<String,Map<String,TerritoryAccess>> worldCoordIds = Factions.get().gson.fromJson(DiscUtil.readCatch(oldFile), type);
|
||||||
|
|
||||||
|
// Set the data
|
||||||
|
for (Entry<String,Map<String,TerritoryAccess>> entry : worldCoordIds.entrySet())
|
||||||
|
{
|
||||||
|
String worldName = entry.getKey();
|
||||||
|
BoardColl boardColl = this.getForWorld(worldName);
|
||||||
|
Board board = boardColl.get(worldName);
|
||||||
|
for (Entry<String,TerritoryAccess> entry2 : entry.getValue().entrySet())
|
||||||
|
{
|
||||||
|
String[] ChunkCoordParts = entry2.getKey().trim().split("[,\\s]+");
|
||||||
|
int chunkX = Integer.parseInt(ChunkCoordParts[0]);
|
||||||
|
int chunkZ = Integer.parseInt(ChunkCoordParts[1]);
|
||||||
|
PS ps = new PSBuilder().chunkX(chunkX).chunkZ(chunkZ).build();
|
||||||
|
|
||||||
|
TerritoryAccess territoryAccess = entry2.getValue();
|
||||||
|
|
||||||
|
board.setTerritoryAccessAt(ps, territoryAccess);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark as migrated
|
||||||
|
oldFile.renameTo(newFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: BOARD
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TerritoryAccess getTerritoryAccessAt(PS ps)
|
||||||
|
{
|
||||||
|
if (ps == null) return null;
|
||||||
|
BoardColl coll = this.getForWorld(ps.getWorld());
|
||||||
|
if (coll == null) return null;
|
||||||
|
return coll.getTerritoryAccessAt(ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Faction getFactionAt(PS ps)
|
||||||
|
{
|
||||||
|
if (ps == null) return null;
|
||||||
|
BoardColl coll = this.getForWorld(ps.getWorld());
|
||||||
|
if (coll == null) return null;
|
||||||
|
return coll.getFactionAt(ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
// SET
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTerritoryAccessAt(PS ps, TerritoryAccess territoryAccess)
|
||||||
|
{
|
||||||
|
if (ps == null) return;
|
||||||
|
BoardColl coll = this.getForWorld(ps.getWorld());
|
||||||
|
if (coll == null) return;
|
||||||
|
coll.setTerritoryAccessAt(ps, territoryAccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFactionAt(PS ps, Faction faction)
|
||||||
|
{
|
||||||
|
if (ps == null) return;
|
||||||
|
BoardColl coll = this.getForWorld(ps.getWorld());
|
||||||
|
if (coll == null) return;
|
||||||
|
coll.setFactionAt(ps, faction);
|
||||||
|
}
|
||||||
|
|
||||||
|
// REMOVE
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeAt(PS ps)
|
||||||
|
{
|
||||||
|
if (ps == null) return;
|
||||||
|
BoardColl coll = this.getForWorld(ps.getWorld());
|
||||||
|
if (coll == null) return;
|
||||||
|
coll.removeAt(ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeAll(Faction faction)
|
||||||
|
{
|
||||||
|
for (BoardColl coll : this.getColls())
|
||||||
|
{
|
||||||
|
coll.removeAll(faction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clean()
|
||||||
|
{
|
||||||
|
for (BoardColl coll : this.getColls())
|
||||||
|
{
|
||||||
|
coll.clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// COUNT
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount(Faction faction)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
for (BoardColl coll : this.getColls())
|
||||||
|
{
|
||||||
|
ret += coll.getCount(faction);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NEARBY DETECTION
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBorderPs(PS ps)
|
||||||
|
{
|
||||||
|
if (ps == null) return false;
|
||||||
|
BoardColl coll = this.getForWorld(ps.getWorld());
|
||||||
|
if (coll == null) return false;
|
||||||
|
return coll.isBorderPs(ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isConnectedPs(PS ps, Faction faction)
|
||||||
|
{
|
||||||
|
if (ps == null) return false;
|
||||||
|
BoardColl coll = this.getForWorld(ps.getWorld());
|
||||||
|
if (coll == null) return false;
|
||||||
|
return coll.isConnectedPs(ps, faction);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MAP GENERATION
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<String> getMap(RelationParticipator observer, PS centerPs, double inDegrees)
|
||||||
|
{
|
||||||
|
if (centerPs == null) return null;
|
||||||
|
BoardColl coll = this.getForWorld(centerPs.getWorld());
|
||||||
|
if (coll == null) return null;
|
||||||
|
return coll.getMap(observer, centerPs, inDegrees);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -41,7 +41,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
|
|
||||||
public static FPlayer get(Object oid)
|
public static FPlayer get(Object oid)
|
||||||
{
|
{
|
||||||
return FPlayerColl.get().get(oid);
|
return FPlayerColls.get().get2(oid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -200,8 +200,8 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
// This method never returns null
|
// This method never returns null
|
||||||
public Faction getFaction()
|
public Faction getFaction()
|
||||||
{
|
{
|
||||||
Faction ret = FactionColl.get().get(this.getFactionId());
|
Faction ret = FactionColls.get().get(this).get(this.getFactionId());
|
||||||
if (ret == null) ret = FactionColl.get().get(Const.FACTIONID_NONE);
|
if (ret == null) ret = FactionColls.get().get(this).get(Const.FACTIONID_NONE);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,15 +235,15 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
// Next we must be attached and inited
|
// Next we must be attached and inited
|
||||||
if (!this.attached()) return;
|
if (!this.attached()) return;
|
||||||
if (!this.getColl().inited()) return;
|
if (!this.getColl().inited()) return;
|
||||||
if (!FactionColl.get().inited()) return;
|
if (!FactionColls.get().get(this).inited()) return;
|
||||||
|
|
||||||
// Spout Derp
|
// Spout Derp
|
||||||
SpoutFeatures.updateTitle(this, null);
|
SpoutFeatures.updateTitle(this, null);
|
||||||
SpoutFeatures.updateTitle(null, this);
|
SpoutFeatures.updateTitle(null, this);
|
||||||
|
|
||||||
// Update index
|
// Update index
|
||||||
Faction oldFaction = FactionColl.get().get(oldFactionId);
|
Faction oldFaction = FactionColls.get().get(this).get(oldFactionId);
|
||||||
Faction faction = FactionColl.get().get(factionId);
|
Faction faction = FactionColls.get().get(this).get(factionId);
|
||||||
|
|
||||||
oldFaction.fplayers.remove(this);
|
oldFaction.fplayers.remove(this);
|
||||||
faction.fplayers.add(this);
|
faction.fplayers.add(this);
|
||||||
@ -596,7 +596,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
public Rel getRelationToLocation()
|
public Rel getRelationToLocation()
|
||||||
{
|
{
|
||||||
// TODO: Use some built in system to get sender
|
// TODO: Use some built in system to get sender
|
||||||
return BoardColl.get().getFactionAt(PS.valueOf(this.getPlayer())).getRelationTo(this);
|
return BoardColls.get().getFactionAt(PS.valueOf(this.getPlayer())).getRelationTo(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -626,13 +626,13 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
public boolean isInOwnTerritory()
|
public boolean isInOwnTerritory()
|
||||||
{
|
{
|
||||||
// TODO: Use Mixin to get this PS instead
|
// TODO: Use Mixin to get this PS instead
|
||||||
return BoardColl.get().getFactionAt(PS.valueOf(this.getPlayer())) == this.getFaction();
|
return BoardColls.get().getFactionAt(Mixin.getSenderPs(this.getId())) == this.getFaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInEnemyTerritory()
|
public boolean isInEnemyTerritory()
|
||||||
{
|
{
|
||||||
// TODO: Use Mixin to get this PS instead
|
// TODO: Use Mixin to get this PS instead
|
||||||
return BoardColl.get().getFactionAt(PS.valueOf(this.getPlayer())).getRelationTo(this) == Rel.ENEMY;
|
return BoardColls.get().getFactionAt(Mixin.getSenderPs(this.getId())).getRelationTo(this) == Rel.ENEMY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendFactionHereMessage()
|
public void sendFactionHereMessage()
|
||||||
@ -641,7 +641,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Faction factionHere = BoardColl.get().getFactionAt(this.getCurrentChunk());
|
Faction factionHere = BoardColls.get().getFactionAt(this.getCurrentChunk());
|
||||||
String msg = Txt.parse("<i>")+" ~ "+factionHere.getTag(this);
|
String msg = Txt.parse("<i>")+" ~ "+factionHere.getTag(this);
|
||||||
if (factionHere.hasDescription())
|
if (factionHere.hasDescription())
|
||||||
{
|
{
|
||||||
@ -705,7 +705,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
if (myFaction.isNormal() && !permanent && myFaction.getFPlayers().isEmpty())
|
if (myFaction.isNormal() && !permanent && myFaction.getFPlayers().isEmpty())
|
||||||
{
|
{
|
||||||
// Remove this faction
|
// Remove this faction
|
||||||
for (FPlayer fplayer : FPlayerColl.get().getAllOnline())
|
for (FPlayer fplayer : FPlayerColls.get().get(this).getAllOnline())
|
||||||
{
|
{
|
||||||
fplayer.msg("<i>%s<i> was disbanded.", myFaction.describeTo(fplayer, true));
|
fplayer.msg("<i>%s<i> was disbanded.", myFaction.describeTo(fplayer, true));
|
||||||
}
|
}
|
||||||
@ -723,7 +723,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
String error = null;
|
String error = null;
|
||||||
|
|
||||||
Faction myFaction = this.getFaction();
|
Faction myFaction = this.getFaction();
|
||||||
Faction currentFaction = BoardColl.get().getFactionAt(ps);
|
Faction currentFaction = BoardColls.get().getFactionAt(ps);
|
||||||
int ownedLand = forFaction.getLandCount();
|
int ownedLand = forFaction.getLandCount();
|
||||||
|
|
||||||
if (ConfServer.worldGuardChecking && Worldguard.checkForRegionsInChunk(ps))
|
if (ConfServer.worldGuardChecking && Worldguard.checkForRegionsInChunk(ps))
|
||||||
@ -772,7 +772,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
ConfServer.claimsMustBeConnected
|
ConfServer.claimsMustBeConnected
|
||||||
&& ! this.isUsingAdminMode()
|
&& ! this.isUsingAdminMode()
|
||||||
&& myFaction.getLandCountInWorld(ps.getWorld()) > 0
|
&& myFaction.getLandCountInWorld(ps.getWorld()) > 0
|
||||||
&& !BoardColl.get().isConnectedPs(ps, myFaction)
|
&& !BoardColls.get().isConnectedPs(ps, myFaction)
|
||||||
&& (!ConfServer.claimsCanBeUnconnectedIfOwnedByOtherFaction || !currentFaction.isNormal())
|
&& (!ConfServer.claimsCanBeUnconnectedIfOwnedByOtherFaction || !currentFaction.isNormal())
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -788,7 +788,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
// TODO more messages WARN current faction most importantly
|
// TODO more messages WARN current faction most importantly
|
||||||
error = Txt.parse("%s<i> owns this land and is strong enough to keep it.", currentFaction.getTag(this));
|
error = Txt.parse("%s<i> owns this land and is strong enough to keep it.", currentFaction.getTag(this));
|
||||||
}
|
}
|
||||||
else if ( ! BoardColl.get().isBorderPs(ps))
|
else if ( ! BoardColls.get().isBorderPs(ps))
|
||||||
{
|
{
|
||||||
error = Txt.parse("<b>You must start claiming land at the border of the territory.");
|
error = Txt.parse("<b>You must start claiming land at the border of the territory.");
|
||||||
}
|
}
|
||||||
@ -806,7 +806,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
public boolean attemptClaim(Faction forFaction, PS psChunk, boolean notifyFailure)
|
public boolean attemptClaim(Faction forFaction, PS psChunk, boolean notifyFailure)
|
||||||
{
|
{
|
||||||
psChunk = psChunk.getChunk(true);
|
psChunk = psChunk.getChunk(true);
|
||||||
Faction currentFaction = BoardColl.get().getFactionAt(psChunk);
|
Faction currentFaction = BoardColls.get().getFactionAt(psChunk);
|
||||||
int ownedLand = forFaction.getLandCount();
|
int ownedLand = forFaction.getLandCount();
|
||||||
|
|
||||||
if ( ! this.canClaimForFactionAtLocation(forFaction, psChunk, notifyFailure)) return false;
|
if ( ! this.canClaimForFactionAtLocation(forFaction, psChunk, notifyFailure)) return false;
|
||||||
@ -820,7 +820,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
// TODO: The economy integration should cancel the event above!
|
// TODO: The economy integration should cancel the event above!
|
||||||
// Calculate the cost to claim the area
|
// Calculate the cost to claim the area
|
||||||
double cost = Econ.calculateClaimCost(ownedLand, currentFaction.isNormal());
|
double cost = Econ.calculateClaimCost(ownedLand, currentFaction.isNormal());
|
||||||
if (ConfServer.econClaimUnconnectedFee != 0.0 && forFaction.getLandCountInWorld(psChunk.getWorld()) > 0 && !BoardColl.get().isConnectedPs(psChunk, forFaction))
|
if (ConfServer.econClaimUnconnectedFee != 0.0 && forFaction.getLandCountInWorld(psChunk.getWorld()) > 0 && !BoardColls.get().isConnectedPs(psChunk, forFaction))
|
||||||
{
|
{
|
||||||
cost += ConfServer.econClaimUnconnectedFee;
|
cost += ConfServer.econClaimUnconnectedFee;
|
||||||
}
|
}
|
||||||
@ -841,7 +841,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
fp.msg("<h>%s<i> claimed land for <h>%s<i> from <h>%s<i>.", this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp));
|
fp.msg("<h>%s<i> claimed land for <h>%s<i> from <h>%s<i>.", this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp));
|
||||||
}
|
}
|
||||||
|
|
||||||
BoardColl.get().setFactionAt(psChunk, forFaction);
|
BoardColls.get().setFactionAt(psChunk, forFaction);
|
||||||
SpoutFeatures.updateTerritoryDisplayLoc(psChunk);
|
SpoutFeatures.updateTerritoryDisplayLoc(psChunk);
|
||||||
|
|
||||||
if (MConf.get().logLandClaims)
|
if (MConf.get().logLandClaims)
|
||||||
|
@ -1,73 +1,28 @@
|
|||||||
package com.massivecraft.factions.entity;
|
package com.massivecraft.factions.entity;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.Const;
|
|
||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.factions.Factions;
|
||||||
import com.massivecraft.factions.Rel;
|
import com.massivecraft.factions.Rel;
|
||||||
import com.massivecraft.mcore.mixin.Mixin;
|
import com.massivecraft.mcore.mixin.Mixin;
|
||||||
import com.massivecraft.mcore.store.MStore;
|
import com.massivecraft.mcore.store.MStore;
|
||||||
import com.massivecraft.mcore.store.SenderColl;
|
import com.massivecraft.mcore.store.SenderColl;
|
||||||
import com.massivecraft.mcore.util.DiscUtil;
|
|
||||||
import com.massivecraft.mcore.util.TimeUnit;
|
import com.massivecraft.mcore.util.TimeUnit;
|
||||||
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
|
|
||||||
|
|
||||||
public class FPlayerColl extends SenderColl<FPlayer>
|
public class FPlayerColl extends SenderColl<FPlayer>
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// INSTANCE & CONSTRUCT
|
// CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static FPlayerColl i = new FPlayerColl();
|
public FPlayerColl(String name)
|
||||||
public static FPlayerColl get() { return i; }
|
|
||||||
private FPlayerColl()
|
|
||||||
{
|
{
|
||||||
super(Const.COLLECTION_BASENAME_PLAYER, FPlayer.class, MStore.getDb(ConfServer.dburi), Factions.get());
|
super(name, FPlayer.class, MStore.getDb(ConfServer.dburi), Factions.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE: COLL
|
// OVERRIDE: COLL
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
// TODO: Init and migration routine!
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init()
|
|
||||||
{
|
|
||||||
super.init();
|
|
||||||
|
|
||||||
this.migrate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void migrate()
|
|
||||||
{
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected synchronized String attach(FPlayer entity, Object oid, boolean noteChange)
|
protected synchronized String attach(FPlayer entity, Object oid, boolean noteChange)
|
||||||
{
|
{
|
||||||
@ -75,7 +30,7 @@ public class FPlayerColl extends SenderColl<FPlayer>
|
|||||||
|
|
||||||
// If inited ...
|
// If inited ...
|
||||||
if (!this.inited()) return ret;
|
if (!this.inited()) return ret;
|
||||||
if (!FactionColl.get().inited()) return ret;
|
if (!FactionColls.get().getForUniverse(this.getUniverse()).inited()) return ret;
|
||||||
|
|
||||||
// ... update the index.
|
// ... update the index.
|
||||||
Faction faction = entity.getFaction();
|
Faction faction = entity.getFaction();
|
||||||
@ -108,7 +63,7 @@ public class FPlayerColl extends SenderColl<FPlayer>
|
|||||||
{
|
{
|
||||||
for (FPlayer fplayer : this.getAll())
|
for (FPlayer fplayer : this.getAll())
|
||||||
{
|
{
|
||||||
if (FactionColl.get().containsId(fplayer.getFactionId())) continue;
|
if (FactionColls.get().get(this).containsId(fplayer.getFactionId())) continue;
|
||||||
|
|
||||||
Factions.get().log("Reset faction data (invalid faction) for player "+fplayer.getName());
|
Factions.get().log("Reset faction data (invalid faction) for player "+fplayer.getName());
|
||||||
fplayer.resetFactionData(false);
|
fplayer.resetFactionData(false);
|
||||||
|
103
src/com/massivecraft/factions/entity/FPlayerColls.java
Normal file
103
src/com/massivecraft/factions/entity/FPlayerColls.java
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
package com.massivecraft.factions.entity;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Const;
|
||||||
|
import com.massivecraft.factions.Factions;
|
||||||
|
import com.massivecraft.mcore.MCore;
|
||||||
|
import com.massivecraft.mcore.store.Coll;
|
||||||
|
import com.massivecraft.mcore.store.Colls;
|
||||||
|
import com.massivecraft.mcore.store.Entity;
|
||||||
|
import com.massivecraft.mcore.usys.Aspect;
|
||||||
|
import com.massivecraft.mcore.util.DiscUtil;
|
||||||
|
import com.massivecraft.mcore.util.MUtil;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
public class FPlayerColls extends Colls<FPlayerColl, FPlayer>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static FPlayerColls i = new FPlayerColls();
|
||||||
|
public static FPlayerColls get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: COLLS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FPlayerColl createColl(String collName)
|
||||||
|
{
|
||||||
|
return new FPlayerColl(collName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Aspect getAspect()
|
||||||
|
{
|
||||||
|
return Factions.get().getAspect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBasename()
|
||||||
|
{
|
||||||
|
return Const.COLLECTION_BASENAME_PLAYER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FPlayerColl get(Object o)
|
||||||
|
{
|
||||||
|
if (o == null) return null;
|
||||||
|
|
||||||
|
if (o instanceof Entity)
|
||||||
|
{
|
||||||
|
return this.getForUniverse(((Entity<?>)o).getUniverse());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof Coll)
|
||||||
|
{
|
||||||
|
return this.getForUniverse(((Coll<?>)o).getUniverse());
|
||||||
|
}
|
||||||
|
|
||||||
|
String worldName = MUtil.extract(String.class, "worldName", o);
|
||||||
|
if (worldName == null) return null;
|
||||||
|
return this.getForWorld(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init()
|
||||||
|
{
|
||||||
|
super.init();
|
||||||
|
|
||||||
|
this.migrate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void migrate()
|
||||||
|
{
|
||||||
|
// 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();
|
||||||
|
FPlayerColls.get().getForUniverse(MCore.DEFAULT).create(playerId).load(fplayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark as migrated
|
||||||
|
oldFile.renameTo(newFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -36,7 +36,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
|
|
||||||
public static Faction get(Object oid)
|
public static Faction get(Object oid)
|
||||||
{
|
{
|
||||||
return FactionColl.get().get(oid);
|
return FactionColls.get().get2(oid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -238,7 +238,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
{
|
{
|
||||||
if (ps == null) return true;
|
if (ps == null) return true;
|
||||||
if (!ConfServer.homesMustBeInClaimedTerritory) return true;
|
if (!ConfServer.homesMustBeInClaimedTerritory) return true;
|
||||||
if (BoardColl.get().getFactionAt(ps) == this) return true;
|
if (BoardColls.get().getFactionAt(ps) == this) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -451,7 +451,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
{
|
{
|
||||||
ret.put(rel, new ArrayList<String>());
|
ret.put(rel, new ArrayList<String>());
|
||||||
}
|
}
|
||||||
for (Faction faction : FactionColl.get().getAll())
|
for (Faction faction : FactionColls.get().get(this).getAll())
|
||||||
{
|
{
|
||||||
Rel relation = faction.getRelationTo(this);
|
Rel relation = faction.getRelationTo(this);
|
||||||
if (onlyNonNeutral && relation == Rel.NEUTRAL) continue;
|
if (onlyNonNeutral && relation == Rel.NEUTRAL) continue;
|
||||||
@ -715,11 +715,11 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
|
|
||||||
public int getLandCount()
|
public int getLandCount()
|
||||||
{
|
{
|
||||||
return BoardColl.get().getCount(this);
|
return BoardColls.get().getCount(this);
|
||||||
}
|
}
|
||||||
public int getLandCountInWorld(String worldName)
|
public int getLandCountInWorld(String worldName)
|
||||||
{
|
{
|
||||||
return BoardColl.get().get(worldName).getCount(this);
|
return BoardColls.get().get(worldName).getCount(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasLandInflation()
|
public boolean hasLandInflation()
|
||||||
@ -743,7 +743,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
String factionId = this.getId();
|
String factionId = this.getId();
|
||||||
if (factionId == null) return;
|
if (factionId == null) return;
|
||||||
|
|
||||||
for (FPlayer fplayer : FPlayerColl.get().getAll())
|
for (FPlayer fplayer : FPlayerColls.get().get(this).getAll())
|
||||||
{
|
{
|
||||||
if (!MUtil.equals(factionId, fplayer.getFactionId())) continue;
|
if (!MUtil.equals(factionId, fplayer.getFactionId())) continue;
|
||||||
this.fplayers.add(fplayer);
|
this.fplayers.add(fplayer);
|
||||||
@ -805,7 +805,8 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
List<CommandSender> ret = new ArrayList<CommandSender>();
|
List<CommandSender> ret = new ArrayList<CommandSender>();
|
||||||
for (CommandSender player : SenderUtil.getOnlineSenders())
|
for (CommandSender player : SenderUtil.getOnlineSenders())
|
||||||
{
|
{
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
if (!MUtil.equals(fplayer.getUniverse(), this.getUniverse())) continue;
|
||||||
if (fplayer.getFaction() != this) continue;
|
if (fplayer.getFaction() != this) continue;
|
||||||
ret.add(player);
|
ret.add(player);
|
||||||
}
|
}
|
||||||
@ -817,7 +818,8 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
List<Player> ret = new ArrayList<Player>();
|
List<Player> ret = new ArrayList<Player>();
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
if (!MUtil.equals(fplayer.getUniverse(), this.getUniverse())) continue;
|
||||||
if (fplayer.getFaction() != this) continue;
|
if (fplayer.getFaction() != this) continue;
|
||||||
ret.add(player);
|
ret.add(player);
|
||||||
}
|
}
|
||||||
@ -856,7 +858,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
|||||||
Factions.get().log("The faction "+this.getTag()+" ("+this.getId()+") has been disbanded since it has no members left.");
|
Factions.get().log("The faction "+this.getTag()+" ("+this.getId()+") has been disbanded since it has no members left.");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (FPlayer fplayer : FPlayerColl.get().getAllOnline())
|
for (FPlayer fplayer : FPlayerColls.get().get(this).getAllOnline())
|
||||||
{
|
{
|
||||||
fplayer.msg("The faction %s<i> was disbanded.", this.getTag(fplayer));
|
fplayer.msg("The faction %s<i> was disbanded.", this.getTag(fplayer));
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
package com.massivecraft.factions.entity;
|
package com.massivecraft.factions.entity;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
import com.massivecraft.mcore.money.Money;
|
import com.massivecraft.mcore.money.Money;
|
||||||
import com.massivecraft.mcore.store.Coll;
|
import com.massivecraft.mcore.store.Coll;
|
||||||
import com.massivecraft.mcore.store.MStore;
|
import com.massivecraft.mcore.store.MStore;
|
||||||
import com.massivecraft.mcore.util.DiscUtil;
|
|
||||||
import com.massivecraft.mcore.util.Txt;
|
import com.massivecraft.mcore.util.Txt;
|
||||||
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
|
|
||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.Const;
|
import com.massivecraft.factions.Const;
|
||||||
@ -26,14 +21,12 @@ import com.massivecraft.factions.util.MiscUtil;
|
|||||||
public class FactionColl extends Coll<Faction>
|
public class FactionColl extends Coll<Faction>
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// INSTANCE & CONSTRUCT
|
// CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static FactionColl i = new FactionColl();
|
public FactionColl(String name)
|
||||||
public static FactionColl get() { return i; }
|
|
||||||
private FactionColl()
|
|
||||||
{
|
{
|
||||||
super(Const.COLLECTION_BASENAME_FACTION, Faction.class, MStore.getDb(ConfServer.dburi), Factions.get());
|
super(name, Faction.class, MStore.getDb(ConfServer.dburi), Factions.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -45,37 +38,10 @@ public class FactionColl extends Coll<Faction>
|
|||||||
{
|
{
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
this.migrate();
|
|
||||||
this.createDefaultFactions();
|
this.createDefaultFactions();
|
||||||
this.reindexFPlayers();
|
this.reindexFPlayers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void migrate()
|
|
||||||
{
|
|
||||||
// Create file objects
|
|
||||||
File oldFile = new File(Factions.get().getDataFolder(), "factions.json");
|
|
||||||
File newFile = new File(Factions.get().getDataFolder(), "factions.json.migrated");
|
|
||||||
|
|
||||||
// Already migrated?
|
|
||||||
if ( ! oldFile.exists()) return;
|
|
||||||
|
|
||||||
// Read the file content through GSON.
|
|
||||||
Type type = new TypeToken<Map<String, Faction>>(){}.getType();
|
|
||||||
Map<String, Faction> id2faction = Factions.get().gson.fromJson(DiscUtil.readCatch(oldFile), type);
|
|
||||||
|
|
||||||
// Set the data
|
|
||||||
for (Entry<String, Faction> entry : id2faction.entrySet())
|
|
||||||
{
|
|
||||||
String factionId = entry.getKey();
|
|
||||||
Faction faction = entry.getValue();
|
|
||||||
|
|
||||||
FactionColl.get().create(factionId).load(faction);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mark as migrated
|
|
||||||
oldFile.renameTo(newFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected synchronized String attach(Faction faction, Object oid, boolean noteChange)
|
protected synchronized String attach(Faction faction, Object oid, boolean noteChange)
|
||||||
{
|
{
|
||||||
@ -97,19 +63,16 @@ public class FactionColl extends Coll<Faction>
|
|||||||
public Faction detachId(Object oid)
|
public Faction detachId(Object oid)
|
||||||
{
|
{
|
||||||
Faction faction = this.get(oid);
|
Faction faction = this.get(oid);
|
||||||
if (faction != null)
|
Money.set(faction, 0);
|
||||||
{
|
String universe = faction.getUniverse();
|
||||||
Money.set(faction, faction, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
Faction ret = super.detachId(oid);
|
Faction ret = super.detachId(oid);
|
||||||
|
|
||||||
// Clean the board
|
// Clean the board
|
||||||
// TODO: Use events for this instead?
|
BoardColls.get().getForUniverse(universe).clean();
|
||||||
BoardColl.get().clean();
|
|
||||||
|
|
||||||
// Clean the fplayers
|
// Clean the fplayers
|
||||||
FPlayerColl.get().clean();
|
FPlayerColls.get().getForUniverse(universe).clean();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
104
src/com/massivecraft/factions/entity/FactionColls.java
Normal file
104
src/com/massivecraft/factions/entity/FactionColls.java
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
package com.massivecraft.factions.entity;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Const;
|
||||||
|
import com.massivecraft.factions.Factions;
|
||||||
|
import com.massivecraft.mcore.MCore;
|
||||||
|
import com.massivecraft.mcore.store.Coll;
|
||||||
|
import com.massivecraft.mcore.store.Colls;
|
||||||
|
import com.massivecraft.mcore.store.Entity;
|
||||||
|
import com.massivecraft.mcore.usys.Aspect;
|
||||||
|
import com.massivecraft.mcore.util.DiscUtil;
|
||||||
|
import com.massivecraft.mcore.util.MUtil;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
public class FactionColls extends Colls<FactionColl, Faction>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static FactionColls i = new FactionColls();
|
||||||
|
public static FactionColls get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: COLLS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FactionColl createColl(String collName)
|
||||||
|
{
|
||||||
|
return new FactionColl(collName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Aspect getAspect()
|
||||||
|
{
|
||||||
|
return Factions.get().getAspect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBasename()
|
||||||
|
{
|
||||||
|
return Const.COLLECTION_BASENAME_FACTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FactionColl get(Object o)
|
||||||
|
{
|
||||||
|
if (o == null) return null;
|
||||||
|
|
||||||
|
if (o instanceof Entity)
|
||||||
|
{
|
||||||
|
return this.getForUniverse(((Entity<?>)o).getUniverse());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof Coll)
|
||||||
|
{
|
||||||
|
return this.getForUniverse(((Coll<?>)o).getUniverse());
|
||||||
|
}
|
||||||
|
|
||||||
|
String worldName = MUtil.extract(String.class, "worldName", o);
|
||||||
|
if (worldName == null) return null;
|
||||||
|
return this.getForWorld(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init()
|
||||||
|
{
|
||||||
|
super.init();
|
||||||
|
|
||||||
|
this.migrate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void migrate()
|
||||||
|
{
|
||||||
|
// Create file objects
|
||||||
|
File oldFile = new File(Factions.get().getDataFolder(), "factions.json");
|
||||||
|
File newFile = new File(Factions.get().getDataFolder(), "factions.json.migrated");
|
||||||
|
|
||||||
|
// Already migrated?
|
||||||
|
if ( ! oldFile.exists()) return;
|
||||||
|
|
||||||
|
// Read the file content through GSON.
|
||||||
|
Type type = new TypeToken<Map<String, Faction>>(){}.getType();
|
||||||
|
Map<String, Faction> id2faction = Factions.get().gson.fromJson(DiscUtil.readCatch(oldFile), type);
|
||||||
|
|
||||||
|
// Set the data
|
||||||
|
for (Entry<String, Faction> entry : id2faction.entrySet())
|
||||||
|
{
|
||||||
|
String factionId = entry.getKey();
|
||||||
|
Faction faction = entry.getValue();
|
||||||
|
|
||||||
|
this.getForUniverse(MCore.DEFAULT).create(factionId).load(faction);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark as migrated
|
||||||
|
oldFile.renameTo(newFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package com.massivecraft.factions.integration;
|
package com.massivecraft.factions.integration;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -14,7 +13,6 @@ import org.bukkit.plugin.Plugin;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.factions.util.HealthBarUtil;
|
import com.massivecraft.factions.util.HealthBarUtil;
|
||||||
import com.massivecraft.mcore.ps.PS;
|
import com.massivecraft.mcore.ps.PS;
|
||||||
@ -252,17 +250,16 @@ public class SpoutFeatures
|
|||||||
{
|
{
|
||||||
if ( ! isEnabled()) return;
|
if ( ! isEnabled()) return;
|
||||||
|
|
||||||
Collection<FPlayer> players = FPlayerColl.get().getAllOnline();
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
|
|
||||||
for (FPlayer player : players)
|
|
||||||
{
|
{
|
||||||
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
if (chunk == null)
|
if (chunk == null)
|
||||||
{
|
{
|
||||||
mainListener.updateTerritoryDisplay(player, false);
|
mainListener.updateTerritoryDisplay(fplayer, false);
|
||||||
}
|
}
|
||||||
else if (player.getCurrentChunk().equals(chunk))
|
else if (fplayer.getCurrentChunk().equals(chunk))
|
||||||
{
|
{
|
||||||
mainListener.updateTerritoryDisplay(player, true);
|
mainListener.updateTerritoryDisplay(fplayer, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,12 +278,13 @@ public class SpoutFeatures
|
|||||||
|
|
||||||
chunk = chunk.getChunk(true);
|
chunk = chunk.getChunk(true);
|
||||||
|
|
||||||
Collection<FPlayer> players = FPlayerColl.get().getAllOnline();
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
|
|
||||||
for (FPlayer player : players)
|
|
||||||
{
|
{
|
||||||
if (chunk == null || player.getCurrentChunk().equals(chunk))
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
mainListener.updateAccessInfo(player);
|
if (chunk == null || fplayer.getCurrentChunk().equals(chunk))
|
||||||
|
{
|
||||||
|
mainListener.updateAccessInfo(fplayer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,9 +11,8 @@ import org.bukkit.event.Listener;
|
|||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.factions.Factions;
|
||||||
import com.massivecraft.factions.TerritoryAccess;
|
import com.massivecraft.factions.TerritoryAccess;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.mcore.ps.PS;
|
import com.massivecraft.mcore.ps.PS;
|
||||||
|
|
||||||
@ -29,7 +28,7 @@ public class SpoutMainListener implements Listener
|
|||||||
@EventHandler(priority = EventPriority.NORMAL)
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
public void onSpoutCraftEnable(SpoutCraftEnableEvent event)
|
public void onSpoutCraftEnable(SpoutCraftEnableEvent event)
|
||||||
{
|
{
|
||||||
final FPlayer me = FPlayerColl.get().get(event.getPlayer());
|
final FPlayer me = FPlayer.get(event.getPlayer());
|
||||||
|
|
||||||
SpoutFeatures.updateTitle(me, null);
|
SpoutFeatures.updateTitle(me, null);
|
||||||
SpoutFeatures.updateTitle(null, me);
|
SpoutFeatures.updateTitle(null, me);
|
||||||
@ -90,7 +89,7 @@ public class SpoutMainListener implements Listener
|
|||||||
private void doLabels(FPlayer player, SpoutPlayer sPlayer, boolean notify)
|
private void doLabels(FPlayer player, SpoutPlayer sPlayer, boolean notify)
|
||||||
{
|
{
|
||||||
PS here = player.getCurrentChunk();
|
PS here = player.getCurrentChunk();
|
||||||
Faction factionHere = BoardColl.get().getFactionAt(here);
|
Faction factionHere = BoardColls.get().getFactionAt(here);
|
||||||
String tag = factionHere.getColorTo(player).toString() + factionHere.getTag();
|
String tag = factionHere.getColorTo(player).toString() + factionHere.getTag();
|
||||||
|
|
||||||
// ----------------------
|
// ----------------------
|
||||||
@ -181,7 +180,7 @@ public class SpoutMainListener implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
String msg = "";
|
String msg = "";
|
||||||
TerritoryAccess access = BoardColl.get().getTerritoryAccessAt(here);
|
TerritoryAccess access = BoardColls.get().getTerritoryAccessAt(here);
|
||||||
|
|
||||||
if ( ! access.isDefault())
|
if ( ! access.isDefault())
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,7 @@ import com.massivecraft.factions.entity.MConf;
|
|||||||
|
|
||||||
public class FactionChannel extends FactionsChannelAbstract
|
public class FactionChannel extends FactionsChannelAbstract
|
||||||
{
|
{
|
||||||
public static final Set<Rel> targetRelations = EnumSet.of(Rel.MEMBER);
|
public static final Set<Rel> targetRelations = EnumSet.of(Rel.MEMBER, Rel.RECRUIT);
|
||||||
@Override public Set<Rel> getTargetRelations() { return targetRelations; }
|
@Override public Set<Rel> getTargetRelations() { return targetRelations; }
|
||||||
|
|
||||||
@Override public String getName() { return MConf.get().herochatFactionName; }
|
@Override public String getName() { return MConf.get().herochatFactionName; }
|
||||||
|
@ -24,7 +24,6 @@ import com.dthielke.herochat.MessageNotFoundException;
|
|||||||
import com.dthielke.herochat.util.Messaging;
|
import com.dthielke.herochat.util.Messaging;
|
||||||
import com.massivecraft.factions.Rel;
|
import com.massivecraft.factions.Rel;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
|
|
||||||
public abstract class FactionsChannelAbstract implements Channel
|
public abstract class FactionsChannelAbstract implements Channel
|
||||||
@ -206,30 +205,27 @@ public abstract class FactionsChannelAbstract implements Channel
|
|||||||
return this.getMutes().contains(name.toLowerCase());
|
return this.getMutes().contains(name.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public abstract Set<Rel> getTargetRelations();
|
public abstract Set<Rel> getTargetRelations();
|
||||||
|
|
||||||
// TODO: When I add in universes I will need to separate the channel per universe.
|
|
||||||
public Set<Player> getRecipients(Player sender)
|
public Set<Player> getRecipients(Player sender)
|
||||||
{
|
{
|
||||||
Set<Player> ret = new HashSet<Player>();
|
Set<Player> ret = new HashSet<Player>();
|
||||||
|
|
||||||
FPlayer fpsender = FPlayerColl.get().get(sender);
|
FPlayer fpsender = FPlayer.get(sender);
|
||||||
Faction faction = fpsender.getFaction();
|
Faction faction = fpsender.getFaction();
|
||||||
ret.addAll(faction.getOnlinePlayers());
|
String universe = fpsender.getUniverse();
|
||||||
|
|
||||||
for (FPlayer fplayer : FPlayerColl.get().getAllOnline())
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if(this.getTargetRelations().contains(faction.getRelationTo(fplayer)))
|
FPlayer frecipient = FPlayer.get(player);
|
||||||
{
|
if (!frecipient.getUniverse().equals(universe)) continue;
|
||||||
ret.add(fplayer.getPlayer());
|
if (!this.getTargetRelations().contains(faction.getRelationTo(frecipient))) continue;
|
||||||
}
|
ret.add(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processChat(ChannelChatEvent event)
|
public void processChat(ChannelChatEvent event)
|
||||||
{
|
{
|
||||||
|
@ -50,9 +50,8 @@ import com.massivecraft.factions.FFlag;
|
|||||||
import com.massivecraft.factions.FPerm;
|
import com.massivecraft.factions.FPerm;
|
||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.factions.Factions;
|
||||||
import com.massivecraft.factions.Rel;
|
import com.massivecraft.factions.Rel;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.factions.entity.MConf;
|
import com.massivecraft.factions.entity.MConf;
|
||||||
import com.massivecraft.factions.event.FactionsEventPowerChange;
|
import com.massivecraft.factions.event.FactionsEventPowerChange;
|
||||||
@ -90,10 +89,10 @@ public class FactionsListenerMain implements Listener
|
|||||||
{
|
{
|
||||||
// If a player dies ...
|
// If a player dies ...
|
||||||
Player player = event.getEntity();
|
Player player = event.getEntity();
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
|
||||||
// ... and powerloss can happen here ...
|
// ... and powerloss can happen here ...
|
||||||
Faction faction = BoardColl.get().getFactionAt(PS.valueOf(player));
|
Faction faction = BoardColls.get().getFactionAt(PS.valueOf(player));
|
||||||
|
|
||||||
if (!faction.getFlag(FFlag.POWERLOSS))
|
if (!faction.getFlag(FFlag.POWERLOSS))
|
||||||
{
|
{
|
||||||
@ -170,7 +169,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
Entity edefender = event.getEntity();
|
Entity edefender = event.getEntity();
|
||||||
if (!(edefender instanceof Player)) return true;
|
if (!(edefender instanceof Player)) return true;
|
||||||
Player defender = (Player)edefender;
|
Player defender = (Player)edefender;
|
||||||
FPlayer fdefender = FPlayerColl.get().get(edefender);
|
FPlayer fdefender = FPlayer.get(edefender);
|
||||||
|
|
||||||
// ... and the attacker is someone else ...
|
// ... and the attacker is someone else ...
|
||||||
Entity eattacker = event.getDamager();
|
Entity eattacker = event.getDamager();
|
||||||
@ -182,7 +181,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
|
|
||||||
// ... gather defender PS and faction information ...
|
// ... gather defender PS and faction information ...
|
||||||
PS defenderPs = PS.valueOf(defender);
|
PS defenderPs = PS.valueOf(defender);
|
||||||
Faction defenderPsFaction = BoardColl.get().getFactionAt(defenderPs);
|
Faction defenderPsFaction = BoardColls.get().getFactionAt(defenderPs);
|
||||||
|
|
||||||
// ... PVP flag may cause a damage block ...
|
// ... PVP flag may cause a damage block ...
|
||||||
if (defenderPsFaction.getFlag(FFlag.PVP) == false)
|
if (defenderPsFaction.getFlag(FFlag.PVP) == false)
|
||||||
@ -191,7 +190,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
{
|
{
|
||||||
if (notify)
|
if (notify)
|
||||||
{
|
{
|
||||||
FPlayer attacker = FPlayerColl.get().get((Player)eattacker);
|
FPlayer attacker = FPlayer.get(eattacker);
|
||||||
attacker.msg("<i>PVP is disabled in %s.", defenderPsFaction.describeTo(attacker));
|
attacker.msg("<i>PVP is disabled in %s.", defenderPsFaction.describeTo(attacker));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -202,14 +201,14 @@ public class FactionsListenerMain implements Listener
|
|||||||
// ... and if the attacker is a player ...
|
// ... and if the attacker is a player ...
|
||||||
if (!(eattacker instanceof Player)) return true;
|
if (!(eattacker instanceof Player)) return true;
|
||||||
Player attacker = (Player)eattacker;
|
Player attacker = (Player)eattacker;
|
||||||
FPlayer fattacker = FPlayerColl.get().get(attacker);
|
FPlayer fattacker = FPlayer.get(attacker);
|
||||||
|
|
||||||
// ... does this player bypass all protection? ...
|
// ... does this player bypass all protection? ...
|
||||||
if (MConf.get().playersWhoBypassAllProtection.contains(attacker.getName())) return true;
|
if (MConf.get().playersWhoBypassAllProtection.contains(attacker.getName())) return true;
|
||||||
|
|
||||||
// ... gather attacker PS and faction information ...
|
// ... gather attacker PS and faction information ...
|
||||||
PS attackerPs = PS.valueOf(attacker);
|
PS attackerPs = PS.valueOf(attacker);
|
||||||
Faction attackerPsFaction = BoardColl.get().getFactionAt(attackerPs);
|
Faction attackerPsFaction = BoardColls.get().getFactionAt(attackerPs);
|
||||||
|
|
||||||
// ... PVP flag may cause a damage block ...
|
// ... PVP flag may cause a damage block ...
|
||||||
// (just checking the defender as above isn't enough. What about the attacker? It could be in a no-pvp area)
|
// (just checking the defender as above isn't enough. What about the attacker? It could be in a no-pvp area)
|
||||||
@ -293,7 +292,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
{
|
{
|
||||||
// If a player was kicked from the server ...
|
// If a player was kicked from the server ...
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
|
||||||
// ... and if the if player was banned (not just kicked) ...
|
// ... and if the if player was banned (not just kicked) ...
|
||||||
if (!event.getReason().equals("Banned by admin.")) return;
|
if (!event.getReason().equals("Banned by admin.")) return;
|
||||||
@ -332,7 +331,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
{
|
{
|
||||||
// If a player is trying to run a command ...
|
// If a player is trying to run a command ...
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
|
||||||
// ... and the player does not have adminmode ...
|
// ... and the player does not have adminmode ...
|
||||||
if (fplayer.isUsingAdminMode()) return;
|
if (fplayer.isUsingAdminMode()) return;
|
||||||
@ -351,7 +350,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
Rel rel = fplayer.getRelationToLocation();
|
Rel rel = fplayer.getRelationToLocation();
|
||||||
if (BoardColl.get().getFactionAt(fplayer.getCurrentChunk()).isNone()) return;
|
if (BoardColls.get().getFactionAt(fplayer.getCurrentChunk()).isNone()) return;
|
||||||
|
|
||||||
if (rel == Rel.NEUTRAL && containsCommand(command, ConfServer.territoryNeutralDenyCommands))
|
if (rel == Rel.NEUTRAL && containsCommand(command, ConfServer.territoryNeutralDenyCommands))
|
||||||
{
|
{
|
||||||
@ -398,7 +397,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
|
|
||||||
// ... at a place where monsters are forbidden ...
|
// ... at a place where monsters are forbidden ...
|
||||||
PS ps = PS.valueOf(event.getLocation());
|
PS ps = PS.valueOf(event.getLocation());
|
||||||
Faction faction = BoardColl.get().getFactionAt(ps);
|
Faction faction = BoardColls.get().getFactionAt(ps);
|
||||||
if (faction.getFlag(FFlag.MONSTERS)) return;
|
if (faction.getFlag(FFlag.MONSTERS)) return;
|
||||||
|
|
||||||
// ... block the spawn.
|
// ... block the spawn.
|
||||||
@ -413,7 +412,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
|
|
||||||
// ... at a place where monsters are forbidden ...
|
// ... at a place where monsters are forbidden ...
|
||||||
PS ps = PS.valueOf(event.getTarget());
|
PS ps = PS.valueOf(event.getTarget());
|
||||||
Faction faction = BoardColl.get().getFactionAt(ps);
|
Faction faction = BoardColls.get().getFactionAt(ps);
|
||||||
if (faction.getFlag(FFlag.MONSTERS)) return;
|
if (faction.getFlag(FFlag.MONSTERS)) return;
|
||||||
|
|
||||||
// ... then if ghast target nothing ...
|
// ... then if ghast target nothing ...
|
||||||
@ -438,7 +437,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
if (event.getCause() != RemoveCause.EXPLOSION) return;
|
if (event.getCause() != RemoveCause.EXPLOSION) return;
|
||||||
|
|
||||||
// ... and the faction there has explosions disabled ...
|
// ... and the faction there has explosions disabled ...
|
||||||
Faction faction = BoardColl.get().getFactionAt(PS.valueOf(event.getEntity()));
|
Faction faction = BoardColls.get().getFactionAt(PS.valueOf(event.getEntity()));
|
||||||
if (faction.getFlag(FFlag.EXPLOSIONS)) return;
|
if (faction.getFlag(FFlag.EXPLOSIONS)) return;
|
||||||
|
|
||||||
// ... then cancel.
|
// ... then cancel.
|
||||||
@ -453,12 +452,12 @@ public class FactionsListenerMain implements Listener
|
|||||||
while (iter.hasNext())
|
while (iter.hasNext())
|
||||||
{
|
{
|
||||||
Block block = iter.next();
|
Block block = iter.next();
|
||||||
Faction faction = BoardColl.get().getFactionAt(PS.valueOf(block));
|
Faction faction = BoardColls.get().getFactionAt(PS.valueOf(block));
|
||||||
if (faction.getFlag(FFlag.EXPLOSIONS) == false) iter.remove();
|
if (faction.getFlag(FFlag.EXPLOSIONS) == false) iter.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the entity. Are explosions disabled there?
|
// Check the entity. Are explosions disabled there?
|
||||||
if (BoardColl.get().getFactionAt(PS.valueOf(event.getEntity())).getFlag(FFlag.EXPLOSIONS) == false)
|
if (BoardColls.get().getFactionAt(PS.valueOf(event.getEntity())).getFlag(FFlag.EXPLOSIONS) == false)
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -473,7 +472,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
|
|
||||||
// ... and the faction there has explosions disabled ...
|
// ... and the faction there has explosions disabled ...
|
||||||
PS ps = PS.valueOf(event.getBlock());
|
PS ps = PS.valueOf(event.getBlock());
|
||||||
Faction faction = BoardColl.get().getFactionAt(ps);
|
Faction faction = BoardColls.get().getFactionAt(ps);
|
||||||
if (faction.getFlag(FFlag.EXPLOSIONS)) return;
|
if (faction.getFlag(FFlag.EXPLOSIONS)) return;
|
||||||
|
|
||||||
// ... stop the block alteration.
|
// ... stop the block alteration.
|
||||||
@ -493,7 +492,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
|
|
||||||
// ... and the faction there has endergrief disabled ...
|
// ... and the faction there has endergrief disabled ...
|
||||||
PS ps = PS.valueOf(event.getBlock());
|
PS ps = PS.valueOf(event.getBlock());
|
||||||
Faction faction = BoardColl.get().getFactionAt(ps);
|
Faction faction = BoardColls.get().getFactionAt(ps);
|
||||||
if (faction.getFlag(FFlag.ENDERGRIEF)) return;
|
if (faction.getFlag(FFlag.ENDERGRIEF)) return;
|
||||||
|
|
||||||
// ... stop the block alteration.
|
// ... stop the block alteration.
|
||||||
@ -512,7 +511,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
FPlayer me = FPlayer.get(name);
|
FPlayer me = FPlayer.get(name);
|
||||||
if (me.isUsingAdminMode()) return true;
|
if (me.isUsingAdminMode()) return true;
|
||||||
|
|
||||||
Faction factionHere = BoardColl.get().getFactionAt(ps);
|
Faction factionHere = BoardColls.get().getFactionAt(ps);
|
||||||
|
|
||||||
if ( ! FPerm.BUILD.has(me, ps) && FPerm.PAINBUILD.has(me, ps))
|
if ( ! FPerm.BUILD.has(me, ps) && FPerm.PAINBUILD.has(me, ps))
|
||||||
{
|
{
|
||||||
@ -585,13 +584,13 @@ public class FactionsListenerMain implements Listener
|
|||||||
{
|
{
|
||||||
if ( ! ConfServer.pistonProtectionThroughDenyBuild) return;
|
if ( ! ConfServer.pistonProtectionThroughDenyBuild) return;
|
||||||
|
|
||||||
Faction pistonFaction = BoardColl.get().getFactionAt(PS.valueOf(event.getBlock()));
|
Faction pistonFaction = BoardColls.get().getFactionAt(PS.valueOf(event.getBlock()));
|
||||||
|
|
||||||
// target end-of-the-line empty (air) block which is being pushed into, including if piston itself would extend into air
|
// target end-of-the-line empty (air) block which is being pushed into, including if piston itself would extend into air
|
||||||
Block targetBlock = event.getBlock().getRelative(event.getDirection(), event.getLength() + 1);
|
Block targetBlock = event.getBlock().getRelative(event.getDirection(), event.getLength() + 1);
|
||||||
|
|
||||||
// members of faction might not have build rights in their own territory, but pistons should still work regardless; so, address that corner case
|
// members of faction might not have build rights in their own territory, but pistons should still work regardless; so, address that corner case
|
||||||
Faction targetFaction = BoardColl.get().getFactionAt(PS.valueOf(targetBlock));
|
Faction targetFaction = BoardColls.get().getFactionAt(PS.valueOf(targetBlock));
|
||||||
if (targetFaction == pistonFaction) return;
|
if (targetFaction == pistonFaction) return;
|
||||||
|
|
||||||
// if potentially pushing into air/water/lava in another territory, we need to check it out
|
// if potentially pushing into air/water/lava in another territory, we need to check it out
|
||||||
@ -620,10 +619,10 @@ public class FactionsListenerMain implements Listener
|
|||||||
// if potentially retracted block is just air/water/lava, no worries
|
// if potentially retracted block is just air/water/lava, no worries
|
||||||
if (targetLoc.getBlock().isEmpty() || targetLoc.getBlock().isLiquid()) return;
|
if (targetLoc.getBlock().isEmpty() || targetLoc.getBlock().isLiquid()) return;
|
||||||
|
|
||||||
Faction pistonFaction = BoardColl.get().getFactionAt(PS.valueOf(event.getBlock()));
|
Faction pistonFaction = BoardColls.get().getFactionAt(PS.valueOf(event.getBlock()));
|
||||||
|
|
||||||
// members of faction might not have build rights in their own territory, but pistons should still work regardless; so, address that corner case
|
// members of faction might not have build rights in their own territory, but pistons should still work regardless; so, address that corner case
|
||||||
Faction targetFaction = BoardColl.get().getFactionAt(PS.valueOf(targetLoc));
|
Faction targetFaction = BoardColls.get().getFactionAt(PS.valueOf(targetLoc));
|
||||||
if (targetFaction == pistonFaction) return;
|
if (targetFaction == pistonFaction) return;
|
||||||
|
|
||||||
if ( ! FPerm.BUILD.has(pistonFaction, targetLoc))
|
if ( ! FPerm.BUILD.has(pistonFaction, targetLoc))
|
||||||
@ -640,7 +639,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
{
|
{
|
||||||
// If the faction at the block has firespread disabled ...
|
// If the faction at the block has firespread disabled ...
|
||||||
PS ps = PS.valueOf(block);
|
PS ps = PS.valueOf(block);
|
||||||
Faction faction = BoardColl.get().getFactionAt(ps);
|
Faction faction = BoardColls.get().getFactionAt(ps);
|
||||||
if (faction.getFlag(FFlag.FIRESPREAD)) return;
|
if (faction.getFlag(FFlag.FIRESPREAD)) return;
|
||||||
|
|
||||||
// then cancel the event.
|
// then cancel the event.
|
||||||
|
@ -17,9 +17,8 @@ import org.bukkit.event.player.PlayerMoveEvent;
|
|||||||
import com.massivecraft.factions.Const;
|
import com.massivecraft.factions.Const;
|
||||||
import com.massivecraft.factions.FPerm;
|
import com.massivecraft.factions.FPerm;
|
||||||
import com.massivecraft.factions.TerritoryAccess;
|
import com.massivecraft.factions.TerritoryAccess;
|
||||||
import com.massivecraft.factions.entity.BoardColl;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
|
||||||
import com.massivecraft.factions.entity.MConf;
|
import com.massivecraft.factions.entity.MConf;
|
||||||
import com.massivecraft.factions.integration.SpoutFeatures;
|
import com.massivecraft.factions.integration.SpoutFeatures;
|
||||||
import com.massivecraft.mcore.event.MCorePlayerLeaveEvent;
|
import com.massivecraft.mcore.event.MCorePlayerLeaveEvent;
|
||||||
@ -34,7 +33,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
{
|
{
|
||||||
// If a player is joining the server ...
|
// If a player is joining the server ...
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
|
||||||
// ... recalculate their power as if they were offline since last recalculation ...
|
// ... recalculate their power as if they were offline since last recalculation ...
|
||||||
fplayer.recalculatePower(false);
|
fplayer.recalculatePower(false);
|
||||||
@ -53,7 +52,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
public void onPlayerLeave(MCorePlayerLeaveEvent event)
|
public void onPlayerLeave(MCorePlayerLeaveEvent event)
|
||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
|
||||||
// Recalculate the power before the player leaves.
|
// Recalculate the power before the player leaves.
|
||||||
// This is required since we recalculate as if the player were offline when they log back in.
|
// This is required since we recalculate as if the player were offline when they log back in.
|
||||||
@ -71,7 +70,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
|
|
||||||
// ... update the stored current chunk ...
|
// ... update the stored current chunk ...
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
|
|
||||||
PS chunkFrom = fplayer.getCurrentChunk();
|
PS chunkFrom = fplayer.getCurrentChunk();
|
||||||
PS chunkTo = PS.valueOf(event.getTo()).getChunk(true);
|
PS chunkTo = PS.valueOf(event.getTo()).getChunk(true);
|
||||||
@ -80,17 +79,17 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
|
|
||||||
// ... TODO: assorted and uncleaned code below ...
|
// ... TODO: assorted and uncleaned code below ...
|
||||||
|
|
||||||
TerritoryAccess access = BoardColl.get().getTerritoryAccessAt(chunkTo);
|
TerritoryAccess access = BoardColls.get().getTerritoryAccessAt(chunkTo);
|
||||||
|
|
||||||
// Did we change "host"(faction)?
|
// Did we change "host"(faction)?
|
||||||
boolean changedFaction = (BoardColl.get().getFactionAt(chunkFrom) != access.getHostFaction());
|
boolean changedFaction = (BoardColls.get().getFactionAt(chunkFrom) != access.getHostFaction());
|
||||||
|
|
||||||
// let Spout handle most of this if it's available
|
// let Spout handle most of this if it's available
|
||||||
boolean handledBySpout = changedFaction && SpoutFeatures.updateTerritoryDisplay(fplayer);
|
boolean handledBySpout = changedFaction && SpoutFeatures.updateTerritoryDisplay(fplayer);
|
||||||
|
|
||||||
if (fplayer.isMapAutoUpdating())
|
if (fplayer.isMapAutoUpdating())
|
||||||
{
|
{
|
||||||
fplayer.sendMessage(BoardColl.get().getMap(fplayer.getFaction(), chunkTo, player.getLocation().getYaw()));
|
fplayer.sendMessage(BoardColls.get().getMap(fplayer.getFaction(), chunkTo, player.getLocation().getYaw()));
|
||||||
}
|
}
|
||||||
else if (changedFaction && ! handledBySpout)
|
else if (changedFaction && ! handledBySpout)
|
||||||
{
|
{
|
||||||
@ -146,7 +145,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
String name = player.getName();
|
String name = player.getName();
|
||||||
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
||||||
|
|
||||||
FPlayer me = FPlayerColl.get().get(name);
|
FPlayer me = FPlayer.get(name);
|
||||||
if (me.isUsingAdminMode()) return true;
|
if (me.isUsingAdminMode()) return true;
|
||||||
if (Const.MATERIALS_EDIT_TOOLS.contains(material) && ! FPerm.BUILD.has(me, loc, ! justCheck)) return false;
|
if (Const.MATERIALS_EDIT_TOOLS.contains(material) && ! FPerm.BUILD.has(me, loc, ! justCheck)) return false;
|
||||||
return true;
|
return true;
|
||||||
@ -156,7 +155,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
String name = player.getName();
|
String name = player.getName();
|
||||||
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
||||||
|
|
||||||
FPlayer me = FPlayerColl.get().get(name);
|
FPlayer me = FPlayer.get(name);
|
||||||
if (me.isUsingAdminMode()) return true;
|
if (me.isUsingAdminMode()) return true;
|
||||||
Location loc = block.getLocation();
|
Location loc = block.getLocation();
|
||||||
Material material = block.getType();
|
Material material = block.getType();
|
||||||
|
@ -2,6 +2,7 @@ package com.massivecraft.factions.task;
|
|||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
import com.massivecraft.factions.entity.FPlayerColl;
|
||||||
|
import com.massivecraft.factions.entity.FPlayerColls;
|
||||||
import com.massivecraft.mcore.ModuloRepeatTask;
|
import com.massivecraft.mcore.ModuloRepeatTask;
|
||||||
import com.massivecraft.mcore.util.TimeUnit;
|
import com.massivecraft.mcore.util.TimeUnit;
|
||||||
|
|
||||||
@ -33,7 +34,10 @@ public class AutoLeaveTask extends ModuloRepeatTask
|
|||||||
@Override
|
@Override
|
||||||
public void invoke()
|
public void invoke()
|
||||||
{
|
{
|
||||||
FPlayerColl.get().autoLeaveOnInactivityRoutine();
|
for (FPlayerColl coll : FPlayerColls.get().getColls())
|
||||||
|
{
|
||||||
|
coll.autoLeaveOnInactivityRoutine();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.massivecraft.factions.task;
|
|||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.entity.FactionColl;
|
import com.massivecraft.factions.entity.FactionColl;
|
||||||
|
import com.massivecraft.factions.entity.FactionColls;
|
||||||
import com.massivecraft.mcore.ModuloRepeatTask;
|
import com.massivecraft.mcore.ModuloRepeatTask;
|
||||||
import com.massivecraft.mcore.util.TimeUnit;
|
import com.massivecraft.mcore.util.TimeUnit;
|
||||||
|
|
||||||
@ -33,7 +34,10 @@ public class EconLandRewardTask extends ModuloRepeatTask
|
|||||||
@Override
|
@Override
|
||||||
public void invoke()
|
public void invoke()
|
||||||
{
|
{
|
||||||
FactionColl.get().econLandRewardRoutine();
|
for (FactionColl coll : FactionColls.get().getColls())
|
||||||
|
{
|
||||||
|
coll.econLandRewardRoutine();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user