aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2022-04-23 12:38:42 -0700
committerGitHub <[email protected]>2022-04-23 12:38:42 -0700
commitfbbc03a7400673cf257f30d485502b2aacf409ba (patch)
tree46e17f35a76ff0879e47e1bb6036b0de02a4e6e9
parent47f43da438e1ea5e758974b913840c9c13aa38f1 (diff)
downloadPaper-fbbc03a7400673cf257f30d485502b2aacf409ba.tar.gz
Paper-fbbc03a7400673cf257f30d485502b2aacf409ba.zip
Add EntityDyeEvent and CollarColorable interface (#7625)
-rw-r--r--patches/api/0381-Add-EntityDyeEvent-and-CollarColorable-interface.patch262
-rw-r--r--patches/server/0899-Add-EntityDyeEvent-and-CollarColorable-interface.patch42
2 files changed, 304 insertions, 0 deletions
diff --git a/patches/api/0381-Add-EntityDyeEvent-and-CollarColorable-interface.patch b/patches/api/0381-Add-EntityDyeEvent-and-CollarColorable-interface.patch
new file mode 100644
index 0000000000..1f8509de8a
--- /dev/null
+++ b/patches/api/0381-Add-EntityDyeEvent-and-CollarColorable-interface.patch
@@ -0,0 +1,262 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Fri, 18 Mar 2022 21:16:38 -0700
+Subject: [PATCH] Add EntityDyeEvent and CollarColorable interface
+
+
+diff --git a/src/main/java/io/papermc/paper/entity/CollarColorable.java b/src/main/java/io/papermc/paper/entity/CollarColorable.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..bb68e6a2528eee81eb3f26f22b9c35508f1e69c1
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/entity/CollarColorable.java
+@@ -0,0 +1,25 @@
++package io.papermc.paper.entity;
++
++import org.bukkit.DyeColor;
++import org.bukkit.entity.LivingEntity;
++import org.jetbrains.annotations.NotNull;
++
++/**
++ * Entities that can have their collars colored.
++ */
++public interface CollarColorable extends LivingEntity {
++
++ /**
++ * Get the collar color of this entity
++ *
++ * @return the color of the collar
++ */
++ @NotNull DyeColor getCollarColor();
++
++ /**
++ * Set the collar color of this entity
++ *
++ * @param color the color to apply
++ */
++ void setCollarColor(@NotNull DyeColor color);
++}
+diff --git a/src/main/java/io/papermc/paper/event/entity/EntityDyeEvent.java b/src/main/java/io/papermc/paper/event/entity/EntityDyeEvent.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..aefbaccd32f1ab25a4da63bdc878922e0c220478
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/event/entity/EntityDyeEvent.java
+@@ -0,0 +1,75 @@
++package io.papermc.paper.event.entity;
++
++import org.bukkit.DyeColor;
++import org.bukkit.entity.Entity;
++import org.bukkit.entity.Player;
++import org.bukkit.event.Cancellable;
++import org.bukkit.event.HandlerList;
++import org.bukkit.event.entity.EntityEvent;
++import org.jetbrains.annotations.NotNull;
++import org.jetbrains.annotations.Nullable;
++
++/**
++ * Called when an entity is dyed. Currently, this is called for {@link org.bukkit.entity.Sheep}
++ * being dyed, and {@link org.bukkit.entity.Wolf}/{@link org.bukkit.entity.Cat} collars being dyed.
++ */
++public class EntityDyeEvent extends EntityEvent implements Cancellable {
++
++ private static final HandlerList HANDLER_LIST = new HandlerList();
++
++ private DyeColor dyeColor;
++ private final Player player;
++ private boolean cancel;
++
++ public EntityDyeEvent(@NotNull Entity entity, @NotNull DyeColor dyeColor, @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 @NotNull 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(@NotNull DyeColor dyeColor) {
++ this.dyeColor = dyeColor;
++ }
++
++ /**
++ * Returns the player dyeing the entity, if available.
++ *
++ * @return player or null
++ */
++ public @Nullable Player getPlayer() {
++ return player;
++ }
++
++ @Override
++ public boolean isCancelled() {
++ return this.cancel;
++ }
++
++ @Override
++ public void setCancelled(boolean cancel) {
++ this.cancel = cancel;
++ }
++
++ @Override
++ public @NotNull HandlerList getHandlers() {
++ return HANDLER_LIST;
++ }
++
++ public static @NotNull HandlerList getHandlerList() {
++ return HANDLER_LIST;
++ }
++}
+diff --git a/src/main/java/org/bukkit/entity/Cat.java b/src/main/java/org/bukkit/entity/Cat.java
+index c340fecb61bac66baf0f44189d21bc85289b1269..97b0d8ccd3fd3a711ec5fa4ce3d8703515895081 100644
+--- a/src/main/java/org/bukkit/entity/Cat.java
++++ b/src/main/java/org/bukkit/entity/Cat.java
+@@ -6,7 +6,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.
+@@ -29,6 +29,7 @@ public interface Cat extends Tameable, Sittable {
+ * @return the color of the collar
+ */
+ @NotNull
++ @Override // Paper
+ public DyeColor getCollarColor();
+
+ /**
+@@ -36,6 +37,7 @@ public interface Cat extends Tameable, Sittable {
+ *
+ * @param color the color to apply
+ */
++ @Override // Paper
+ public void setCollarColor(@NotNull DyeColor color);
+
+ /**
+diff --git a/src/main/java/org/bukkit/entity/Wolf.java b/src/main/java/org/bukkit/entity/Wolf.java
+index 490395f38c4d9977d30a6f48585a4ea0e7faff0f..297b65a6cf7d25f02bbd824ea507c5c083e0abec 100644
+--- a/src/main/java/org/bukkit/entity/Wolf.java
++++ b/src/main/java/org/bukkit/entity/Wolf.java
+@@ -6,7 +6,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
+@@ -31,6 +31,7 @@ public interface Wolf extends Tameable, Sittable {
+ * @return the color of the collar
+ */
+ @NotNull
++ @Override // Paper
+ public DyeColor getCollarColor();
+
+ /**
+@@ -38,6 +39,7 @@ public interface Wolf extends Tameable, Sittable {
+ *
+ * @param color the color to apply
+ */
++ @Override // Paper
+ public void setCollarColor(@NotNull DyeColor color);
+
+ // Paper start
+diff --git a/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java b/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java
+index 10d2466fb69919cead26af2fcdf6bd2e678f2927..ddf4aec01e4873aa799721ce615f5d7c929dc915 100644
+--- a/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java
++++ b/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
+ 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;
+- }
+-
+ }
diff --git a/patches/server/0899-Add-EntityDyeEvent-and-CollarColorable-interface.patch b/patches/server/0899-Add-EntityDyeEvent-and-CollarColorable-interface.patch
new file mode 100644
index 0000000000..21dd7187d3
--- /dev/null
+++ b/patches/server/0899-Add-EntityDyeEvent-and-CollarColorable-interface.patch
@@ -0,0 +1,42 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Fri, 18 Mar 2022 21:15:55 -0700
+Subject: [PATCH] Add EntityDyeEvent and CollarColorable interface
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java
+index e4eac546836b73b5e9c8fd68ca0d32c01148313e..9f5180271ca8a790aa52763ac46d31b905c9d477 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
++++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
+@@ -432,6 +432,13 @@ public class Cat extends TamableAnimal {
+ DyeColor enumcolor = ((DyeItem) item).getDyeColor();
+
+ if (enumcolor != this.getCollarColor()) {
++ // Paper start
++ final io.papermc.paper.event.entity.EntityDyeEvent event = new io.papermc.paper.event.entity.EntityDyeEvent(this.getBukkitEntity(), org.bukkit.DyeColor.getByWoolData((byte) enumcolor.getId()), ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity());
++ if (!event.callEvent()) {
++ return InteractionResult.FAIL;
++ }
++ enumcolor = DyeColor.byId(event.getColor().getWoolData());
++ // Paper end
+ this.setCollarColor(enumcolor);
+ if (!player.getAbilities().instabuild) {
+ itemstack.shrink(1);
+diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+index aaf7096835bab3a42d617553dd83e048e4a83766..249ef89342d2811614507090b79250adf78e33ce 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
++++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+@@ -393,6 +393,13 @@ public class Wolf extends TamableAnimal implements NeutralMob {
+ DyeColor enumcolor = ((DyeItem) item).getDyeColor();
+
+ if (enumcolor != this.getCollarColor()) {
++ // Paper start
++ final io.papermc.paper.event.entity.EntityDyeEvent event = new io.papermc.paper.event.entity.EntityDyeEvent(this.getBukkitEntity(), org.bukkit.DyeColor.getByWoolData((byte) enumcolor.getId()), ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity());
++ if (!event.callEvent()) {
++ return InteractionResult.FAIL;
++ }
++ enumcolor = DyeColor.byId(event.getColor().getWoolData());
++ // Paper end
+ this.setCollarColor(enumcolor);
+ if (!player.getAbilities().instabuild) {
+ itemstack.shrink(1);