diff --git a/src/main/java/dev/logal/snowbrawl/CommandHandler.java b/src/main/java/dev/logal/snowbrawl/CommandHandler.java index 4e0f1cf..530639b 100644 --- a/src/main/java/dev/logal/snowbrawl/CommandHandler.java +++ b/src/main/java/dev/logal/snowbrawl/CommandHandler.java @@ -225,11 +225,14 @@ public final class CommandHandler { } sender.sendMessage(successMessage("Configuration variables for arena " + arena.getName()) + ":"); + sender.sendMessage(successMessage(" - Enabled: " + arena.isEnabled())); sender.sendMessage(successMessage(" - Refill: " + arena.getRefill() + " snowballs")); sender.sendMessage(successMessage(" - Player Limit: " + arena.getPlayerLimit() + " players")); sender.sendMessage(successMessage(" - Grace Time: " + (arena.getGraceTime() / 20) + "s")); sender.sendMessage(successMessage(" - Match Time: " + (arena.getMatchTime() / 20) + "s")); sender.sendMessage(successMessage(" - Damage: " + arena.getDamage() + " HP")); + sender.sendMessage(successMessage(" - Regen: " + arena.getRegen() + " HP")); + sender.sendMessage(successMessage(" - Mob Spawning Allowed: " + arena.isMobSpawningAllowed())); sender.sendMessage(successMessage(" - World: " + arena.getWorld().getName())); Location pos1 = arena.getPos1(), pos2 = arena.getPos2(); @@ -378,7 +381,7 @@ public final class CommandHandler { } /** - * Changes the amount of damage done per snowball hit in this arena. + * Changes the amount of damage done per snowball hit in an arena. * * @param sender The user who executed the command. * @param name The name of the arena. @@ -404,6 +407,40 @@ public final class CommandHandler { this.snowbrawl.saveConfig(); } + /** + * Changes the amount of regen awarded to players per kill in an arena. + * + * @param sender The user who executed the command. + * @param name The name of the arena. + * @param regen The amount of regen for this arena. + */ + @Command(hook = "set_arena_regen") + public void commandArenasRegen(CommandSender sender, String name, int regen){ + Arena arena = this.snowbrawl.getArenaManager().getArenaByName(name); + if (arena == null){ + sender.sendMessage(failMessage("The specified arena does not exist.")); + return; + } + + int oldRegen = arena.getRegen(); + try{ + arena.setRegen(regen); + } catch (final IllegalArgumentException exception){ + sender.sendMessage(failMessage(exception.getMessage())); + return; + } + + sender.sendMessage(successMessage("The regen for arena " + arena.getName() + " has been changed from " + oldRegen + " HP to " + arena.getRegen() + " HP.")); + this.snowbrawl.saveConfig(); + } + + /** + * Changes whether mobs can spawn inside an arena. + * + * @param sender The use who executed the command. + * @param name The name of the arena. + * @param mobSpawningAllowed Whether mobs are allowed to spawn or not. + */ @Command(hook = "set_arena_mobspawningallowed") public void commandArenasMobSpawningAllowed(CommandSender sender, String name, boolean mobSpawningAllowed){ Arena arena = this.snowbrawl.getArenaManager().getArenaByName(name); diff --git a/src/main/java/dev/logal/snowbrawl/Snowbrawl.java b/src/main/java/dev/logal/snowbrawl/Snowbrawl.java index 17d05b8..e52c7cc 100644 --- a/src/main/java/dev/logal/snowbrawl/Snowbrawl.java +++ b/src/main/java/dev/logal/snowbrawl/Snowbrawl.java @@ -90,6 +90,7 @@ public final class Snowbrawl extends JavaPlugin { newConfig.set("arenas." + id + ".graceTime", arena.getGraceTime()); newConfig.set("arenas." + id + ".matchTime", arena.getMatchTime()); newConfig.set("arenas." + id + ".damage", arena.getDamage()); + newConfig.set("arenas." + id + ".regen", arena.getRegen()); newConfig.set("arenas." + id + ".mobspawningallowed", arena.isMobSpawningAllowed()); newConfig.set("arenas." + id + ".world", arena.getWorld().getName()); @@ -162,6 +163,7 @@ public final class Snowbrawl extends JavaPlugin { arena.setGraceTime(config.getInt("arenas." + id + ".graceTime", Arena.DEFAULT_GRACE_TIME)); arena.setMatchTime(config.getInt("arenas." + id + ".matchTime", Arena.DEFAULT_MATCH_TIME)); arena.setDamage(config.getInt("arenas." + id + ".damage", Arena.DEFAULT_DAMAGE)); + arena.setRegen(config.getInt("arenas." + id + ".regen", Arena.DEFAULT_REGEN)); arena.setMobSpawningAllowed(config.getBoolean("arenas." + id + ".mobspawningallowed", Arena.DEFAULT_MOB_SPAWNING_ALLOWED)); // The world can be null because Arena overrides it with the actual world. Only the coordinates matter. diff --git a/src/main/java/dev/logal/snowbrawl/managers/ArenaManager.java b/src/main/java/dev/logal/snowbrawl/managers/ArenaManager.java index c547baf..b44a482 100644 --- a/src/main/java/dev/logal/snowbrawl/managers/ArenaManager.java +++ b/src/main/java/dev/logal/snowbrawl/managers/ArenaManager.java @@ -906,6 +906,7 @@ public class ArenaManager implements Listener { logger.info(" - Grace Time: " + arena.getGraceTime() + "s"); logger.info(" - Match Time: " + arena.getMatchTime() + "s"); logger.info(" - Damage: " + arena.getDamage() + " HP"); + logger.info(" - Regen: " + arena.getRegen() + " HP"); logger.info(" - Mob Spawning Allowed: " + arena.isMobSpawningAllowed()); logger.info(" - World: " + arena.getWorld().getName()); diff --git a/src/main/java/dev/logal/snowbrawl/types/Arena.java b/src/main/java/dev/logal/snowbrawl/types/Arena.java index 58c4e3a..9027bb4 100644 --- a/src/main/java/dev/logal/snowbrawl/types/Arena.java +++ b/src/main/java/dev/logal/snowbrawl/types/Arena.java @@ -26,6 +26,7 @@ public class Arena { public static final int DEFAULT_GRACE_TIME = 15 * 20; public static final int DEFAULT_MATCH_TIME = 300 * 20; public static final int DEFAULT_DAMAGE = 4; + public static final int DEFAULT_REGEN = 4; public static final boolean DEFAULT_MOB_SPAWNING_ALLOWED = false; public static final double DEFAULT_POS1_X = 0, DEFAULT_POS1_Y = 0, DEFAULT_POS1_Z = 0; public static final double DEFAULT_POS2_X = 0, DEFAULT_POS2_Y = 0, DEFAULT_POS2_Z = 0; @@ -40,6 +41,7 @@ public class Arena { private int playerLimit; // Maximum amount of players allowed in this arena in a match. private int graceTime, matchTime; private int damage; // Damage dealt to players per snowball hit. + private int regen; // Damage dealt to players per snowball hit. private boolean allowMobSpawning; private World world; // Which world the coordinates apply to. private Location pos1, pos2; // Coordinates identifying the 2 corners of the arena. @@ -225,6 +227,28 @@ public class Arena { this.damage = damage; } + /** + * Gets the amount of HP awarded to players per kill. + * + * @return The amount of HP awarded. + */ + public int getRegen(){ + return this.regen; + } + + /** + * Sets the amount of HP awards to players per kill. + * + * @param regen The amount of HP awarded. + */ + public void setRegen(final int regen){ + if (regen < 0 || regen > 20){ + throw new IllegalArgumentException("The regen must be between 0 and 20."); + } + + this.regen = regen; + } + /** * Gets whether mobs are allowed to naturally spawn in this arena. * diff --git a/src/main/java/dev/logal/snowbrawl/types/Match.java b/src/main/java/dev/logal/snowbrawl/types/Match.java index 79ed174..b747f47 100644 --- a/src/main/java/dev/logal/snowbrawl/types/Match.java +++ b/src/main/java/dev/logal/snowbrawl/types/Match.java @@ -20,6 +20,8 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import java.util.ArrayList; import java.util.Comparator; @@ -335,6 +337,9 @@ public class Match { MatchParticipant killer = this.getParticipant(victim.getPlayer().getKiller()); if (killer != null && killer != victim){ killer.awardKill(); + if (this.getArena().getRegen() > 0){ + killer.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, (int) (Math.round(this.getArena().getRegen() / 1.67 * 20)), 2)); // Award the killer with health regeneration over a period of time based on the arena's configured regen amount. + } } // Suppress global death message and only send to match participants. diff --git a/src/main/resources/commands.cmd b/src/main/resources/commands.cmd index f6462a5..92ddeeb 100644 --- a/src/main/resources/commands.cmd +++ b/src/main/resources/commands.cmd @@ -96,6 +96,13 @@ command snowbrawl { help Changes the amount of damage done per snowball hit in this arena.; } + regen [int:regen] { + perm redstoner.snowbrawl.arena.config.regen; + run set_arena_regen name regen; + type all; + help Changes the amount of regen awarded to players per kill.; + } + allowmobspawning [boolean:mobspawningallowed] { perm redstoner.snowbrawl.arena.config.mobspawningallowed; run set_arena_mobspawningallowed name mobspawningallowed;