Compare commits

...

4 commits

Author SHA1 Message Date
Allink a753380695
Add Folia support (#10)
* Set "folia-supported" to true in plugin.yml

* Remove redundant imports
2023-03-31 05:09:16 +03:00
kaboom b616612b07 WeaponMachineGun: Store updated numFiredBullets 2023-03-31 05:00:13 +03:00
kaboom 756f89b283 numShotBullets -> numFiredBullets 2023-03-31 04:44:55 +03:00
kaboom 27524ecc55 Stop using BukkitRunnable
In preparation for Folia support.
2023-03-31 04:42:19 +03:00
3 changed files with 62 additions and 47 deletions

View file

@ -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()

View file

@ -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,24 +17,24 @@ 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;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
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;
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 +42,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 +94,51 @@ 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();
final Player player = Bukkit.getPlayer(playerUUID);
int numFiredBullets = entry.getValue();
if (player == null) {
iterator.remove();
}
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
);
numFiredBullets++;
machineGunActive.put(playerUUID, numFiredBullets);
if (numFiredBullets >= MAX_BULLET_COUNT) {
iterator.remove();
}
}
}
}

View file

@ -3,6 +3,7 @@ main: pw.kaboom.weapons.Main
description: Plugin that implements various kinds of weapons.
api-version: 1.13
version: master
folia-supported: true
commands:
weapons: