PlayerElytraBoostEvent

This commit is contained in:
BillyGalbreath
2018-07-21 01:59:59 -05:00
parent e054d501fb
commit a949eef7aa
2 changed files with 58 additions and 16 deletions

View File

@@ -29,21 +29,48 @@
}
@@ -213,7 +221,7 @@
@@ -211,11 +219,34 @@
});
}
+ // Paper start - delayed projectile spawning
+ public record Delayed<T extends Projectile>(
+ T projectile,
+ ServerLevel world,
+ ItemStack projectileStack
+ ) {
+ // Taken from net.minecraft.world.entity.projectile.Projectile.spawnProjectile(T, net.minecraft.server.level.ServerLevel, net.minecraft.world.item.ItemStack, java.util.function.Consumer<T>)
+ public boolean attemptSpawn() {
+ if (!world.addFreshEntity(projectile)) return false;
+ projectile.applyOnProjectileSpawned(this.world, this.projectileStack);
+ return true;
+ }
+
+ public T spawn() {
+ this.attemptSpawn();
+ return projectile();
+ }
+ }
+ // Paper end - delayed projectile spawning
+
public static <T extends Projectile> T spawnProjectile(T projectile, ServerLevel world, ItemStack projectileStack, Consumer<T> beforeSpawn) {
+ // Paper start - delayed projectile spawning
+ return spawnProjectileDelayed(projectile, world, projectileStack, beforeSpawn).spawn();
+ }
+ public static <T extends Projectile> Delayed<T> spawnProjectileDelayed(T projectile, ServerLevel world, ItemStack projectileStack, Consumer<T> beforeSpawn) {
+ // Paper end - delayed projectile spawning
beforeSpawn.accept(projectile);
- world.addFreshEntity(projectile);
+ if (world.addFreshEntity(projectile)) // CraftBukkit
projectile.applyOnProjectileSpawned(world, projectileStack);
return projectile;
- projectile.applyOnProjectileSpawned(world, projectileStack);
- return projectile;
+ return new Delayed<>(projectile, world, projectileStack); // Paper - delayed projectile spawning
}
public void applyOnProjectileSpawned(ServerLevel world, ItemStack projectileStack) {
@@ -232,6 +263,17 @@
}
@@ -230,7 +238,18 @@
}
}
+ }
+
+ // CraftBukkit start - call projectile hit event
+ protected ProjectileDeflection preHitTargetOrDeflectSelf(HitResult movingobjectposition) {
+ org.bukkit.event.entity.ProjectileHitEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition);
@@ -52,12 +79,13 @@
+ return this.hitTargetOrDeflectSelf(movingobjectposition);
+ }
+ return ProjectileDeflection.NONE;
}
+ }
+ // CraftBukkit end
+
protected ProjectileDeflection hitTargetOrDeflectSelf(HitResult hitResult) {
if (hitResult.getType() == HitResult.Type.ENTITY) {
@@ -309,6 +328,11 @@
EntityHitResult movingobjectpositionentity = (EntityHitResult) hitResult;
@@ -309,6 +351,11 @@
protected void onHitEntity(EntityHitResult entityHitResult) {}
protected void onHitBlock(BlockHitResult blockHitResult) {