--- a/net/minecraft/world/entity/OminousItemSpawner.java
+++ b/net/minecraft/world/entity/OminousItemSpawner.java
@@ -27,7 +_,7 @@
     private static final String TAG_ITEM = "item";
     private static final EntityDataAccessor<ItemStack> DATA_ITEM = SynchedEntityData.defineId(OminousItemSpawner.class, EntityDataSerializers.ITEM_STACK);
     public static final int TICKS_BEFORE_ABOUT_TO_SPAWN_SOUND = 36;
-    private long spawnItemAfterTicks;
+    public long spawnItemAfterTicks;
 
     public OminousItemSpawner(EntityType<? extends OminousItemSpawner> entityType, Level level) {
         super(entityType, level);
@@ -77,7 +_,7 @@
                     entity = this.spawnProjectile(serverLevel, projectileItem, item);
                 } else {
                     entity = new ItemEntity(serverLevel, this.getX(), this.getY(), this.getZ(), item);
-                    serverLevel.addFreshEntity(entity);
+                    serverLevel.addFreshEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.OMINOUS_ITEM_SPAWNER); // Paper - fixes and addition to spawn reason API
                 }
 
                 serverLevel.levelEvent(3021, this.blockPosition(), 1);
@@ -91,7 +_,7 @@
         ProjectileItem.DispenseConfig dispenseConfig = projectileItem.createDispenseConfig();
         dispenseConfig.overrideDispenseEvent().ifPresent(i -> level.levelEvent(i, this.blockPosition(), 0));
         Direction direction = Direction.DOWN;
-        Projectile projectile = Projectile.spawnProjectileUsingShoot(
+        Projectile projectile = Projectile.spawnProjectileUsingShootDelayed( // Paper - fixes and addition to spawn reason API
             projectileItem.asProjectile(level, this.position(), stack, direction),
             level,
             stack,
@@ -100,7 +_,7 @@
             direction.getStepZ(),
             dispenseConfig.power(),
             dispenseConfig.uncertainty()
-        );
+        ).spawn(org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.OMINOUS_ITEM_SPAWNER); // Paper - fixes and addition to spawn reason API
         projectile.setOwner(this);
         return projectile;
     }
@@ -170,7 +_,7 @@
         return this.getEntityData().get(DATA_ITEM);
     }
 
-    private void setItem(ItemStack item) {
+    public void setItem(ItemStack item) {
         this.getEntityData().set(DATA_ITEM, item);
     }
 
