70 Zeilen
3.6 KiB
Diff
70 Zeilen
3.6 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: MelnCat <melncatuwu@gmail.com>
|
||
|
Date: Mon, 19 Sep 2022 14:16:10 -0700
|
||
|
Subject: [PATCH] Add a consumer parameter to ProjectileSource#launchProjectile
|
||
|
|
||
|
|
||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||
|
index 1994dd3c272395a27474ec1b37a924a24fc50fd6..e807ef287136e7b3931197e45434a3f618cf3054 100644
|
||
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||
|
@@ -482,8 +482,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
- @SuppressWarnings("unchecked")
|
||
|
public <T extends Projectile> T launchProjectile(Class<? extends T> projectile, Vector velocity) {
|
||
|
+ // Paper start - launchProjectile consumer
|
||
|
+ return this.launchProjectile(projectile, velocity, null);
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ @SuppressWarnings("unchecked")
|
||
|
+ public <T extends Projectile> T launchProjectile(Class<? extends T> projectile, Vector velocity, org.bukkit.util.Consumer<T> function) {
|
||
|
+ // Paper end - launchProjectile consumer
|
||
|
Preconditions.checkState(!this.getHandle().generation, "Cannot launch projectile during world generation");
|
||
|
|
||
|
net.minecraft.world.level.Level world = ((CraftWorld) getWorld()).getHandle();
|
||
|
@@ -566,6 +573,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||
|
if (velocity != null) {
|
||
|
((T) launch.getBukkitEntity()).setVelocity(velocity);
|
||
|
}
|
||
|
+ // Paper start - launchProjectile consumer
|
||
|
+ if (function != null) {
|
||
|
+ function.accept((T) launch.getBukkitEntity());
|
||
|
+ }
|
||
|
+ // Paper end - launchProjectile consumer
|
||
|
|
||
|
world.addFreshEntity(launch);
|
||
|
return (T) launch.getBukkitEntity();
|
||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java b/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java
|
||
|
index 388647c2ef814270942f4e6c6eb57a3abaf84212..2afb7af0a90959edd3b0ead2fe4d9018b5560aa4 100644
|
||
|
--- a/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java
|
||
|
+++ b/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java
|
||
|
@@ -57,6 +57,13 @@ public class CraftBlockProjectileSource implements BlockProjectileSource {
|
||
|
|
||
|
@Override
|
||
|
public <T extends Projectile> T launchProjectile(Class<? extends T> projectile, Vector velocity) {
|
||
|
+ // Paper start - launchProjectile consumer
|
||
|
+ return this.launchProjectile(projectile, velocity, null);
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public <T extends Projectile> T launchProjectile(Class<? extends T> projectile, Vector velocity, org.bukkit.util.Consumer<T> function) {
|
||
|
+ // Paper end - launchProjectile consumer
|
||
|
Validate.isTrue(this.getBlock().getType() == Material.DISPENSER, "Block is no longer dispenser");
|
||
|
// Copied from BlockDispenser.dispense()
|
||
|
BlockSourceImpl isourceblock = new BlockSourceImpl((ServerLevel) this.dispenserBlock.getLevel(), this.dispenserBlock.getBlockPos());
|
||
|
@@ -147,6 +154,11 @@ public class CraftBlockProjectileSource implements BlockProjectileSource {
|
||
|
if (velocity != null) {
|
||
|
((T) launch.getBukkitEntity()).setVelocity(velocity);
|
||
|
}
|
||
|
+ // Paper start
|
||
|
+ if (function != null) {
|
||
|
+ function.accept((T) launch.getBukkitEntity());
|
||
|
+ }
|
||
|
+ // Paper end
|
||
|
|
||
|
world.addFreshEntity(launch);
|
||
|
return (T) launch.getBukkitEntity();
|