mirror of
https://github.com/MassiveCraft/Factions.git
synced 2024-09-18 01:01:02 +02:00
697e0cf466
When a faction is disbanded or has peaceful status added or removed, all online players are now notified Added further debug output if an UnknownFormatConversionException is triggered during relational chat messages, to help track down cause
177 lines
5.2 KiB
Java
177 lines
5.2 KiB
Java
package com.massivecraft.factions;
|
|
|
|
import java.util.Set;
|
|
|
|
import org.bukkit.plugin.Plugin;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import com.massivecraft.factions.struct.Relation;
|
|
import com.massivecraft.factions.struct.Role;
|
|
|
|
import org.getspout.spoutapi.player.AppearanceManager;
|
|
import org.getspout.spoutapi.player.SpoutPlayer;
|
|
import org.getspout.spoutapi.SpoutManager;
|
|
|
|
|
|
public class SpoutFeatures {
|
|
private transient static AppearanceManager spoutApp;
|
|
private transient static boolean spoutMe = false;
|
|
|
|
public static void setup(Factions factions) {
|
|
Plugin test = factions.getServer().getPluginManager().getPlugin("Spout");
|
|
|
|
if (test != null && test.isEnabled()) {
|
|
setAvailable(true, test.getDescription().getFullName());
|
|
}
|
|
else {
|
|
setAvailable(false, "");
|
|
}
|
|
}
|
|
|
|
// set integration availability
|
|
public static void setAvailable(boolean enable, String pluginName) {
|
|
spoutMe = enable;
|
|
if (spoutMe) {
|
|
spoutApp = SpoutManager.getAppearanceManager();
|
|
Factions.log("Found and will use features of "+pluginName);
|
|
}
|
|
else {
|
|
spoutApp = null;
|
|
}
|
|
}
|
|
|
|
// If any Spout feature is enabled in conf.json, and we're successfully hooked into it
|
|
public static boolean enabled() {
|
|
return spoutMe && (
|
|
Conf.spoutFactionTagsOverNames
|
|
|| Conf.spoutFactionTitlesOverNames
|
|
|| Conf.spoutFactionAdminCapes
|
|
|| Conf.spoutFactionModeratorCapes
|
|
);
|
|
}
|
|
|
|
|
|
// update all appearances between every player
|
|
public static void updateAppearances() {
|
|
if (!enabled()) {
|
|
return;
|
|
}
|
|
|
|
Set<FPlayer> players = FPlayer.getAllOnline();
|
|
Faction factionA;
|
|
|
|
for (FPlayer playerA : players) {
|
|
factionA = playerA.getFaction();
|
|
for (FPlayer playerB : players) {
|
|
updateSingle(playerB.getPlayer(), playerA.getPlayer(), factionA.getRelation(playerB), factionA, playerA.getTitle(), playerA.getRole());
|
|
}
|
|
}
|
|
}
|
|
|
|
// update all appearances related to a specific player
|
|
public static void updateAppearances(Player player) {
|
|
if (!enabled() || player == null) {
|
|
return;
|
|
}
|
|
|
|
Set<FPlayer> players = FPlayer.getAllOnline();
|
|
FPlayer playerA = FPlayer.get(player);
|
|
Faction factionA = playerA.getFaction();
|
|
|
|
for (FPlayer playerB : players) {
|
|
Player player2 = playerB.getPlayer();
|
|
Relation rel = factionA.getRelation(playerB);
|
|
updateSingle(player2, player, rel, factionA, playerA.getTitle(), playerA.getRole());
|
|
updateSingle(player, player2, rel, playerB.getFaction(), playerB.getTitle(), playerB.getRole());
|
|
}
|
|
}
|
|
|
|
// update all appearances related to a single faction
|
|
public static void updateAppearances(Faction faction) {
|
|
if (!enabled() || faction == null) {
|
|
return;
|
|
}
|
|
|
|
Set<FPlayer> players = FPlayer.getAllOnline();
|
|
Faction factionA, factionB;
|
|
|
|
for (FPlayer playerA : players) {
|
|
factionA = playerA.getFaction();
|
|
|
|
for (FPlayer playerB : players) {
|
|
factionB = playerB.getFaction();
|
|
if (factionA != faction && factionB != faction) {
|
|
continue;
|
|
}
|
|
updateSingle(playerB.getPlayer(), playerA.getPlayer(), factionA.getRelation(factionB), factionA, playerA.getTitle(), playerA.getRole());
|
|
}
|
|
}
|
|
}
|
|
|
|
// update all appearances between two factions
|
|
public static void updateAppearances(Faction factionA, Faction factionB) {
|
|
if (!enabled() || factionA == null || factionB == null) {
|
|
return;
|
|
}
|
|
|
|
for (FPlayer playerA : factionA.getFPlayersWhereOnline(true)) {
|
|
for (FPlayer playerB : factionB.getFPlayersWhereOnline(true)) {
|
|
Player player1 = playerA.getPlayer();
|
|
Player player2 = playerB.getPlayer();
|
|
Relation rel = factionA.getRelation(factionB);
|
|
updateSingle(player2, player1, rel, factionA, playerA.getTitle(), playerA.getRole());
|
|
updateSingle(player1, player2, rel, factionB, playerB.getTitle(), playerB.getRole());
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// update a single appearance; internal use only by above public methods
|
|
private static void updateSingle(Player viewer, Player viewed, Relation relation, Faction viewedFaction, String viewedTitle, Role viewedRole) {
|
|
if (viewer == null || viewed == null) {
|
|
return;
|
|
}
|
|
|
|
SpoutPlayer sPlayer = SpoutManager.getPlayer(viewer);
|
|
|
|
if (Conf.spoutFactionTagsOverNames || Conf.spoutFactionTitlesOverNames) {
|
|
String addTag = "";
|
|
if (Conf.spoutFactionTagsOverNames) {
|
|
addTag += !viewedFaction.isNormal() ? "Factionless" : viewedFaction.getTag(relation.getColor().toString() + "[") + "]";
|
|
}
|
|
String rolePrefix = viewedRole.getPrefix();
|
|
if (Conf.spoutFactionTitlesOverNames && (!viewedTitle.isEmpty() || !rolePrefix.isEmpty())) {
|
|
addTag += (addTag.isEmpty() ? "" : " ") + viewedRole.getPrefix() + viewedTitle;
|
|
}
|
|
spoutApp.setPlayerTitle(sPlayer, viewed, addTag + "\n" + viewed.getDisplayName());
|
|
}
|
|
|
|
if (
|
|
(Conf.spoutFactionAdminCapes && viewedRole.equals(Role.ADMIN))
|
|
|| (Conf.spoutFactionModeratorCapes && viewedRole.equals(Role.MODERATOR))
|
|
) {
|
|
String cape = "";
|
|
if (!viewedFaction.isNormal()) {
|
|
// yeah, no cape if no faction
|
|
}
|
|
else if (viewedFaction.isPeaceful()) {
|
|
cape = Conf.capePeaceful;
|
|
}
|
|
else if (relation.isNeutral()) {
|
|
cape = Conf.capeNeutral;
|
|
}
|
|
else if (relation.isMember()) {
|
|
cape = Conf.capeMember;
|
|
}
|
|
else if (relation.isEnemy()) {
|
|
cape = Conf.capeEnemy;
|
|
}
|
|
else if (relation.isAlly()) {
|
|
cape = Conf.capeAlly;
|
|
}
|
|
spoutApp.setPlayerCloak(sPlayer, viewed, cape);
|
|
}
|
|
}
|
|
|
|
}
|