diff --git a/paper-api/src/main/java/io/papermc/paper/entity/CollarColorable.java b/paper-api/src/main/java/io/papermc/paper/entity/CollarColorable.java new file mode 100644 index 0000000000..205b561c76 --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/entity/CollarColorable.java @@ -0,0 +1,26 @@ +package io.papermc.paper.entity; + +import org.bukkit.DyeColor; +import org.bukkit.entity.LivingEntity; +import org.jspecify.annotations.NullMarked; + +/** + * Entities that can have their collars colored. + */ +@NullMarked +public interface CollarColorable extends LivingEntity { + + /** + * Get the collar color of this entity + * + * @return the color of the collar + */ + DyeColor getCollarColor(); + + /** + * Set the collar color of this entity + * + * @param color the color to apply + */ + void setCollarColor(DyeColor color); +} diff --git a/paper-api/src/main/java/io/papermc/paper/event/entity/EntityDyeEvent.java b/paper-api/src/main/java/io/papermc/paper/event/entity/EntityDyeEvent.java new file mode 100644 index 0000000000..049471bac6 --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/event/entity/EntityDyeEvent.java @@ -0,0 +1,82 @@ +package io.papermc.paper.event.entity; + +import org.bukkit.DyeColor; +import org.bukkit.entity.Cat; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Wolf; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityEvent; +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +/** + * Called when an entity is dyed. Currently, this is called for {@link Sheep} + * being dyed, and {@link Wolf}/{@link Cat} collars being dyed. + */ +@NullMarked +public class EntityDyeEvent extends EntityEvent implements Cancellable { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final @Nullable Player player; + private DyeColor dyeColor; + + private boolean cancelled; + + @ApiStatus.Internal + public EntityDyeEvent(final Entity entity, final DyeColor dyeColor, final @Nullable Player player) { + super(entity); + this.dyeColor = dyeColor; + this.player = player; + } + + /** + * Gets the DyeColor the entity is being dyed + * + * @return the DyeColor the entity is being dyed + */ + public DyeColor getColor() { + return this.dyeColor; + } + + /** + * Sets the DyeColor the entity is being dyed + * + * @param dyeColor the DyeColor the entity will be dyed + */ + public void setColor(final DyeColor dyeColor) { + this.dyeColor = dyeColor; + } + + /** + * Returns the player dyeing the entity, if available. + * + * @return player or {@code null} + */ + public @Nullable Player getPlayer() { + return this.player; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(final boolean cancel) { + this.cancelled = cancel; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/paper-api/src/main/java/org/bukkit/entity/Cat.java b/paper-api/src/main/java/org/bukkit/entity/Cat.java index 5101553bb7..de422f00f8 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cat.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cat.java @@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull; /** * Meow. */ -public interface Cat extends Tameable, Sittable { +public interface Cat extends Tameable, Sittable, io.papermc.paper.entity.CollarColorable { // Paper - CollarColorable /** * Gets the current type of this cat. @@ -36,6 +36,7 @@ public interface Cat extends Tameable, Sittable { * @return the color of the collar */ @NotNull + @Override // Paper public DyeColor getCollarColor(); /** @@ -43,6 +44,7 @@ public interface Cat extends Tameable, Sittable { * * @param color the color to apply */ + @Override // Paper public void setCollarColor(@NotNull DyeColor color); /** diff --git a/paper-api/src/main/java/org/bukkit/entity/Wolf.java b/paper-api/src/main/java/org/bukkit/entity/Wolf.java index 91e96ee536..c73489f4b7 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Wolf.java +++ b/paper-api/src/main/java/org/bukkit/entity/Wolf.java @@ -9,7 +9,7 @@ import org.jetbrains.annotations.NotNull; /** * Represents a Wolf */ -public interface Wolf extends Tameable, Sittable { +public interface Wolf extends Tameable, Sittable, io.papermc.paper.entity.CollarColorable { // Paper - CollarColorable /** * Checks if this wolf is angry @@ -34,6 +34,7 @@ public interface Wolf extends Tameable, Sittable { * @return the color of the collar */ @NotNull + @Override // Paper public DyeColor getCollarColor(); /** @@ -41,6 +42,7 @@ public interface Wolf extends Tameable, Sittable { * * @param color the color to apply */ + @Override // Paper public void setCollarColor(@NotNull DyeColor color); /** diff --git a/paper-api/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java index d93a7efd0f..5d056d6bcb 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java @@ -11,11 +11,8 @@ import org.jetbrains.annotations.Nullable; /** * Called when a sheep's wool is dyed */ -public class SheepDyeWoolEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel; - private DyeColor color; - private final Player player; +public class SheepDyeWoolEvent extends io.papermc.paper.event.entity.EntityDyeEvent implements Cancellable { + // Paper - move everything to superclass @Deprecated(since = "1.17.1") public SheepDyeWoolEvent(@NotNull final Sheep sheep, @NotNull final DyeColor color) { @@ -23,20 +20,7 @@ public class SheepDyeWoolEvent extends EntityEvent implements Cancellable { } public SheepDyeWoolEvent(@NotNull final Sheep sheep, @NotNull final DyeColor color, @Nullable Player player) { - super(sheep); - this.cancel = false; - this.color = color; - this.player = player; - } - - @Override - public boolean isCancelled() { - return cancel; - } - - @Override - public void setCancelled(boolean cancel) { - this.cancel = cancel; + super(sheep, color, player); // Paper } @NotNull @@ -44,45 +28,4 @@ public class SheepDyeWoolEvent extends EntityEvent implements Cancellable { public Sheep getEntity() { return (Sheep) entity; } - - /** - * Returns the player dyeing the sheep, if available. - * - * @return player or null - */ - @Nullable - public Player getPlayer() { - return player; - } - - /** - * Gets the DyeColor the sheep is being dyed - * - * @return the DyeColor the sheep is being dyed - */ - @NotNull - public DyeColor getColor() { - return color; - } - - /** - * Sets the DyeColor the sheep is being dyed - * - * @param color the DyeColor the sheep will be dyed - */ - public void setColor(@NotNull DyeColor color) { - this.color = color; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlers; - } - - @NotNull - public static HandlerList getHandlerList() { - return handlers; - } - }