Stop using BukkitRunnable
In preparation for Folia support.
This commit is contained in:
parent
6b339700fe
commit
27524ecc55
|
@ -1,7 +1,7 @@
|
|||
package pw.kaboom.weapons.modules.weapons;
|
||||
|
||||
import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent;
|
||||
import com.destroystokyo.paper.event.server.ServerTickEndEvent;
|
||||
import com.destroystokyo.paper.event.server.ServerTickStartEvent;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -121,7 +121,7 @@ public final class WeaponExplosiveCrossbow implements Listener {
|
|||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onTickEnd(ServerTickEndEvent event) {
|
||||
public void onTickStart(ServerTickStartEvent event) {
|
||||
for (Projectile projectile : explosiveProjectiles) {
|
||||
final World world = projectile.getWorld();
|
||||
final Location location = projectile.getLocation()
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package pw.kaboom.weapons.modules.weapons;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
|
@ -14,6 +17,7 @@ import org.bukkit.entity.LivingEntity;
|
|||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
@ -24,6 +28,7 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||
import org.bukkit.util.Vector;
|
||||
|
||||
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
|
||||
import com.destroystokyo.paper.event.server.ServerTickStartEvent;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
|
@ -31,7 +36,9 @@ import net.kyori.adventure.text.format.TextDecoration;
|
|||
import pw.kaboom.weapons.Main;
|
||||
|
||||
public final class WeaponMachineGun implements Listener {
|
||||
private static HashSet<UUID> machineGunActive = new HashSet<UUID>();
|
||||
|
||||
private static final int MAX_BULLET_COUNT = 20;
|
||||
private static HashMap<UUID, Integer> machineGunActive = new HashMap<UUID, Integer>();
|
||||
|
||||
public static void rightClick(final Material item, final Component name,
|
||||
final PlayerInteractEvent event) {
|
||||
|
@ -39,45 +46,9 @@ public final class WeaponMachineGun implements Listener {
|
|||
.decoration(TextDecoration.ITALIC, false).equals(name)) {
|
||||
final UUID playerUUID = event.getPlayer().getUniqueId();
|
||||
|
||||
if (!machineGunActive.contains(playerUUID)) {
|
||||
machineGunActive.add(playerUUID);
|
||||
final int maxBulletCount = 20;
|
||||
|
||||
new BukkitRunnable() {
|
||||
private int i;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
final Player player = event.getPlayer();
|
||||
final Location eyeLocation = player.getEyeLocation();
|
||||
final World world = player.getWorld();
|
||||
final Vector velocity = eyeLocation.getDirection().multiply(12);
|
||||
|
||||
final Arrow arrow = player.launchProjectile(Arrow.class);
|
||||
|
||||
arrow.customName(Component.text("WeaponMachineGunBullet"));
|
||||
arrow.setShooter(player);
|
||||
arrow.setVelocity(velocity);
|
||||
|
||||
final float volume = 1.0F;
|
||||
final float pitch = 63.0F;
|
||||
|
||||
world.playSound(
|
||||
eyeLocation,
|
||||
Sound.ENTITY_GENERIC_EXPLODE,
|
||||
volume,
|
||||
pitch
|
||||
);
|
||||
|
||||
i++;
|
||||
|
||||
if (i >= maxBulletCount) {
|
||||
this.cancel();
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(JavaPlugin.getPlugin(Main.class), 0, 1);
|
||||
|
||||
machineGunActive.remove(playerUUID);
|
||||
if (!machineGunActive.containsKey(playerUUID)) {
|
||||
final int numFiredBullets = 0;
|
||||
machineGunActive.put(playerUUID, numFiredBullets);
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
@ -127,4 +98,46 @@ public final class WeaponMachineGun implements Listener {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onTickStart(ServerTickStartEvent event) {
|
||||
if (machineGunActive.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Entry<UUID, Integer>> iterator = machineGunActive.entrySet().iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
final Entry<UUID, Integer> entry = iterator.next();
|
||||
final UUID playerUUID = entry.getKey();
|
||||
int numFiredBullets = entry.getValue();
|
||||
|
||||
final Player player = Bukkit.getPlayer(playerUUID);
|
||||
final Location eyeLocation = player.getEyeLocation();
|
||||
final World world = player.getWorld();
|
||||
final Vector velocity = eyeLocation.getDirection().multiply(12);
|
||||
|
||||
final Arrow arrow = player.launchProjectile(Arrow.class);
|
||||
|
||||
arrow.customName(Component.text("WeaponMachineGunBullet"));
|
||||
arrow.setShooter(player);
|
||||
arrow.setVelocity(velocity);
|
||||
|
||||
final float volume = 1.0F;
|
||||
final float pitch = 63.0F;
|
||||
|
||||
world.playSound(
|
||||
eyeLocation,
|
||||
Sound.ENTITY_GENERIC_EXPLODE,
|
||||
volume,
|
||||
pitch
|
||||
);
|
||||
|
||||
numShotBullets++;
|
||||
|
||||
if (numFiredBullets >= MAX_BULLET_COUNT) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue