Compare commits
30 Commits
2.2.7-STAB
...
duels
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3771feb01 | ||
|
|
07599fa06d | ||
|
|
3d997bbf16 | ||
|
|
a086f8db7a | ||
|
|
2c13204294 | ||
|
|
43c567ee02 | ||
|
|
dfbfbf9981 | ||
|
|
13399c53c5 | ||
|
|
55d6af7195 | ||
|
|
4f675dfd66 | ||
|
|
22957b641b | ||
|
|
0fc3e47289 | ||
|
|
730693aed1 | ||
|
|
61570be012 | ||
|
|
bcc04e6174 | ||
|
|
d30780e06e | ||
|
|
ed73baf5f1 | ||
|
|
94d2035c78 | ||
|
|
8ff8c78a44 | ||
|
|
591dc2172f | ||
|
|
1a4c860c46 | ||
|
|
ad56264c5d | ||
|
|
def1a8b15a | ||
|
|
8b577d360b | ||
|
|
f34ebc73fa | ||
|
|
c86db7ab51 | ||
|
|
070f239948 | ||
|
|
018f08699d | ||
|
|
5542245b2a | ||
|
|
6eb204587d |
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -23,7 +23,7 @@ A clear and concise description of what you expected to happen.
|
|||||||
**Screenshots**
|
**Screenshots**
|
||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
**Server VErsion (please complete the following information):**
|
**Server Version (please complete the following information):**
|
||||||
- Spigot Version: [e.g. Paperspigot 1.8.8]
|
- Spigot Version: [e.g. Paperspigot 1.8.8]
|
||||||
- Factions Version [use /f version]
|
- Factions Version [use /f version]
|
||||||
- Minecraft Version: [If a bug is dependent on client version]
|
- Minecraft Version: [If a bug is dependent on client version]
|
||||||
|
|||||||
37
README.md
37
README.md
@@ -1,9 +1,8 @@
|
|||||||
# SaberFactions
|
# SaberFactions
|
||||||
|
|
||||||
 [](https://www.codefactor.io/repository/github/driftay/saber-factions)
|
 [](https://www.codefactor.io/repository/github/driftay/saber-factions) [](https://github.com/SaberLLC/Saber-Factions/blob/1.6.x/LICENSE) 
|
||||||
|
|
||||||
SaberFactions is a fork of both FactionsUUID and SavageFactions. Creators of those plugins include DtrShock and ProSavage. Credits to them.
|
SaberFactions is an exotic, performance optmized, and feature rich factions plugin that focuses on not only making the player experience as great as possibly but maintaining this aspect with the cost of NOTHING! We strive to continue development for SaberFactions as the factions community is strongly growing and seeking new players every day.
|
||||||
SaberFactions is the newest, latest and greatest factions plugin designed for the best and most functional factions experience minecraft has seen!
|
|
||||||
|
|
||||||
## Some Exciting Features
|
## Some Exciting Features
|
||||||
Some of our features include the following
|
Some of our features include the following
|
||||||
@@ -14,21 +13,27 @@ Some of our features include the following
|
|||||||
* More F Upgrades - Unbreakable Redstone Upgrade, Members Upgrade, and Power Upgrade.
|
* More F Upgrades - Unbreakable Redstone Upgrade, Members Upgrade, and Power Upgrade.
|
||||||
* Factions Corner - In the corner of a world? No Problem /f corner will claim your entire buffer for you!
|
* Factions Corner - In the corner of a world? No Problem /f corner will claim your entire buffer for you!
|
||||||
* Command Cooldowns - Configurable Command Cooldowns for most "spam" commands. And so Much More to Come!
|
* Command Cooldowns - Configurable Command Cooldowns for most "spam" commands. And so Much More to Come!
|
||||||
|
* Faction Points - A point based currency that can be used for any aspect of factions gameplay!
|
||||||
|
* Faction Shop - A shop that essentially lets players buy in-game items in exchange for faction points!
|
||||||
|
* Faction Discord Integration - A discord intergrated factions bot for each faction to have their own personalized discord bot within their faction!
|
||||||
|
* Faction Audit - A full based logging system (GUI designed) to see every aspect of what happens in your faction!
|
||||||
|
* Factions Check System - An automated check system that alerts players when to check walls/buffers!
|
||||||
|
* Faction Reserves - A system designed to reserve a specific faction name for a specific player!
|
||||||
|
|
||||||
## Dependency With Maven
|
## Dependency With Maven
|
||||||
```
|
```
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jitpack.io</id>
|
<id>jitpack.io</id>
|
||||||
<url>https://jitpack.io</url>
|
<url>https://jitpack.io</url>
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.Driftay</groupId>
|
<groupId>com.github.SaberLLC</groupId>
|
||||||
<artifactId>Saber-Factions</artifactId>
|
<artifactId>Saber-Factions</artifactId>
|
||||||
<version>1.4.1</version>
|
<version>2.2.7-STABLE</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
## Moving Forward
|
## Moving Forward
|
||||||
|
|
||||||
@@ -36,8 +41,8 @@ Moving forward we plan to take all suggestions into consideration, as they come
|
|||||||
We Plan on Releasing the latest and greatest factions/skyblock/prison plugins minecraft has to offer and wont settle for anything less
|
We Plan on Releasing the latest and greatest factions/skyblock/prison plugins minecraft has to offer and wont settle for anything less
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
Our Discord is Currently In Progress of a Massive Overhaul, but we still encourage our community to join and express any concerns/questions/suggestions they may have
|
Have a problem, question, or concer? We encourage our community to join and express any inquiry you may have
|
||||||
https://Discord.Saber.pw
|
https://discord.saber.pw
|
||||||
|
|
||||||
Look forward to a bright future and a journey with all of you!
|
Look forward to a bright future and a journey with all of you!
|
||||||
|
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<groupId>com.massivecraft</groupId>
|
<groupId>com.massivecraft</groupId>
|
||||||
<artifactId>Factions</artifactId>
|
<artifactId>Factions</artifactId>
|
||||||
<version>1.6.9.5-2.2.7-RC</version>
|
<version>1.6.9.5-2.2.9-RC</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>SaberFactions</name>
|
<name>SaberFactions</name>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class Conf {
|
|||||||
public static final transient double DYNMAP_STYLE_FILL_OPACITY = 0.35D;
|
public static final transient double DYNMAP_STYLE_FILL_OPACITY = 0.35D;
|
||||||
public static final transient String DYNMAP_STYLE_HOME_MARKER = "greenflag";
|
public static final transient String DYNMAP_STYLE_HOME_MARKER = "greenflag";
|
||||||
public static final transient boolean DYNMAP_STYLE_BOOST = false;
|
public static final transient boolean DYNMAP_STYLE_BOOST = false;
|
||||||
public static List<String> baseCommandAliases = new ArrayList<>();
|
public static List<String> baseCommandAliases = new ArrayList<>(Collections.singletonList("f"));
|
||||||
public static boolean allowNoSlashCommand = true;
|
public static boolean allowNoSlashCommand = true;
|
||||||
|
|
||||||
// Colors
|
// Colors
|
||||||
@@ -411,7 +411,6 @@ public class Conf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
baseCommandAliases.add("f");
|
|
||||||
|
|
||||||
blacklistedFactionNames.add("somenamehere");
|
blacklistedFactionNames.add("somenamehere");
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,10 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,6 +46,30 @@ public interface FPlayer extends EconomyParticipator {
|
|||||||
*/
|
*/
|
||||||
void setEnemiesNearby(Boolean b);
|
void setEnemiesNearby(Boolean b);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get this players inventory prior to entering the duel (Will be set to null after duel!)
|
||||||
|
* @return Map of old inventory contents
|
||||||
|
*/
|
||||||
|
Map<Integer, ItemStack> getOldInv();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set this players stored inventory, this inventory will be retrieved after a duel is complete
|
||||||
|
* @param inv Map of inventory contents
|
||||||
|
*/
|
||||||
|
void setOldInv(Map<Integer, ItemStack> inv);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to check if player has entered a duel and has not proceeded
|
||||||
|
* @return boolean determining if the player is in a duel
|
||||||
|
*/
|
||||||
|
boolean isInDuel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used before and after duels to set the inDuel status of the FPlayer
|
||||||
|
* @param b Desired status
|
||||||
|
*/
|
||||||
|
void setInDuel(Boolean b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get if a player has setup their Discord before
|
* Get if a player has setup their Discord before
|
||||||
* @return if the player setup Discord as a boolean
|
* @return if the player setup Discord as a boolean
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
|
|
||||||
public interface Faction extends EconomyParticipator {
|
public interface Faction extends EconomyParticipator {
|
||||||
|
|
||||||
|
void broadcast(String s);
|
||||||
|
|
||||||
String getMemberRoleId();
|
String getMemberRoleId();
|
||||||
|
|
||||||
void setMemberRoleId(String roleId);
|
void setMemberRoleId(String roleId);
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ import com.massivecraft.factions.struct.Relation;
|
|||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
import com.massivecraft.factions.util.*;
|
import com.massivecraft.factions.util.*;
|
||||||
import com.massivecraft.factions.util.Particles.ReflectionUtils;
|
import com.massivecraft.factions.util.Particles.ReflectionUtils;
|
||||||
|
import com.massivecraft.factions.util.Sync.SyncExecutor;
|
||||||
|
import com.massivecraft.factions.util.Wait.WaitExecutor;
|
||||||
import com.massivecraft.factions.zcore.CommandVisibility;
|
import com.massivecraft.factions.zcore.CommandVisibility;
|
||||||
import com.massivecraft.factions.zcore.MPlugin;
|
import com.massivecraft.factions.zcore.MPlugin;
|
||||||
import com.massivecraft.factions.zcore.fperms.Access;
|
import com.massivecraft.factions.zcore.fperms.Access;
|
||||||
@@ -52,6 +54,7 @@ import java.io.*;
|
|||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.OpenOption;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
@@ -78,6 +81,7 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
public boolean mc112 = false;
|
public boolean mc112 = false;
|
||||||
public boolean mc113 = false;
|
public boolean mc113 = false;
|
||||||
public boolean mc114 = false;
|
public boolean mc114 = false;
|
||||||
|
public boolean mc115 = false;
|
||||||
public boolean useNonPacketParticles = false;
|
public boolean useNonPacketParticles = false;
|
||||||
public boolean factionsFlight = false;
|
public boolean factionsFlight = false;
|
||||||
SkriptAddon skriptAddon;
|
SkriptAddon skriptAddon;
|
||||||
@@ -164,6 +168,10 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
FactionsPlugin.instance.log("Minecraft Version 1.14 found.");
|
FactionsPlugin.instance.log("Minecraft Version 1.14 found.");
|
||||||
mc114 = true;
|
mc114 = true;
|
||||||
break;
|
break;
|
||||||
|
case 15:
|
||||||
|
FactionsPlugin.instance.log("Minecraft Version 1.15 found.");
|
||||||
|
mc115 = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
migrateFPlayerLeaders();
|
migrateFPlayerLeaders();
|
||||||
log("==== End Setup ====");
|
log("==== End Setup ====");
|
||||||
@@ -175,6 +183,10 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
this.saveResource("config.yml", false);
|
this.saveResource("config.yml", false);
|
||||||
this.reloadConfig();
|
this.reloadConfig();
|
||||||
}
|
}
|
||||||
|
//Start synctask
|
||||||
|
SyncExecutor.startTask();
|
||||||
|
//Start wait task executor
|
||||||
|
WaitExecutor.startTask();
|
||||||
//Attempt to generate a permission list
|
//Attempt to generate a permission list
|
||||||
PermissionList.generateFile();
|
PermissionList.generateFile();
|
||||||
// Load Conf from disk
|
// Load Conf from disk
|
||||||
@@ -184,12 +196,13 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
if (Conf.dependencyCheck && (!Bukkit.getPluginManager().isPluginEnabled("Vault"))) {
|
if (Conf.dependencyCheck && (!Bukkit.getPluginManager().isPluginEnabled("Vault"))) {
|
||||||
divider();
|
divider();
|
||||||
System.out.println("You are missing dependencies!");
|
System.out.println("You are missing dependencies!");
|
||||||
System.out.println("Please verify and Vault are installed!");
|
System.out.println("Please verify Vault is installed!");
|
||||||
Conf.save();
|
Conf.save();
|
||||||
Bukkit.getPluginManager().disablePlugin(instance);
|
Bukkit.getPluginManager().disablePlugin(instance);
|
||||||
divider();
|
divider();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//TODO fix this
|
||||||
//Update their config if needed
|
//Update their config if needed
|
||||||
// Updater.updateIfNeeded(getConfig());
|
// Updater.updateIfNeeded(getConfig());
|
||||||
RegisteredServiceProvider<Economy> rsp = FactionsPlugin.this.getServer().getServicesManager().getRegistration(Economy.class);
|
RegisteredServiceProvider<Economy> rsp = FactionsPlugin.this.getServer().getServicesManager().getRegistration(Economy.class);
|
||||||
@@ -425,6 +438,18 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
|
try {
|
||||||
|
String path = Paths.get(getDataFolder().getAbsolutePath()).toAbsolutePath().toString() + File.separator + "reserves.json";
|
||||||
|
File file = new File(path);
|
||||||
|
if (!file.exists()) {
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
file.createNewFile();
|
||||||
|
}
|
||||||
|
Files.write(Paths.get(file.getPath()),getGsonBuilder().create().toJson(reserveObjects).getBytes());
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
// only save data if plugin actually completely loaded successfully
|
// only save data if plugin actually completely loaded successfully
|
||||||
if (this.loadSuccessful) Conf.saveSync();
|
if (this.loadSuccessful) Conf.saveSync();
|
||||||
|
|
||||||
@@ -464,7 +489,7 @@ public class FactionsPlugin extends MPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack createItem(Material material, int amount, short datavalue, String name, List<String> lore) {
|
public ItemStack createItem(Material material, int amount, short datavalue, String name, List<String> lore) {
|
||||||
ItemStack item = new ItemStack(XMaterial.matchXMaterial(material.toString()).parseMaterial(), amount, datavalue);
|
ItemStack item = new ItemStack(XMaterial.matchXMaterial(material.toString()).get().parseMaterial(), amount, datavalue);
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
meta.setDisplayName(color(name));
|
meta.setDisplayName(color(name));
|
||||||
meta.setLore(colorList(lore));
|
meta.setLore(colorList(lore));
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DroppingAnvil
|
||||||
|
*/
|
||||||
public class Aliases {
|
public class Aliases {
|
||||||
/**
|
|
||||||
* @author DroppingAnvil
|
|
||||||
*/
|
|
||||||
public static ArrayList<String> alts_alts = new ArrayList<>(Arrays.asList("alts", "alt"));
|
public static ArrayList<String> alts_alts = new ArrayList<>(Arrays.asList("alts", "alt"));
|
||||||
public static ArrayList<String> alts_list = new ArrayList<>(Arrays.asList("list", "l"));
|
public static ArrayList<String> alts_list = new ArrayList<>(Arrays.asList("list", "l"));
|
||||||
public static ArrayList<String> alts_invite = new ArrayList<>(Collections.singletonList("invite"));
|
public static ArrayList<String> alts_invite = new ArrayList<>(Collections.singletonList("invite"));
|
||||||
|
|||||||
@@ -72,13 +72,14 @@ public class CmdDisband extends FCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean access = false;
|
boolean access = false;
|
||||||
if (context.fPlayer.getPlayer().hasMetadata("disband_confirm") && (time = context.fPlayer.getPlayer().getMetadata("disband_confirm").get(0).asLong()) != 0L && System.currentTimeMillis() - time <= TimeUnit.SECONDS.toMillis(3L)) {
|
if (context.fPlayer.getPlayer().hasMetadata("disband_confirm") && (time = context.fPlayer.getPlayer().getMetadata("disband_confirm").get(0).asLong()) != 0L && System.currentTimeMillis() - time <= TimeUnit.SECONDS.toMillis(3L)) {
|
||||||
access = true;
|
access = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!access) {
|
if (!access) {
|
||||||
if(Conf.useDisbandGUI) {
|
if(Conf.useDisbandGUI && !context.fPlayer.isAdminBypassing() || !context.player.isOp()) {
|
||||||
if (!disbandMap.containsKey(context.player.getUniqueId().toString())) {
|
if (!disbandMap.containsKey(context.player.getUniqueId().toString())) {
|
||||||
new FDisbandFrame(context.faction).buildGUI(context.fPlayer);
|
new FDisbandFrame(context.faction).buildGUI(context.fPlayer);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ import com.massivecraft.factions.zcore.util.TL;
|
|||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
public class CmdDiscord extends FCommand {
|
public class CmdDiscord extends FCommand {
|
||||||
public CmdDiscord() {
|
public CmdDiscord() {
|
||||||
super();
|
super();
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import com.massivecraft.factions.zcore.fperms.Access;
|
|||||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -103,7 +102,7 @@ public class CmdFly extends FCommand {
|
|||||||
if (toFac.getAccess(fme, PermissableAction.FLY) == Access.ALLOW) return true;
|
if (toFac.getAccess(fme, PermissableAction.FLY) == Access.ALLOW) return true;
|
||||||
if (fme.getFaction().isWilderness()) return false;
|
if (fme.getFaction().isWilderness()) return false;
|
||||||
if (toFac.isSystemFaction())
|
if (toFac.isSystemFaction())
|
||||||
return me.hasPermission(Permission.valueOf("FLY_" + ChatColor.stripColor(toFac.getTag()).toUpperCase()).node);
|
return me.hasPermission(toFac.isWilderness() ? Permission.FLY_WILDERNESS.node : toFac.isSafeZone() ? Permission.FLY_SAFEZONE.node : Permission.FLY_WARZONE.node);
|
||||||
Relation relationTo = toFac.getRelationTo(fme.getFaction());
|
Relation relationTo = toFac.getRelationTo(fme.getFaction());
|
||||||
if (!relationTo.isEnemy() && !relationTo.isMember())
|
if (!relationTo.isEnemy() && !relationTo.isMember())
|
||||||
return me.hasPermission(Permission.valueOf("FLY_" + relationTo.name()).node);
|
return me.hasPermission(Permission.valueOf("FLY_" + relationTo.name()).node);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.massivecraft.factions.cmd;
|
|||||||
import com.massivecraft.factions.Conf;
|
import com.massivecraft.factions.Conf;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.discord.Discord;
|
import com.massivecraft.factions.discord.Discord;
|
||||||
|
import com.massivecraft.factions.duels.RequestGUI;
|
||||||
import com.massivecraft.factions.listeners.FactionsPlayerListener;
|
import com.massivecraft.factions.listeners.FactionsPlayerListener;
|
||||||
import com.massivecraft.factions.shop.ShopConfig;
|
import com.massivecraft.factions.shop.ShopConfig;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
@@ -44,6 +45,9 @@ public class CmdReload extends FCommand {
|
|||||||
FCmdRoot.instance.addVariableCommands();
|
FCmdRoot.instance.addVariableCommands();
|
||||||
FCmdRoot.instance.rebuild();
|
FCmdRoot.instance.rebuild();
|
||||||
long timeReload = (System.currentTimeMillis() - timeInitStart);
|
long timeReload = (System.currentTimeMillis() - timeInitStart);
|
||||||
|
//Duels
|
||||||
|
RequestGUI.inv = null;
|
||||||
|
RequestGUI.responseMap.clear();
|
||||||
|
|
||||||
context.msg(TL.COMMAND_RELOAD_TIME, timeReload);
|
context.msg(TL.COMMAND_RELOAD_TIME, timeReload);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,9 @@ public class CmdSeeChunk extends FCommand {
|
|||||||
for (Object nameObject : seeChunkMap.keySet()) {
|
for (Object nameObject : seeChunkMap.keySet()) {
|
||||||
String name = nameObject + "";
|
String name = nameObject + "";
|
||||||
Player player = Bukkit.getPlayer(name);
|
Player player = Bukkit.getPlayer(name);
|
||||||
showBorders(player);
|
if (player != null) {
|
||||||
|
showBorders(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
manageTask();
|
manageTask();
|
||||||
}, 0, interval);
|
}, 0, interval);
|
||||||
@@ -110,24 +112,19 @@ public class CmdSeeChunk extends FCommand {
|
|||||||
private void showPillar(Player player, World world, int blockX, int blockZ) {
|
private void showPillar(Player player, World world, int blockX, int blockZ) {
|
||||||
for (int blockY = 0; blockY < player.getLocation().getBlockY() + 30; blockY++) {
|
for (int blockY = 0; blockY < player.getLocation().getBlockY() + 30; blockY++) {
|
||||||
Location loc = new Location(world, blockX, blockY, blockZ).add(0.5, 0, 0.5);
|
Location loc = new Location(world, blockX, blockY, blockZ).add(0.5, 0, 0.5);
|
||||||
if (loc.getBlock().getType() != Material.AIR) {
|
if (loc.getBlock().getType() != Material.AIR) continue;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (useParticles) {
|
if (useParticles) {
|
||||||
if (FactionsPlugin.getInstance().useNonPacketParticles) {
|
if (FactionsPlugin.getInstance().useNonPacketParticles) {
|
||||||
// Dust options only exists in the 1.13 API, so we use an
|
// Dust options only exists in the 1.13 API, so we use an
|
||||||
// alternative method to achieve this in lower versions.
|
// alternative method to achieve this in lower versions.
|
||||||
if (FactionsPlugin.getInstance().mc113 || FactionsPlugin.getInstance().mc114) {
|
if (FactionsPlugin.getInstance().mc113 || FactionsPlugin.getInstance().mc114 || FactionsPlugin.getInstance().mc115) {
|
||||||
player.spawnParticle(Particle.REDSTONE, loc, 0, new Particle.DustOptions(Color.RED, 1));
|
player.spawnParticle(Particle.REDSTONE, loc, 0, new Particle.DustOptions(Color.RED, 1));
|
||||||
} else {
|
} else {
|
||||||
player.getWorld().spawnParticle(Particle.REDSTONE, loc, 0, 255, 0, 0, 1);
|
player.getWorld().spawnParticle(Particle.REDSTONE, loc, 0, 255, 0, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
this.effect.display(0, 0, 0, 0, 1, loc, player);
|
this.effect.display(0, 0, 0, 0, 1, loc, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Material type = blockY % 5 == 0 ? XMaterial.REDSTONE_LAMP.parseMaterial() : XMaterial.BLACK_STAINED_GLASS.parseMaterial();
|
Material type = blockY % 5 == 0 ? XMaterial.REDSTONE_LAMP.parseMaterial() : XMaterial.BLACK_STAINED_GLASS.parseMaterial();
|
||||||
VisualizeUtil.addLocation(player, loc, type);
|
VisualizeUtil.addLocation(player, loc, type);
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public enum FLogType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Material getMaterial() {
|
public Material getMaterial() {
|
||||||
return XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("faudit-gui.materials." + name().toLowerCase())).parseMaterial();
|
return XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("faudit-gui.materials." + name().toLowerCase())).get().parseMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMsg() {
|
public String getMsg() {
|
||||||
|
|||||||
@@ -52,19 +52,19 @@ public class CheckSettingsFrame implements InventoryHolder, FactionGUI {
|
|||||||
|
|
||||||
public void build() {
|
public void build() {
|
||||||
Faction faction = fPlayer.getFaction();
|
Faction faction = fPlayer.getFaction();
|
||||||
ItemStack wallsStack = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("f-check.wall-check.Type")).parseItem();
|
ItemStack wallsStack = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("f-check.wall-check.Type")).get().parseItem();
|
||||||
ItemMeta wallsMeta = wallsStack.getItemMeta();
|
ItemMeta wallsMeta = wallsStack.getItemMeta();
|
||||||
wallsMeta.setDisplayName(TL.CHECK_WALL_CHECK_GUI_ICON.toString());
|
wallsMeta.setDisplayName(TL.CHECK_WALL_CHECK_GUI_ICON.toString());
|
||||||
wallsMeta.setLore(Collections.singletonList(TL.CHECK_CHECK_LORE_LINE.format(getFormatted(faction.getWallCheckMinutes()))));
|
wallsMeta.setLore(Collections.singletonList(TL.CHECK_CHECK_LORE_LINE.format(getFormatted(faction.getWallCheckMinutes()))));
|
||||||
wallsStack.setItemMeta(wallsMeta);
|
wallsStack.setItemMeta(wallsMeta);
|
||||||
inventory.setItem(FactionsPlugin.getInstance().getConfig().getInt("f-check.wall-check.slot"), wallsStack);
|
inventory.setItem(FactionsPlugin.getInstance().getConfig().getInt("f-check.wall-check.slot"), wallsStack);
|
||||||
ItemStack bufferStack = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("f-check.buffer-check.Type")).parseItem();
|
ItemStack bufferStack = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("f-check.buffer-check.Type")).get().parseItem();
|
||||||
ItemMeta bufferMeta = bufferStack.getItemMeta();
|
ItemMeta bufferMeta = bufferStack.getItemMeta();
|
||||||
bufferMeta.setDisplayName(TL.CHECK_BUFFER_CHECK_GUI_ICON.toString());
|
bufferMeta.setDisplayName(TL.CHECK_BUFFER_CHECK_GUI_ICON.toString());
|
||||||
bufferMeta.setLore(Collections.singletonList(TL.CHECK_CHECK_LORE_LINE.format(getFormatted(faction.getBufferCheckMinutes()))));
|
bufferMeta.setLore(Collections.singletonList(TL.CHECK_CHECK_LORE_LINE.format(getFormatted(faction.getBufferCheckMinutes()))));
|
||||||
bufferStack.setItemMeta(bufferMeta);
|
bufferStack.setItemMeta(bufferMeta);
|
||||||
inventory.setItem(FactionsPlugin.getInstance().getConfig().getInt("f-check.buffer-check.slot"), bufferStack);
|
inventory.setItem(FactionsPlugin.getInstance().getConfig().getInt("f-check.buffer-check.slot"), bufferStack);
|
||||||
ItemStack historyStack = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("f-check.history.Type")).parseItem();
|
ItemStack historyStack = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("f-check.history.Type")).get().parseItem();
|
||||||
ItemMeta historyMeta = historyStack.getItemMeta();
|
ItemMeta historyMeta = historyStack.getItemMeta();
|
||||||
historyMeta.setDisplayName(TL.CHECK_HISTORY_GUI_ICON.toString());
|
historyMeta.setDisplayName(TL.CHECK_HISTORY_GUI_ICON.toString());
|
||||||
historyStack.setItemMeta(historyMeta);
|
historyStack.setItemMeta(historyMeta);
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
public class ConvertConfigHandler {
|
public class ConvertConfigHandler {
|
||||||
|
|
||||||
static File savageConfigFile = new File("plugins/Factions/SavageFactions/config.yml");
|
static File savageConfigFile = new File("plugins/Factions/SavageFactions/config.yml");
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class CmdTntFill extends FCommand {
|
|||||||
|
|
||||||
public CmdTntFill() {
|
public CmdTntFill() {
|
||||||
super();
|
super();
|
||||||
this.aliases.add("tntfill");
|
this.aliases.addAll(Aliases.tnt_tntfill);
|
||||||
|
|
||||||
this.requiredArgs.add("radius");
|
this.requiredArgs.add("radius");
|
||||||
this.requiredArgs.add("amount");
|
this.requiredArgs.add("amount");
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.massivecraft.factions.cmd.CommandContext;
|
|||||||
import com.massivecraft.factions.cmd.CommandRequirements;
|
import com.massivecraft.factions.cmd.CommandRequirements;
|
||||||
import com.massivecraft.factions.cmd.FCommand;
|
import com.massivecraft.factions.cmd.FCommand;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
|
import com.massivecraft.factions.util.Wait.WaitedTask;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -23,18 +24,21 @@ import java.util.HashMap;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class CmdWild extends FCommand {
|
/**
|
||||||
public static HashMap<Player, Integer> waitingTeleport;
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class CmdWild extends FCommand implements WaitedTask {
|
||||||
public static HashMap<Player, String> teleportRange;
|
public static HashMap<Player, String> teleportRange;
|
||||||
public static HashSet<Player> teleporting;
|
public static HashSet<Player> teleporting;
|
||||||
|
public static CmdWild instance;
|
||||||
|
|
||||||
public CmdWild() {
|
public CmdWild() {
|
||||||
super();
|
super();
|
||||||
|
if (instance == null) instance = this;
|
||||||
this.aliases.addAll(Aliases.wild);
|
this.aliases.addAll(Aliases.wild);
|
||||||
this.requirements = new CommandRequirements.Builder(Permission.WILD)
|
this.requirements = new CommandRequirements.Builder(Permission.WILD)
|
||||||
.playerOnly()
|
.playerOnly()
|
||||||
.build();
|
.build();
|
||||||
waitingTeleport = new HashMap<>();
|
|
||||||
teleporting = new HashSet<>();
|
teleporting = new HashSet<>();
|
||||||
teleportRange = new HashMap<>();
|
teleportRange = new HashMap<>();
|
||||||
startWild();
|
startWild();
|
||||||
@@ -42,7 +46,7 @@ public class CmdWild extends FCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void perform(CommandContext context) {
|
public void perform(CommandContext context) {
|
||||||
if (!waitingTeleport.containsKey(context.player)) {
|
if (!teleportRange.containsKey(context.player)) {
|
||||||
context.player.openInventory(new WildGUI(context.player, context.fPlayer).getInventory());
|
context.player.openInventory(new WildGUI(context.player, context.fPlayer).getInventory());
|
||||||
} else {
|
} else {
|
||||||
context.fPlayer.msg(TL.COMMAND_WILD_WAIT);
|
context.fPlayer.msg(TL.COMMAND_WILD_WAIT);
|
||||||
@@ -50,23 +54,6 @@ public class CmdWild extends FCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void startWild() {
|
public void startWild() {
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.instance, () -> {
|
|
||||||
for (Player p : waitingTeleport.keySet()) {
|
|
||||||
int i = waitingTeleport.get(p) - 1;
|
|
||||||
if (i > 0) {
|
|
||||||
if (i != 1) {
|
|
||||||
p.sendMessage(TL.COMMAND_WILD_WAIT.format((i + " Seconds")));
|
|
||||||
} else {
|
|
||||||
p.sendMessage(TL.COMMAND_WILD_WAIT.format((i + " Second")));
|
|
||||||
}
|
|
||||||
waitingTeleport.replace(p, i);
|
|
||||||
} else {
|
|
||||||
p.sendMessage(TL.COMMAND_WILD_SUCCESS.toString());
|
|
||||||
waitingTeleport.remove(p);
|
|
||||||
attemptTeleport(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 0L, 20L);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void attemptTeleport(Player p) {
|
public void attemptTeleport(Player p) {
|
||||||
@@ -121,4 +108,14 @@ public class CmdWild extends FCommand {
|
|||||||
public TL getUsageTranslation() {
|
public TL getUsageTranslation() {
|
||||||
return TL.COMMAND_WILD_DESCRIPTION;
|
return TL.COMMAND_WILD_DESCRIPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleSuccess(Player player) {
|
||||||
|
attemptTeleport(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleFailure(Player player) {
|
||||||
|
player.sendMessage(TL.COMMAND_WILD_INTERUPTED.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package com.massivecraft.factions.cmd.wild;
|
|||||||
import com.massivecraft.factions.FPlayer;
|
import com.massivecraft.factions.FPlayer;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.util.FactionGUI;
|
import com.massivecraft.factions.util.FactionGUI;
|
||||||
|
import com.massivecraft.factions.util.Wait.WaitExecutor;
|
||||||
|
import com.massivecraft.factions.util.Wait.WaitTask;
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
import com.massivecraft.factions.zcore.util.TL;
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -18,6 +20,10 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
//TODO StaticGUI
|
||||||
public class WildGUI implements FactionGUI {
|
public class WildGUI implements FactionGUI {
|
||||||
Player player;
|
Player player;
|
||||||
FPlayer fplayer;
|
FPlayer fplayer;
|
||||||
@@ -35,7 +41,7 @@ public class WildGUI implements FactionGUI {
|
|||||||
if (map.containsKey(slot)) {
|
if (map.containsKey(slot)) {
|
||||||
String zone = map.get(slot);
|
String zone = map.get(slot);
|
||||||
if (fplayer.hasMoney(FactionsPlugin.getInstance().getConfig().getInt("Wild.Zones." + zone + ".Cost"))) {
|
if (fplayer.hasMoney(FactionsPlugin.getInstance().getConfig().getInt("Wild.Zones." + zone + ".Cost"))) {
|
||||||
CmdWild.waitingTeleport.put(player, FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait"));
|
WaitExecutor.taskMap.put(player, new WaitTask(FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait"), TL.COMMAND_WILD_INPROGRESS, player, CmdWild.instance));
|
||||||
CmdWild.teleportRange.put(player, zone);
|
CmdWild.teleportRange.put(player, zone);
|
||||||
fplayer.msg(TL.COMMAND_WILD_WAIT, FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait") + " Seconds");
|
fplayer.msg(TL.COMMAND_WILD_WAIT, FactionsPlugin.getInstance().getConfig().getInt("Wild.Wait") + " Seconds");
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
@@ -46,7 +52,7 @@ public class WildGUI implements FactionGUI {
|
|||||||
@Override
|
@Override
|
||||||
public void build() {
|
public void build() {
|
||||||
inv = Bukkit.createInventory(this, FactionsPlugin.getInstance().getConfig().getInt("Wild.GUI.Size"), FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("Wild.GUI.Name")));
|
inv = Bukkit.createInventory(this, FactionsPlugin.getInstance().getConfig().getInt("Wild.GUI.Size"), FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("Wild.GUI.Name")));
|
||||||
ItemStack fillItem = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("Wild.GUI.FillMaterial")).parseItem();
|
ItemStack fillItem = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("Wild.GUI.FillMaterial")).get().parseItem();
|
||||||
ItemMeta meta = fillItem.getItemMeta();
|
ItemMeta meta = fillItem.getItemMeta();
|
||||||
if (meta == null) return;
|
if (meta == null) return;
|
||||||
meta.setDisplayName("");
|
meta.setDisplayName("");
|
||||||
@@ -55,7 +61,7 @@ public class WildGUI implements FactionGUI {
|
|||||||
inv.setItem(fill, fillItem);
|
inv.setItem(fill, fillItem);
|
||||||
}
|
}
|
||||||
for (String key : Objects.requireNonNull(FactionsPlugin.getInstance().getConfig().getConfigurationSection("Wild.Zones")).getKeys(false)) {
|
for (String key : Objects.requireNonNull(FactionsPlugin.getInstance().getConfig().getConfigurationSection("Wild.Zones")).getKeys(false)) {
|
||||||
ItemStack zoneItem = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("Wild.Zones." + key + ".Material")).parseItem();
|
ItemStack zoneItem = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString("Wild.Zones." + key + ".Material")).get().parseItem();
|
||||||
ItemMeta zoneMeta = zoneItem.getItemMeta();
|
ItemMeta zoneMeta = zoneItem.getItemMeta();
|
||||||
if (zoneMeta == null) return;
|
if (zoneMeta == null) return;
|
||||||
List<String> lore = new ArrayList<>();
|
List<String> lore = new ArrayList<>();
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ import java.util.HashSet;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
public class Discord {
|
public class Discord {
|
||||||
//We dont want waitingLink to reset during reload so we are going to set it here
|
//We dont want waitingLink to reset during reload so we are going to set it here
|
||||||
public static HashMap<Integer, FPlayer> waitingLink;
|
public static HashMap<Integer, FPlayer> waitingLink;
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package com.massivecraft.factions.discord;
|
package com.massivecraft.factions.discord;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
public class DiscordSetupAttempt {
|
public class DiscordSetupAttempt {
|
||||||
private Boolean success;
|
private Boolean success;
|
||||||
private String reason;
|
private String reason;
|
||||||
|
|||||||
166
src/main/java/com/massivecraft/factions/duels/Duel.java
Normal file
166
src/main/java/com/massivecraft/factions/duels/Duel.java
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
package com.massivecraft.factions.duels;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FPlayer;
|
||||||
|
import com.massivecraft.factions.Faction;
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class Duel {
|
||||||
|
private Faction faction1;
|
||||||
|
private Faction faction2;
|
||||||
|
private HashMap<FPlayer, Boolean> eliminationMap;
|
||||||
|
private HashMap<FPlayer, Location> oldLocMap;
|
||||||
|
|
||||||
|
public Duel(Faction faction1, Faction faction2) {
|
||||||
|
this.faction1 = faction1;
|
||||||
|
this.faction2 = faction2;
|
||||||
|
this.eliminationMap = new HashMap<>();
|
||||||
|
this.oldLocMap = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Faction getFaction1() {
|
||||||
|
return faction1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Faction getFaction2() {
|
||||||
|
return faction2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<FPlayer> getEliminated() {
|
||||||
|
Set<FPlayer> list = new HashSet<>();
|
||||||
|
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
|
||||||
|
if (entry.getValue()) list.add(entry.getKey());
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<FPlayer> getEliminated(Faction faction) {
|
||||||
|
Set<FPlayer> list = new HashSet<>();
|
||||||
|
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
|
||||||
|
if (entry.getValue() && entry.getKey().getFaction().equals(faction)) list.add(entry.getKey());
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<FPlayer> getRemaining() {
|
||||||
|
Set<FPlayer> list = new HashSet<>();
|
||||||
|
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
|
||||||
|
if (!entry.getValue()) list.add(entry.getKey());
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<FPlayer> getRemaining(Faction faction) {
|
||||||
|
Set<FPlayer> list = new HashSet<>();
|
||||||
|
for (Map.Entry<FPlayer, Boolean> entry : eliminationMap.entrySet()) {
|
||||||
|
if (!entry.getValue() && entry.getKey().getFaction().equals(faction)) list.add(entry.getKey());
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleExit(FPlayer fplayer, Boolean death) {
|
||||||
|
if (death) {
|
||||||
|
eliminationMap.replace(fplayer, false, true);
|
||||||
|
fplayer.getPlayer().spigot().respawn();
|
||||||
|
}
|
||||||
|
fplayer.getPlayer().teleport(oldLocMap.get(fplayer), PlayerTeleportEvent.TeleportCause.PLUGIN);
|
||||||
|
for (Map.Entry<Integer, ItemStack> entry : fplayer.getOldInv().entrySet()) {
|
||||||
|
fplayer.getPlayer().getInventory().setItem(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
fplayer.setOldInv(null);
|
||||||
|
fplayer.setInDuel(false);
|
||||||
|
if (getClearWinner() != null) {
|
||||||
|
handleEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleEnd() {
|
||||||
|
if (FactionsPlugin.getInstance().getConfig().getBoolean("Duels.Broadcast.BroadcastResult.Enabled")) {
|
||||||
|
Bukkit.broadcastMessage(getEndMessage());
|
||||||
|
}
|
||||||
|
for (FPlayer fp : getRemaining()) {
|
||||||
|
handleExit(fp, false);
|
||||||
|
}
|
||||||
|
Map.Entry<Faction, Faction> fvf = (Map.Entry<Faction, Faction>) Duels.duelQueue.entrySet().toArray()[0];
|
||||||
|
if (fvf != null) {
|
||||||
|
Duels.duel = new Duel(fvf.getKey(), fvf.getValue());
|
||||||
|
Duels.preparingDuel = true;
|
||||||
|
Duels.acceptedDuel.clear();
|
||||||
|
Duels.sendRequests(faction1);
|
||||||
|
Duels.sendRequests(faction2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Faction getClearWinner() {
|
||||||
|
Set<FPlayer> team1r = getRemaining(faction1);
|
||||||
|
Set<FPlayer> team2r = getRemaining(faction2);
|
||||||
|
if (team1r.isEmpty() && !team2r.isEmpty()) return faction2;
|
||||||
|
if (team2r.isEmpty() && !team1r.isEmpty()) return faction1;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Faction getWinning(Set<FPlayer> s1, Set<FPlayer> s2) {
|
||||||
|
if (s1.size() > s2.size()) return faction1;
|
||||||
|
return faction2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEndMessage() {
|
||||||
|
String temp;
|
||||||
|
Set<FPlayer> team1r = getRemaining(faction1);
|
||||||
|
Set<FPlayer> team2r = getRemaining(faction2);
|
||||||
|
if (team1r.size() == team2r.size()) {
|
||||||
|
//Tied
|
||||||
|
temp = FactionsPlugin.getInstance().getConfig().getString("Duels.Broadcast.BroadcastResult.FormatTie");
|
||||||
|
} else {
|
||||||
|
temp = FactionsPlugin.getInstance().getConfig().getString("Duels.Broadcast.BroadcastResult.Format");
|
||||||
|
}
|
||||||
|
Faction winner = getWinning(team1r, team2r);
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', temp
|
||||||
|
.replace("{team1_tag}", faction1.getTag())
|
||||||
|
.replace("{team2_tag}", faction2.getTag())
|
||||||
|
.replace("{remaining}", String.valueOf(getRemaining(winner).size()))
|
||||||
|
.replace("{tag}", winner.getTag())
|
||||||
|
.replace("{losers_tag}", winner == faction1 ? faction2.getTag() : faction1.getTag()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDeathMessage(Player player) {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&',
|
||||||
|
FactionsPlugin.getInstance().getConfig().getString("Duels.Broadcast.BroadcastKill.Format")
|
||||||
|
.replace("{team1_remaining}", String.valueOf(getRemaining(getFaction1()).size()))
|
||||||
|
.replace("{team2_remaining}", String.valueOf(getRemaining(getFaction2()).size()))
|
||||||
|
.replace("{team1_eliminated}", String.valueOf(getEliminated(getFaction1()).size()))
|
||||||
|
.replace("{team2_eliminated}", String.valueOf(getEliminated(getFaction2()).size()))
|
||||||
|
.replace("{team1_tag}", faction1.getTag())
|
||||||
|
.replace("{team2_tag}", faction2.getTag())
|
||||||
|
.replace("{eliminated_name}", player.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<FPlayer, Location> getLocMap() {
|
||||||
|
return oldLocMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFPlayer(FPlayer fp) {
|
||||||
|
oldLocMap.put(fp, fp.getPlayer().getLocation());
|
||||||
|
eliminationMap.put(fp, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
Duels.preparingDuel = false;
|
||||||
|
for (FPlayer fplayer : Duels.acceptedDuel) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
73
src/main/java/com/massivecraft/factions/duels/Duels.java
Normal file
73
src/main/java/com/massivecraft/factions/duels/Duels.java
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
package com.massivecraft.factions.duels;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FPlayer;
|
||||||
|
import com.massivecraft.factions.Faction;
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class Duels {
|
||||||
|
public static boolean enabled = true;
|
||||||
|
public static long targetTimeout = Integer.toUnsignedLong(FactionsPlugin.getInstance().getConfig().getInt("Duels.WaitTime")) * 1000;
|
||||||
|
public static ConcurrentHashMap<FPlayer, Long> guiMap = new ConcurrentHashMap<>();
|
||||||
|
public static HashSet<FPlayer> acceptedDuel = new HashSet<>();
|
||||||
|
public static HashMap<Faction, Faction> duelQueue = new HashMap<>();
|
||||||
|
public static Boolean preparingDuel = false;
|
||||||
|
public static Duel duel;
|
||||||
|
public static HashSet<SpawnPoint> spawnPoints = new HashSet<>();
|
||||||
|
|
||||||
|
private static void startGUITask() {
|
||||||
|
Bukkit.getScheduler().scheduleAsyncRepeatingTask(FactionsPlugin.instance, () -> {
|
||||||
|
for (Map.Entry<FPlayer, Long> entry : guiMap.entrySet()) {
|
||||||
|
if (System.currentTimeMillis() - entry.getValue() <= targetTimeout) RequestGUI.closeSync(true, entry.getKey());
|
||||||
|
}
|
||||||
|
}, 0L, 20L);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setup() {
|
||||||
|
enabled = FactionsPlugin.getInstance().getConfig().getBoolean("Duels.Enabled", true);
|
||||||
|
if (enabled) startGUITask();
|
||||||
|
loadSpawnPoints();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadSpawnPoints() {
|
||||||
|
spawnPoints.clear();
|
||||||
|
loadTeamSpawnPoints(1);
|
||||||
|
loadTeamSpawnPoints(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadTeamSpawnPoints(Integer i) {
|
||||||
|
FileConfiguration config = FactionsPlugin.getInstance().getConfig();
|
||||||
|
String team = "Team" + i;
|
||||||
|
for (String key : config.getConfigurationSection("Duels.SpawnPoints." + team).getKeys(false)) {
|
||||||
|
spawnPoints.add(new SpawnPoint (i, getSpawnPointLocation(team, key, config), Integer.parseInt(key)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getSpawnPointLocation(String team, String key, FileConfiguration config) {
|
||||||
|
String[] locKeyArray = config.getString("Duels.SpawnPoints." + team + "." + key).split(",");
|
||||||
|
return new Location(Bukkit.getWorld(locKeyArray[0]), Double.parseDouble(locKeyArray[1]), Double.parseDouble(locKeyArray[2]), Double.parseDouble(locKeyArray[3]));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendRequests(Faction faction) {
|
||||||
|
for (FPlayer fplayer : faction.getFPlayers()) {
|
||||||
|
if (fplayer.isOnline()) {
|
||||||
|
fplayer.getPlayer().openInventory(RequestGUI.inv);
|
||||||
|
guiMap.put(fplayer, System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
121
src/main/java/com/massivecraft/factions/duels/RequestGUI.java
Normal file
121
src/main/java/com/massivecraft/factions/duels/RequestGUI.java
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
package com.massivecraft.factions.duels;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FPlayer;
|
||||||
|
import com.massivecraft.factions.FPlayers;
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import com.massivecraft.factions.util.StaticGUI;
|
||||||
|
import com.massivecraft.factions.util.Sync.SyncExecutor;
|
||||||
|
import com.massivecraft.factions.util.Sync.SyncTask;
|
||||||
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.inventory.ClickType;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
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.logging.Level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class RequestGUI implements StaticGUI {
|
||||||
|
private static ItemStack fillItem;
|
||||||
|
private static RequestResponse fallback;
|
||||||
|
FileConfiguration config = FactionsPlugin.getInstance().getConfig();
|
||||||
|
public static HashMap<Integer, RequestResponse> responseMap = new HashMap<>();
|
||||||
|
public static Inventory inv;
|
||||||
|
private static RequestGUI instance;
|
||||||
|
public static RequestGUI getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RequestGUI() {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = this;
|
||||||
|
}
|
||||||
|
if (fillItem == null) {
|
||||||
|
fillItem = XMaterial.matchXMaterial(config.getString("Duels.GUI.Fill-Item.Material")).get().parseItem();
|
||||||
|
ItemMeta fillMeta = fillItem.getItemMeta();
|
||||||
|
fillMeta.setDisplayName(" ");
|
||||||
|
fillItem.setItemMeta(fillMeta);
|
||||||
|
}
|
||||||
|
if (fallback == null) {
|
||||||
|
try {
|
||||||
|
fallback = RequestResponse.valueOf(config.getString("Duels.GUI.Fill-Item.Response"));
|
||||||
|
} catch (EnumConstantNotPresentException e) {
|
||||||
|
FactionsPlugin.getInstance().getLogger().log(Level.WARNING, "FallbackResponse is invalid! Using Ignored");
|
||||||
|
fallback = RequestResponse.Ignored;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (inv == null) {
|
||||||
|
inv = Bukkit.createInventory(this, 27, "Join Faction Duel");
|
||||||
|
int fi = 0;
|
||||||
|
while (fi != 26) {
|
||||||
|
inv.setItem(fi, fillItem);
|
||||||
|
fi++;
|
||||||
|
}
|
||||||
|
for (String key : config.getConfigurationSection("Duels.GUI.Items").getKeys(false)) {
|
||||||
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Duels.GUI.Items." + key + ".Material")).get().parseItem();
|
||||||
|
ItemMeta itemMeta = item.getItemMeta();
|
||||||
|
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString("Duels.GUI.Items." + key + ".Name")));
|
||||||
|
List<String> lore = new ArrayList<>();
|
||||||
|
for (String loreEntry : config.getStringList("Duels.GUI.Items." + key + ".Lore")) {
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', loreEntry));
|
||||||
|
}
|
||||||
|
itemMeta.setLore(lore);
|
||||||
|
item.setItemMeta(itemMeta);
|
||||||
|
int slot = Integer.parseInt(key);
|
||||||
|
responseMap.put(slot, RequestResponse.valueOf(config.getString("Duels.GUI.Items." + key + ".Response")));
|
||||||
|
inv.setItem(slot, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void click(int slot, ClickType action, Player player) {
|
||||||
|
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
|
||||||
|
if (action != ClickType.LEFT) {
|
||||||
|
processResponse(fallback, fPlayer);
|
||||||
|
} else {
|
||||||
|
processResponse(responseMap.get(slot), fPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void processResponse(RequestResponse response, FPlayer fPlayer) {
|
||||||
|
switch (response) {
|
||||||
|
case Accepted:
|
||||||
|
fPlayer.getFaction().broadcast(TL.DUEL_REQUEST_ACCEPTED_PLAYER.format(fPlayer.getNameAndTitle()));
|
||||||
|
Duels.acceptedDuel.add(fPlayer);
|
||||||
|
close(false, fPlayer);
|
||||||
|
break;
|
||||||
|
case Rejected:
|
||||||
|
fPlayer.getFaction().broadcast(TL.DUEL_REQUEST_REJECTED_PLAYER.format(fPlayer.getNameAndTitle()));
|
||||||
|
close(false, fPlayer);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void close(Boolean reject, FPlayer fPlayer) {
|
||||||
|
if (reject) {
|
||||||
|
processResponse(RequestResponse.Rejected, fPlayer);
|
||||||
|
}
|
||||||
|
fPlayer.getPlayer().closeInventory();
|
||||||
|
Duels.guiMap.remove(fPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void closeSync(Boolean reject, FPlayer fPlayer) {
|
||||||
|
SyncExecutor.taskQueue.add(new SyncTask(RequestGUI.getInstance(), "close", reject, fPlayer));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Inventory getInventory() {
|
||||||
|
return inv;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.massivecraft.factions.duels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public enum RequestResponse {
|
||||||
|
Accepted,
|
||||||
|
Rejected,
|
||||||
|
Ignored,
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.massivecraft.factions.duels;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
public class SpawnPoint {
|
||||||
|
private Integer team;
|
||||||
|
private Integer id;
|
||||||
|
private Location location;
|
||||||
|
|
||||||
|
public SpawnPoint(Integer team, Location location, Integer id) {
|
||||||
|
this.team = team;
|
||||||
|
this.location = location;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTeam() {
|
||||||
|
return team;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getLocation() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getID() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,6 +40,7 @@ import org.bukkit.potion.PotionEffectType;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
@@ -161,18 +162,20 @@ public class FactionsBlockListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onBlockPlace(BlockPlaceEvent event) {
|
public void onBlockPlace(BlockPlaceEvent event) {
|
||||||
Faction at = Board.getInstance().getFactionAt(new FLocation(event.getBlockPlaced()));
|
|
||||||
|
|
||||||
if (!event.canBuild()) return;
|
if (!event.canBuild()) return;
|
||||||
if (event.getBlockPlaced().getType() == Material.FIRE) return;
|
if (event.getBlockPlaced().getType() == Material.FIRE) return;
|
||||||
|
boolean isSpawner = event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial());
|
||||||
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "build", false)) {
|
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "build", false)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial()) && Conf.spawnerLock) {
|
|
||||||
event.setCancelled(true);
|
if (isSpawner) {
|
||||||
event.getPlayer().sendMessage(FactionsPlugin.getInstance().color(TL.COMMAND_SPAWNER_LOCK_CANNOT_PLACE.toString()));
|
if (Conf.spawnerLock) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.getPlayer().sendMessage(FactionsPlugin.getInstance().color(TL.COMMAND_SPAWNER_LOCK_CANNOT_PLACE.toString()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,7 +380,7 @@ public class FactionsBlockListener implements Listener {
|
|||||||
int radius = FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Effect-Radius");
|
int radius = FactionsPlugin.getInstance().getConfig().getInt("fbanners.Banner-Effect-Radius");
|
||||||
List<String> effects = FactionsPlugin.getInstance().getConfig().getStringList("fbanners.Effects");
|
List<String> effects = FactionsPlugin.getInstance().getConfig().getStringList("fbanners.Effects");
|
||||||
int affectorTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.getInstance(), () -> {
|
int affectorTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.getInstance(), () -> {
|
||||||
for (Entity e1 : banner.getLocation().getWorld().getNearbyEntities(banner.getLocation(), radius, 255.0, radius)) {
|
for (Entity e1 : Objects.requireNonNull(banner.getLocation().getWorld()).getNearbyEntities(banner.getLocation(), radius, 255.0, radius)) {
|
||||||
if (e1 instanceof Player) {
|
if (e1 instanceof Player) {
|
||||||
Player player = (Player) e1;
|
Player player = (Player) e1;
|
||||||
FPlayer fplayer = FPlayers.getInstance().getByPlayer(player);
|
FPlayer fplayer = FPlayers.getInstance().getByPlayer(player);
|
||||||
@@ -386,7 +389,7 @@ public class FactionsBlockListener implements Listener {
|
|||||||
}
|
}
|
||||||
for (String effect : effects) {
|
for (String effect : effects) {
|
||||||
String[] components = effect.split(":");
|
String[] components = effect.split(":");
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.getByName(components[0]), 100, Integer.parseInt(components[1])));
|
player.addPotionEffect(new PotionEffect(Objects.requireNonNull(PotionEffectType.getByName(components[0])), 100, Integer.parseInt(components[1])));
|
||||||
}
|
}
|
||||||
ParticleEffect.LAVA.display(1.0f, 1.0f, 1.0f, 1.0f, 10, banner.getLocation(), 16.0);
|
ParticleEffect.LAVA.display(1.0f, 1.0f, 1.0f, 1.0f, 10, banner.getLocation(), 16.0);
|
||||||
ParticleEffect.FLAME.display(1.0f, 1.0f, 1.0f, 1.0f, 10, banner.getLocation(), 16.0);
|
ParticleEffect.FLAME.display(1.0f, 1.0f, 1.0f, 1.0f, 10, banner.getLocation(), 16.0);
|
||||||
@@ -490,27 +493,45 @@ public class FactionsBlockListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onBlockBreak(BlockBreakEvent event) {
|
public void onBlockBreak(BlockBreakEvent event) {
|
||||||
Block block = event.getBlock();
|
//If there is an error its much safer to not allow the block to be broken
|
||||||
|
try {
|
||||||
|
Block block = event.getBlock();
|
||||||
|
|
||||||
Faction at = Board.getInstance().getFactionAt(new FLocation(block));
|
Faction at = Board.getInstance().getFactionAt(new FLocation(block));
|
||||||
boolean isSpawner = event.getBlock().getType() == XMaterial.SPAWNER.parseMaterial();
|
boolean isSpawner = event.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial());
|
||||||
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), !isSpawner ? "destroy" : "mine spawners", false)) {
|
|
||||||
event.setCancelled(true);
|
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
|
||||||
return;
|
event.setCancelled(true);
|
||||||
}
|
return;
|
||||||
if (block != null && isSpawner) {
|
}
|
||||||
ItemStack item = new ItemStack(block.getType(), 1, (short) block.getData());
|
|
||||||
if (at != null && at.isNormal()) {
|
FPlayer fme = FPlayers.getInstance().getByPlayer(event.getPlayer());
|
||||||
FPlayer fplayer = FPlayers.getInstance().getByPlayer(event.getPlayer());
|
if (fme == null || !fme.hasFaction()) return;
|
||||||
if (fplayer != null) {
|
|
||||||
BlockState state = block.getState();
|
if (isSpawner) {
|
||||||
if (state instanceof CreatureSpawner) {
|
Access access = fme.getFaction().getAccess(fme, PermissableAction.SPAWNER);
|
||||||
CreatureSpawner spawner = (CreatureSpawner) state;
|
if (access != Access.ALLOW && fme.getRole() != Role.LEADER) {
|
||||||
item.setDurability(spawner.getSpawnedType().getTypeId());
|
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "mine spawners");
|
||||||
}
|
|
||||||
handleSpawnerUpdate(at, event.getPlayer(), item, LogTimer.TimerSubType.SPAWNER_BREAK);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isSpawner && !fme.isAdminBypassing()) {
|
||||||
|
ItemStack item = new ItemStack(block.getType(), 1, block.getData());
|
||||||
|
if (at != null && at.isNormal()) {
|
||||||
|
FPlayer fplayer = FPlayers.getInstance().getByPlayer(event.getPlayer());
|
||||||
|
if (fplayer != null) {
|
||||||
|
BlockState state = block.getState();
|
||||||
|
if (state instanceof CreatureSpawner) {
|
||||||
|
CreatureSpawner spawner = (CreatureSpawner) state;
|
||||||
|
item.setDurability(spawner.getSpawnedType().getTypeId());
|
||||||
|
}
|
||||||
|
handleSpawnerUpdate(at, event.getPlayer(), item, LogTimer.TimerSubType.SPAWNER_BREAK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,10 +18,8 @@ import com.massivecraft.factions.struct.ChatMode;
|
|||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
import com.massivecraft.factions.struct.Relation;
|
import com.massivecraft.factions.struct.Relation;
|
||||||
import com.massivecraft.factions.struct.Role;
|
import com.massivecraft.factions.struct.Role;
|
||||||
import com.massivecraft.factions.util.CC;
|
import com.massivecraft.factions.util.*;
|
||||||
import com.massivecraft.factions.util.FactionGUI;
|
import com.massivecraft.factions.util.Wait.WaitExecutor;
|
||||||
import com.massivecraft.factions.util.VisualizeUtil;
|
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
|
||||||
import com.massivecraft.factions.zcore.fperms.Access;
|
import com.massivecraft.factions.zcore.fperms.Access;
|
||||||
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
||||||
import com.massivecraft.factions.zcore.persist.MemoryFPlayer;
|
import com.massivecraft.factions.zcore.persist.MemoryFPlayer;
|
||||||
@@ -338,7 +336,7 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
return PermissableAction.DOOR;
|
return PermissableAction.DOOR;
|
||||||
if (material.name().toUpperCase().contains("BUTTON") || material.name().toUpperCase().contains("PRESSURE") || material.name().contains("DIODE") || material.name().contains("COMPARATOR"))
|
if (material.name().toUpperCase().contains("BUTTON") || material.name().toUpperCase().contains("PRESSURE") || material.name().contains("DIODE") || material.name().contains("COMPARATOR"))
|
||||||
return PermissableAction.BUTTON;
|
return PermissableAction.BUTTON;
|
||||||
if (FactionsPlugin.instance.mc113 || FactionsPlugin.instance.mc114) {
|
if (FactionsPlugin.instance.mc113 || FactionsPlugin.instance.mc114 || FactionsPlugin.getInstance().mc115) {
|
||||||
switch (material) {
|
switch (material) {
|
||||||
case LEVER:
|
case LEVER:
|
||||||
return PermissableAction.LEVER;
|
return PermissableAction.LEVER;
|
||||||
@@ -381,6 +379,8 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
case TRAPPED_CHEST:
|
case TRAPPED_CHEST:
|
||||||
case CHEST_MINECART:
|
case CHEST_MINECART:
|
||||||
|
|
||||||
|
case BARREL:
|
||||||
|
|
||||||
case SHULKER_BOX:
|
case SHULKER_BOX:
|
||||||
case BLACK_SHULKER_BOX:
|
case BLACK_SHULKER_BOX:
|
||||||
case BLUE_SHULKER_BOX:
|
case BLUE_SHULKER_BOX:
|
||||||
@@ -819,7 +819,7 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
Material type;
|
Material type;
|
||||||
if (event.getItem() != null) {
|
if (event.getItem() != null) {
|
||||||
// Convert 1.8 Material Names -> 1.14
|
// Convert 1.8 Material Names -> 1.14
|
||||||
type = XMaterial.matchXMaterial(event.getItem().getType().toString()).parseMaterial();
|
type = XMaterial.matchXMaterial(event.getItem().getType().toString()).get().parseMaterial();
|
||||||
} else {
|
} else {
|
||||||
type = null;
|
type = null;
|
||||||
}
|
}
|
||||||
@@ -918,17 +918,22 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onLogoutMove(PlayerMoveEvent e) {
|
public void onLogoutMove(PlayerMoveEvent e) {
|
||||||
LogoutHandler handler = LogoutHandler.getByName(e.getPlayer().getName());
|
LogoutHandler handler = LogoutHandler.getByName(e.getPlayer().getName());
|
||||||
|
|
||||||
|
if (Objects.requireNonNull(e.getTo()).getBlockX() == e.getFrom().getBlockX() &&
|
||||||
|
e.getTo().getBlockY() == e.getFrom().getBlockY() &&
|
||||||
|
e.getTo().getBlockZ() == e.getFrom().getBlockZ())
|
||||||
|
return;
|
||||||
|
|
||||||
if (handler.isLogoutActive(e.getPlayer())) {
|
if (handler.isLogoutActive(e.getPlayer())) {
|
||||||
handler.cancelLogout(e.getPlayer());
|
handler.cancelLogout(e.getPlayer());
|
||||||
e.getPlayer().sendMessage(String.valueOf(TL.COMMAND_LOGOUT_MOVED));
|
e.getPlayer().sendMessage(String.valueOf(TL.COMMAND_LOGOUT_MOVED));
|
||||||
}
|
}
|
||||||
if (CmdWild.waitingTeleport.containsKey(e.getPlayer())) {
|
WaitExecutor.handleAction(e.getPlayer());
|
||||||
CmdWild.waitingTeleport.remove(e.getPlayer());
|
|
||||||
FPlayers.getInstance().getByPlayer(e.getPlayer()).msg(TL.COMMAND_WILD_INTERUPTED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -940,10 +945,7 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
handler.cancelLogout(player);
|
handler.cancelLogout(player);
|
||||||
player.sendMessage(String.valueOf(TL.COMMAND_LOGOUT_DAMAGE_TAKEN));
|
player.sendMessage(String.valueOf(TL.COMMAND_LOGOUT_DAMAGE_TAKEN));
|
||||||
}
|
}
|
||||||
if (CmdWild.waitingTeleport.containsKey(player)) {
|
WaitExecutor.handleAction(player);
|
||||||
CmdWild.waitingTeleport.remove(player);
|
|
||||||
FPlayers.getInstance().getByPlayer(player).msg(TL.COMMAND_WILD_INTERUPTED);
|
|
||||||
}
|
|
||||||
if (CmdWild.teleporting.contains(player)) {
|
if (CmdWild.teleporting.contains(player)) {
|
||||||
if (!FactionsPlugin.getInstance().getConfig().getBoolean("Wild.FallDamage") && e.getCause() == EntityDamageEvent.DamageCause.FALL) {
|
if (!FactionsPlugin.getInstance().getConfig().getBoolean("Wild.FallDamage") && e.getCause() == EntityDamageEvent.DamageCause.FALL) {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
@@ -971,11 +973,15 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
((FactionGUI) event.getClickedInventory().getHolder()).onClick(event.getRawSlot(), event.getClick());
|
((FactionGUI) event.getClickedInventory().getHolder()).onClick(event.getRawSlot(), event.getClick());
|
||||||
}
|
}
|
||||||
|
if (event.getClickedInventory().getHolder() instanceof StaticGUI) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
((StaticGUI) event.getClickedInventory().getHolder()).click(event.getRawSlot(), event.getClick(), (Player) event.getWhoClicked());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPlayerMoveGUI(InventoryDragEvent event) {
|
public void onPlayerMoveGUI(InventoryDragEvent event) {
|
||||||
if (event.getInventory().getHolder() instanceof FactionGUI) event.setCancelled(true);
|
if (event.getInventory().getHolder() instanceof FactionGUI || event.getInventory().getHolder() instanceof StaticGUI) event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
@@ -1060,13 +1066,13 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
FPlayer fp = FPlayers.getInstance().getByPlayer(e.getPlayer());
|
FPlayer fp = FPlayers.getInstance().getByPlayer(e.getPlayer());
|
||||||
|
|
||||||
if(fp == null) return;
|
if (fp == null) return;
|
||||||
|
|
||||||
if (fp.getChatMode() != ChatMode.FACTION) {
|
if (fp.getChatMode() != ChatMode.FACTION) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Faction f = fp.getFaction();
|
Faction f = fp.getFaction();
|
||||||
if(f == null) return;
|
if (f == null) return;
|
||||||
if (f.isSystemFaction()) {
|
if (f.isSystemFaction()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1085,7 +1091,7 @@ public class FactionsPlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Member m : t.getMembers()) {
|
for (Member m : t.getMembers()) {
|
||||||
if (m.getEffectiveName().contains(target) | m.getUser().getName().contains(target)){
|
if (m.getEffectiveName().contains(target) | m.getUser().getName().contains(target)) {
|
||||||
targets.add("@" + m.getUser().getName() + "#" + m.getUser().getDiscriminator());
|
targets.add("@" + m.getUser().getName() + "#" + m.getUser().getDiscriminator());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class MissionGUI implements FactionGUI {
|
|||||||
if (configurationSection == null) {
|
if (configurationSection == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ItemStack fillItem = XMaterial.matchXMaterial(configurationSection.getString("FillItem.Material")).parseItem();
|
ItemStack fillItem = XMaterial.matchXMaterial(configurationSection.getString("FillItem.Material")).get().parseItem();
|
||||||
ItemMeta fillmeta = fillItem.getItemMeta();
|
ItemMeta fillmeta = fillItem.getItemMeta();
|
||||||
fillmeta.setDisplayName("");
|
fillmeta.setDisplayName("");
|
||||||
fillItem.setItemMeta(fillmeta);
|
fillItem.setItemMeta(fillmeta);
|
||||||
@@ -109,7 +109,7 @@ public class MissionGUI implements FactionGUI {
|
|||||||
ConfigurationSection section = configurationSection.getConfigurationSection(key);
|
ConfigurationSection section = configurationSection.getConfigurationSection(key);
|
||||||
int slot = section.getInt("Slot");
|
int slot = section.getInt("Slot");
|
||||||
|
|
||||||
ItemStack itemStack = XMaterial.matchXMaterial(section.getString("Material")).parseItem();
|
ItemStack itemStack = XMaterial.matchXMaterial(section.getString("Material")).get().parseItem();
|
||||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||||
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', section.getString("Name")));
|
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', section.getString("Name")));
|
||||||
List<String> loreLines = new ArrayList<>();
|
List<String> loreLines = new ArrayList<>();
|
||||||
@@ -134,7 +134,7 @@ public class MissionGUI implements FactionGUI {
|
|||||||
if (plugin.getConfig().getBoolean("Randomization.Enabled")) {
|
if (plugin.getConfig().getBoolean("Randomization.Enabled")) {
|
||||||
ItemStack start;
|
ItemStack start;
|
||||||
ItemMeta meta;
|
ItemMeta meta;
|
||||||
start = XMaterial.matchXMaterial(plugin.getConfig().getString("Randomization.Start-Item.Allowed.Material")).parseItem();
|
start = XMaterial.matchXMaterial(plugin.getConfig().getString("Randomization.Start-Item.Allowed.Material")).get().parseItem();
|
||||||
meta = start.getItemMeta();
|
meta = start.getItemMeta();
|
||||||
meta.setDisplayName(plugin.color(plugin.getConfig().getString("Randomization.Start-Item.Allowed.Name")));
|
meta.setDisplayName(plugin.color(plugin.getConfig().getString("Randomization.Start-Item.Allowed.Name")));
|
||||||
List<String> loree = new ArrayList<>();
|
List<String> loree = new ArrayList<>();
|
||||||
@@ -144,7 +144,7 @@ public class MissionGUI implements FactionGUI {
|
|||||||
meta.setLore(loree);
|
meta.setLore(loree);
|
||||||
start.setItemMeta(meta);
|
start.setItemMeta(meta);
|
||||||
if (fPlayer.getFaction().getCompletedMissions().size() >= configurationSection.getKeys(false).size() - 1 && plugin.getConfig().getBoolean("DenyMissionsMoreThenOnce")) {
|
if (fPlayer.getFaction().getCompletedMissions().size() >= configurationSection.getKeys(false).size() - 1 && plugin.getConfig().getBoolean("DenyMissionsMoreThenOnce")) {
|
||||||
start = XMaterial.matchXMaterial(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Material")).parseItem();
|
start = XMaterial.matchXMaterial(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Material")).get().parseItem();
|
||||||
meta = start.getItemMeta();
|
meta = start.getItemMeta();
|
||||||
meta.setDisplayName(plugin.color(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Name")));
|
meta.setDisplayName(plugin.color(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Name")));
|
||||||
List<String> lore = new ArrayList<>();
|
List<String> lore = new ArrayList<>();
|
||||||
@@ -155,7 +155,7 @@ public class MissionGUI implements FactionGUI {
|
|||||||
start.setItemMeta(meta);
|
start.setItemMeta(meta);
|
||||||
}
|
}
|
||||||
if (fPlayer.getFaction().getMissions().size() >= plugin.getConfig().getInt("MaximumMissionsAllowedAtOnce")) {
|
if (fPlayer.getFaction().getMissions().size() >= plugin.getConfig().getInt("MaximumMissionsAllowedAtOnce")) {
|
||||||
start = XMaterial.matchXMaterial(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Material")).parseItem();
|
start = XMaterial.matchXMaterial(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Material")).get().parseItem();
|
||||||
meta = start.getItemMeta();
|
meta = start.getItemMeta();
|
||||||
meta.setDisplayName(plugin.color(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Name")));
|
meta.setDisplayName(plugin.color(plugin.getConfig().getString("Randomization.Start-Item.Disallowed.Name")));
|
||||||
List<String> lore = new ArrayList<>();
|
List<String> lore = new ArrayList<>();
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class ShopGUIFrame {
|
|||||||
for (int a = 1; a <= items; a++) {
|
for (int a = 1; a <= items; a++) {
|
||||||
String s = a + "";
|
String s = a + "";
|
||||||
int slot = ShopConfig.getShop().getInt("items." + s + ".slot");
|
int slot = ShopConfig.getShop().getInt("items." + s + ".slot");
|
||||||
Material material = XMaterial.matchXMaterial(ShopConfig.getShop().getString("items." + s + ".block")).parseMaterial();
|
Material material = XMaterial.matchXMaterial(ShopConfig.getShop().getString("items." + s + ".block")).get().parseMaterial();
|
||||||
int cost = ShopConfig.getShop().getInt("items." + s + ".cost");
|
int cost = ShopConfig.getShop().getInt("items." + s + ".cost");
|
||||||
String name = ShopConfig.getShop().getString("items." + s + ".name");
|
String name = ShopConfig.getShop().getString("items." + s + ".name");
|
||||||
boolean glowing = ShopConfig.getShop().getBoolean("items." + s + ".glowing");
|
boolean glowing = ShopConfig.getShop().getBoolean("items." + s + ".glowing");
|
||||||
@@ -93,7 +93,7 @@ public class ShopGUIFrame {
|
|||||||
|
|
||||||
private ItemStack buildDummyItem(Faction f) {
|
private ItemStack buildDummyItem(Faction f) {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("F-Shop.GUI.dummy-item");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("F-Shop.GUI.dummy-item");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ public enum Relation implements Permissable {
|
|||||||
String displayName = replacePlaceholders(RELATION_CONFIG.getString("placeholder-item.name", ""));
|
String displayName = replacePlaceholders(RELATION_CONFIG.getString("placeholder-item.name", ""));
|
||||||
List<String> lore = new ArrayList<>();
|
List<String> lore = new ArrayList<>();
|
||||||
|
|
||||||
Material material = XMaterial.matchXMaterial(RELATION_CONFIG.getString("materials." + name().toLowerCase())).parseMaterial();
|
Material material = XMaterial.matchXMaterial(RELATION_CONFIG.getString("materials." + name().toLowerCase())).get().parseMaterial();
|
||||||
if (material == null) {
|
if (material == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ public enum Role implements Permissable {
|
|||||||
String displayName = replacePlaceholders(RELATION_CONFIG.getString("placeholder-item.name", ""));
|
String displayName = replacePlaceholders(RELATION_CONFIG.getString("placeholder-item.name", ""));
|
||||||
List<String> lore = new ArrayList<>();
|
List<String> lore = new ArrayList<>();
|
||||||
|
|
||||||
Material material = XMaterial.matchXMaterial(RELATION_CONFIG.getString("materials." + name().toLowerCase(), "STAINED_CLAY")).parseMaterial();
|
Material material = XMaterial.matchXMaterial(RELATION_CONFIG.getString("materials." + name().toLowerCase(), "STAINED_CLAY")).get().parseMaterial();
|
||||||
if (material == null) {
|
if (material == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class FactionWarpsFrame {
|
|||||||
|
|
||||||
private ItemStack buildWarpAsset(final Map.Entry<String, LazyLocation> warp, final Faction faction) {
|
private ItemStack buildWarpAsset(final Map.Entry<String, LazyLocation> warp, final Faction faction) {
|
||||||
final ConfigurationSection config = this.section.getConfigurationSection("warp-item");
|
final ConfigurationSection config = this.section.getConfigurationSection("warp-item");
|
||||||
final ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
final ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
final ItemMeta meta = item.getItemMeta();
|
final ItemMeta meta = item.getItemMeta();
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().replacePlaceholders(config.getStringList("Lore"), new Placeholder("{warp-protected}", faction.hasWarpPassword(warp.getKey()) ? "Enabled" : "Disabled"), new Placeholder("{warp-cost}", FactionsPlugin.getInstance().getConfig().getBoolean("warp-cost.enabled", false) ? Integer.toString(FactionsPlugin.getInstance().getConfig().getInt("warp-cost.warp", 5)) : "Disabled"))));
|
meta.setLore(FactionsPlugin.getInstance().colorList(FactionsPlugin.getInstance().replacePlaceholders(config.getStringList("Lore"), new Placeholder("{warp-protected}", faction.hasWarpPassword(warp.getKey()) ? "Enabled" : "Disabled"), new Placeholder("{warp-cost}", FactionsPlugin.getInstance().getConfig().getBoolean("warp-cost.enabled", false) ? Integer.toString(FactionsPlugin.getInstance().getConfig().getInt("warp-cost.warp", 5)) : "Disabled"))));
|
||||||
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name").replace("{warp}", warp.getKey())));
|
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name").replace("{warp}", warp.getKey())));
|
||||||
@@ -82,7 +82,7 @@ public class FactionWarpsFrame {
|
|||||||
|
|
||||||
private ItemStack buildDummyItem() {
|
private ItemStack buildDummyItem() {
|
||||||
final ConfigurationSection config = this.section.getConfigurationSection("dummy-item");
|
final ConfigurationSection config = this.section.getConfigurationSection("dummy-item");
|
||||||
final ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
final ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
final ItemMeta meta = item.getItemMeta();
|
final ItemMeta meta = item.getItemMeta();
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
||||||
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
public class PermissionList {
|
public class PermissionList {
|
||||||
public static void generateFile() {
|
public static void generateFile() {
|
||||||
File file = new File(FactionsPlugin.getInstance().getDataFolder().toString() + "/" + "permissions.yml");
|
File file = new File(FactionsPlugin.getInstance().getDataFolder().toString() + "/" + "permissions.yml");
|
||||||
|
|||||||
15
src/main/java/com/massivecraft/factions/util/StaticGUI.java
Normal file
15
src/main/java/com/massivecraft/factions/util/StaticGUI.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package com.massivecraft.factions.util;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.inventory.ClickType;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
* Inspired by FactionGUI with the difference being that this should be used for GUIs that will not differ between players
|
||||||
|
* Using StaticGUI and only generating one will not require generating one object per player unlike FactionGUI this will save many resources from being used.
|
||||||
|
* @see FactionGUI
|
||||||
|
*/
|
||||||
|
public interface StaticGUI extends InventoryHolder {
|
||||||
|
void click(int slot, ClickType action, Player player);
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.massivecraft.factions.util.Sync;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.Queue;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class SyncExecutor {
|
||||||
|
private static boolean started = false;
|
||||||
|
/**
|
||||||
|
* This queue is used to collect task that need to happen async rather than scheduling for every action.
|
||||||
|
*/
|
||||||
|
public static Queue<SyncTask> taskQueue = new LinkedList<>();
|
||||||
|
|
||||||
|
public static void startTask() {
|
||||||
|
if (started) return;
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.instance, () -> {
|
||||||
|
SyncTask syncTask = taskQueue.poll();
|
||||||
|
if (syncTask != null) {
|
||||||
|
try {
|
||||||
|
syncTask.call();
|
||||||
|
} catch (InvocationTargetException | IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
FactionsPlugin.getInstance().getLogger().log(Level.SEVERE, "A task was not able to execute successfully! Please provide this stacktrace to the Saber team at Discord.Saber.pw");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0L, 2L);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package com.massivecraft.factions.util.Sync;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class SyncTask {
|
||||||
|
private Object o;
|
||||||
|
private Method m;
|
||||||
|
private Object[] arguments;
|
||||||
|
private Collection<Class<?>> params;
|
||||||
|
|
||||||
|
public SyncTask(Object target, Method method, Object... arguments) {
|
||||||
|
this.o = target;
|
||||||
|
this.m = method;
|
||||||
|
this.arguments = arguments;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate sync task without the ability to specify the Method object, made for easy typing
|
||||||
|
* @param target Object the method is on
|
||||||
|
* @param method Method name
|
||||||
|
* @param arguments Objects needed to call method
|
||||||
|
*/
|
||||||
|
public SyncTask(Object target, String method, Object... arguments) {
|
||||||
|
this.o = target;
|
||||||
|
this.arguments = arguments;
|
||||||
|
this.params = new ArrayList<>();
|
||||||
|
for (Object o : this.arguments) {
|
||||||
|
this.params.add(o.getClass());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.m = o.getClass().getMethod(method, (Class<?>[]) params.toArray());
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
FactionsPlugin.getInstance().getLogger().log(Level.SEVERE, "A Method could not be located! This means a task that was supposed to happen did not, this may be a very serious issue");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Generate sync task without the ability to specify the Method object or arguments, made for easy typing
|
||||||
|
*/
|
||||||
|
public SyncTask(Object target, String method) {
|
||||||
|
this.o = target;
|
||||||
|
try {
|
||||||
|
this.m = o.getClass().getMethod(method);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
FactionsPlugin.getInstance().getLogger().log(Level.SEVERE, "A Method could not be located! This means a task that was supposed to happen did not, this may be a very serious issue");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void call() throws InvocationTargetException, IllegalAccessException {
|
||||||
|
m.invoke(o, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
108
src/main/java/com/massivecraft/factions/util/TimeUtil.java
Normal file
108
src/main/java/com/massivecraft/factions/util/TimeUtil.java
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
package com.massivecraft.factions.util;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.GregorianCalendar;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factions - Developed by Driftay.
|
||||||
|
* All rights reserved 2020.
|
||||||
|
* Creation Date: 1/30/2020
|
||||||
|
*/
|
||||||
|
public class TimeUtil {
|
||||||
|
|
||||||
|
public static long parseDateDiff(String time, boolean future) throws Exception {
|
||||||
|
Pattern timePattern = Pattern.compile("(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?", 2);
|
||||||
|
Matcher m = timePattern.matcher(time);
|
||||||
|
int years = 0;
|
||||||
|
int months = 0;
|
||||||
|
int weeks = 0;
|
||||||
|
int days = 0;
|
||||||
|
int hours = 0;
|
||||||
|
int minutes = 0;
|
||||||
|
int seconds = 0;
|
||||||
|
boolean found = false;
|
||||||
|
while (m.find()) {
|
||||||
|
if (m.group() != null) {
|
||||||
|
if (m.group().isEmpty()) continue;
|
||||||
|
for (int i = 0; i < m.groupCount(); ++i) {
|
||||||
|
if (m.group(i) != null && !m.group(i).isEmpty()) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) continue;
|
||||||
|
|
||||||
|
if (m.group(1) != null && !m.group(1).isEmpty()) years = Integer.parseInt(m.group(1));
|
||||||
|
|
||||||
|
if (m.group(2) != null && !m.group(2).isEmpty()) months = Integer.parseInt(m.group(2));
|
||||||
|
|
||||||
|
if (m.group(3) != null && !m.group(3).isEmpty()) weeks = Integer.parseInt(m.group(3));
|
||||||
|
|
||||||
|
if (m.group(4) != null && !m.group(4).isEmpty()) days = Integer.parseInt(m.group(4));
|
||||||
|
|
||||||
|
if (m.group(5) != null && !m.group(5).isEmpty()) hours = Integer.parseInt(m.group(5));
|
||||||
|
|
||||||
|
if (m.group(6) != null && !m.group(6).isEmpty()) minutes = Integer.parseInt(m.group(6));
|
||||||
|
|
||||||
|
if (m.group(7) != null && !m.group(7).isEmpty()) {
|
||||||
|
seconds = Integer.parseInt(m.group(7));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) throw new Exception("Illegal Date");
|
||||||
|
|
||||||
|
if (years > 20) throw new Exception("Illegal Date");
|
||||||
|
|
||||||
|
Calendar c = new GregorianCalendar();
|
||||||
|
if (years > 0) c.add(Calendar.YEAR, years * (future ? 1 : -1));
|
||||||
|
|
||||||
|
if (months > 0) c.add(Calendar.MONTH, months * (future ? 1 : -1));
|
||||||
|
|
||||||
|
if (weeks > 0) c.add(Calendar.WEEK_OF_YEAR, weeks * (future ? 1 : -1));
|
||||||
|
|
||||||
|
if (days > 0) c.add(Calendar.DATE, days * (future ? 1 : -1));
|
||||||
|
|
||||||
|
if (hours > 0) c.add(Calendar.HOUR_OF_DAY, hours * (future ? 1 : -1));
|
||||||
|
|
||||||
|
if (minutes > 0) c.add(Calendar.MINUTE, minutes * (future ? 1 : -1));
|
||||||
|
|
||||||
|
if (seconds > 0) c.add(Calendar.SECOND, seconds * (future ? 1 : -1));
|
||||||
|
|
||||||
|
System.out.println("current: " + c.getTimeInMillis() + " Time: " + System.currentTimeMillis() + " Form: " + formatTime(c.getTimeInMillis() / 1000L));
|
||||||
|
return c.getTimeInMillis() / 1000L;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatDifference(long time) {
|
||||||
|
if (time == 0L) return "Never";
|
||||||
|
|
||||||
|
long day = TimeUnit.SECONDS.toDays(time);
|
||||||
|
long hours = TimeUnit.SECONDS.toHours(time) - day * 24L;
|
||||||
|
long minutes = TimeUnit.SECONDS.toMinutes(time) - TimeUnit.SECONDS.toHours(time) * 60L;
|
||||||
|
long seconds = TimeUnit.SECONDS.toSeconds(time) - TimeUnit.SECONDS.toMinutes(time) * 60L;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if (day > 0L) sb.append(day).append((day == 1L) ? "day" : "days").append(" ");
|
||||||
|
|
||||||
|
if (hours > 0L) sb.append(hours).append((hours == 1L) ? "h" : "h").append(" ");
|
||||||
|
|
||||||
|
if (minutes > 0L) sb.append(minutes).append((minutes == 1L) ? "m" : "m").append(" ");
|
||||||
|
|
||||||
|
if (seconds > 0L) sb.append(seconds).append((seconds == 1L) ? "s" : "s");
|
||||||
|
|
||||||
|
String diff = sb.toString().trim();
|
||||||
|
return diff.isEmpty() ? "Now" : diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatTime(long time) {
|
||||||
|
if (time == System.currentTimeMillis()) return "Now";
|
||||||
|
|
||||||
|
if (time == -1L) return "Never";
|
||||||
|
|
||||||
|
return formatDifference(time - System.currentTimeMillis() / 1000L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.massivecraft.factions.util.Wait;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class WaitExecutor {
|
||||||
|
private static boolean enabled = false;
|
||||||
|
public static ConcurrentHashMap<Player, WaitTask> taskMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
public static void startTask() {
|
||||||
|
if (enabled) return;
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(FactionsPlugin.instance, () ->
|
||||||
|
{
|
||||||
|
for (WaitTask task : taskMap.values()) {
|
||||||
|
int i = task.getWait() - 1;
|
||||||
|
if (i > 0) {
|
||||||
|
if (i != 1) {
|
||||||
|
task.getPlayer().sendMessage(task.getMessage().format((i + " Seconds")));
|
||||||
|
} else {
|
||||||
|
task.getPlayer().sendMessage(task.getMessage().format((i + " Second")));
|
||||||
|
}
|
||||||
|
task.setWait(i);
|
||||||
|
} else {
|
||||||
|
task.success();
|
||||||
|
taskMap.remove(task.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},0L,20L);
|
||||||
|
enabled = true;
|
||||||
|
}
|
||||||
|
public static void handleAction(Player player) {
|
||||||
|
if (!taskMap.containsKey(player)) return;
|
||||||
|
taskMap.get(player).fail();
|
||||||
|
taskMap.remove(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.massivecraft.factions.util.Wait;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FPlayer;
|
||||||
|
import com.massivecraft.factions.zcore.util.TL;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public class WaitTask {
|
||||||
|
private Integer wait;
|
||||||
|
private TL msg;
|
||||||
|
//Using player as to not have to convert every event
|
||||||
|
private Player player;
|
||||||
|
private WaitedTask origin;
|
||||||
|
|
||||||
|
public WaitTask(Integer wait, TL message, Player player, WaitedTask waitedTask) {
|
||||||
|
this.wait = wait;
|
||||||
|
this.msg = message;
|
||||||
|
this.player = player;
|
||||||
|
this.origin = waitedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getWait() {
|
||||||
|
return wait;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TL getMessage() {
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWait(Integer i) {
|
||||||
|
wait = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void success() {
|
||||||
|
origin.handleSuccess(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fail() {
|
||||||
|
origin.handleFailure(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.massivecraft.factions.util.Wait;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author droppinganvil
|
||||||
|
*/
|
||||||
|
public interface WaitedTask {
|
||||||
|
void handleSuccess(Player player);
|
||||||
|
void handleFailure(Player player);
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,9 @@ import com.massivecraft.factions.FPlayer;
|
|||||||
import com.massivecraft.factions.Faction;
|
import com.massivecraft.factions.Faction;
|
||||||
import com.massivecraft.factions.FactionsPlugin;
|
import com.massivecraft.factions.FactionsPlugin;
|
||||||
import com.massivecraft.factions.util.XMaterial;
|
import com.massivecraft.factions.util.XMaterial;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
@@ -43,8 +45,22 @@ public class FDisbandFrame {
|
|||||||
fPlayer.getPlayer().performCommand("f disband");
|
fPlayer.getPlayer().performCommand("f disband");
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
//Separator
|
||||||
GUIItems.set(4, new GuiItem(XMaterial.BLACK_WOOL.parseItem(), (e) -> e.setCancelled(true)));
|
FileConfiguration config = FactionsPlugin.getInstance().getConfig();
|
||||||
|
ItemStack separatorItem = XMaterial.matchXMaterial(config.getString("f-disband-gui.separation-item.Type")).get().parseItem();
|
||||||
|
ItemMeta separatorMeta = separatorItem.getItemMeta();
|
||||||
|
separatorMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString("f-disband-gui.separation-item.Name")));
|
||||||
|
List<String> separatorLore = config.getStringList("f-disband-gui.separation-item.Lore");
|
||||||
|
if (separatorMeta.getLore() != null) separatorMeta.getLore().clear();
|
||||||
|
if (separatorLore != null) {
|
||||||
|
List<String> lore = new ArrayList<>();
|
||||||
|
for (String loreEntry : config.getStringList("f-disband-gui.separation-item.Lore")) {
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', loreEntry));
|
||||||
|
}
|
||||||
|
separatorMeta.setLore(lore);
|
||||||
|
}
|
||||||
|
GUIItems.set(4, new GuiItem(separatorItem, (e) -> e.setCancelled(true)));
|
||||||
|
//End Separator
|
||||||
|
|
||||||
for (i = 5; i < 10; ++i) {
|
for (i = 5; i < 10; ++i) {
|
||||||
GUIItems.add(new GuiItem(deny, (e) -> {
|
GUIItems.add(new GuiItem(deny, (e) -> {
|
||||||
@@ -61,7 +77,7 @@ public class FDisbandFrame {
|
|||||||
|
|
||||||
private ItemStack buildConfirmDummyItem(Faction faction) {
|
private ItemStack buildConfirmDummyItem(Faction faction) {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("f-disband-gui.confirm-item");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("f-disband-gui.confirm-item");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
List<String> lore = new ArrayList<>();
|
List<String> lore = new ArrayList<>();
|
||||||
@@ -77,7 +93,7 @@ public class FDisbandFrame {
|
|||||||
|
|
||||||
private ItemStack buildDenyDummyItem() {
|
private ItemStack buildDenyDummyItem() {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("f-disband-gui.deny-item");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("f-disband-gui.deny-item");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public enum PermissableAction {
|
|||||||
|
|
||||||
public ItemStack buildAsset(FPlayer fme, Permissable perm) {
|
public ItemStack buildAsset(FPlayer fme, Permissable perm) {
|
||||||
ConfigurationSection section = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.action");
|
ConfigurationSection section = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.action");
|
||||||
ItemStack item = XMaterial.matchXMaterial(section.getString("Materials." + this.name)).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(section.getString("Materials." + this.name)).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
|
||||||
meta.setDisplayName(FactionsPlugin.getInstance().color(section.getString("placeholder-item.name").replace("{action}", this.name)));
|
meta.setDisplayName(FactionsPlugin.getInstance().color(section.getString("placeholder-item.name").replace("{action}", this.name)));
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public class PermissableActionFrame {
|
|||||||
|
|
||||||
private ItemStack buildDummyItem() {
|
private ItemStack buildDummyItem() {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.dummy-item");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.dummy-item");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
||||||
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
||||||
@@ -101,7 +101,7 @@ public class PermissableActionFrame {
|
|||||||
|
|
||||||
private ItemStack buildBackItem() {
|
private ItemStack buildBackItem() {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.back-item");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.back-item");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
||||||
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class PermissableRelationFrame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ItemStack buildAsset(String loc, String relation) {
|
private ItemStack buildAsset(String loc, String relation) {
|
||||||
ItemStack item = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString(loc)).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(FactionsPlugin.getInstance().getConfig().getString(loc)).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
meta.setDisplayName(FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fperm-gui.relation.Placeholder-Item.Name").replace("{relation}", relation)));
|
meta.setDisplayName(FactionsPlugin.getInstance().color(FactionsPlugin.getInstance().getConfig().getString("fperm-gui.relation.Placeholder-Item.Name").replace("{relation}", relation)));
|
||||||
item.setItemMeta(meta);
|
item.setItemMeta(meta);
|
||||||
@@ -65,7 +65,7 @@ public class PermissableRelationFrame {
|
|||||||
|
|
||||||
private ItemStack buildDummyItem() {
|
private ItemStack buildDummyItem() {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.dummy-item");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fperm-gui.dummy-item");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
||||||
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
meta.setDisplayName(FactionsPlugin.getInstance().color(config.getString("Name")));
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public class FUpgradeFrame {
|
|||||||
|
|
||||||
public FUpgradeFrame(Faction f) {
|
public FUpgradeFrame(Faction f) {
|
||||||
this.gui = new Gui(FactionsPlugin.getInstance(),
|
this.gui = new Gui(FactionsPlugin.getInstance(),
|
||||||
FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.rows", 5),
|
FactionsPlugin.getInstance().getConfig().getInt("fupgrades.MainMenu.Rows", 5),
|
||||||
FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Title").replace("{faction}", f.getTag()));
|
FactionsPlugin.getInstance().getConfig().getString("fupgrades.MainMenu.Title").replace("{faction}", f.getTag()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,13 +95,13 @@ public class FUpgradeFrame {
|
|||||||
private void updateFactionPowerBoost(Faction f) {
|
private void updateFactionPowerBoost(Faction f) {
|
||||||
double boost = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.Power.Power-Boost.level-" + (f.getUpgrade(UpgradeType.POWER) + 1));
|
double boost = FactionsPlugin.getInstance().getConfig().getDouble("fupgrades.MainMenu.Power.Power-Boost.level-" + (f.getUpgrade(UpgradeType.POWER) + 1));
|
||||||
if (boost < 0.0) return;
|
if (boost < 0.0) return;
|
||||||
f.setPowerBoost(f.getPower() + boost);
|
f.setPowerBoost(boost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private ItemStack buildDummyItem() {
|
private ItemStack buildDummyItem() {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fupgrades.MainMenu.DummyItem");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fupgrades.MainMenu.DummyItem");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
meta.setLore(FactionsPlugin.getInstance().colorList(config.getStringList("Lore")));
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public enum UpgradeType {
|
|||||||
|
|
||||||
public ItemStack buildAsset(Faction f) {
|
public ItemStack buildAsset(Faction f) {
|
||||||
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fupgrades.MainMenu." + this.id + ".DisplayItem");
|
ConfigurationSection config = FactionsPlugin.getInstance().getConfig().getConfigurationSection("fupgrades.MainMenu." + this.id + ".DisplayItem");
|
||||||
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).parseItem();
|
ItemStack item = XMaterial.matchXMaterial(config.getString("Type")).get().parseItem();
|
||||||
int level = f.getUpgrade(this);
|
int level = f.getUpgrade(this);
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ import org.bukkit.*;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -47,6 +49,8 @@ import java.util.*;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public abstract class MemoryFPlayer implements FPlayer {
|
public abstract class MemoryFPlayer implements FPlayer {
|
||||||
|
public boolean inDuel = false;
|
||||||
|
public Map<Integer, ItemStack> oldInv = null;
|
||||||
public boolean enemiesNearby = false;
|
public boolean enemiesNearby = false;
|
||||||
public boolean inChest = false;
|
public boolean inChest = false;
|
||||||
public boolean discordSetup = false;
|
public boolean discordSetup = false;
|
||||||
@@ -226,6 +230,14 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
|
|
||||||
public void setEnemiesNearby(Boolean b) {this.enemiesNearby = b;}
|
public void setEnemiesNearby(Boolean b) {this.enemiesNearby = b;}
|
||||||
|
|
||||||
|
public Map<Integer, ItemStack> getOldInv() {return this.oldInv;}
|
||||||
|
|
||||||
|
public void setOldInv(Map<Integer, ItemStack> inv) {this.oldInv = inv;}
|
||||||
|
|
||||||
|
public void setInDuel(Boolean b) {this.inDuel = b;}
|
||||||
|
|
||||||
|
public boolean isInDuel() {return this.inDuel;}
|
||||||
|
|
||||||
public boolean discordSetup() {return this.discordSetup;}
|
public boolean discordSetup() {return this.discordSetup;}
|
||||||
|
|
||||||
public String discordUserID() {return this.discordUserID;}
|
public String discordUserID() {return this.discordUserID;}
|
||||||
@@ -830,12 +842,14 @@ public abstract class MemoryFPlayer implements FPlayer {
|
|||||||
return true;
|
return true;
|
||||||
} else if (currentFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW) {
|
} else if (currentFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW) {
|
||||||
return true;
|
return true;
|
||||||
|
} else if (currentFaction.isWilderness() && forFaction.getAccess(this, PermissableAction.TERRITORY) == Access.ALLOW) {
|
||||||
|
return true;
|
||||||
} else if (myFaction != forFaction) {
|
} else if (myFaction != forFaction) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_CANTCLAIM.toString(), forFaction.describeTo(this));
|
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_CANTCLAIM.toString(), forFaction.describeTo(this));
|
||||||
} else if (forFaction == currentFaction) {
|
} else if (forFaction == currentFaction) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_ALREADYOWN.toString(), forFaction.describeTo(this, true));
|
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_ALREADYOWN.toString(), forFaction.describeTo(this, true));
|
||||||
} else if (this.getRole().value < Role.MODERATOR.value) {
|
} else if (forFaction.getAccess(this, PermissableAction.TERRITORY) != Access.ALLOW) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_MUSTBE.toString(), Role.MODERATOR.getTranslation());
|
error = TL.COMMAND_CLAIM_DENIED.toString();
|
||||||
} else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers) {
|
} else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers) {
|
||||||
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_MEMBERS.toString(), Conf.claimsRequireMinFactionMembers);
|
error = FactionsPlugin.getInstance().txt.parse(TL.CLAIM_MEMBERS.toString(), Conf.claimsRequireMinFactionMembers);
|
||||||
} else if (currentFaction.isSafeZone()) {
|
} else if (currentFaction.isSafeZone()) {
|
||||||
|
|||||||
@@ -1429,4 +1429,10 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
|
|||||||
public Set<FLocation> getAllClaims() {
|
public Set<FLocation> getAllClaims() {
|
||||||
return Board.getInstance().getAllClaims(this);
|
return Board.getInstance().getAllClaims(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void broadcast(String s) {
|
||||||
|
for (FPlayer fPlayer : getFPlayersWhereOnline(true)) {
|
||||||
|
fPlayer.sendMessage(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -355,6 +355,12 @@ public enum TL {
|
|||||||
DISCORD_CODE_INVALID_KEY("That code is invalid, verify the code is correct."),
|
DISCORD_CODE_INVALID_KEY("That code is invalid, verify the code is correct."),
|
||||||
DISCORD_CODE_INVALID_FORMAT("If you are submitting a code please only type the code. Example message: 0000"),
|
DISCORD_CODE_INVALID_FORMAT("If you are submitting a code please only type the code. Example message: 0000"),
|
||||||
|
|
||||||
|
//Duels
|
||||||
|
DUEL_REQUEST_REJECTED_FACTION("&c&l[!]&7 %1$s has rejected your duel request"),
|
||||||
|
DUEL_REQUEST_REJECTED_PLAYER("&c&l[!]&7 %1$s has exited the duel queue"),
|
||||||
|
DUEL_REQUEST_ACCEPTED_FACTION("&c&l[!]&7 %1$s has accepted your duel request"),
|
||||||
|
DUEL_REQUEST_ACCEPTED_PLAYER("&c&l[!]&7 %1$s has entered the duel queue"),
|
||||||
|
|
||||||
|
|
||||||
COMMAND_DEINVITE_CANDEINVITE("&c&l[!]&7 Players you can &cdeinvite: "),
|
COMMAND_DEINVITE_CANDEINVITE("&c&l[!]&7 Players you can &cdeinvite: "),
|
||||||
COMMAND_DEINVITE_CLICKTODEINVITE("&c&l[!]&7 Click to &crevoke&7 invite for &c%1$s"),
|
COMMAND_DEINVITE_CLICKTODEINVITE("&c&l[!]&7 Click to &crevoke&7 invite for &c%1$s"),
|
||||||
|
|||||||
@@ -751,6 +751,11 @@ f-disband-gui:
|
|||||||
Lore:
|
Lore:
|
||||||
- ' '
|
- ' '
|
||||||
- '&7Click to cancel faction disband.'
|
- '&7Click to cancel faction disband.'
|
||||||
|
separation-item:
|
||||||
|
Type: BLACK_WOOL
|
||||||
|
Name: ' '
|
||||||
|
Lore:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
@@ -1434,6 +1439,61 @@ Wild:
|
|||||||
SpawnAboveBlocks: 10
|
SpawnAboveBlocks: 10
|
||||||
Effects:
|
Effects:
|
||||||
- 'NIGHT_VISION'
|
- 'NIGHT_VISION'
|
||||||
|
Duels:
|
||||||
|
Enabled: true
|
||||||
|
# Cooldown before a faction can request another faction to duel after dueling
|
||||||
|
Cooldown: 0
|
||||||
|
# In minutes
|
||||||
|
Time: 3
|
||||||
|
# After individual players receive the request for the duel how long should it take to start in seconds
|
||||||
|
WaitTime: 60
|
||||||
|
Broadcast:
|
||||||
|
BroadcastKill:
|
||||||
|
Enabled: true
|
||||||
|
# {team1_remaining} {team2_remaining} {team1_eliminated} {team2_eliminated} {team1_tag} {team2_tag} {eliminated_name}
|
||||||
|
Format: '&c&lFaction Duels&r &7{eliminated} has been eliminated. {team1_tag} &d{team1_remaining} &7| {team2_tag} &d{team2_remaining}'
|
||||||
|
BroadcastResult:
|
||||||
|
Enabled: true
|
||||||
|
# These placeholders are all for the winning team unless specified otherwise
|
||||||
|
# {remaining} {tag} {losers_tag}
|
||||||
|
Format: '&c&lFaction Duels&r &d{tag}&7 has defeated &d{losers_tag}&7 with {remaining} players remaining'
|
||||||
|
FormatTie: '&c&lFaction Duels&r &d{team1_tag} &7has tied with &d{team2_tag}'
|
||||||
|
|
||||||
|
SpawnPoints:
|
||||||
|
# Please change these to your arena
|
||||||
|
Team1:
|
||||||
|
# Make sure each player has somewhere to spawn if max faction size is 10 you need 10 spawn points for each team!
|
||||||
|
# SpawnPoint format: World,X,Y,Z
|
||||||
|
1: Duel,0,60,0
|
||||||
|
2: Duel,5,60,5
|
||||||
|
3: Duel,10,60,10
|
||||||
|
Team2:
|
||||||
|
1: Duel,50,50,50
|
||||||
|
2: Duel,55,50,55
|
||||||
|
3: Duel,60,50,60
|
||||||
|
GUI:
|
||||||
|
# Responses #
|
||||||
|
# Accepted: This player is queued for the duel, GUI closes
|
||||||
|
# Rejected: This player is not included in the duel, GUI closes
|
||||||
|
# Ignored: This player remains in GUI and no action is taken on their entry in the duel
|
||||||
|
# This happens when the click type is not left click
|
||||||
|
FallbackResponse: Ignored
|
||||||
|
Fill-Item:
|
||||||
|
Material: GRAY_STAINED_GLASS_PANE
|
||||||
|
Response: Ignored
|
||||||
|
Items:
|
||||||
|
12:
|
||||||
|
Material: GREEN_STAINED_GLASS_PANE
|
||||||
|
Name: '&2Accept'
|
||||||
|
Lore:
|
||||||
|
- '&2Join your faction''s duel'
|
||||||
|
Response: Accepted
|
||||||
|
13:
|
||||||
|
Material: RED_STAINED_GLASS_PANE
|
||||||
|
Name: '&cReject'
|
||||||
|
Lore:
|
||||||
|
- '&cLeave your faction''s duels'
|
||||||
|
Response: Rejected
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
# +------------------------------------------------------+ #
|
# +------------------------------------------------------+ #
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: Factions
|
|||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
main: com.massivecraft.factions.FactionsPlugin
|
main: com.massivecraft.factions.FactionsPlugin
|
||||||
authors: [Olof Larsson, Brett Flannigan, drtshock, ProSavage, SvenjaReißaus, FroggyKnight, Driftay]
|
authors: [Olof Larsson, Brett Flannigan, drtshock, ProSavage, SvenjaReißaus, Driftay]
|
||||||
softdepend: [Skript, 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]
|
softdepend: [Skript, 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]
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
@@ -66,6 +66,7 @@ permissions:
|
|||||||
factions.kit.halfplayer:
|
factions.kit.halfplayer:
|
||||||
description: Can do all but create factions.
|
description: Can do all but create factions.
|
||||||
children:
|
children:
|
||||||
|
factions.check: true
|
||||||
factions.audit: true
|
factions.audit: true
|
||||||
factions.drain: true
|
factions.drain: true
|
||||||
factions.wild: true
|
factions.wild: true
|
||||||
|
|||||||
Reference in New Issue
Block a user