mirror of
https://github.com/PaperMC/Paper.git
synced 2025-02-04 22:51:29 +01:00
net/minecraft/world/level/block/entity/trialspawner
This commit is contained in:
parent
bfcb0e71c9
commit
216f3118ae
@ -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;
|
@ -1,63 +0,0 @@
|
|||||||
--- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawner.java
|
|
||||||
+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawner.java
|
|
||||||
@@ -46,6 +46,11 @@
|
|
||||||
import net.minecraft.world.phys.HitResult;
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
|
||||||
+// CraftBukkit start
|
|
||||||
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
|
||||||
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
||||||
+import org.bukkit.event.block.BlockDispenseLootEvent;
|
|
||||||
+// CraftBukkit end
|
|
||||||
|
|
||||||
public final class TrialSpawner {
|
|
||||||
|
|
||||||
@@ -219,14 +224,21 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
entityinsentient.setPersistenceRequired();
|
|
||||||
- Optional optional1 = mobspawnerdata.getEquipment();
|
|
||||||
+ Optional<net.minecraft.world.entity.EquipmentTable> optional1 = mobspawnerdata.getEquipment(); // CraftBukkit - decompile error
|
|
||||||
|
|
||||||
Objects.requireNonNull(entityinsentient);
|
|
||||||
optional1.ifPresent(entityinsentient::equip);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!world.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 (!world.tryAddFreshEntityWithPassengers(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.TRIAL_SPAWNER)) {
|
|
||||||
+ // CraftBukkit end
|
|
||||||
+ return Optional.empty();
|
|
||||||
} else {
|
|
||||||
TrialSpawner.FlameParticle trialspawner_a = this.isOminous ? TrialSpawner.FlameParticle.OMINOUS : TrialSpawner.FlameParticle.NORMAL;
|
|
||||||
|
|
||||||
@@ -248,6 +260,15 @@
|
|
||||||
ObjectArrayList<ItemStack> objectarraylist = loottable.getRandomItems(lootparams);
|
|
||||||
|
|
||||||
if (!objectarraylist.isEmpty()) {
|
|
||||||
+ // CraftBukkit start
|
|
||||||
+ BlockDispenseLootEvent spawnerDispenseLootEvent = CraftEventFactory.callBlockDispenseLootEvent(world, pos, null, objectarraylist);
|
|
||||||
+ if (spawnerDispenseLootEvent.isCancelled()) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ objectarraylist = new ObjectArrayList<>(spawnerDispenseLootEvent.getDispensedLoot().stream().map(CraftItemStack::asNMSCopy).toList());
|
|
||||||
+ // CraftBukkit end
|
|
||||||
+
|
|
||||||
ObjectListIterator objectlistiterator = objectarraylist.iterator();
|
|
||||||
|
|
||||||
while (objectlistiterator.hasNext()) {
|
|
||||||
@@ -370,7 +391,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
public void overrideEntityToSpawn(EntityType<?> entityType, Level world) {
|
|
||||||
- this.data.reset();
|
|
||||||
+ this.data.reset(this); // Paper
|
|
||||||
this.normalConfig = Holder.direct(((TrialSpawnerConfig) this.normalConfig.value()).withSpawning(entityType));
|
|
||||||
this.ominousConfig = Holder.direct(((TrialSpawnerConfig) this.ominousConfig.value()).withSpawning(entityType));
|
|
||||||
this.setState(world, TrialSpawnerState.INACTIVE);
|
|
@ -1,32 +0,0 @@
|
|||||||
--- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
|
|
||||||
+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
|
|
||||||
@@ -100,9 +100,9 @@
|
|
||||||
this.ejectingLootTable = rewardLootTable;
|
|
||||||
}
|
|
||||||
|
|
||||||
- public void reset() {
|
|
||||||
+ public void reset(TrialSpawner logic) { // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
||||||
this.currentMobs.clear();
|
|
||||||
- this.nextSpawnData = Optional.empty();
|
|
||||||
+ if (!logic.getConfig().spawnPotentialsDefinition().isEmpty()) this.nextSpawnData = Optional.empty(); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
||||||
this.resetStatistics();
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -210,7 +210,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
public void resetAfterBecomingOminous(TrialSpawner logic, ServerLevel world) {
|
|
||||||
- Stream stream = this.currentMobs.stream();
|
|
||||||
+ Stream<UUID> stream = this.currentMobs.stream(); // CraftBukkit - decompile error
|
|
||||||
|
|
||||||
Objects.requireNonNull(world);
|
|
||||||
stream.map(world::getEntity).forEach((entity) -> {
|
|
||||||
@@ -222,7 +222,7 @@
|
|
||||||
entityinsentient.dropPreservedEquipment(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
- entity.remove(Entity.RemovalReason.DISCARDED);
|
|
||||||
+ entity.remove(Entity.RemovalReason.DISCARDED, org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - Add bukkit remove cause;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!logic.getOminousConfig().spawnPotentialsDefinition().isEmpty()) {
|
|
@ -1,11 +0,0 @@
|
|||||||
--- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java
|
|
||||||
+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java
|
|
||||||
@@ -145,7 +145,7 @@
|
|
||||||
yield ACTIVE;
|
|
||||||
} else if (trialSpawnerData.isCooldownFinished(world)) {
|
|
||||||
logic.removeOminous(world, pos);
|
|
||||||
- trialSpawnerData.reset();
|
|
||||||
+ trialSpawnerData.reset(logic); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
||||||
yield WAITING_FOR_PLAYERS;
|
|
||||||
} else {
|
|
||||||
yield this;
|
|
Loading…
Reference in New Issue
Block a user