From 769394a058e15a31267fa0f83f911e20d8ce50ee Mon Sep 17 00:00:00 2001 From: Driftay Date: Wed, 7 Aug 2019 14:35:19 -0400 Subject: [PATCH] Faction Missions Implemented + Allowed Console to give points now --- .../com/massivecraft/factions/Faction.java | 3 + .../java/com/massivecraft/factions/P.java | 2 + .../massivecraft/factions/cmd/FCmdRoot.java | 6 + .../factions/cmd/points/CmdPoints.java | 2 +- .../factions/cmd/points/CmdPointsAdd.java | 7 +- .../factions/cmd/points/CmdPointsRemove.java | 6 +- .../factions/cmd/points/CmdPointsSet.java | 6 +- .../factions/missions/CmdMissions.java | 39 +++++++ .../factions/missions/Mission.java | 28 +++++ .../factions/missions/MissionGUI.java | 106 +++++++++++++++++ .../factions/missions/MissionHandler.java | 108 ++++++++++++++++++ .../factions/struct/Permission.java | 1 + .../factions/zcore/persist/MemoryFaction.java | 10 ++ .../massivecraft/factions/zcore/util/TL.java | 7 ++ src/main/resources/config.yml | 49 ++++++++ src/main/resources/plugin.yml | 2 + 16 files changed, 372 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/massivecraft/factions/missions/CmdMissions.java create mode 100644 src/main/java/com/massivecraft/factions/missions/Mission.java create mode 100644 src/main/java/com/massivecraft/factions/missions/MissionGUI.java create mode 100644 src/main/java/com/massivecraft/factions/missions/MissionHandler.java diff --git a/src/main/java/com/massivecraft/factions/Faction.java b/src/main/java/com/massivecraft/factions/Faction.java index cb28e2e9..79b46497 100644 --- a/src/main/java/com/massivecraft/factions/Faction.java +++ b/src/main/java/com/massivecraft/factions/Faction.java @@ -3,6 +3,7 @@ package com.massivecraft.factions; import com.massivecraft.factions.event.FactionDisbandEvent.PlayerDisbandReason; import com.massivecraft.factions.iface.EconomyParticipator; import com.massivecraft.factions.iface.RelationParticipator; +import com.massivecraft.factions.missions.Mission; import com.massivecraft.factions.struct.BanInfo; import com.massivecraft.factions.struct.Relation; import com.massivecraft.factions.struct.Role; @@ -24,6 +25,8 @@ public interface Faction extends EconomyParticipator { boolean altInvited(FPlayer fplayer); + Map getMissions(); + void deinviteAlt(FPlayer alt); void deinviteAllAlts(); diff --git a/src/main/java/com/massivecraft/factions/P.java b/src/main/java/com/massivecraft/factions/P.java index ae5f7d92..a5e68a06 100644 --- a/src/main/java/com/massivecraft/factions/P.java +++ b/src/main/java/com/massivecraft/factions/P.java @@ -10,6 +10,7 @@ import com.massivecraft.factions.integration.Econ; import com.massivecraft.factions.integration.Worldguard; import com.massivecraft.factions.integration.dynmap.EngineDynmap; import com.massivecraft.factions.listeners.*; +import com.massivecraft.factions.missions.MissionHandler; import com.massivecraft.factions.shop.ShopClickPersistence; import com.massivecraft.factions.shop.ShopConfig; import com.massivecraft.factions.struct.ChatMode; @@ -253,6 +254,7 @@ public class P extends MPlugin { new CropUpgrades(), new RedstoneUpgrade(), new ShopClickPersistence(), + new MissionHandler(this), new SpawnerUpgrades() }; diff --git a/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java b/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java index 47eea18c..e106e3e0 100644 --- a/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java +++ b/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java @@ -13,6 +13,7 @@ import com.massivecraft.factions.cmd.relational.CmdRelationNeutral; import com.massivecraft.factions.cmd.relational.CmdRelationTruce; import com.massivecraft.factions.cmd.roles.CmdDemote; import com.massivecraft.factions.cmd.roles.CmdPromote; +import com.massivecraft.factions.missions.CmdMissions; import com.massivecraft.factions.shop.CmdShop; import com.massivecraft.factions.zcore.util.TL; import org.bukkit.Bukkit; @@ -129,6 +130,7 @@ public class FCmdRoot extends FCommand { public CmdLogout cmdLogout = new CmdLogout(); public CmdNotifications cmdNotifications = new CmdNotifications(); public CmdShop cmdShop = new CmdShop(); + public CmdMissions cmdMissions = new CmdMissions(); @@ -250,6 +252,10 @@ public class FCmdRoot extends FCommand { this.addSubCommand(this.cmdFGlobal); this.addSubCommand(this.cmdViewChest); + if(P.p.getConfig().getBoolean("Missions-Enabled")){ + this.addSubCommand(this.cmdMissions); + } + if(P.p.getConfig().getBoolean("F-Shop.Enabled")){ this.addSubCommand(this.cmdShop); } diff --git a/src/main/java/com/massivecraft/factions/cmd/points/CmdPoints.java b/src/main/java/com/massivecraft/factions/cmd/points/CmdPoints.java index dc7077e3..47f31958 100644 --- a/src/main/java/com/massivecraft/factions/cmd/points/CmdPoints.java +++ b/src/main/java/com/massivecraft/factions/cmd/points/CmdPoints.java @@ -32,7 +32,7 @@ public class CmdPoints extends FCommand { @Override public void perform() { if (!P.p.getConfig().getBoolean("f-points.Enabled", true)) { - fme.msg(TL.GENERIC_DISABLED); + msg(TL.GENERIC_DISABLED); return; } this.commandChain.add(this); diff --git a/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsAdd.java b/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsAdd.java index 87b7fb0d..4512e575 100644 --- a/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsAdd.java +++ b/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsAdd.java @@ -45,16 +45,17 @@ public class CmdPointsAdd extends FCommand { } if (faction == null || faction.isWilderness()) { - fme.msg(TL.COMMAND_POINTS_FAILURE.toString().replace("{faction}", args.get(0))); + msg(TL.COMMAND_POINTS_FAILURE.toString().replace("{faction}", args.get(0))); return; } if(argAsInt(1) <= 0){ - fme.msg(TL.COMMAND_POINTS_INSUFFICIENT); + msg(TL.COMMAND_POINTS_INSUFFICIENT); return; } faction.setPoints(faction.getPoints() + argAsInt(1)); - fme.msg(TL.COMMAND_POINTS_SUCCESSFUL, argAsInt(1), faction.getTag(), faction.getPoints()); + + msg(TL.COMMAND_POINTS_SUCCESSFUL, argAsInt(1), faction.getTag(), faction.getPoints()); } diff --git a/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsRemove.java b/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsRemove.java index d552f25a..939fc1b5 100644 --- a/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsRemove.java +++ b/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsRemove.java @@ -43,17 +43,17 @@ public class CmdPointsRemove extends FCommand { } if (faction == null || faction.isWilderness()) { - fme.msg(TL.COMMAND_POINTS_FAILURE.toString().replace("{faction}", args.get(0))); + msg(TL.COMMAND_POINTS_FAILURE.toString().replace("{faction}", args.get(0))); return; } if(argAsInt(1) <= 0){ - fme.msg(TL.COMMAND_POINTS_INSUFFICIENT); + msg(TL.COMMAND_POINTS_INSUFFICIENT); return; } faction.setPoints(faction.getPoints() - argAsInt(1)); - fme.msg(TL.COMMAND_REMOVEPOINTS_SUCCESSFUL, argAsInt(1), faction.getTag(), faction.getPoints()); + msg(TL.COMMAND_REMOVEPOINTS_SUCCESSFUL, argAsInt(1), faction.getTag(), faction.getPoints()); } diff --git a/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsSet.java b/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsSet.java index dd1de638..1e4b19e0 100644 --- a/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsSet.java +++ b/src/main/java/com/massivecraft/factions/cmd/points/CmdPointsSet.java @@ -42,17 +42,17 @@ public class CmdPointsSet extends FCommand { } if (faction == null || faction.isWilderness()) { - fme.msg(TL.COMMAND_POINTS_FAILURE.toString().replace("{faction}", args.get(0))); + msg(TL.COMMAND_POINTS_FAILURE.toString().replace("{faction}", args.get(0))); return; } if(argAsInt(1) < 0){ - fme.msg(TL.COMMAND_POINTS_INSUFFICIENT); + msg(TL.COMMAND_POINTS_INSUFFICIENT); return; } faction.setPoints(argAsInt(1)); - fme.msg(TL.COMMAND_SETPOINTS_SUCCESSFUL, argAsInt(1), faction.getTag(), faction.getPoints()); + msg(TL.COMMAND_SETPOINTS_SUCCESSFUL, argAsInt(1), faction.getTag(), faction.getPoints()); } diff --git a/src/main/java/com/massivecraft/factions/missions/CmdMissions.java b/src/main/java/com/massivecraft/factions/missions/CmdMissions.java new file mode 100644 index 00000000..f42ae651 --- /dev/null +++ b/src/main/java/com/massivecraft/factions/missions/CmdMissions.java @@ -0,0 +1,39 @@ +package com.massivecraft.factions.missions; + +import com.massivecraft.factions.cmd.FCommand; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdMissions extends FCommand { + + public CmdMissions() { + this.aliases.add("missions"); + this.aliases.add("mission"); + + this.permission = Permission.MISSIONS.node; + + this.disableOnLock = true; + this.disableOnSpam = true; + + senderMustBePlayer = true; + senderMustBeMember = true; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + + @Override + public void perform() { + if (myFaction == null) { + return; + } + final MissionGUI missionsGUI = new MissionGUI(p, fme); + missionsGUI.build(); + fme.getPlayer().openInventory(missionsGUI.getInventory()); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MISSION_DESCRIPTION; + } +} diff --git a/src/main/java/com/massivecraft/factions/missions/Mission.java b/src/main/java/com/massivecraft/factions/missions/Mission.java new file mode 100644 index 00000000..55e2cc3d --- /dev/null +++ b/src/main/java/com/massivecraft/factions/missions/Mission.java @@ -0,0 +1,28 @@ +package com.massivecraft.factions.missions; + +public class Mission { + private long progress; + private String name; + private String type; + + public Mission(String name, String type) { + this.name = name; + this.type = type; + } + + public long getProgress() { + return progress; + } + + public void incrementProgress() { + ++progress; + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } +} diff --git a/src/main/java/com/massivecraft/factions/missions/MissionGUI.java b/src/main/java/com/massivecraft/factions/missions/MissionGUI.java new file mode 100644 index 00000000..0d0d7620 --- /dev/null +++ b/src/main/java/com/massivecraft/factions/missions/MissionGUI.java @@ -0,0 +1,106 @@ +package com.massivecraft.factions.missions; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.P; +import com.massivecraft.factions.util.FactionGUI; +import com.massivecraft.factions.util.XMaterial; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MissionGUI implements FactionGUI { + private P plugin; + private FPlayer fPlayer; + private Inventory inventory; + private Map slots; + + public MissionGUI(P plugin, FPlayer fPlayer) { + this.slots = new HashMap<>(); + this.plugin = plugin; + this.fPlayer = fPlayer; + this.inventory = plugin.getServer().createInventory(this, plugin.getConfig().getInt("MissionGUISize") * 9, plugin.color(plugin.getConfig().getString("Missions-GUI-Title"))); + } + + @Override + public void onClick(int slot, ClickType action) { + ConfigurationSection configurationSection = plugin.getConfig().getConfigurationSection("Missions"); + if (configurationSection == null) { + return; + } + int max = plugin.getConfig().getInt("MaximumMissionsAllowedAtOnce"); + if (fPlayer.getFaction().getMissions().size() >= max) { + fPlayer.msg(TL.MISSION_MISSION_MAX_ALLOWED, max); + return; + } + String missionName = slots.get(slot); + if (missionName == null) { + return; + } + if (fPlayer.getFaction().getMissions().containsKey(missionName)) { + fPlayer.msg(TL.MISSION_MISSION_ACTIVE); + return; + } + ConfigurationSection section = configurationSection.getConfigurationSection(missionName); + if (section == null) { + return; + } + ConfigurationSection missionSection = section.getConfigurationSection("Mission"); + if (missionSection == null) { + return; + } + Mission mission = new Mission(missionName, missionSection.getString("Type")); + fPlayer.getFaction().getMissions().put(missionName, mission); + fPlayer.msg(TL.MISSION_MISSION_STARTED, fPlayer.describeTo(fPlayer.getFaction()), plugin.color(section.getString("Name"))); + build(); + fPlayer.getPlayer().openInventory(inventory); + } + + @Override + public void build() { + ConfigurationSection configurationSection = plugin.getConfig().getConfigurationSection("Missions"); + if (configurationSection == null) { + return; + } + for (String key : configurationSection.getKeys(false)) { + ConfigurationSection section = configurationSection.getConfigurationSection(key); + int slot = section.getInt("Slot"); + + ItemStack itemStack = XMaterial.matchXMaterial(section.getString("Material")).parseItem(); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', section.getString("Name"))); + List loreLines = new ArrayList<>(); + for (String line : section.getStringList("Lore")) { + loreLines.add(ChatColor.translateAlternateColorCodes('&', line)); + } + if (fPlayer.getFaction().getMissions().containsKey(key)) { + Mission mission = fPlayer.getFaction().getMissions().get(key); + itemMeta.addEnchant(Enchantment.SILK_TOUCH, 1, true); + itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + loreLines.add(""); + loreLines.add(plugin.color(plugin.getConfig().getString("Mission-Progress-Format") + .replace("{progress}", String.valueOf(mission.getProgress())) + .replace("{total}", String.valueOf(section.getConfigurationSection("Mission").get("Amount"))))); + } + itemMeta.setLore(loreLines); + itemStack.setItemMeta(itemMeta); + inventory.setItem(slot, itemStack); + slots.put(slot, key); + } + } + + public Inventory getInventory() { + return inventory; + } +} diff --git a/src/main/java/com/massivecraft/factions/missions/MissionHandler.java b/src/main/java/com/massivecraft/factions/missions/MissionHandler.java new file mode 100644 index 00000000..13c23775 --- /dev/null +++ b/src/main/java/com/massivecraft/factions/missions/MissionHandler.java @@ -0,0 +1,108 @@ +package com.massivecraft.factions.missions; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.player.PlayerFishEvent; + +import java.util.List; +import java.util.stream.Collectors; + +public class MissionHandler implements Listener { + + private P plugin; + + public MissionHandler(P plugin){ + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityDeath(EntityDeathEvent event) { + if (event.getEntity() == null || event.getEntity().getKiller() == null) { + return; + } + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(event.getEntity().getKiller()); + if (fPlayer == null) { + return; + } + List missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("kill")).collect(Collectors.toList()); + for (Mission mission2 : missions) { + ConfigurationSection section = plugin.getConfig().getConfigurationSection("Missions").getConfigurationSection(mission2.getName()); + if (!event.getEntityType().toString().equals(section.getConfigurationSection("Mission").getString("EntityType"))) { + continue; + } + mission2.incrementProgress(); + checkIfDone(fPlayer, mission2, section); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) { + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(event.getPlayer()); + if (fPlayer == null) { + return; + } + List missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("mine")).collect(Collectors.toList()); + for (Mission mission2 : missions) { + ConfigurationSection section = plugin.getConfig().getConfigurationSection("Missions").getConfigurationSection(mission2.getName()); + if (!event.getBlock().getType().toString().equals(section.getConfigurationSection("Mission").getString("Material"))) { + continue; + } + mission2.incrementProgress(); + checkIfDone(fPlayer, mission2, section); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockPlace(BlockPlaceEvent event) { + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(event.getPlayer()); + if (fPlayer == null) { + return; + } + List missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("place")).collect(Collectors.toList()); + for (Mission mission2 : missions) { + ConfigurationSection section = plugin.getConfig().getConfigurationSection("Missions").getConfigurationSection(mission2.getName()); + if (!event.getBlock().getType().toString().equals(section.getConfigurationSection("Mission").getString("Material"))) { + continue; + } + mission2.incrementProgress(); + checkIfDone(fPlayer, mission2, section); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerFish(PlayerFishEvent event) { + if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) { + return; + } + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(event.getPlayer()); + if (fPlayer == null) { + return; + } + List missions = fPlayer.getFaction().getMissions().values().stream().filter(mission -> mission.getType().equalsIgnoreCase("fish")).collect(Collectors.toList()); + for (Mission mission2 : missions) { + ConfigurationSection section = plugin.getConfig().getConfigurationSection("Missions").getConfigurationSection(mission2.getName()); + mission2.incrementProgress(); + checkIfDone(fPlayer, mission2, section); + } + } + + private void checkIfDone(FPlayer fPlayer, Mission mission, ConfigurationSection section) { + if (mission.getProgress() < section.getConfigurationSection("Mission").getLong("Amount")) { + return; + } + for (String command : section.getConfigurationSection("Reward").getStringList("Commands")) { + P.p.getServer().dispatchCommand(P.p.getServer().getConsoleSender(), command.replace("%faction%", fPlayer.getFaction().getTag())); + } + fPlayer.getFaction().getMissions().remove(mission.getName()); + fPlayer.getFaction().msg(TL.MISSION_MISSION_FINISHED, plugin.color(section.getString("Name"))); + } +} diff --git a/src/main/java/com/massivecraft/factions/struct/Permission.java b/src/main/java/com/massivecraft/factions/struct/Permission.java index 4945225e..c07af987 100644 --- a/src/main/java/com/massivecraft/factions/struct/Permission.java +++ b/src/main/java/com/massivecraft/factions/struct/Permission.java @@ -53,6 +53,7 @@ public enum Permission { COLEADER("coleader"), MOD_ANY("mod.any"), COLEADER_ANY("coleader.any"), + MISSIONS("missions"), MODIFY_POWER("modifypower"), MONEY_BALANCE("money.balance"), MONEY_BALANCE_ANY("money.balance.any"), diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java index ad9bf956..d01f70aa 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java @@ -7,6 +7,7 @@ import com.massivecraft.factions.event.FactionDisbandEvent.PlayerDisbandReason; import com.massivecraft.factions.iface.EconomyParticipator; import com.massivecraft.factions.iface.RelationParticipator; import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.missions.Mission; import com.massivecraft.factions.scoreboards.FTeamWrapper; import com.massivecraft.factions.struct.BanInfo; import com.massivecraft.factions.struct.Permission; @@ -72,6 +73,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { private long lastDeath; private int strikes = 0; private int points = 0; + private Map missions = new ConcurrentHashMap<>(); // -------------------------------------------- // @@ -91,6 +93,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { this.permanent = false; this.money = 0.0; this.powerBoost = 0.0; + this.missions = new ConcurrentHashMap<>(); this.foundedDate = System.currentTimeMillis(); this.maxVaults = Conf.defaultMaxVaults; this.defaultRole = Role.RECRUIT; @@ -111,6 +114,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { lastPlayerLoggedOffTime = old.lastPlayerLoggedOffTime; money = old.money; powerBoost = old.powerBoost; + missions = new ConcurrentHashMap<>(); relationWish = old.relationWish; claimOwnership = old.claimOwnership; fplayers = new HashSet<>(); @@ -1159,6 +1163,12 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { return claimOwnership; } + + @Override + public Map getMissions() { + return this.missions; + } + public void clearAllClaimOwnership() { claimOwnership.clear(); } diff --git a/src/main/java/com/massivecraft/factions/zcore/util/TL.java b/src/main/java/com/massivecraft/factions/zcore/util/TL.java index 1e18a0ec..395f5d22 100644 --- a/src/main/java/com/massivecraft/factions/zcore/util/TL.java +++ b/src/main/java/com/massivecraft/factions/zcore/util/TL.java @@ -944,6 +944,13 @@ public enum TL { GENERIC_PLACEHOLDER(""), GENERIC_NOTENOUGHMONEY("&cYou dont have enough money!"), GENERIC_MONEYTAKE("&c{amount} has been taken from your account."), + + + MISSION_MISSION_STARTED("&f%1$s &dstarted the %2$s &fmission"), + MISSION_MISSION_ACTIVE("&c&l[!] &7This mission is currently active!"), + MISSION_MISSION_MAX_ALLOWED("&c&l[!] &7You may not have more then &b%1$s &7missions active at once."), + MISSION_MISSION_FINISHED("&c&l[!] &7Your faction has successfully completed %1$s mission!"), + COMMAND_MISSION_DESCRIPTION("Opens missions gui"), // F Global \\ diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d8caa1b8..c2573fbf 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -696,6 +696,55 @@ f-grace: f-points: Enabled: true +############################################################ +# +------------------------------------------------------+ # +# | Faction Missions | # +# +------------------------------------------------------+ # +############################################################ +MissionGUISize: 3 +Missions-Enabled: true +Missions-GUI-Title: '&bFaction Missions' +MaximumMissionsAllowedAtOnce: 1 +Mission-Progress-Format: '&b&lProgression: &f{progress}&7/&e{total}' + +#Mission Types: KILL, MINE, FISH +Missions: + sugarcane: + Slot: 11 + Material: "SUGAR_CANE" + Name: "&f10,000 &2Sugar Cane" + Lore: + - "&b&lMine &f&n10,000&r &2Sugar Cane" + Mission: + Type: "MINE" + Material: "SUGAR_CANE_BLOCK" + Amount: 10000 + Reward: + Commands: ["f points add %faction% 100"] + zombie: + Slot: 15 + Material: "ROTTEN_FLESH" + Name: "&f1,000 &eZombies" + Lore: + - "&b&lKill &f&n1,000&r &eZombies" + Mission: + Type: "KILL" + EntityType: "ZOMBIE" + Amount: 1000 + Reward: + Commands: ["f points add %faction% 100"] + fishing: + Slot: 13 + Material: "FISHING_ROD" + Name: "&f100 &6Fish" + Lore: + - "&b&lCatch fish &n100&r &d<imes" + Mission: + Type: "FISH" + Amount: 100 + Reward: + Commands: ["f points add %faction% 100"] + ############################################################ # +------------------------------------------------------+ # # | Faction Focus | # diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ae5672c7..0a3ae6f8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -128,6 +128,8 @@ permissions: description: gives ability to toggle grace period on and off factions.invsee: description: Allows players to use the inventory see command + factions.missions: + description: Allows players to use missions command factions.alts: description: Allows players to use the alts command factions.announce: