use of com.palmergames.bukkit.towny.object.Translatable in project Towny by TownyAdvanced.
the class InviteCommand method sendInviteList.
public static void sendInviteList(Player player, List<Invite> list, int page, boolean fromSender) {
if (page < 0) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_negative"));
return;
} else if (page == 0) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_error_must_be_int"));
return;
}
int total = (int) Math.ceil(((double) list.size()) / ((double) 10));
if (page > total) {
return;
}
List<String> invitesFormatted = new ArrayList<>();
int iMax = page * 10;
if ((page * 10) > list.size()) {
iMax = list.size();
}
Translatable object = null;
for (int i = (page - 1) * 10; i < iMax; i++) {
Invite invite = list.get(i);
String name = invite.getDirectSender().getName();
// If it's from the sender, do it differently
String output = null;
if (fromSender) {
output = Colors.Blue + invite.getReceiver().getName() + Colors.Gray + " - " + Colors.Green + name;
if (invite.getSender() instanceof Town) {
// If it's sent by a town to a resident
object = Translatable.of("player_sing");
}
if (invite.getSender() instanceof Nation) {
if (invite.getReceiver() instanceof Town) {
object = Translatable.of("town_sing");
}
if (invite.getReceiver() instanceof Nation) {
object = Translatable.of("nation_sing");
}
}
} else {
// So it's not from the sender, then it's from the receiver so
output = Colors.Blue + invite.getSender().getName() + Colors.Gray + " - " + Colors.Green + name;
if (invite.getReceiver() instanceof Resident) {
object = Translatable.of("town_sing");
}
if (invite.getReceiver() instanceof Town || invite.getReceiver() instanceof Nation) {
object = Translatable.of("nation_sing");
}
}
invitesFormatted.add(output);
}
TownyMessaging.sendMessage(player, ChatTools.formatList(Translatable.of("invite_plu").forLocale(player), Colors.Blue + object.forLocale(player) + Colors.Gray + " - " + Colors.LightBlue + Translatable.of("invite_sent_by").forLocale(player), invitesFormatted, Translatable.of("LIST_PAGE", page, total).forLocale(player)));
}
use of com.palmergames.bukkit.towny.object.Translatable in project Towny by TownyAdvanced.
the class OnPlayerLogin method warningMessage.
/**
* Send a warning message if the town or nation is due to be deleted.
*
* @param resident Resident to send the warning to.
* @param town Town which the resident is part of.
* @param nation Nation which the town is a part of or null.
*/
private void warningMessage(Resident resident, Town town, Nation nation) {
if (town.hasUpkeep()) {
double upkeep = TownySettings.getTownUpkeepCost(town);
if (upkeep > 0 && !town.getAccount().canPayFromHoldings(upkeep)) {
/*
* Warn that the town is due to be deleted/bankrupted.
*/
if (TownySettings.isTownBankruptcyEnabled()) {
Translatable msg = !town.isBankrupt() ? // Town will be bankrupt next time upkeep is taken.
Translatable.of("msg_warning_bankrupt", town.getName()) : // Town is already bankrupt.
Translatable.of("msg_your_town_is_bankrupt");
TownyMessaging.sendMsg(resident, msg);
} else {
TownyMessaging.sendMsg(resident, Translatable.of("msg_warning_delete", town.getName()));
}
}
}
if (nation != null) {
double upkeep = TownySettings.getNationUpkeepCost(nation);
if (upkeep > 0 && !nation.getAccount().canPayFromHoldings(upkeep)) {
/*
* Warn that the nation is due to be deleted.
*/
TownyMessaging.sendMsg(resident, Translatable.of("msg_warning_delete", nation.getName()));
}
}
}
use of com.palmergames.bukkit.towny.object.Translatable in project Towny by TownyAdvanced.
the class PlotCommand method plotGroupToggle.
/**
* Toggle the plot group flags for pvp/explosion/fire/mobs (if town/world
* permissions allow)
*
* @param player - Player.
* @param plotGroup - PlotObjectGroup object.
* @param split - Current command arguments.
*/
public void plotGroupToggle(Player player, PlotGroup plotGroup, String[] split) {
TownyPermissionSource permSource = TownyUniverse.getInstance().getPermissionSource();
if (split.length == 0 || split[0].equalsIgnoreCase("?")) {
HelpMenu.PLOT_GROUP_TOGGLE.send(player);
} else {
try {
// We need to keep an ending string to show the message only after the transaction is over,
// to prevent chat log spam.
Translatable endingMessage = null;
Optional<Boolean> choice = Optional.empty();
if (split.length == 2) {
choice = BaseCommand.parseToggleChoice(split[1]);
}
for (TownBlock groupBlock : plotGroup.getTownBlocks()) {
Town town = groupBlock.getTownOrNull();
if (town == null)
continue;
if (!permSource.testPermission(player, PermissionNodes.TOWNY_COMMAND_PLOT_TOGGLE.getNode(split[0].toLowerCase())))
throw new TownyException(Translatable.of("msg_err_command_disable"));
if (split[0].equalsIgnoreCase("pvp")) {
// Make sure we are allowed to set these permissions.
toggleTest(player, groupBlock, StringMgmt.join(split, " "));
if (TownySettings.getPVPCoolDownTime() > 0 && !permSource.isTownyAdmin(player)) {
// Test to see if the pvp cooldown timer is active for the town this plot belongs to.
if (CooldownTimerTask.hasCooldown(town.getUUID().toString(), CooldownType.PVP))
throw new TownyException(Translatable.of("msg_err_cannot_toggle_pvp_x_seconds_remaining", CooldownTimerTask.getCooldownRemaining(town.getUUID().toString(), CooldownType.PVP)));
// Test to see if the pvp cooldown timer is active for this plot.
if (CooldownTimerTask.hasCooldown(groupBlock.getWorldCoord().toString(), CooldownType.PVP))
throw new TownyException(Translatable.of("msg_err_cannot_toggle_pvp_x_seconds_remaining", CooldownTimerTask.getCooldownRemaining(groupBlock.getWorldCoord().toString(), CooldownType.PVP)));
}
if (TownySettings.getOutsidersPreventPVPToggle() && choice.orElse(!groupBlock.getPermissions().pvp)) {
for (Player target : Bukkit.getOnlinePlayers()) {
if (!town.hasResident(target) && !player.getName().equals(target.getName()) && groupBlock.getWorldCoord().equals(WorldCoord.parseWorldCoord(target)))
throw new TownyException(Translatable.of("msg_cant_toggle_pvp_outsider_in_plot"));
}
}
PlotTogglePvpEvent plotTogglePvpEvent = new PlotTogglePvpEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().pvp));
Bukkit.getPluginManager().callEvent(plotTogglePvpEvent);
if (plotTogglePvpEvent.isCancelled()) {
TownyMessaging.sendErrorMsg(player, plotTogglePvpEvent.getCancellationMsg());
return;
}
groupBlock.getPermissions().pvp = choice.orElse(!groupBlock.getPermissions().pvp);
// Add a cooldown timer for this plot.
if (TownySettings.getPVPCoolDownTime() > 0 && !permSource.isTownyAdmin(player))
CooldownTimerTask.addCooldownTimer(groupBlock.getWorldCoord().toString(), CooldownType.PVP);
endingMessage = Translatable.of("msg_changed_pvp", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().pvp ? Translatable.of("enabled") : Translatable.of("disabled"));
} else if (split[0].equalsIgnoreCase("explosion")) {
// Make sure we are allowed to set these permissions.
toggleTest(player, groupBlock, StringMgmt.join(split, " "));
PlotToggleExplosionEvent plotToggleExplosionEvent = new PlotToggleExplosionEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().explosion));
Bukkit.getPluginManager().callEvent(plotToggleExplosionEvent);
if (plotToggleExplosionEvent.isCancelled()) {
TownyMessaging.sendErrorMsg(player, plotToggleExplosionEvent.getCancellationMsg());
return;
}
groupBlock.getPermissions().explosion = choice.orElse(!groupBlock.getPermissions().explosion);
endingMessage = Translatable.of("msg_changed_expl", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().explosion ? Translatable.of("enabled") : Translatable.of("disabled"));
} else if (split[0].equalsIgnoreCase("fire")) {
// Make sure we are allowed to set these permissions.
toggleTest(player, groupBlock, StringMgmt.join(split, " "));
PlotToggleFireEvent plotToggleFireEvent = new PlotToggleFireEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().fire));
Bukkit.getPluginManager().callEvent(plotToggleFireEvent);
if (plotToggleFireEvent.isCancelled()) {
TownyMessaging.sendErrorMsg(player, plotToggleFireEvent.getCancellationMsg());
return;
}
groupBlock.getPermissions().fire = choice.orElse(!groupBlock.getPermissions().fire);
endingMessage = Translatable.of("msg_changed_fire", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().fire ? Translatable.of("enabled") : Translatable.of("disabled"));
} else if (split[0].equalsIgnoreCase("mobs")) {
// Make sure we are allowed to set these permissions.
toggleTest(player, groupBlock, StringMgmt.join(split, " "));
PlotToggleMobsEvent plotToggleMobsEvent = new PlotToggleMobsEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().mobs));
Bukkit.getPluginManager().callEvent(plotToggleMobsEvent);
if (plotToggleMobsEvent.isCancelled()) {
TownyMessaging.sendErrorMsg(player, plotToggleMobsEvent.getCancellationMsg());
return;
}
groupBlock.getPermissions().mobs = choice.orElse(!groupBlock.getPermissions().mobs);
endingMessage = Translatable.of("msg_changed_mobs", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().mobs ? Translatable.of("enabled") : Translatable.of("disabled"));
} else {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_invalid_property", "plot"));
return;
}
groupBlock.setChanged(true);
// Change settings event
TownBlockSettingsChangedEvent event = new TownBlockSettingsChangedEvent(groupBlock);
Bukkit.getServer().getPluginManager().callEvent(event);
// Save
groupBlock.save();
}
// Finally send the message.
if (endingMessage != null)
TownyMessaging.sendMsg(player, endingMessage);
} catch (TownyException e) {
TownyMessaging.sendErrorMsg(player, e.getMessage(player));
} catch (Exception e) {
TownyMessaging.sendErrorMsg(player, e.getMessage());
}
}
}
use of com.palmergames.bukkit.towny.object.Translatable 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();
}
}
use of com.palmergames.bukkit.towny.object.Translatable in project SiegeWar by TownyAdvanced.
the class SiegeWarBannerControlUtil method evaluateNewBannerControlSessions.
private static void evaluateNewBannerControlSessions(Siege siege) {
try {
TownyUniverse universe = TownyUniverse.getInstance();
Resident resident;
for (Player player : Bukkit.getOnlinePlayers()) {
resident = universe.getResident(player.getUniqueId());
if (resident == null)
throw new TownyException(Translation.of("msg_err_not_registered_1", player.getName()));
if (!doesPlayerMeetBasicSessionRequirements(siege, player, resident))
continue;
if (!player.isOp() && player.hasPermission(SiegeWarPermissionNodes.SIEGEWAR_SIEGEZONE_CANNOT_GET_BANNER_CONTROL.getNode()))
continue;
if (!BattleSession.getBattleSession().isActive()) {
Translatable message = Translatable.of("msg_war_siege_battle_session_break_cannot_get_banner_control", SiegeWarBattleSessionUtil.getFormattedTimeUntilNextBattleSessionStarts());
Messaging.sendErrorMsg(player, message);
continue;
}
if (siege.getBannerControlSessions().containsKey(player))
// Player already has a control session
continue;
if (siege.getBannerControllingResidents().contains(resident))
// Player already on the BC list
continue;
if (SiegeWarBattleSessionUtil.isBattleSessionCappingLimiterActiveForResident(resident)) {
Translatable message = Translatable.of("msg_war_siege_max_daily_player_battle_sessions_reached_cannot_get_banner_control", SiegeWarSettings.getBattleSessionCappingLimiter(), SiegeWarBattleSessionUtil.getFormattedTimeUntilPlayerBattleSessionLimitExpires(resident));
Messaging.sendErrorMsg(player, message);
// Player is being limited by the battle session capping limiter
continue;
}
SiegeSide siegeSide = SiegeWarAllegianceUtil.calculateCandidateSiegePlayerSide(player, resident.getTown(), siege);
switch(siegeSide) {
case ATTACKERS:
addNewBannerControlSession(siege, player, resident, SiegeSide.ATTACKERS);
break;
case DEFENDERS:
addNewBannerControlSession(siege, player, resident, SiegeSide.DEFENDERS);
break;
case NOBODY:
continue;
}
}
} catch (Exception e) {
SiegeWar.severe("Problem evaluating new banner control sessions");
e.printStackTrace();
}
}
Aggregations