Skip to content

Commit

Permalink
Merge pull request #82 from dmccoystephenson/fief-flags
Browse files Browse the repository at this point in the history
Fief Flags
  • Loading branch information
dmccoystephenson authored Sep 13, 2021
2 parents b466913 + 2356a60 commit a71618d
Show file tree
Hide file tree
Showing 9 changed files with 267 additions and 6 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>dansplugins</groupId>
<artifactId>Fiefs</artifactId>
<version>v0.6</version>
<version>v0.7</version>
<packaging>jar</packaging>

<name>Fiefs</name>
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/dansplugins/fiefs/CommandInterpreter.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,12 @@ public boolean interpretCommand(CommandSender sender, String label, String[] arg
return command.execute(sender, arguments);
}

if (secondaryLabel.equalsIgnoreCase("flags")) {
if (!checkPermission(sender, "fiefs.flags")) { return false; }
FlagsCommand command = new FlagsCommand();
return command.execute(sender, arguments);
}

sender.sendMessage(ChatColor.RED + "Fiefs doesn't recognize that command.");
}
return false;
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/dansplugins/fiefs/Fiefs.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public final class Fiefs extends JavaPlugin {

private static Fiefs instance;

private final String version = "v0.6";
private final String version = "v0.7";

public static Fiefs getInstance() {
return instance;
Expand All @@ -35,9 +35,7 @@ public void onEnable() {
}

if (!MedievalFactionsIntegrator.getInstance().isMedievalFactionsPresent()) {
if (isDebugEnabled()) {
System.out.println("Medieval Factions wasn't found. Fiefs cannot enable.");
}
System.out.println("Medieval Factions wasn't found. Fiefs cannot enable.");
return;
}

Expand Down
62 changes: 62 additions & 0 deletions src/main/java/dansplugins/fiefs/commands/FlagsCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package dansplugins.fiefs.commands;

import dansplugins.factionsystem.externalapi.MF_Faction;
import dansplugins.fiefs.MedievalFactionsIntegrator;
import dansplugins.fiefs.data.PersistentData;
import dansplugins.fiefs.objects.Fief;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class FlagsCommand {

public boolean execute(CommandSender sender, String[] args) {

if (!(sender instanceof Player)) {
sender.sendMessage("Only players can use this command.");
return false;
}

Player player = (Player) sender;

MF_Faction faction = MedievalFactionsIntegrator.getInstance().getAPI().getFaction(player);
if (faction == null) {
player.sendMessage(ChatColor.RED + "You must be in a faction to use this command.");
return false;
}

Fief playersFief = PersistentData.getInstance().getFief(player);
if (playersFief == null) {
player.sendMessage(ChatColor.RED + "You must be in a fief to use this command.");
return false;
}

if (!playersFief.getOwnerUUID().equals(player.getUniqueId())) {
player.sendMessage(ChatColor.RED + "You must be the owner of your fief to kick members.");
return false;
}

if (args.length == 0) {
player.sendMessage(ChatColor.RED + "Valid sub-commands: show, set");
return false;
}

if (args[0].equalsIgnoreCase("show")) {
playersFief.getFlags().sendFlagList(player);
}
else if (args[0].equalsIgnoreCase("set")) {
if (args.length < 3) {
player.sendMessage(ChatColor.RED + "Usage: /fi flags set (flag) (value)");
return false;
}
else {
playersFief.getFlags().setFlag(args[1], args[2], player);
}
}
else {
player.sendMessage(ChatColor.RED + "Valid sub-commands: show, set");
}
return true;
}

}
1 change: 1 addition & 0 deletions src/main/java/dansplugins/fiefs/commands/HelpCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ private void sendPageTwo(CommandSender sender) {
sender.sendMessage(ChatColor.AQUA + "/fi desc");
sender.sendMessage(ChatColor.AQUA + "/fi kick");
sender.sendMessage(ChatColor.AQUA + "/fi transfer");
sender.sendMessage(ChatColor.AQUA + "/fi flags");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,13 @@ public void handle(PlayerInteractEntityEvent event) {
private boolean shouldEventBeCancelled(ClaimedChunk claimedChunk, Player player) {
Fief chunkHolder = PersistentData.getInstance().getFief(claimedChunk.getFief());
Fief playersFief = PersistentData.getInstance().getFief(player);

boolean claimedLandProtected = (boolean) playersFief.getFlags().getFlag("claimedLandProtected");

if (!claimedLandProtected) {
return false;
}

return !chunkHolder.equals(playersFief);
}

Expand Down
23 changes: 23 additions & 0 deletions src/main/java/dansplugins/fiefs/objects/Fief.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class Fief {

private ArrayList<UUID> members = new ArrayList<>();

private FiefFlags flags = new FiefFlags();

// ephemeral
private ArrayList<UUID> invitedPlayers = new ArrayList<>();

Expand All @@ -31,6 +33,7 @@ public Fief(String name, UUID ownerUUID, String factionName) {
this.ownerUUID = ownerUUID;
this.factionName = factionName;
members.add(ownerUUID);
flags.initializeFlagValues();
}

public Fief(Map<String, String> fiefData) {
Expand Down Expand Up @@ -121,6 +124,10 @@ public void sendMembersListToPlayer(Player player) {
}
}

public FiefFlags getFlags() {
return flags;
}

public boolean equals(Fief fief) {
return fief.getOwnerUUID().equals(this.getOwnerUUID())
&& fief.getName().equals(this.getName())
Expand All @@ -137,19 +144,35 @@ public Map<String, String> save() {
saveMap.put("factionName", gson.toJson(factionName));
saveMap.put("members", gson.toJson(members));

saveMap.put("integerFlagValues", gson.toJson(flags.getIntegerValues()));
saveMap.put("booleanFlagValues", gson.toJson(flags.getBooleanValues()));
saveMap.put("doubleFlagValues", gson.toJson(flags.getDoubleValues()));
saveMap.put("stringFlagValues", gson.toJson(flags.getStringValues()));

return saveMap;
}

private void load(Map<String, String> data) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();

Type arrayListTypeUUID = new TypeToken<ArrayList<UUID>>(){}.getType();
Type stringToIntegerMapType = new TypeToken<HashMap<String, Integer>>(){}.getType();
Type stringToBooleanMapType = new TypeToken<HashMap<String, Boolean>>(){}.getType();
Type stringToDoubleMapType = new TypeToken<HashMap<String, Double>>(){}.getType();
Type stringToStringMapType = new TypeToken<HashMap<String, String>>(){}.getType();

name = gson.fromJson(data.get("name"), String.class);
description = gson.fromJson(data.get("description"), String.class);
ownerUUID = UUID.fromString(gson.fromJson(data.get("ownerUUID"), String.class));
factionName = gson.fromJson(data.get("factionName"), String.class);

members = gson.fromJson(data.get("members"), arrayListTypeUUID);

flags.setIntegerValues(gson.fromJson(data.getOrDefault("integerFlagValues", "[]"), stringToIntegerMapType));
flags.setBooleanValues(gson.fromJson(data.getOrDefault("booleanFlagValues", "[]"), stringToBooleanMapType));
flags.setDoubleValues(gson.fromJson(data.getOrDefault("doubleFlagValues", "[]"), stringToDoubleMapType));
flags.setStringValues(gson.fromJson(data.getOrDefault("stringFlagValues", "[]"), stringToStringMapType));

flags.loadMissingFlagsIfNecessary();
}
}
164 changes: 164 additions & 0 deletions src/main/java/dansplugins/fiefs/objects/FiefFlags.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package dansplugins.fiefs.objects;

import dansplugins.fiefs.Fiefs;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

import java.util.ArrayList;
import java.util.HashMap;

public class FiefFlags {

/*
In order to add a new fief flag to this class, the following methods need to be altered:
- initializeFlagNames()
- initializeFlagValues()
- loadMissingFlagsIfNecessary()
*/

private ArrayList<String> flagNames = new ArrayList<>();
private HashMap<String, Integer> integerValues = new HashMap<>();
private HashMap<String, Boolean> booleanValues = new HashMap<>();
private HashMap<String, Double> doubleValues = new HashMap<>();
private HashMap<String, String> stringValues = new HashMap<>();

public FiefFlags() {
initializeFlagNames();
}

private void initializeFlagNames() { // this is called internally
flagNames.add("claimedLandProtected");
}

public void initializeFlagValues() {
// this is called externally in Fief.java when a fief is created in-game
booleanValues.put("claimedLandProtected", true);
}

public void loadMissingFlagsIfNecessary() {
// this is called externally in Fief.java when a fief is loaded from save files
if (!booleanValues.containsKey("claimedLandProtected")) {
booleanValues.put("claimedLandProtected", true);
}
}

public void sendFlagList(Player player) {
player.sendMessage(ChatColor.AQUA + "" + getFlagsSeparatedByCommas());
}


public void setFlag(String flag, String value, Player player) {

if (isFlag(flag)) {
if (integerValues.containsKey(flag)) {
integerValues.replace(flag, Integer.parseInt(value));
player.sendMessage(ChatColor.GREEN + "Integer set.");
}
else if (booleanValues.containsKey(flag)) {
booleanValues.replace(flag, Boolean.parseBoolean(value));
player.sendMessage(ChatColor.GREEN + "Boolean set.");
}
else if (doubleValues.containsKey(flag)) {
doubleValues.replace(flag, Double.parseDouble(value));
player.sendMessage(ChatColor.GREEN + "Double set.");
}
else if (stringValues.containsKey(flag)) {
stringValues.replace(flag, value);
player.sendMessage(ChatColor.GREEN + "String set.");
}
}
else {
player.sendMessage(ChatColor.RED + "That fief flag wasn't found.");
}
}

public Object getFlag(String flag) {
if (!isFlag(flag)) {
if (Fiefs.getInstance().isDebugEnabled()) { System.out.println(String.format("[DEBUG] Flag '%s' was not found!", flag)); }
return false;
}

if (integerValues.containsKey(flag)) {
if (Fiefs.getInstance().isDebugEnabled()) { System.out.println(String.format("[DEBUG] Flag '%s' was found! Value: '%s'", flag, integerValues.get(flag))); }
return integerValues.get(flag);
}
else if (booleanValues.containsKey(flag)) {
if (Fiefs.getInstance().isDebugEnabled()) { System.out.println(String.format("[DEBUG] Flag '%s' was found! Value: '%s'", flag, booleanValues.get(flag))); }
return booleanValues.get(flag);
}
else if (doubleValues.containsKey(flag)) {
if (Fiefs.getInstance().isDebugEnabled()) { System.out.println(String.format("[DEBUG] Flag '%s' was found! Value: '%s'", flag, doubleValues.get(flag))); }
return doubleValues.get(flag);
}
else if (stringValues.containsKey(flag)) {
if (Fiefs.getInstance().isDebugEnabled()) { System.out.println(String.format("[DEBUG] Flag '%s' was found! Value: '%s'", flag, stringValues.get(flag))); }
return stringValues.get(flag);
}
return null;
}

public HashMap<String, Integer> getIntegerValues() {
return integerValues;
}

public void setIntegerValues(HashMap<String, Integer> values) {
integerValues = values;
}

public HashMap<String, Boolean> getBooleanValues() {
return booleanValues;
}

public void setBooleanValues(HashMap<String, Boolean> values) {
booleanValues = values;
}

public HashMap<String, Double> getDoubleValues() {
return doubleValues;
}

public void setDoubleValues(HashMap<String, Double> values) {
doubleValues = values;
}

public HashMap<String, String> getStringValues() {
return stringValues;
}

public void setStringValues(HashMap<String, String> values) {
stringValues = values;
}

private boolean isFlag(String flag) {
// this method will likely need to be used to sanitize user input
return flagNames.contains(flag);
}

public int getNumFlags() {
return booleanValues.size();
}

private String getFlagsSeparatedByCommas() {
String toReturn = "";
for (String flagName : flagNames) {

if (!toReturn.equals("")) {
toReturn += ", ";
}
if (integerValues.containsKey(flagName)) {
toReturn += String.format("%s: %s", flagName, integerValues.get(flagName));
}
else if (booleanValues.containsKey(flagName)) {
toReturn += String.format("%s: %s", flagName, booleanValues.get(flagName));
}
else if (doubleValues.containsKey(flagName)) {
toReturn += String.format("%s: %s", flagName, doubleValues.get(flagName));
}
else if (stringValues.containsKey(flagName)) {
toReturn += String.format("%s: %s", flagName, stringValues.get(flagName));
}
}
return toReturn;
}

}
2 changes: 1 addition & 1 deletion src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Fiefs
version: 0.6
version: 0.7
main: dansplugins.fiefs.Fiefs
api-version: 1.13
author: DanTheTechMan
Expand Down

0 comments on commit a71618d

Please sign in to comment.