package net.shortninja.staffplus.player.attribute.mode.handler; import net.shortninja.staffplus.StaffPlus; import net.shortninja.staffplus.player.User; import net.shortninja.staffplus.player.UserManager; import net.shortninja.staffplus.server.compatibility.IProtocol; import net.shortninja.staffplus.server.data.config.Messages; import net.shortninja.staffplus.server.data.config.Options; import net.shortninja.staffplus.util.MessageCoordinator; import net.shortninja.staffplus.util.PermissionHandler; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; public class VanishHandler { private IProtocol versionProtocol = StaffPlus.get().versionProtocol; private PermissionHandler permission = StaffPlus.get().permission; private MessageCoordinator message = StaffPlus.get().message; private Options options = StaffPlus.get().options; private Messages messages = StaffPlus.get().messages; private UserManager userManager = StaffPlus.get().userManager; public void addVanish(Player player, VanishType vanishType) { User user = userManager.get(player.getUniqueId()); VanishType userVanishType = user.getVanishType(); if(userVanishType == vanishType) { return; }else if(userVanishType != VanishType.NONE) { unapplyVanish(player, userVanishType, true); } applyVanish(player, vanishType, true); user.setVanishType(vanishType); } public void removeVanish(Player player) { User user = userManager.get(player.getUniqueId()); VanishType vanishType = user.getVanishType(); if(vanishType == VanishType.NONE) { return; } unapplyVanish(player, vanishType, true); user.setVanishType(VanishType.NONE); } public void updateVanish() { for(User user : userManager.getAll()) { Player player = user.getPlayer(); if(player != null && user.getVanishType() == VanishType.TOTAL) { applyVanish(player, user.getVanishType(), false); } } } private void applyVanish(Player player, VanishType vanishType, boolean shouldMessage) { String message = ""; switch(vanishType) { case TOTAL: for(Player p : Bukkit.getOnlinePlayers()) { if(permission.has(p, options.permissionVanishTotal)) { continue; } p.hidePlayer(player); } player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0)); message = messages.totalVanish.replace("%status%", "enabled"); break; case LIST: if(options.vanishTabList) { versionProtocol.listVanish(player, true); } message = messages.listVanish.replace("%status%", "enabled"); break; default: break; } if(shouldMessage && !message.isEmpty()) { this.message.send(player, message, messages.prefixGeneral); } } private void unapplyVanish(Player player, VanishType vanishType, boolean shouldMessage) { String message = ""; switch(vanishType) { case TOTAL: for(Player p : Bukkit.getOnlinePlayers()) { p.showPlayer(player); } player.removePotionEffect(PotionEffectType.INVISIBILITY); message = messages.totalVanish.replace("%status%", "disabled"); break; case LIST: versionProtocol.listVanish(player, false); message = messages.listVanish.replace("%status%", "disabled"); break; default: break; } if(shouldMessage && !message.isEmpty()) { this.message.send(player, message, messages.prefixGeneral); } } public enum VanishType { TOTAL, LIST, NONE; } }