mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-05 06:32:17 -07:00
Add OMINOUS_ITEM_SPAWNER SpawnReason (#10897)
This commit is contained in:
@@ -1,15 +1,17 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Aikar <aikar@aikar.co>
|
From: Aikar <aikar@aikar.co>
|
||||||
Date: Sun, 24 Mar 2019 00:21:23 -0400
|
Date: Sun, 24 Mar 2019 00:21:23 -0400
|
||||||
Subject: [PATCH] Entity#getEntitySpawnReason
|
Subject: [PATCH] Fixes and additions to the spawn reason API
|
||||||
|
|
||||||
Allows you to return the SpawnReason for why an Entity Spawned
|
|
||||||
|
|
||||||
|
Expose an entities spawn reason on the entity.
|
||||||
Pre existing entities will return NATURAL if it was a non
|
Pre existing entities will return NATURAL if it was a non
|
||||||
persistenting Living Entity, SPAWNER for spawners,
|
persistenting Living Entity, SPAWNER for spawners,
|
||||||
or DEFAULT since data was not stored.
|
or DEFAULT since data was not stored.
|
||||||
|
|
||||||
|
Additionally, add missing spawn reasons.
|
||||||
|
|
||||||
Co-authored-by: Aurora <aurora@relanet.eu>
|
Co-authored-by: Aurora <aurora@relanet.eu>
|
||||||
|
Co-authored-by: Jakub Zacek <dawon@dawon.eu>
|
||||||
|
|
||||||
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
|
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
@@ -27,3 +29,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason getEntitySpawnReason();
|
+ org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason getEntitySpawnReason();
|
||||||
// Paper end
|
// Paper end
|
||||||
}
|
}
|
||||||
|
diff --git a/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java b/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java
|
||||||
|
+++ b/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java
|
||||||
|
@@ -0,0 +0,0 @@ public class CreatureSpawnEvent extends EntitySpawnEvent {
|
||||||
|
* When a creature is spawned by an enchantment
|
||||||
|
*/
|
||||||
|
ENCHANTMENT,
|
||||||
|
+ // Paper start - Fixes and additions to the SpawnReason API
|
||||||
|
+ /**
|
||||||
|
+ * When an entity spawns from an ominous item spawner
|
||||||
|
+ */
|
||||||
|
+ OMINOUS_ITEM_SPAWNER,
|
||||||
|
+ // Paper end - Fixes and additions to the SpawnReason API
|
||||||
|
/**
|
||||||
|
* When a creature is spawned by plugins
|
||||||
|
*/
|
@@ -1,61 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
||||||
Date: Sun, 25 Sep 2022 11:21:01 -0700
|
|
||||||
Subject: [PATCH] Fixes and additions to the SpawnReason API
|
|
||||||
|
|
||||||
Fixes some wrong reasons, and adds missing spawn reasons for entities.
|
|
||||||
|
|
||||||
Co-authored-by: Doc <nachito94@msn.com>
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
|
|
||||||
@@ -0,0 +0,0 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
|
|
||||||
@Nullable
|
|
||||||
public T spawn(ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType spawnReason, boolean alignPosition, boolean invertY) {
|
|
||||||
// CraftBukkit start
|
|
||||||
- return this.spawn(world, stack, player, pos, spawnReason, alignPosition, invertY, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG);
|
|
||||||
+ return this.spawn(world, stack, player, pos, spawnReason, alignPosition, invertY, spawnReason == MobSpawnType.DISPENSER ? org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DISPENSE_EGG : org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); // Paper - use correct spawn reason for dispenser spawn eggs
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java b/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
|
||||||
@@ -0,0 +0,0 @@ public class DragonFireball extends AbstractHurtingProjectile {
|
|
||||||
|
|
||||||
if (new com.destroystokyo.paper.event.entity.EnderDragonFireballHitEvent((org.bukkit.entity.DragonFireball) this.getBukkitEntity(), list.stream().map(LivingEntity::getBukkitLivingEntity).collect(java.util.stream.Collectors.toList()), (org.bukkit.entity.AreaEffectCloud) entityareaeffectcloud.getBukkitEntity()).callEvent()) { // Paper - EnderDragon Events
|
|
||||||
this.level().levelEvent(2006, this.blockPosition(), this.isSilent() ? -1 : 1);
|
|
||||||
- this.level().addFreshEntity(entityareaeffectcloud);
|
|
||||||
+ this.level().addFreshEntity(entityareaeffectcloud, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.EXPLOSION); // Paper - use correct spawn reason
|
|
||||||
} else entityareaeffectcloud.discard(null); // Paper - EnderDragon Events
|
|
||||||
this.discard(EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java b/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java
|
|
||||||
@@ -0,0 +0,0 @@ public class FrogspawnBlock extends Block {
|
|
||||||
int k = random.nextInt(1, 361);
|
|
||||||
tadpole.moveTo(d, (double)pos.getY() - 0.5, e, (float)k, 0.0F);
|
|
||||||
tadpole.setPersistenceRequired();
|
|
||||||
- world.addFreshEntity(tadpole);
|
|
||||||
+ world.addFreshEntity(tadpole, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.EGG); // Paper - use correct spawn reason
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java b/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java
|
|
||||||
@@ -0,0 +0,0 @@ public class SnifferEggBlock extends Block {
|
|
||||||
Vec3 vec3 = pos.getCenter();
|
|
||||||
sniffer.setBaby(true);
|
|
||||||
sniffer.moveTo(vec3.x(), vec3.y(), vec3.z(), Mth.wrapDegrees(world.random.nextFloat() * 360.0F), 0.0F);
|
|
||||||
- world.addFreshEntity(sniffer);
|
|
||||||
+ world.addFreshEntity(sniffer, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.EGG); // Paper - use correct spawn reason
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,14 +1,18 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Aikar <aikar@aikar.co>
|
From: Aikar <aikar@aikar.co>
|
||||||
Date: Sun, 24 Mar 2019 00:24:52 -0400
|
Date: Sun, 24 Mar 2019 00:24:52 -0400
|
||||||
Subject: [PATCH] Entity#getEntitySpawnReason
|
Subject: [PATCH] Fixes and additions to the spawn reason API
|
||||||
|
|
||||||
Allows you to return the SpawnReason for why an Entity Spawned
|
|
||||||
|
|
||||||
|
Expose an entities spawn reason on the entity.
|
||||||
Pre existing entities will return NATURAL if it was a non
|
Pre existing entities will return NATURAL if it was a non
|
||||||
persistenting Living Entity, SPAWNER for spawners,
|
persistenting Living Entity, SPAWNER for spawners,
|
||||||
or DEFAULT since data was not stored.
|
or DEFAULT since data was not stored.
|
||||||
|
|
||||||
|
Additionally, add missing spawn reasons.
|
||||||
|
|
||||||
|
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||||
|
Co-authored-by: Doc <nachito94@msn.com>
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/commands/SummonCommand.java b/src/main/java/net/minecraft/server/commands/SummonCommand.java
|
diff --git a/src/main/java/net/minecraft/server/commands/SummonCommand.java b/src/main/java/net/minecraft/server/commands/SummonCommand.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/commands/SummonCommand.java
|
--- a/src/main/java/net/minecraft/server/commands/SummonCommand.java
|
||||||
@@ -107,6 +111,45 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
// Paper end
|
// Paper end
|
||||||
|
|
||||||
} catch (Throwable throwable) {
|
} catch (Throwable throwable) {
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
|
||||||
|
@@ -0,0 +0,0 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
|
||||||
|
@Nullable
|
||||||
|
public T spawn(ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType spawnReason, boolean alignPosition, boolean invertY) {
|
||||||
|
// CraftBukkit start
|
||||||
|
- return this.spawn(world, stack, player, pos, spawnReason, alignPosition, invertY, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG);
|
||||||
|
+ return this.spawn(world, stack, player, pos, spawnReason, alignPosition, invertY, spawnReason == MobSpawnType.DISPENSER ? org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DISPENSE_EGG : org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); // Paper - use correct spawn reason for dispenser spawn eggs
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/OminousItemSpawner.java b/src/main/java/net/minecraft/world/entity/OminousItemSpawner.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/OminousItemSpawner.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/OminousItemSpawner.java
|
||||||
|
@@ -0,0 +0,0 @@ public class OminousItemSpawner extends Entity {
|
||||||
|
entity = new ItemEntity(level, this.getX(), this.getY(), this.getZ(), itemStack);
|
||||||
|
}
|
||||||
|
|
||||||
|
- level.addFreshEntity(entity);
|
||||||
|
+ level.addFreshEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.OMINOUS_ITEM_SPAWNER); // Paper - Fixes and additions to the SpawnReason API
|
||||||
|
level.levelEvent(3021, this.blockPosition(), 1);
|
||||||
|
level.gameEvent(entity, GameEvent.ENTITY_PLACE, this.position());
|
||||||
|
this.setItem(ItemStack.EMPTY);
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java b/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
||||||
|
@@ -0,0 +0,0 @@ public class DragonFireball extends AbstractHurtingProjectile {
|
||||||
|
|
||||||
|
if (new com.destroystokyo.paper.event.entity.EnderDragonFireballHitEvent((org.bukkit.entity.DragonFireball) this.getBukkitEntity(), list.stream().map(LivingEntity::getBukkitLivingEntity).collect(java.util.stream.Collectors.toList()), (org.bukkit.entity.AreaEffectCloud) entityareaeffectcloud.getBukkitEntity()).callEvent()) { // Paper - EnderDragon Events
|
||||||
|
this.level().levelEvent(2006, this.blockPosition(), this.isSilent() ? -1 : 1);
|
||||||
|
- this.level().addFreshEntity(entityareaeffectcloud);
|
||||||
|
+ this.level().addFreshEntity(entityareaeffectcloud, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.EXPLOSION); // Paper - use correct spawn reason
|
||||||
|
} else entityareaeffectcloud.discard(null); // Paper - EnderDragon Events
|
||||||
|
this.discard(EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
||||||
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java
|
diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
|
--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
|
||||||
@@ -119,6 +162,32 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
flag = true; // Paper
|
flag = true; // Paper
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
if (org.bukkit.craftbukkit.event.CraftEventFactory.callSpawnerSpawnEvent(entity, pos).isCancelled()) {
|
if (org.bukkit.craftbukkit.event.CraftEventFactory.callSpawnerSpawnEvent(entity, pos).isCancelled()) {
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java b/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java
|
||||||
|
@@ -0,0 +0,0 @@ public class FrogspawnBlock extends Block {
|
||||||
|
int k = random.nextInt(1, 361);
|
||||||
|
tadpole.moveTo(d, (double)pos.getY() - 0.5, e, (float)k, 0.0F);
|
||||||
|
tadpole.setPersistenceRequired();
|
||||||
|
- world.addFreshEntity(tadpole);
|
||||||
|
+ world.addFreshEntity(tadpole, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.EGG); // Paper - use correct spawn reason
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java b/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/level/block/SnifferEggBlock.java
|
||||||
|
@@ -0,0 +0,0 @@ public class SnifferEggBlock extends Block {
|
||||||
|
Vec3 vec3 = pos.getCenter();
|
||||||
|
sniffer.setBaby(true);
|
||||||
|
sniffer.moveTo(vec3.x(), vec3.y(), vec3.z(), Mth.wrapDegrees(world.random.nextFloat() * 360.0F), 0.0F);
|
||||||
|
- world.addFreshEntity(sniffer);
|
||||||
|
+ world.addFreshEntity(sniffer, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.EGG); // Paper - use correct spawn reason
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
|
--- a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
|
Reference in New Issue
Block a user