Compare commits

...

4 commits

Author SHA1 Message Date
kaboom b665cbd192 Stop using deprecated API 2023-04-01 01:31:50 +03:00
Kaboom 2abd5d972e
main.yml: bump versions 2023-04-01 01:09:31 +03:00
kaboom 42df4d8795 Machine Gun: Avoid exception in Folia
Not a great solution, but it will do for now.
2023-03-31 22:28:11 +03:00
kaboom 7177cd1767 Stop using deprecated ProjectileCollideEvent 2023-03-31 21:32:51 +03:00
4 changed files with 96 additions and 86 deletions

View file

@ -11,14 +11,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 17
- name: Cache maven packages to speed up build
uses: actions/cache@v1
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@ -27,7 +27,7 @@ jobs:
- name: Build with Maven
run: mvn -B package --file pom.xml
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v3
with:
name: Weapons
path: target/Weapons.jar

View file

@ -11,11 +11,10 @@ import org.bukkit.entity.Projectile;
import org.bukkit.entity.SpectralArrow;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextDecoration;
@ -64,20 +63,25 @@ public final class WeaponArcher implements Listener {
/* Make shooter invulnerable to weapon projectiles */
@EventHandler
private void onProjectileCollide(final ProjectileCollideEvent event) {
if (event.getEntityType() == EntityType.SPECTRAL_ARROW) {
final Projectile projectile = event.getEntity();
private void onProjectileHit(final ProjectileHitEvent event) {
if (event.getEntityType() != EntityType.SPECTRAL_ARROW) {
return;
}
if (Component.text("WeaponArcherArrow").equals(projectile.customName())) {
final Entity collidedWith = event.getCollidedWith();
final Projectile projectile = event.getEntity();
if (collidedWith.getType() == EntityType.PLAYER
&& projectile.getShooter() instanceof Player
&& ((Player) projectile.getShooter()).getUniqueId().equals(
collidedWith.getUniqueId())) {
event.setCancelled(true);
}
}
if (!Component.text("WeaponArcherArrow").equals(projectile.customName())) {
return;
}
final Entity collidedWith = event.getHitEntity();
if (collidedWith != null
&& collidedWith.getType() == EntityType.PLAYER
&& projectile.getShooter() instanceof Player
&& ((Player) projectile.getShooter()).getUniqueId().equals(
collidedWith.getUniqueId())) {
event.setCancelled(true);
}
}
}

View file

@ -11,11 +11,10 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextDecoration;
@ -45,7 +44,6 @@ public final class WeaponArmageddon implements Listener {
EntityType.FIREBALL
);
fireball.setBounce(false);
fireball.customName(Component.text("WeaponArmegaddonCharge"));
fireball.setDirection(velocity);
fireball.setShooter(player);
@ -69,21 +67,29 @@ public final class WeaponArmageddon implements Listener {
/* Make shooter invulnerable to weapon projectiles, and prevent charges from
colliding with each other */
@EventHandler
private void onProjectileCollide(final ProjectileCollideEvent event) {
if (event.getEntityType() == EntityType.FIREBALL) {
final Projectile projectile = event.getEntity();
private void onProjectileHit(final ProjectileHitEvent event) {
if (event.getEntityType() != EntityType.FIREBALL) {
return;
}
if (Component.text("WeaponArmegaddonCharge").equals(projectile.customName())) {
final Entity collidedWith = event.getCollidedWith();
final Projectile projectile = event.getEntity();
if ((collidedWith.getType() == EntityType.PLAYER
&& projectile.getShooter() instanceof Player
&& ((Player) projectile.getShooter()).getUniqueId().equals(
collidedWith.getUniqueId()))
|| collidedWith.getType() == EntityType.FIREBALL) {
event.setCancelled(true);
}
}
if (!Component.text("WeaponArmegaddonCharge").equals(projectile.customName())) {
return;
}
final Entity collidedWith = event.getHitEntity();
if (collidedWith == null) {
return;
}
if ((collidedWith.getType() == EntityType.PLAYER
&& projectile.getShooter() instanceof Player
&& ((Player) projectile.getShooter()).getUniqueId().equals(
collidedWith.getUniqueId()))
|| collidedWith.getType() == EntityType.FIREBALL) {
event.setCancelled(true);
}
}
}

View file

@ -25,7 +25,6 @@ import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
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;
@ -51,47 +50,46 @@ public final class WeaponMachineGun implements Listener {
}
/* Make shooter invulnerable to weapon projectiles */
@EventHandler
private void onProjectileCollide(final ProjectileCollideEvent event) {
if (event.getEntityType() == EntityType.ARROW) {
final Projectile projectile = event.getEntity();
if (Component.text("WeaponMachineGunBullet").equals(projectile.customName())) {
final Entity collidedWith = event.getCollidedWith();
if (collidedWith.getType() == EntityType.PLAYER
&& projectile.getShooter() instanceof Player
&& ((Player) projectile.getShooter()).getUniqueId().equals(
collidedWith.getUniqueId())) {
event.setCancelled(true);
} else if (collidedWith instanceof LivingEntity) {
final int duration = 90000;
final int amplifier = 3;
final boolean ambient = true;
final boolean particles = false;
final PotionEffect harm = new PotionEffect(
PotionEffectType.HARM,
duration,
amplifier,
ambient,
particles
);
((LivingEntity) collidedWith).addPotionEffect(harm, true);
}
}
}
}
@EventHandler
private void onProjectileHit(final ProjectileHitEvent event) {
if (event.getEntityType() == EntityType.ARROW) {
final Projectile projectile = event.getEntity();
if (event.getEntityType() != EntityType.ARROW) {
return;
}
if (Component.text("WeaponMachineGunBullet").equals(projectile.customName())) {
projectile.remove();
}
final Projectile projectile = event.getEntity();
if (!Component.text("WeaponMachineGunBullet").equals(projectile.customName())) {
return;
}
final Entity collidedWith = event.getHitEntity();
projectile.remove();
if (collidedWith == null) {
return;
}
if (collidedWith.getType() == EntityType.PLAYER
&& projectile.getShooter() instanceof Player
&& ((Player) projectile.getShooter()).getUniqueId().equals(
collidedWith.getUniqueId())) {
event.setCancelled(true);
} else if (collidedWith instanceof LivingEntity) {
final int duration = 90000;
final int amplifier = 3;
final boolean ambient = true;
final boolean particles = false;
final PotionEffect harm = new PotionEffect(
PotionEffectType.HARM,
duration,
amplifier,
ambient,
particles
);
((LivingEntity) collidedWith).addPotionEffect(harm);
}
}
@ -111,27 +109,29 @@ public final class WeaponMachineGun implements Listener {
if (player == null) {
iterator.remove();
continue;
}
final Location eyeLocation = player.getEyeLocation();
final World world = player.getWorld();
final Vector velocity = eyeLocation.getDirection().multiply(12);
final Arrow arrow = player.launchProjectile(Arrow.class);
world.getChunkAtAsync(eyeLocation).thenAccept(chunk -> {
final Arrow arrow = player.launchProjectile(Arrow.class);
final float volume = 1.0F;
final float pitch = 63.0F;
arrow.customName(Component.text("WeaponMachineGunBullet"));
arrow.setShooter(player);
arrow.setVelocity(velocity);
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
);
world.playSound(
eyeLocation,
Sound.ENTITY_GENERIC_EXPLODE,
volume,
pitch
);
});
numFiredBullets++;
machineGunActive.put(playerUUID, numFiredBullets);