1.4-STABLE
------------------------------------------------------------------ No Enderpearls in fly fixed - The option was bugged, so if it was true it would do the opposite. Improved /f map visuals and title! Title fadeout time, showtime, and fadeintime options added for 1.9+ servers Fixed Bug in /f upgrades where the slots option for exp would move the spawner instead. Added Faction chest, an upgradable shared "enderchest" for factions to share! Added some more entries into /f help in config. Added Upgrade for faction chest Banner pattern storage ------------------------------------------------------------------
This commit is contained in:
parent
f30cd44b54
commit
d95c80ae5b
@ -13,306 +13,315 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public interface Faction extends EconomyParticipator {
|
||||
public HashMap<String, List<String>> getAnnouncements();
|
||||
HashMap<String, List<String>> getAnnouncements();
|
||||
|
||||
public ConcurrentHashMap<String, LazyLocation> getWarps();
|
||||
ConcurrentHashMap<String, LazyLocation> getWarps();
|
||||
|
||||
public LazyLocation getWarp(String name);
|
||||
LazyLocation getWarp(String name);
|
||||
|
||||
public void setWarp(String name, LazyLocation loc);
|
||||
void setWarp(String name, LazyLocation loc);
|
||||
|
||||
public boolean isWarp(String name);
|
||||
boolean isWarp(String name);
|
||||
|
||||
public boolean hasWarpPassword(String warp);
|
||||
boolean hasWarpPassword(String warp);
|
||||
|
||||
public boolean isWarpPassword(String warp, String password);
|
||||
boolean isWarpPassword(String warp, String password);
|
||||
|
||||
public void setWarpPassword(String warp, String password);
|
||||
void setWarpPassword(String warp, String password);
|
||||
|
||||
public boolean removeWarp(String name);
|
||||
boolean removeWarp(String name);
|
||||
|
||||
public void clearWarps();
|
||||
void clearWarps();
|
||||
|
||||
public int getMaxVaults();
|
||||
int getMaxVaults();
|
||||
|
||||
public void setMaxVaults(int value);
|
||||
void setMaxVaults(int value);
|
||||
|
||||
public void addAnnouncement(FPlayer fPlayer, String msg);
|
||||
void addAnnouncement(FPlayer fPlayer, String msg);
|
||||
|
||||
public void sendUnreadAnnouncements(FPlayer fPlayer);
|
||||
void sendUnreadAnnouncements(FPlayer fPlayer);
|
||||
|
||||
public void removeAnnouncements(FPlayer fPlayer);
|
||||
void removeAnnouncements(FPlayer fPlayer);
|
||||
|
||||
public Set<String> getInvites();
|
||||
Set<String> getInvites();
|
||||
|
||||
public String getId();
|
||||
String getId();
|
||||
|
||||
public void invite(FPlayer fplayer);
|
||||
void setId(String id);
|
||||
|
||||
public void deinvite(FPlayer fplayer);
|
||||
void invite(FPlayer fplayer);
|
||||
|
||||
public void setUpgrades(String key, int level);
|
||||
void deinvite(FPlayer fplayer);
|
||||
|
||||
public int getUpgrade(String key);
|
||||
void setUpgrades(String key, int level);
|
||||
|
||||
public boolean isInvited(FPlayer fplayer);
|
||||
int getUpgrade(String key);
|
||||
|
||||
public void ban(FPlayer target, FPlayer banner);
|
||||
boolean isInvited(FPlayer fplayer);
|
||||
|
||||
public void unban(FPlayer player);
|
||||
void ban(FPlayer target, FPlayer banner);
|
||||
|
||||
public boolean isBanned(FPlayer player);
|
||||
void unban(FPlayer player);
|
||||
|
||||
public Set<BanInfo> getBannedPlayers();
|
||||
boolean isBanned(FPlayer player);
|
||||
|
||||
public HashMap<Integer,String> getRulesMap();
|
||||
Set<BanInfo> getBannedPlayers();
|
||||
|
||||
public void setRule(int index, String rule);
|
||||
HashMap<Integer, String> getRulesMap();
|
||||
|
||||
public void addRule(String rule);
|
||||
void setRule(int index, String rule);
|
||||
|
||||
public void removeRule(int index);
|
||||
void addRule(String rule);
|
||||
|
||||
public void clearRules();
|
||||
void removeRule(int index);
|
||||
|
||||
public void setCheckpoint(Location location);
|
||||
void clearRules();
|
||||
|
||||
public Location getCheckpoint();
|
||||
Location getCheckpoint();
|
||||
|
||||
public void addTnt(int amt);
|
||||
void setCheckpoint(Location location);
|
||||
|
||||
public void takeTnt(int amt);
|
||||
void addTnt(int amt);
|
||||
|
||||
public Location getVault();
|
||||
void takeTnt(int amt);
|
||||
|
||||
public void setVault(Location vaultLocation);
|
||||
Location getVault();
|
||||
|
||||
public int getTnt();
|
||||
void setVault(Location vaultLocation);
|
||||
|
||||
public String getRule(int index);
|
||||
Inventory getChest();
|
||||
|
||||
public boolean getOpen();
|
||||
void setChest(Inventory inventory);
|
||||
|
||||
public void setOpen(boolean isOpen);
|
||||
void setBannerPattern(ItemStack banner);
|
||||
|
||||
public boolean isPeaceful();
|
||||
ItemStack getBanner();
|
||||
|
||||
public void setPeaceful(boolean isPeaceful);
|
||||
int getTnt();
|
||||
|
||||
public void setPeacefulExplosionsEnabled(boolean val);
|
||||
String getRule(int index);
|
||||
|
||||
public boolean getPeacefulExplosionsEnabled();
|
||||
boolean getOpen();
|
||||
|
||||
public boolean noExplosionsInTerritory();
|
||||
void setOpen(boolean isOpen);
|
||||
|
||||
public boolean isPermanent();
|
||||
boolean isPeaceful();
|
||||
|
||||
public void setPermanent(boolean isPermanent);
|
||||
void setPeaceful(boolean isPeaceful);
|
||||
|
||||
public String getTag();
|
||||
boolean getPeacefulExplosionsEnabled();
|
||||
|
||||
public String getTag(String prefix);
|
||||
void setPeacefulExplosionsEnabled(boolean val);
|
||||
|
||||
public String getTag(Faction otherFaction);
|
||||
boolean noExplosionsInTerritory();
|
||||
|
||||
public String getTag(FPlayer otherFplayer);
|
||||
boolean isPermanent();
|
||||
|
||||
public void setTag(String str);
|
||||
void setPermanent(boolean isPermanent);
|
||||
|
||||
public String getComparisonTag();
|
||||
String getTag();
|
||||
|
||||
public String getDescription();
|
||||
void setTag(String str);
|
||||
|
||||
public void setDescription(String value);
|
||||
String getTag(String prefix);
|
||||
|
||||
public void setHome(Location home);
|
||||
String getTag(Faction otherFaction);
|
||||
|
||||
public boolean hasHome();
|
||||
String getTag(FPlayer otherFplayer);
|
||||
|
||||
public Location getHome();
|
||||
String getComparisonTag();
|
||||
|
||||
public long getFoundedDate();
|
||||
String getDescription();
|
||||
|
||||
public void setFoundedDate(long newDate);
|
||||
void setDescription(String value);
|
||||
|
||||
public void confirmValidHome();
|
||||
boolean hasHome();
|
||||
|
||||
public String getAccountId();
|
||||
Location getHome();
|
||||
|
||||
public Integer getPermanentPower();
|
||||
void setHome(Location home);
|
||||
|
||||
public void setPermanentPower(Integer permanentPower);
|
||||
long getFoundedDate();
|
||||
|
||||
public boolean hasPermanentPower();
|
||||
void setFoundedDate(long newDate);
|
||||
|
||||
public double getPowerBoost();
|
||||
void confirmValidHome();
|
||||
|
||||
public void setPowerBoost(double powerBoost);
|
||||
String getAccountId();
|
||||
|
||||
public boolean noPvPInTerritory();
|
||||
Integer getPermanentPower();
|
||||
|
||||
public boolean noMonstersInTerritory();
|
||||
void setPermanentPower(Integer permanentPower);
|
||||
|
||||
public boolean isNormal();
|
||||
boolean hasPermanentPower();
|
||||
|
||||
double getPowerBoost();
|
||||
|
||||
void setPowerBoost(double powerBoost);
|
||||
|
||||
boolean noPvPInTerritory();
|
||||
|
||||
boolean noMonstersInTerritory();
|
||||
|
||||
boolean isNormal();
|
||||
|
||||
@Deprecated
|
||||
public boolean isNone();
|
||||
boolean isNone();
|
||||
|
||||
public boolean isWilderness();
|
||||
boolean isWilderness();
|
||||
|
||||
public boolean isSafeZone();
|
||||
boolean isSafeZone();
|
||||
|
||||
public boolean isWarZone();
|
||||
boolean isWarZone();
|
||||
|
||||
public boolean isPlayerFreeType();
|
||||
boolean isPlayerFreeType();
|
||||
|
||||
public boolean isPowerFrozen();
|
||||
boolean isPowerFrozen();
|
||||
|
||||
public void setLastDeath(long time);
|
||||
void setLastDeath(long time);
|
||||
|
||||
public int getKills();
|
||||
int getKills();
|
||||
|
||||
public int getDeaths();
|
||||
int getDeaths();
|
||||
|
||||
public Access getAccess(Permissable permissable, PermissableAction permissableAction);
|
||||
Access getAccess(Permissable permissable, PermissableAction permissableAction);
|
||||
|
||||
public Access getAccess(FPlayer player, PermissableAction permissableAction);
|
||||
Access getAccess(FPlayer player, PermissableAction permissableAction);
|
||||
|
||||
public void setPermission(Permissable permissable, PermissableAction permissableAction, Access access);
|
||||
void setPermission(Permissable permissable, PermissableAction permissableAction, Access access);
|
||||
|
||||
public void resetPerms();
|
||||
|
||||
public Map<Permissable, Map<PermissableAction, Access>> getPermissions();
|
||||
void resetPerms();
|
||||
|
||||
// -------------------------------
|
||||
// Relation and relation colors
|
||||
// -------------------------------
|
||||
|
||||
@Override
|
||||
public String describeTo(RelationParticipator that, boolean ucfirst);
|
||||
Map<Permissable, Map<PermissableAction, Access>> getPermissions();
|
||||
|
||||
@Override
|
||||
public String describeTo(RelationParticipator that);
|
||||
String describeTo(RelationParticipator that, boolean ucfirst);
|
||||
|
||||
@Override
|
||||
public Relation getRelationTo(RelationParticipator rp);
|
||||
String describeTo(RelationParticipator that);
|
||||
|
||||
@Override
|
||||
public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful);
|
||||
Relation getRelationTo(RelationParticipator rp);
|
||||
|
||||
@Override
|
||||
public ChatColor getColorTo(RelationParticipator rp);
|
||||
Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful);
|
||||
|
||||
public Relation getRelationWish(Faction otherFaction);
|
||||
@Override
|
||||
ChatColor getColorTo(RelationParticipator rp);
|
||||
|
||||
public void setRelationWish(Faction otherFaction, Relation relation);
|
||||
Relation getRelationWish(Faction otherFaction);
|
||||
|
||||
public int getRelationCount(Relation relation);
|
||||
void setRelationWish(Faction otherFaction, Relation relation);
|
||||
|
||||
int getRelationCount(Relation relation);
|
||||
|
||||
// ----------------------------------------------//
|
||||
// Power
|
||||
// ----------------------------------------------//
|
||||
public double getPower();
|
||||
double getPower();
|
||||
|
||||
public double getPowerMax();
|
||||
double getPowerMax();
|
||||
|
||||
public int getPowerRounded();
|
||||
int getPowerRounded();
|
||||
|
||||
public int getPowerMaxRounded();
|
||||
int getPowerMaxRounded();
|
||||
|
||||
public int getLandRounded();
|
||||
int getLandRounded();
|
||||
|
||||
public int getLandRoundedInWorld(String worldName);
|
||||
|
||||
public boolean hasLandInflation();
|
||||
int getLandRoundedInWorld(String worldName);
|
||||
|
||||
// -------------------------------
|
||||
// FPlayers
|
||||
// -------------------------------
|
||||
|
||||
boolean hasLandInflation();
|
||||
|
||||
// maintain the reference list of FPlayers in this faction
|
||||
public void refreshFPlayers();
|
||||
void refreshFPlayers();
|
||||
|
||||
public boolean addFPlayer(FPlayer fplayer);
|
||||
boolean addFPlayer(FPlayer fplayer);
|
||||
|
||||
public boolean removeFPlayer(FPlayer fplayer);
|
||||
boolean removeFPlayer(FPlayer fplayer);
|
||||
|
||||
public int getSize();
|
||||
int getSize();
|
||||
|
||||
public Set<FPlayer> getFPlayers();
|
||||
Set<FPlayer> getFPlayers();
|
||||
|
||||
public Set<FPlayer> getFPlayersWhereOnline(boolean online);
|
||||
Set<FPlayer> getFPlayersWhereOnline(boolean online);
|
||||
|
||||
public Set<FPlayer> getFPlayersWhereOnline(boolean online, FPlayer viewer);
|
||||
Set<FPlayer> getFPlayersWhereOnline(boolean online, FPlayer viewer);
|
||||
|
||||
public FPlayer getFPlayerAdmin();
|
||||
FPlayer getFPlayerAdmin();
|
||||
|
||||
public ArrayList<FPlayer> getFPlayersWhereRole(Role role);
|
||||
ArrayList<FPlayer> getFPlayersWhereRole(Role role);
|
||||
|
||||
public ArrayList<Player> getOnlinePlayers();
|
||||
ArrayList<Player> getOnlinePlayers();
|
||||
|
||||
// slightly faster check than getOnlinePlayers() if you just want to see if
|
||||
// there are any players online
|
||||
public boolean hasPlayersOnline();
|
||||
boolean hasPlayersOnline();
|
||||
|
||||
public void memberLoggedOff();
|
||||
void memberLoggedOff();
|
||||
|
||||
// used when current leader is about to be removed from the faction;
|
||||
// promotes new leader, or disbands faction if no other members left
|
||||
public void promoteNewLeader();
|
||||
void promoteNewLeader();
|
||||
|
||||
public Role getDefaultRole();
|
||||
Role getDefaultRole();
|
||||
|
||||
public void setDefaultRole(Role role);
|
||||
void setDefaultRole(Role role);
|
||||
|
||||
// ----------------------------------------------//
|
||||
// Messages
|
||||
// ----------------------------------------------//
|
||||
public void msg(String message, Object... args);
|
||||
void msg(String message, Object... args);
|
||||
|
||||
public void sendMessage(String message);
|
||||
|
||||
public void sendMessage(List<String> messages);
|
||||
void sendMessage(String message);
|
||||
|
||||
// ----------------------------------------------//
|
||||
// Ownership of specific claims
|
||||
// ----------------------------------------------//
|
||||
|
||||
public Map<FLocation, Set<String>> getClaimOwnership();
|
||||
void sendMessage(List<String> messages);
|
||||
|
||||
public void clearAllClaimOwnership();
|
||||
Map<FLocation, Set<String>> getClaimOwnership();
|
||||
|
||||
public void clearClaimOwnership(FLocation loc);
|
||||
void clearAllClaimOwnership();
|
||||
|
||||
public void clearClaimOwnership(FPlayer player);
|
||||
void clearClaimOwnership(FLocation loc);
|
||||
|
||||
public int getCountOfClaimsWithOwners();
|
||||
void clearClaimOwnership(FPlayer player);
|
||||
|
||||
public boolean doesLocationHaveOwnersSet(FLocation loc);
|
||||
int getCountOfClaimsWithOwners();
|
||||
|
||||
public boolean isPlayerInOwnerList(FPlayer player, FLocation loc);
|
||||
boolean doesLocationHaveOwnersSet(FLocation loc);
|
||||
|
||||
public void setPlayerAsOwner(FPlayer player, FLocation loc);
|
||||
boolean isPlayerInOwnerList(FPlayer player, FLocation loc);
|
||||
|
||||
public void removePlayerAsOwner(FPlayer player, FLocation loc);
|
||||
void setPlayerAsOwner(FPlayer player, FLocation loc);
|
||||
|
||||
public Set<String> getOwnerList(FLocation loc);
|
||||
void removePlayerAsOwner(FPlayer player, FLocation loc);
|
||||
|
||||
public String getOwnerListString(FLocation loc);
|
||||
Set<String> getOwnerList(FLocation loc);
|
||||
|
||||
public boolean playerHasOwnershipRights(FPlayer fplayer, FLocation loc);
|
||||
String getOwnerListString(FLocation loc);
|
||||
|
||||
boolean playerHasOwnershipRights(FPlayer fplayer, FLocation loc);
|
||||
|
||||
// ----------------------------------------------//
|
||||
// Persistance and entity management
|
||||
// ----------------------------------------------//
|
||||
public void remove();
|
||||
void remove();
|
||||
|
||||
public Set<FLocation> getAllClaims();
|
||||
|
||||
public void setId(String id);
|
||||
Set<FLocation> getAllClaims();
|
||||
}
|
||||
|
@ -99,6 +99,9 @@ public class P extends MPlugin {
|
||||
}
|
||||
|
||||
public boolean mc17 = false;
|
||||
public boolean mc18 = false;
|
||||
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
if (!preEnable()) {
|
||||
@ -150,8 +153,11 @@ public class P extends MPlugin {
|
||||
|
||||
int version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]);
|
||||
if (version == 7) {
|
||||
P.p.log("Version 1.7 found, disabling banners, itemflags inside GUIs, and Titles.");
|
||||
P.p.log("Minecraft Version 1.7 found, disabling banners, itemflags inside GUIs, and Titles.");
|
||||
mc17 = true;
|
||||
} else if (version == 8) {
|
||||
P.p.log("Minecraft Version 1.8 found, Title Fadeouttime etc will not be configurable.");
|
||||
mc18 = true;
|
||||
}
|
||||
|
||||
// Register Event Handlers
|
||||
@ -345,11 +351,6 @@ public class P extends MPlugin {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Does player have Faction Chat enabled? If so, chat plugins should preferably not do channels,
|
||||
// local chat, or anything else which targets individual recipients, so Faction Chat can be done
|
||||
public boolean isPlayerFactionChatting(Player player) {
|
||||
|
@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class CmdBanner extends FCommand {
|
||||
public CmdBanner() {
|
||||
@ -39,11 +40,24 @@ public class CmdBanner extends FCommand {
|
||||
return;
|
||||
}
|
||||
takeMoney(fme, P.p.getConfig().getInt("fbanners.Banner-Cost", 5000));
|
||||
ItemStack warBanner = P.p.createItem(Material.BANNER, 1, (short) 1, P.p.getConfig().getString("fbanners.Item.Name"), P.p.getConfig().getStringList("fbanners.Item.Lore"));
|
||||
me.getInventory().addItem(warBanner);
|
||||
|
||||
//ItemStack warBanner = P.p.createItem(Material.BANNER, 1, (short) 1, P.p.getConfig().getString("fbanners.Item.Name"), P.p.getConfig().getStringList("fbanners.Item.Lore"));
|
||||
//BannerMeta bannerMeta = (BannerMeta) warBanner.getItemMeta();
|
||||
ItemStack warBanner = fme.getFaction().getBanner();
|
||||
if (warBanner != null) {
|
||||
ItemMeta warmeta = warBanner.getItemMeta();
|
||||
warmeta.setDisplayName(P.p.getConfig().getString("fbanners.Item.Name"));
|
||||
warmeta.setLore(P.p.getConfig().getStringList("fbanners.Item.Lore"));
|
||||
warBanner.setItemMeta(warmeta);
|
||||
me.getInventory().addItem(warBanner);
|
||||
|
||||
} else {
|
||||
warBanner = P.p.createItem(Material.BANNER, 1, (short) 1, P.p.getConfig().getString("fbanners.Item.Name"), P.p.getConfig().getStringList("fbanners.Item.Lore"));
|
||||
}
|
||||
fme.msg(TL.COMMAND_BANNER_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
public boolean hasMoney(FPlayer fme, int amt) {
|
||||
Economy econ = P.p.getEcon();
|
||||
if (econ.getBalance(fme.getPlayer()) >= amt) {
|
||||
|
48
src/main/java/com/massivecraft/factions/cmd/CmdChest.java
Normal file
48
src/main/java/com/massivecraft/factions/cmd/CmdChest.java
Normal file
@ -0,0 +1,48 @@
|
||||
package com.massivecraft.factions.cmd;
|
||||
|
||||
import com.massivecraft.factions.P;
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.zcore.fperms.Access;
|
||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
|
||||
public class CmdChest extends FCommand {
|
||||
|
||||
public CmdChest() {
|
||||
this.aliases.add("chest");
|
||||
|
||||
//this.requiredArgs.add("");
|
||||
|
||||
|
||||
this.permission = Permission.CHEST.node;
|
||||
this.disableOnLock = false;
|
||||
|
||||
senderMustBePlayer = true;
|
||||
senderMustBeMember = true;
|
||||
senderMustBeModerator = false;
|
||||
senderMustBeAdmin = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void perform() {
|
||||
|
||||
if (!P.p.getConfig().getBoolean("fchest.Enabled")) {
|
||||
fme.sendMessage("This command is disabled!");
|
||||
return;
|
||||
}
|
||||
Access access = fme.getFaction().getAccess(fme, PermissableAction.CHEST);
|
||||
if (access.equals(Access.DENY)) {
|
||||
fme.msg(TL.GENERIC_NOPERMISSION, "chest");
|
||||
}
|
||||
//debug Bukkit.broadcastMessage(fme.getFaction().getUpgrade("Chest") + "");
|
||||
|
||||
me.openInventory(fme.getFaction().getChest());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TL getUsageTranslation() {
|
||||
return TL.COMMAND_VAULT_DESCRIPTION;
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.massivecraft.factions.cmd;
|
||||
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
import org.bukkit.Material;
|
||||
|
||||
public class CmdSetBanner extends FCommand {
|
||||
|
||||
public CmdSetBanner() {
|
||||
super();
|
||||
aliases.add("setbanner");
|
||||
|
||||
permission = Permission.BANNER.node;
|
||||
|
||||
senderMustBePlayer = true;
|
||||
senderMustBeMember = false;
|
||||
senderMustBeModerator = false;
|
||||
senderMustBeAdmin = true;
|
||||
|
||||
}
|
||||
|
||||
public void perform() {
|
||||
if (me.getItemInHand().getType() != Material.BANNER) {
|
||||
fme.msg(TL.COMMAND_SETBANNER_NOTBANNER);
|
||||
return;
|
||||
}
|
||||
|
||||
fme.getFaction().setBannerPattern(me.getItemInHand());
|
||||
fme.msg(TL.COMMAND_SETBANNER_SUCCESS);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TL getUsageTranslation() {
|
||||
return TL.COMMAND_SETBANNER_DESCRIPTION;
|
||||
}
|
||||
|
||||
}
|
@ -3,7 +3,6 @@ package com.massivecraft.factions.cmd;
|
||||
import com.massivecraft.factions.Conf;
|
||||
import com.massivecraft.factions.P;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
import net.coreprotect.CoreProtect;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.util.Collections;
|
||||
@ -99,6 +98,7 @@ public class FCmdRoot extends FCommand {
|
||||
public CmdShowClaims cmdShowClaims = new CmdShowClaims();
|
||||
public CmdLowPower cmdLowPower = new CmdLowPower();
|
||||
public CmdTntFill cmdTntFill = new CmdTntFill();
|
||||
public CmdChest cmdChest = new CmdChest();
|
||||
|
||||
|
||||
|
||||
@ -209,6 +209,7 @@ public class FCmdRoot extends FCommand {
|
||||
this.addSubCommand(this.cmdShowClaims);
|
||||
this.addSubCommand(this.cmdLowPower);
|
||||
this.addSubCommand(this.cmdTntFill);
|
||||
this.addSubCommand(this.cmdChest);
|
||||
|
||||
if (Bukkit.getServer().getPluginManager().getPlugin("CoreProtect") != null){
|
||||
P.p.log("Found CoreProtect, enabling Inspect");
|
||||
|
@ -70,6 +70,16 @@ public class FactionsBlockListener implements Listener {
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
FPlayer fme = FPlayers.getInstance().getByPlayer(event.getPlayer());
|
||||
if (event.getBlock().getType() == Material.MOB_SPAWNER) {
|
||||
Access access = fme.getFaction().getAccess(fme, PermissableAction.SPAWNER);
|
||||
if (access.equals(Access.DENY) || access.equals(Access.UNDEFINED)) {
|
||||
fme.msg(TL.GENERIC_NOPERMISSION, "mine spawners");
|
||||
event.setCancelled(true);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,12 @@
|
||||
package com.massivecraft.factions.listeners;
|
||||
|
||||
import com.massivecraft.factions.*;
|
||||
import com.massivecraft.factions.event.FPlayerJoinEvent;
|
||||
import com.massivecraft.factions.event.PowerLossEvent;
|
||||
import com.massivecraft.factions.struct.Relation;
|
||||
import com.massivecraft.factions.util.MiscUtil;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.TravelAgent;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.*;
|
||||
@ -21,7 +19,6 @@ import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
|
||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerPortalEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
@ -207,44 +204,37 @@ public class FactionsEntityListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onEntityExplode(EntityExplodeEvent event) {
|
||||
Location loc = event.getLocation();
|
||||
Entity boomer = event.getEntity();
|
||||
Faction faction = Board.getInstance().getFactionAt(new FLocation(loc));
|
||||
|
||||
if (faction.noExplosionsInTerritory() || (faction.isPeaceful() && Conf.peacefulTerritoryDisableBoom)) {
|
||||
// faction is peaceful and has explosions set to disabled
|
||||
// Before we need to check the location where the block is placed
|
||||
if (!this.checkExplosionForBlock(boomer, event.getLocation().getBlock())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean online = faction.hasPlayersOnline();
|
||||
// Loop the blocklist to run checks on each aimed block
|
||||
Iterator<Block> blockList = event.blockList().iterator();
|
||||
|
||||
//TODO: :(
|
||||
if (boomer instanceof Creeper && ((faction.isWilderness() && Conf.wildernessBlockCreepers && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) ||
|
||||
(faction.isNormal() && (online ? Conf.territoryBlockCreepers : Conf.territoryBlockCreepersWhenOffline)) ||
|
||||
(faction.isWarZone() && Conf.warZoneBlockCreepers) ||
|
||||
faction.isSafeZone())) {
|
||||
// creeper which needs prevention
|
||||
event.setCancelled(true);
|
||||
} else if (
|
||||
// it's a bit crude just using fireball protection for Wither boss too, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever
|
||||
(boomer instanceof Fireball || boomer instanceof WitherSkull || boomer instanceof Wither) && ((faction.isWilderness() && Conf.wildernessBlockFireballs && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) ||
|
||||
(faction.isNormal() && (online ? Conf.territoryBlockFireballs : Conf.territoryBlockFireballsWhenOffline)) ||
|
||||
(faction.isWarZone() && Conf.warZoneBlockFireballs) ||
|
||||
faction.isSafeZone())) {
|
||||
// ghast fireball which needs prevention
|
||||
event.setCancelled(true);
|
||||
} else if ((boomer instanceof TNTPrimed || boomer instanceof ExplosiveMinecart) && ((faction.isWilderness() && Conf.wildernessBlockTNT && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) ||
|
||||
(faction.isNormal() && (online ? Conf.territoryBlockTNT : Conf.territoryBlockTNTWhenOffline)) ||
|
||||
(faction.isWarZone() && Conf.warZoneBlockTNT) ||
|
||||
(faction.isSafeZone() && Conf.safeZoneBlockTNT))) {
|
||||
// TNT which needs prevention
|
||||
while (blockList.hasNext()) {
|
||||
Block block = blockList.next();
|
||||
|
||||
if (!this.checkExplosionForBlock(boomer, block)) {
|
||||
// The block don't have to explode
|
||||
blockList.remove();
|
||||
}
|
||||
}
|
||||
|
||||
// Cancel the event if no block will explode
|
||||
if (event.blockList().isEmpty()) {
|
||||
event.setCancelled(true);
|
||||
|
||||
// Or handle the exploit of TNT in water/lava
|
||||
} else if ((boomer instanceof TNTPrimed || boomer instanceof ExplosiveMinecart) && Conf.handleExploitTNTWaterlog) {
|
||||
// TNT in water/lava doesn't normally destroy any surrounding blocks, which is usually desired behavior, but...
|
||||
// this change below provides workaround for waterwalling providing perfect protection,
|
||||
// and makes cheap (non-obsidian) TNT cannons require minor maintenance between shots
|
||||
Block center = loc.getBlock();
|
||||
Block center = event.getLocation().getBlock();
|
||||
|
||||
if (center.isLiquid()) {
|
||||
// a single surrounding block in all 6 directions is broken if the material is weak enough
|
||||
List<Block> targets = new ArrayList<>();
|
||||
@ -265,22 +255,42 @@ public class FactionsEntityListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
//For disabling enderpearl throws
|
||||
@EventHandler
|
||||
public void onPearl(PlayerInteractEvent e) {
|
||||
Player player = e.getPlayer();
|
||||
if (player.getItemInHand().getType() == Material.ENDER_PEARL) {
|
||||
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
||||
if (fPlayer.isFlying()){
|
||||
if (!Conf.noEnderpearlsInFly){
|
||||
fPlayer.msg(TL.COMMAND_FLY_NO_EPEARL);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
private boolean checkExplosionForBlock(Entity boomer, Block block) {
|
||||
Faction faction = Board.getInstance().getFactionAt(new FLocation(block.getLocation()));
|
||||
|
||||
if (faction.noExplosionsInTerritory() || (faction.isPeaceful() && Conf.peacefulTerritoryDisableBoom)) {
|
||||
// faction is peaceful and has explosions set to disabled
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean online = faction.hasPlayersOnline();
|
||||
|
||||
if (boomer instanceof Creeper && ((faction.isWilderness() && Conf.wildernessBlockCreepers && !Conf.worldsNoWildernessProtection.contains(block.getWorld().getName())) ||
|
||||
(faction.isNormal() && (online ? Conf.territoryBlockCreepers : Conf.territoryBlockCreepersWhenOffline)) ||
|
||||
(faction.isWarZone() && Conf.warZoneBlockCreepers) ||
|
||||
faction.isSafeZone())) {
|
||||
// creeper which needs prevention
|
||||
return false;
|
||||
} else if (
|
||||
// it's a bit crude just using fireball protection for Wither boss too, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever
|
||||
(boomer instanceof Fireball || boomer instanceof WitherSkull || boomer instanceof Wither) && ((faction.isWilderness() && Conf.wildernessBlockFireballs && !Conf.worldsNoWildernessProtection.contains(block.getWorld().getName())) ||
|
||||
(faction.isNormal() && (online ? Conf.territoryBlockFireballs : Conf.territoryBlockFireballsWhenOffline)) ||
|
||||
(faction.isWarZone() && Conf.warZoneBlockFireballs) ||
|
||||
faction.isSafeZone())) {
|
||||
// ghast fireball which needs prevention
|
||||
return false;
|
||||
} else
|
||||
return (!(boomer instanceof TNTPrimed) && !(boomer instanceof ExplosiveMinecart)) || ((!faction.isWilderness() || !Conf.wildernessBlockTNT || Conf.worldsNoWildernessProtection.contains(block.getWorld().getName())) &&
|
||||
(!faction.isNormal() || (online ? !Conf.territoryBlockTNT : !Conf.territoryBlockTNTWhenOffline)) &&
|
||||
(!faction.isWarZone() || !Conf.warZoneBlockTNT) &&
|
||||
(!faction.isSafeZone() || !Conf.safeZoneBlockTNT));
|
||||
|
||||
// No condition retained, destroy the block!
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// mainly for flaming arrows; don't want allies or people in safe zones to be ignited even after damage event is cancelled
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
|
||||
|
@ -300,7 +300,22 @@ public class FactionsPlayerListener implements Listener {
|
||||
.replace("{player}",row.getPlayer())
|
||||
.replace("{block-type}",row.getType().toString().toLowerCase()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//For disabling enderpearl throws
|
||||
@EventHandler
|
||||
public void onPearl(PlayerInteractEvent e) {
|
||||
Player player = e.getPlayer();
|
||||
if (player.getItemInHand().getType() == Material.ENDER_PEARL) {
|
||||
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
||||
if (fPlayer.isFlying()) {
|
||||
if (Conf.noEnderpearlsInFly) {
|
||||
fPlayer.msg(TL.COMMAND_FLY_NO_EPEARL);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -310,6 +325,18 @@ public class FactionsPlayerListener implements Listener {
|
||||
return (result.length() == 3 ? result + "0" : result) + "/hrs ago";
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onCloseChest(InventoryCloseEvent e) {
|
||||
if (e.getInventory().getTitle() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.getInventory().getTitle().equalsIgnoreCase(P.p.color(P.p.getConfig().getString("fchest.Inventory-Title")))) {
|
||||
FPlayers.getInstance().getByPlayer((Player) e.getPlayer()).getFaction().setChest(e.getInventory());
|
||||
}
|
||||
}
|
||||
|
||||
// Holds the next time a player can have a map shown.
|
||||
private HashMap<UUID, Long> showTimes = new HashMap<>();
|
||||
|
||||
@ -357,7 +384,15 @@ public class FactionsPlayerListener implements Listener {
|
||||
String subTitle = P.p.getConfig().getString("Title.Format.Subtitle").replace("{Description}", factionTo.getDescription()).replace("{Faction}", factionTo.getColorTo(me) + factionTo.getTag());
|
||||
subTitle = parseAllPlaceholders(subTitle, factionTo);
|
||||
if (!P.p.mc17) {
|
||||
me.getPlayer().sendTitle(P.p.color(title), P.p.color(subTitle));
|
||||
if (!P.p.mc18) {
|
||||
me.getPlayer().sendTitle(P.p.color(title), P.p.color(subTitle), P.p.getConfig().getInt("Title.Options.FadeInTime"),
|
||||
P.p.getConfig().getInt("Title.Options.ShowTime"),
|
||||
P.p.getConfig().getInt("Title.Options.FadeOutTime"));
|
||||
} else {
|
||||
me.getPlayer().sendTitle(P.p.color(title), P.p.color(subTitle));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -102,7 +102,8 @@ public enum Permission {
|
||||
TNTFILL("tntfill"),
|
||||
COORD("coords"),
|
||||
SHOWCLAIMS("showclaims"),
|
||||
WARP("warp");
|
||||
WARP("warp"),
|
||||
CHEST("Chest");
|
||||
|
||||
public final String node;
|
||||
|
||||
|
@ -27,7 +27,6 @@ public enum PermissableAction {
|
||||
KICK("kick"),
|
||||
ITEM("items"), // generic for most items
|
||||
SETHOME("sethome"),
|
||||
WITHDRAW("withdraw"),
|
||||
TERRITORY("territory"),
|
||||
ACCESS("access"),
|
||||
DISBAND("disband"),
|
||||
@ -38,8 +37,9 @@ public enum PermissableAction {
|
||||
VAULT("vault"),
|
||||
TNTBANK("tntbank"),
|
||||
TNTFILL("tntfill"),
|
||||
WIDTHDRAW("widthdraw"),
|
||||
DEPOSIT("deposit");
|
||||
WITHDRAW("withdraw"),
|
||||
CHEST("chest"),
|
||||
SPAWNER("spawner");
|
||||
|
||||
private String name;
|
||||
|
||||
|
@ -43,11 +43,15 @@ public class FUpgradesGUI implements Listener {
|
||||
}
|
||||
List<Integer> spawnerSlots = P.p.getConfig().getIntegerList("fupgrades.MainMenu.Spawners.SpawnerItem.slots");
|
||||
for (int i = 0; i <= spawnerSlots.size() - 1; i++) {
|
||||
inventory.setItem(spawnerSlots.get(i), items[0]);
|
||||
inventory.setItem(spawnerSlots.get(i), items[1]);
|
||||
}
|
||||
List<Integer> expSlots = P.p.getConfig().getIntegerList("fupgrades.MainMenu.EXP.EXPItem.slots");
|
||||
for (int i = 0; i <= expSlots.size() - 1; i++) {
|
||||
inventory.setItem(expSlots.get(i), items[1]);
|
||||
inventory.setItem(expSlots.get(i), items[0]);
|
||||
}
|
||||
List<Integer> chestSlots = P.p.getConfig().getIntegerList("fupgrades.MainMenu.Chest.ChestItem.slots");
|
||||
for (int i = 0; i <= chestSlots.size() - 1; i++) {
|
||||
inventory.setItem(chestSlots.get(i), items[3]);
|
||||
}
|
||||
fme.getPlayer().openInventory(inventory);
|
||||
}
|
||||
@ -63,6 +67,7 @@ public class FUpgradesGUI implements Listener {
|
||||
ItemStack[] items = buildItems(fme);
|
||||
ItemStack cropItem = items[2];
|
||||
ItemStack expItem = items[0];
|
||||
ItemStack chestitem = items[3];
|
||||
ItemStack spawnerItem = items[1];
|
||||
int cropLevel = fme.getFaction().getUpgrade("Crop");
|
||||
if (e.getCurrentItem().equals(cropItem)) {
|
||||
@ -164,9 +169,43 @@ public class FUpgradesGUI implements Listener {
|
||||
fme.getPlayer().closeInventory();
|
||||
}
|
||||
}
|
||||
int chestLevel = fme.getFaction().getUpgrade("Chest");
|
||||
if (e.getCurrentItem().equals(chestitem)) {
|
||||
if (expLevel == 3) {
|
||||
return;
|
||||
}
|
||||
if (chestLevel == 2) {
|
||||
int cost = P.p.getConfig().getInt("fupgrades.MainMenu.Chest.Cost.level-3");
|
||||
if (!hasMoney(fme, cost)) {
|
||||
return;
|
||||
}
|
||||
takeMoney(fme, cost);
|
||||
fme.getFaction().setUpgrades("Chest", 3);
|
||||
fme.getPlayer().closeInventory();
|
||||
}
|
||||
if (chestLevel == 1) {
|
||||
int cost = P.p.getConfig().getInt("fupgrades.MainMenu.Chest.Cost.level-2");
|
||||
if (!hasMoney(fme, cost)) {
|
||||
return;
|
||||
}
|
||||
takeMoney(fme, cost);
|
||||
fme.getFaction().setUpgrades("Chest", 2);
|
||||
fme.getPlayer().closeInventory();
|
||||
}
|
||||
if (chestLevel == 0) {
|
||||
int cost = P.p.getConfig().getInt("fupgrades.MainMenu.Chest.Cost.level-1");
|
||||
if (!hasMoney(fme, cost)) {
|
||||
return;
|
||||
}
|
||||
takeMoney(fme, cost);
|
||||
fme.getFaction().setUpgrades("Chest", 1);
|
||||
fme.getPlayer().closeInventory();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public ItemStack[] buildItems(FPlayer fme) {
|
||||
@ -182,10 +221,7 @@ public class FUpgradesGUI implements Listener {
|
||||
ItemStack expItem = P.p.createItem(expMaterial, expAmt, expData, expName, expLore);
|
||||
if (expLevel >= 1) {
|
||||
ItemMeta itemMeta = expItem.getItemMeta();
|
||||
if (!P.p.mc17) {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
expItem.setItemMeta(itemMeta);
|
||||
}
|
||||
@ -223,10 +259,7 @@ public class FUpgradesGUI implements Listener {
|
||||
cropItem.getItemMeta().setLore(cropLore);
|
||||
if (cropLevel >= 1) {
|
||||
ItemMeta itemMeta = cropItem.getItemMeta();
|
||||
if (!P.p.mc17) {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
cropItem.setItemMeta(itemMeta);
|
||||
}
|
||||
@ -239,10 +272,7 @@ public class FUpgradesGUI implements Listener {
|
||||
spawnerItem.getItemMeta().setLore(spawnerLore);
|
||||
if (spawnerLevel >= 1) {
|
||||
ItemMeta itemMeta = spawnerItem.getItemMeta();
|
||||
if (!P.p.mc17) {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
spawnerItem.setItemMeta(itemMeta);
|
||||
}
|
||||
@ -251,7 +281,35 @@ public class FUpgradesGUI implements Listener {
|
||||
} else if (spawnerLevel == 3) {
|
||||
spawnerItem.setAmount(3);
|
||||
}
|
||||
ItemStack[] items = {expItem, spawnerItem, cropItem};
|
||||
Material chestMaterial = Material.getMaterial(P.p.getConfig().getString("fupgrades.MainMenu.Chest.ChestItem.Type"));
|
||||
int chesttAmt = P.p.getConfig().getInt("fupgrades.MainMenu.Chest.ChestItem.Amount");
|
||||
short chestData = Short.parseShort(P.p.getConfig().getInt("fupgrades.MainMenu.Chest.ChestItem.Damage") + "");
|
||||
String chestName = P.p.color(P.p.getConfig().getString("fupgrades.MainMenu.Chest.ChestItem.Name", "&e&lUpgrade Chest Size"));
|
||||
List<String> chestLore = P.p.colorList(P.p.getConfig().getStringList("fupgrades.MainMenu.Chest.ChestItem.Lore"));
|
||||
int chestlevel = fme.getFaction().getUpgrade("Chest");
|
||||
for (int i = 0; i <= chestLore.size() - 1; i++) {
|
||||
String line = chestLore.get(i);
|
||||
line = line.replace("{level}", chestlevel + "");
|
||||
chestLore.set(i, line);
|
||||
|
||||
}
|
||||
|
||||
ItemStack chestItem = P.p.createItem(chestMaterial, chesttAmt, chestData, chestName, chestLore);
|
||||
|
||||
if (chestlevel >= 1) {
|
||||
ItemMeta itemMeta = chestItem.getItemMeta();
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 3, true);
|
||||
chestItem.setItemMeta(itemMeta);
|
||||
}
|
||||
if (chestlevel == 2) {
|
||||
chestItem.setAmount(2);
|
||||
} else if (chestlevel == 3) {
|
||||
chestItem.setAmount(3);
|
||||
}
|
||||
|
||||
|
||||
ItemStack[] items = {expItem, spawnerItem, cropItem, chestItem};
|
||||
return items;
|
||||
}
|
||||
|
||||
|
@ -249,12 +249,12 @@ public abstract class MemoryBoard extends Board {
|
||||
Faction faction = fplayer.getFaction();
|
||||
ArrayList<FancyMessage> ret = new ArrayList<>();
|
||||
Faction factionLoc = getFactionAt(flocation);
|
||||
ret.add(new FancyMessage(P.p.txt.titleize("(" + flocation.getCoordString() + ") " + factionLoc.getTag(fplayer))));
|
||||
ret.add(new FancyMessage(ChatColor.DARK_GRAY + P.p.txt.titleize("(" + flocation.getCoordString() + ") " + factionLoc.getTag(fplayer))));
|
||||
int buffer = P.p.getConfig().getInt("world-border.buffer", 0);
|
||||
|
||||
|
||||
// Get the compass
|
||||
ArrayList<String> asciiCompass = AsciiCompass.getAsciiCompass(inDegrees, ChatColor.RED, P.p.txt.parse("<a>"));
|
||||
ArrayList<String> asciiCompass = AsciiCompass.getAsciiCompass(inDegrees, ChatColor.DARK_GREEN, P.p.txt.parse("<gray>"));
|
||||
|
||||
int halfWidth = Conf.mapWidth / 2;
|
||||
// Use player's value for height
|
||||
|
@ -15,11 +15,11 @@ import com.massivecraft.factions.zcore.fperms.Access;
|
||||
import com.massivecraft.factions.zcore.fperms.Permissable;
|
||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||
import com.massivecraft.factions.zcore.util.TL;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
@ -237,6 +237,114 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
||||
return 0;
|
||||
}
|
||||
|
||||
String chestSerialized = null;
|
||||
Map<String, Object> bannerSerialized;
|
||||
|
||||
@Override
|
||||
public Inventory getChest() {
|
||||
int level = getUpgrade("Chest");
|
||||
int size = 9;
|
||||
if (level == 1) {
|
||||
size = P.p.getConfig().getInt("fupgrades.MainMenu.Chest.Chest-Size.level-1") * 9;
|
||||
} else if (level == 2) {
|
||||
size = P.p.getConfig().getInt("fupgrades.MainMenu.Chest.Chest-Size.level-2") * 9;
|
||||
} else if (level == 3) {
|
||||
size = P.p.getConfig().getInt("fupgrades.MainMenu.Chest.Chest-Size.level-3") * 9;
|
||||
}
|
||||
Inventory inventory = Bukkit.createInventory(null, size, P.p.color(P.p.getConfig().getString("fchest.Inventory-Title")));
|
||||
if (chestSerialized == null) {
|
||||
return inventory;
|
||||
} else {
|
||||
Inventory contents = StringToInventory(chestSerialized);
|
||||
inventory.setContents(contents.getContents());
|
||||
return inventory;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChest(Inventory inventory) {
|
||||
chestSerialized = InventoryToString(inventory);
|
||||
}
|
||||
|
||||
public String InventoryToString(Inventory invInventory) {
|
||||
String serialization = invInventory.getSize() + ";";
|
||||
for (int i = 0; i < invInventory.getSize(); i++) {
|
||||
ItemStack is = invInventory.getItem(i);
|
||||
if (is != null) {
|
||||
String serializedItemStack = new String();
|
||||
|
||||
String isType = String.valueOf(is.getType().getId());
|
||||
serializedItemStack += "t@" + isType;
|
||||
|
||||
if (is.getDurability() != 0) {
|
||||
String isDurability = String.valueOf(is.getDurability());
|
||||
serializedItemStack += ":d@" + isDurability;
|
||||
}
|
||||
|
||||
if (is.getAmount() != 1) {
|
||||
String isAmount = String.valueOf(is.getAmount());
|
||||
serializedItemStack += ":a@" + isAmount;
|
||||
}
|
||||
|
||||
Map<Enchantment, Integer> isEnch = is.getEnchantments();
|
||||
if (isEnch.size() > 0) {
|
||||
for (Entry<Enchantment, Integer> ench : isEnch.entrySet()) {
|
||||
serializedItemStack += ":e@" + ench.getKey().getId() + "@" + ench.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
serialization += i + "#" + serializedItemStack + ";";
|
||||
}
|
||||
}
|
||||
return serialization;
|
||||
}
|
||||
|
||||
public Inventory StringToInventory(String invString) {
|
||||
String[] serializedBlocks = invString.split(";");
|
||||
String invInfo = serializedBlocks[0];
|
||||
Inventory deserializedInventory = Bukkit.getServer().createInventory(null, Integer.valueOf(invInfo));
|
||||
|
||||
for (int i = 1; i < serializedBlocks.length; i++) {
|
||||
String[] serializedBlock = serializedBlocks[i].split("#");
|
||||
int stackPosition = Integer.valueOf(serializedBlock[0]);
|
||||
|
||||
if (stackPosition >= deserializedInventory.getSize()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack is = null;
|
||||
Boolean createdItemStack = false;
|
||||
|
||||
String[] serializedItemStack = serializedBlock[1].split(":");
|
||||
for (String itemInfo : serializedItemStack) {
|
||||
String[] itemAttribute = itemInfo.split("@");
|
||||
if (itemAttribute[0].equals("t")) {
|
||||
is = new ItemStack(Material.getMaterial(Integer.valueOf(itemAttribute[1])));
|
||||
createdItemStack = true;
|
||||
} else if (itemAttribute[0].equals("d") && createdItemStack) {
|
||||
is.setDurability(Short.valueOf(itemAttribute[1]));
|
||||
} else if (itemAttribute[0].equals("a") && createdItemStack) {
|
||||
is.setAmount(Integer.valueOf(itemAttribute[1]));
|
||||
} else if (itemAttribute[0].equals("e") && createdItemStack) {
|
||||
is.addEnchantment(Enchantment.getById(Integer.valueOf(itemAttribute[1])), Integer.valueOf(itemAttribute[2]));
|
||||
}
|
||||
}
|
||||
deserializedInventory.setItem(stackPosition, is);
|
||||
}
|
||||
|
||||
return deserializedInventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBannerPattern(ItemStack banner) {
|
||||
bannerSerialized = banner.serialize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getBanner() {
|
||||
return ItemStack.deserialize(bannerSerialized);
|
||||
}
|
||||
|
||||
public void setUpgrades(String key,int level){ upgrades.put(key,level); }
|
||||
|
||||
|
||||
|
@ -548,6 +548,11 @@ public enum TL {
|
||||
|
||||
COMMAND_SCOREBOARD_DESCRIPTION("Scoreboardy things"),
|
||||
|
||||
COMMAND_SETBANNER_SUCCESS("&c&l[!] &7Banner Pattern Set!"),
|
||||
COMMAND_SETBANNER_NOTBANNER("&c&l[!] &7The item is &cnot&7 a banner!"),
|
||||
COMMAND_SETBANNER_DESCRIPTION("set banner pattern for your faction"),
|
||||
|
||||
|
||||
COMMAND_SETDEFAULTROLE_DESCRIPTION("/f defaultrole <role> - set your Faction's default role."),
|
||||
COMMAND_SETDEFAULTROLE_NOTTHATROLE("&c&l[!]&7 You cannot set the default to admin."),
|
||||
COMMAND_SETDEFAULTROLE_SUCCESS("Set default role of your faction to %1$s"),
|
||||
|
@ -169,18 +169,18 @@ public class TextUtil {
|
||||
// Paging and chrome-tools like titleize
|
||||
// -------------------------------------------- //
|
||||
|
||||
private final static String titleizeLine = repeat("_", 52);
|
||||
private final static String titleizeLine = repeat("-", 52);
|
||||
private final static int titleizeBalance = -1;
|
||||
|
||||
public String titleize(String str) {
|
||||
String center = ".[ " + parseTags("<l>") + str + parseTags("<a>") + " ].";
|
||||
String center = ChatColor.DARK_GRAY + "< " + parseTags("<l>") + str + parseTags("<a>") + ChatColor.DARK_GRAY + " >";
|
||||
int centerlen = ChatColor.stripColor(center).length();
|
||||
int pivot = titleizeLine.length() / 2;
|
||||
int eatLeft = (centerlen / 2) - titleizeBalance;
|
||||
int eatRight = (centerlen - eatLeft) + titleizeBalance;
|
||||
|
||||
if (eatLeft < pivot) {
|
||||
return parseTags("<a>") + titleizeLine.substring(0, pivot - eatLeft) + center + titleizeLine.substring(pivot + eatRight);
|
||||
return parseTags("<a>") + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + titleizeLine.substring(0, pivot - eatLeft) + center + ChatColor.DARK_GRAY + ChatColor.STRIKETHROUGH + titleizeLine.substring(pivot + eatRight);
|
||||
} else {
|
||||
return parseTags("<a>") + center;
|
||||
}
|
||||
|
@ -349,6 +349,7 @@ help:
|
||||
- '&e/f map &8- &7Map of the surrounding area, click chunks to claim.'
|
||||
- '&e/f sethome &8- &7Teleport to faction home.'
|
||||
- '&e/f home &8- &7Set your faction home.'
|
||||
- '&e/f title &f<playername> <title> &8- &7Set a player''s title, color codes supported.'
|
||||
- '&e/f ban &8- &7Ban a member from your faction.'
|
||||
- '&e/f unban &8- &7Unban a member from your faction.'
|
||||
- '&e/f banlist &8- &7List banned players from your faction.'
|
||||
@ -373,9 +374,11 @@ help:
|
||||
- '&e/f warp &8- &7Opens the warp menu.'
|
||||
- '&e/f setwarp &8- &7Set a warp.'
|
||||
- '&e/f perms &8- &7Change what players can do in your claims.'
|
||||
- '&e/f upgrades &8- &7Upgrade your factions core.'
|
||||
- '&e/f upgrades &8- &7Upgrade various perks in your faction.'
|
||||
- '&e/f checkpoint &8- &7Set a faction checkpoint.'
|
||||
- '&e/f tnt add/take <amount> &8- &7Faction Based TNT Bank.'
|
||||
- '&e/f tnt add/take &f<amount> &8- &7Faction Based TNT Bank.'
|
||||
- '&e/f tntfill &f<radius> <amount> &8- &7Tnt fill integrated into the tntbank!'
|
||||
- '&e/f chest &8- &7Open a virtual faction chest! '
|
||||
- '&e/f version &8- &7Display current faction version.'
|
||||
- '&7&m--------------------&r &e/f help 3 &7&m-----------------------'
|
||||
############################################################
|
||||
@ -486,7 +489,6 @@ fperm-gui:
|
||||
relation: 4
|
||||
# Back button slot
|
||||
back: 0
|
||||
|
||||
# Start action slots
|
||||
build: 10
|
||||
destroy: 11
|
||||
@ -500,7 +502,7 @@ fperm-gui:
|
||||
kick: 21
|
||||
item: 22
|
||||
sethome: 23
|
||||
widthdraw: 24
|
||||
withdraw: 24
|
||||
territory: 25
|
||||
access: 28
|
||||
promote: 29
|
||||
@ -512,6 +514,8 @@ fperm-gui:
|
||||
vault: 40
|
||||
tntbank: 39
|
||||
tntfill: 41
|
||||
chest: 42
|
||||
spawner: 38
|
||||
# Material to show, if the material is colorable eg: Wool, Stained Clay it will update with it's access color
|
||||
materials:
|
||||
build: STAINED_GLASS
|
||||
@ -526,7 +530,7 @@ fperm-gui:
|
||||
kick: STAINED_GLASS
|
||||
item: STAINED_GLASS
|
||||
sethome: STAINED_GLASS
|
||||
widthdraw: STAINED_GLASS
|
||||
withdraw: STAINED_GLASS
|
||||
territory: STAINED_GLASS
|
||||
access: STAINED_GLASS
|
||||
promote: STAINED_GLASS
|
||||
@ -538,6 +542,8 @@ fperm-gui:
|
||||
vault: STAINED_GLASS
|
||||
tntbank: STAINED_GLASS
|
||||
tntfill: STAINED_GLASS
|
||||
chest: STAINED_GLASS
|
||||
spawner: STAINED_GLASS
|
||||
# Same dummy items format as above
|
||||
dummy-items:
|
||||
'0':
|
||||
@ -581,15 +587,6 @@ fperm-gui:
|
||||
- 42
|
||||
- 43
|
||||
- 44
|
||||
- 45
|
||||
- 46
|
||||
- 47
|
||||
- 48
|
||||
- 49
|
||||
- 50
|
||||
- 51
|
||||
- 52
|
||||
- 53
|
||||
# {action} Action name eg: Setwarp, Kick
|
||||
# {action-access} Access name eg: Allow, Deny
|
||||
# {action-access-color} Access color eg: Allow;GREEN
|
||||
@ -735,6 +732,14 @@ fvault:
|
||||
|
||||
############################################################
|
||||
# +------------------------------------------------------+ #
|
||||
# | Faction Vault | #
|
||||
# +------------------------------------------------------+ #
|
||||
fchest:
|
||||
Enabled: true
|
||||
Inventory-Title: '&2&lFaction Chest'
|
||||
# Vault size upgrades can be configured in the upgrades section of config
|
||||
############################################################
|
||||
# +------------------------------------------------------+ #
|
||||
# | Faction Upgrades | #
|
||||
# +------------------------------------------------------+ #
|
||||
############################################################
|
||||
@ -873,6 +878,38 @@ fupgrades:
|
||||
- '&e&lClick to &nUnlock'
|
||||
slots:
|
||||
- 16
|
||||
Chest:
|
||||
Chest-Size:
|
||||
# This is rows
|
||||
level-1: 1
|
||||
level-2: 2
|
||||
level-3: 3
|
||||
Cost:
|
||||
level-1: 1000000
|
||||
level-2: 2000000
|
||||
level-3: 3000000
|
||||
ChestItem:
|
||||
Name: '&e&lUpgrade Faction Chest Size'
|
||||
Type: CHEST
|
||||
Amount: 1
|
||||
Damage: 0
|
||||
Lore:
|
||||
- '&7Increased Faction Chest Size.'
|
||||
- ''
|
||||
- '&e&lTier'
|
||||
- '&f&l* &7Current Level: &n{level}'
|
||||
- ''
|
||||
- '&e&lPerks'
|
||||
- '&f&l* &7Level 1 - &f2 Rows'
|
||||
- '&7 - Cost: $1,000,000'
|
||||
- '&f&l* &7Level 2 - &f3 Rows'
|
||||
- '&7 - Cost: $2,000,000'
|
||||
- '&f&l* &7Level 3 - &f4 Rows'
|
||||
- '&7 - Cost: $3,000,000'
|
||||
- ''
|
||||
- '&e&lClick to &nUnlock'
|
||||
slots:
|
||||
- 22
|
||||
|
||||
fbanners:
|
||||
Enabled: true
|
||||
@ -897,6 +934,11 @@ fbanners:
|
||||
#Title when moving between chunks
|
||||
Title:
|
||||
Show-Title: true
|
||||
# You can configure the time in 1.9 or higher! The values are in seconds
|
||||
Options:
|
||||
FadeInTime: 1
|
||||
ShowTime: 1
|
||||
FadeOutTime: 1
|
||||
Format:
|
||||
Title: '{Faction}'
|
||||
Subtitle: '{Description}'
|
||||
|
@ -1,5 +1,5 @@
|
||||
name: Factions
|
||||
version: ${project.version}-1.3-STABLE
|
||||
version: ${project.version}-1.4-STABLE
|
||||
main: com.massivecraft.factions.P
|
||||
authors: [Olof Larsson, Brett Flannigan, drtshock, ProSavage]
|
||||
softdepend: [CoreProtect, PlayerVaults, PlaceholderAPI, MVdWPlaceholderAPI, PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, CAPI, AuthMe, Vault, Spout, WorldEdit, WorldGuard, AuthDB, CaptureThePoints, CombatTag, dynmap, FactionsTop]
|
||||
|
Loading…
Reference in New Issue
Block a user