summaryrefslogtreewikicommitdiff
path: root/src/main/java/dev/tylerm/khs/game/events
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/dev/tylerm/khs/game/events')
-rw-r--r--src/main/java/dev/tylerm/khs/game/events/Border.java72
-rw-r--r--src/main/java/dev/tylerm/khs/game/events/Glow.java72
-rw-r--r--src/main/java/dev/tylerm/khs/game/events/Taunt.java101
3 files changed, 245 insertions, 0 deletions
diff --git a/src/main/java/dev/tylerm/khs/game/events/Border.java b/src/main/java/dev/tylerm/khs/game/events/Border.java
new file mode 100644
index 0000000..adcb5ce
--- /dev/null
+++ b/src/main/java/dev/tylerm/khs/game/events/Border.java
@@ -0,0 +1,72 @@
+package dev.tylerm.khs.game.events;
+
+import dev.tylerm.khs.Main;
+import dev.tylerm.khs.configuration.Map;
+
+import static dev.tylerm.khs.configuration.Config.*;
+import static dev.tylerm.khs.configuration.Localization.message;
+
+public class Border {
+
+ private int delay;
+ private boolean running;
+ private final Map map;
+ private int currentSize;
+
+ public Border(Map map) {
+ this.map = map;
+ this.delay = (int) (60 * map.getWorldBorderData().getY());
+ this.currentSize = (int) map.getWorldBorderData().getX();
+ }
+
+ public void update() {
+ if (delay == 30 && !running) {
+ Main.getInstance().getGame().broadcastMessage(worldBorderPrefix + message("WORLDBORDER_WARN"));
+ } else if (delay == 0) {
+ if (running) {
+ delay = (int) (60 * map.getWorldBorderData().getY());
+ running = false;
+ }
+ else decreaseWorldBorder();
+ }
+ delay--;
+ }
+
+ private void decreaseWorldBorder() {
+ if (currentSize == 100) return;
+ if(map.getGameSpawn().load() == null) return;
+ int change = (int) map.getWorldBorderData().getZ();
+ if (currentSize-change < 100) {
+ change = currentSize-100;
+ }
+ running = true;
+ Main.getInstance().getGame().broadcastMessage(worldBorderPrefix + message("WORLDBORDER_DECREASING").addAmount(change));
+ currentSize -= map.getWorldBorderData().getZ();
+ org.bukkit.WorldBorder border = map.getGameSpawn().load().getWorldBorder();
+ border.setSize(border.getSize()-change,30);
+ delay = 30;
+ }
+
+ public void resetWorldBorder() {
+ if(map.getGameSpawn().load() == null) return;
+ org.bukkit.WorldBorder border = map.getGameSpawn().load().getWorldBorder();
+ if (map.isWorldBorderEnabled()) {
+ border.setSize(map.getWorldBorderData().getX());
+ border.setCenter(map.getWorldBorderPos().getX(), map.getWorldBorderPos().getY());
+ currentSize = (int) map.getWorldBorderData().getX();
+ } else {
+ border.setSize(30000000);
+ border.setCenter(0, 0);
+ }
+ delay = (int) (60 * map.getWorldBorderData().getY());
+ }
+
+ public int getDelay() {
+ return delay;
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/dev/tylerm/khs/game/events/Glow.java b/src/main/java/dev/tylerm/khs/game/events/Glow.java
new file mode 100644
index 0000000..6015f26
--- /dev/null
+++ b/src/main/java/dev/tylerm/khs/game/events/Glow.java
@@ -0,0 +1,72 @@
+package dev.tylerm.khs.game.events;
+
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.ProtocolManager;
+import dev.tylerm.khs.util.packet.EntityMetadataPacket;
+import dev.tylerm.khs.Main;
+import org.bukkit.entity.Player;
+
+import static dev.tylerm.khs.configuration.Config.*;
+
+public class Glow {
+
+ private static final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
+
+ private int glowTime;
+ private boolean running;
+
+ public Glow() {
+ this.glowTime = 0;
+ }
+
+ public void onProjectile() {
+ if (glowStackable) glowTime += glowLength;
+ else glowTime = glowLength;
+ running = true;
+ }
+
+ private void sendPackets() {
+ for (Player hider : Main.getInstance().getBoard().getHiders())
+ for (Player seeker : Main.getInstance().getBoard().getSeekers())
+ setGlow(hider, seeker, true);
+ }
+
+ public void update() {
+ if(alwaysGlow){
+ sendPackets();
+ return;
+ }
+ if (running) {
+ sendPackets();
+ glowTime--;
+ glowTime = Math.max(glowTime, 0);
+ if (glowTime == 0) {
+ stopGlow();
+ }
+ }
+ }
+
+ private void stopGlow() {
+ running = false;
+ for (Player hider : Main.getInstance().getBoard().getHiders()) {
+ for (Player seeker : Main.getInstance().getBoard().getSeekers()) {
+ setGlow(hider, seeker, false);
+ }
+ }
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+
+ public void setGlow(Player player, Player target, boolean glowing) {
+
+ EntityMetadataPacket packet = new EntityMetadataPacket();
+ packet.setEntity(target);
+ packet.setGlow(glowing);
+ packet.writeMetadata();
+ packet.send(player);
+
+ }
+
+}
diff --git a/src/main/java/dev/tylerm/khs/game/events/Taunt.java b/src/main/java/dev/tylerm/khs/game/events/Taunt.java
new file mode 100644
index 0000000..98a9351
--- /dev/null
+++ b/src/main/java/dev/tylerm/khs/game/events/Taunt.java
@@ -0,0 +1,101 @@
+package dev.tylerm.khs.game.events;
+
+import dev.tylerm.khs.Main;
+import org.bukkit.Color;
+import org.bukkit.FireworkEffect;
+import org.bukkit.World;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Firework;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.meta.FireworkMeta;
+
+import java.util.Optional;
+import java.util.Random;
+import java.util.UUID;
+
+import static dev.tylerm.khs.configuration.Config.*;
+import static dev.tylerm.khs.configuration.Config.tauntDelay;
+import static dev.tylerm.khs.configuration.Localization.message;
+
+public class Taunt {
+
+ private UUID tauntPlayer;
+ private int delay;
+ private boolean running;
+
+ public Taunt() {
+ this.delay = tauntDelay;
+ }
+
+ public void update() {
+ if (delay == 0) {
+ if (running) launchTaunt();
+ else if (tauntLast || Main.getInstance().getBoard().sizeHider() > 1) executeTaunt();
+ } else {
+ delay--;
+ delay = Math.max(delay, 0);
+ }
+ }
+
+ private void executeTaunt() {
+ Optional<Player> rand = Main.getInstance().getBoard().getHiders().stream().skip(new Random().nextInt(Main.getInstance().getBoard().size())).findFirst();
+ if (!rand.isPresent()) {
+ Main.getInstance().getLogger().warning("Failed to select random seeker.");
+ return;
+ }
+ Player taunted = rand.get();
+ taunted.sendMessage(message("TAUNTED").toString());
+ Main.getInstance().getGame().broadcastMessage(tauntPrefix + message("TAUNT"));
+ tauntPlayer = taunted.getUniqueId();
+ running = true;
+ delay = 30;
+ }
+
+ private void launchTaunt() {
+ Player taunted = Main.getInstance().getBoard().getPlayer(tauntPlayer);
+ if (taunted != null) {
+ if (!Main.getInstance().getBoard().isHider(taunted)) {
+ Main.getInstance().getLogger().info("Taunted played died and is now seeker. Skipping taunt.");
+ tauntPlayer = null;
+ running = false;
+ delay = tauntDelay;
+ return;
+ }
+ World world = taunted.getLocation().getWorld();
+ if (world == null) {
+ Main.getInstance().getLogger().severe("Game world is null while trying to launch taunt.");
+ tauntPlayer = null;
+ running = false;
+ delay = tauntDelay;
+ return;
+ }
+ Firework fw = (Firework) world.spawnEntity(taunted.getLocation(), EntityType.FIREWORK);
+ FireworkMeta fwm = fw.getFireworkMeta();
+ fwm.setPower(4);
+ fwm.addEffect(FireworkEffect.builder()
+ .withColor(Color.BLUE)
+ .withColor(Color.RED)
+ .withColor(Color.YELLOW)
+ .with(FireworkEffect.Type.STAR)
+ .with(FireworkEffect.Type.BALL)
+ .with(FireworkEffect.Type.BALL_LARGE)
+ .flicker(true)
+ .withTrail()
+ .build());
+ fw.setFireworkMeta(fwm);
+ Main.getInstance().getGame().broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
+ }
+ tauntPlayer = null;
+ running = false;
+ delay = tauntDelay;
+ }
+
+ public int getDelay() {
+ return delay;
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+
+} \ No newline at end of file