Add missing Entity + Projectile API (#7632)

This commit is contained in:
Owen1212055
2022-10-11 17:04:26 -04:00
parent 9ff21585db
commit e7535118d9
6 changed files with 1113 additions and 4 deletions

View File

@@ -5,6 +5,47 @@ Subject: [PATCH] More Projectile API
Co-authored-by: Nassim Jahnke <nassim@njahnke.dev>
diff --git a/src/main/java/org/bukkit/entity/AbstractArrow.java b/src/main/java/org/bukkit/entity/AbstractArrow.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/entity/AbstractArrow.java
+++ b/src/main/java/org/bukkit/entity/AbstractArrow.java
@@ -0,0 +0,0 @@ public interface AbstractArrow extends Projectile {
@NotNull
org.bukkit.inventory.ItemStack getItemStack();
+ /**
+ * Sets the amount of ticks this arrow has been alive in the world
+ * This is used to determine when the arrow should be automatically despawned.
+ *
+ * @param ticks lifetime ticks
+ */
+ void setLifetimeTicks(int ticks);
+
+ /**
+ * Gets how many ticks this arrow has been in the world for.
+ *
+ * @return ticks this arrow has been in the world
+ */
+ int getLifetimeTicks();
+
+ /**
+ * Gets the sound that is played when this arrow hits an entity.
+ *
+ * @return sound that plays
+ */
+ @NotNull
+ org.bukkit.Sound getHitSound();
+
+ /**
+ * Sets the sound that is played when this arrow hits an entity.
+ *
+ * @param sound sound that is played
+ */
+ void setHitSound(@NotNull org.bukkit.Sound sound);
+
/**
* Sets this arrow to "noclip" status.
*
diff --git a/src/main/java/org/bukkit/entity/Firework.java b/src/main/java/org/bukkit/entity/Firework.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/entity/Firework.java
@@ -134,6 +175,122 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ * @param ticks Number of ticks
+ */
+ void setWaitTime(int ticks);
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Projectile.java b/src/main/java/org/bukkit/entity/Projectile.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/entity/Projectile.java
+++ b/src/main/java/org/bukkit/entity/Projectile.java
@@ -0,0 +0,0 @@ public interface Projectile extends Entity {
*/
@Deprecated(forRemoval = true) // Paper
public void setBounce(boolean doesBounce);
+ // Paper start
+
+ /**
+ * Gets whether the projectile has left the
+ * hitbox of their shooter and can now hit entities.
+ *
+ * @return has left shooter's hitbox
+ */
+ boolean hasLeftShooter();
+
+ /**
+ * Sets whether the projectile has left the
+ * hitbox of their shooter and can now hit entities.
+ *
+ * This is recalculated each tick if the projectile has a shooter.
+ *
+ * @param leftShooter has left shooter's hitbox
+ */
+ void setHasLeftShooter(boolean leftShooter);
+
+ /**
+ * Gets whether the projectile has been
+ * shot into the world and has sent a projectile
+ * shot game event.
+ *
+ * @return has been shot into the world
+ */
+ boolean hasBeenShot();
+
+ /**
+ * Sets whether the projectile has been
+ * shot into the world and has sent a projectile
+ * shot game event in the next tick.
+ *
+ * Setting this to false will cause a game event
+ * to fire and the value to be set back to true.
+ *
+ * @param beenShot has been in shot into the world
+ */
+ void setHasBeenShot(boolean beenShot);
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/ShulkerBullet.java b/src/main/java/org/bukkit/entity/ShulkerBullet.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/entity/ShulkerBullet.java
+++ b/src/main/java/org/bukkit/entity/ShulkerBullet.java
@@ -0,0 +0,0 @@ public interface ShulkerBullet extends Projectile {
* @param target the entity to target
*/
void setTarget(@Nullable Entity target);
+ // Paper start
+ /**
+ * Gets the relative offset that this shulker bullet should move towards,
+ * note that this will change each tick as the skulker bullet approaches the target.
+ *
+ * @return target delta offset
+ */
+ @org.jetbrains.annotations.NotNull
+ org.bukkit.util.Vector getTargetDelta();
+
+
+ /**
+ * Sets the relative offset that this shulker bullet should move towards,
+ * note that this will change each tick as the skulker bullet approaches the target.
+ * This is usually relative towards their target.
+ *
+ * @param vector target
+ */
+ void setTargetDelta(@org.jetbrains.annotations.NotNull org.bukkit.util.Vector vector);
+
+ /**
+ * Gets the current movement direction.
+ * This is used to determine the next movement direction to ensure
+ * that the bullet does not move in the same direction.
+ *
+ * @return null or their current direction
+ */
+ @Nullable
+ org.bukkit.block.BlockFace getCurrentMovementDirection();
+
+ /**
+ * Set the current movement direction.
+ * This is used to determine the next movement direction to ensure
+ * that the bullet does not move in the same direction.
+ *
+ * Set to null to simply pick a random direction.
+ *
+ * @param movementDirection null or a direction
+ */
+ void setCurrentMovementDirection(@Nullable org.bukkit.block.BlockFace movementDirection);
+
+ /**
+ * Gets how many ticks this shulker bullet
+ * will attempt to move in its current direction.
+ *
+ * @return number of steps
+ */
+ int getFlightSteps();
+
+ /**
+ * Sets how many ticks this shulker bullet
+ * will attempt to move in its current direction.
+ *
+ * @param steps number of steps
+ */
+ void setFlightSteps(int steps);
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/ThrownPotion.java b/src/main/java/org/bukkit/entity/ThrownPotion.java
@@ -179,3 +336,32 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ void splash();
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Trident.java b/src/main/java/org/bukkit/entity/Trident.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/entity/Trident.java
+++ b/src/main/java/org/bukkit/entity/Trident.java
@@ -0,0 +0,0 @@ public interface Trident extends AbstractArrow, ThrowableProjectile {
* @throws IllegalArgumentException if the loyalty level is lower than 0 or greater than 127
*/
void setLoyaltyLevel(int loyaltyLevel);
+
+ /**
+ * Gets if this trident has dealt damage to an
+ * entity yet or has hit the floor.
+ *
+ * If neither of these events have occurred yet, this will
+ * return false.
+ *
+ * @return has dealt damage
+ */
+ boolean hasDealtDamage();
+
+ /**
+ * Sets if this trident has dealt damage to an entity
+ * yet or has hit the floor.
+ *
+ * @param hasDealtDamage has dealt damage or hit the floor
+ */
+ void setHasDealtDamage(boolean hasDealtDamage);
}
// Paper end