F Logout Added & Few Cleanups and Workaround to Fixing Default Perms

This commit is contained in:
Driftay 2019-07-28 05:04:39 -04:00
parent 8f72979fdf
commit 93b5ba2db5
14 changed files with 195 additions and 72 deletions

View File

@ -3,7 +3,7 @@ before_deploy:
language: java language: java
deploy: deploy:
provider: releases provider: releases
user: ProSavage user: Driftay
password: password:
secure: l/4sN0iN3JeG5wf/8ijJMmsF3aG4CW8aaIK1+BWBhzJJFLTOfvIejID8Q/AV9rHQlp/QUOYXbCO8+y/VFFJ3pN8FLd1plqawXhGAjIVIBVKfpbdEcIlNHSsrIhUszGo5C+AqhR3YOmRN5C3whJXqRbjSIxlI4wb9Bzg4Rwe1lguhw2/q0b7r/4OQ1klZIeM6oPP/2WWjhIerpeayInLs5zm+oMyj0idrdoZLHK171u+/ou/r7DxkU37sAyC8lWUxntftCzNq4/OxzpL4VsxM6OW69OCY8SOqiUDp+IxXbxWNgHcDi0UsRr/skmb0vI+FFUlaXg6pVQpQYHQLgpiYIr32Z7F3HYeXo9hgid9zRNAVN2nSXBASuaJUsuXFCPa+HASaHi+7Rj6icVyYN6fhf1+kyw11htwmNjlOKUYPpN7/wRdPjFYcqFmcO7X12jyyQfGJf1TxkatH2EcoYO6QYP25lbGyDUluPw9GF37j/cGrYlGIslJXtLU0vwSdg8ytt0xw2llm23CitjfFE8XJ4PkUHTRa/W4ba/NVkhD/SEzS/ZdyQH37v4AVU361yUNxnZ9gCCzxH5Gj6K0sZ+pA0cVHkjvYebN4qBPfo0RAP0MHZLVqFQX4t/7oUP/+V6aaH7w/4j0MNBNhGLl2jFs3o8ZKtUptw3NskgimsYf7ThM= secure: l/4sN0iN3JeG5wf/8ijJMmsF3aG4CW8aaIK1+BWBhzJJFLTOfvIejID8Q/AV9rHQlp/QUOYXbCO8+y/VFFJ3pN8FLd1plqawXhGAjIVIBVKfpbdEcIlNHSsrIhUszGo5C+AqhR3YOmRN5C3whJXqRbjSIxlI4wb9Bzg4Rwe1lguhw2/q0b7r/4OQ1klZIeM6oPP/2WWjhIerpeayInLs5zm+oMyj0idrdoZLHK171u+/ou/r7DxkU37sAyC8lWUxntftCzNq4/OxzpL4VsxM6OW69OCY8SOqiUDp+IxXbxWNgHcDi0UsRr/skmb0vI+FFUlaXg6pVQpQYHQLgpiYIr32Z7F3HYeXo9hgid9zRNAVN2nSXBASuaJUsuXFCPa+HASaHi+7Rj6icVyYN6fhf1+kyw11htwmNjlOKUYPpN7/wRdPjFYcqFmcO7X12jyyQfGJf1TxkatH2EcoYO6QYP25lbGyDUluPw9GF37j/cGrYlGIslJXtLU0vwSdg8ytt0xw2llm23CitjfFE8XJ4PkUHTRa/W4ba/NVkhD/SEzS/ZdyQH37v4AVU361yUNxnZ9gCCzxH5Gj6K0sZ+pA0cVHkjvYebN4qBPfo0RAP0MHZLVqFQX4t/7oUP/+V6aaH7w/4j0MNBNhGLl2jFs3o8ZKtUptw3NskgimsYf7ThM=
file: target/Factions.jar file: target/Factions.jar

View File

