Started the refactoring
This commit is contained in:
parent
35d7985fb2
commit
1da8b6b30a
@ -1,23 +1,38 @@
|
|||||||
package com.bukkit.mcteam.factions.entities;
|
package com.bukkit.mcteam.factions;
|
||||||
|
|
||||||
import java.util.*;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.World;
|
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.util.Log;
|
import com.bukkit.mcteam.factions.entities.EM;
|
||||||
import com.bukkit.mcteam.factions.util.TextUtil;
|
import com.bukkit.mcteam.factions.util.TextUtil;
|
||||||
|
import com.bukkit.mcteam.gson.reflect.TypeToken;
|
||||||
import com.bukkit.mcteam.util.AsciiCompass;
|
import com.bukkit.mcteam.util.AsciiCompass;
|
||||||
|
import com.bukkit.mcteam.util.DiscUtil;
|
||||||
|
|
||||||
//import com.bukkit.mcteam.factions.util.*;
|
//import com.bukkit.mcteam.factions.util.*;
|
||||||
|
|
||||||
public class Board {
|
public class Board {
|
||||||
|
protected static transient Map<String, Board> instances = new HashMap<String, Board>();
|
||||||
|
protected static transient File file = new File(Factions.instance.getDataFolder(), "boards.json");
|
||||||
|
|
||||||
public transient String worldName;
|
public transient String worldName;
|
||||||
protected Map<Coord, Integer> coordFactionIds;
|
protected Map<Coord, Integer> coordFactionIds = new HashMap<Coord, Integer>();
|
||||||
|
|
||||||
public Board() {
|
public Board() {
|
||||||
coordFactionIds = new HashMap<Coord, Integer>();
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Board(String worldName) {
|
||||||
|
this.worldName = worldName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Faction getFactionAt(Coord coord) {
|
public Faction getFactionAt(Coord coord) {
|
||||||
@ -64,7 +79,7 @@ public class Board {
|
|||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
Entry<Coord, Integer> entry = iter.next();
|
Entry<Coord, Integer> entry = iter.next();
|
||||||
if ( ! EM.factionExists(entry.getValue())) {
|
if ( ! EM.factionExists(entry.getValue())) {
|
||||||
Log.debug("Cleaner removed coord with non existing factionId "+entry.getValue());
|
Factions.log("Cleaner removed coord with non existing factionId "+entry.getValue());
|
||||||
iter.remove();
|
iter.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,37 +87,11 @@ public class Board {
|
|||||||
|
|
||||||
public static void cleanAll() {
|
public static void cleanAll() {
|
||||||
for (Board board : getAll()) {
|
for (Board board : getAll()) {
|
||||||
Log.debug("Cleaning board for world "+board.worldName);
|
Factions.log("Cleaning board for world "+board.worldName);
|
||||||
board.clean();
|
board.clean();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------//
|
|
||||||
// Purge faction Currently skipped and we use clean instead as that will solve orphaned keys to :)
|
|
||||||
//----------------------------------------------//
|
|
||||||
/*
|
|
||||||
public void purgeFaction(int factionId) {
|
|
||||||
Iterator<Entry<Coord, Integer>> iter = coordFactionIds.entrySet().iterator();
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
Entry<Coord, Integer> entry = iter.next();
|
|
||||||
if (entry.getValue().equals(factionId)) {
|
|
||||||
iter.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void purgeFaction(Faction faction) {
|
|
||||||
purgeFaction(faction.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void purgeFactionFromAllBoards(int factionId) {
|
|
||||||
for (Board board : getAll()) {
|
|
||||||
board.purgeFaction(factionId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static void purgeFactionFromAllBoards(Faction faction) {
|
|
||||||
purgeFactionFromAllBoards(faction.id);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
// Coord count
|
// Coord count
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
@ -186,7 +175,7 @@ public class Board {
|
|||||||
// Persistance
|
// Persistance
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
|
|
||||||
public boolean save() {
|
/*public boolean save() {
|
||||||
return EM.boardSave(this.worldName);
|
return EM.boardSave(this.worldName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,6 +185,80 @@ public class Board {
|
|||||||
|
|
||||||
public static Collection<Board> getAll() {
|
public static Collection<Board> getAll() {
|
||||||
return EM.boardGetAll();
|
return EM.boardGetAll();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Persistance
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public boolean shouldBeSaved() {
|
||||||
|
return this.coordFactionIds.size() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean save() {
|
||||||
|
Factions.log("Saving boards to disk");
|
||||||
|
|
||||||
|
Map<String, Board> instancesToSave = new HashMap<String, Board>();
|
||||||
|
for (Entry<String, Board> entry : instances.entrySet()) {
|
||||||
|
if (entry.getValue().shouldBeSaved()) {
|
||||||
|
instancesToSave.put(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
DiscUtil.write(file, Factions.gson.toJson(instancesToSave));
|
||||||
|
} catch (IOException e) {
|
||||||
|
Factions.log("Failed to save the boards to disk.");
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean load() {
|
||||||
|
if ( ! file.exists()) {
|
||||||
|
Factions.log("No boards to load from disk. Creating new file.");
|
||||||
|
save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Type type = new TypeToken<Map<String, Board>>(){}.getType();
|
||||||
|
instances = Factions.gson.fromJson(DiscUtil.read(file), type);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fillNames();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fillNames() {
|
||||||
|
for(Entry<String, Board> entry : instances.entrySet()) {
|
||||||
|
entry.getValue().worldName = entry.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Board get(String worldName) {
|
||||||
|
if (instances.containsKey(worldName)) {
|
||||||
|
return instances.get(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
Board board = new Board(worldName);
|
||||||
|
instances.put(worldName, board);
|
||||||
|
return board;
|
||||||
|
}
|
||||||
|
|
||||||
|
// You should use this one to be sure you do not spell the player name wrong.
|
||||||
|
public static Board get(Board board) {
|
||||||
|
return get(board.worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Collection<Board> getAll() {
|
||||||
|
return instances.values();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -98,12 +98,12 @@ public class Commands {
|
|||||||
|
|
||||||
// Update to work with tag and follower names
|
// Update to work with tag and follower names
|
||||||
|
|
||||||
public static Follower findFollower(Follower me, String name, boolean defaultsToMe) {
|
public static FPlayer findFollower(FPlayer me, String name, boolean defaultsToMe) {
|
||||||
if (name.length() == 0 && defaultsToMe) {
|
if (name.length() == 0 && defaultsToMe) {
|
||||||
return me;
|
return me;
|
||||||
}
|
}
|
||||||
|
|
||||||
Follower follower = Follower.find(name);
|
FPlayer follower = FPlayer.find(name);
|
||||||
if (follower != null) {
|
if (follower != null) {
|
||||||
return follower;
|
return follower;
|
||||||
}
|
}
|
||||||
@ -112,13 +112,13 @@ public class Commands {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Faction findFaction(Follower me, String name, boolean defaultsToMe) {
|
public static Faction findFaction(FPlayer me, String name, boolean defaultsToMe) {
|
||||||
if (name.length() == 0 && defaultsToMe) {
|
if (name.length() == 0 && defaultsToMe) {
|
||||||
return me.getFaction();
|
return me.getFaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search player names
|
// Search player names
|
||||||
Follower follower = Follower.find(name);
|
FPlayer follower = FPlayer.find(name);
|
||||||
if (follower != null) {
|
if (follower != null) {
|
||||||
return follower.getFaction();
|
return follower.getFaction();
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ public class Commands {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean canIAdministerYou(Follower i, Follower you) {
|
public static boolean canIAdministerYou(FPlayer i, FPlayer you) {
|
||||||
if ( ! i.getFaction().equals(you.getFaction())) {
|
if ( ! i.getFaction().equals(you.getFaction())) {
|
||||||
i.sendMessage(you.getNameAndRelevant(i)+Conf.colorSystem+" is not in the same faction as you.");
|
i.sendMessage(you.getNameAndRelevant(i)+Conf.colorSystem+" is not in the same faction as you.");
|
||||||
return false;
|
return false;
|
||||||
@ -158,7 +158,7 @@ public class Commands {
|
|||||||
// The base command
|
// The base command
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
|
|
||||||
public static void base(Follower me, ArrayList<String> tokens) {
|
public static void base(FPlayer me, ArrayList<String> tokens) {
|
||||||
if (tokens.size() == 0) {
|
if (tokens.size() == 0) {
|
||||||
help(me);
|
help(me);
|
||||||
return;
|
return;
|
||||||
@ -230,11 +230,11 @@ public class Commands {
|
|||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
// The other commands
|
// The other commands
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
public static void help(Follower me) {
|
public static void help(FPlayer me) {
|
||||||
help(me, 1);
|
help(me, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void help(Follower me, Integer page) {
|
public static void help(FPlayer me, Integer page) {
|
||||||
me.sendMessage(TextUtil.titleize("Factions Help ("+page+"/"+helpPages.size()+")"), false);
|
me.sendMessage(TextUtil.titleize("Factions Help ("+page+"/"+helpPages.size()+")"), false);
|
||||||
page -= 1;
|
page -= 1;
|
||||||
if (page < 0 || page >= helpPages.size()) {
|
if (page < 0 || page >= helpPages.size()) {
|
||||||
@ -244,7 +244,7 @@ public class Commands {
|
|||||||
me.sendMessage(helpPages.get(page), false);
|
me.sendMessage(helpPages.get(page), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void leave(Follower me) {
|
public static void leave(FPlayer me) {
|
||||||
Faction faction = me.getFaction();
|
Faction faction = me.getFaction();
|
||||||
|
|
||||||
ArrayList<String> errors = me.leave();
|
ArrayList<String> errors = me.leave();
|
||||||
@ -257,14 +257,14 @@ public class Commands {
|
|||||||
|
|
||||||
if (faction.getFollowersAll().size() == 0) {
|
if (faction.getFollowersAll().size() == 0) {
|
||||||
// Remove this faction
|
// Remove this faction
|
||||||
for (Follower follower : Follower.getAll()) {
|
for (FPlayer follower : FPlayer.getAll()) {
|
||||||
follower.sendMessage(Conf.colorSystem+"The faction "+faction.getTag(follower)+Conf.colorSystem+" was disbanded.");
|
follower.sendMessage(Conf.colorSystem+"The faction "+faction.getTag(follower)+Conf.colorSystem+" was disbanded.");
|
||||||
}
|
}
|
||||||
EM.factionDelete(faction.id);
|
EM.factionDelete(faction.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void join(Follower me, String name) {
|
public static void join(FPlayer me, String name) {
|
||||||
Faction faction = findFaction(me, name, false);
|
Faction faction = findFaction(me, name, false);
|
||||||
if (faction == null) {
|
if (faction == null) {
|
||||||
return;
|
return;
|
||||||
@ -281,7 +281,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void create(Follower me, String tag) {
|
public static void create(FPlayer me, String tag) {
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
|
|
||||||
if (me.hasFaction()) {
|
if (me.hasFaction()) {
|
||||||
@ -306,7 +306,7 @@ public class Commands {
|
|||||||
me.role = Role.ADMIN;
|
me.role = Role.ADMIN;
|
||||||
me.save();
|
me.save();
|
||||||
|
|
||||||
for (Follower follower : Follower.getAll()) {
|
for (FPlayer follower : FPlayer.getAll()) {
|
||||||
follower.sendMessage(me.getNameAndRelevant(follower)+Conf.colorSystem+" created a new faction "+faction.getTag(follower));
|
follower.sendMessage(me.getNameAndRelevant(follower)+Conf.colorSystem+" created a new faction "+faction.getTag(follower));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +314,7 @@ public class Commands {
|
|||||||
me.sendMessage(Conf.colorCommand+Conf.aliasBase.get(0)+" "+Conf.aliasDescription.get(0)+" "+"[description]");
|
me.sendMessage(Conf.colorCommand+Conf.aliasBase.get(0)+" "+Conf.aliasDescription.get(0)+" "+"[description]");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void tag(Follower me, String tag) {
|
public static void tag(FPlayer me, String tag) {
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
|
|
||||||
if (me.withoutFaction()) {
|
if (me.withoutFaction()) {
|
||||||
@ -349,7 +349,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void list(Follower me, String inPage) {
|
public static void list(FPlayer me, String inPage) {
|
||||||
ArrayList<Faction> FactionList = new ArrayList<Faction>(Faction.getAll());
|
ArrayList<Faction> FactionList = new ArrayList<Faction>(Faction.getAll());
|
||||||
|
|
||||||
int page = 1;
|
int page = 1;
|
||||||
@ -411,14 +411,14 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showFaction(Follower me, String name) {
|
public static void showFaction(FPlayer me, String name) {
|
||||||
Faction faction = findFaction(me, name, true);
|
Faction faction = findFaction(me, name, true);
|
||||||
if (faction == null) {
|
if (faction == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Collection<Follower> admins = faction.getFollowersWhereRole(Role.ADMIN);
|
Collection<FPlayer> admins = faction.getFollowersWhereRole(Role.ADMIN);
|
||||||
Collection<Follower> mods = faction.getFollowersWhereRole(Role.MODERATOR);
|
Collection<FPlayer> mods = faction.getFollowersWhereRole(Role.MODERATOR);
|
||||||
Collection<Follower> normals = faction.getFollowersWhereRole(Role.NORMAL);
|
Collection<FPlayer> normals = faction.getFollowersWhereRole(Role.NORMAL);
|
||||||
|
|
||||||
me.sendMessage(TextUtil.titleize(faction.getTag(me)), false);
|
me.sendMessage(TextUtil.titleize(faction.getTag(me)), false);
|
||||||
me.sendMessage(Conf.colorChrome+"Description: "+Conf.colorSystem+faction.getDescription());
|
me.sendMessage(Conf.colorChrome+"Description: "+Conf.colorSystem+faction.getDescription());
|
||||||
@ -462,7 +462,7 @@ public class Commands {
|
|||||||
// List the members...
|
// List the members...
|
||||||
String onlineList = Conf.colorChrome+"Members online: ";
|
String onlineList = Conf.colorChrome+"Members online: ";
|
||||||
String offlineList = Conf.colorChrome+"Members offline: ";
|
String offlineList = Conf.colorChrome+"Members offline: ";
|
||||||
for (Follower follower : admins) {
|
for (FPlayer follower : admins) {
|
||||||
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
|
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
|
||||||
if (follower.isOnline()) {
|
if (follower.isOnline()) {
|
||||||
onlineList += listpart;
|
onlineList += listpart;
|
||||||
@ -470,7 +470,7 @@ public class Commands {
|
|||||||
offlineList += listpart;
|
offlineList += listpart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Follower follower : mods) {
|
for (FPlayer follower : mods) {
|
||||||
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
|
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
|
||||||
if (follower.isOnline()) {
|
if (follower.isOnline()) {
|
||||||
onlineList += listpart;
|
onlineList += listpart;
|
||||||
@ -478,7 +478,7 @@ public class Commands {
|
|||||||
offlineList += listpart;
|
offlineList += listpart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Follower follower : normals) {
|
for (FPlayer follower : normals) {
|
||||||
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
|
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
|
||||||
if (follower.isOnline()) {
|
if (follower.isOnline()) {
|
||||||
onlineList += listpart;
|
onlineList += listpart;
|
||||||
@ -499,7 +499,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void showMap(Follower me, String mapAutoUpdating) {
|
public static void showMap(FPlayer me, String mapAutoUpdating) {
|
||||||
Board board = Board.get(me.getPlayer().getWorld());
|
Board board = Board.get(me.getPlayer().getWorld());
|
||||||
if (mapAutoUpdating.length() > 0) {
|
if (mapAutoUpdating.length() > 0) {
|
||||||
if (Conf.aliasTrue.contains(mapAutoUpdating.toLowerCase())) {
|
if (Conf.aliasTrue.contains(mapAutoUpdating.toLowerCase())) {
|
||||||
@ -519,8 +519,8 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void invite(Follower me, String name) {
|
public static void invite(FPlayer me, String name) {
|
||||||
Follower follower = findFollower(me, name, false);
|
FPlayer follower = findFollower(me, name, false);
|
||||||
if (follower == null) {
|
if (follower == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -534,8 +534,8 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void deinvite(Follower me, String name) { // TODO Move out!
|
public static void deinvite(FPlayer me, String name) { // TODO Move out!
|
||||||
Follower follower = findFollower(me, name, false);
|
FPlayer follower = findFollower(me, name, false);
|
||||||
if (follower == null) {
|
if (follower == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -549,7 +549,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void open(Follower me) {
|
public static void open(FPlayer me) {
|
||||||
if (me.role.value < Role.MODERATOR.value) {
|
if (me.role.value < Role.MODERATOR.value) {
|
||||||
me.sendMessage(Conf.colorSystem+"You must be moderator to do this");
|
me.sendMessage(Conf.colorSystem+"You must be moderator to do this");
|
||||||
return;
|
return;
|
||||||
@ -569,7 +569,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void title(Follower me, ArrayList<String> tokens) {
|
public static void title(FPlayer me, ArrayList<String> tokens) {
|
||||||
if (tokens.size() == 0) {
|
if (tokens.size() == 0) {
|
||||||
me.sendMessage(Conf.colorSystem+"You must specify a player name");
|
me.sendMessage(Conf.colorSystem+"You must specify a player name");
|
||||||
return;
|
return;
|
||||||
@ -578,7 +578,7 @@ public class Commands {
|
|||||||
String name = tokens.get(0);
|
String name = tokens.get(0);
|
||||||
tokens.remove(0);
|
tokens.remove(0);
|
||||||
|
|
||||||
Follower you = findFollower(me, name, true);
|
FPlayer you = findFollower(me, name, true);
|
||||||
if (you == null) {
|
if (you == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -596,13 +596,13 @@ public class Commands {
|
|||||||
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" changed a title: "+you.getNameAndRelevant(myFaction));
|
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" changed a title: "+you.getNameAndRelevant(myFaction));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void kick(Follower me, String name) {
|
public static void kick(FPlayer me, String name) {
|
||||||
if (name.length() == 0) {
|
if (name.length() == 0) {
|
||||||
me.sendMessage(Conf.colorSystem+"You must specify a player name.");
|
me.sendMessage(Conf.colorSystem+"You must specify a player name.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Follower you = findFollower(me, name, false);
|
FPlayer you = findFollower(me, name, false);
|
||||||
if (you == null) {
|
if (you == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -617,7 +617,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void roleChange(Follower me, Role targetRole, String name) {
|
public static void roleChange(FPlayer me, Role targetRole, String name) {
|
||||||
if (me.role.value < Role.ADMIN.value) {
|
if (me.role.value < Role.ADMIN.value) {
|
||||||
me.sendMessage(Conf.colorSystem+"You must be faction admin to do this");
|
me.sendMessage(Conf.colorSystem+"You must be faction admin to do this");
|
||||||
return;
|
return;
|
||||||
@ -628,7 +628,7 @@ public class Commands {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Follower targetFollower = findFollower(me, name, false);
|
FPlayer targetFollower = findFollower(me, name, false);
|
||||||
if (targetFollower == null) {
|
if (targetFollower == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -648,7 +648,7 @@ public class Commands {
|
|||||||
targetFollower.role = Role.ADMIN;
|
targetFollower.role = Role.ADMIN;
|
||||||
|
|
||||||
// Inform all players
|
// Inform all players
|
||||||
for (Follower follower : Follower.getAll()) {
|
for (FPlayer follower : FPlayer.getAll()) {
|
||||||
if (follower.factionId == me.factionId) {
|
if (follower.factionId == me.factionId) {
|
||||||
follower.sendMessage(me.getNameAndRelevant(me)+Conf.colorSystem+" gave "+targetFollower.getNameAndRelevant(me)+Conf.colorSystem+" the leadership of your faction.");
|
follower.sendMessage(me.getNameAndRelevant(me)+Conf.colorSystem+" gave "+targetFollower.getNameAndRelevant(me)+Conf.colorSystem+" the leadership of your faction.");
|
||||||
} else {
|
} else {
|
||||||
@ -668,7 +668,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void claim(Follower me) {
|
public static void claim(FPlayer me) {
|
||||||
if (me.withoutFaction()) {
|
if (me.withoutFaction()) {
|
||||||
me.sendMessage(Conf.colorSystem+"You are not part of any faction.");
|
me.sendMessage(Conf.colorSystem+"You are not part of any faction.");
|
||||||
return;
|
return;
|
||||||
@ -723,7 +723,7 @@ public class Commands {
|
|||||||
board.claim(coord, myFaction);
|
board.claim(coord, myFaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unclaim(Follower me) {
|
public static void unclaim(FPlayer me) {
|
||||||
if (me.withoutFaction()) {
|
if (me.withoutFaction()) {
|
||||||
me.sendMessage(Conf.colorSystem+"You are not part of any faction");
|
me.sendMessage(Conf.colorSystem+"You are not part of any faction");
|
||||||
return;
|
return;
|
||||||
@ -746,7 +746,7 @@ public class Commands {
|
|||||||
me.getFaction().sendMessage(me.getNameAndRelevant(me)+Conf.colorSystem+" unclaimed some land.");
|
me.getFaction().sendMessage(me.getNameAndRelevant(me)+Conf.colorSystem+" unclaimed some land.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void relation(Follower me, Relation whishedRelation, String otherFactionName) {
|
public static void relation(FPlayer me, Relation whishedRelation, String otherFactionName) {
|
||||||
if (me.withoutFaction()) {
|
if (me.withoutFaction()) {
|
||||||
me.sendMessage(Conf.colorSystem+"You are not part of any faction.");
|
me.sendMessage(Conf.colorSystem+"You are not part of any faction.");
|
||||||
return;
|
return;
|
||||||
@ -791,7 +791,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void description(Follower me, String desc) {
|
public static void description(FPlayer me, String desc) {
|
||||||
if (me.withoutFaction()) {
|
if (me.withoutFaction()) {
|
||||||
me.sendMessage(Conf.colorSystem+"You are not part of any faction");
|
me.sendMessage(Conf.colorSystem+"You are not part of any faction");
|
||||||
return;
|
return;
|
||||||
@ -807,13 +807,13 @@ public class Commands {
|
|||||||
me.sendMessage(Conf.colorSystem+"The new description was set :D");
|
me.sendMessage(Conf.colorSystem+"The new description was set :D");
|
||||||
|
|
||||||
// Broadcast the description to everyone
|
// Broadcast the description to everyone
|
||||||
for (Follower follower : EM.followerGetAll()) {
|
for (FPlayer follower : EM.followerGetAll()) {
|
||||||
follower.sendMessage(Conf.colorSystem+"The faction "+follower.getRelationColor(me)+me.getFaction().getTag()+Conf.colorSystem+" changed their description to:");
|
follower.sendMessage(Conf.colorSystem+"The faction "+follower.getRelationColor(me)+me.getFaction().getTag()+Conf.colorSystem+" changed their description to:");
|
||||||
follower.sendMessage(Conf.colorSystem+desc);
|
follower.sendMessage(Conf.colorSystem+desc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void chat(Follower me, String msg) {
|
public static void chat(FPlayer me, String msg) {
|
||||||
if (me.withoutFaction()) {
|
if (me.withoutFaction()) {
|
||||||
me.sendMessage(Conf.colorSystem+"You are not part of any faction");
|
me.sendMessage(Conf.colorSystem+"You are not part of any faction");
|
||||||
return;
|
return;
|
||||||
@ -830,8 +830,8 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void version(Follower me) {
|
public static void version(FPlayer me) {
|
||||||
me.sendMessage(Conf.colorSystem+"You are running "+Factions.factions.getDescription().getFullName());
|
me.sendMessage(Conf.colorSystem+"You are running "+Factions.instance.getDescription().getFullName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
package com.bukkit.mcteam.factions.entities;
|
package com.bukkit.mcteam.factions;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
|
|
||||||
|
import com.bukkit.mcteam.util.DiscUtil;
|
||||||
|
|
||||||
public class Conf {
|
public class Conf {
|
||||||
|
public static transient File file = new File(Factions.instance.getDataFolder(), "conf.json");
|
||||||
|
|
||||||
// Colors
|
// Colors
|
||||||
public static ChatColor colorMember = ChatColor.GREEN;
|
public static ChatColor colorMember = ChatColor.GREEN;
|
||||||
public static ChatColor colorAlly = ChatColor.LIGHT_PURPLE;
|
public static ChatColor colorAlly = ChatColor.LIGHT_PURPLE;
|
||||||
@ -14,8 +20,6 @@ public class Conf {
|
|||||||
public static ChatColor colorChrome = ChatColor.GOLD;
|
public static ChatColor colorChrome = ChatColor.GOLD;
|
||||||
public static ChatColor colorCommand = ChatColor.AQUA;
|
public static ChatColor colorCommand = ChatColor.AQUA;
|
||||||
public static ChatColor colorParameter = ChatColor.DARK_AQUA;
|
public static ChatColor colorParameter = ChatColor.DARK_AQUA;
|
||||||
|
|
||||||
public static Integer logThreshold = 10;
|
|
||||||
|
|
||||||
// Power
|
// Power
|
||||||
public static double powerPlayerMax = 10;
|
public static double powerPlayerMax = 10;
|
||||||
@ -154,11 +158,37 @@ public class Conf {
|
|||||||
aliasTrue.add("+");
|
aliasTrue.add("+");
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------//
|
// -------------------------------------------- //
|
||||||
// Persistance
|
// Persistance
|
||||||
//----------------------------------------------//
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public static boolean save() {
|
public static boolean save() {
|
||||||
return EM.configSave();
|
Factions.log("Saving config to disk.");
|
||||||
|
try {
|
||||||
|
DiscUtil.write(file, Factions.gson.toJson(new Conf()));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Factions.log("Failed to save the config to disk.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean load() {
|
||||||
|
if ( ! file.exists()) {
|
||||||
|
Factions.log("No conf to load from disk. Creating new file.");
|
||||||
|
save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Factions.gson.fromJson(DiscUtil.read(file), Conf.class);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Factions.log("Failed to load the config from disk.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package com.bukkit.mcteam.factions.entities;
|
package com.bukkit.mcteam.factions;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
|
||||||
public class Coord {
|
public class Coord {
|
||||||
protected static transient int cellSize = 16;
|
protected static transient int cellSize = 16;
|
||||||
public int x, z;
|
public int x, z;
|
||||||
@ -35,7 +36,7 @@ public class Coord {
|
|||||||
return from(player.getLocation());
|
return from(player.getLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Coord from(Follower follower) {
|
public static Coord from(FPlayer follower) {
|
||||||
return from(follower.getPlayer());
|
return from(follower.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
@ -1,16 +1,23 @@
|
|||||||
package com.bukkit.mcteam.factions.entities;
|
package com.bukkit.mcteam.factions;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
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 org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.Factions;
|
import com.bukkit.mcteam.factions.entities.EM;
|
||||||
import com.bukkit.mcteam.factions.struct.*;
|
import com.bukkit.mcteam.gson.reflect.TypeToken;
|
||||||
import com.bukkit.mcteam.util.ChatFixUtil;
|
import com.bukkit.mcteam.util.DiscUtil;
|
||||||
|
|
||||||
public class Follower {
|
public class FPlayer {
|
||||||
public transient String id; // The is the name of the player
|
public static transient Map<String, FPlayer> instances = new HashMap<String, FPlayer>();
|
||||||
|
public static transient File file = new File(Factions.instance.getDataFolder(), "players.json");
|
||||||
|
|
||||||
|
public transient String playername;
|
||||||
public transient Coord lastStoodInCoord = new Coord(); // Where did this player stand the last time we checked?
|
public transient Coord lastStoodInCoord = new Coord(); // Where did this player stand the last time we checked?
|
||||||
|
|
||||||
public int factionId;
|
public int factionId;
|
||||||
@ -21,6 +28,43 @@ public class Follower {
|
|||||||
private boolean mapAutoUpdating;
|
private boolean mapAutoUpdating;
|
||||||
private boolean factionChatting;
|
private boolean factionChatting;
|
||||||
|
|
||||||
|
public FPlayer(Player player) {
|
||||||
|
this.playername = player.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public FPlayer(String playername) {
|
||||||
|
this.playername = playername;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GSON need this noarg constructor.
|
||||||
|
public FPlayer() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return Factions.instance.getServer().getPlayer(playername);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPlayerName() {
|
||||||
|
return this.playername;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Online / Offline State Checking
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public boolean isOnline() {
|
||||||
|
return Factions.instance.getServer().getPlayer(playername) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOffline() {
|
||||||
|
return ! isOnline();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public boolean isFactionChatting() {
|
public boolean isFactionChatting() {
|
||||||
if (this.factionId == 0) {
|
if (this.factionId == 0) {
|
||||||
return false;
|
return false;
|
||||||
@ -32,7 +76,7 @@ public class Follower {
|
|||||||
this.factionChatting = factionChatting;
|
this.factionChatting = factionChatting;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Follower() {
|
public FPlayer() {
|
||||||
this.resetFactionData();
|
this.resetFactionData();
|
||||||
this.power = this.getPowerMax();
|
this.power = this.getPowerMax();
|
||||||
this.lastPowerUpdateTime = System.currentTimeMillis();
|
this.lastPowerUpdateTime = System.currentTimeMillis();
|
||||||
@ -46,14 +90,6 @@ public class Follower {
|
|||||||
this.title = "";
|
this.title = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
|
||||||
return Factions.factions.getServer().getPlayer(this.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOnline() {
|
|
||||||
return this.getPlayer() != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isMapAutoUpdating() {
|
public boolean isMapAutoUpdating() {
|
||||||
return mapAutoUpdating;
|
return mapAutoUpdating;
|
||||||
}
|
}
|
||||||
@ -113,14 +149,14 @@ public class Follower {
|
|||||||
public String getNameAndTitle(Faction faction) {
|
public String getNameAndTitle(Faction faction) {
|
||||||
return this.getRelationColor(faction)+this.getNameAndTitle();
|
return this.getRelationColor(faction)+this.getNameAndTitle();
|
||||||
}
|
}
|
||||||
public String getNameAndTitle(Follower follower) {
|
public String getNameAndTitle(FPlayer follower) {
|
||||||
return this.getRelationColor(follower)+this.getNameAndTitle();
|
return this.getRelationColor(follower)+this.getNameAndTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNameAndTag(Faction faction) {
|
public String getNameAndTag(Faction faction) {
|
||||||
return this.getRelationColor(faction)+this.getNameAndTag();
|
return this.getRelationColor(faction)+this.getNameAndTag();
|
||||||
}
|
}
|
||||||
public String getNameAndTag(Follower follower) {
|
public String getNameAndTag(FPlayer follower) {
|
||||||
return this.getRelationColor(follower)+this.getNameAndTag();
|
return this.getRelationColor(follower)+this.getNameAndTag();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +172,7 @@ public class Follower {
|
|||||||
// For non members we show tag
|
// For non members we show tag
|
||||||
return rel.getColor() + this.getNameAndTag();
|
return rel.getColor() + this.getNameAndTag();
|
||||||
}
|
}
|
||||||
public String getNameAndRelevant(Follower follower) {
|
public String getNameAndRelevant(FPlayer follower) {
|
||||||
return getNameAndRelevant(follower.getFaction());
|
return getNameAndRelevant(follower.getFaction());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +195,7 @@ public class Follower {
|
|||||||
|
|
||||||
return this.getRelation(faction).getColor()+getChatTag();
|
return this.getRelation(faction).getColor()+getChatTag();
|
||||||
}
|
}
|
||||||
public String getChatTag(Follower follower) {
|
public String getChatTag(FPlayer follower) {
|
||||||
if (this.withoutFaction()) {
|
if (this.withoutFaction()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -175,7 +211,7 @@ public class Follower {
|
|||||||
return faction.getRelation(this);
|
return faction.getRelation(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Relation getRelation(Follower follower) {
|
public Relation getRelation(FPlayer follower) {
|
||||||
return this.getFaction().getRelation(follower);
|
return this.getFaction().getRelation(follower);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +219,7 @@ public class Follower {
|
|||||||
return faction.getRelationColor(this);
|
return faction.getRelationColor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChatColor getRelationColor(Follower follower) {
|
public ChatColor getRelationColor(FPlayer follower) {
|
||||||
return this.getRelation(follower).getColor();
|
return this.getRelation(follower).getColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -343,7 +379,7 @@ public class Follower {
|
|||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> invite(Follower follower) {
|
public ArrayList<String> invite(FPlayer follower) {
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
|
|
||||||
//Log.debug("this.role: "+this.role);
|
//Log.debug("this.role: "+this.role);
|
||||||
@ -361,7 +397,7 @@ public class Follower {
|
|||||||
return this.getFaction().invite(follower);
|
return this.getFaction().invite(follower);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> deinvite(Follower follower) {
|
public ArrayList<String> deinvite(FPlayer follower) {
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
|
|
||||||
if (this.role.value < Role.MODERATOR.value) {
|
if (this.role.value < Role.MODERATOR.value) {
|
||||||
@ -375,7 +411,7 @@ public class Follower {
|
|||||||
return this.getFaction().deinvite(follower);
|
return this.getFaction().deinvite(follower);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> kick(Follower follower) {
|
public ArrayList<String> kick(FPlayer follower) {
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
|
|
||||||
if ( ! follower.getFaction().equals(this.getFaction())) {
|
if ( ! follower.getFaction().equals(this.getFaction())) {
|
||||||
@ -403,31 +439,11 @@ public class Follower {
|
|||||||
//this.getPlayer().sendMessage(ChatColor.GREEN + "This is a faction server! Type "+Conf.colorCommand+"/f"+ChatColor.GREEN +" for more info :D");
|
//this.getPlayer().sendMessage(ChatColor.GREEN + "This is a faction server! Type "+Conf.colorCommand+"/f"+ChatColor.GREEN +" for more info :D");
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------//
|
|
||||||
// Messages - Directly connected to ChatFixUtil
|
|
||||||
//----------------------------------------------//
|
|
||||||
public void sendMessage(String message, boolean fix) {
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
ChatFixUtil.sendMessage(player, message, fix);
|
|
||||||
}
|
|
||||||
public void sendMessage(List<String> messages, boolean fix) {
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
ChatFixUtil.sendMessage(player, messages, fix);
|
|
||||||
}
|
|
||||||
public void sendMessage(String message) {
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
ChatFixUtil.sendMessage(player, message, true);
|
|
||||||
}
|
|
||||||
public void sendMessage(List<String> messages) {
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
ChatFixUtil.sendMessage(player, messages, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
// Search
|
// Search
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
public static Follower find(String name) {
|
public static FPlayer find(String name) { // TODO felaktig!
|
||||||
for (Follower follower : EM.followerGetAll()) {
|
for (FPlayer follower : EM.followerGetAll()) {
|
||||||
if (follower.getName().equalsIgnoreCase(name.trim())) {
|
if (follower.getName().equalsIgnoreCase(name.trim())) {
|
||||||
return follower;
|
return follower;
|
||||||
}
|
}
|
||||||
@ -436,19 +452,110 @@ public class Follower {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Get
|
||||||
|
// You can only get a "skin" for online players.
|
||||||
|
// The same object is always returned for the same player.
|
||||||
|
// This means you can use the == operator. No .equals method necessary.
|
||||||
|
// -------------------------------------------- //
|
||||||
|
public static FPlayer get(String playername) {
|
||||||
|
if (instances.containsKey(playername)) {
|
||||||
|
return instances.get(playername);
|
||||||
|
}
|
||||||
|
|
||||||
|
FPlayer vplayer = new FPlayer(playername);
|
||||||
|
instances.put(playername, vplayer);
|
||||||
|
return vplayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// You should use this one to be sure you do not spell the player name wrong.
|
||||||
|
public static FPlayer get(Player player) {
|
||||||
|
return get(player.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Messages
|
||||||
|
// -------------------------------------------- //
|
||||||
|
public void sendMessage(String message) {
|
||||||
|
this.getPlayer().sendMessage(Conf.colorSystem + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMessage(List<String> messages) {
|
||||||
|
for(String message : messages) {
|
||||||
|
this.sendMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
// Persistance and entity management
|
// Persistance and entity management
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
|
/*
|
||||||
public boolean save() {
|
public boolean save() {
|
||||||
return EM.followerSave(this.id);
|
return EM.followerSave(this.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Follower get(Player player) {
|
public static FPlayer get(Player player) {
|
||||||
return EM.followerGet(player);
|
return EM.followerGet(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Collection<Follower> getAll() {
|
public static Collection<FPlayer> getAll() {
|
||||||
return EM.followerGetAll();
|
return EM.followerGetAll();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Persistance
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public boolean shouldBeSaved() {
|
||||||
|
return this.factionId != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean save() {
|
||||||
|
Factions.log("Saving players to disk");
|
||||||
|
|
||||||
|
// We only wan't to save the vplayers with non default values
|
||||||
|
Map<String, FPlayer> vplayersToSave = new HashMap<String, FPlayer>();
|
||||||
|
for (Entry<String, FPlayer> entry : instances.entrySet()) {
|
||||||
|
if (entry.getValue().shouldBeSaved()) {
|
||||||
|
vplayersToSave.put(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
DiscUtil.write(file, Factions.gson.toJson(vplayersToSave));
|
||||||
|
} catch (IOException e) {
|
||||||
|
Factions.log("Failed to save the players to disk.");
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean load() {
|
||||||
|
if ( ! file.exists()) {
|
||||||
|
Factions.log("No players to load from disk. Creating new file.");
|
||||||
|
save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Type type = new TypeToken<Map<String, FPlayer>>(){}.getType();
|
||||||
|
instances = Factions.gson.fromJson(DiscUtil.read(file), type);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fillPlayernames();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fillPlayernames() {
|
||||||
|
for(Entry<String, FPlayer> entry : instances.entrySet()) {
|
||||||
|
entry.getValue().playername = entry.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,17 +1,26 @@
|
|||||||
package com.bukkit.mcteam.factions.entities;
|
package com.bukkit.mcteam.factions;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.Factions;
|
import com.bukkit.mcteam.factions.entities.EM;
|
||||||
import com.bukkit.mcteam.factions.struct.Relation;
|
import com.bukkit.mcteam.factions.struct.Relation;
|
||||||
import com.bukkit.mcteam.factions.struct.Role;
|
import com.bukkit.mcteam.factions.struct.Role;
|
||||||
import com.bukkit.mcteam.factions.util.*;
|
import com.bukkit.mcteam.factions.util.*;
|
||||||
import com.bukkit.mcteam.util.ChatFixUtil;
|
import com.bukkit.mcteam.gson.reflect.TypeToken;
|
||||||
|
import com.bukkit.mcteam.util.DiscUtil;
|
||||||
|
|
||||||
public class Faction {
|
public class Faction {
|
||||||
|
public static transient Map<Integer, Faction> instances = new HashMap<Integer, Faction>();
|
||||||
|
public static transient File file = new File(Factions.instance.getDataFolder(), "factions.json");
|
||||||
|
public static transient int nextId;
|
||||||
|
|
||||||
public transient int id;
|
public transient int id;
|
||||||
protected Map<Integer, Relation> relationWish;
|
protected Map<Integer, Relation> relationWish;
|
||||||
@ -40,7 +49,7 @@ public class Faction {
|
|||||||
public String getTag(Faction otherFaction) {
|
public String getTag(Faction otherFaction) {
|
||||||
return this.getTag(otherFaction.getRelationColor(this).toString());
|
return this.getTag(otherFaction.getRelationColor(this).toString());
|
||||||
}
|
}
|
||||||
public String getTag(Follower otherFollower) {
|
public String getTag(FPlayer otherFollower) {
|
||||||
return this.getTag(otherFollower.getRelationColor(this).toString());
|
return this.getTag(otherFollower.getRelationColor(this).toString());
|
||||||
}
|
}
|
||||||
public void setTag(String str) {
|
public void setTag(String str) {
|
||||||
@ -74,7 +83,7 @@ public class Faction {
|
|||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
public double getPower() {
|
public double getPower() {
|
||||||
double ret = 0;
|
double ret = 0;
|
||||||
for (Follower follower : this.getFollowersAll()) {
|
for (FPlayer follower : this.getFollowersAll()) {
|
||||||
ret += follower.getPower();
|
ret += follower.getPower();
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -82,7 +91,7 @@ public class Faction {
|
|||||||
|
|
||||||
public double getPowerMax() {
|
public double getPowerMax() {
|
||||||
double ret = 0;
|
double ret = 0;
|
||||||
for (Follower follower : this.getFollowersAll()) {
|
for (FPlayer follower : this.getFollowersAll()) {
|
||||||
ret += follower.getPowerMax();
|
ret += follower.getPowerMax();
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -109,7 +118,7 @@ public class Faction {
|
|||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|
||||||
|
|
||||||
public ArrayList<String> invite(Follower follower) { // TODO Move out
|
public ArrayList<String> invite(FPlayer follower) { // TODO Move out
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
|
|
||||||
if (follower.getFaction().equals(this)) { // error här?
|
if (follower.getFaction().equals(this)) { // error här?
|
||||||
@ -125,7 +134,7 @@ public class Faction {
|
|||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> deinvite(Follower follower) { // TODO move out!
|
public ArrayList<String> deinvite(FPlayer follower) { // TODO move out!
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
|
|
||||||
if (follower.getFaction() == this) {
|
if (follower.getFaction() == this) {
|
||||||
@ -142,14 +151,14 @@ public class Faction {
|
|||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> kick(Follower follower) {
|
public ArrayList<String> kick(FPlayer follower) {
|
||||||
ArrayList<String> errors = new ArrayList<String>();
|
ArrayList<String> errors = new ArrayList<String>();
|
||||||
removeFollower(follower);
|
removeFollower(follower);
|
||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isInvited(Follower follower) {
|
public boolean isInvited(FPlayer follower) {
|
||||||
return invites.contains(follower.id);
|
return invites.contains(follower.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,9 +166,9 @@ public class Faction {
|
|||||||
// Followers
|
// Followers
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|
||||||
public ArrayList<Follower> getFollowersAll() {
|
public ArrayList<FPlayer> getFollowersAll() {
|
||||||
ArrayList<Follower> ret = new ArrayList<Follower>();
|
ArrayList<FPlayer> ret = new ArrayList<FPlayer>();
|
||||||
for (Follower follower : Follower.getAll()) {
|
for (FPlayer follower : FPlayer.getAll()) {
|
||||||
if (follower.factionId == this.id) {
|
if (follower.factionId == this.id) {
|
||||||
ret.add(follower);
|
ret.add(follower);
|
||||||
}
|
}
|
||||||
@ -167,9 +176,9 @@ public class Faction {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Follower> getFollowersWhereOnline(boolean online) {
|
public ArrayList<FPlayer> getFollowersWhereOnline(boolean online) {
|
||||||
ArrayList<Follower> ret = new ArrayList<Follower>();
|
ArrayList<FPlayer> ret = new ArrayList<FPlayer>();
|
||||||
for (Follower follower : Follower.getAll()) {
|
for (FPlayer follower : FPlayer.getAll()) {
|
||||||
if (follower.factionId == this.id && follower.isOnline() == online) {
|
if (follower.factionId == this.id && follower.isOnline() == online) {
|
||||||
ret.add(follower);
|
ret.add(follower);
|
||||||
}
|
}
|
||||||
@ -177,10 +186,10 @@ public class Faction {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Follower> getFollowersWhereRole(Role role) {
|
public ArrayList<FPlayer> getFollowersWhereRole(Role role) {
|
||||||
ArrayList<Follower> ret = new ArrayList<Follower>();
|
ArrayList<FPlayer> ret = new ArrayList<FPlayer>();
|
||||||
|
|
||||||
for (Follower follower : Follower.getAll()) {
|
for (FPlayer follower : FPlayer.getAll()) {
|
||||||
if (follower.factionId == this.id && follower.role.equals(role)) {
|
if (follower.factionId == this.id && follower.role.equals(role)) {
|
||||||
ret.add(follower);
|
ret.add(follower);
|
||||||
}
|
}
|
||||||
@ -189,7 +198,7 @@ public class Faction {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeFollower(Follower follower) {
|
public void removeFollower(FPlayer follower) {
|
||||||
if (this.id != follower.factionId) {
|
if (this.id != follower.factionId) {
|
||||||
return; // safety check
|
return; // safety check
|
||||||
}
|
}
|
||||||
@ -202,8 +211,8 @@ public class Faction {
|
|||||||
|
|
||||||
public ArrayList<Player> getOnlinePlayers() {
|
public ArrayList<Player> getOnlinePlayers() {
|
||||||
ArrayList<Player> ret = new ArrayList<Player>();
|
ArrayList<Player> ret = new ArrayList<Player>();
|
||||||
for (Player player: Factions.factions.getServer().getOnlinePlayers()) {
|
for (Player player: Factions.instance.getServer().getOnlinePlayers()) {
|
||||||
Follower follower = Follower.get(player);
|
FPlayer follower = FPlayer.get(player);
|
||||||
if (follower.factionId == this.id) {
|
if (follower.factionId == this.id) {
|
||||||
ret.add(player);
|
ret.add(player);
|
||||||
}
|
}
|
||||||
@ -302,7 +311,7 @@ public class Faction {
|
|||||||
return this.getRelationWish(otherFaction);
|
return this.getRelationWish(otherFaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Relation getRelation(Follower follower) {
|
public Relation getRelation(FPlayer follower) {
|
||||||
return getRelation(follower.getFaction());
|
return getRelation(follower.getFaction());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,7 +319,7 @@ public class Faction {
|
|||||||
return this.getRelation(otherFaction).getColor();
|
return this.getRelation(otherFaction).getColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChatColor getRelationColor(Follower follower) {
|
public ChatColor getRelationColor(FPlayer follower) {
|
||||||
return this.getRelation(follower).getColor();
|
return this.getRelation(follower).getColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -318,6 +327,109 @@ public class Faction {
|
|||||||
// Persistance and entity management
|
// Persistance and entity management
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
|
|
||||||
|
public static boolean save() {
|
||||||
|
Factions.log("Saving factions to disk");
|
||||||
|
|
||||||
|
try {
|
||||||
|
DiscUtil.write(file, Factions.gson.toJson(instances));
|
||||||
|
} catch (IOException e) {
|
||||||
|
Factions.log("Failed to save the factions to disk.");
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean load() {
|
||||||
|
if ( ! file.exists()) {
|
||||||
|
Factions.log("No factions to load from disk. Creating new file.");
|
||||||
|
save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Type type = new TypeToken<Map<String, Faction>>(){}.getType();
|
||||||
|
instances = Factions.gson.fromJson(DiscUtil.read(file), type);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fillIds();
|
||||||
|
|
||||||
|
// Make sure the default neutral faction exists
|
||||||
|
if ( ! instances.containsKey(0)) {
|
||||||
|
Faction faction = new Faction();
|
||||||
|
faction.tag = "*No faction*";
|
||||||
|
faction.description = "\"The faction for the factionless :P\"";
|
||||||
|
faction.id = 0;
|
||||||
|
instances.put(faction.id, faction);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fillIds() {
|
||||||
|
nextId = 1;
|
||||||
|
for(Entry<Integer, Faction> entry : instances.entrySet()) {
|
||||||
|
entry.getValue().id = entry.getKey();
|
||||||
|
if (nextId < entry.getKey()) {
|
||||||
|
nextId = entry.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nextId += 1; // make it the next id and not the current highest.
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Faction get(Integer factionId) {
|
||||||
|
if ( ! instances.containsKey(factionId)) {
|
||||||
|
Factions.log(Level.WARNING, "Non existing factionId "+factionId+" requested! Issuing board cleaning!");
|
||||||
|
Board.cleanAll();
|
||||||
|
}
|
||||||
|
return instances.get(factionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean exists(Integer factionId) {
|
||||||
|
return instances.containsKey(factionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Collection<Faction> getAll() {
|
||||||
|
return instances.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO ta parametrar här. All info som behövs ska matas in här och så sparar vi i denna method.
|
||||||
|
public static Faction create() {
|
||||||
|
Faction faction = new Faction();
|
||||||
|
faction.id = nextId;
|
||||||
|
nextId += 1;
|
||||||
|
instances.put(faction.id, faction);
|
||||||
|
Factions.log("created new faction "+faction.id);
|
||||||
|
//faction.save();
|
||||||
|
return faction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean delete(Integer id) {
|
||||||
|
// NOTE that this does not do any security checks.
|
||||||
|
// Follower might get orphaned foreign id's
|
||||||
|
|
||||||
|
// purge from all boards
|
||||||
|
// Board.purgeFactionFromAllBoards(id);
|
||||||
|
Board.cleanAll();
|
||||||
|
|
||||||
|
// Remove the file
|
||||||
|
//File file = new File(folderFaction, id+ext);
|
||||||
|
//file.delete();
|
||||||
|
|
||||||
|
// Remove the faction
|
||||||
|
instances.remove(id);
|
||||||
|
|
||||||
|
// TODO REMOVE ALL MEMBERS!
|
||||||
|
|
||||||
|
// TODO SAVE files
|
||||||
|
return true; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
public static Faction create() {
|
public static Faction create() {
|
||||||
return EM.factionCreate();
|
return EM.factionCreate();
|
||||||
}
|
}
|
||||||
@ -333,5 +445,5 @@ public class Faction {
|
|||||||
public boolean save() {
|
public boolean save() {
|
||||||
return EM.factionSave(this.id);
|
return EM.factionSave(this.id);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
@ -1,37 +1,84 @@
|
|||||||
package com.bukkit.mcteam.factions;
|
package com.bukkit.mcteam.factions;
|
||||||
|
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.entities.*;
|
import com.bukkit.mcteam.factions.commands.FCommand;
|
||||||
import com.bukkit.mcteam.factions.listeners.FactionsBlockListener;
|
import com.bukkit.mcteam.factions.listeners.FactionsBlockListener;
|
||||||
import com.bukkit.mcteam.factions.listeners.FactionsEntityListener;
|
import com.bukkit.mcteam.factions.listeners.FactionsEntityListener;
|
||||||
import com.bukkit.mcteam.factions.listeners.FactionsPlayerListener;
|
import com.bukkit.mcteam.factions.listeners.FactionsPlayerListener;
|
||||||
import com.bukkit.mcteam.factions.util.Log;
|
import com.bukkit.mcteam.gson.Gson;
|
||||||
|
import com.bukkit.mcteam.gson.GsonBuilder;
|
||||||
|
import com.bukkit.mcteam.gson.MapAsArrayTypeAdapter;
|
||||||
|
|
||||||
|
import com.nijiko.permissions.PermissionHandler;
|
||||||
|
import com.nijikokun.bukkit.Permissions.Permissions;
|
||||||
|
|
||||||
|
import me.taylorkelly.help.Help;
|
||||||
|
|
||||||
public class Factions extends JavaPlugin {
|
public class Factions extends JavaPlugin {
|
||||||
public static Factions factions;
|
// -------------------------------------------- //
|
||||||
|
// Fields
|
||||||
|
// -------------------------------------------- //
|
||||||
|
public static Factions instance;
|
||||||
|
|
||||||
|
public final static Gson gson = new GsonBuilder()
|
||||||
|
.setPrettyPrinting()
|
||||||
|
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE)
|
||||||
|
.registerTypeAdapter(Map.class, new MapAsArrayTypeAdapter()) // a "must have" adapter for GSON
|
||||||
|
.create();
|
||||||
|
|
||||||
private final FactionsPlayerListener playerListener = new FactionsPlayerListener(this);
|
private final FactionsPlayerListener playerListener = new FactionsPlayerListener(this);
|
||||||
private final FactionsEntityListener entityListener = new FactionsEntityListener(this);
|
private final FactionsEntityListener entityListener = new FactionsEntityListener(this);
|
||||||
private final FactionsBlockListener blockListener = new FactionsBlockListener(this);
|
private final FactionsBlockListener blockListener = new FactionsBlockListener(this);
|
||||||
|
|
||||||
|
public static PermissionHandler Permissions;
|
||||||
|
public static Help helpPlugin;
|
||||||
|
|
||||||
@Override
|
// Commands
|
||||||
public void onDisable() {
|
public List<FCommand> commands = new ArrayList<FCommand>();
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
public Factions() {
|
||||||
|
Factions.instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Factions.factions = this;
|
// Add the commands
|
||||||
|
/*commands.add(new VCommandBlood());
|
||||||
|
commands.add(new VCommandInfect());
|
||||||
|
commands.add(new VCommandLoad());
|
||||||
|
commands.add(new VCommandSave());
|
||||||
|
commands.add(new VCommandTime());
|
||||||
|
commands.add(new VCommandTurn());
|
||||||
|
commands.add(new VCommandCure());
|
||||||
|
commands.add(new VCommandList());
|
||||||
|
commands.add(new VCommandVersion());*/
|
||||||
|
|
||||||
Log.info("=== INIT START ===");
|
setupPermissions();
|
||||||
|
setupHelp();
|
||||||
|
|
||||||
|
log("=== INIT START ===");
|
||||||
long timeInitStart = System.currentTimeMillis();
|
long timeInitStart = System.currentTimeMillis();
|
||||||
Log.info("You are running version: "+this.getDescription().getVersion());
|
|
||||||
|
|
||||||
EM.loadAll();
|
FPlayer.load();
|
||||||
|
Faction.load();
|
||||||
|
Board.load();
|
||||||
|
|
||||||
// Register events
|
// Register events
|
||||||
PluginManager pm = this.getServer().getPluginManager();
|
PluginManager pm = this.getServer().getPluginManager();
|
||||||
@ -48,8 +95,94 @@ public class Factions extends JavaPlugin {
|
|||||||
pm.registerEvent(Event.Type.BLOCK_PLACED, this.blockListener, Event.Priority.Normal, this);
|
pm.registerEvent(Event.Type.BLOCK_PLACED, this.blockListener, Event.Priority.Normal, this);
|
||||||
pm.registerEvent(Event.Type.BLOCK_INTERACT, this.blockListener, Event.Priority.Normal, this);
|
pm.registerEvent(Event.Type.BLOCK_INTERACT, this.blockListener, Event.Priority.Normal, this);
|
||||||
|
|
||||||
Log.info("=== INIT DONE (Took "+(System.currentTimeMillis()-timeInitStart)+"ms) ===");
|
log("=== INIT DONE (Took "+(System.currentTimeMillis()-timeInitStart)+"ms) ===");
|
||||||
Log.threshold = Conf.logThreshold;
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Integration with other plugins
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private void setupPermissions() {
|
||||||
|
Plugin test = this.getServer().getPluginManager().getPlugin("Permissions");
|
||||||
|
|
||||||
|
if (Permissions != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (test != null) {
|
||||||
|
Permissions = ((Permissions)test).getHandler();
|
||||||
|
Factions.log("Found and will use plugin "+((Permissions)test).getDescription().getFullName());
|
||||||
|
} else {
|
||||||
|
Factions.log("Permission system not detected, defaulting to OP");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupHelp() {
|
||||||
|
Plugin test = this.getServer().getPluginManager().getPlugin("Help");
|
||||||
|
|
||||||
|
if (helpPlugin != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (test != null) {
|
||||||
|
helpPlugin = ((Help) test);
|
||||||
|
Factions.log("Found and will use plugin "+helpPlugin.getDescription().getFullName());
|
||||||
|
for(FCommand fcommand : commands) {
|
||||||
|
fcommand.helpRegister();
|
||||||
|
}
|
||||||
|
helpPlugin.registerCommand("help vampire", "help for the vampire plugin.", helpPlugin, true);
|
||||||
|
} else {
|
||||||
|
Factions.log(Level.WARNING, "'Help' plugin isn't detected. No /help support.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Commands
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||||
|
List<String> parameters = new ArrayList<String>(Arrays.asList(args));
|
||||||
|
this.handleCommand(sender, parameters);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleCommand(CommandSender sender, List<String> parameters) {
|
||||||
|
if (parameters.size() == 0) {
|
||||||
|
this.commands.get(0).execute(sender, parameters);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String commandName = parameters.get(0).toLowerCase();
|
||||||
|
parameters.remove(0);
|
||||||
|
|
||||||
|
for (FCommand fcommand : this.commands) {
|
||||||
|
if (fcommand.getAliases().contains(commandName)) {
|
||||||
|
fcommand.execute(sender, parameters);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(Conf.colorSystem+"Unknown faction command \""+commandName+"\". Try /help faction"); // TODO test help messages exists....
|
||||||
|
//TODO should we use internal help system instead?
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// Logging
|
||||||
|
// -------------------------------------------- //
|
||||||
|
public static void log(String msg) {
|
||||||
|
log(Level.INFO, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void log(Level level, String msg) {
|
||||||
|
Logger.getLogger("Minecraft").log(level, "["+instance.getDescription().getFullName()+"] "+msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
142
src/com/bukkit/mcteam/factions/commands/FCommand.java
Normal file
142
src/com/bukkit/mcteam/factions/commands/FCommand.java
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
package com.bukkit.mcteam.factions.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
import com.bukkit.mcteam.factions.FPlayer;
|
||||||
|
import com.bukkit.mcteam.factions.Factions;
|
||||||
|
|
||||||
|
public class FCommand {
|
||||||
|
public List<String> requiredParameters;
|
||||||
|
public List<String> optionalParameters;
|
||||||
|
|
||||||
|
public String permissions;
|
||||||
|
|
||||||
|
public String helpNameAndParams;
|
||||||
|
public String helpDescription;
|
||||||
|
|
||||||
|
public CommandSender sender;
|
||||||
|
public boolean senderMustBePlayer;
|
||||||
|
public Player player;
|
||||||
|
public FPlayer fplayer;
|
||||||
|
|
||||||
|
public List<String> parameters;
|
||||||
|
|
||||||
|
|
||||||
|
public FCommand() {
|
||||||
|
requiredParameters = new ArrayList<String>();
|
||||||
|
optionalParameters = new ArrayList<String>();
|
||||||
|
|
||||||
|
permissions = "";
|
||||||
|
|
||||||
|
senderMustBePlayer = false;
|
||||||
|
|
||||||
|
helpNameAndParams = "fail!";
|
||||||
|
helpDescription = "no description";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getAliases() {
|
||||||
|
String name = this.getClass().getName().toLowerCase();
|
||||||
|
if (name.lastIndexOf('.') > 0) {
|
||||||
|
name = name.substring(name.lastIndexOf('.')+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
name = name.substring(8);
|
||||||
|
|
||||||
|
ArrayList<String> aliases = new ArrayList<String>();
|
||||||
|
aliases.add(name);
|
||||||
|
|
||||||
|
return aliases;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseName() {
|
||||||
|
// TODO fetch from the plugin.yaml or something...
|
||||||
|
return "f";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void execute(CommandSender sender, List<String> parameters) {
|
||||||
|
this.sender = sender;
|
||||||
|
this.parameters = parameters;
|
||||||
|
|
||||||
|
if ( ! validateCall()) {
|
||||||
|
sendMessage("try /help factions");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.senderMustBePlayer) {
|
||||||
|
this.player = (Player)sender;
|
||||||
|
this.fplayer = FPlayer.get(this.player);
|
||||||
|
}
|
||||||
|
|
||||||
|
perform();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void perform() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void helpRegister() {
|
||||||
|
Factions.helpPlugin.registerCommand(this.getBaseName()+ " " +this.helpNameAndParams, this.helpDescription, Factions.instance, false, permissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMessage(String message) {
|
||||||
|
sender.sendMessage(Conf.colorSystem+message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMessage(List<String> messages) {
|
||||||
|
for(String message : messages) {
|
||||||
|
this.sendMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test if the number of params is correct.
|
||||||
|
public boolean validateCall() {
|
||||||
|
if( ! testPermission(sender)) {
|
||||||
|
sendMessage("You do not have sufficient permissions to use this command.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( this.senderMustBePlayer && ! (sender instanceof Player)) {
|
||||||
|
sendMessage("This command can only be used by ingame players.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parameters.size() < requiredParameters.size()) {
|
||||||
|
int missing = requiredParameters.size() - parameters.size();
|
||||||
|
sendMessage("Missing parameters. You must enter "+missing+" more.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parameters.size() > requiredParameters.size() + optionalParameters.size()) {
|
||||||
|
sendMessage("To many parameters.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean testPermission(CommandSender sender) {
|
||||||
|
if (sender.isOp()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.permissions.length() == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! (sender instanceof Player)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Factions.Permissions == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player)sender;
|
||||||
|
return Factions.Permissions.has(player, this.permissions);
|
||||||
|
}
|
||||||
|
}
|
45
src/com/bukkit/mcteam/factions/commands/FCommandLeave.java
Normal file
45
src/com/bukkit/mcteam/factions/commands/FCommandLeave.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package com.bukkit.mcteam.factions.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
import com.bukkit.mcteam.factions.FPlayer;
|
||||||
|
import com.bukkit.mcteam.factions.Faction;
|
||||||
|
|
||||||
|
public class FCommandLeave extends FCommand {
|
||||||
|
|
||||||
|
public FCommandLeave() {
|
||||||
|
requiredParameters = new ArrayList<String>();
|
||||||
|
optionalParameters = new ArrayList<String>();
|
||||||
|
|
||||||
|
permissions = "";
|
||||||
|
|
||||||
|
senderMustBePlayer = true;
|
||||||
|
|
||||||
|
helpNameAndParams = "leave";
|
||||||
|
helpDescription = "Leave your faction";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void perform() {
|
||||||
|
Faction faction = fplayer.getFaction();
|
||||||
|
|
||||||
|
ArrayList<String> errors = fplayer.leave();
|
||||||
|
fplayer.sendMessage(errors);
|
||||||
|
|
||||||
|
if (errors.size() == 0) {
|
||||||
|
faction.sendMessage(fplayer.getNameAndRelevant(faction)+Conf.colorSystem+" left your faction.");
|
||||||
|
fplayer.sendMessage("You left "+faction.getTag(fplayer));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (faction.getFollowersAll().size() == 0) {
|
||||||
|
// Remove this faction
|
||||||
|
for (FPlayer follower : FPlayer.getAll()) {
|
||||||
|
follower.sendMessage(Conf.colorSystem+"The faction "+faction.getTag(follower)+Conf.colorSystem+" was disbanded.");
|
||||||
|
}
|
||||||
|
Faction.delete(faction.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -7,6 +7,10 @@ import java.util.*;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.bukkit.mcteam.factions.Board;
|
||||||
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
import com.bukkit.mcteam.factions.FPlayer;
|
||||||
|
import com.bukkit.mcteam.factions.Faction;
|
||||||
import com.bukkit.mcteam.factions.Factions;
|
import com.bukkit.mcteam.factions.Factions;
|
||||||
import com.bukkit.mcteam.factions.util.*;
|
import com.bukkit.mcteam.factions.util.*;
|
||||||
import com.bukkit.mcteam.util.DiscUtil;
|
import com.bukkit.mcteam.util.DiscUtil;
|
||||||
@ -18,14 +22,14 @@ import com.bukkit.mcteam.gson.*;
|
|||||||
* The methods assume that all on disc is loaded into memory.
|
* The methods assume that all on disc is loaded into memory.
|
||||||
*/
|
*/
|
||||||
public class EM {
|
public class EM {
|
||||||
protected static Map<String, Follower> followers = new HashMap<String, Follower>(); // Where String is a lowercase playername
|
protected static Map<String, FPlayer> followers = new HashMap<String, FPlayer>(); // Where String is a lowercase playername
|
||||||
protected static Map<Integer, Faction> factions = new HashMap<Integer, Faction>(); // Where Integer is a primary auto increment key
|
protected static Map<Integer, Faction> factions = new HashMap<Integer, Faction>(); // Where Integer is a primary auto increment key
|
||||||
protected static Map<String, Board> boards = new HashMap<String, Board>(); // Where Long is the semi (sadly) unique world id.
|
protected static Map<String, Board> boards = new HashMap<String, Board>(); // Where Long is the semi (sadly) unique world id.
|
||||||
protected static int nextFactionId;
|
protected static int nextFactionId;
|
||||||
|
|
||||||
// hardcoded config
|
// hardcoded config
|
||||||
protected final static String ext = ".json";
|
protected final static String ext = ".json";
|
||||||
protected final static File folderBase = Factions.factions.getDataFolder();
|
protected final static File folderBase = Factions.instance.getDataFolder();
|
||||||
protected final static File folderFaction = new File(folderBase, "faction");
|
protected final static File folderFaction = new File(folderBase, "faction");
|
||||||
protected final static File folderFollower = new File(folderBase, "follower");
|
protected final static File folderFollower = new File(folderBase, "follower");
|
||||||
protected final static File folderBoard = new File(folderBase, "board");
|
protected final static File folderBoard = new File(folderBase, "board");
|
||||||
@ -218,7 +222,7 @@ public class EM {
|
|||||||
String name = jsonFile.getName();
|
String name = jsonFile.getName();
|
||||||
name = name.substring(0, name.length() - ext.length());
|
name = name.substring(0, name.length() - ext.length());
|
||||||
try {
|
try {
|
||||||
Follower follower = gson.fromJson(DiscUtil.read(jsonFile), Follower.class);
|
FPlayer follower = gson.fromJson(DiscUtil.read(jsonFile), FPlayer.class);
|
||||||
follower.id = name;
|
follower.id = name;
|
||||||
followers.put(follower.id, follower);
|
followers.put(follower.id, follower);
|
||||||
//Log.debug("loaded follower "+name);
|
//Log.debug("loaded follower "+name);
|
||||||
@ -229,7 +233,7 @@ public class EM {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Collection<Follower> followerGetAll() {
|
public static Collection<FPlayer> followerGetAll() {
|
||||||
return followers.values();
|
return followers.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +241,7 @@ public class EM {
|
|||||||
* This method returns the follower object for a player
|
* This method returns the follower object for a player
|
||||||
* A new Follower will be created if the player did not have one
|
* A new Follower will be created if the player did not have one
|
||||||
*/
|
*/
|
||||||
public static Follower followerGet(Player player) {
|
public static FPlayer followerGet(Player player) {
|
||||||
String key = followerKey(player);
|
String key = followerKey(player);
|
||||||
|
|
||||||
if (followers.containsKey(key)) {
|
if (followers.containsKey(key)) {
|
||||||
@ -272,9 +276,9 @@ public class EM {
|
|||||||
return player.getName();
|
return player.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static Follower followerCreate(Player player) {
|
protected static FPlayer followerCreate(Player player) {
|
||||||
Log.debug("Creating new follower "+followerKey(player));
|
Log.debug("Creating new follower "+followerKey(player));
|
||||||
Follower follower = new Follower();
|
FPlayer follower = new FPlayer();
|
||||||
follower.id = followerKey(player);
|
follower.id = followerKey(player);
|
||||||
followers.put(follower.id, follower);
|
followers.put(follower.id, follower);
|
||||||
follower.save();
|
follower.save();
|
||||||
|
@ -11,6 +11,11 @@ import org.bukkit.event.block.BlockInteractEvent;
|
|||||||
import org.bukkit.event.block.BlockListener;
|
import org.bukkit.event.block.BlockListener;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
|
||||||
|
import com.bukkit.mcteam.factions.Board;
|
||||||
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
import com.bukkit.mcteam.factions.Coord;
|
||||||
|
import com.bukkit.mcteam.factions.FPlayer;
|
||||||
|
import com.bukkit.mcteam.factions.Faction;
|
||||||
import com.bukkit.mcteam.factions.Factions;
|
import com.bukkit.mcteam.factions.Factions;
|
||||||
import com.bukkit.mcteam.factions.entities.*;
|
import com.bukkit.mcteam.factions.entities.*;
|
||||||
import com.bukkit.mcteam.factions.util.*;
|
import com.bukkit.mcteam.factions.util.*;
|
||||||
@ -35,7 +40,7 @@ public class FactionsBlockListener extends BlockListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//special cases, check for destruction of: torch, redstone torch (on & off), repeater (on & off), redstonewire, sapling, crops, sugar cane
|
//special cases, check for destruction of: torch, redstone torch (on & off), repeater (on & off), redstonewire, sapling, crops, sugar cane
|
||||||
private static Set<Integer> specialBlocks = new HashSet(Arrays.asList(
|
private static Set<Integer> specialBlocks = new HashSet<Integer>(Arrays.asList(
|
||||||
new Integer[] {50, 75, 76, 93, 94, 55, 6, 59, 83}
|
new Integer[] {50, 75, 76, 93, 94, 55, 6, 59, 83}
|
||||||
));
|
));
|
||||||
|
|
||||||
@ -62,7 +67,7 @@ public class FactionsBlockListener extends BlockListener {
|
|||||||
return true; // This is no faction territory. You may build or break stuff here.
|
return true; // This is no faction territory. You may build or break stuff here.
|
||||||
}
|
}
|
||||||
|
|
||||||
Follower me = Follower.get(player);
|
FPlayer me = FPlayer.get(player);
|
||||||
Faction myFaction = me.getFaction();
|
Faction myFaction = me.getFaction();
|
||||||
|
|
||||||
// Cancel if we are not in our own territory
|
// Cancel if we are not in our own territory
|
||||||
@ -105,7 +110,7 @@ public class FactionsBlockListener extends BlockListener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Follower me = Follower.get(player);
|
FPlayer me = FPlayer.get(player);
|
||||||
Faction myFaction = me.getFaction();
|
Faction myFaction = me.getFaction();
|
||||||
Coord blockCoord = Coord.from(block.getLocation());
|
Coord blockCoord = Coord.from(block.getLocation());
|
||||||
Faction otherFaction = Board.get(player.getWorld()).getFactionAt(blockCoord);
|
Faction otherFaction = Board.get(player.getWorld()).getFactionAt(blockCoord);
|
||||||
|
@ -14,11 +14,11 @@ import org.bukkit.event.entity.EntityDeathEvent;
|
|||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
import org.bukkit.event.entity.EntityListener;
|
import org.bukkit.event.entity.EntityListener;
|
||||||
|
|
||||||
|
import com.bukkit.mcteam.factions.Board;
|
||||||
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
import com.bukkit.mcteam.factions.Coord;
|
||||||
|
import com.bukkit.mcteam.factions.FPlayer;
|
||||||
import com.bukkit.mcteam.factions.Factions;
|
import com.bukkit.mcteam.factions.Factions;
|
||||||
import com.bukkit.mcteam.factions.entities.Board;
|
|
||||||
import com.bukkit.mcteam.factions.entities.Conf;
|
|
||||||
import com.bukkit.mcteam.factions.entities.Coord;
|
|
||||||
import com.bukkit.mcteam.factions.entities.Follower;
|
|
||||||
import com.bukkit.mcteam.factions.struct.Relation;
|
import com.bukkit.mcteam.factions.struct.Relation;
|
||||||
|
|
||||||
public class FactionsEntityListener extends EntityListener {
|
public class FactionsEntityListener extends EntityListener {
|
||||||
@ -35,7 +35,7 @@ public class FactionsEntityListener extends EntityListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) entity;
|
Player player = (Player) entity;
|
||||||
Follower follower = Follower.get(player);
|
FPlayer follower = FPlayer.get(player);
|
||||||
follower.onDeath();
|
follower.onDeath();
|
||||||
follower.sendMessage(Conf.colorSystem+"Your power is now "+follower.getPowerRounded()+" / "+follower.getPowerMaxRounded());
|
follower.sendMessage(Conf.colorSystem+"Your power is now "+follower.getPowerRounded()+" / "+follower.getPowerMaxRounded());
|
||||||
}
|
}
|
||||||
@ -98,8 +98,8 @@ public class FactionsEntityListener extends EntityListener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Follower defender = Follower.get((Player)damagee);
|
FPlayer defender = FPlayer.get((Player)damagee);
|
||||||
Follower attacker = Follower.get((Player)damager);
|
FPlayer attacker = FPlayer.get((Player)damager);
|
||||||
Relation relation = defender.getRelation(attacker);
|
Relation relation = defender.getRelation(attacker);
|
||||||
|
|
||||||
//Log.debug(attacker.getName() + " attacked " + defender.getName());
|
//Log.debug(attacker.getName() + " attacked " + defender.getName());
|
||||||
|
@ -11,7 +11,12 @@ import org.bukkit.event.player.PlayerItemEvent;
|
|||||||
import org.bukkit.event.player.PlayerListener;
|
import org.bukkit.event.player.PlayerListener;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
|
||||||
|
import com.bukkit.mcteam.factions.Board;
|
||||||
import com.bukkit.mcteam.factions.Commands;
|
import com.bukkit.mcteam.factions.Commands;
|
||||||
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
import com.bukkit.mcteam.factions.Coord;
|
||||||
|
import com.bukkit.mcteam.factions.FPlayer;
|
||||||
|
import com.bukkit.mcteam.factions.Faction;
|
||||||
import com.bukkit.mcteam.factions.Factions;
|
import com.bukkit.mcteam.factions.Factions;
|
||||||
import com.bukkit.mcteam.factions.entities.*;
|
import com.bukkit.mcteam.factions.entities.*;
|
||||||
import com.bukkit.mcteam.factions.util.TextUtil;
|
import com.bukkit.mcteam.factions.util.TextUtil;
|
||||||
@ -55,7 +60,7 @@ public class FactionsPlayerListener extends PlayerListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ... it was not a command. This means that it is a chat message!
|
// ... it was not a command. This means that it is a chat message!
|
||||||
Follower me = Follower.get(talkingPlayer);
|
FPlayer me = FPlayer.get(talkingPlayer);
|
||||||
|
|
||||||
// Is it a faction chat message?
|
// Is it a faction chat message?
|
||||||
if (me.isFactionChatting()) {
|
if (me.isFactionChatting()) {
|
||||||
@ -83,8 +88,8 @@ public class FactionsPlayerListener extends PlayerListener{
|
|||||||
// Why? Because the relations will differ.
|
// Why? Because the relations will differ.
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
for (Player listeningPlayer : Factions.factions.getServer().getOnlinePlayers()) {
|
for (Player listeningPlayer : Factions.instance.getServer().getOnlinePlayers()) {
|
||||||
Follower you = Follower.get(listeningPlayer);
|
FPlayer you = FPlayer.get(listeningPlayer);
|
||||||
String yourFormat = formatStart + me.getChatTag(you) + formatEnd;
|
String yourFormat = formatStart + me.getChatTag(you) + formatEnd;
|
||||||
listeningPlayer.sendMessage(String.format(yourFormat, talkingPlayer.getDisplayName(), msg));
|
listeningPlayer.sendMessage(String.format(yourFormat, talkingPlayer.getDisplayName(), msg));
|
||||||
}
|
}
|
||||||
@ -102,7 +107,7 @@ public class FactionsPlayerListener extends PlayerListener{
|
|||||||
ArrayList<String> tokens = TextUtil.split(msg.trim());
|
ArrayList<String> tokens = TextUtil.split(msg.trim());
|
||||||
if (Conf.aliasBase.contains(tokens.get(0))) {
|
if (Conf.aliasBase.contains(tokens.get(0))) {
|
||||||
tokens.remove(0);
|
tokens.remove(0);
|
||||||
Follower follower = Follower.get(player);
|
FPlayer follower = FPlayer.get(player);
|
||||||
Commands.base(follower, tokens);
|
Commands.base(follower, tokens);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -116,14 +121,14 @@ public class FactionsPlayerListener extends PlayerListener{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerQuit(PlayerEvent event) {
|
public void onPlayerQuit(PlayerEvent event) {
|
||||||
Follower follower = Follower.get(event.getPlayer());
|
FPlayer follower = FPlayer.get(event.getPlayer());
|
||||||
Log.debug("Saved follower on player quit: "+follower.getName());
|
Log.debug("Saved follower on player quit: "+follower.getName());
|
||||||
follower.save(); // We save the followers on logout in order to save their non autosaved state like power.
|
follower.save(); // We save the followers on logout in order to save their non autosaved state like power.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerMove(PlayerMoveEvent event) {
|
public void onPlayerMove(PlayerMoveEvent event) {
|
||||||
Follower me = Follower.get(event.getPlayer());
|
FPlayer me = FPlayer.get(event.getPlayer());
|
||||||
|
|
||||||
// Did we change coord?
|
// Did we change coord?
|
||||||
Coord coordFrom = me.lastStoodInCoord;
|
Coord coordFrom = me.lastStoodInCoord;
|
||||||
@ -168,7 +173,7 @@ public class FactionsPlayerListener extends PlayerListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//currently checking placement/use of: redstone, sign, flint&steel, beds (not currently detected by Bukkit), buckets (empty, water, lava), repeater (not currently detected by Bukkit)
|
//currently checking placement/use of: redstone, sign, flint&steel, beds (not currently detected by Bukkit), buckets (empty, water, lava), repeater (not currently detected by Bukkit)
|
||||||
private static Set<Integer> badItems = new HashSet(Arrays.asList(
|
private static Set<Integer> badItems = new HashSet<Integer>(Arrays.asList(
|
||||||
new Integer[] {331, 323, 259, 355, 325, 326, 327, 356}
|
new Integer[] {331, 323, 259, 355, 325, 326, 327, 356}
|
||||||
));
|
));
|
||||||
|
|
||||||
@ -185,7 +190,7 @@ public class FactionsPlayerListener extends PlayerListener{
|
|||||||
return true; // This is not faction territory. Use whatever you like here.
|
return true; // This is not faction territory. Use whatever you like here.
|
||||||
}
|
}
|
||||||
|
|
||||||
Follower me = Follower.get(player);
|
FPlayer me = FPlayer.get(player);
|
||||||
Faction myFaction = me.getFaction();
|
Faction myFaction = me.getFaction();
|
||||||
|
|
||||||
// Cancel if we are not in our own territory
|
// Cancel if we are not in our own territory
|
||||||
|
@ -2,7 +2,7 @@ package com.bukkit.mcteam.factions.struct;
|
|||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.entities.*;
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
|
||||||
public enum Relation {
|
public enum Relation {
|
||||||
MEMBER(3, "member"),
|
MEMBER(3, "member"),
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.bukkit.mcteam.factions.struct;
|
package com.bukkit.mcteam.factions.struct;
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.entities.Conf;
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
|
||||||
public enum Role {
|
public enum Role {
|
||||||
ADMIN(2, "admin"),
|
ADMIN(2, "admin"),
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package com.bukkit.mcteam.factions.util;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.Factions;
|
|
||||||
|
|
||||||
public class Log {
|
|
||||||
public static String prefix = Factions.factions.getDescription().getName();
|
|
||||||
public static ArrayList<Player> debuggers = new ArrayList<Player>();
|
|
||||||
public static int threshold = 10;
|
|
||||||
|
|
||||||
public static void log(int level, String prefix, String msg) {
|
|
||||||
if (threshold <= level) {
|
|
||||||
msg = Log.prefix+prefix+msg;
|
|
||||||
System.out.println(msg);
|
|
||||||
for(Player debugger : debuggers) {
|
|
||||||
debugger.sendMessage(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void debug (String msg) {
|
|
||||||
log(10, " debug: ", msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void info (String msg) {
|
|
||||||
log(20, " info: ", msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void warn (String msg) {
|
|
||||||
log(30, " warn: ", msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void severe (String msg) {
|
|
||||||
log(40, " severe: ", msg);
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,7 +3,7 @@ import java.util.*;
|
|||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
import com.bukkit.mcteam.factions.entities.*;
|
import com.bukkit.mcteam.factions.Conf;
|
||||||
|
|
||||||
public class TextUtil {
|
public class TextUtil {
|
||||||
public static String titleize(String str) {
|
public static String titleize(String str) {
|
||||||
|
@ -1,230 +0,0 @@
|
|||||||
package com.bukkit.mcteam.util;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The purpose of this tool is twofold:
|
|
||||||
* 1: Avoid client crashes due to bad color formating.
|
|
||||||
* 2: Make color continue on word wrapping
|
|
||||||
*
|
|
||||||
* In minecraft the degree sign is used as a prefix to another char to create a color.
|
|
||||||
* For example the code for white is "\u00A7f".
|
|
||||||
* The "\u00A7" is the unicode notation for the degree sign and the "f" means white.
|
|
||||||
*
|
|
||||||
* When does minecraft wrap the text? After how many chars?
|
|
||||||
* Answer:
|
|
||||||
* Because the font isn't monospace this differs depending on what you write.
|
|
||||||
* However we can fit 53 "M" without wrapping and the 54th char would then wrap (be at the beginning of the next line instead)
|
|
||||||
* As there is no broader char than "M" we can know for sure the minimum line length is 53.
|
|
||||||
* Note that this means the number of DISPLAYED chars per row is 53.
|
|
||||||
* A degree sign and the char after will NOT count, as they will not be displayed as chars.
|
|
||||||
*
|
|
||||||
* Good to know: Numbers have the same font width as an M.
|
|
||||||
*
|
|
||||||
* When does the client crash?
|
|
||||||
* Answer:
|
|
||||||
* When a row ends with a degree char and optionally another sign after.
|
|
||||||
* Another way to say the same: When a line ends with either a broken or valid color notation.
|
|
||||||
* AND
|
|
||||||
* The client will ALWAYS crash if the sign after the last displayed char in a row is a degree char.
|
|
||||||
* A goofy way to explatin it:
|
|
||||||
* For a line with only "M" and numbers, the fiftyfourth "displayed char" musn't be a degree sign.
|
|
||||||
*
|
|
||||||
* WARNING:
|
|
||||||
* Above is a hypothesis I have created based on what my experiments have shown.
|
|
||||||
* I am fairly sure it is correct but please help me test it further.
|
|
||||||
*/
|
|
||||||
public class ChatFixUtil {
|
|
||||||
public final static char deg = '\u00A7';
|
|
||||||
public final static int lineLength = 53;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method wraps the msg for you at row lengths of 53,
|
|
||||||
* avoids client crash scenarios and makes the previous color continue on
|
|
||||||
* the next line.
|
|
||||||
*
|
|
||||||
* The upsides with filtering your messages through this method are:
|
|
||||||
* - No client crashes.
|
|
||||||
* - Line wrapping with preserved color.
|
|
||||||
*
|
|
||||||
* The downsides are:
|
|
||||||
* - The width of the chat window will not be used to it's fullest.
|
|
||||||
* For example you can fit more that 53 commas (,) in a chatwindow row
|
|
||||||
* but the line would break after 53 displayed chars.
|
|
||||||
*
|
|
||||||
* Suggested usage:
|
|
||||||
* NO NEED TO USE the fix method for static help pages in your plugin.
|
|
||||||
* As the text is static you can make sure there is no client crash yourself
|
|
||||||
* and be able to use the full line length.
|
|
||||||
*
|
|
||||||
* DO USE in cases like where you output colored messages with playernames in your
|
|
||||||
* plugin. As the player names have different length there is potential for client crash.
|
|
||||||
*/
|
|
||||||
public static ArrayList<String> fix(String msg) {
|
|
||||||
// Make sure the end of msg is good
|
|
||||||
msg = cleanMsgEnding(msg);
|
|
||||||
|
|
||||||
ArrayList<String> ret = new ArrayList<String>();
|
|
||||||
int displen = 0; // The number of displayed chars in row so far.
|
|
||||||
String row = "";
|
|
||||||
String latestColor = null;
|
|
||||||
|
|
||||||
for (int i = 0; i < msg.length(); i++) {
|
|
||||||
if (displen == lineLength) {
|
|
||||||
// it is time to start on the next row!
|
|
||||||
ret.add(row);
|
|
||||||
displen = 0;
|
|
||||||
row = "";
|
|
||||||
if (latestColor != null) {
|
|
||||||
row += deg+latestColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
char c = msg.charAt(i);
|
|
||||||
|
|
||||||
if (c == deg) {
|
|
||||||
latestColor = String.valueOf(msg.charAt(i+1));
|
|
||||||
row += deg+latestColor;
|
|
||||||
i++;
|
|
||||||
} else {
|
|
||||||
displen += 1;
|
|
||||||
row += c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret.add(row);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<String> fix(List<String> messages) {
|
|
||||||
ArrayList<String> ret = new ArrayList<String>();
|
|
||||||
for(String message : messages) {
|
|
||||||
ret.addAll(fix(message));
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes the ending chars as long as they are deg or deg+'anychar' or a space
|
|
||||||
* As I see it we would never want those chars at the end of a msg.
|
|
||||||
*/
|
|
||||||
protected static String cleanMsgEnding (String msg) {
|
|
||||||
|
|
||||||
while (msg.length() > 0) {
|
|
||||||
if (msg.endsWith(String.valueOf(deg)) || msg.endsWith(" ")) {
|
|
||||||
msg = msg.substring(0, msg.length()-1);
|
|
||||||
} else if (msg.length() >= 2 && msg.charAt(msg.length() - 2) == deg) {
|
|
||||||
msg = msg.substring(0, msg.length()-2);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This test util assumes line break after 53 displayed chars.
|
|
||||||
* The fix method above breaks like that so this method should
|
|
||||||
* be a valid way to test if a message row would crash a client.
|
|
||||||
*/
|
|
||||||
public static String thisMsgWouldCrashClient(String str) {
|
|
||||||
// There would always be crash if we end with deg or deg+'anychar'
|
|
||||||
if (str.length() >= 1 && str.charAt(str.length() - 1) == deg) {
|
|
||||||
return "Crash: The str ends with deg.";
|
|
||||||
} else if (str.length() >= 2 && str.charAt(str.length() - 2) == deg) {
|
|
||||||
return "Crash: The str ends with deg+'anychar'.";
|
|
||||||
}
|
|
||||||
|
|
||||||
int displayedChars = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < str.length(); i++) {
|
|
||||||
char c = str.charAt(i);
|
|
||||||
if (c == deg && displayedChars == lineLength) {
|
|
||||||
return "Crash: Deg as fiftyforth \"displayed\" char";
|
|
||||||
} else if (c == deg) {
|
|
||||||
i++; // this and next: they are not displayed... skip them...
|
|
||||||
} else {
|
|
||||||
displayedChars += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "all ok";
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------//
|
|
||||||
// Methods for effectively sending messages
|
|
||||||
//----------------------------------------------//
|
|
||||||
//----------------------------------------------//
|
|
||||||
// One player
|
|
||||||
//----------------------------------------------//
|
|
||||||
public static void sendMessage(Player player, String message, boolean fix) {
|
|
||||||
if (fix) {
|
|
||||||
List<String> messages = ChatFixUtil.fix(message);
|
|
||||||
sendMessage(player, messages, false);
|
|
||||||
} else {
|
|
||||||
if (player != null) {
|
|
||||||
player.sendMessage(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static void sendMessage(Player player, List<String> messages, boolean fix) {
|
|
||||||
if (fix) {
|
|
||||||
messages = ChatFixUtil.fix(messages);
|
|
||||||
}
|
|
||||||
for (String message : messages) {
|
|
||||||
sendMessage(player, message, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static void sendMessage(Player player, String message) {
|
|
||||||
sendMessage(player, message, true);
|
|
||||||
}
|
|
||||||
public static void sendMessage(Player player, List<String> messages) {
|
|
||||||
sendMessage(player, messages, true);
|
|
||||||
}
|
|
||||||
//----------------------------------------------//
|
|
||||||
// Many Players
|
|
||||||
//----------------------------------------------//
|
|
||||||
public static void sendMessage(Collection<Player> players, String message, boolean fix) {
|
|
||||||
if (fix) {
|
|
||||||
List<String> messages = ChatFixUtil.fix(message);
|
|
||||||
sendMessage(players, messages, false);
|
|
||||||
} else {
|
|
||||||
for (Player player : players) {
|
|
||||||
sendMessage(player, message, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static void sendMessage(Collection<Player> players, List<String> messages, boolean fix) {
|
|
||||||
if (fix) {
|
|
||||||
messages = ChatFixUtil.fix(messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String message : messages) {
|
|
||||||
sendMessage(players, message, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static void sendMessage(Collection<Player> players, String message) {
|
|
||||||
sendMessage(players, message, true);
|
|
||||||
}
|
|
||||||
public static void sendMessage(Collection<Player> players, List<String> messages) {
|
|
||||||
sendMessage(players, messages, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user