geforkt von Mirrors/Paper
36ef37b982
Calling this event allows plugins to react to the situation by simply handling a normal damage event, possibly using existing code to handle other entity damage. Pulled from PR #1279
152 Zeilen
4.4 KiB
Java
152 Zeilen
4.4 KiB
Java
package net.minecraft.server;
|
|
|
|
public class EntityItemFrame extends EntityHanging {
|
|
|
|
private float e = 1.0F;
|
|
|
|
public EntityItemFrame(World world) {
|
|
super(world);
|
|
}
|
|
|
|
public EntityItemFrame(World world, int i, int j, int k, int l) {
|
|
super(world, i, j, k, l);
|
|
this.setDirection(l);
|
|
}
|
|
|
|
protected void c() {
|
|
this.getDataWatcher().a(2, 5);
|
|
this.getDataWatcher().a(3, Byte.valueOf((byte) 0));
|
|
}
|
|
|
|
public boolean damageEntity(DamageSource damagesource, float f) {
|
|
if (this.isInvulnerable()) {
|
|
return false;
|
|
} else if (this.getItem() != null) {
|
|
if (!this.world.isStatic) {
|
|
// CraftBukkit start
|
|
if (org.bukkit.craftbukkit.event.CraftEventFactory.handleEntityDamageEvent(this, damagesource, f).isCancelled() || this.dead) {
|
|
return false;
|
|
}
|
|
// CraftBukkit end
|
|
this.b(damagesource.getEntity(), false);
|
|
this.setItem((ItemStack) null);
|
|
}
|
|
|
|
return true;
|
|
} else {
|
|
return super.damageEntity(damagesource, f);
|
|
}
|
|
}
|
|
|
|
public int f() {
|
|
return 9;
|
|
}
|
|
|
|
public int i() {
|
|
return 9;
|
|
}
|
|
|
|
public void b(Entity entity) {
|
|
this.b(entity, true);
|
|
}
|
|
|
|
public void b(Entity entity, boolean flag) {
|
|
ItemStack itemstack = this.getItem();
|
|
|
|
if (entity instanceof EntityHuman) {
|
|
EntityHuman entityhuman = (EntityHuman) entity;
|
|
|
|
if (entityhuman.abilities.canInstantlyBuild) {
|
|
this.b(itemstack);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (flag) {
|
|
this.a(new ItemStack(Items.ITEM_FRAME), 0.0F);
|
|
}
|
|
|
|
if (itemstack != null && this.random.nextFloat() < this.e) {
|
|
itemstack = itemstack.cloneItemStack();
|
|
this.b(itemstack);
|
|
this.a(itemstack, 0.0F);
|
|
}
|
|
}
|
|
|
|
private void b(ItemStack itemstack) {
|
|
if (itemstack != null) {
|
|
if (itemstack.getItem() == Items.MAP) {
|
|
WorldMap worldmap = ((ItemWorldMap) itemstack.getItem()).getSavedMap(itemstack, this.world);
|
|
|
|
worldmap.g.remove("frame-" + this.getId());
|
|
}
|
|
|
|
itemstack.a((EntityItemFrame) null);
|
|
}
|
|
}
|
|
|
|
public ItemStack getItem() {
|
|
return this.getDataWatcher().getItemStack(2);
|
|
}
|
|
|
|
public void setItem(ItemStack itemstack) {
|
|
if (itemstack != null) {
|
|
itemstack = itemstack.cloneItemStack();
|
|
itemstack.count = 1;
|
|
itemstack.a(this);
|
|
}
|
|
|
|
this.getDataWatcher().watch(2, itemstack);
|
|
this.getDataWatcher().h(2);
|
|
}
|
|
|
|
public int getRotation() {
|
|
return this.getDataWatcher().getByte(3);
|
|
}
|
|
|
|
public void setRotation(int i) {
|
|
this.getDataWatcher().watch(3, Byte.valueOf((byte) (i % 4)));
|
|
}
|
|
|
|
public void b(NBTTagCompound nbttagcompound) {
|
|
if (this.getItem() != null) {
|
|
nbttagcompound.set("Item", this.getItem().save(new NBTTagCompound()));
|
|
nbttagcompound.setByte("ItemRotation", (byte) this.getRotation());
|
|
nbttagcompound.setFloat("ItemDropChance", this.e);
|
|
}
|
|
|
|
super.b(nbttagcompound);
|
|
}
|
|
|
|
public void a(NBTTagCompound nbttagcompound) {
|
|
NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Item");
|
|
|
|
if (nbttagcompound1 != null && !nbttagcompound1.isEmpty()) {
|
|
this.setItem(ItemStack.createStack(nbttagcompound1));
|
|
this.setRotation(nbttagcompound.getByte("ItemRotation"));
|
|
if (nbttagcompound.hasKeyOfType("ItemDropChance", 99)) {
|
|
this.e = nbttagcompound.getFloat("ItemDropChance");
|
|
}
|
|
}
|
|
|
|
super.a(nbttagcompound);
|
|
}
|
|
|
|
public boolean c(EntityHuman entityhuman) {
|
|
if (this.getItem() == null) {
|
|
ItemStack itemstack = entityhuman.be();
|
|
|
|
if (itemstack != null && !this.world.isStatic) {
|
|
this.setItem(itemstack);
|
|
if (!entityhuman.abilities.canInstantlyBuild && --itemstack.count <= 0) {
|
|
entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null);
|
|
}
|
|
}
|
|
} else if (!this.world.isStatic) {
|
|
this.setRotation(this.getRotation() + 1);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|