diff options
author | tylermurphy534 <tylerm@tylerm.dev> | 2023-07-30 22:13:49 +0000 |
---|---|---|
committer | tylermurphy534 <tylerm@tylerm.dev> | 2023-07-30 22:13:49 +0000 |
commit | a2ea5a635e1b841f58c05ca07e4b547a38fe3433 (patch) | |
tree | 5217465c967796680cc03b11359490f638d6b78c /src/main/java/dev/tylerm/khs/game/events | |
parent | Update 'README.md' (diff) | |
parent | 1.7.5 rc4 (diff) | |
download | kenshinshideandseek-a2ea5a635e1b841f58c05ca07e4b547a38fe3433.tar.gz kenshinshideandseek-a2ea5a635e1b841f58c05ca07e4b547a38fe3433.tar.bz2 kenshinshideandseek-a2ea5a635e1b841f58c05ca07e4b547a38fe3433.zip |
Merge pull request '1.7.5' (#10) from dev into main
Reviewed-on: https://g.tylerm.dev/tylermurphy534/KenshinsHideAndSeek/pulls/10
Diffstat (limited to 'src/main/java/dev/tylerm/khs/game/events')
-rw-r--r-- | src/main/java/dev/tylerm/khs/game/events/Border.java | 72 | ||||
-rw-r--r-- | src/main/java/dev/tylerm/khs/game/events/Glow.java | 72 | ||||
-rw-r--r-- | src/main/java/dev/tylerm/khs/game/events/Taunt.java | 101 |
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 |