mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
298
This commit is contained in:
parent
c2e37b8c98
commit
078eb7f455
25 changed files with 102 additions and 94 deletions
|
@ -18,22 +18,22 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ // Paper end - Add PlayerPostRespawnEvent
|
+ // Paper end - Add PlayerPostRespawnEvent
|
||||||
|
|
||||||
// CraftBukkit start - fire PlayerRespawnEvent
|
// CraftBukkit start - fire PlayerRespawnEvent
|
||||||
DimensionTransition dimensiontransition;
|
TeleportTransition teleporttransition;
|
||||||
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
||||||
dimensiontransition = entityplayer.findRespawnPositionAndUseSpawnBlock(flag, DimensionTransition.DO_NOTHING, reason);
|
teleporttransition = entityplayer.findRespawnPositionAndUseSpawnBlock(!flag, TeleportTransition.DO_NOTHING, reason);
|
||||||
|
|
||||||
if (!flag) entityplayer.reset(); // SPIGOT-4785
|
if (!flag) entityplayer.reset(); // SPIGOT-4785
|
||||||
+ // Paper start - Add PlayerPostRespawnEvent
|
+ // Paper start - Add PlayerPostRespawnEvent
|
||||||
+ if (dimensiontransition == null) return entityplayer; // Early exit, mirrors belows early return for disconnected players in respawn event
|
+ if (teleporttransition == null) return entityplayer; // Early exit, mirrors belows early return for disconnected players in respawn event
|
||||||
+ isRespawn = true;
|
+ isRespawn = true;
|
||||||
+ location = CraftLocation.toBukkit(dimensiontransition.pos(), dimensiontransition.newLevel().getWorld(), dimensiontransition.yRot(), dimensiontransition.xRot());
|
+ location = CraftLocation.toBukkit(teleporttransition.position(), teleporttransition.newLevel().getWorld(), teleporttransition.yRot(), teleporttransition.xRot());
|
||||||
+ // Paper end - Add PlayerPostRespawnEvent
|
+ // Paper end - Add PlayerPostRespawnEvent
|
||||||
} else {
|
} else {
|
||||||
dimensiontransition = new DimensionTransition(((CraftWorld) location.getWorld()).getHandle(), CraftLocation.toVec3D(location), Vec3.ZERO, location.getYaw(), location.getPitch(), DimensionTransition.DO_NOTHING);
|
teleporttransition = new TeleportTransition(((CraftWorld) location.getWorld()).getHandle(), CraftLocation.toVec3D(location), Vec3.ZERO, location.getYaw(), location.getPitch(), TeleportTransition.DO_NOTHING);
|
||||||
}
|
}
|
||||||
// Spigot Start
|
// Spigot Start
|
||||||
- if (dimensiontransition == null) {
|
- if (teleporttransition == null) {
|
||||||
+ if (dimensiontransition == null) { // Paper - Add PlayerPostRespawnEvent - diff on change - spigot early returns if respawn pos is null, that is how they handle disconnected player in respawn event
|
+ if (teleporttransition == null) { // Paper - Add PlayerPostRespawnEvent - diff on change - spigot early returns if respawn pos is null, that is how they handle disconnected player in respawn event
|
||||||
return entityplayer;
|
return entityplayer;
|
||||||
}
|
}
|
||||||
// Spigot End
|
// Spigot End
|
||||||
|
@ -42,7 +42,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 1.0F, 1.0F, worldserver.getRandom().nextLong()));
|
entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 1.0F, 1.0F, worldserver.getRandom().nextLong()));
|
||||||
}
|
}
|
||||||
+ // Paper start - Add PlayerPostRespawnEvent
|
+ // Paper start - Add PlayerPostRespawnEvent
|
||||||
+ if (iblockdata.is(net.minecraft.tags.BlockTags.BEDS) && !dimensiontransition.missingRespawnBlock()) {
|
+ if (iblockdata.is(net.minecraft.tags.BlockTags.BEDS) && !teleporttransition.missingRespawnBlock()) {
|
||||||
+ isBedSpawn = true;
|
+ isBedSpawn = true;
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end - Add PlayerPostRespawnEvent
|
+ // Paper end - Add PlayerPostRespawnEvent
|
|
@ -40,4 +40,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ // Paper end - allow disabling relative velocity
|
+ // Paper end - allow disabling relative velocity
|
||||||
}
|
}
|
||||||
|
|
||||||
// CraftBukkit start - call projectile hit event
|
public static <T extends Projectile> T spawnProjectileFromRotation(Projectile.ProjectileFactory<T> creator, ServerLevel world, ItemStack projectileStack, LivingEntity shooter, float roll, float power, float divergence) {
|
|
@ -8,7 +8,7 @@ diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntit
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
|
--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
|
||||||
@@ -0,0 +0,0 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
|
@@ -0,0 +0,0 @@ public class SignBlockEntity extends BlockEntity {
|
||||||
this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3);
|
this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3);
|
||||||
} else {
|
} else {
|
||||||
SignBlockEntity.LOGGER.warn("Player {} just tried to change non-editable sign", player.getName().getString());
|
SignBlockEntity.LOGGER.warn("Player {} just tried to change non-editable sign", player.getName().getString());
|
|
@ -19,7 +19,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+++ b/src/main/java/net/minecraft/server/commands/SummonCommand.java
|
+++ b/src/main/java/net/minecraft/server/commands/SummonCommand.java
|
||||||
@@ -0,0 +0,0 @@ public class SummonCommand {
|
@@ -0,0 +0,0 @@ public class SummonCommand {
|
||||||
ServerLevel worldserver = source.getLevel();
|
ServerLevel worldserver = source.getLevel();
|
||||||
Entity entity = EntityType.loadEntityRecursive(nbttagcompound1, worldserver, (entity1) -> {
|
Entity entity = EntityType.loadEntityRecursive(nbttagcompound1, worldserver, EntitySpawnReason.COMMAND, (entity1) -> {
|
||||||
entity1.moveTo(pos.x, pos.y, pos.z, entity1.getYRot(), entity1.getXRot());
|
entity1.moveTo(pos.x, pos.y, pos.z, entity1.getYRot(), entity1.getXRot());
|
||||||
+ entity1.spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.COMMAND; // Paper - Entity#getEntitySpawnReason
|
+ entity1.spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.COMMAND; // Paper - Entity#getEntitySpawnReason
|
||||||
return entity1;
|
return entity1;
|
||||||
|
@ -29,7 +29,7 @@ diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/mai
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Paper end - extra debug info
|
// Paper end - extra debug info
|
||||||
|
@ -37,6 +37,19 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
if (entity.isRemoved()) {
|
if (entity.isRemoved()) {
|
||||||
// WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getKey(entity.getType())); // CraftBukkit
|
// WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getKey(entity.getType())); // CraftBukkit
|
||||||
return false;
|
return false;
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
@@ -0,0 +0,0 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {
|
||||||
|
ServerLevel worldserver = (ServerLevel) world;
|
||||||
|
CompoundTag nbttagcompound = ((CompoundTag) nbt.get()).getCompound("RootVehicle");
|
||||||
|
Entity entity = EntityType.loadEntityRecursive(nbttagcompound.getCompound("Entity"), worldserver, EntitySpawnReason.LOAD, (entity1) -> {
|
||||||
|
- return !worldserver.addWithUUID(entity1) ? null : entity1;
|
||||||
|
+ return !worldserver.addWithUUID(entity1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.MOUNT) ? null : entity1; // CraftBukkit - decompile error // Paper - Entity#getEntitySpawnReason
|
||||||
|
});
|
||||||
|
|
||||||
|
if (entity == null) {
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
|
@ -53,15 +66,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
player.setServerLevel(worldserver1);
|
player.setServerLevel(worldserver1);
|
||||||
String s1 = connection.getLoggableAddress(this.server.logIPs());
|
String s1 = connection.getLoggableAddress(this.server.logIPs());
|
||||||
|
|
||||||
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
|
||||||
CompoundTag nbttagcompound = ((CompoundTag) optional.get()).getCompound("RootVehicle");
|
|
||||||
ServerLevel finalWorldServer = worldserver1; // CraftBukkit - decompile error
|
|
||||||
Entity entity = EntityType.loadEntityRecursive(nbttagcompound.getCompound("Entity"), worldserver1, (entity1) -> {
|
|
||||||
- return !finalWorldServer.addWithUUID(entity1) ? null : entity1; // CraftBukkit - decompile error
|
|
||||||
+ return !finalWorldServer.addWithUUID(entity1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.MOUNT) ? null : entity1; // CraftBukkit - decompile error // Paper - Entity#getEntitySpawnReason
|
|
||||||
});
|
|
||||||
|
|
||||||
if (entity != null) {
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||||
|
@ -117,10 +121,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+++ b/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
|
@@ -0,0 +0,0 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
|
||||||
@Nullable
|
@Nullable
|
||||||
public T spawn(ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType spawnReason, boolean alignPosition, boolean invertY) {
|
public T spawn(ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, EntitySpawnReason spawnReason, boolean alignPosition, boolean invertY) {
|
||||||
// CraftBukkit start
|
// 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, 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
|
+ return this.spawn(world, stack, player, pos, spawnReason, alignPosition, invertY, spawnReason == EntitySpawnReason.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
|
@Nullable
|
||||||
|
@ -129,14 +133,32 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
--- a/src/main/java/net/minecraft/world/entity/OminousItemSpawner.java
|
--- a/src/main/java/net/minecraft/world/entity/OminousItemSpawner.java
|
||||||
+++ b/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 {
|
@@ -0,0 +0,0 @@ public class OminousItemSpawner extends Entity {
|
||||||
entity = new ItemEntity(level, this.getX(), this.getY(), this.getZ(), itemStack);
|
entity = this.spawnProjectile(serverLevel, projectileItem, itemStack);
|
||||||
}
|
} else {
|
||||||
|
entity = new ItemEntity(serverLevel, this.getX(), this.getY(), this.getZ(), itemStack);
|
||||||
|
- serverLevel.addFreshEntity(entity);
|
||||||
|
+ serverLevel.addFreshEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.OMINOUS_ITEM_SPAWNER); // Paper - fixes and addition to spawn reason API
|
||||||
|
}
|
||||||
|
|
||||||
- level.addFreshEntity(entity);
|
serverLevel.levelEvent(3021, this.blockPosition(), 1);
|
||||||
+ level.addFreshEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.OMINOUS_ITEM_SPAWNER); // Paper - Fixes and additions to the SpawnReason API
|
@@ -0,0 +0,0 @@ public class OminousItemSpawner extends Entity {
|
||||||
level.levelEvent(3021, this.blockPosition(), 1);
|
ProjectileItem.DispenseConfig dispenseConfig = item.createDispenseConfig();
|
||||||
level.gameEvent(entity, GameEvent.ENTITY_PLACE, this.position());
|
dispenseConfig.overrideDispenseEvent().ifPresent(dispenseEvent -> world.levelEvent(dispenseEvent, this.blockPosition(), 0));
|
||||||
this.setItem(ItemStack.EMPTY);
|
Direction direction = Direction.DOWN;
|
||||||
|
- Projectile projectile = Projectile.spawnProjectileUsingShoot(
|
||||||
|
+ Projectile projectile = Projectile.spawnProjectileUsingShootDelayed( // Paper - fixes and addition to spawn reason API
|
||||||
|
item.asProjectile(world, this.position(), stack, direction),
|
||||||
|
world,
|
||||||
|
stack,
|
||||||
|
@@ -0,0 +0,0 @@ public class OminousItemSpawner extends Entity {
|
||||||
|
(double)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;
|
||||||
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java b/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
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
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
--- a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
||||||
|
@ -150,6 +172,42 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
} else entityareaeffectcloud.discard(null); // Paper - EnderDragon Events
|
} else entityareaeffectcloud.discard(null); // Paper - EnderDragon Events
|
||||||
this.discard(EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
this.discard(EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
||||||
}
|
}
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
|
@@ -0,0 +0,0 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Projectile> T spawnProjectileUsingShoot(T projectile, ServerLevel world, ItemStack projectileStack, double velocityX, double velocityY, double velocityZ, float power, float divergence) {
|
||||||
|
- return Projectile.spawnProjectile(projectile, world, projectileStack, (iprojectile) -> {
|
||||||
|
+ // Paper start - fixes and addition to spawn reason API
|
||||||
|
+ return spawnProjectileUsingShootDelayed(projectile, world, projectileStack, velocityX, velocityY, velocityZ, power, divergence).spawn();
|
||||||
|
+ }
|
||||||
|
+ public static <T extends Projectile> Delayed<T> spawnProjectileUsingShootDelayed(T projectile, ServerLevel world, ItemStack projectileStack, double velocityX, double velocityY, double velocityZ, float power, float divergence) {
|
||||||
|
+ return Projectile.spawnProjectileDelayed(projectile, world, projectileStack, (iprojectile) -> {
|
||||||
|
+ // Paper end - fixes and addition to spawn reason API
|
||||||
|
projectile.shoot(velocityX, velocityY, velocityZ, power, divergence);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@@ -0,0 +0,0 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
||||||
|
this.attemptSpawn();
|
||||||
|
return projectile();
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ public boolean attemptSpawn(final org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason reason) {
|
||||||
|
+ if (!world.addFreshEntity(projectile, reason)) return false;
|
||||||
|
+ projectile.applyOnProjectileSpawned(this.world, this.projectileStack);
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public T spawn(final org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason reason) {
|
||||||
|
+ this.attemptSpawn(reason);
|
||||||
|
+ return projectile();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
// Paper end - delayed projectile spawning
|
||||||
|
|
||||||
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
|
||||||
|
@ -196,8 +254,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
|
|
||||||
private boolean trySummonWarden(ServerLevel world) {
|
private boolean trySummonWarden(ServerLevel world) {
|
||||||
return this.warningLevel >= 4
|
return this.warningLevel >= 4
|
||||||
- && SpawnUtil.trySpawnMob(EntityType.WARDEN, MobSpawnType.TRIGGERED, world, this.getBlockPos(), 20, 5, 6, SpawnUtil.Strategy.ON_TOP_OF_COLLIDER)
|
- && SpawnUtil.trySpawnMob(EntityType.WARDEN, EntitySpawnReason.TRIGGERED, world, this.getBlockPos(), 20, 5, 6, SpawnUtil.Strategy.ON_TOP_OF_COLLIDER)
|
||||||
+ && SpawnUtil.trySpawnMob(EntityType.WARDEN, MobSpawnType.TRIGGERED, world, this.getBlockPos(), 20, 5, 6, SpawnUtil.Strategy.ON_TOP_OF_COLLIDER, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL, null) // Paper - Entity#getEntitySpawnReason
|
+ && SpawnUtil.trySpawnMob(EntityType.WARDEN, EntitySpawnReason.TRIGGERED, world, this.getBlockPos(), 20, 5, 6, SpawnUtil.Strategy.ON_TOP_OF_COLLIDER, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL, null) // Paper - Entity#getEntitySpawnReason
|
||||||
.isPresent();
|
.isPresent();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1393,7 +1393,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ path("entities", "spawning", "despawn-ranges", "soft"),
|
+ path("entities", "spawning", "despawn-ranges", "soft"),
|
||||||
+ path("entities", "spawning", "despawn-ranges", "hard"),
|
+ path("entities", "spawning", "despawn-ranges", "hard"),
|
||||||
+ path("fixes", "fix-curing-zombie-villager-discount-exploit"),
|
+ path("fixes", "fix-curing-zombie-villager-discount-exploit"),
|
||||||
+ path("entities", "mob-effects", "undead-immune-to-certain-effects")
|
+ path("entities", "mob-effects", "undead-immune-to-certain-effects"),
|
||||||
|
+ path("entities", "entities-target-with-follow-range")
|
||||||
+ };
|
+ };
|
||||||
+ // spawn.keep-spawn-loaded and spawn.keep-spawn-loaded-range are no longer used, but kept
|
+ // spawn.keep-spawn-loaded and spawn.keep-spawn-loaded-range are no longer used, but kept
|
||||||
+ // in the world default config for compatibility with old worlds being migrated to use the gamerule
|
+ // in the world default config for compatibility with old worlds being migrated to use the gamerule
|
||||||
|
@ -1568,7 +1569,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ public Entities entities;
|
+ public Entities entities;
|
||||||
+
|
+
|
||||||
+ public class Entities extends ConfigurationPart {
|
+ public class Entities extends ConfigurationPart {
|
||||||
+ public boolean entitiesTargetWithFollowRange = false;
|
|
||||||
+ public MobEffects mobEffects;
|
+ public MobEffects mobEffects;
|
||||||
+
|
+
|
||||||
+ public class MobEffects extends ConfigurationPart {
|
+ public class MobEffects extends ConfigurationPart {
|
||||||
|
|
|
@ -62,7 +62,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
public void die(DamageSource damageSource) {
|
public void die(DamageSource damageSource) {
|
||||||
// this.gameEvent(GameEvent.ENTITY_DIE); // Paper - move below event cancellation check
|
// this.gameEvent(GameEvent.ENTITY_DIE); // Paper - move below event cancellation check
|
||||||
@@ -0,0 +0,0 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {
|
@@ -0,0 +0,0 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {
|
||||||
this.dropExperience(damageSource.getEntity());
|
this.dropExperience(this.serverLevel(), damageSource.getEntity());
|
||||||
// we clean the player's inventory after the EntityDeathEvent is called so plugins can get the exact state of the inventory.
|
// we clean the player's inventory after the EntityDeathEvent is called so plugins can get the exact state of the inventory.
|
||||||
if (!event.getKeepInventory()) {
|
if (!event.getKeepInventory()) {
|
||||||
- this.getInventory().clearContent();
|
- this.getInventory().clearContent();
|
|
@ -12,8 +12,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
this.tellNeutralMobsThatIDied();
|
this.tellNeutralMobsThatIDied();
|
||||||
}
|
}
|
||||||
// SPIGOT-5478 must be called manually now
|
// SPIGOT-5478 must be called manually now
|
||||||
- this.dropExperience(damageSource.getEntity());
|
- this.dropExperience(this.serverLevel(), damageSource.getEntity());
|
||||||
+ if (event.shouldDropExperience()) this.dropExperience(damageSource.getEntity()); // Paper - tie to event
|
+ if (event.shouldDropExperience()) this.dropExperience(this.serverLevel(), damageSource.getEntity()); // Paper - tie to event
|
||||||
// we clean the player's inventory after the EntityDeathEvent is called so plugins can get the exact state of the inventory.
|
// we clean the player's inventory after the EntityDeathEvent is called so plugins can get the exact state of the inventory.
|
||||||
if (!event.getKeepInventory()) {
|
if (!event.getKeepInventory()) {
|
||||||
// Paper start - PlayerDeathEvent#getItemsToKeep
|
// Paper start - PlayerDeathEvent#getItemsToKeep
|
|
@ -29,9 +29,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
} else {
|
} else {
|
||||||
if (!this.useItem.isEmpty() && this.isUsingItem()) {
|
if (!this.useItem.isEmpty() && this.isUsingItem()) {
|
||||||
+ this.startUsingItem(this.getUsedItemHand(), true); // Paper - Prevent consuming the wrong itemstack
|
+ this.startUsingItem(this.getUsedItemHand(), true); // Paper - Prevent consuming the wrong itemstack
|
||||||
this.triggerItemUseEffects(this.useItem, 16);
|
|
||||||
// CraftBukkit start - fire PlayerItemConsumeEvent
|
// CraftBukkit start - fire PlayerItemConsumeEvent
|
||||||
ItemStack itemstack;
|
ItemStack itemstack;
|
||||||
|
PlayerItemConsumeEvent event = null; // Paper
|
||||||
@@ -0,0 +0,0 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
@@ -0,0 +0,0 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ long remaining = (TICK_TIME - (endTime - lastTick)) - catchupTime;
|
+ long remaining = (TICK_TIME - (endTime - lastTick)) - catchupTime;
|
||||||
+ new com.destroystokyo.paper.event.server.ServerTickEndEvent(this.tickCount, ((double)(endTime - lastTick) / 1000000D), remaining).callEvent();
|
+ new com.destroystokyo.paper.event.server.ServerTickEndEvent(this.tickCount, ((double)(endTime - lastTick) / 1000000D), remaining).callEvent();
|
||||||
+ // Paper end - Server Tick Events
|
+ // Paper end - Server Tick Events
|
||||||
this.profiler.push("tallying");
|
gameprofilerfiller.push("tallying");
|
||||||
long j = Util.getNanos() - i;
|
long k = Util.getNanos() - i;
|
||||||
int k = this.tickCount % 100;
|
int l = this.tickCount % 100;
|
|
@ -1,50 +0,0 @@
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
||||||
Date: Wed, 18 Dec 2019 22:21:35 -0600
|
|
||||||
Subject: [PATCH] MC-145656 Fix Follow Range Initial Target
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/target/NearestAttackableTargetGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/target/NearestAttackableTargetGoal.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/ai/goal/target/NearestAttackableTargetGoal.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/target/NearestAttackableTargetGoal.java
|
|
||||||
@@ -0,0 +0,0 @@ public class NearestAttackableTargetGoal<T extends LivingEntity> extends TargetG
|
|
||||||
this.randomInterval = reducedTickDelay(reciprocalChance);
|
|
||||||
this.setFlags(EnumSet.of(Goal.Flag.TARGET));
|
|
||||||
this.targetConditions = TargetingConditions.forCombat().range(this.getFollowDistance()).selector(targetPredicate);
|
|
||||||
+ if (mob.level().paperConfig().entities.entitiesTargetWithFollowRange) this.targetConditions.useFollowRange(); // Paper - Fix MC-145656
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
|
|
||||||
@@ -0,0 +0,0 @@ public class TargetingConditions {
|
|
||||||
|
|
||||||
if (this.range > 0.0) {
|
|
||||||
double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0;
|
|
||||||
- double e = Math.max(this.range * d, 2.0);
|
|
||||||
+ double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0); // Paper - Fix MC-145656
|
|
||||||
double f = baseEntity.distanceToSqr(targetEntity.getX(), targetEntity.getY(), targetEntity.getZ());
|
|
||||||
if (f > e * e) {
|
|
||||||
return false;
|
|
||||||
@@ -0,0 +0,0 @@ public class TargetingConditions {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ // Paper start - Fix MC-145656
|
|
||||||
+ private boolean useFollowRange = false;
|
|
||||||
+
|
|
||||||
+ public TargetingConditions useFollowRange() {
|
|
||||||
+ this.useFollowRange = true;
|
|
||||||
+ return this;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private double getFollowRange(LivingEntity entityliving) {
|
|
||||||
+ net.minecraft.world.entity.ai.attributes.AttributeInstance attributeinstance = entityliving.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.FOLLOW_RANGE);
|
|
||||||
+ return attributeinstance == null ? 16.0D : attributeinstance.getValue();
|
|
||||||
+ }
|
|
||||||
+ // Paper end - Fix MC-145656
|
|
||||||
}
|
|
Loading…
Reference in a new issue