From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
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 770b15f5413eb38890587aa6af2a56f15bf5934f..438d7c26cc3a4a3b5a1affffbbe26e4d272b0c00 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
@@ -401,6 +401,13 @@ public class Cat extends TamableAnimal implements VariantHolder<CatVariant> {
                     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 88563894af2b6386ced89c2fbe3cba434dbb8040..57ceec70bb150afaa66962090b142048d5b50c2f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -367,6 +367,14 @@ public class Wolf extends TamableAnimal implements NeutralMob {
                         DyeColor enumcolor = itemdye.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);