70 lines
		
	
	
	
		
			3.6 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
	
		
			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();
							 |