net/minecraft/world/level/block/entity/trialspawner
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
--- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawner.java
|
||||
+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawner.java
|
||||
@@ -237,7 +_,14 @@
|
||||
nextSpawnData.getEquipment().ifPresent(mob::equip);
|
||||
}
|
||||
|
||||
- if (!level.tryAddFreshEntityWithPassengers(entity)) {
|
||||
+ entity.spawnedViaMobSpawner = true; // Paper
|
||||
+ entity.spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.TRIAL_SPAWNER; // Paper - Entity#getEntitySpawnReason
|
||||
+ // CraftBukkit start
|
||||
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callTrialSpawnerSpawnEvent(entity, pos).isCancelled()) {
|
||||
+ return Optional.empty();
|
||||
+ }
|
||||
+ if (!level.tryAddFreshEntityWithPassengers(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.TRIAL_SPAWNER)) {
|
||||
+ // CraftBukkit end
|
||||
return Optional.empty();
|
||||
} else {
|
||||
TrialSpawner.FlameParticle flameParticle = this.isOminous
|
||||
@@ -260,6 +_,19 @@
|
||||
LootParams lootParams = new LootParams.Builder(level).create(LootContextParamSets.EMPTY);
|
||||
ObjectArrayList<ItemStack> randomItems = lootTable1.getRandomItems(lootParams);
|
||||
if (!randomItems.isEmpty()) {
|
||||
+ // CraftBukkit start
|
||||
+ org.bukkit.event.block.BlockDispenseLootEvent spawnerDispenseLootEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDispenseLootEvent(
|
||||
+ level,
|
||||
+ pos,
|
||||
+ null,
|
||||
+ randomItems
|
||||
+ );
|
||||
+ if (spawnerDispenseLootEvent.isCancelled()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ randomItems = new ObjectArrayList<>(spawnerDispenseLootEvent.getDispensedLoot().stream().map(org.bukkit.craftbukkit.inventory.CraftItemStack::asNMSCopy).toList());
|
||||
+ // CraftBukkit end
|
||||
for (ItemStack itemStack : randomItems) {
|
||||
DefaultDispenseItemBehavior.spawnItem(level, itemStack, 2, Direction.UP, Vec3.atBottomCenterOf(pos).relative(Direction.UP, 1.2));
|
||||
}
|
||||
@@ -362,7 +_,7 @@
|
||||
}
|
||||
|
||||
public void overrideEntityToSpawn(EntityType<?> entityType, Level level) {
|
||||
- this.data.reset();
|
||||
+ this.data.reset(this); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
||||
this.normalConfig = Holder.direct(this.normalConfig.value().withSpawning(entityType));
|
||||
this.ominousConfig = Holder.direct(this.ominousConfig.value().withSpawning(entityType));
|
||||
this.setState(level, TrialSpawnerState.INACTIVE);
|
||||
@@ -0,0 +1,23 @@
|
||||
--- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
|
||||
+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
|
||||
@@ -101,9 +_,9 @@
|
||||
this.ejectingLootTable = ejectingLootTable;
|
||||
}
|
||||
|
||||
- public void reset() {
|
||||
+ public void reset(TrialSpawner spawner) { // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
||||
this.currentMobs.clear();
|
||||
- this.nextSpawnData = Optional.empty();
|
||||
+ if (!spawner.getConfig().spawnPotentialsDefinition().isEmpty()) this.nextSpawnData = Optional.empty(); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
||||
this.resetStatistics();
|
||||
}
|
||||
|
||||
@@ -206,7 +_,7 @@
|
||||
mob.dropPreservedEquipment(level);
|
||||
}
|
||||
|
||||
- entity.remove(Entity.RemovalReason.DISCARDED);
|
||||
+ entity.remove(Entity.RemovalReason.DISCARDED, org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - Add bukkit remove cause;
|
||||
}
|
||||
});
|
||||
if (!spawner.getOminousConfig().spawnPotentialsDefinition().isEmpty()) {
|
||||
@@ -0,0 +1,11 @@
|
||||
--- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java
|
||||
+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java
|
||||
@@ -145,7 +_,7 @@
|
||||
yield ACTIVE;
|
||||
} else if (data.isCooldownFinished(level)) {
|
||||
spawner.removeOminous(level, pos);
|
||||
- data.reset();
|
||||
+ data.reset(spawner); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
||||
yield WAITING_FOR_PLAYERS;
|
||||
} else {
|
||||
yield this;
|
||||
Reference in New Issue
Block a user