geforkt von Mirrors/Paper
86 Zeilen
3.7 KiB
Diff
86 Zeilen
3.7 KiB
Diff
--- a/net/minecraft/server/EntityItemFrame.java
|
|
+++ b/net/minecraft/server/EntityItemFrame.java
|
|
@@ -52,16 +52,27 @@
|
|
@Override
|
|
protected void updateBoundingBox() {
|
|
if (this.direction != null) {
|
|
+ // CraftBukkit start code moved in to calculateBoundingBox
|
|
+ this.a(calculateBoundingBox(this, this.blockPosition, this.direction, this.getHangingWidth(), this.getHangingHeight()));
|
|
+ // CraftBukkit end
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // CraftBukkit start - break out BB calc into own method
|
|
+ public static AxisAlignedBB calculateBoundingBox(@Nullable Entity entity, BlockPosition blockPosition, EnumDirection direction, int width, int height) {
|
|
+ {
|
|
double d0 = 0.46875D;
|
|
- double d1 = (double) this.blockPosition.getX() + 0.5D - (double) this.direction.getAdjacentX() * 0.46875D;
|
|
- double d2 = (double) this.blockPosition.getY() + 0.5D - (double) this.direction.getAdjacentY() * 0.46875D;
|
|
- double d3 = (double) this.blockPosition.getZ() + 0.5D - (double) this.direction.getAdjacentZ() * 0.46875D;
|
|
-
|
|
- this.setPositionRaw(d1, d2, d3);
|
|
- double d4 = (double) this.getHangingWidth();
|
|
- double d5 = (double) this.getHangingHeight();
|
|
- double d6 = (double) this.getHangingWidth();
|
|
- EnumDirection.EnumAxis enumdirection_enumaxis = this.direction.m();
|
|
+ double d1 = (double) blockPosition.getX() + 0.5D - (double) direction.getAdjacentX() * 0.46875D;
|
|
+ double d2 = (double) blockPosition.getY() + 0.5D - (double) direction.getAdjacentY() * 0.46875D;
|
|
+ double d3 = (double) blockPosition.getZ() + 0.5D - (double) direction.getAdjacentZ() * 0.46875D;
|
|
+
|
|
+ if (entity != null) {
|
|
+ entity.setPositionRaw(d1, d2, d3);
|
|
+ }
|
|
+ double d4 = (double) width;
|
|
+ double d5 = (double) height;
|
|
+ double d6 = (double) width;
|
|
+ EnumDirection.EnumAxis enumdirection_enumaxis = direction.m();
|
|
|
|
switch (enumdirection_enumaxis) {
|
|
case X:
|
|
@@ -77,9 +88,10 @@
|
|
d4 /= 32.0D;
|
|
d5 /= 32.0D;
|
|
d6 /= 32.0D;
|
|
- this.a(new AxisAlignedBB(d1 - d4, d2 - d5, d3 - d6, d1 + d4, d2 + d5, d3 + d6));
|
|
+ return new AxisAlignedBB(d1 - d4, d2 - d5, d3 - d6, d1 + d4, d2 + d5, d3 + d6);
|
|
}
|
|
}
|
|
+ // CraftBukkit end
|
|
|
|
@Override
|
|
public boolean survives() {
|
|
@@ -109,6 +121,11 @@
|
|
return false;
|
|
} else if (!damagesource.isExplosion() && !this.getItem().isEmpty()) {
|
|
if (!this.world.isClientSide) {
|
|
+ // CraftBukkit start - fire EntityDamageEvent
|
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f, false) || this.dead) {
|
|
+ return true;
|
|
+ }
|
|
+ // CraftBukkit end
|
|
this.b(damagesource.getEntity(), false);
|
|
this.a(SoundEffects.ENTITY_ITEM_FRAME_REMOVE_ITEM, 1.0F, 1.0F);
|
|
}
|
|
@@ -194,6 +211,12 @@
|
|
}
|
|
|
|
public void setItem(ItemStack itemstack, boolean flag) {
|
|
+ // CraftBukkit start
|
|
+ this.setItem(itemstack, flag, true);
|
|
+ }
|
|
+
|
|
+ public void setItem(ItemStack itemstack, boolean flag, boolean playSound) {
|
|
+ // CraftBukkit end
|
|
if (!itemstack.isEmpty()) {
|
|
itemstack = itemstack.cloneItemStack();
|
|
itemstack.setCount(1);
|
|
@@ -201,7 +224,7 @@
|
|
}
|
|
|
|
this.getDataWatcher().set(EntityItemFrame.ITEM, itemstack);
|
|
- if (!itemstack.isEmpty()) {
|
|
+ if (!itemstack.isEmpty() && playSound) { // CraftBukkit
|
|
this.a(SoundEffects.ENTITY_ITEM_FRAME_ADD_ITEM, 1.0F, 1.0F);
|
|
}
|
|
|