mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-01 20:52:12 -07:00
net\minecraft\world\entity\projectile\
This commit is contained in:
@@ -1,31 +0,0 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java b/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
|
||||||
index ee366e5eab69fc816e124d2718897ee5872c8bd1..7911809e0b957fbb2258a10547e9c1ba79ab289c 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
|
||||||
+++ b/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
|
||||||
@@ -37,10 +37,17 @@ public class ThrownExperienceBottle extends ThrowableItemProjectile {
|
|
||||||
protected void onHit(HitResult result) {
|
|
||||||
super.onHit(result);
|
|
||||||
if (this.level() instanceof ServerLevel) {
|
|
||||||
- this.level().levelEvent(2002, this.blockPosition(), -13083194);
|
|
||||||
+ // CraftBukkit - moved to after event
|
|
||||||
int i = 3 + this.level().random.nextInt(5) + this.level().random.nextInt(5);
|
|
||||||
- ExperienceOrb.award((ServerLevel)this.level(), result.getLocation(), i);
|
|
||||||
- this.discard();
|
|
||||||
+ // CraftBukkit start
|
|
||||||
+ org.bukkit.event.entity.ExpBottleEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callExpBottleEvent(this, result, i);
|
|
||||||
+ i = event.getExperience();
|
|
||||||
+ if (event.getShowEffect()) {
|
|
||||||
+ this.level().levelEvent(net.minecraft.world.level.block.LevelEvent.PARTICLES_SPELL_POTION_SPLASH, this.blockPosition(), net.minecraft.world.item.alchemy.PotionContents.BASE_POTION_COLOR);
|
|
||||||
+ }
|
|
||||||
+ // CraftBukkit end
|
|
||||||
+ ExperienceOrb.award((ServerLevel)this.level(), result.getLocation(), i, org.bukkit.entity.ExperienceOrb.SpawnReason.EXP_BOTTLE, this.getOwner(), this); // Paper
|
|
||||||
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,14 +1,6 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/AbstractThrownPotion.java b/net/minecraft/world/entity/projectile/AbstractThrownPotion.java
|
|
||||||
index cd39446836b9706134e164c07db57e3632b41299..3a1d9d0022f64d522138439cd1d55d571ff5e2ce 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/AbstractThrownPotion.java
|
--- a/net/minecraft/world/entity/projectile/AbstractThrownPotion.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/AbstractThrownPotion.java
|
+++ b/net/minecraft/world/entity/projectile/AbstractThrownPotion.java
|
||||||
@@ -70,54 +70,95 @@ public abstract class AbstractThrownPotion extends ThrowableItemProjectile {
|
@@ -67,54 +_,95 @@
|
||||||
@Override
|
@Override
|
||||||
protected void onHit(HitResult result) {
|
protected void onHit(HitResult result) {
|
||||||
super.onHit(result);
|
super.onHit(result);
|
||||||
@@ -16,7 +8,7 @@ index cd39446836b9706134e164c07db57e3632b41299..3a1d9d0022f64d522138439cd1d55d57
|
|||||||
+ this.splash(result);
|
+ this.splash(result);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public void splash(@Nullable HitResult result) {
|
+ public void splash(HitResult result) {
|
||||||
+ // Paper end - More projectile API
|
+ // Paper end - More projectile API
|
||||||
if (this.level() instanceof ServerLevel serverLevel) {
|
if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
ItemStack item = this.getItem();
|
ItemStack item = this.getItem();
|
||||||
@@ -25,10 +17,10 @@ index cd39446836b9706134e164c07db57e3632b41299..3a1d9d0022f64d522138439cd1d55d57
|
|||||||
if (potionContents.is(Potions.WATER)) {
|
if (potionContents.is(Potions.WATER)) {
|
||||||
- this.onHitAsWater(serverLevel);
|
- this.onHitAsWater(serverLevel);
|
||||||
- } else if (potionContents.hasEffects()) {
|
- } else if (potionContents.hasEffects()) {
|
||||||
- this.onHitAsPotion(serverLevel, item, result.getType() == HitResult.Type.ENTITY ? ((EntityHitResult)result).getEntity() : null);
|
- this.onHitAsPotion(serverLevel, item, result);
|
||||||
+ showParticles = this.onHitAsWater(serverLevel, result); // Paper - Fix potions splash events
|
+ showParticles = this.onHitAsWater(serverLevel, result); // Paper - Fix potions splash events
|
||||||
+ } else if (true || potionContents.hasEffects()) { // CraftBukkit - Call event even if no effects to apply
|
+ } else if (true || potionContents.hasEffects()) { // CraftBukkit - Call event even if no effects to apply
|
||||||
+ showParticles = this.onHitAsPotion(serverLevel, item, result != null && result.getType() == HitResult.Type.ENTITY ? ((EntityHitResult)result).getEntity() : null, result); // Paper - pass HitResult
|
+ showParticles = this.onHitAsPotion(serverLevel, item, result); // Paper - pass HitResult
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (showParticles) { // Paper - Fix potions splash events
|
+ if (showParticles) { // Paper - Fix potions splash events
|
||||||
@@ -43,7 +35,7 @@ index cd39446836b9706134e164c07db57e3632b41299..3a1d9d0022f64d522138439cd1d55d57
|
|||||||
- private void onHitAsWater(ServerLevel level) {
|
- private void onHitAsWater(ServerLevel level) {
|
||||||
+ private static final Predicate<LivingEntity> APPLY_WATER_GET_ENTITIES_PREDICATE = AbstractThrownPotion.WATER_SENSITIVE_OR_ON_FIRE.or(Axolotl.class::isInstance); // Paper - Fix potions splash events
|
+ private static final Predicate<LivingEntity> APPLY_WATER_GET_ENTITIES_PREDICATE = AbstractThrownPotion.WATER_SENSITIVE_OR_ON_FIRE.or(Axolotl.class::isInstance); // Paper - Fix potions splash events
|
||||||
+
|
+
|
||||||
+ private boolean onHitAsWater(ServerLevel level, @Nullable HitResult result) { // Paper - Fix potions splash events
|
+ private boolean onHitAsWater(ServerLevel level, HitResult result) { // Paper - Fix potions splash events
|
||||||
AABB aabb = this.getBoundingBox().inflate(4.0, 2.0, 4.0);
|
AABB aabb = this.getBoundingBox().inflate(4.0, 2.0, 4.0);
|
||||||
|
|
||||||
- for (LivingEntity livingEntity : this.level().getEntitiesOfClass(LivingEntity.class, aabb, WATER_SENSITIVE_OR_ON_FIRE)) {
|
- for (LivingEntity livingEntity : this.level().getEntitiesOfClass(LivingEntity.class, aabb, WATER_SENSITIVE_OR_ON_FIRE)) {
|
||||||
@@ -93,8 +85,8 @@ index cd39446836b9706134e164c07db57e3632b41299..3a1d9d0022f64d522138439cd1d55d57
|
|||||||
+ return !event.isCancelled(); // Paper - Fix potions splash events
|
+ return !event.isCancelled(); // Paper - Fix potions splash events
|
||||||
}
|
}
|
||||||
|
|
||||||
- protected abstract void onHitAsPotion(ServerLevel level, ItemStack stack, @Nullable Entity entity);
|
- protected abstract void onHitAsPotion(ServerLevel level, ItemStack stack, HitResult hitResult);
|
||||||
+ protected abstract boolean onHitAsPotion(ServerLevel level, ItemStack stack, @Nullable Entity entity, @Nullable HitResult hitResult); // Paper - Pass HitResult // Paper - Fix potions splash events & More Projectile API
|
+ protected abstract boolean onHitAsPotion(ServerLevel level, ItemStack stack, HitResult hitResult); // Paper - Fix potions splash events & More Projectile API
|
||||||
|
|
||||||
private void dowseFire(BlockPos pos) {
|
private void dowseFire(BlockPos pos) {
|
||||||
BlockState blockState = this.level().getBlockState(pos);
|
BlockState blockState = this.level().getBlockState(pos);
|
@@ -1,28 +1,20 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/EyeOfEnder.java b/net/minecraft/world/entity/projectile/EyeOfEnder.java
|
|
||||||
index 6c2eea22bc33abfe5c143abbca732310677073b0..59941c605085d93357211939114ecf1b88aef05d 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/EyeOfEnder.java
|
--- a/net/minecraft/world/entity/projectile/EyeOfEnder.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/EyeOfEnder.java
|
+++ b/net/minecraft/world/entity/projectile/EyeOfEnder.java
|
||||||
@@ -73,6 +73,12 @@ public class EyeOfEnder extends Entity implements ItemSupplier {
|
@@ -72,6 +_,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public void signalTo(BlockPos pos) {
|
public void signalTo(Vec3 pos) {
|
||||||
+ // Paper start - Change EnderEye target without changing other things
|
+ // Paper start - Change EnderEye target without changing other things
|
||||||
+ this.signalTo(pos, true);
|
+ this.signalTo(pos, true);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public void signalTo(BlockPos pos, boolean update) {
|
+ public void signalTo(Vec3 pos, boolean update) {
|
||||||
+ // Paper end - Change EnderEye target without changing other things
|
+ // Paper end - Change EnderEye target without changing other things
|
||||||
double d = pos.getX();
|
Vec3 vec3 = pos.subtract(this.position());
|
||||||
int y = pos.getY();
|
double d = vec3.horizontalDistance();
|
||||||
double d1 = pos.getZ();
|
if (d > 12.0) {
|
||||||
@@ -89,8 +95,10 @@ public class EyeOfEnder extends Entity implements ItemSupplier {
|
@@ -80,8 +_,10 @@
|
||||||
this.tz = d1;
|
this.target = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (update) { // Paper - Change EnderEye target without changing other things
|
+ if (update) { // Paper - Change EnderEye target without changing other things
|
||||||
@@ -32,7 +24,7 @@ index 6c2eea22bc33abfe5c143abbca732310677073b0..59941c605085d93357211939114ecf1b
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -164,7 +172,7 @@ public class EyeOfEnder extends Entity implements ItemSupplier {
|
@@ -102,7 +_,7 @@
|
||||||
this.life++;
|
this.life++;
|
||||||
if (this.life > 80 && !this.level().isClientSide) {
|
if (this.life > 80 && !this.level().isClientSide) {
|
||||||
this.playSound(SoundEvents.ENDER_EYE_DEATH, 1.0F, 1.0F);
|
this.playSound(SoundEvents.ENDER_EYE_DEATH, 1.0F, 1.0F);
|
@@ -1,14 +1,6 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
|
||||||
index 12bd5a49e2297f93c85a20d023fe4c95c3d29bd8..dcb7714b2edeab8cfb0358929d07bd04cead26bf 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
--- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
+++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||||
@@ -50,6 +50,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -48,6 +_,7 @@
|
||||||
public int lifetime = 0;
|
public int lifetime = 0;
|
||||||
@Nullable
|
@Nullable
|
||||||
public LivingEntity attachedToEntity;
|
public LivingEntity attachedToEntity;
|
||||||
@@ -16,7 +8,7 @@ index 12bd5a49e2297f93c85a20d023fe4c95c3d29bd8..dcb7714b2edeab8cfb0358929d07bd04
|
|||||||
|
|
||||||
public FireworkRocketEntity(EntityType<? extends FireworkRocketEntity> entityType, Level level) {
|
public FireworkRocketEntity(EntityType<? extends FireworkRocketEntity> entityType, Level level) {
|
||||||
super(entityType, level);
|
super(entityType, level);
|
||||||
@@ -165,7 +166,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -163,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.noPhysics && this.isAlive() && hitResultOnMoveVector.getType() != HitResult.Type.MISS) {
|
if (!this.noPhysics && this.isAlive() && hitResultOnMoveVector.getType() != HitResult.Type.MISS) {
|
||||||
@@ -25,7 +17,7 @@ index 12bd5a49e2297f93c85a20d023fe4c95c3d29bd8..dcb7714b2edeab8cfb0358929d07bd04
|
|||||||
this.hasImpulse = true;
|
this.hasImpulse = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +190,11 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -187,7 +_,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.life > this.lifetime && this.level() instanceof ServerLevel serverLevel) {
|
if (this.life > this.lifetime && this.level() instanceof ServerLevel serverLevel) {
|
||||||
@@ -38,7 +30,7 @@ index 12bd5a49e2297f93c85a20d023fe4c95c3d29bd8..dcb7714b2edeab8cfb0358929d07bd04
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,14 +202,18 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -195,14 +_,18 @@
|
||||||
level.broadcastEntityEvent(this, (byte)17);
|
level.broadcastEntityEvent(this, (byte)17);
|
||||||
this.gameEvent(GameEvent.EXPLODE, this.getOwner());
|
this.gameEvent(GameEvent.EXPLODE, this.getOwner());
|
||||||
this.dealExplosionDamage(level);
|
this.dealExplosionDamage(level);
|
||||||
@@ -59,7 +51,7 @@ index 12bd5a49e2297f93c85a20d023fe4c95c3d29bd8..dcb7714b2edeab8cfb0358929d07bd04
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +222,11 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -211,7 +_,11 @@
|
||||||
BlockPos blockPos = new BlockPos(result.getBlockPos());
|
BlockPos blockPos = new BlockPos(result.getBlockPos());
|
||||||
this.level().getBlockState(blockPos).entityInside(this.level(), blockPos, this, InsideBlockEffectApplier.NOOP);
|
this.level().getBlockState(blockPos).entityInside(this.level(), blockPos, this, InsideBlockEffectApplier.NOOP);
|
||||||
if (this.level() instanceof ServerLevel serverLevel && this.hasExplosion()) {
|
if (this.level() instanceof ServerLevel serverLevel && this.hasExplosion()) {
|
||||||
@@ -72,19 +64,19 @@ index 12bd5a49e2297f93c85a20d023fe4c95c3d29bd8..dcb7714b2edeab8cfb0358929d07bd04
|
|||||||
}
|
}
|
||||||
|
|
||||||
super.onHitBlock(result);
|
super.onHitBlock(result);
|
||||||
@@ -286,6 +299,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -283,6 +_,7 @@
|
||||||
RegistryOps<Tag> registryOps = this.registryAccess().createSerializationContext(NbtOps.INSTANCE);
|
output.putInt("LifeTime", this.lifetime);
|
||||||
compound.store("FireworksItem", ItemStack.CODEC, registryOps, this.getItem());
|
output.store("FireworksItem", ItemStack.CODEC, this.getItem());
|
||||||
compound.putBoolean("ShotAtAngle", this.entityData.get(DATA_SHOT_AT_ANGLE));
|
output.putBoolean("ShotAtAngle", this.entityData.get(DATA_SHOT_AT_ANGLE));
|
||||||
+ compound.storeNullable("SpawningEntity", net.minecraft.core.UUIDUtil.CODEC, this.spawningEntity); // Paper
|
+ output.storeNullable("SpawningEntity", net.minecraft.core.UUIDUtil.CODEC, this.spawningEntity); // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -296,6 +310,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -292,6 +_,7 @@
|
||||||
RegistryOps<Tag> registryOps = this.registryAccess().createSerializationContext(NbtOps.INSTANCE);
|
this.lifetime = input.getIntOr("LifeTime", 0);
|
||||||
this.entityData.set(DATA_ID_FIREWORKS_ITEM, compound.read("FireworksItem", ItemStack.CODEC, registryOps).orElse(getDefaultItem()));
|
this.entityData.set(DATA_ID_FIREWORKS_ITEM, input.read("FireworksItem", ItemStack.CODEC).orElse(getDefaultItem()));
|
||||||
this.entityData.set(DATA_SHOT_AT_ANGLE, compound.getBooleanOr("ShotAtAngle", false));
|
this.entityData.set(DATA_SHOT_AT_ANGLE, input.getBooleanOr("ShotAtAngle", false));
|
||||||
+ this.spawningEntity = compound.read("SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); // Paper
|
+ this.spawningEntity = input.read("SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<FireworkExplosion> getExplosions() {
|
private List<FireworkExplosion> getExplosions() {
|
@@ -1,14 +1,6 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/LargeFireball.java b/net/minecraft/world/entity/projectile/LargeFireball.java
|
|
||||||
index 048ba5e45d6e0ee2be135e3ab07766eae8445543..db1b5bce212a5147be82504469f1fa9660812ebc 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/LargeFireball.java
|
--- a/net/minecraft/world/entity/projectile/LargeFireball.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/LargeFireball.java
|
+++ b/net/minecraft/world/entity/projectile/LargeFireball.java
|
||||||
@@ -19,11 +19,13 @@ public class LargeFireball extends Fireball {
|
@@ -20,11 +_,13 @@
|
||||||
|
|
||||||
public LargeFireball(EntityType<? extends LargeFireball> entityType, Level level) {
|
public LargeFireball(EntityType<? extends LargeFireball> entityType, Level level) {
|
||||||
super(entityType, level);
|
super(entityType, level);
|
||||||
@@ -22,7 +14,7 @@ index 048ba5e45d6e0ee2be135e3ab07766eae8445543..db1b5bce212a5147be82504469f1fa96
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -31,8 +33,13 @@ public class LargeFireball extends Fireball {
|
@@ -32,8 +_,13 @@
|
||||||
super.onHit(result);
|
super.onHit(result);
|
||||||
if (this.level() instanceof ServerLevel serverLevel) {
|
if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
boolean _boolean = serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
boolean _boolean = serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
||||||
@@ -38,11 +30,11 @@ index 048ba5e45d6e0ee2be135e3ab07766eae8445543..db1b5bce212a5147be82504469f1fa96
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,6 +64,6 @@ public class LargeFireball extends Fireball {
|
@@ -58,6 +_,6 @@
|
||||||
@Override
|
@Override
|
||||||
public void readAdditionalSaveData(CompoundTag compound) {
|
protected void readAdditionalSaveData(ValueInput input) {
|
||||||
super.readAdditionalSaveData(compound);
|
super.readAdditionalSaveData(input);
|
||||||
- this.explosionPower = compound.getByteOr("ExplosionPower", (byte)1);
|
- this.explosionPower = input.getByteOr("ExplosionPower", (byte)1);
|
||||||
+ this.bukkitYield = this.explosionPower = compound.getByteOr("ExplosionPower", (byte)1); // CraftBukkit - set bukkitYield when setting explosionPower
|
+ this.bukkitYield = this.explosionPower = input.getByteOr("ExplosionPower", (byte)1); // CraftBukkit - set bukkitYield when setting explosionPower
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,14 +1,6 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java
|
|
||||||
index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b926508b5b 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/Projectile.java
|
--- a/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/Projectile.java
|
+++ b/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
@@ -47,6 +47,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -44,6 +_,7 @@
|
||||||
public boolean hasBeenShot = false;
|
public boolean hasBeenShot = false;
|
||||||
@Nullable
|
@Nullable
|
||||||
private Entity lastDeflectedBy;
|
private Entity lastDeflectedBy;
|
||||||
@@ -16,17 +8,11 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
|
|
||||||
Projectile(EntityType<? extends Projectile> entityType, Level level) {
|
Projectile(EntityType<? extends Projectile> entityType, Level level) {
|
||||||
super(entityType, level);
|
super(entityType, level);
|
||||||
@@ -57,15 +58,36 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -55,7 +_,20 @@
|
||||||
this.ownerUUID = owner.getUUID();
|
|
||||||
this.cachedOwner = owner;
|
public void setOwner(@Nullable Entity owner) {
|
||||||
}
|
this.setOwner(owner != null ? new EntityReference<>(owner) : null);
|
||||||
+ // Paper start - Refresh ProjectileSource for projectiles
|
- }
|
||||||
+ else {
|
|
||||||
+ this.ownerUUID = null;
|
|
||||||
+ this.cachedOwner = null;
|
|
||||||
+ this.projectileSource = null;
|
|
||||||
+ }
|
|
||||||
+ // Paper end - Refresh ProjectileSource for projectiles
|
|
||||||
+ this.refreshProjectileSource(false); // Paper
|
+ this.refreshProjectileSource(false); // Paper
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -35,33 +21,24 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
+ if (fillCache) {
|
+ if (fillCache) {
|
||||||
+ this.getOwner();
|
+ this.getOwner();
|
||||||
+ }
|
+ }
|
||||||
+ if (this.cachedOwner != null && !this.cachedOwner.isRemoved() && this.projectileSource == null && this.cachedOwner.getBukkitEntity() instanceof org.bukkit.projectiles.ProjectileSource projSource) {
|
+ Entity owner = this.getOwner();
|
||||||
|
+ if (owner != null && this.projectileSource == null && owner.getBukkitEntity() instanceof org.bukkit.projectiles.ProjectileSource projSource) {
|
||||||
+ this.projectileSource = projSource;
|
+ this.projectileSource = projSource;
|
||||||
+ }
|
+ }
|
||||||
}
|
+ }
|
||||||
+ // Paper end - Refresh ProjectileSource for projectiles
|
+ // Paper end - Refresh ProjectileSource for projectiles
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public Entity getOwner() {
|
@@ -84,6 +_,7 @@
|
||||||
if (this.cachedOwner != null && !this.cachedOwner.isRemoved()) {
|
|
||||||
+ this.refreshProjectileSource(false); // Paper - Refresh ProjectileSource for projectiles
|
|
||||||
return this.cachedOwner;
|
|
||||||
} else if (this.ownerUUID != null) {
|
|
||||||
this.cachedOwner = this.findOwner(this.ownerUUID);
|
|
||||||
+ this.refreshProjectileSource(false); // Paper - Refresh ProjectileSource for projectiles
|
|
||||||
return this.cachedOwner;
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
@@ -98,6 +120,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
|
||||||
@Override
|
@Override
|
||||||
protected void readAdditionalSaveData(CompoundTag compound) {
|
protected void readAdditionalSaveData(ValueInput input) {
|
||||||
this.setOwnerThroughUUID(compound.read("Owner", UUIDUtil.CODEC).orElse(null));
|
this.setOwner(EntityReference.read(input, "Owner"));
|
||||||
+ if (this instanceof ThrownEnderpearl && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && this.level().paperConfig().misc.legacyEnderPearlBehavior) { this.ownerUUID = null; } // Paper - Reset pearls when they stop being ticked; Don't store shooter name for pearls to block enderpearl travel exploit
|
+ if (this instanceof ThrownEnderpearl && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && this.level().paperConfig().misc.legacyEnderPearlBehavior) { this.owner = null; } // Paper - Reset pearls when they stop being ticked; Don't store shooter name for pearls to block enderpearl travel exploit
|
||||||
this.leftOwner = compound.getBooleanOr("LeftOwner", false);
|
this.leftOwner = input.getBooleanOr("LeftOwner", false);
|
||||||
this.hasBeenShot = compound.getBooleanOr("HasBeenShot", false);
|
this.hasBeenShot = input.getBooleanOr("HasBeenShot", false);
|
||||||
}
|
}
|
||||||
@@ -173,7 +196,14 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -151,7 +_,14 @@
|
||||||
float f2 = Mth.cos(y * (float) (Math.PI / 180.0)) * Mth.cos(x * (float) (Math.PI / 180.0));
|
float f2 = Mth.cos(y * (float) (Math.PI / 180.0)) * Mth.cos(x * (float) (Math.PI / 180.0));
|
||||||
this.shoot(f, f1, f2, velocity, inaccuracy);
|
this.shoot(f, f1, f2, velocity, inaccuracy);
|
||||||
Vec3 knownMovement = shooter.getKnownMovement();
|
Vec3 knownMovement = shooter.getKnownMovement();
|
||||||
@@ -76,7 +53,7 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -193,7 +223,12 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -171,7 +_,12 @@
|
||||||
public static <T extends Projectile> T spawnProjectileFromRotation(
|
public static <T extends Projectile> T spawnProjectileFromRotation(
|
||||||
Projectile.ProjectileFactory<T> factory, ServerLevel level, ItemStack spawnedFrom, LivingEntity owner, float z, float velocity, float innaccuracy
|
Projectile.ProjectileFactory<T> factory, ServerLevel level, ItemStack spawnedFrom, LivingEntity owner, float z, float velocity, float innaccuracy
|
||||||
) {
|
) {
|
||||||
@@ -90,7 +67,7 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
factory.create(level, owner, spawnedFrom),
|
factory.create(level, owner, spawnedFrom),
|
||||||
level,
|
level,
|
||||||
spawnedFrom,
|
spawnedFrom,
|
||||||
@@ -218,7 +253,13 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -196,7 +_,13 @@
|
||||||
public static <T extends Projectile> T spawnProjectileUsingShoot(
|
public static <T extends Projectile> T spawnProjectileUsingShoot(
|
||||||
T projectile, ServerLevel level, ItemStack spawnedFrom, double x, double y, double z, float velocity, float inaccuracy
|
T projectile, ServerLevel level, ItemStack spawnedFrom, double x, double y, double z, float velocity, float inaccuracy
|
||||||
) {
|
) {
|
||||||
@@ -105,7 +82,7 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends Projectile> T spawnProjectile(T projectile, ServerLevel level, ItemStack spawnedFrom) {
|
public static <T extends Projectile> T spawnProjectile(T projectile, ServerLevel level, ItemStack spawnedFrom) {
|
||||||
@@ -226,12 +267,47 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -204,11 +_,46 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends Projectile> T spawnProjectile(T projectile, ServerLevel level, ItemStack stack, Consumer<T> adapter) {
|
public static <T extends Projectile> T spawnProjectile(T projectile, ServerLevel level, ItemStack stack, Consumer<T> adapter) {
|
||||||
@@ -119,9 +96,10 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
- level.addFreshEntity(projectile);
|
- level.addFreshEntity(projectile);
|
||||||
- projectile.applyOnProjectileSpawned(level, stack);
|
- projectile.applyOnProjectileSpawned(level, stack);
|
||||||
- return projectile;
|
- return projectile;
|
||||||
|
- }
|
||||||
+ return new Delayed<>(projectile, level, stack); // Paper - delayed projectile spawning
|
+ return new Delayed<>(projectile, level, stack); // Paper - delayed projectile spawning
|
||||||
}
|
+ }
|
||||||
|
+
|
||||||
+ // Paper start - delayed projectile spawning
|
+ // Paper start - delayed projectile spawning
|
||||||
+ public record Delayed<T extends Projectile>(
|
+ public record Delayed<T extends Projectile>(
|
||||||
+ T projectile,
|
+ T projectile,
|
||||||
@@ -152,11 +130,10 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end - delayed projectile spawning
|
+ // Paper end - delayed projectile spawning
|
||||||
+
|
|
||||||
public void applyOnProjectileSpawned(ServerLevel level, ItemStack spawnedFrom) {
|
public void applyOnProjectileSpawned(ServerLevel level, ItemStack spawnedFrom) {
|
||||||
EnchantmentHelper.onProjectileSpawned(level, spawnedFrom, this, item -> {});
|
EnchantmentHelper.onProjectileSpawned(level, spawnedFrom, this, item -> {});
|
||||||
if (this instanceof AbstractArrow abstractArrow) {
|
@@ -220,6 +_,17 @@
|
||||||
@@ -242,6 +318,17 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +151,7 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
protected ProjectileDeflection hitTargetOrDeflectSelf(HitResult hitResult) {
|
protected ProjectileDeflection hitTargetOrDeflectSelf(HitResult hitResult) {
|
||||||
if (hitResult.getType() == HitResult.Type.ENTITY) {
|
if (hitResult.getType() == HitResult.Type.ENTITY) {
|
||||||
EntityHitResult entityHitResult = (EntityHitResult)hitResult;
|
EntityHitResult entityHitResult = (EntityHitResult)hitResult;
|
||||||
@@ -273,7 +360,13 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -251,7 +_,13 @@
|
||||||
public boolean deflect(ProjectileDeflection deflection, @Nullable Entity entity, @Nullable Entity owner, boolean deflectedByPlayer) {
|
public boolean deflect(ProjectileDeflection deflection, @Nullable Entity entity, @Nullable Entity owner, boolean deflectedByPlayer) {
|
||||||
deflection.deflect(this, entity, this.random);
|
deflection.deflect(this, entity, this.random);
|
||||||
if (!this.level().isClientSide) {
|
if (!this.level().isClientSide) {
|
||||||
@@ -189,7 +166,7 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
this.onDeflection(entity, deflectedByPlayer);
|
this.onDeflection(entity, deflectedByPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,15 +402,35 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -287,15 +_,35 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onHitBlock(BlockHitResult result) {
|
protected void onHitBlock(BlockHitResult result) {
|
||||||
@@ -225,7 +202,7 @@ index 6c9a5aa2ca7d002c5b015b0e3adaa160748e36b8..4487c03183d20a187d391dd124abb7b9
|
|||||||
return owner == null || this.leftOwner || !owner.isPassengerOfSameVehicle(target);
|
return owner == null || this.leftOwner || !owner.isPassengerOfSameVehicle(target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -330,13 +443,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
@@ -308,13 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static float lerpRotation(float currentRotation, float targetRotation) {
|
protected static float lerpRotation(float currentRotation, float targetRotation) {
|
@@ -1,37 +1,29 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/ShulkerBullet.java b/net/minecraft/world/entity/projectile/ShulkerBullet.java
|
|
||||||
index 43c36a76e633c34ee1f61d79dd6345af8b9ce8e0..0789b9b6904ae07d80a828ef18632fb3093cc3cc 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/ShulkerBullet.java
|
--- a/net/minecraft/world/entity/projectile/ShulkerBullet.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/ShulkerBullet.java
|
+++ b/net/minecraft/world/entity/projectile/ShulkerBullet.java
|
||||||
@@ -58,8 +58,22 @@ public class ShulkerBullet extends Projectile {
|
@@ -57,7 +_,21 @@
|
||||||
this.finalTarget = finalTarget;
|
this.finalTarget = new EntityReference<>(finalTarget);
|
||||||
this.currentMoveDirection = Direction.UP;
|
this.currentMoveDirection = Direction.UP;
|
||||||
this.selectNextMoveDirection(axis);
|
this.selectNextMoveDirection(axis, finalTarget);
|
||||||
|
- }
|
||||||
+ this.projectileSource = shooter.getBukkitLivingEntity(); // CraftBukkit
|
+ this.projectileSource = shooter.getBukkitLivingEntity(); // CraftBukkit
|
||||||
}
|
+ }
|
||||||
|
+
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ @Nullable
|
+ @Nullable
|
||||||
+ public Entity getTarget() {
|
+ public Entity getTarget() {
|
||||||
+ return this.finalTarget;
|
+ return this.finalTarget.getEntity(this.level(), Entity.class);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public void setTarget(@Nullable Entity finalTarget) {
|
+ public void setTarget(@Nullable Entity finalTarget) {
|
||||||
+ this.finalTarget = finalTarget;
|
+ this.finalTarget = finalTarget == null ? null : new net.minecraft.world.entity.EntityReference<>(finalTarget);
|
||||||
+ this.currentMoveDirection = Direction.UP;
|
+ this.currentMoveDirection = Direction.UP;
|
||||||
+ this.selectNextMoveDirection(Direction.Axis.X);
|
+ this.selectNextMoveDirection(Direction.Axis.X, finalTarget);
|
||||||
+ }
|
+ }
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
+
|
|
||||||
@Override
|
@Override
|
||||||
public SoundSource getSoundSource() {
|
public SoundSource getSoundSource() {
|
||||||
return SoundSource.HOSTILE;
|
@@ -179,7 +_,7 @@
|
||||||
@@ -180,7 +194,7 @@ public class ShulkerBullet extends Projectile {
|
|
||||||
@Override
|
@Override
|
||||||
public void checkDespawn() {
|
public void checkDespawn() {
|
||||||
if (this.level().getDifficulty() == Difficulty.PEACEFUL) {
|
if (this.level().getDifficulty() == Difficulty.PEACEFUL) {
|
||||||
@@ -40,7 +32,7 @@ index 43c36a76e633c34ee1f61d79dd6345af8b9ce8e0..0789b9b6904ae07d80a828ef18632fb3
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,7 +240,7 @@ public class ShulkerBullet extends Projectile {
|
@@ -223,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hitResult != null && this.isAlive() && hitResult.getType() != HitResult.Type.MISS) {
|
if (hitResult != null && this.isAlive() && hitResult.getType() != HitResult.Type.MISS) {
|
||||||
@@ -49,7 +41,7 @@ index 43c36a76e633c34ee1f61d79dd6345af8b9ce8e0..0789b9b6904ae07d80a828ef18632fb3
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProjectileUtil.rotateTowardsMovement(this, 0.5F);
|
ProjectileUtil.rotateTowardsMovement(this, 0.5F);
|
||||||
@@ -299,7 +313,7 @@ public class ShulkerBullet extends Projectile {
|
@@ -296,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof LivingEntity livingEntity1) {
|
if (entity instanceof LivingEntity livingEntity1) {
|
||||||
@@ -58,7 +50,7 @@ index 43c36a76e633c34ee1f61d79dd6345af8b9ce8e0..0789b9b6904ae07d80a828ef18632fb3
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -312,14 +326,20 @@ public class ShulkerBullet extends Projectile {
|
@@ -309,14 +_,20 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
private void destroy() {
|
private void destroy() {
|
||||||
@@ -81,7 +73,7 @@ index 43c36a76e633c34ee1f61d79dd6345af8b9ce8e0..0789b9b6904ae07d80a828ef18632fb3
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -334,9 +354,14 @@ public class ShulkerBullet extends Projectile {
|
@@ -331,9 +_,14 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) {
|
public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) {
|
@@ -1,14 +1,6 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
|
||||||
index cd7eb7037b223674ffa492a68c55b371e6db8195..bda858b1e1c6b28cd9d5a664758b3e445eaf4f22 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
--- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
+++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
||||||
@@ -122,11 +122,18 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -119,11 +_,18 @@
|
||||||
Vec3 vec3 = this.oldPosition();
|
Vec3 vec3 = this.oldPosition();
|
||||||
if (owner instanceof ServerPlayer serverPlayer) {
|
if (owner instanceof ServerPlayer serverPlayer) {
|
||||||
if (serverPlayer.connection.isAcceptingMessages()) {
|
if (serverPlayer.connection.isAcceptingMessages()) {
|
||||||
@@ -28,7 +20,7 @@ index cd7eb7037b223674ffa492a68c55b371e6db8195..bda858b1e1c6b28cd9d5a664758b3e44
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,15 +141,17 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -131,15 +_,17 @@
|
||||||
owner.setPortalCooldown();
|
owner.setPortalCooldown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,12 +39,12 @@ index cd7eb7037b223674ffa492a68c55b371e6db8195..bda858b1e1c6b28cd9d5a664758b3e44
|
|||||||
if (serverPlayer1 != null) {
|
if (serverPlayer1 != null) {
|
||||||
serverPlayer1.resetFallDistance();
|
serverPlayer1.resetFallDistance();
|
||||||
serverPlayer1.resetCurrentImpulseContext();
|
serverPlayer1.resetCurrentImpulseContext();
|
||||||
- serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl(), 5.0F);
|
- serverPlayer1.hurtServer(serverPlayer.level(), this.damageSources().enderPearl(), 5.0F);
|
||||||
+ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API
|
+ serverPlayer1.hurtServer(serverPlayer.level(), this.damageSources().enderPearl().eventEntityDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API
|
||||||
}
|
}
|
||||||
|
|
||||||
this.playSound(serverLevel, vec3);
|
this.playSound(serverLevel, vec3);
|
||||||
@@ -158,9 +167,9 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -155,9 +_,9 @@
|
||||||
this.playSound(serverLevel, vec3);
|
this.playSound(serverLevel, vec3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,16 +56,16 @@ index cd7eb7037b223674ffa492a68c55b371e6db8195..bda858b1e1c6b28cd9d5a664758b3e44
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -181,7 +190,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -178,7 +_,7 @@
|
||||||
if (owner instanceof ServerPlayer serverPlayer
|
if (owner instanceof ServerPlayer serverPlayer
|
||||||
&& !owner.isAlive()
|
&& !owner.isAlive()
|
||||||
&& serverPlayer.serverLevel().getGameRules().getBoolean(GameRules.RULE_ENDER_PEARLS_VANISH_ON_DEATH)) {
|
&& serverPlayer.level().getGameRules().getBoolean(GameRules.RULE_ENDER_PEARLS_VANISH_ON_DEATH)) {
|
||||||
- this.discard();
|
- this.discard();
|
||||||
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
|
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
|
||||||
} else {
|
} else {
|
||||||
super.tick();
|
super.tick();
|
||||||
}
|
}
|
||||||
@@ -208,7 +217,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -205,7 +_,7 @@
|
||||||
public Entity teleport(TeleportTransition teleportTransition) {
|
public Entity teleport(TeleportTransition teleportTransition) {
|
||||||
Entity entity = super.teleport(teleportTransition);
|
Entity entity = super.teleport(teleportTransition);
|
||||||
if (entity != null) {
|
if (entity != null) {
|
||||||
@@ -82,7 +74,7 @@ index cd7eb7037b223674ffa492a68c55b371e6db8195..bda858b1e1c6b28cd9d5a664758b3e44
|
|||||||
}
|
}
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
@@ -216,7 +225,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -213,7 +_,7 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canTeleport(Level fromLevel, Level toLevel) {
|
public boolean canTeleport(Level fromLevel, Level toLevel) {
|
@@ -0,0 +1,33 @@
|
|||||||
|
--- a/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
||||||
|
+++ b/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
||||||
|
@@ -39,16 +_,25 @@
|
||||||
|
protected void onHit(HitResult result) {
|
||||||
|
super.onHit(result);
|
||||||
|
if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
|
- serverLevel.levelEvent(2002, this.blockPosition(), -13083194);
|
||||||
|
+ // CraftBukkit - moved to after event
|
||||||
|
int i = 3 + serverLevel.random.nextInt(5) + serverLevel.random.nextInt(5);
|
||||||
|
+ // Paper start - exp bottle event
|
||||||
|
+ org.bukkit.event.entity.ExpBottleEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callExpBottleEvent(this, result, i);
|
||||||
|
+ i = event.getExperience();
|
||||||
|
+ // Paper end - exp bottle event
|
||||||
|
if (result instanceof BlockHitResult blockHitResult) {
|
||||||
|
Vec3 unitVec3 = blockHitResult.getDirection().getUnitVec3();
|
||||||
|
- ExperienceOrb.awardWithDirection(serverLevel, result.getLocation(), unitVec3, i);
|
||||||
|
+ ExperienceOrb.awardWithDirection(serverLevel, result.getLocation(), unitVec3, i, org.bukkit.entity.ExperienceOrb.SpawnReason.EXP_BOTTLE, this.getOwner(), this); // Paper
|
||||||
|
} else {
|
||||||
|
- ExperienceOrb.awardWithDirection(serverLevel, result.getLocation(), this.getDeltaMovement().scale(-1.0), i);
|
||||||
|
- }
|
||||||
|
+ ExperienceOrb.awardWithDirection(serverLevel, result.getLocation(), this.getDeltaMovement().scale(-1.0), i, org.bukkit.entity.ExperienceOrb.SpawnReason.EXP_BOTTLE, this.getOwner(), this); // Paper
|
||||||
|
+ }
|
||||||
|
+ // Paper start - exp bottle event
|
||||||
|
+ if (event.getShowEffect()) {
|
||||||
|
+ this.level().levelEvent(net.minecraft.world.level.block.LevelEvent.PARTICLES_SPELL_POTION_SPLASH, this.blockPosition(), net.minecraft.world.item.alchemy.PotionContents.BASE_POTION_COLOR);
|
||||||
|
+ }
|
||||||
|
+ // Paper end - exp bottle event
|
||||||
|
|
||||||
|
- this.discard();
|
||||||
|
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,23 +1,15 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/ThrownLingeringPotion.java b/net/minecraft/world/entity/projectile/ThrownLingeringPotion.java
|
|
||||||
index c566e20f1f71f87dd7e92b78b36ce76b1d32ef1f..35492f6f1ebad32adbd79cc7e50d37fdcef84367 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/ThrownLingeringPotion.java
|
--- a/net/minecraft/world/entity/projectile/ThrownLingeringPotion.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/ThrownLingeringPotion.java
|
+++ b/net/minecraft/world/entity/projectile/ThrownLingeringPotion.java
|
||||||
@@ -30,7 +30,7 @@ public class ThrownLingeringPotion extends AbstractThrownPotion {
|
@@ -29,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
- public void onHitAsPotion(ServerLevel level, ItemStack stack, @Nullable Entity entity) {
|
- public void onHitAsPotion(ServerLevel level, ItemStack stack, HitResult hitResult) {
|
||||||
+ public boolean onHitAsPotion(ServerLevel level, ItemStack stack, @Nullable Entity entity, @Nullable net.minecraft.world.phys.HitResult hitResult) { // Paper - Pass HitResult // Paper - More projectile API
|
+ public boolean onHitAsPotion(ServerLevel level, ItemStack stack, HitResult hitResult) { // Paper - More projectile API
|
||||||
AreaEffectCloud areaEffectCloud = new AreaEffectCloud(this.level(), this.getX(), this.getY(), this.getZ());
|
AreaEffectCloud areaEffectCloud = new AreaEffectCloud(this.level(), this.getX(), this.getY(), this.getZ());
|
||||||
if (this.getOwner() instanceof LivingEntity livingEntity) {
|
if (this.getOwner() instanceof LivingEntity livingEntity) {
|
||||||
areaEffectCloud.setOwner(livingEntity);
|
areaEffectCloud.setOwner(livingEntity);
|
||||||
@@ -42,6 +42,15 @@ public class ThrownLingeringPotion extends AbstractThrownPotion {
|
@@ -41,6 +_,15 @@
|
||||||
areaEffectCloud.setWaitTime(10);
|
areaEffectCloud.setWaitTime(10);
|
||||||
areaEffectCloud.setRadiusPerTick(-areaEffectCloud.getRadius() / areaEffectCloud.getDuration());
|
areaEffectCloud.setRadiusPerTick(-areaEffectCloud.getRadius() / areaEffectCloud.getDuration());
|
||||||
areaEffectCloud.applyComponentsFromItemStack(stack);
|
areaEffectCloud.applyComponentsFromItemStack(stack);
|
@@ -1,39 +1,28 @@
|
|||||||
From 09671551669244ef4f259d8b27547e463d6795d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 15:37:42 +0200
|
|
||||||
Subject: [PATCH] paper File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/ThrownSplashPotion.java b/net/minecraft/world/entity/projectile/ThrownSplashPotion.java
|
|
||||||
index 13de6a2c8f4b04899af1687e827332c6a1874ab4..5be6707179c480cb33bf8ee9d40ec01b13d248df 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/ThrownSplashPotion.java
|
--- a/net/minecraft/world/entity/projectile/ThrownSplashPotion.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/ThrownSplashPotion.java
|
+++ b/net/minecraft/world/entity/projectile/ThrownSplashPotion.java
|
||||||
@@ -36,12 +36,13 @@ public class ThrownSplashPotion extends AbstractThrownPotion {
|
@@ -36,13 +_,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
- public void onHitAsPotion(ServerLevel level, ItemStack stack, @Nullable Entity entity) {
|
- public void onHitAsPotion(ServerLevel level, ItemStack stack, HitResult hitResult) {
|
||||||
+ public boolean onHitAsPotion(ServerLevel level, ItemStack stack, @Nullable Entity entity, @Nullable net.minecraft.world.phys.HitResult hitResult) { // Paper - Add HitResult parameter // Paper - More projectile API
|
+ public boolean onHitAsPotion(ServerLevel level, ItemStack stack, HitResult hitResult) { // Paper - More projectile API
|
||||||
PotionContents potionContents = stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY);
|
PotionContents potionContents = stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY);
|
||||||
float orDefault = stack.getOrDefault(DataComponents.POTION_DURATION_SCALE, 1.0F);
|
float orDefault = stack.getOrDefault(DataComponents.POTION_DURATION_SCALE, 1.0F);
|
||||||
Iterable<MobEffectInstance> allEffects = potionContents.getAllEffects();
|
Iterable<MobEffectInstance> allEffects = potionContents.getAllEffects();
|
||||||
AABB aabb = this.getBoundingBox().inflate(4.0, 2.0, 4.0);
|
AABB aabb = this.getBoundingBox().move(hitResult.getLocation().subtract(this.position()));
|
||||||
List<LivingEntity> entitiesOfClass = this.level().getEntitiesOfClass(LivingEntity.class, aabb);
|
AABB aabb1 = aabb.inflate(4.0, 2.0, 4.0);
|
||||||
|
List<LivingEntity> entitiesOfClass = this.level().getEntitiesOfClass(LivingEntity.class, aabb1);
|
||||||
+ java.util.Map<org.bukkit.entity.LivingEntity, Double> affected = new java.util.HashMap<>(); // CraftBukkit
|
+ java.util.Map<org.bukkit.entity.LivingEntity, Double> affected = new java.util.HashMap<>(); // CraftBukkit
|
||||||
|
float f = ProjectileUtil.computeMargin(this);
|
||||||
if (!entitiesOfClass.isEmpty()) {
|
if (!entitiesOfClass.isEmpty()) {
|
||||||
Entity effectSource = this.getEffectSource();
|
Entity effectSource = this.getEffectSource();
|
||||||
|
@@ -51,8 +_,25 @@
|
||||||
@@ -50,12 +51,31 @@ public class ThrownSplashPotion extends AbstractThrownPotion {
|
if (livingEntity.isAffectedByPotions()) {
|
||||||
double d = this.distanceToSqr(livingEntity);
|
double d = aabb.distanceToSqr(livingEntity.getBoundingBox().inflate(f));
|
||||||
if (d < 16.0) {
|
if (d < 16.0) {
|
||||||
double d1;
|
- double d1 = 1.0 - Math.sqrt(d) / 4.0;
|
||||||
+ // Paper - diff on change, used when calling the splash event for water splash potions
|
-
|
||||||
if (livingEntity == entity) {
|
+ double d1 = 1.0 - Math.sqrt(d) / 4.0; // Paper - diff on change, used when calling the splash event for water splash potions
|
||||||
d1 = 1.0;
|
|
||||||
} else {
|
|
||||||
d1 = 1.0 - Math.sqrt(d) / 4.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ affected.put(livingEntity.getBukkitLivingEntity(), d1);
|
+ affected.put(livingEntity.getBukkitLivingEntity(), d1);
|
||||||
+ }
|
+ }
|
||||||
@@ -55,7 +44,7 @@ index 13de6a2c8f4b04899af1687e827332c6a1874ab4..5be6707179c480cb33bf8ee9d40ec01b
|
|||||||
for (MobEffectInstance mobEffectInstance : allEffects) {
|
for (MobEffectInstance mobEffectInstance : allEffects) {
|
||||||
Holder<MobEffect> effect = mobEffectInstance.getEffect();
|
Holder<MobEffect> effect = mobEffectInstance.getEffect();
|
||||||
if (effect.value().isInstantenous()) {
|
if (effect.value().isInstantenous()) {
|
||||||
@@ -66,7 +86,7 @@ public class ThrownSplashPotion extends AbstractThrownPotion {
|
@@ -63,7 +_,7 @@
|
||||||
effect, i, mobEffectInstance.getAmplifier(), mobEffectInstance.isAmbient(), mobEffectInstance.isVisible()
|
effect, i, mobEffectInstance.getAmplifier(), mobEffectInstance.isAmbient(), mobEffectInstance.isVisible()
|
||||||
);
|
);
|
||||||
if (!mobEffectInstance1.endsWithin(20)) {
|
if (!mobEffectInstance1.endsWithin(20)) {
|
||||||
@@ -64,7 +53,7 @@ index 13de6a2c8f4b04899af1687e827332c6a1874ab4..5be6707179c480cb33bf8ee9d40ec01b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,5 +94,6 @@ public class ThrownSplashPotion extends AbstractThrownPotion {
|
@@ -71,5 +_,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user