From ea833f979ead83cee1b26fa65e54fc0a2f0c8fd8 Mon Sep 17 00:00:00 2001 From: Zeanon Date: Sat, 15 Jan 2022 14:53:00 +0100 Subject: [PATCH] more meteors --- .../de/steamwar/fightsystem/event/Meteor.java | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/event/Meteor.java b/FightSystem_Core/src/de/steamwar/fightsystem/event/Meteor.java index aab277b..42aa29e 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/event/Meteor.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/event/Meteor.java @@ -10,6 +10,7 @@ import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.winconditions.Winconditions; import java.util.Random; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -18,6 +19,7 @@ import org.bukkit.entity.Fireball; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.Vector; @@ -32,6 +34,7 @@ public class Meteor implements Listener { private Meteor.State current = Meteor.State.PRE; private int currentDrops = 0; private Meteor.MeteorCountdown currentCountdown; + private BukkitTask currentDropping; public void startCountdown() { if (current == Meteor.State.PRE) { @@ -54,24 +57,32 @@ public class Meteor implements Listener { } public void drop() { - int xOffset = getStart(xLength); - int zOffset = getStart(zLength); - int yOffset = getHeightStart(); + final AtomicInteger amount = new AtomicInteger(current.minAmount + random.nextInt(current.maxAmount - current.minAmount)); - Meteor.Point redStart = new Meteor.Point(Config.RedExtendRegion.getMinX() + xOffset, Config.RedExtendRegion.getMaxY() + yOffset, Config.RedExtendRegion.getMaxZ() - zOffset); - Meteor.Point blueStart = new Meteor.Point(Config.BlueExtendRegion.getMinX() + xOffset, Config.BlueExtendRegion.getMaxY() + yOffset, Config.BlueExtendRegion.getMinZ() + zOffset); + currentDropping = Bukkit.getScheduler().runTaskTimer(FightSystem.getPlugin(), () -> { + int xOffset = getStart(xLength); + int zOffset = getStart(zLength); + int yOffset = getHeightStart(); - Fireball fireballRed = world.spawn(redStart.toLocation(world), Fireball.class); - fireballRed.setDirection(vector); - fireballRed.setBounce(false); - fireballRed.setIsIncendiary(false); - fireballRed.setYield(0); + Meteor.Point redStart = new Meteor.Point(Config.RedExtendRegion.getMinX() + xOffset, Config.RedExtendRegion.getMaxY() + yOffset, Config.RedExtendRegion.getMaxZ() - zOffset); + Meteor.Point blueStart = new Meteor.Point(Config.BlueExtendRegion.getMinX() + xOffset, Config.BlueExtendRegion.getMaxY() + yOffset, Config.BlueExtendRegion.getMinZ() + zOffset); - Fireball fireballBlue = world.spawn(blueStart.toLocation(world), Fireball.class); - fireballBlue.setDirection(vector); - fireballBlue.setBounce(false); - fireballBlue.setIsIncendiary(false); - fireballBlue.setYield(0); + Fireball fireballRed = world.spawn(redStart.toLocation(world), Fireball.class); + fireballRed.setDirection(vector); + fireballRed.setBounce(false); + fireballRed.setIsIncendiary(false); + fireballRed.setYield(0); + + Fireball fireballBlue = world.spawn(blueStart.toLocation(world), Fireball.class); + fireballBlue.setDirection(vector); + fireballBlue.setBounce(false); + fireballBlue.setIsIncendiary(false); + fireballBlue.setYield(0); + + if (amount.decrementAndGet() <= 0) { + currentDropping.cancel(); + } + }, 0L, 4L); } private int getStart(int regionSize) { @@ -132,25 +143,29 @@ public class Meteor implements Listener { private enum State { - PRE(60, 80, 1, 0), - FIRST(40, 60, 3, 2), - SECOND(30, 40, 4, 4), - THIRD(20, 30, 4, 6), - FOURTH(10, 20, 5, 8), - LAST(5, 10, 0, 10); + PRE(60, 80, 1, 0, 0, 0), + FIRST(40, 60, 3, 2, 1, 3), + SECOND(30, 40, 4, 4, 2, 5), + THIRD(20, 30, 4, 6, 3, 7), + FOURTH(10, 20, 5, 8, 5, 10), + LAST(5, 10, 0, 10, 7, 15); - State(int minTime, int maxTime, int switchAfter, int explosionSize) { + State(int minTime, int maxTime, int switchAfter, int explosionSize, int minAmount, int maxAmount) { this.MIN_TIME = minTime; this.MAX_TIME = maxTime; this.SWITCH_AFTER = switchAfter; this.explosionSize = explosionSize; + this.minAmount = minAmount; + this.maxAmount = maxAmount; } private final int MIN_TIME; //NOSONAR private final int MAX_TIME; //NOSONAR private final int SWITCH_AFTER; //NOSONAR private final int explosionSize; //NOSONAR + private final int minAmount; + private final int maxAmount; public Meteor.State getNext() {