mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-02 13:07:06 +01:00
Refactored a bunch of death code into the event factory
This commit is contained in:
parent
751ab82be0
commit
20ddc944bb
9 changed files with 70 additions and 71 deletions
|
@ -2,10 +2,7 @@ package net.minecraft.server;
|
||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|
||||||
public class EntityChicken extends EntityAnimal {
|
public class EntityChicken extends EntityAnimal {
|
||||||
|
@ -92,14 +89,7 @@ public class EntityChicken extends EntityAnimal {
|
||||||
loot.add(new org.bukkit.inventory.ItemStack(this.fireTicks > 0 ? Item.COOKED_CHICKEN.id : Item.RAW_CHICKEN.id, 1));
|
loot.add(new org.bukkit.inventory.ItemStack(this.fireTicks > 0 ? Item.COOKED_CHICKEN.id : Item.RAW_CHICKEN.id, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
CraftEntity entity = (CraftEntity) this.getBukkitEntity();
|
CraftEventFactory.callEntityDeathEvent(this, loot);
|
||||||
EntityDeathEvent event = new EntityDeathEvent(entity, loot);
|
|
||||||
org.bukkit.World bworld = this.world.getWorld();
|
|
||||||
this.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
|
||||||
bworld.dropItemNaturally(entity.getLocation(), stack);
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,14 +62,7 @@ public class EntityCow extends EntityAnimal {
|
||||||
loot.add(new org.bukkit.inventory.ItemStack(this.fireTicks > 0 ? Item.COOKED_BEEF.id : Item.RAW_BEEF.id, count));
|
loot.add(new org.bukkit.inventory.ItemStack(this.fireTicks > 0 ? Item.COOKED_BEEF.id : Item.RAW_BEEF.id, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
CraftEntity entity = (CraftEntity) this.getBukkitEntity();
|
CraftEventFactory.callEntityDeathEvent(this, loot);
|
||||||
EntityDeathEvent event = new EntityDeathEvent(entity, loot);
|
|
||||||
org.bukkit.World bworld = this.world.getWorld();
|
|
||||||
this.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
|
||||||
bworld.dropItemNaturally(entity.getLocation(), stack);
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,9 @@ package net.minecraft.server;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.entity.CraftEntity;
|
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
import org.bukkit.event.entity.EndermanPickupEvent;
|
import org.bukkit.event.entity.EndermanPickupEvent;
|
||||||
import org.bukkit.event.entity.EndermanPlaceEvent;
|
import org.bukkit.event.entity.EndermanPlaceEvent;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|
||||||
public class EntityEnderman extends EntityMonster {
|
public class EntityEnderman extends EntityMonster {
|
||||||
|
@ -276,14 +275,7 @@ public class EntityEnderman extends EntityMonster {
|
||||||
loot.add(new org.bukkit.inventory.ItemStack(i, count));
|
loot.add(new org.bukkit.inventory.ItemStack(i, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
CraftEntity entity = (CraftEntity) this.getBukkitEntity();
|
CraftEventFactory.callEntityDeathEvent(this, loot);
|
||||||
EntityDeathEvent event = new EntityDeathEvent(entity, loot);
|
|
||||||
org.bukkit.World bworld = this.world.getWorld();
|
|
||||||
this.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
|
||||||
bworld.dropItemNaturally(entity.getLocation(), stack);
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,10 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
import org.bukkit.craftbukkit.entity.CraftEntity;
|
|
||||||
import org.bukkit.craftbukkit.TrigMath;
|
import org.bukkit.craftbukkit.TrigMath;
|
||||||
|
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
|
||||||
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
||||||
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
|
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
@ -78,6 +77,7 @@ public abstract class EntityLiving extends Entity {
|
||||||
protected float aU = 0.7F;
|
protected float aU = 0.7F;
|
||||||
private Entity d;
|
private Entity d;
|
||||||
protected int aV = 0;
|
protected int aV = 0;
|
||||||
|
public int expToDrop = 0; // CraftBukkit added
|
||||||
|
|
||||||
public EntityLiving(World world) {
|
public EntityLiving(World world) {
|
||||||
super(world);
|
super(world);
|
||||||
|
@ -188,8 +188,9 @@ public abstract class EntityLiving extends Entity {
|
||||||
if (this.health <= 0) {
|
if (this.health <= 0) {
|
||||||
++this.deathTicks;
|
++this.deathTicks;
|
||||||
if (this.deathTicks > 20) {
|
if (this.deathTicks > 20) {
|
||||||
if (this.c > 0 || this.X()) {
|
// CraftBukkit start - update getExpReward() below if this changes!
|
||||||
i = this.a(this.b);
|
if (expToDrop > 0) {
|
||||||
|
i = expToDrop;
|
||||||
|
|
||||||
while (i > 0) {
|
while (i > 0) {
|
||||||
int j = EntityExperienceOrb.b(i);
|
int j = EntityExperienceOrb.b(i);
|
||||||
|
@ -198,6 +199,7 @@ public abstract class EntityLiving extends Entity {
|
||||||
this.world.addEntity(new EntityExperienceOrb(this.world, this.locX, this.locY, this.locZ, j));
|
this.world.addEntity(new EntityExperienceOrb(this.world, this.locX, this.locY, this.locZ, j));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// CraftBukkit end
|
||||||
|
|
||||||
this.ag();
|
this.ag();
|
||||||
this.die();
|
this.die();
|
||||||
|
@ -229,6 +231,18 @@ public abstract class EntityLiving extends Entity {
|
||||||
return this.ax;
|
return this.ax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CraftBukkit start
|
||||||
|
public int getExpReward() {
|
||||||
|
int exp = a(this.b);
|
||||||
|
|
||||||
|
if (this.c > 0 || this.X()) {
|
||||||
|
return exp;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
|
|
||||||
protected boolean X() {
|
protected boolean X() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -528,14 +542,7 @@ public abstract class EntityLiving extends Entity {
|
||||||
loot.add(new org.bukkit.inventory.ItemStack(i, count));
|
loot.add(new org.bukkit.inventory.ItemStack(i, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
CraftEntity entity = (CraftEntity) this.getBukkitEntity();
|
CraftEventFactory.callEntityDeathEvent(this, loot);
|
||||||
EntityDeathEvent event = new EntityDeathEvent(entity, loot);
|
|
||||||
org.bukkit.World bworld = this.world.getWorld();
|
|
||||||
this.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
|
||||||
bworld.dropItemNaturally(entity.getLocation(), stack);
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@ import java.util.Set;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.craftbukkit.ChunkCompressionThread;
|
import org.bukkit.craftbukkit.ChunkCompressionThread;
|
||||||
import org.bukkit.craftbukkit.CraftWorld;
|
import org.bukkit.craftbukkit.CraftWorld;
|
||||||
|
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
|
||||||
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
|
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
|
|
||||||
public String displayName;
|
public String displayName;
|
||||||
public org.bukkit.Location compassTarget;
|
public org.bukkit.Location compassTarget;
|
||||||
|
public int newExp = 0;
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|
||||||
public void a(NBTTagCompound nbttagcompound) {
|
public void a(NBTTagCompound nbttagcompound) {
|
||||||
|
@ -154,11 +155,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
org.bukkit.entity.Entity bukkitEntity = this.getBukkitEntity();
|
CraftEventFactory.callPlayerDeathEvent(this, loot);
|
||||||
CraftWorld bworld = this.world.getWorld();
|
|
||||||
|
|
||||||
EntityDeathEvent event = new EntityDeathEvent(bukkitEntity, loot);
|
|
||||||
this.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
// CraftBukkit - we clean the player's inventory after the EntityDeathEvent is called so plugins can get the exact state of the inventory.
|
// CraftBukkit - we clean the player's inventory after the EntityDeathEvent is called so plugins can get the exact state of the inventory.
|
||||||
for (int i = 0; i < this.inventory.items.length; ++i) {
|
for (int i = 0; i < this.inventory.items.length; ++i) {
|
||||||
|
@ -169,10 +166,6 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
this.inventory.armor[i] = null;
|
this.inventory.armor[i] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
|
||||||
bworld.dropItemNaturally(bukkitEntity.getLocation(), stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.x();
|
this.x();
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package net.minecraft.server;
|
package net.minecraft.server;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||||
|
|
||||||
public class EntitySheep extends EntityAnimal {
|
public class EntitySheep extends EntityAnimal {
|
||||||
|
|
||||||
|
@ -25,15 +26,7 @@ public class EntitySheep extends EntityAnimal {
|
||||||
loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.WOOL, 1, (short) 0, (byte) this.getColor()));
|
loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.WOOL, 1, (short) 0, (byte) this.getColor()));
|
||||||
}
|
}
|
||||||
|
|
||||||
org.bukkit.World bworld = this.world.getWorld();
|
CraftEventFactory.callEntityDeathEvent(this, loot);
|
||||||
org.bukkit.entity.Entity entity = this.getBukkitEntity();
|
|
||||||
|
|
||||||
org.bukkit.event.entity.EntityDeathEvent event = new org.bukkit.event.entity.EntityDeathEvent(entity, loot);
|
|
||||||
this.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
|
||||||
bworld.dropItemNaturally(entity.getLocation(), stack);
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package net.minecraft.server;
|
package net.minecraft.server;
|
||||||
|
|
||||||
import org.bukkit.event.entity.EntityDeathEvent; // CraftBukkit
|
import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
|
||||||
|
|
||||||
public class EntitySquid extends EntityWaterAnimal {
|
public class EntitySquid extends EntityWaterAnimal {
|
||||||
|
|
||||||
|
@ -63,15 +63,7 @@ public class EntitySquid extends EntityWaterAnimal {
|
||||||
loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.INK_SACK, count));
|
loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.INK_SACK, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
org.bukkit.World bworld = this.world.getWorld();
|
CraftEventFactory.callEntityDeathEvent(this, loot);
|
||||||
org.bukkit.entity.Entity entity = this.getBukkitEntity();
|
|
||||||
|
|
||||||
EntityDeathEvent event = new EntityDeathEvent(entity, loot);
|
|
||||||
this.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
for (org.bukkit.inventory.ItemStack stack : event.getDrops()) {
|
|
||||||
bworld.dropItemNaturally(entity.getLocation(), stack);
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -252,6 +252,10 @@ public class ServerConfigurationManager {
|
||||||
entityplayer.fireTicks = 0;
|
entityplayer.fireTicks = 0;
|
||||||
entityplayer.fallDistance = 0;
|
entityplayer.fallDistance = 0;
|
||||||
entityplayer.foodData = new FoodMetaData();
|
entityplayer.foodData = new FoodMetaData();
|
||||||
|
entityplayer.expTotal = 0;
|
||||||
|
entityplayer.exp = 0;
|
||||||
|
entityplayer.expLevel = 0;
|
||||||
|
entityplayer.d(entityplayer.newExp);
|
||||||
} else {
|
} else {
|
||||||
location.setWorld(this.server.getWorldServer(i).getWorld());
|
location.setWorld(this.server.getWorldServer(i).getWorld());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.bukkit.craftbukkit.event;
|
package org.bukkit.craftbukkit.event;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import net.minecraft.server.ChunkCoordinates;
|
import net.minecraft.server.ChunkCoordinates;
|
||||||
import net.minecraft.server.EntityCaveSpider;
|
import net.minecraft.server.EntityCaveSpider;
|
||||||
import net.minecraft.server.EntityChicken;
|
import net.minecraft.server.EntityChicken;
|
||||||
|
@ -14,6 +15,7 @@ import net.minecraft.server.EntityLiving;
|
||||||
import net.minecraft.server.EntityMonster;
|
import net.minecraft.server.EntityMonster;
|
||||||
import net.minecraft.server.EntityPig;
|
import net.minecraft.server.EntityPig;
|
||||||
import net.minecraft.server.EntityPigZombie;
|
import net.minecraft.server.EntityPigZombie;
|
||||||
|
import net.minecraft.server.EntityPlayer;
|
||||||
import net.minecraft.server.EntitySheep;
|
import net.minecraft.server.EntitySheep;
|
||||||
import net.minecraft.server.EntitySilverfish;
|
import net.minecraft.server.EntitySilverfish;
|
||||||
import net.minecraft.server.EntitySkeleton;
|
import net.minecraft.server.EntitySkeleton;
|
||||||
|
@ -35,6 +37,8 @@ import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
import org.bukkit.craftbukkit.CraftWorld;
|
import org.bukkit.craftbukkit.CraftWorld;
|
||||||
import org.bukkit.craftbukkit.block.CraftBlock;
|
import org.bukkit.craftbukkit.block.CraftBlock;
|
||||||
|
import org.bukkit.craftbukkit.entity.CraftLivingEntity;
|
||||||
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||||
import org.bukkit.entity.AnimalTamer;
|
import org.bukkit.entity.AnimalTamer;
|
||||||
import org.bukkit.entity.CreatureType;
|
import org.bukkit.entity.CreatureType;
|
||||||
|
@ -273,4 +277,35 @@ public class CraftEventFactory {
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim, List<org.bukkit.inventory.ItemStack> drops) {
|
||||||
|
CraftLivingEntity entity = (CraftLivingEntity)victim.getBukkitEntity();
|
||||||
|
EntityDeathEvent event = new EntityDeathEvent(entity, drops, victim.getExpReward());
|
||||||
|
org.bukkit.World world = entity.getWorld();
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
|
victim.expToDrop = event.getDroppedExp();
|
||||||
|
|
||||||
|
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
||||||
|
world.dropItemNaturally(entity.getLocation(), stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PlayerDeathEvent callPlayerDeathEvent(EntityPlayer victim, List<org.bukkit.inventory.ItemStack> drops) {
|
||||||
|
CraftPlayer entity = (CraftPlayer)victim.getBukkitEntity();
|
||||||
|
PlayerDeathEvent event = new PlayerDeathEvent(entity, drops, victim.getExpReward(), 0);
|
||||||
|
org.bukkit.World world = entity.getWorld();
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
|
victim.expToDrop = event.getDroppedExp();
|
||||||
|
victim.newExp = event.getNewExp();
|
||||||
|
|
||||||
|
for (org.bukkit.inventory.ItemStack stack: event.getDrops()) {
|
||||||
|
world.dropItemNaturally(entity.getLocation(), stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
return event;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue