From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Wed, 15 Sep 2021 20:40:51 +0200 Subject: [PATCH] Friction API diff --git a/src/main/java/io/papermc/paper/entity/Frictional.java b/src/main/java/io/papermc/paper/entity/Frictional.java new file mode 100644 index 0000000000000000000000000000000000000000..315558d8a592f7238f45fd1e68b70476e721be92 --- /dev/null +++ b/src/main/java/io/papermc/paper/entity/Frictional.java @@ -0,0 +1,35 @@ +package io.papermc.paper.entity; + +import net.kyori.adventure.util.TriState; +import org.bukkit.entity.Entity; +import org.jspecify.annotations.NullMarked; + +/** + * Represents an {@link Entity} that can experience friction with the air and ground. + */ +@NullMarked +public interface Frictional { + + /** + * Gets the friction state of this entity. + * When set to {@link TriState#TRUE}, the entity will always experience friction. + * When set to {@link TriState#FALSE}, the entity will never experience friction. + * When set to {@link TriState#NOT_SET}, the entity will fall back to Minecraft's default behaviour. + * + * @return the entity's friction state + */ + TriState getFrictionState(); + + /** + * Sets the friction state of this entity. + * When set to {@link TriState#TRUE}, the entity will always experience friction. + * When set to {@link TriState#FALSE}, the entity will never experience friction. + * When set to {@link TriState#NOT_SET}, the entity will fall back to Minecraft's default behaviour. + *

+ * Please note that changing this value will do nothing for a player. + * + * @param state the new friction state to set for the entity + */ + void setFrictionState(TriState state); + +} diff --git a/src/main/java/org/bukkit/entity/Item.java b/src/main/java/org/bukkit/entity/Item.java index ced419f8655bff72f0257b639d5f7d73afe3c2e2..bcc6ba95bd21c7972865838c636a03f50b6c1f1a 100644 --- a/src/main/java/org/bukkit/entity/Item.java +++ b/src/main/java/org/bukkit/entity/Item.java @@ -8,7 +8,7 @@ import org.jetbrains.annotations.Nullable; /** * Represents a dropped item. */ -public interface Item extends Entity { +public interface Item extends Entity, io.papermc.paper.entity.Frictional { // Paper /** * Gets the item stack associated with this item drop. diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java index 9f3e2903c955f2a5d1b25825c49188df62d20cef..016529563381a674db8050cb328f9e8f16e72e93 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java @@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable; /** * Represents a living entity, such as a monster or player */ -public interface LivingEntity extends Attributable, Damageable, ProjectileSource { +public interface LivingEntity extends Attributable, Damageable, ProjectileSource, io.papermc.paper.entity.Frictional { // Paper /** * Gets the height of the living entity's eyes above its Location. diff --git a/src/main/java/org/bukkit/entity/Minecart.java b/src/main/java/org/bukkit/entity/Minecart.java index 148d8cddba48a886eddef72a3de63d5eaa15949f..52cac73b7680806299a92013bbf959ecacac824f 100644 --- a/src/main/java/org/bukkit/entity/Minecart.java +++ b/src/main/java/org/bukkit/entity/Minecart.java @@ -11,7 +11,7 @@ import org.jetbrains.annotations.Nullable; /** * Represents a minecart entity. */ -public interface Minecart extends Vehicle { +public interface Minecart extends Vehicle, io.papermc.paper.entity.Frictional { // Paper /** * Sets a minecart's damage.