Add Faction vaults.

These can be accessed with /f vault <number>
Set a Faction's max vaults with /f setmaxvaults <faction> <number> - can be run from console so Buycraft can execute it.
* This is a not very tested implementation. Should be tested more in depth before being pushed to a release.
This commit is contained in:
Trent Hensler 2016-05-30 16:22:45 -07:00
parent 46805200dd
commit 0294a60675
11 changed files with 192 additions and 2 deletions

View File

@ -310,6 +310,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.drtshock</groupId>
<artifactId>PlayerVaults</artifactId>
<version>3.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
@ -337,5 +342,9 @@
<id>stealthyone-snapshots</id>
<url>http://repo.stealthyone.com/content/repositories/snapshots/</url>
</repository>
<repository>
<id>playervaults</id>
<url>https://ci.drtshock.net/plugin/repository/everything/</url>
</repository>
</repositories>
</project>

View File

@ -356,6 +356,9 @@ public class Conf {
public static Set<String> worldsIgnorePvP = new LinkedHashSet<String>();
public static Set<String> worldsNoWildernessProtection = new LinkedHashSet<String>();
// faction-<factionId>
public static String vaultPrefix = "faction-%s";
public static Backend backEnd = Backend.JSON;
public static transient int mapHeight = 8;

View File

@ -27,6 +27,10 @@ public interface Faction extends EconomyParticipator {
public void clearWarps();
public int getMaxVaults();
public void setMaxVaults(int value);
public void addAnnouncement(FPlayer fPlayer, String msg);
public void sendUnreadAnnouncements(FPlayer fPlayer);

View File

@ -20,6 +20,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.lang.reflect.Modifier;
@ -56,6 +57,8 @@ public class P extends MPlugin {
public FCmdRoot cmdBase;
public CmdAutoHelp cmdAutoHelp;
private boolean hookedPlayervaults;
public P() {
p = this;
}
@ -71,6 +74,7 @@ public class P extends MPlugin {
// Load Conf from disk
Conf.load();
Essentials.setup();
hookedPlayervaults = setupPlayervaults();
FPlayers.getInstance().load();
Factions.getInstance().load();
for (FPlayer fPlayer : FPlayers.getInstance().getAllFPlayers()) {
@ -128,6 +132,11 @@ public class P extends MPlugin {
return perms != null;
}
private boolean setupPlayervaults() {
Plugin plugin = getServer().getPluginManager().getPlugin("PlayerVaults");
return plugin != null && plugin.isEnabled();
}
@Override
public GsonBuilder getGsonBuilder() {
Type mapFLocToStringSetType = new TypeToken<Map<FLocation, Set<String>>>() {
@ -312,6 +321,10 @@ public class P extends MPlugin {
return players;
}
public boolean isHookedPlayervaults() {
return hookedPlayervaults;
}
public String getPrimaryGroup(OfflinePlayer player) {
return perms == null || !perms.hasGroupSupport() ? " " : perms.getPrimaryGroup(Bukkit.getWorlds().get(0).toString(), player);
}

View File

@ -0,0 +1,49 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.ChatColor;
public class CmdSetMaxVaults extends FCommand {
public CmdSetMaxVaults() {
this.aliases.add("setmaxvaults");
this.aliases.add("smv");
this.requiredArgs.add("faction");
this.requiredArgs.add("number");
this.permission = Permission.SETMAXVAULTS.node;
this.disableOnLock = false;
senderMustBePlayer = false;
senderMustBeMember = false;
senderMustBeModerator = false;
senderMustBeAdmin = false;
}
@Override
public void perform() {
Faction targetFaction = argAsFaction(0);
int value = argAsInt(1, -1);
if(value < 0) {
sender.sendMessage(ChatColor.RED + "Number must be greater than 0.");
return;
}
if(targetFaction == null) {
sender.sendMessage(ChatColor.RED + "Couldn't find Faction: " + ChatColor.YELLOW + argAsString(0));
return;
}
targetFaction.setMaxVaults(value);
sender.sendMessage(TL.COMMAND_SETMAXVAULTS_SUCCESS.format(targetFaction.getTag(), value));
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_SETMAXVAULTS_DESCRIPTION;
}
}

View File

@ -0,0 +1,84 @@
package com.massivecraft.factions.cmd;
import com.drtshock.playervaults.PlayerVaults;
import com.drtshock.playervaults.util.Lang;
import com.drtshock.playervaults.vaultmanagement.UUIDVaultManager;
import com.drtshock.playervaults.vaultmanagement.VaultOperations;
import com.drtshock.playervaults.vaultmanagement.VaultViewInfo;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
public class CmdVault extends FCommand {
public CmdVault() {
this.aliases.add("vault");
//this.requiredArgs.add("");
this.optionalArgs.put("number", "number");
this.permission = Permission.VAULT.node;
this.disableOnLock = false;
senderMustBePlayer = true;
senderMustBeMember = true;
senderMustBeModerator = false;
senderMustBeAdmin = false;
}
@Override
public void perform() {
/*
/f vault <number>
*/
int number = argAsInt(0, 0); // Default to 0 or show on 0
Player player = me;
if (PlayerVaults.getInstance().getInVault().containsKey(player.getUniqueId().toString())) {
return; // Already in a vault so they must be trying to dupe.
}
int max = myFaction.getMaxVaults();
if (number > max) {
me.sendMessage(TL.COMMAND_VAULTS_TOOHIGH.format(number, max));
return;
}
// Something like faction-id
String vaultName = String.format(Conf.vaultPrefix, myFaction.getId());
if (number < 1) {
// Message about which vaults that Faction has.
// List the target
YamlConfiguration file = UUIDVaultManager.getInstance().getPlayerVaultFile(vaultName);
if (file == null) {
sender.sendMessage(Lang.TITLE.toString() + Lang.VAULT_DOES_NOT_EXIST.toString());
} else {
StringBuilder sb = new StringBuilder();
for (String key : file.getKeys(false)) {
sb.append(key.replace("vault", "")).append(" ");
}
sender.sendMessage(Lang.TITLE.toString() + Lang.EXISTING_VAULTS.toString().replaceAll("%p", fme.getTag()).replaceAll("%v", sb.toString().trim()));
}
return;
} // end listing vaults.
// Attempt to open vault.
if (VaultOperations.openOtherVault(player, vaultName, String.valueOf(number))) {
// Success
PlayerVaults.getInstance().getInVault().put(player.getUniqueId().toString(), new VaultViewInfo(vaultName, number));
}
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_VERSION_DESCRIPTION;
}
}

View File

@ -1,6 +1,7 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
import com.massivecraft.factions.zcore.util.TL;
import java.util.Collections;
@ -151,6 +152,11 @@ public class FCmdRoot extends FCommand {
this.addSubCommand(this.cmdClaimLine);
this.addSubCommand(this.cmdTop);
this.addSubCommand(this.cmdAHome);
if (P.p.isHookedPlayervaults()) {
P.p.log("Found playervaults hook, adding /f vault and /f setmaxvault commands.");
this.addSubCommand(new CmdSetMaxVaults());
this.addSubCommand(new CmdVault());
}
}
@Override

View File

@ -78,6 +78,8 @@ public enum Permission {
SEECHUNK("seechunk"),
SETWARP("setwarp"),
TOP("top"),
VAULT("vault"),
SETMAXVAULTS("setmaxvaults"),
WARP("warp");
public final String node;

View File

@ -42,6 +42,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
protected HashMap<String, List<String>> announcements = new HashMap<String, List<String>>();
protected ConcurrentHashMap<String, LazyLocation> warps = new ConcurrentHashMap<String, LazyLocation>();
private long lastDeath;
protected int maxVaults;
public HashMap<String, List<String>> getAnnouncements() {
return this.announcements;
@ -95,6 +96,14 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
warps.clear();
}
public int getMaxVaults() {
return this.maxVaults;
}
public void setMaxVaults(int value) {
this.maxVaults = value;
}
public Set<String> getInvites() {
return invites;
}

View File

@ -434,6 +434,11 @@ public enum TL {
COMMAND_SETHOME_SETOTHER("<b>You have set the home for the %1$s<i> faction."),
COMMAND_SETHOME_DESCRIPTION("Set the faction home"),
COMMAND_SETMAXVAULTS_DESCRIPTION("Set max vaults for a Faction."),
COMMAND_SETMAXVAULTS_SUCCESS("&aSet max vaults for &e%s &ato &b%d"),
COMMAND_VAULTS_TOOHIGH("You tried to open vault %d but your Faction only has %d vaults."),
COMMAND_SHOW_NOFACTION_SELF("You are not in a faction"),
COMMAND_SHOW_NOFACTION_OTHER("That's not a faction"),
COMMAND_SHOW_TOSHOW("to show faction information"),

View File

@ -2,7 +2,7 @@ name: Factions
version: ${project.version}
main: com.massivecraft.factions.P
authors: [Olof Larsson, Brett Flannigan, drtshock]
softdepend: [PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, CAPI, AuthMe, Vault, Spout, WorldEdit, WorldGuard, AuthDB, CaptureThePoints, CombatTag, dynmap]
softdepend: [PlayerVaults, PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, CAPI, AuthMe, Vault, Spout, WorldEdit, WorldGuard, AuthDB, CaptureThePoints, CombatTag, dynmap]
commands:
factions:
description: Reference command for Factions.
@ -18,6 +18,7 @@ permissions:
factions.save: true
factions.modifypower: true
factions.ahome: true
factions.setmaxvaults: true
factions.*:
description: This is just an alias for factions.kit.admin
children:
@ -96,6 +97,7 @@ permissions:
factions.monitorlogins: true
factions.top: true
factions.togglealliancechat: true
factions.vault: true
factions.admin:
description: hand over your admin rights
factions.admin.any:
@ -264,4 +266,8 @@ permissions:
factions.ahome:
description: Ability to send players to their faction home.
factions.autoleavebypass:
description: Bypass autoleave.
description: Bypass autoleave.
factions.vault:
description: Access faction vault.
factions.setmaxvault:
description: Set a faction's max vaults.