@ -341,6 +341,10 @@ public class Conf {
// Default Options - Is this even shown on the Conf.json? // Default Options - Is this even shown on the Conf.json?
public static transient HashMap<String, DefaultPermissions> defaultFactionPermissions = new HashMap<>(); public static transient HashMap<String, DefaultPermissions> defaultFactionPermissions = new HashMap<>();
//Cooldown for /f logout in seconds
public static long logoutCooldown = 30;
// Custom Ranks - Oof I forgot I was doing this _SvenjaReissaus_ // Custom Ranks - Oof I forgot I was doing this _SvenjaReissaus_
//public static boolean enableCustomRanks = false; // We will disable it by default to avoid any migration error //public static boolean enableCustomRanks = false; // We will disable it by default to avoid any migration error
//public static int maxCustomRanks = 2; // Setting this to -1 will allow unlimited custom ranks //public static int maxCustomRanks = 2; // Setting this to -1 will allow unlimited custom ranks

View File

@ -259,7 +259,7 @@ public class SaberFactions extends MPlugin {
divider(); divider();
System.out.println("You are using a BETA version of the plugin!"); System.out.println("You are using a BETA version of the plugin!");
System.out.println("This comes with risks of small bugs in newer features!"); System.out.println("This comes with risks of small bugs in newer features!");
System.out.println("For support head to: https://github.com/ProSavage/SaberFactions/issues"); System.out.println("For support head to: https://github.com/Driftay/Saber-Factions/issues");
divider(); divider();
} }
@ -274,8 +274,6 @@ public class SaberFactions extends MPlugin {
return skriptAddon; return skriptAddon;
} }
private void setupPlaceholderAPI() { private void setupPlaceholderAPI() {
Plugin clip = getServer().getPluginManager().getPlugin("PlaceholderAPI"); Plugin clip = getServer().getPluginManager().getPlugin("PlaceholderAPI");
if (clip != null && clip.isEnabled()) { if (clip != null && clip.isEnabled()) {

View File

@ -5,6 +5,7 @@ import com.massivecraft.factions.SaberFactions;
import com.massivecraft.factions.cmd.alts.CmdAlts; import com.massivecraft.factions.cmd.alts.CmdAlts;
import com.massivecraft.factions.cmd.claim.*; import com.massivecraft.factions.cmd.claim.*;
import com.massivecraft.factions.cmd.econ.CmdMoney; import com.massivecraft.factions.cmd.econ.CmdMoney;
import com.massivecraft.factions.cmd.logout.CmdLogout;
import com.massivecraft.factions.cmd.points.CmdPoints; import com.massivecraft.factions.cmd.points.CmdPoints;
import com.massivecraft.factions.cmd.relational.CmdRelationAlly; import com.massivecraft.factions.cmd.relational.CmdRelationAlly;
import com.massivecraft.factions.cmd.relational.CmdRelationEnemy; import com.massivecraft.factions.cmd.relational.CmdRelationEnemy;
@ -124,6 +125,7 @@ public class FCmdRoot extends FCommand {
public CmdFGlobal cmdFGlobal = new CmdFGlobal(); public CmdFGlobal cmdFGlobal = new CmdFGlobal();
public CmdViewChest cmdViewChest = new CmdViewChest(); public CmdViewChest cmdViewChest = new CmdViewChest();
public CmdPoints cmdPoints = new CmdPoints(); public CmdPoints cmdPoints = new CmdPoints();
public CmdLogout cmdLogout = new CmdLogout();
@ -193,6 +195,7 @@ public class FCmdRoot extends FCommand {
this.addSubCommand(this.cmdStatus); this.addSubCommand(this.cmdStatus);
this.addSubCommand(this.cmdStealth); this.addSubCommand(this.cmdStealth);
this.addSubCommand(this.cmdStuck); this.addSubCommand(this.cmdStuck);
this.addSubCommand(this.cmdLogout);
this.addSubCommand(this.cmdTag); this.addSubCommand(this.cmdTag);
this.addSubCommand(this.cmdTitle); this.addSubCommand(this.cmdTitle);
this.addSubCommand(this.cmdUnclaim); this.addSubCommand(this.cmdUnclaim);

View File

@ -0,0 +1,39 @@
package com.massivecraft.factions.cmd.logout;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdLogout extends FCommand {
public CmdLogout(){
super();
this.aliases.add("logout");
this.permission = Permission.LOGOUT.node;
this.disableOnLock = true;
this.disableOnSpam = true;
senderMustBePlayer = true;
senderMustBeMember = false;
senderMustBeModerator = false;
senderMustBeAdmin = false;
}
@Override
public void perform() {
LogoutHandler handler = LogoutHandler.getByName(fme.getPlayer().getName());
if(handler.isLogoutActive(fme.getPlayer())){
fme.msg(TL.COMMAND_LOGOUT_ACTIVE);
return;
}
handler.applyLogoutCooldown(fme.getPlayer());
fme.msg(TL.COMMAND_LOGOUT_LOGGING, Conf.logoutCooldown);
}
@Override
public TL getUsageTranslation() { return TL.COMMAND_LOGOUT_DESCRIPTION; }
}

View File

@ -0,0 +1,51 @@
package com.massivecraft.factions.cmd.logout;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.SaberFactions;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class LogoutHandler {
public static Map<String, LogoutHandler> factionDatas = new HashMap<>();
private Map<UUID, Long> logoutCooldown = new HashMap<>();
private String name;
public LogoutHandler(String name) {
this.name = name;
factionDatas.put(name, this);
}
public boolean isLogoutActive(Player player) {
return logoutCooldown.containsKey(player.getUniqueId()) && System.currentTimeMillis() < logoutCooldown.get(player.getUniqueId());
}
public void cancelLogout(Player player) {
if(logoutCooldown.containsKey(player.getUniqueId())) {
logoutCooldown.remove(player.getUniqueId());
}
}
public void applyLogoutCooldown(Player player) {
logoutCooldown.put(player.getUniqueId(), System.currentTimeMillis() + (30 * 1000));
Bukkit.getScheduler().runTaskLater(SaberFactions.plugin, () -> {
if(isLogoutActive(player)) {
player.setMetadata("Logout", new FixedMetadataValue(SaberFactions.plugin, true));
player.kickPlayer(String.valueOf(TL.COMMAND_LOGOUT_KICK_MESSAGE));
cancelLogout(player);
}
}, Conf.logoutCooldown * 20L);
}
public static LogoutHandler getByName(String name) {
LogoutHandler logoutHandler = factionDatas.get(name);
return logoutHandler == null ? new LogoutHandler(name) : factionDatas.get(name);
}
}

View File

@ -4,6 +4,7 @@ import com.massivecraft.factions.*;
import com.massivecraft.factions.cmd.CmdFGlobal; import com.massivecraft.factions.cmd.CmdFGlobal;
import com.massivecraft.factions.cmd.CmdFly; import com.massivecraft.factions.cmd.CmdFly;
import com.massivecraft.factions.cmd.CmdSeeChunk; import com.massivecraft.factions.cmd.CmdSeeChunk;
import com.massivecraft.factions.cmd.logout.LogoutHandler;
import com.massivecraft.factions.event.FPlayerEnteredFactionEvent; import com.massivecraft.factions.event.FPlayerEnteredFactionEvent;
import com.massivecraft.factions.event.FPlayerJoinEvent; import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.event.FPlayerLeaveEvent; import com.massivecraft.factions.event.FPlayerLeaveEvent;
@ -736,6 +737,39 @@ public class FactionsPlayerListener implements Listener {
} }
} }
@EventHandler
public void onLogoutMove(PlayerMoveEvent e) {
LogoutHandler handler = LogoutHandler.getByName(e.getPlayer().getName());
if (handler.isLogoutActive(e.getPlayer())) {
handler.cancelLogout(e.getPlayer());
e.getPlayer().sendMessage(String.valueOf(TL.COMMAND_LOGOUT_MOVED));
}
}
@EventHandler
public void onDamage(EntityDamageEvent e) {
if (e.getEntity() instanceof Player) {
Player player = (Player) e.getEntity();
LogoutHandler handler = LogoutHandler.getByName(player.getName());
if (handler.isLogoutActive(player)) {
handler.cancelLogout(player);
player.sendMessage(String.valueOf(TL.COMMAND_LOGOUT_DAMAGE_TAKEN));
}
}
}
@EventHandler
public void onTeleport(PlayerTeleportEvent e) {
Player player = e.getPlayer();
if (player == null) return;
LogoutHandler handler = LogoutHandler.getByName(player.getName());
if (handler.isLogoutActive(player)) {
handler.cancelLogout(player);
player.sendMessage(String.valueOf(TL.COMMAND_LOGOUT_TELEPORTED));
}
}
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPlayerInteractGUI(InventoryClickEvent event) { public void onPlayerInteractGUI(InventoryClickEvent event) {
if (event.getClickedInventory() == null) { if (event.getClickedInventory() == null) {

View File

@ -46,6 +46,7 @@ public enum Permission {
LEAVE("leave"), LEAVE("leave"),
LIST("list"), LIST("list"),
LOCK("lock"), LOCK("lock"),
LOGOUT("logout"),
MAP("map"), MAP("map"),
MAPHEIGHT("mapheight"), MAPHEIGHT("mapheight"),
MOD("mod"), MOD("mod"),

View File

@ -128,6 +128,7 @@ public class DefaultPermissions {
else if (name == "door") return this.door; else if (name == "door") return this.door;
else if (name == "button") return this.button; else if (name == "button") return this.button;
else if (name == "lever") return this.lever; else if (name == "lever") return this.lever;
else if (name == "home") return this.home;
else if (name == "container") return this.container; else if (name == "container") return this.container;
else if (name == "invite") return this.invite; else if (name == "invite") return this.invite;
else if (name == "kick") return this.kick; else if (name == "kick") return this.kick;
@ -135,7 +136,6 @@ public class DefaultPermissions {
else if (name == "sethome") return this.sethome; else if (name == "sethome") return this.sethome;
else if (name == "territory") return this.territory; else if (name == "territory") return this.territory;
else if (name == "access") return this.access; else if (name == "access") return this.access;
else if (name == "home") return this.home;
else if (name == "disband") return this.disband; else if (name == "disband") return this.disband;
else if (name == "promote") return this.promote; else if (name == "promote") return this.promote;
else if (name == "setwarp") return this.setwarp; else if (name == "setwarp") return this.setwarp;

View File

@ -109,7 +109,6 @@ public enum PermissableAction {
Access access = fme.getFaction().getAccess(permissable, this); Access access = fme.getFaction().getAccess(permissable, this);
if (access == null) access = Access.UNDEFINED; if (access == null) access = Access.UNDEFINED;
ItemStack item = new ItemStack(material); ItemStack item = new ItemStack(material);
ItemMeta itemMeta = item.getItemMeta(); ItemMeta itemMeta = item.getItemMeta();
@ -130,7 +129,6 @@ public enum PermissableAction {
// If under the 1.13 version we will use the colorable option. // If under the 1.13 version we will use the colorable option.
if (!SaberFactions.plugin.mc113 && !SaberFactions.plugin.mc114) { if (!SaberFactions.plugin.mc113 && !SaberFactions.plugin.mc114) {
//TODO see if it's working in other version than 1.13 and 1.14 //TODO see if it's working in other version than 1.13 and 1.14
DyeColor dyeColor = null; DyeColor dyeColor = null;
try { try {

View File

@ -761,7 +761,7 @@ public abstract class MemoryFPlayer implements FPlayer {
fplayer.msg(TL.LEAVE_DISBANDED, myFaction.describeTo(fplayer, true)); fplayer.msg(TL.LEAVE_DISBANDED, myFaction.describeTo(fplayer, true));
} }
FactionDisbandEvent disbandEvent = new FactionDisbandEvent(null, getId(), PlayerDisbandReason.LEAVE); FactionDisbandEvent disbandEvent = new FactionDisbandEvent(getPlayer(), myFaction.getId(), PlayerDisbandReason.LEAVE);
Bukkit.getPluginManager().callEvent(disbandEvent); Bukkit.getPluginManager().callEvent(disbandEvent);
Factions.getInstance().removeFaction(myFaction.getId()); Factions.getInstance().removeFaction(myFaction.getId());

View File

@ -731,9 +731,9 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
// Put the map in there for each relation. // Put the map in there for each relation.
for (Relation relation : Relation.values()) { for (Relation relation : Relation.values()) {
if (relation != Relation.MEMBER) { if (relation != Relation.MEMBER) {
if (!Conf.defaultFactionPermissions.containsKey(relation.nicename.toUpperCase())) if (!Conf.defaultFactionPermissions.containsKey(relation.nicename.toUpperCase())) {
permissions.put(relation, new HashMap<>(defaultMap)); permissions.put(relation, new HashMap<>(defaultMap));
else } else
permissions.put(relation, PermissableAction.fromDefaults(Conf.defaultFactionPermissions.get(relation.nicename.toUpperCase()))); permissions.put(relation, PermissableAction.fromDefaults(Conf.defaultFactionPermissions.get(relation.nicename.toUpperCase())));
} }
} }
@ -743,7 +743,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
if (role != Role.LEADER) { if (role != Role.LEADER) {
if (!Conf.defaultFactionPermissions.containsKey(role.nicename.toUpperCase())) if (!Conf.defaultFactionPermissions.containsKey(role.nicename.toUpperCase()))
permissions.put(role, new HashMap<>(defaultMap)); permissions.put(role, new HashMap<>(defaultMap));
else } else {
permissions.put(role, PermissableAction.fromDefaults(Conf.defaultFactionPermissions.get(role.nicename.toUpperCase()))); permissions.put(role, PermissableAction.fromDefaults(Conf.defaultFactionPermissions.get(role.nicename.toUpperCase())));
} }
} }

View File

@ -692,6 +692,14 @@ public enum TL {
COMMAND_GETVAULT_NOMONEY("&cYou do not have enough money"), COMMAND_GETVAULT_NOMONEY("&cYou do not have enough money"),
COMMAND_GETVAULT_MONEYTAKE("&c{amount} has been taken from your account"), COMMAND_GETVAULT_MONEYTAKE("&c{amount} has been taken from your account"),
COMMAND_LOGOUT_KICK_MESSAGE("&2You have safely logged out!"),
COMMAND_LOGOUT_ACTIVE("&c&l[!] &7You are already logging out!"),
COMMAND_LOGOUT_LOGGING("&c&l[!] &7You are logging out. Please wait &b%1$s &7seconds."),
COMMAND_LOGOUT_DESCRIPTION("logout safely from the server"),
COMMAND_LOGOUT_MOVED("&c&l[!] &7Your logout was cancelled because you moved!"),
COMMAND_LOGOUT_DAMAGE_TAKEN("&c&l[!] &7Your logout was cancelled because you were damaged!"),
COMMAND_LOGOUT_TELEPORTED("&c&l[!] &7Your logout was cancelled because you teleported!"),
COMMAND_SHOW_NOFACTION_SELF("You are not in a faction"), COMMAND_SHOW_NOFACTION_SELF("You are not in a faction"),
COMMAND_SHOW_NOFACTION_OTHER("That's not a faction"), COMMAND_SHOW_NOFACTION_OTHER("That's not a faction"),
COMMAND_SHOW_TOSHOW("to show faction information"), COMMAND_SHOW_TOSHOW("to show faction information"),
@ -772,19 +780,6 @@ public enum TL {
COMMAND_TOGGLESB_DISABLED("You can't toggle scoreboards while they are disabled."), COMMAND_TOGGLESB_DISABLED("You can't toggle scoreboards while they are disabled."),
SHOP_POTION_TITLE("&c&lPotion Shop"),
SHOP_POTION_GUI_ACTIVATED_LORE_LINE("&a&lPotion Type Active"),
SHOP_POTION_GUI_ACTIVATED("&d%1$s activated &f%2$s &dfor your faction!"),
SHOP_POTION_GUI_INSUFFICIENT_POINTS("&c&l[!] &7Your faction can't afford that, you need &d%1$s &7faction points"),
SHOP_POTION_GUI_POTION_TYPE_ALREADY_ACTIVE("&c&l[!] &7This Potion Type is Already Active for Your Faction!"),
SHOP_POTION_GUI_MAX_REACHED("&c&l[!] &7You may not have more than %1$s potions at the same time"),
SHOP_BOOSTER_TITLE("&b&lBooster Shop"),
SHOP_GUI_BOOSTER_MAX_REACHED("&c&l[!] &7You may not have more than %1$s boosters at the same time"),
SHOP_GUI_BOOSTER_ACTIVE_ALREADY_ACTIVE("&a&lActive"),
SHOP_GUI_BOOSTER_CANNOT_AFFORD("&c&l[!] &7Your faction can't afford that, you need &d%1$s faction points"),
SHOP_GUI_BOOSTER_ACTIVE_LORE_LINE("&a&lActive"),
COMMAND_TOP_DESCRIPTION("Sort Factions to see the top of some criteria."), COMMAND_TOP_DESCRIPTION("Sort Factions to see the top of some criteria."),
COMMAND_TOP_TOP("Top Factions by %s. Page %d/%d"), COMMAND_TOP_TOP("Top Factions by %s. Page %d/%d"),

View File

@ -1,4 +1,4 @@
# Lang file for SaberFactions by drtshock & ProSavage # Lang file for SaberFactions by drtshock & Driftay
# Use & for color codes. # Use & for color codes.
# Made with love <3 # Made with love <3