summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/game/events
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/game/events')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java71
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java85
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/events/Taunt.java101
3 files changed, 257 insertions, 0 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java
new file mode 100644
index 0000000..647c4b6
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Border.java
@@ -0,0 +1,71 @@
+package net.tylermurphy.hideAndSeek.game.events;
+
+import net.tylermurphy.hideAndSeek.Main;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
+
+public class Border {
+
+ private int delay;
+ private boolean running;
+
+ public Border() {
+ delay = 60 * worldBorderDelay;
+ }
+
+ public void update() {
+ if (delay == 30 && !running) {
+ Main.getInstance().getGame().broadcastMessage(worldBorderPrefix + message("WORLDBORDER_WARN"));
+ } else if (delay == 0) {
+ if (running) {
+ delay = 60 * worldBorderDelay;
+ running = false;
+ }
+ else decreaseWorldBorder();
+ }
+ delay--;
+ }
+
+ private void decreaseWorldBorder() {
+ if (currentWorldborderSize == 100) return;
+ int change = worldBorderChange;
+ if (currentWorldborderSize-worldBorderChange < 100) {
+ change = currentWorldborderSize-100;
+ }
+ running = true;
+ Main.getInstance().getGame().broadcastMessage(worldBorderPrefix + message("WORLDBORDER_DECREASING").addAmount(change));
+ currentWorldborderSize -= worldBorderChange;
+ World world = Bukkit.getWorld(Main.getInstance().getGame().getGameWorld());
+ assert world != null;
+ org.bukkit.WorldBorder border = world.getWorldBorder();
+ border.setSize(border.getSize()-change,30);
+ delay = 30;
+ }
+
+ public void resetWorldBorder(String worldName) {
+ World world = Bukkit.getWorld(worldName);
+ assert world != null;
+ org.bukkit.WorldBorder border = world.getWorldBorder();
+ if (worldBorderEnabled) {
+ border.setSize(worldBorderSize);
+ border.setCenter(worldBorderPosition.getX(), worldBorderPosition.getZ());
+ currentWorldborderSize = worldBorderSize;
+ } else {
+ border.setSize(30000000);
+ border.setCenter(0, 0);
+ }
+ delay = 60 * worldBorderDelay;
+ }
+
+ public int getDelay() {
+ return delay;
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java
new file mode 100644
index 0000000..8631ef5
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Glow.java
@@ -0,0 +1,85 @@
+package net.tylermurphy.hideAndSeek.game.events;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.ProtocolManager;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.wrappers.WrappedDataWatcher;
+import net.tylermurphy.hideAndSeek.Main;
+import org.bukkit.entity.Player;
+
+import java.lang.reflect.InvocationTargetException;
+
+import static net.tylermurphy.hideAndSeek.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) {
+ PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.ENTITY_METADATA);
+ packet.getIntegers().write(0, target.getEntityId());
+ WrappedDataWatcher watcher = new WrappedDataWatcher();
+ WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(Byte.class);
+ watcher.setEntity(target);
+ if (glowing) {
+ watcher.setObject(0, serializer, (byte) (0x40));
+ } else {
+ watcher.setObject(0, serializer, (byte) (0x0));
+ }
+ packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
+ try {
+ protocolManager.sendServerPacket(player, packet);
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/events/Taunt.java b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Taunt.java
new file mode 100644
index 0000000..191b1e7
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/events/Taunt.java
@@ -0,0 +1,101 @@
+package net.tylermurphy.hideAndSeek.game.events;
+
+import net.tylermurphy.hideAndSeek.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 net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Config.tauntDelay;
+import static net.tylermurphy.hideAndSeek.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