Update to Minecraft 1.18-pre5

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2021-11-22 09:00:00 +11:00
parent a852b81a69
commit 43702a9e10
700 changed files with 10286 additions and 10098 deletions

View File

@@ -17,35 +17,35 @@
}
if (object != null && !flag) {
- this.a((MovingObjectPosition) object);
- this.onHit((MovingObjectPosition) object);
+ this.preOnHit((MovingObjectPosition) object); // CraftBukkit - projectile hit event
this.hasImpulse = true;
}
@@ -357,7 +363,13 @@
int k = entity.getFireTicks();
int k = entity.getRemainingFireTicks();
if (this.isBurning() && !flag) {
- entity.setOnFire(5);
if (this.isOnFire() && !flag) {
- entity.setSecondsOnFire(5);
+ // CraftBukkit start
+ EntityCombustByEntityEvent combustEvent = new EntityCombustByEntityEvent(this.getBukkitEntity(), entity.getBukkitEntity(), 5);
+ org.bukkit.Bukkit.getPluginManager().callEvent(combustEvent);
+ if (!combustEvent.isCancelled()) {
+ entity.setOnFire(combustEvent.getDuration(), false);
+ entity.setSecondsOnFire(combustEvent.getDuration(), false);
+ }
+ // CraftBukkit end
}
if (entity.damageEntity(damagesource, (float) i)) {
if (entity.hurt(damagesource, (float) i)) {
@@ -519,7 +531,22 @@
@Override
public void pickup(EntityHuman entityhuman) {
if (!this.level.isClientSide && (this.inGround || this.t()) && this.shakeTime <= 0) {
- if (this.a(entityhuman)) {
public void playerTouch(EntityHuman entityhuman) {
if (!this.level.isClientSide && (this.inGround || this.isNoPhysics()) && this.shakeTime <= 0) {
- if (this.tryPickup(entityhuman)) {
+ // CraftBukkit start
+ ItemStack itemstack = this.getItemStack();
+ ItemStack itemstack = this.getPickupItem();
+ if (this.pickup == PickupStatus.ALLOWED && !itemstack.isEmpty() && entityhuman.getInventory().canHold(itemstack) > 0) {
+ EntityItem item = new EntityItem(this.level, this.locX(), this.locY(), this.locZ(), itemstack);
+ EntityItem item = new EntityItem(this.level, this.getX(), this.getY(), this.getZ(), itemstack);
+ PlayerPickupArrowEvent event = new PlayerPickupArrowEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), new org.bukkit.craftbukkit.entity.CraftItem(this.level.getCraftServer(), this, item), (org.bukkit.entity.AbstractArrow) this.getBukkitEntity());
+ // event.setCancelled(!entityhuman.canPickUpLoot); TODO
+ this.level.getCraftServer().getPluginManager().callEvent(event);
@@ -53,11 +53,11 @@
+ if (event.isCancelled()) {
+ return;
+ }
+ itemstack = item.getItemStack();
+ itemstack = item.getItem();
+ }
+
+ if ((this.pickup == EntityArrow.PickupStatus.ALLOWED && entityhuman.getInventory().pickup(itemstack)) || (this.pickup == EntityArrow.PickupStatus.CREATIVE_ONLY && entityhuman.getAbilities().instabuild)) {
+ if ((this.pickup == EntityArrow.PickupStatus.ALLOWED && entityhuman.getInventory().add(itemstack)) || (this.pickup == EntityArrow.PickupStatus.CREATIVE_ONLY && entityhuman.getAbilities().instabuild)) {
+ // CraftBukkit end
entityhuman.receive(this, 1);
this.die();
entityhuman.take(this, 1);
this.discard();
}

View File

@@ -17,8 +17,8 @@
public EntityEgg(EntityTypes<? extends EntityEgg> entitytypes, World world) {
@@ -48,20 +57,40 @@
protected void a(MovingObjectPosition movingobjectposition) {
super.a(movingobjectposition);
protected void onHit(MovingObjectPosition movingobjectposition) {
super.onHit(movingobjectposition);
if (!this.level.isClientSide) {
- if (this.random.nextInt(8) == 0) {
+ boolean hatching = this.random.nextInt(8) == 0; // CraftBukkit
@@ -30,14 +30,14 @@
}
- for (int i = 0; i < b0; ++i) {
- EntityChicken entitychicken = (EntityChicken) EntityTypes.CHICKEN.a(this.level);
- EntityChicken entitychicken = (EntityChicken) EntityTypes.CHICKEN.create(this.level);
+ // CraftBukkit start
+ if (!hatching) {
+ b0 = 0;
+ }
+ EntityType hatchingType = EntityType.CHICKEN;
+
+ Entity shooter = this.getShooter();
+ Entity shooter = this.getOwner();
+ if (shooter instanceof EntityPlayer) {
+ PlayerEggThrowEvent event = new PlayerEggThrowEvent((Player) shooter.getBukkitEntity(), (org.bukkit.entity.Egg) this.getBukkitEntity(), hatching, b0, hatchingType);
+ this.level.getCraftServer().getPluginManager().callEvent(event);
@@ -47,12 +47,12 @@
+ hatchingType = event.getHatchingType();
+ }
- entitychicken.setAgeRaw(-24000);
- entitychicken.setPositionRotation(this.locX(), this.locY(), this.locZ(), this.getYRot(), 0.0F);
- this.level.addEntity(entitychicken);
- entitychicken.setAge(-24000);
- entitychicken.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F);
- this.level.addFreshEntity(entitychicken);
+ if (hatching) {
+ for (int i = 0; i < b0; ++i) {
+ Entity entity = level.getWorld().createEntity(new org.bukkit.Location(level.getWorld(), this.locX(), this.locY(), this.locZ(), this.getYRot(), 0.0F), hatchingType.getEntityClass());
+ Entity entity = level.getWorld().createEntity(new org.bukkit.Location(level.getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F), hatchingType.getEntityClass());
+ if (entity.getBukkitEntity() instanceof Ageable) {
+ ((Ageable) entity.getBukkitEntity()).setBaby();
+ }
@@ -62,4 +62,4 @@
+ // CraftBukkit end
}
this.level.broadcastEntityEffect(this, (byte) 3);
this.level.broadcastEntityEvent(this, (byte) 3);

View File

@@ -17,12 +17,12 @@
@@ -53,21 +60,34 @@
EntityPlayer entityplayer = (EntityPlayer) entity;
if (entityplayer.connection.a().isConnected() && entityplayer.level == this.level && !entityplayer.isSleeping()) {
if (entityplayer.connection.getConnection().isConnected() && entityplayer.level == this.level && !entityplayer.isSleeping()) {
- if (this.random.nextFloat() < 0.05F && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) {
- EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.a(this.level);
- EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.create(this.level);
-
- entityendermite.setPositionRotation(entity.locX(), entity.locY(), entity.locZ(), entity.getYRot(), entity.getXRot());
- this.level.addEntity(entityendermite);
- entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot());
- this.level.addFreshEntity(entityendermite);
+ // CraftBukkit start - Fire PlayerTeleportEvent
+ org.bukkit.craftbukkit.entity.CraftPlayer player = entityplayer.getBukkitEntity();
+ org.bukkit.Location location = getBukkitEntity().getLocation();
@@ -34,10 +34,10 @@
+
+ if (!teleEvent.isCancelled() && !entityplayer.connection.isDisconnected()) {
+ if (this.random.nextFloat() < 0.05F && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) {
+ EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.a(this.level);
+ EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.create(this.level);
+
+ entityendermite.setPositionRotation(entity.locX(), entity.locY(), entity.locZ(), entity.getYRot(), entity.getXRot());
+ this.level.addEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL);
+ entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot());
+ this.level.addFreshEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL);
+ }
+
+ if (entity.isPassenger()) {
@@ -45,30 +45,30 @@
+ }
+
+ entityplayer.connection.teleport(teleEvent.getTo());
+ entity.fallDistance = 0.0F;
+ entity.resetFallDistance();
+ CraftEventFactory.entityDamage = this;
+ entity.damageEntity(DamageSource.FALL, 5.0F);
+ entity.hurt(DamageSource.FALL, 5.0F);
+ CraftEventFactory.entityDamage = null;
}
-
- if (entity.isPassenger()) {
- entityplayer.a(this.locX(), this.locY(), this.locZ());
- entityplayer.dismountTo(this.getX(), this.getY(), this.getZ());
- } else {
- entity.enderTeleportTo(this.locX(), this.locY(), this.locZ());
- entity.teleportTo(this.getX(), this.getY(), this.getZ());
- }
-
- entity.fallDistance = 0.0F;
- entity.damageEntity(DamageSource.FALL, 5.0F);
- entity.resetFallDistance();
- entity.hurt(DamageSource.FALL, 5.0F);
+ // CraftBukkit end
}
} else if (entity != null) {
entity.enderTeleportTo(this.locX(), this.locY(), this.locZ());
entity.teleportTo(this.getX(), this.getY(), this.getZ());
@@ -96,7 +116,7 @@
public Entity b(WorldServer worldserver) {
Entity entity = this.getShooter();
public Entity changeDimension(WorldServer worldserver) {
Entity entity = this.getOwner();
- if (entity != null && entity.level.getDimensionKey() != worldserver.getDimensionKey()) {
+ if (entity != null && worldserver != null && entity.level.getDimensionKey() != worldserver.getDimensionKey()) { // CraftBukkit - SPIGOT-6113
this.setShooter((Entity) null);
- if (entity != null && entity.level.dimension() != worldserver.dimension()) {
+ if (entity != null && worldserver != null && entity.level.dimension() != worldserver.dimension()) { // CraftBukkit - SPIGOT-6113
this.setOwner((Entity) null);
}

View File

@@ -1,19 +1,17 @@
--- a/net/minecraft/world/entity/projectile/EntityEnderSignal.java
+++ b/net/minecraft/world/entity/projectile/EntityEnderSignal.java
@@ -38,8 +38,8 @@
@@ -38,7 +38,7 @@
}
public void setItem(ItemStack itemstack) {
- if (!itemstack.a(Items.ENDER_EYE) || itemstack.hasTag()) {
- this.getDataWatcher().set(EntityEnderSignal.DATA_ITEM_STACK, (ItemStack) SystemUtils.a((Object) itemstack.cloneItemStack(), (itemstack1) -> {
+ if (true || !itemstack.a(Items.ENDER_EYE) || itemstack.hasTag()) { // CraftBukkit - always allow item changing
+ this.getDataWatcher().set(EntityEnderSignal.DATA_ITEM_STACK, (ItemStack) SystemUtils.a(itemstack.cloneItemStack(), (itemstack1) -> { // CraftBukkit - decompile error
- if (!itemstack.is(Items.ENDER_EYE) || itemstack.hasTag()) {
+ if (true || !itemstack.is(Items.ENDER_EYE) || itemstack.hasTag()) { // CraftBukkit - always allow item changing
this.getEntityData().set(EntityEnderSignal.DATA_ITEM_STACK, (ItemStack) SystemUtils.make(itemstack.copy(), (itemstack1) -> {
itemstack1.setCount(1);
}));
}
@@ -182,7 +182,7 @@
public void loadData(NBTTagCompound nbttagcompound) {
ItemStack itemstack = ItemStack.a(nbttagcompound.getCompound("Item"));
public void readAdditionalSaveData(NBTTagCompound nbttagcompound) {
ItemStack itemstack = ItemStack.of(nbttagcompound.getCompound("Item"));
- this.setItem(itemstack);
+ if (!itemstack.isEmpty()) this.setItem(itemstack); // CraftBukkit - SPIGOT-6103 summon, see also SPIGOT-5474

View File

@@ -5,8 +5,8 @@
if (entityliving.isAlive() && !entityliving.isInvulnerable() && entityliving != entityliving1) {
if (entityliving1 == null) {
+ org.bukkit.craftbukkit.event.CraftEventFactory.entityDamage = this; // CraftBukkit
entityliving.damageEntity(DamageSource.MAGIC, 6.0F);
entityliving.hurt(DamageSource.MAGIC, 6.0F);
+ org.bukkit.craftbukkit.event.CraftEventFactory.entityDamage = null; // CraftBukkit
} else {
if (entityliving1.p(entityliving)) {
if (entityliving1.isAlliedTo((Entity) entityliving)) {
return;

View File

@@ -18,8 +18,8 @@
super(entitytypes, world);
@@ -28,6 +32,12 @@
this(entitytypes, world);
this.setPositionRotation(d0, d1, d2, this.getYRot(), this.getXRot());
this.ah();
this.moveTo(d0, d1, d2, this.getYRot(), this.getXRot());
this.reapplyPosition();
+ // CraftBukkit start - Added setDirection method
+ this.setDirection(d3, d4, d5);
+ }
@@ -30,10 +30,10 @@
if (d6 != 0.0D) {
@@ -74,7 +84,13 @@
MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a);
MovingObjectPosition movingobjectposition = ProjectileHelper.getHitResult(this, this::canHitEntity);
if (movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS) {
- this.a(movingobjectposition);
- this.onHit(movingobjectposition);
+ this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event
+
+ // CraftBukkit start - Fire ProjectileHitEvent
@@ -43,7 +43,7 @@
+ // CraftBukkit end
}
this.checkBlockCollisions();
this.checkInsideBlocks();
@@ -159,6 +175,11 @@
Entity entity = damagesource.getEntity();
@@ -53,6 +53,6 @@
+ return false;
+ }
+ // CraftBukkit end
Vec3D vec3d = entity.getLookDirection();
Vec3D vec3d = entity.getLookAngle();
this.setMot(vec3d);
this.setDeltaMovement(vec3d);

View File

@@ -1,17 +1,8 @@
--- a/net/minecraft/world/entity/projectile/EntityFireballFireball.java
+++ b/net/minecraft/world/entity/projectile/EntityFireballFireball.java
@@ -29,7 +29,7 @@
public void setItem(ItemStack itemstack) {
if (!itemstack.a(Items.FIRE_CHARGE) || itemstack.hasTag()) {
- this.getDataWatcher().set(EntityFireballFireball.DATA_ITEM_STACK, (ItemStack) SystemUtils.a((Object) itemstack.cloneItemStack(), (itemstack1) -> {
+ this.getDataWatcher().set(EntityFireballFireball.DATA_ITEM_STACK, (ItemStack) SystemUtils.a(itemstack.cloneItemStack(), (itemstack1) -> { // CraftBukkit - decompile error
itemstack1.setCount(1);
}));
}
@@ -68,6 +68,6 @@
super.loadData(nbttagcompound);
ItemStack itemstack = ItemStack.a(nbttagcompound.getCompound("Item"));
super.readAdditionalSaveData(nbttagcompound);
ItemStack itemstack = ItemStack.of(nbttagcompound.getCompound("Item"));
- this.setItem(itemstack);
+ if (!itemstack.isEmpty()) this.setItem(itemstack); // CraftBukkit - SPIGOT-5474 probably came from bugged earlier versions

View File

@@ -8,12 +8,12 @@
+
public class EntityFireworks extends IProjectile implements ItemSupplier {
public static final DataWatcherObject<ItemStack> DATA_ID_FIREWORKS_ITEM = DataWatcher.a(EntityFireworks.class, DataWatcherRegistry.ITEM_STACK);
public static final DataWatcherObject<ItemStack> DATA_ID_FIREWORKS_ITEM = DataWatcher.defineId(EntityFireworks.class, DataWatcherRegistry.ITEM_STACK);
@@ -141,7 +143,7 @@
MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a);
MovingObjectPosition movingobjectposition = ProjectileHelper.getHitResult(this, this::canHitEntity);
if (!this.noPhysics) {
- this.a(movingobjectposition);
- this.onHit(movingobjectposition);
+ this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event
this.hasImpulse = true;
}
@@ -32,8 +32,8 @@
}
@@ -172,7 +178,11 @@
protected void a(MovingObjectPositionEntity movingobjectpositionentity) {
super.a(movingobjectpositionentity);
protected void onHitEntity(MovingObjectPositionEntity movingobjectpositionentity) {
super.onHitEntity(movingobjectpositionentity);
if (!this.level.isClientSide) {
- this.explode();
+ // CraftBukkit start
@@ -46,8 +46,8 @@
@@ -182,7 +192,11 @@
this.level.getType(blockposition).a(this.level, blockposition, (Entity) this);
if (!this.level.isClientSide() && this.hasExplosions()) {
this.level.getBlockState(blockposition).entityInside(this.level, blockposition, this);
if (!this.level.isClientSide() && this.hasExplosion()) {
- this.explode();
+ // CraftBukkit start
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this).isCancelled()) {
@@ -56,23 +56,23 @@
+ // CraftBukkit end
}
super.a(movingobjectpositionblock);
super.onHitBlock(movingobjectpositionblock);
@@ -208,7 +222,9 @@
if (f > 0.0F) {
if (this.attachedToEntity != null) {
+ CraftEventFactory.entityDamage = this; // CraftBukkit
this.attachedToEntity.damageEntity(DamageSource.a(this, this.getShooter()), 5.0F + (float) (nbttaglist.size() * 2));
this.attachedToEntity.hurt(DamageSource.fireworks(this, this.getOwner()), 5.0F + (float) (nbttaglist.size() * 2));
+ CraftEventFactory.entityDamage = null; // CraftBukkit
}
double d0 = 5.0D;
@@ -235,7 +251,9 @@
if (flag) {
float f1 = f * (float) Math.sqrt((5.0D - (double) this.e((Entity) entityliving)) / 5.0D);
float f1 = f * (float) Math.sqrt((5.0D - (double) this.distanceTo(entityliving)) / 5.0D);
+ CraftEventFactory.entityDamage = this; // CraftBukkit
entityliving.damageEntity(DamageSource.a(this, this.getShooter()), f1);
entityliving.hurt(DamageSource.fireworks(this, this.getOwner()), f1);
+ CraftEventFactory.entityDamage = null; // CraftBukkit
}
}

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/entity/projectile/EntityFishingHook.java
+++ b/net/minecraft/world/entity/projectile/EntityFishingHook.java
@@ -45,6 +45,12 @@
@@ -44,6 +44,12 @@
import net.minecraft.world.phys.MovingObjectPositionEntity;
import net.minecraft.world.phys.Vec3D;
@@ -13,7 +13,7 @@
public class EntityFishingHook extends IProjectile {
private final Random syncronizedRandom;
@@ -65,6 +71,12 @@
@@ -64,6 +70,12 @@
private final int luck;
private final int lureSpeed;
@@ -26,41 +26,41 @@
private EntityFishingHook(EntityTypes<? extends EntityFishingHook> entitytypes, World world, int i, int j) {
super(entitytypes, world);
this.syncronizedRandom = new Random();
@@ -259,7 +271,7 @@
private void l() {
MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a);
@@ -258,7 +270,7 @@
private void checkCollision() {
MovingObjectPosition movingobjectposition = ProjectileHelper.getHitResult(this, this::canHitEntity);
- this.a(movingobjectposition);
- this.onHit(movingobjectposition);
+ this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event
}
@Override
@@ -306,6 +318,10 @@
@@ -305,6 +317,10 @@
this.timeUntilLured = 0;
this.timeUntilHooked = 0;
this.getDataWatcher().set(EntityFishingHook.DATA_BITING, false);
this.getEntityData().set(EntityFishingHook.DATA_BITING, false);
+ // CraftBukkit start
+ PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) this.getOwner().getBukkitEntity(), null, (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.FAILED_ATTEMPT);
+ PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) this.getPlayerOwner().getBukkitEntity(), null, (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.FAILED_ATTEMPT);
+ this.level.getCraftServer().getPluginManager().callEvent(playerFishEvent);
+ // CraftBukkit end
}
} else {
float f;
@@ -339,6 +355,13 @@
worldserver.a(Particles.FISHING, d0, d1, d2, 0, (double) (-f4), 0.01D, (double) f3, 1.0D);
@@ -338,6 +354,13 @@
worldserver.sendParticles(Particles.FISHING, d0, d1, d2, 0, (double) (-f4), 0.01D, (double) f3, 1.0D);
}
} else {
+ // CraftBukkit start
+ PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) this.getOwner().getBukkitEntity(), null, (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.BITE);
+ PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) this.getPlayerOwner().getBukkitEntity(), null, (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.BITE);
+ this.level.getCraftServer().getPluginManager().callEvent(playerFishEvent);
+ if (playerFishEvent.isCancelled()) {
+ return;
+ }
+ // CraftBukkit end
this.playSound(SoundEffects.FISHING_BOBBER_SPLASH, 0.25F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.4F);
double d3 = this.locY() + 0.5D;
double d3 = this.getY() + 0.5D;
@@ -375,8 +398,10 @@
@@ -374,8 +397,10 @@
this.timeUntilHooked = MathHelper.nextInt(this.random, 20, 80);
}
} else {
@@ -73,7 +73,7 @@
}
}
@@ -443,6 +468,14 @@
@@ -442,6 +467,14 @@
int i = 0;
if (this.hookedIn != null) {
@@ -85,13 +85,13 @@
+ return 0;
+ }
+ // CraftBukkit end
this.reel(this.hookedIn);
CriterionTriggers.FISHING_ROD_HOOKED.a((EntityPlayer) entityhuman, itemstack, this, (Collection) Collections.emptyList());
this.level.broadcastEntityEffect(this, (byte) 31);
@@ -458,6 +491,15 @@
this.pullEntity(this.hookedIn);
CriterionTriggers.FISHING_ROD_HOOKED.trigger((EntityPlayer) entityhuman, itemstack, this, Collections.emptyList());
this.level.broadcastEntityEvent(this, (byte) 31);
@@ -457,6 +490,15 @@
while (iterator.hasNext()) {
ItemStack itemstack1 = (ItemStack) iterator.next();
EntityItem entityitem = new EntityItem(this.level, this.locX(), this.locY(), this.locZ(), itemstack1);
EntityItem entityitem = new EntityItem(this.level, this.getX(), this.getY(), this.getZ(), itemstack1);
+ // CraftBukkit start
+ PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) entityhuman.getBukkitEntity(), entityitem.getBukkitEntity(), (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.CAUGHT_FISH);
+ playerFishEvent.setExpToDrop(this.random.nextInt(6) + 1);
@@ -101,23 +101,23 @@
+ return 0;
+ }
+ // CraftBukkit end
double d0 = entityhuman.locX() - this.locX();
double d1 = entityhuman.locY() - this.locY();
double d2 = entityhuman.locZ() - this.locZ();
@@ -465,7 +507,11 @@
double d0 = entityhuman.getX() - this.getX();
double d1 = entityhuman.getY() - this.getY();
double d2 = entityhuman.getZ() - this.getZ();
@@ -464,7 +506,11 @@
entityitem.setMot(d0 * 0.1D, d1 * 0.1D + Math.sqrt(Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2)) * 0.08D, d2 * 0.1D);
this.level.addEntity(entityitem);
- entityhuman.level.addEntity(new EntityExperienceOrb(entityhuman.level, entityhuman.locX(), entityhuman.locY() + 0.5D, entityhuman.locZ() + 0.5D, this.random.nextInt(6) + 1));
entityitem.setDeltaMovement(d0 * 0.1D, d1 * 0.1D + Math.sqrt(Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2)) * 0.08D, d2 * 0.1D);
this.level.addFreshEntity(entityitem);
- entityhuman.level.addFreshEntity(new EntityExperienceOrb(entityhuman.level, entityhuman.getX(), entityhuman.getY() + 0.5D, entityhuman.getZ() + 0.5D, this.random.nextInt(6) + 1));
+ // CraftBukkit start - this.random.nextInt(6) + 1 -> playerFishEvent.getExpToDrop()
+ if (playerFishEvent.getExpToDrop() > 0) {
+ entityhuman.level.addEntity(new EntityExperienceOrb(entityhuman.level, entityhuman.locX(), entityhuman.locY() + 0.5D, entityhuman.locZ() + 0.5D, playerFishEvent.getExpToDrop()));
+ entityhuman.level.addFreshEntity(new EntityExperienceOrb(entityhuman.level, entityhuman.getX(), entityhuman.getY() + 0.5D, entityhuman.getZ() + 0.5D, playerFishEvent.getExpToDrop()));
+ }
+ // CraftBukkit end
if (itemstack1.a((Tag) TagsItem.FISHES)) {
entityhuman.a(StatisticList.FISH_CAUGHT, 1);
if (itemstack1.is((Tag) TagsItem.FISHES)) {
entityhuman.awardStat(StatisticList.FISH_CAUGHT, 1);
}
@@ -475,8 +521,25 @@
@@ -474,8 +520,25 @@
}
if (this.onGround) {
@@ -141,5 +141,5 @@
+ }
+ // CraftBukkit end
this.die();
this.discard();
return i;

View File

@@ -26,23 +26,23 @@
if (!this.level.isClientSide) {
boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
- this.level.createExplosion((Entity) null, this.locX(), this.locY(), this.locZ(), (float) this.explosionPower, flag, flag ? Explosion.Effect.DESTROY : Explosion.Effect.NONE);
- this.level.explode((Entity) null, this.getX(), this.getY(), this.getZ(), (float) this.explosionPower, flag, flag ? Explosion.Effect.DESTROY : Explosion.Effect.NONE);
+ // CraftBukkit start - fire ExplosionPrimeEvent
+ ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity());
+ this.level.getCraftServer().getPluginManager().callEvent(event);
+
+ if (!event.isCancelled()) {
+ // give 'this' instead of (Entity) null so we know what causes the damage
+ this.level.createExplosion(this, this.locX(), this.locY(), this.locZ(), event.getRadius(), event.getFire(), flag ? Explosion.Effect.DESTROY : Explosion.Effect.NONE);
+ this.level.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), flag ? Explosion.Effect.DESTROY : Explosion.Effect.NONE);
+ }
+ // CraftBukkit end
this.die();
this.discard();
}
@@ -61,7 +73,8 @@
public void loadData(NBTTagCompound nbttagcompound) {
super.loadData(nbttagcompound);
if (nbttagcompound.hasKeyOfType("ExplosionPower", 99)) {
public void readAdditionalSaveData(NBTTagCompound nbttagcompound) {
super.readAdditionalSaveData(nbttagcompound);
if (nbttagcompound.contains("ExplosionPower", 99)) {
- this.explosionPower = nbttagcompound.getByte("ExplosionPower");
+ // CraftBukkit - set bukkitYield when setting explosionpower
+ bukkitYield = this.explosionPower = nbttagcompound.getByte("ExplosionPower");

View File

@@ -1,11 +1,11 @@
--- a/net/minecraft/world/entity/projectile/EntityLlamaSpit.java
+++ b/net/minecraft/world/entity/projectile/EntityLlamaSpit.java
@@ -33,7 +33,7 @@
Vec3D vec3d = this.getMot();
MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a);
Vec3D vec3d = this.getDeltaMovement();
MovingObjectPosition movingobjectposition = ProjectileHelper.getHitResult(this, this::canHitEntity);
- this.a(movingobjectposition);
- this.onHit(movingobjectposition);
+ this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event
double d0 = this.locX() + vec3d.x;
double d1 = this.locY() + vec3d.y;
double d2 = this.locZ() + vec3d.z;
double d0 = this.getX() + vec3d.x;
double d1 = this.getY() + vec3d.y;
double d2 = this.getZ() + vec3d.z;

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/entity/projectile/EntityPotion.java
+++ b/net/minecraft/world/entity/projectile/EntityPotion.java
@@ -34,6 +34,16 @@
@@ -33,6 +33,16 @@
import net.minecraft.world.phys.MovingObjectPositionBlock;
import net.minecraft.world.phys.MovingObjectPositionEntity;
@@ -17,24 +17,24 @@
public class EntityPotion extends EntityProjectileThrowable implements ItemSupplier {
public static final double SPLASH_RANGE = 4.0D;
@@ -100,7 +110,7 @@
@@ -99,7 +109,7 @@
if (flag) {
this.splash();
this.applyWater();
- } else if (!list.isEmpty()) {
+ } else if (true || !list.isEmpty()) { // CraftBukkit - Call event even if no effects to apply
if (this.isLingering()) {
this.a(itemstack, potionregistry);
this.makeAreaOfEffectCloud(itemstack, potionregistry);
} else {
@@ -146,6 +156,7 @@
private void a(List<MobEffect> list, @Nullable Entity entity) {
AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(4.0D, 2.0D, 4.0D);
List<EntityLiving> list1 = this.level.a(EntityLiving.class, axisalignedbb);
@@ -145,6 +155,7 @@
private void applySplash(List<MobEffect> list, @Nullable Entity entity) {
AxisAlignedBB axisalignedbb = this.getBoundingBox().inflate(4.0D, 2.0D, 4.0D);
List<EntityLiving> list1 = this.level.getEntitiesOfClass(EntityLiving.class, axisalignedbb);
+ Map<LivingEntity, Double> affected = new HashMap<LivingEntity, Double>(); // CraftBukkit
if (!list1.isEmpty()) {
Entity entity1 = this.x();
@@ -164,21 +175,47 @@
Entity entity1 = this.getEffectSource();
@@ -163,21 +174,47 @@
d1 = 1.0D;
}
@@ -48,7 +48,7 @@
+
+ org.bukkit.event.entity.PotionSplashEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPotionSplashEvent(this, affected);
+ if (!event.isCancelled() && list != null && !list.isEmpty()) { // do not process effects if there are no effects to process
+ Entity entity1 = this.x();
+ Entity entity1 = this.getEffectSource();
+ for (LivingEntity victim : event.getAffectedEntities()) {
+ if (!(victim instanceof CraftLivingEntity)) {
+ continue;
@@ -62,9 +62,9 @@
+
+ while (iterator1.hasNext()) {
+ MobEffect mobeffect = (MobEffect) iterator1.next();
+ MobEffectList mobeffectlist = mobeffect.getMobEffect();
+ MobEffectList mobeffectlist = mobeffect.getEffect();
+ // CraftBukkit start - Abide by PVP settings - for players only!
+ if (!this.level.pvpMode && this.getShooter() instanceof EntityPlayer && entityliving instanceof EntityPlayer && entityliving != this.getShooter()) {
+ if (!this.level.pvpMode && this.getOwner() instanceof EntityPlayer && entityliving instanceof EntityPlayer && entityliving != this.getOwner()) {
+ int i = MobEffectList.getId(mobeffectlist);
+ // Block SLOWER_MOVEMENT, SLOWER_DIG, HARM, BLINDNESS, HUNGER, WEAKNESS and POISON potions
+ if (i == 2 || i == 4 || i == 7 || i == 15 || i == 17 || i == 18 || i == 19) {
@@ -73,71 +73,71 @@
+ }
+ // CraftBukkit end
+
+ if (mobeffectlist.isInstant()) {
+ mobeffectlist.applyInstantEffect(this, this.getShooter(), entityliving, mobeffect.getAmplifier(), d1);
+ if (mobeffectlist.isInstantenous()) {
+ mobeffectlist.applyInstantenousEffect(this, this.getOwner(), entityliving, mobeffect.getAmplifier(), d1);
+ } else {
+ int i = (int) (d1 * (double) mobeffect.getDuration() + 0.5D);
- while (iterator1.hasNext()) {
- MobEffect mobeffect = (MobEffect) iterator1.next();
- MobEffectList mobeffectlist = mobeffect.getMobEffect();
- MobEffectList mobeffectlist = mobeffect.getEffect();
-
- if (mobeffectlist.isInstant()) {
- mobeffectlist.applyInstantEffect(this, this.getShooter(), entityliving, mobeffect.getAmplifier(), d1);
- if (mobeffectlist.isInstantenous()) {
- mobeffectlist.applyInstantenousEffect(this, this.getOwner(), entityliving, mobeffect.getAmplifier(), d1);
- } else {
- int i = (int) (d1 * (double) mobeffect.getDuration() + 0.5D);
-
- if (i > 20) {
- entityliving.addEffect(new MobEffect(mobeffectlist, i, mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isShowParticles()), entity1);
- entityliving.addEffect(new MobEffect(mobeffectlist, i, mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isVisible()), entity1);
- }
- }
+ if (i > 20) {
+ entityliving.addEffect(new MobEffect(mobeffectlist, i, mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isShowParticles()), entity1, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.POTION_SPLASH); // CraftBukkit
+ entityliving.addEffect(new MobEffect(mobeffectlist, i, mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isVisible()), entity1, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.POTION_SPLASH); // CraftBukkit
}
}
}
@@ -214,7 +251,14 @@
entityareaeffectcloud.setColor(nbttagcompound.getInt("CustomPotionColor"));
@@ -213,7 +250,14 @@
entityareaeffectcloud.setFixedColor(nbttagcompound.getInt("CustomPotionColor"));
}
- this.level.addEntity(entityareaeffectcloud);
- this.level.addFreshEntity(entityareaeffectcloud);
+ // CraftBukkit start
+ org.bukkit.event.entity.LingeringPotionSplashEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callLingeringPotionSplashEvent(this, entityareaeffectcloud);
+ if (!(event.isCancelled() || entityareaeffectcloud.isRemoved())) {
+ this.level.addEntity(entityareaeffectcloud);
+ this.level.addFreshEntity(entityareaeffectcloud);
+ } else {
+ entityareaeffectcloud.die();
+ entityareaeffectcloud.discard();
+ }
+ // CraftBukkit end
}
public boolean isLingering() {
@@ -225,13 +269,25 @@
IBlockData iblockdata = this.level.getType(blockposition);
@@ -224,13 +268,25 @@
IBlockData iblockdata = this.level.getBlockState(blockposition);
if (iblockdata.a((Tag) TagsBlock.FIRE)) {
- this.level.a(blockposition, false);
if (iblockdata.is((Tag) TagsBlock.FIRE)) {
- this.level.removeBlock(blockposition, false);
+ // CraftBukkit start
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, Blocks.AIR.getBlockData()).isCancelled()) {
+ this.level.a(blockposition, false);
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, Blocks.AIR.defaultBlockState()).isCancelled()) {
+ this.level.removeBlock(blockposition, false);
+ }
+ // CraftBukkit end
} else if (AbstractCandleBlock.b(iblockdata)) {
- AbstractCandleBlock.a((EntityHuman) null, iblockdata, (GeneratorAccess) this.level, blockposition);
} else if (AbstractCandleBlock.isLit(iblockdata)) {
- AbstractCandleBlock.extinguish((EntityHuman) null, iblockdata, this.level, blockposition);
+ // CraftBukkit start
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.set(AbstractCandleBlock.LIT, false)).isCancelled()) {
+ AbstractCandleBlock.a((EntityHuman) null, iblockdata, (GeneratorAccess) this.level, blockposition);
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.setValue(AbstractCandleBlock.LIT, false)).isCancelled()) {
+ AbstractCandleBlock.extinguish((EntityHuman) null, iblockdata, this.level, blockposition);
+ }
+ // CraftBukkit end
} else if (BlockCampfire.g(iblockdata)) {
- this.level.a((EntityHuman) null, 1009, blockposition, 0);
- BlockCampfire.a(this.getShooter(), (GeneratorAccess) this.level, blockposition, iblockdata);
- this.level.setTypeUpdate(blockposition, (IBlockData) iblockdata.set(BlockCampfire.LIT, false));
} else if (BlockCampfire.isLitCampfire(iblockdata)) {
- this.level.levelEvent((EntityHuman) null, 1009, blockposition, 0);
- BlockCampfire.dowse(this.getOwner(), this.level, blockposition, iblockdata);
- this.level.setBlockAndUpdate(blockposition, (IBlockData) iblockdata.setValue(BlockCampfire.LIT, false));
+ // CraftBukkit start
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.set(BlockCampfire.LIT, false)).isCancelled()) {
+ this.level.a((EntityHuman) null, 1009, blockposition, 0);
+ BlockCampfire.a(this.getShooter(), (GeneratorAccess) this.level, blockposition, iblockdata);
+ this.level.setTypeUpdate(blockposition, (IBlockData) iblockdata.set(BlockCampfire.LIT, false));
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.setValue(BlockCampfire.LIT, false)).isCancelled()) {
+ this.level.levelEvent((EntityHuman) null, 1009, blockposition, 0);
+ BlockCampfire.dowse(this.getOwner(), this.level, blockposition, iblockdata);
+ this.level.setBlockAndUpdate(blockposition, (IBlockData) iblockdata.setValue(BlockCampfire.LIT, false));
+ }
+ // CraftBukkit end
}

View File

@@ -1,11 +1,11 @@
--- a/net/minecraft/world/entity/projectile/EntityProjectile.java
+++ b/net/minecraft/world/entity/projectile/EntityProjectile.java
@@ -67,7 +67,7 @@
@@ -66,7 +66,7 @@
}
if (movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS && !flag) {
- this.a(movingobjectposition);
- this.onHit(movingobjectposition);
+ this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event
}
this.checkBlockCollisions();
this.checkInsideBlocks();

View File

@@ -1,12 +1,10 @@
--- a/net/minecraft/world/entity/projectile/EntityProjectileThrowable.java
+++ b/net/minecraft/world/entity/projectile/EntityProjectileThrowable.java
@@ -29,8 +29,8 @@
@@ -30,7 +30,7 @@
public void setItem(ItemStack itemstack) {
if (!itemstack.a(this.getDefaultItem()) || itemstack.hasTag()) {
- this.getDataWatcher().set(EntityProjectileThrowable.DATA_ITEM_STACK, (ItemStack) SystemUtils.a((Object) itemstack.cloneItemStack(), (itemstack1) -> {
if (!itemstack.is(this.getDefaultItem()) || itemstack.hasTag()) {
this.getEntityData().set(EntityProjectileThrowable.DATA_ITEM_STACK, (ItemStack) SystemUtils.make(itemstack.copy(), (itemstack1) -> {
- itemstack1.setCount(1);
+ this.getDataWatcher().set(EntityProjectileThrowable.DATA_ITEM_STACK, (ItemStack) SystemUtils.a(itemstack.cloneItemStack(), (itemstack1) -> { // CraftBukkit - decompile error
+ if (!itemstack1.isEmpty()) itemstack1.setCount(1); // CraftBukkit
}));
}
@@ -21,6 +19,6 @@
+ }
+ // CraftBukkit end
+
public ItemStack getItem() {
return (ItemStack) this.getDataWatcher().get(EntityProjectileThrowable.DATA_ITEM_STACK);
public ItemStack getItemRaw() {
return (ItemStack) this.getEntityData().get(EntityProjectileThrowable.DATA_ITEM_STACK);
}

View File

@@ -3,7 +3,7 @@
@@ -60,8 +60,21 @@
this.finalTarget = entity;
this.currentMoveDirection = EnumDirection.UP;
this.a(enumdirection_enumaxis);
this.selectNextMoveDirection(enumdirection_enumaxis);
+ projectileSource = (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity(); // CraftBukkit
}
@@ -15,25 +15,25 @@
+ public void setTarget(Entity e) {
+ this.finalTarget = e;
+ this.currentMoveDirection = EnumDirection.UP;
+ this.a(EnumDirection.EnumAxis.X);
+ this.selectNextMoveDirection(EnumDirection.EnumAxis.X);
+ }
+ // CraftBukkit end
+
@Override
public SoundCategory getSoundCategory() {
public SoundCategory getSoundSource() {
return SoundCategory.HOSTILE;
@@ -225,7 +238,7 @@
MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a);
MovingObjectPosition movingobjectposition = ProjectileHelper.getHitResult(this, this::canHitEntity);
if (movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS) {
- this.a(movingobjectposition);
- this.onHit(movingobjectposition);
+ this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event
}
}
@@ -292,7 +305,7 @@
if (flag) {
this.a(entityliving, entity);
this.doEnchantDamageEffects(entityliving, entity);
if (entity instanceof EntityLiving) {
- ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.LEVITATION, 200), (Entity) MoreObjects.firstNonNull(entity1, this));
+ ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.LEVITATION, 200), (Entity) MoreObjects.firstNonNull(entity1, this), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ATTACK); // CraftBukkit
@@ -43,7 +43,7 @@
@@ -318,6 +331,11 @@
@Override
public boolean damageEntity(DamageSource damagesource, float f) {
public boolean hurt(DamageSource damagesource, float f) {
+ // CraftBukkit start
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f, false)) {
+ return false;
@@ -51,4 +51,4 @@
+ // CraftBukkit end
if (!this.level.isClientSide) {
this.playSound(SoundEffects.SHULKER_BULLET_HURT, 1.0F, 1.0F);
((WorldServer) this.level).a(Particles.CRIT, this.locX(), this.locY(), this.locZ(), 15, 0.2D, 0.2D, 0.2D, 0.0D);
((WorldServer) this.level).sendParticles(Particles.CRIT, this.getX(), this.getY(), this.getZ(), 15, 0.2D, 0.2D, 0.2D, 0.0D);

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/entity/projectile/EntitySmallFireball.java
+++ b/net/minecraft/world/entity/projectile/EntitySmallFireball.java
@@ -14,6 +14,8 @@
@@ -13,6 +13,8 @@
import net.minecraft.world.phys.MovingObjectPositionBlock;
import net.minecraft.world.phys.MovingObjectPositionEntity;
@@ -9,44 +9,44 @@
public class EntitySmallFireball extends EntityFireballFireball {
public EntitySmallFireball(EntityTypes<? extends EntitySmallFireball> entitytypes, World world) {
@@ -22,6 +24,11 @@
@@ -21,6 +23,11 @@
public EntitySmallFireball(World world, EntityLiving entityliving, double d0, double d1, double d2) {
super(EntityTypes.SMALL_FIREBALL, entityliving, d0, d1, d2, world);
+ // CraftBukkit start
+ if (this.getShooter() != null && this.getShooter() instanceof EntityInsentient) {
+ if (this.getOwner() != null && this.getOwner() instanceof EntityInsentient) {
+ isIncendiary = this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
+ }
+ // CraftBukkit end
}
public EntitySmallFireball(World world, double d0, double d1, double d2, double d3, double d4, double d5) {
@@ -38,7 +45,14 @@
Entity entity1 = this.getShooter();
int i = entity.getFireTicks();
@@ -37,7 +44,14 @@
Entity entity1 = this.getOwner();
int i = entity.getRemainingFireTicks();
- entity.setOnFire(5);
- entity.setSecondsOnFire(5);
+ // CraftBukkit start - Entity damage by entity event + combust event
+ EntityCombustByEntityEvent event = new EntityCombustByEntityEvent((org.bukkit.entity.Projectile) this.getBukkitEntity(), entity.getBukkitEntity(), 5);
+ entity.level.getCraftServer().getPluginManager().callEvent(event);
+
+ if (!event.isCancelled()) {
+ entity.setOnFire(event.getDuration(), false);
+ entity.setSecondsOnFire(event.getDuration(), false);
+ }
+ // CraftBukkit end
boolean flag = entity.damageEntity(DamageSource.fireball(this, entity1), 5.0F);
boolean flag = entity.hurt(DamageSource.fireball(this, entity1), 5.0F);
if (!flag) {
@@ -57,10 +71,10 @@
@@ -56,10 +70,10 @@
if (!this.level.isClientSide) {
Entity entity = this.getShooter();
Entity entity = this.getOwner();
- if (!(entity instanceof EntityInsentient) || this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
+ if (isIncendiary) { // CraftBukkit
BlockPosition blockposition = movingobjectpositionblock.getBlockPosition().shift(movingobjectpositionblock.getDirection());
BlockPosition blockposition = movingobjectpositionblock.getBlockPos().relative(movingobjectpositionblock.getDirection());
- if (this.level.isEmpty(blockposition)) {
+ if (this.level.isEmpty(blockposition) && !org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(level, blockposition, this).isCancelled()) { // CraftBukkit
this.level.setTypeUpdate(blockposition, BlockFireAbstract.a((IBlockAccess) this.level, blockposition));
- if (this.level.isEmptyBlock(blockposition)) {
+ if (this.level.isEmptyBlock(blockposition) && !org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(level, blockposition, this).isCancelled()) { // CraftBukkit
this.level.setBlockAndUpdate(blockposition, BlockFireAbstract.getState(this.level, blockposition));
}
}

View File

@@ -1,11 +1,11 @@
--- a/net/minecraft/world/entity/projectile/EntitySpectralArrow.java
+++ b/net/minecraft/world/entity/projectile/EntitySpectralArrow.java
@@ -45,7 +45,7 @@
super.a(entityliving);
super.doPostHurtEffects(entityliving);
MobEffect mobeffect = new MobEffect(MobEffects.GLOWING, this.duration, 0);
- entityliving.addEffect(mobeffect, this.x());
+ entityliving.addEffect(mobeffect, this.x(), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ARROW); // CraftBukkit
- entityliving.addEffect(mobeffect, this.getEffectSource());
+ entityliving.addEffect(mobeffect, this.getEffectSource(), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ARROW); // CraftBukkit
}
@Override

View File

@@ -1,22 +1,22 @@
--- a/net/minecraft/world/entity/projectile/EntityThrownExpBottle.java
+++ b/net/minecraft/world/entity/projectile/EntityThrownExpBottle.java
@@ -39,9 +39,18 @@
protected void a(MovingObjectPosition movingobjectposition) {
super.a(movingobjectposition);
protected void onHit(MovingObjectPosition movingobjectposition) {
super.onHit(movingobjectposition);
if (this.level instanceof WorldServer) {
- this.level.triggerEffect(2002, this.getChunkCoordinates(), PotionUtil.a(Potions.WATER));
- this.level.levelEvent(2002, this.blockPosition(), PotionUtil.getColor(Potions.WATER));
+ // CraftBukkit - moved to after event
+ // this.level.triggerEffect(2002, this.getChunkCoordinates(), PotionUtil.a(Potions.WATER));
+ // this.level.levelEvent(2002, this.blockPosition(), PotionUtil.getColor(Potions.WATER));
int i = 3 + this.level.random.nextInt(5) + this.level.random.nextInt(5);
+ // CraftBukkit start
+ org.bukkit.event.entity.ExpBottleEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callExpBottleEvent(this, i);
+ i = event.getExperience();
+ if (event.getShowEffect()) {
+ this.level.triggerEffect(2002, this.getChunkCoordinates(), PotionUtil.a(Potions.WATER));
+ this.level.levelEvent(2002, this.blockPosition(), PotionUtil.getColor(Potions.WATER));
+ }
+ // CraftBukkit end
+
EntityExperienceOrb.a((WorldServer) this.level, this.getPositionVector(), i);
this.die();
EntityExperienceOrb.award((WorldServer) this.level, this.position(), i);
this.discard();
}

View File

@@ -1,10 +1,10 @@
--- a/net/minecraft/world/entity/projectile/EntityThrownTrident.java
+++ b/net/minecraft/world/entity/projectile/EntityThrownTrident.java
@@ -157,7 +157,7 @@
@@ -156,7 +156,7 @@
entitylightning.d(Vec3D.c((BaseBlockPosition) blockposition));
entitylightning.b(entity1 instanceof EntityPlayer ? (EntityPlayer) entity1 : null);
- this.level.addEntity(entitylightning);
entitylightning.moveTo(Vec3D.atBottomCenterOf(blockposition));
entitylightning.setCause(entity1 instanceof EntityPlayer ? (EntityPlayer) entity1 : null);
- this.level.addFreshEntity(entitylightning);
+ ((WorldServer) this.level).strikeLightning(entitylightning, org.bukkit.event.weather.LightningStrikeEvent.Cause.TRIDENT); // CraftBukkit
soundeffect = SoundEffects.TRIDENT_THUNDER;
f1 = 5.0F;

View File

@@ -6,16 +6,16 @@
+ // CraftBukkit start accessor methods
+ public void refreshEffects() {
+ this.getDataWatcher().set(EntityTippedArrow.ID_EFFECT_COLOR, PotionUtil.a((Collection) PotionUtil.a(this.potion, (Collection) this.effects)));
+ this.getEntityData().set(EntityTippedArrow.ID_EFFECT_COLOR, PotionUtil.getColor((Collection) PotionUtil.getAllEffects(this.potion, (Collection) this.effects)));
+ }
+
+ public String getType() {
+ public String getPotionType() {
+ return IRegistry.POTION.getKey(this.potion).toString();
+ }
+
+ public void setType(String string) {
+ public void setPotionType(String string) {
+ this.potion = IRegistry.POTION.get(new net.minecraft.resources.MinecraftKey(string));
+ this.getDataWatcher().set(EntityTippedArrow.ID_EFFECT_COLOR, PotionUtil.a((Collection) PotionUtil.a(this.potion, (Collection) this.effects)));
+ this.getEntityData().set(EntityTippedArrow.ID_EFFECT_COLOR, PotionUtil.getColor((Collection) PotionUtil.getAllEffects(this.potion, (Collection) this.effects)));
+ }
+
+ public boolean isTipped() {
@@ -30,8 +30,8 @@
while (iterator.hasNext()) {
mobeffect = (MobEffect) iterator.next();
- entityliving.addEffect(new MobEffect(mobeffect.getMobEffect(), Math.max(mobeffect.getDuration() / 8, 1), mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isShowParticles()), entity);
+ entityliving.addEffect(new MobEffect(mobeffect.getMobEffect(), Math.max(mobeffect.getDuration() / 8, 1), mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isShowParticles()), entity, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ARROW); // CraftBukkit
- entityliving.addEffect(new MobEffect(mobeffect.getEffect(), Math.max(mobeffect.getDuration() / 8, 1), mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isVisible()), entity);
+ entityliving.addEffect(new MobEffect(mobeffect.getEffect(), Math.max(mobeffect.getDuration() / 8, 1), mobeffect.getAmplifier(), mobeffect.isAmbient(), mobeffect.isVisible()), entity, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ARROW); // CraftBukkit
}
if (!this.effects.isEmpty()) {

View File

@@ -8,10 +8,10 @@
+
public class EntityWitherSkull extends EntityFireball {
private static final DataWatcherObject<Boolean> DATA_DANGEROUS = DataWatcher.a(EntityWitherSkull.class, DataWatcherRegistry.BOOLEAN);
private static final DataWatcherObject<Boolean> DATA_DANGEROUS = DataWatcher.defineId(EntityWitherSkull.class, DataWatcherRegistry.BOOLEAN);
@@ -64,7 +66,7 @@
if (entity.isAlive()) {
this.a(entityliving, entity);
this.doEnchantDamageEffects(entityliving, entity);
} else {
- entityliving.heal(5.0F);
+ entityliving.heal(5.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.WITHER); // CraftBukkit
@@ -22,8 +22,8 @@
}
if (b0 > 0) {
- ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.WITHER, 20 * b0, 1), this.x());
+ ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.WITHER, 20 * b0, 1), this.x(), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ATTACK); // CraftBukkit
- ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.WITHER, 20 * b0, 1), this.getEffectSource());
+ ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.WITHER, 20 * b0, 1), this.getEffectSource(), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ATTACK); // CraftBukkit
}
}
@@ -31,16 +31,16 @@
if (!this.level.isClientSide) {
Explosion.Effect explosion_effect = this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? Explosion.Effect.DESTROY : Explosion.Effect.NONE;
- this.level.createExplosion(this, this.locX(), this.locY(), this.locZ(), 1.0F, false, explosion_effect);
- this.level.explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, false, explosion_effect);
+ // CraftBukkit start
+ // this.level.createExplosion(this, this.locX(), this.locY(), this.locZ(), 1.0F, false, explosion_effect);
+ ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), 1.0F, false);
+ this.level.getCraftServer().getPluginManager().callEvent(event);
+
+ if (!event.isCancelled()) {
+ this.level.createExplosion(this, this.locX(), this.locY(), this.locZ(), event.getRadius(), event.getFire(), explosion_effect);
+ this.level.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), explosion_effect);
+ }
+ // CraftBukkit end
this.die();
this.discard();
}

View File

@@ -23,7 +23,7 @@
super(entitytypes, world);
}
@@ -40,6 +48,7 @@
this.ownerUUID = entity.getUniqueID();
this.ownerUUID = entity.getUUID();
this.cachedOwner = entity;
}
+ this.projectileSource = (entity != null && entity.getBukkitEntity() instanceof ProjectileSource) ? (ProjectileSource) entity.getBukkitEntity() : null; // CraftBukkit
@@ -31,7 +31,7 @@
}
@@ -143,6 +152,16 @@
this.setMot(this.getMot().add(vec3d.x, entity.isOnGround() ? 0.0D : vec3d.y, vec3d.z));
this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, entity.isOnGround() ? 0.0D : vec3d.y, vec3d.z));
}
+ // CraftBukkit start - call projectile hit event
@@ -39,23 +39,23 @@
+ org.bukkit.event.entity.ProjectileHitEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition);
+ this.hitCancelled = event != null && event.isCancelled();
+ if (movingobjectposition.getType() == MovingObjectPosition.EnumMovingObjectType.BLOCK || !this.hitCancelled) {
+ this.a(movingobjectposition); // PAIL rename onHit
+ this.onHit(movingobjectposition);
+ }
+ }
+ // CraftBukkit end
+
protected void a(MovingObjectPosition movingobjectposition) {
protected void onHit(MovingObjectPosition movingobjectposition) {
MovingObjectPosition.EnumMovingObjectType movingobjectposition_enummovingobjecttype = movingobjectposition.getType();
@@ -161,6 +180,11 @@
protected void a(MovingObjectPositionEntity movingobjectpositionentity) {}
protected void onHitEntity(MovingObjectPositionEntity movingobjectpositionentity) {}
protected void a(MovingObjectPositionBlock movingobjectpositionblock) {
protected void onHitBlock(MovingObjectPositionBlock movingobjectpositionblock) {
+ // CraftBukkit start - cancellable hit event
+ if (hitCancelled) {
+ return;
+ }
+ // CraftBukkit end
IBlockData iblockdata = this.level.getType(movingobjectpositionblock.getBlockPosition());
IBlockData iblockdata = this.level.getBlockState(movingobjectpositionblock.getBlockPos());
iblockdata.a(this.level, iblockdata, movingobjectpositionblock, this);
iblockdata.onProjectileHit(this.level, iblockdata, movingobjectpositionblock, this);