fix lots of levels

This commit is contained in:
Ben Kerllenevich
2023-06-09 00:49:22 -04:00
parent d20403a6d0
commit 1cfcb9f28e
43 changed files with 301 additions and 248 deletions

View File

@@ -46,7 +46,7 @@ index 42d5b4ffc51da90a8f3bbec84e44ac2b0cb7b5ee..9168a02ede5b2fc924dbcf0063109f8e
final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date());
io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr);
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 15539499b5a0f16ad2d44c39c5b824876fdf0951..d33eb475a41791b298c3300a14cf2af17e200c6c 100644
index 15539499b5a0f16ad2d44c39c5b824876fdf0951..632af791c9c4c9d2fa84f46b0c28bb8089930ebe 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -751,6 +751,15 @@ public class ServerPlayer extends Player {
@@ -55,7 +55,7 @@ index 15539499b5a0f16ad2d44c39c5b824876fdf0951..d33eb475a41791b298c3300a14cf2af1
this.advancements.flushDirty(this);
+
+ // Purpur start
+ if (this.level().purpurConfig.useNightVisionWhenRiding && this.getVehicle() != null && this.getVehicle().getRider() == this && this.level.getGameTime() % 100 == 0) { // 5 seconds
+ if (this.level().purpurConfig.useNightVisionWhenRiding && this.getVehicle() != null && this.getVehicle().getRider() == this && this.level().getGameTime() % 100 == 0) { // 5 seconds
+ MobEffectInstance nightVision = this.getEffect(MobEffects.NIGHT_VISION);
+ if (nightVision == null || nightVision.getDuration() <= 300) { // 15 seconds
+ this.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, 400, 0)); // 20 seconds
@@ -269,7 +269,7 @@ index a6d730eaee1df1c5c61aa0f8731b8c055080a9a6..218eaf5f18162422b3376335e32f25d0
// Paper end
if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index e2a25c29ec74147b3e66aa0b3deb85a8f6ee53a5..89ea4208bc30bcf3ed59b3a28384c0796b9204c4 100644
index e2a25c29ec74147b3e66aa0b3deb85a8f6ee53a5..d2ae293a23f8d02b3a2f0a60e4389497be77b60d 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -145,8 +145,8 @@ public abstract class Mob extends LivingEntity implements Targeting {
@@ -299,7 +299,7 @@ index e2a25c29ec74147b3e66aa0b3deb85a8f6ee53a5..89ea4208bc30bcf3ed59b3a28384c079
+
+ // Purpur start
+ public double getMaxY() {
+ return level.getHeight();
+ return level().getHeight();
+ }
+
+ public InteractionResult tryRide(Player player, InteractionHand hand) {
@@ -526,7 +526,7 @@ index 7df56705a4a0de2dc4ff7ab133fc26612c219162..384bed4505b6cabb1ae151cd2c4eb5e5
--this.lookAtCooldown;
this.getYRotD().ifPresent((yaw) -> {
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
index 940cd932e74bc2e6754186731d7aa6f10d56eb68..7798e8df6156d71878b7c1f60c5636be64a25591 100644
index 940cd932e74bc2e6754186731d7aa6f10d56eb68..2ac0c8a7335450c192352da9c34151a70a2645dd 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -18,6 +18,7 @@ import net.minecraft.world.entity.EntityDimensions;
@@ -577,7 +577,7 @@ index 940cd932e74bc2e6754186731d7aa6f10d56eb68..7798e8df6156d71878b7c1f60c5636be
+ super.onMount(rider);
+ if (isResting()) {
+ setResting(false);
+ level.levelEvent(null, 1025, new BlockPos(this).above(), 0);
+ level().levelEvent(null, 1025, new BlockPos(this).above(), 0);
+ }
+ }
+
@@ -964,7 +964,7 @@ index 4b63f6aa3d19cc4f47b05d531df3a43bf398c9ea..3ac30ed0a411384be5102de498815561
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
index 501e6cb4aa83f81c1f657e41f4e7f11d19d46831..057ebdba945caa27db8982fe140d858bdb84fa39 100644
index 501e6cb4aa83f81c1f657e41f4e7f11d19d46831..b9a2064fd3a08aa21f1a25d3f367342852185974 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -78,14 +78,82 @@ public class Dolphin extends WaterAnimal {
@@ -1037,10 +1037,10 @@ index 501e6cb4aa83f81c1f657e41f4e7f11d19d46831..057ebdba945caa27db8982fe140d858b
+ loc.setPitch(loc.getPitch() - 10);
+ org.bukkit.util.Vector target = loc.getDirection().normalize().multiply(10).add(loc.toVector());
+
+ org.purpurmc.purpur.entity.DolphinSpit spit = new org.purpurmc.purpur.entity.DolphinSpit(level, this);
+ org.purpurmc.purpur.entity.DolphinSpit spit = new org.purpurmc.purpur.entity.DolphinSpit(level(), this);
+ spit.shoot(target.getX() - getX(), target.getY() - getY(), target.getZ() - getZ(), level().purpurConfig.dolphinSpitSpeed, 5.0F);
+
+ level.addFreshEntity(spit);
+ level().addFreshEntity(spit);
+ playSound(SoundEvents.DOLPHIN_ATTACK, 1.0F, 1.0F + (random.nextFloat() - random.nextFloat()) * 0.2F);
+ return true;
+ }
@@ -2894,7 +2894,7 @@ index 92666c48620078623a451fbf68f673cb9f81c4b5..5a2eb6775ecb3b01fd136c796258395b
this.dragonFight.updateDragon(this);
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
index f69e0b11be74ac83694f59999b3f07a318410c19..cfde1cde09112251410495203f7daa457c5ed728 100644
index f69e0b11be74ac83694f59999b3f07a318410c19..2a8f6b1fb7f3aac3100e5dc9ee64c53c0edd165b 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -84,16 +84,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -3021,11 +3021,11 @@ index f69e0b11be74ac83694f59999b3f07a318410c19..cfde1cde09112251410495203f7daa45
+ }
+
+ public void shoot(int head, double x, double y, double z, Player rider) {
+ level.levelEvent(null, 1024, blockPosition(), 0);
+ level().levelEvent(null, 1024, blockPosition(), 0);
+ double headX = getHeadX(head);
+ double headY = getHeadY(head);
+ double headZ = getHeadZ(head);
+ WitherSkull skull = new WitherSkull(level, this, x - headX, y - headY, z - headZ) {
+ WitherSkull skull = new WitherSkull(level(), this, x - headX, y - headY, z - headZ) {
+ @Override
+ public boolean canHitEntity(Entity target) {
+ // do not hit rider
@@ -3033,7 +3033,7 @@ index f69e0b11be74ac83694f59999b3f07a318410c19..cfde1cde09112251410495203f7daa45
+ }
+ };
+ skull.setPosRaw(headX, headY, headZ);
+ level.addFreshEntity(skull);
+ level().addFreshEntity(skull);
+ }
+ // Purpur end
+
@@ -3871,7 +3871,7 @@ index 2858ea5562d06c11e5c7337a2b123f9be7a3f62e..aad51022eac584fbc058c2b25e2bf192
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..ea613fe67fcd977aebaae891f95272970ba23698 100644
index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..519d7667e6a8bcb39c200546af5ebbf74e0e9368 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -60,6 +60,64 @@ public class Phantom extends FlyingMob implements Enemy {
@@ -3931,7 +3931,7 @@ index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..ea613fe67fcd977aebaae891f9527297
+ org.purpurmc.purpur.entity.PhantomFlames flames = new org.purpurmc.purpur.entity.PhantomFlames(level, this);
+ flames.canGrief = level().purpurConfig.phantomAllowGriefing;
+ flames.shoot(target.getX() - getX(), target.getY() - getY(), target.getZ() - getZ(), 1.0F, 5.0F);
+ level.addFreshEntity(flames);
+ level().addFreshEntity(flames);
+ return true;
+ }
+ // Purpur end
@@ -5110,6 +5110,19 @@ index 0bbe853f7df93f9dcd2b21d762939f8b6be069aa..7db9844083703944f59e112c6dc5e1a5
@Override
public void tick() {
super.tick();
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java b/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java
index cc0a3d9794d05b6bc6ab05f4f2ab8d83134b181d..e1f918d0bd2a70db1aba8bda8717149f58766825 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java
@@ -33,7 +33,7 @@ public final class ProjectileUtil {
return getHitResult(vec32, entity, predicate, vec3, level);
}
- private static HitResult getHitResult(Vec3 pos, Entity entity, Predicate<Entity> predicate, Vec3 velocity, Level world) {
+ public static HitResult getHitResult(Vec3 pos, Entity entity, Predicate<Entity> predicate, Vec3 velocity, Level world) { // Purpur - private -> public
Vec3 vec3 = pos.add(velocity);
HitResult hitResult = world.clip(new ClipContext(pos, vec3, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity));
if (hitResult.getType() != HitResult.Type.MISS) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index ea056babe2f8123f20dc608d8a636da1de634b8c..a820a00440510d77fa1839eef485f8ea2de9ff84 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -6303,7 +6316,7 @@ index 0000000000000000000000000000000000000000..ba2a37dad43e238e54632975abea8ee6
+}
diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
new file mode 100644
index 0000000000000000000000000000000000000000..a3512b14ecc5b855831e44e7a34d6eba37851e76
index 0000000000000000000000000000000000000000..b436fd92e2db17f6a2ee4118a7a51e324b567b46
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
@@ -0,0 +1,99 @@
@@ -6401,14 +6414,14 @@ index 0000000000000000000000000000000000000000..a3512b14ecc5b855831e44e7a34d6eba
+ if (this.hitCancelled) {
+ return;
+ }
+ BlockState state = this.level.getBlockState(blockHitResult.getBlockPos());
+ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos());
+ state.onProjectileHit(this.level, state, blockHitResult, this);
+ this.discard();
+ }
+}
diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
new file mode 100644
index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f383a62bf
index 0000000000000000000000000000000000000000..1fd6412e332ea8ee82b19c108e113624e51d764b
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
@@ -0,0 +1,114 @@
@@ -6456,7 +6469,7 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f
+ super_tick();
+
+ Vec3 mot = this.getDeltaMovement();
+ HitResult hitResult = ProjectileUtil.getHitResult(this, this::canHitEntity);
+ HitResult hitResult = ProjectileUtil.getHitResult(this.position(), this, this::canHitEntity, mot, level());
+
+ this.preOnHit(hitResult);
+
@@ -6468,7 +6481,7 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f
+
+ Vec3 motDouble = mot.scale(2.0);
+ for (int i = 0; i < 5; i++) {
+ ((ServerLevel) level).sendParticles(null, ParticleTypes.FLAME,
+ ((ServerLevel) level()).sendParticles(null, ParticleTypes.FLAME,
+ getX() + random.nextFloat() / 2 - 0.25F,
+ getY() + random.nextFloat() / 2 - 0.25F,
+ getZ() + random.nextFloat() / 2 - 0.25F,
@@ -6477,7 +6490,7 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f
+
+ if (++ticksLived > 20) {
+ this.discard();
+ } else if (this.level.getBlockStates(this.getBoundingBox()).noneMatch(BlockBehaviour.BlockStateBase::isAir)) {
+ } else if (this.level().getBlockStates(this.getBoundingBox()).noneMatch(BlockBehaviour.BlockStateBase::isAir)) {
+ this.discard();
+ } else if (this.isInWaterOrBubble()) {
+ this.discard();
@@ -6520,8 +6533,8 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f
+ return;
+ }
+ if (this.canGrief) {
+ BlockState state = this.level.getBlockState(blockHitResult.getBlockPos());
+ state.onProjectileHit(this.level, state, blockHitResult, this);
+ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos());
+ state.onProjectileHit(this.level(), state, blockHitResult, this);
+ }
+ this.discard();
+ }