13
0
geforkt von Mirrors/Paper

Add EntityEquipment API. Adds BUKKIT-3103

Adds:
- Getting/Setting equipment
- getting/setting drop rates
- getting/setting ability to pick up items
-- As an added feature, players with this flag start off with a canceled PlayerPickupItemEvent

By: feildmaster <admin@feildmaster.com>
Dieser Commit ist enthalten in:
CraftBukkit/Spigot 2012-12-09 00:09:48 -06:00
Ursprung 1b990d9590
Commit 0ef3001c83
4 geänderte Dateien mit 209 neuen und 1 gelöschten Zeilen

Datei anzeigen

@ -28,6 +28,7 @@ import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.craftbukkit.inventory.CraftInventoryView;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.permissions.PermissibleBase;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionAttachment;
@ -56,6 +57,10 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
return inventory;
}
public EntityEquipment getEquipment() {
return inventory;
}
public Inventory getEnderChest() {
return enderChest;
}

Datei anzeigen

@ -27,6 +27,7 @@ import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.inventory.CraftEntityEquipment;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Egg;
import org.bukkit.entity.Entity;
@ -40,14 +41,21 @@ import org.bukkit.entity.Projectile;
import org.bukkit.entity.SmallFireball;
import org.bukkit.entity.Snowball;
import org.bukkit.entity.WitherSkull;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.BlockIterator;
import org.bukkit.util.Vector;
public class CraftLivingEntity extends CraftEntity implements LivingEntity {
private CraftEntityEquipment equipment;
public CraftLivingEntity(final CraftServer server, final EntityLiving entity) {
super(server, entity);
if (!(this instanceof HumanEntity)) {
equipment = new CraftEntityEquipment(this);
}
}
public int getHealth() {
@ -312,4 +320,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
public void setRemoveWhenFarAway(boolean remove) {
getHandle().persistent = !remove;
}
public EntityEquipment getEquipment() {
return equipment;
}
public void setCanPickupItems(boolean pickup) {
getHandle().canPickUpLoot = pickup;
}
public boolean canPickupItems() {
return getHandle().canPickUpLoot;
}
}

Datei anzeigen

@ -0,0 +1,142 @@
package org.bukkit.craftbukkit.inventory;
import org.bukkit.craftbukkit.entity.CraftLivingEntity;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
public class CraftEntityEquipment implements EntityEquipment {
private static final int WEAPON_SLOT = 0;
private static final int HELMET_SLOT = 1;
private static final int CHEST_SLOT = 2;
private static final int LEG_SLOT = 3;
private static final int BOOT_SLOT = 4;
private static final int INVENTORY_SLOTS = 5;
private final CraftLivingEntity entity;
public CraftEntityEquipment(CraftLivingEntity entity) {
this.entity = entity;
}
public ItemStack getItemInHand() {
return getEquipment(WEAPON_SLOT);
}
public void setItemInHand(ItemStack stack) {
setEquipment(WEAPON_SLOT, stack);
}
public ItemStack getHelmet() {
return getEquipment(HELMET_SLOT);
}
public void setHelmet(ItemStack helmet) {
setEquipment(HELMET_SLOT, helmet);
}
public ItemStack getChestplate() {
return getEquipment(CHEST_SLOT);
}
public void setChestplate(ItemStack chestplate) {
setEquipment(CHEST_SLOT, chestplate);
}
public ItemStack getLeggings() {
return getEquipment(LEG_SLOT);
}
public void setLeggings(ItemStack leggings) {
setEquipment(LEG_SLOT, leggings);
}
public ItemStack getBoots() {
return getEquipment(BOOT_SLOT);
}
public void setBoots(ItemStack boots) {
setEquipment(BOOT_SLOT, boots);
}
public ItemStack[] getArmorContents() {
ItemStack[] armor = new ItemStack[INVENTORY_SLOTS - 1];
for(int slot = HELMET_SLOT; slot < INVENTORY_SLOTS; slot++) {
armor[slot - 1] = getEquipment(slot);
}
return armor;
}
public void setArmorContents(ItemStack[] items) {
for(int slot = HELMET_SLOT; slot < INVENTORY_SLOTS; slot++) {
ItemStack equipment = items != null && slot <= items.length ? items[slot - 1] : null;
setEquipment(slot, equipment);
}
}
private ItemStack getEquipment(int slot) {
return CraftItemStack.asBukkitStack(entity.getHandle().getEquipment(slot));
}
private void setEquipment(int slot, ItemStack stack) {
entity.getHandle().setEquipment(slot, CraftItemStack.createNMSItemStack(stack));
}
public void clear() {
for(int i = 0; i < INVENTORY_SLOTS; i++) {
setEquipment(i, null);
}
}
public Entity getHolder() {
return entity;
}
public float getItemInHandDropChance() {
return getDropChance(WEAPON_SLOT);
}
public void setItemInHandDropChance(float chance) {
setDropChance(WEAPON_SLOT, chance);
}
public float getHelmetDropChance() {
return getDropChance(HELMET_SLOT);
}
public void setHelmetDropChance(float chance) {
setDropChance(HELMET_SLOT, chance);
}
public float getChestPlateDropChance() {
return getDropChance(CHEST_SLOT);
}
public void setChestPlateDropChance(float chance) {
setDropChance(CHEST_SLOT, chance);
}
public float getLeggingsDropChance() {
return getDropChance(LEG_SLOT);
}
public void setLeggingsDropChance(float chance) {
setDropChance(LEG_SLOT, chance);
}
public float getBootsDropChance() {
return getDropChance(BOOT_SLOT);
}
public void setBootsDropChance(float chance) {
setDropChance(BOOT_SLOT, chance);
}
private void setDropChance(int slot, float chance) {
entity.getHandle().dropChances[slot] = chance - 0.1F;
}
private float getDropChance(int slot) {
return entity.getHandle().dropChances[slot] + 0.1F;
}
}

Datei anzeigen

@ -3,9 +3,10 @@ package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.PlayerInventory;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.inventory.PlayerInventory {
public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.inventory.PlayerInventory, EntityEquipment {
public CraftInventoryPlayer(net.minecraft.server.PlayerInventory inventory) {
super(inventory);
}
@ -120,4 +121,44 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i
public HumanEntity getHolder() {
return (HumanEntity) inventory.getOwner();
}
public float getItemInHandDropChance() {
return 1;
}
public void setItemInHandDropChance(float chance) {
throw new UnsupportedOperationException();
}
public float getHelmetDropChance() {
return 1;
}
public void setHelmetDropChance(float chance) {
throw new UnsupportedOperationException();
}
public float getChestPlateDropChance() {
return 1;
}
public void setChestPlateDropChance(float chance) {
throw new UnsupportedOperationException();
}
public float getLeggingsDropChance() {
return 1;
}
public void setLeggingsDropChance(float chance) {
throw new UnsupportedOperationException();
}
public float getBootsDropChance() {
return 1;
}
public void setBootsDropChance(float chance) {
throw new UnsupportedOperationException();
}
}