use of com.palmergames.bukkit.towny.permissions.TownyPermissionSource in project Towny by TownyAdvanced.
the class TownyCommand method parseTownyCommand.
private void parseTownyCommand(CommandSender sender, String[] split) {
TownyPermissionSource permSource = TownyUniverse.getInstance().getPermissionSource();
if (split.length == 0) {
HelpMenu.GENERAL_HELP.send(sender);
return;
} else if (split[0].equalsIgnoreCase("?") || split[0].equalsIgnoreCase("help")) {
HelpMenu.HELP.send(sender);
return;
}
Player player = null;
TownyWorld world = null;
if (sender instanceof Player) {
player = (Player) sender;
world = TownyAPI.getInstance().getTownyWorld(player.getWorld());
}
try {
switch(split[0].toLowerCase(Locale.ROOT)) {
case "map":
{
catchConsole(sender);
if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_MAP.getNode()))
throw new TownyException(Translatable.of("msg_err_command_disable"));
if (split.length > 1 && split[1].equalsIgnoreCase("big"))
TownyAsciiMap.generateAndSend(plugin, player, 18);
else if (split.length > 1 && split[1].equalsIgnoreCase("hud"))
HUDManager.toggleMapHud(player);
else
showMap(player);
break;
}
case "prices":
{
Town town = null;
if (!TownyEconomyHandler.isActive())
throw new TownyException(Translatable.of("msg_err_no_economy"));
if (split.length > 1) {
town = TownyUniverse.getInstance().getTown(split[1]);
if (town == null) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_not_registered_1", split[1]));
return;
}
} else if (player != null) {
Resident resident = TownyAPI.getInstance().getResident(player);
if (resident != null)
town = resident.getTownOrNull();
}
for (String line : getTownyPrices(town, Translation.getLocale(sender))) TownyMessaging.sendMessage(sender, line);
break;
}
case "switches":
{
catchConsole(sender);
if (world == null || !world.isUsingTowny())
throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
Resident resident = getResidentOrThrow(player.getUniqueId());
ResidentUtil.openSelectionGUI(resident, SelectionGUI.SelectionType.SWITCHES);
break;
}
case "itemuse":
{
catchConsole(sender);
if (world == null || !world.isUsingTowny())
throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
Resident resident = getResidentOrThrow(player.getUniqueId());
ResidentUtil.openSelectionGUI(resident, SelectionGUI.SelectionType.ITEMUSE);
break;
}
case "allowedblocks":
{
catchConsole(sender);
if (world == null || !world.isUsingTowny())
throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
Resident resident = getResidentOrThrow(player.getUniqueId());
ResidentUtil.openSelectionGUI(resident, SelectionGUI.SelectionType.ALLOWEDBLOCKS);
break;
}
case "wildsblocks":
{
catchConsole(sender);
if (world == null || !world.isUsingTowny())
throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
Resident resident = getResidentOrThrow(player.getUniqueId());
ResidentUtil.openGUIInventory(resident, world.getUnclaimedZoneIgnoreMaterials(), Translatable.of("gui_title_towny_wildsblocks").forLocale(player));
break;
}
case "plotclearblocks":
{
catchConsole(sender);
if (world == null || !world.isUsingTowny())
throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
Resident resident = getResidentOrThrow(player.getUniqueId());
ResidentUtil.openGUIInventory(resident, world.getPlotManagementMayorDelete(), Translatable.of("gui_title_towny_plotclear").forLocale(player));
break;
}
case "top":
{
parseTopCommand(sender, StringMgmt.remFirstArg(split));
break;
}
case "tree":
{
catchPlayer(sender);
if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_TREE))
throw new TownyException(Translatable.of("msg_err_command_disable"));
for (String line : TownyUniverse.getInstance().getTreeString(0)) TownyMessaging.sendMessage(sender, line);
break;
}
case "time":
{
if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_TIME))
throw new TownyException(Translatable.of("msg_err_command_disable"));
TownyMessaging.sendMsg(sender, Translatable.of("msg_time_until_a_new_day").append(TimeMgmt.formatCountdownTime(TimeMgmt.townyTime(true))));
break;
}
case "universe":
{
if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_UNIVERSE))
throw new TownyException(Translatable.of("msg_err_command_disable"));
for (String line : getUniverseStats(Translation.getLocale(sender))) TownyMessaging.sendMessage(sender, line);
break;
}
case "version":
case "v":
{
if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_VERSION))
throw new TownyException(Translatable.of("msg_err_command_disable"));
if (TownyUpdateChecker.shouldShowNotification()) {
TownyMessaging.sendMsg(sender, Translatable.of("msg_latest_version", plugin.getVersion(), TownyUpdateChecker.getNewVersion()));
} else {
TownyMessaging.sendMsg(sender, Translatable.of("msg_towny_version", plugin.getVersion()));
if (TownyUpdateChecker.hasCheckedSuccessfully())
TownyMessaging.sendMsg(sender, Translatable.of("msg_up_to_date"));
}
break;
}
case "spy":
{
catchConsole(sender);
if (!permSource.testPermission(sender, PermissionNodes.TOWNY_CHAT_SPY.getNode()))
throw new TownyException(Translatable.of("msg_err_command_disable"));
Resident resident = getResidentOrThrow(player.getUniqueId());
resident.toggleMode(split, true);
break;
}
default:
{
if (TownyCommandAddonAPI.hasCommand(CommandType.TOWNY, split[0]))
TownyCommandAddonAPI.getAddonCommand(CommandType.TOWNY, split[0]).execute(sender, "towny", split);
else
TownyMessaging.sendErrorMsg(sender, Translatable.of("msg_err_invalid_sub"));
}
}
} catch (TownyException e) {
TownyMessaging.sendErrorMsg(sender, e.getMessage(sender));
}
}
use of com.palmergames.bukkit.towny.permissions.TownyPermissionSource in project SiegeWar by TownyAdvanced.
the class PlayerDeath method evaluateSiegePlayerDeath.
/**
* Evaluates a siege death event.
* <p>
* If the dead player is officially involved in a nearby siege,
* - The opposing team gains battle points
* - Their inventory items degrade a little (e.g. 20%)
* <p>
* The allegiance of the killer is not considered,
* in order to allows for a wider range of siege-kill-tactics.
* Examples:
* - Players without towns can contribute to battle points
* - Players from non-nation towns can contribute to battle points
* - Players from secretly-allied nations can contribute to battle points
* - Devices (cannons, traps, bombs etc.) can be used to gain battle points
*
* @param deadPlayer The player who died
* @param playerDeathEvent The player death event
*/
public static void evaluateSiegePlayerDeath(Player deadPlayer, PlayerDeathEvent playerDeathEvent) {
try {
World world = playerDeathEvent.getEntity().getWorld();
if (!TownyAPI.getInstance().isTownyWorld(world) || !TownyAPI.getInstance().getTownyWorld(world).isWarAllowed())
return;
TownyPermissionSource tps = TownyUniverse.getInstance().getPermissionSource();
Resident deadResident = TownyUniverse.getInstance().getResident(deadPlayer.getUniqueId());
if (deadResident == null || !deadResident.hasTown())
return;
/*
* Do an early permission test to avoid hitting the sieges list if
* it could never return a proper SiegeSide.
*/
if (!tps.testPermission(deadPlayer, SiegeWarPermissionNodes.SIEGEWAR_TOWN_SIEGE_BATTLE_POINTS.getNode()) && !tps.testPermission(deadPlayer, SiegeWarPermissionNodes.SIEGEWAR_NATION_SIEGE_BATTLE_POINTS.getNode()))
return;
Town deadResidentTown = deadResident.getTown();
// Declare local variables
Siege confirmedCandidateSiege = null;
SiegeSide confirmedCandidateSiegePlayerSide = SiegeSide.NOBODY;
double confirmedCandidateDistanceToPlayer = 0;
double candidateSiegeDistanceToPlayer;
SiegeSide candidateSiegePlayerSide;
// Find nearest eligible siege
for (Siege candidateSiege : SiegeController.getSieges()) {
// Skip if siege is not active
if (!candidateSiege.getStatus().isActive())
continue;
// Skip if player is not is siege-zone
if (!SiegeWarDistanceUtil.isInSiegeZone(deadPlayer, candidateSiege))
continue;
// Is player eligible ?
candidateSiegePlayerSide = SiegeWarAllegianceUtil.calculateCandidateSiegePlayerSide(deadPlayer, deadResidentTown, candidateSiege);
if (candidateSiegePlayerSide == SiegeSide.NOBODY)
continue;
// Confirm candidate siege if it is 1st viable one OR closer than confirmed candidate
candidateSiegeDistanceToPlayer = deadPlayer.getLocation().distance(candidateSiege.getFlagLocation());
if (confirmedCandidateSiege == null || candidateSiegeDistanceToPlayer < confirmedCandidateDistanceToPlayer) {
confirmedCandidateSiege = candidateSiege;
confirmedCandidateSiegePlayerSide = candidateSiegePlayerSide;
confirmedCandidateDistanceToPlayer = candidateSiegeDistanceToPlayer;
}
}
// apply siege point penalty for the nearest one, and keep inventory
if (confirmedCandidateSiege != null) {
// Award penalty points w/ notification if siege is in progress
if (confirmedCandidateSiege.getStatus() == SiegeStatus.IN_PROGRESS) {
if (SiegeWarSettings.getWarSiegeDeathSpawnFireworkEnabled()) {
if (isBannerMissing(confirmedCandidateSiege.getFlagLocation()))
replaceMissingBanner(confirmedCandidateSiege.getFlagLocation());
Color bannerColor = ((Banner) confirmedCandidateSiege.getFlagLocation().getBlock().getState()).getBaseColor().getColor();
CosmeticUtil.spawnFirework(deadPlayer.getLocation().add(0, 2, 0), Color.RED, bannerColor, true);
}
boolean residentIsAttacker = confirmedCandidateSiegePlayerSide == SiegeSide.ATTACKERS;
SiegeWarScoringUtil.awardPenaltyPoints(residentIsAttacker, deadPlayer, confirmedCandidateSiege);
}
// Keep and degrade inventory
degradeInventory(playerDeathEvent);
keepInventory(playerDeathEvent);
// Keep level
keepLevel(playerDeathEvent);
if (confirmedCandidateSiege.getBannerControlSessions().containsKey(deadPlayer)) {
// If the player that died had an ongoing session, remove it.
confirmedCandidateSiege.removeBannerControlSession(confirmedCandidateSiege.getBannerControlSessions().get(deadPlayer));
Translatable errorMessage = SiegeWarSettings.isTrapWarfareMitigationEnabled() ? Translatable.of("msg_siege_war_banner_control_session_failure_with_altitude") : Translatable.of("msg_siege_war_banner_control_session_failure");
Messaging.sendMsg(deadPlayer, errorMessage);
}
}
} catch (Exception e) {
try {
SiegeWar.severe("Error evaluating siege death for player " + deadPlayer.getName());
} catch (Exception e2) {
SiegeWar.severe("Error evaluating siege death (could not read player name)");
}
e.printStackTrace();
}
}
Aggregations