--- a/net/minecraft/world/entity/npc/EntityVillagerTrader.java
+++ b/net/minecraft/world/entity/npc/EntityVillagerTrader.java
@@ -45,6 +45,13 @@
 import net.minecraft.world.level.World;
 import net.minecraft.world.phys.Vec3D;
 
+// CraftBukkit start
+import org.bukkit.Bukkit;
+import org.bukkit.craftbukkit.inventory.CraftMerchantRecipe;
+import org.bukkit.entity.AbstractVillager;
+import org.bukkit.event.entity.VillagerAcquireTradeEvent;
+// CraftBukkit end
+
 public class EntityVillagerTrader extends EntityVillagerAbstract {
 
     private static final int NUMBER_OF_TRADE_OFFERS = 5;
@@ -54,6 +61,7 @@
 
     public EntityVillagerTrader(EntityTypes<? extends EntityVillagerTrader> entitytypes, World world) {
         super(entitytypes, world);
+        this.setDespawnDelay(48000); // CraftBukkit - set default from MobSpawnerTrader
     }
 
     @Override
@@ -131,7 +139,16 @@
             MerchantRecipe merchantrecipe = villagertrades_imerchantrecipeoption.a(this, this.random);
 
             if (merchantrecipe != null) {
-                merchantrecipelist.add(merchantrecipe);
+                // CraftBukkit start
+                VillagerAcquireTradeEvent event = new VillagerAcquireTradeEvent((AbstractVillager) getBukkitEntity(), merchantrecipe.asBukkit());
+                // Suppress during worldgen
+                if (this.valid) {
+                    Bukkit.getPluginManager().callEvent(event);
+                }
+                if (!event.isCancelled()) {
+                    merchantrecipelist.add(CraftMerchantRecipe.fromBukkit(event.getRecipe()).toMinecraft());
+                }
+                // CraftBukkit end
             }
 
         }
