Update to Minecraft 1.8

For more information please see http://www.spigotmc.org/

By: Thinkofdeath <thinkofdeath@spigotmc.org>
This commit is contained in:
CraftBukkit/Spigot
2014-11-26 08:32:16 +11:00
parent 2f44d66966
commit a419776f3c
347 changed files with 22151 additions and 1209 deletions

View File

@@ -0,0 +1,214 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityArmorStand;
import net.minecraft.server.Vector3f;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.EulerAngle;
public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
private static final int HAND = 0;
private static final int FEET = 1;
private static final int LEGS = 2;
private static final int CHEST = 3;
private static final int HEAD = 4;
public CraftArmorStand(CraftServer server, EntityArmorStand entity) {
super(server, entity);
}
@Override
public String toString() {
return "CraftArmorStand";
}
@Override
public EntityType getType() {
return EntityType.ARMOR_STAND;
}
@Override
public EntityArmorStand getHandle() {
return (EntityArmorStand) super.getHandle();
}
@Override
public ItemStack getItemInHand() {
return CraftItemStack.asBukkitCopy(getHandle().getEquipment(HAND));
}
@Override
public void setItemInHand(ItemStack item) {
getHandle().setEquipment(HAND, CraftItemStack.asNMSCopy(item));
}
@Override
public ItemStack getBoots() {
return CraftItemStack.asBukkitCopy(getHandle().getEquipment(FEET));
}
@Override
public void setBoots(ItemStack item) {
getHandle().setEquipment(FEET, CraftItemStack.asNMSCopy(item));
}
@Override
public ItemStack getLeggings() {
return CraftItemStack.asBukkitCopy(getHandle().getEquipment(LEGS));
}
@Override
public void setLeggings(ItemStack item) {
getHandle().setEquipment(LEGS, CraftItemStack.asNMSCopy(item));
}
@Override
public ItemStack getChestplate() {
return CraftItemStack.asBukkitCopy(getHandle().getEquipment(CHEST));
}
@Override
public void setChestplate(ItemStack item) {
getHandle().setEquipment(CHEST, CraftItemStack.asNMSCopy(item));
}
@Override
public ItemStack getHelmet() {
return CraftItemStack.asBukkitCopy(getHandle().getEquipment(HEAD));
}
@Override
public void setHelmet(ItemStack item) {
getHandle().setEquipment(HEAD, CraftItemStack.asNMSCopy(item));
}
@Override
public EulerAngle getBodyPose() {
return fromNMS(getHandle().bodyPose);
}
@Override
public void setBodyPose(EulerAngle pose) {
getHandle().setBodyPose(toNMS(pose));
}
@Override
public EulerAngle getLeftArmPose() {
return fromNMS(getHandle().leftArmPose);
}
@Override
public void setLeftArmPose(EulerAngle pose) {
getHandle().setLeftArmPose(toNMS(pose));
}
@Override
public EulerAngle getRightArmPose() {
return fromNMS(getHandle().rightArmPose);
}
@Override
public void setRightArmPose(EulerAngle pose) {
getHandle().setRightArmPose(toNMS(pose));
}
@Override
public EulerAngle getLeftLegPose() {
return fromNMS(getHandle().leftLegPose);
}
@Override
public void setLeftLegPose(EulerAngle pose) {
getHandle().setLeftLegPose(toNMS(pose));
}
@Override
public EulerAngle getRightLegPose() {
return fromNMS(getHandle().rightLegPose);
}
@Override
public void setRightLegPose(EulerAngle pose) {
getHandle().setRightLegPose(toNMS(pose));
}
@Override
public EulerAngle getHeadPose() {
return fromNMS(getHandle().headPose);
}
@Override
public void setHeadPose(EulerAngle pose) {
getHandle().setHeadPose(toNMS(pose));
}
@Override
public boolean hasBasePlate() {
return !getHandle().hasBasePlate();
}
@Override
public void setBasePlate(boolean basePlate) {
getHandle().setBasePlate(!basePlate);
}
@Override
public boolean hasGravity() {
return !getHandle().hasGravity();
}
@Override
public void setGravity(boolean gravity) {
getHandle().setGravity(!gravity);
}
@Override
public boolean isVisible() {
return !getHandle().isInvisible();
}
@Override
public void setVisible(boolean visible) {
getHandle().setInvisible(!visible);
}
@Override
public boolean hasArms() {
return getHandle().hasArms();
}
@Override
public void setArms(boolean arms) {
getHandle().setArms(arms);
}
@Override
public boolean isSmall() {
return getHandle().isSmall();
}
@Override
public void setSmall(boolean small) {
getHandle().setSmall(small);
}
private static EulerAngle fromNMS(Vector3f old) {
return new EulerAngle(
Math.toRadians(old.getX()),
Math.toRadians(old.getY()),
Math.toRadians(old.getZ())
);
}
private static Vector3f toNMS(EulerAngle old) {
return new Vector3f(
(float) Math.toDegrees(old.getX()),
(float) Math.toDegrees(old.getY()),
(float) Math.toDegrees(old.getZ())
);
}
}

View File

@@ -33,7 +33,7 @@ public class CraftArrow extends AbstractProjectile implements Arrow {
}
public ProjectileSource getShooter() {
return getHandle().projectileSource;
return getHandle().projectileSource;
}
public void setShooter(ProjectileSource shooter) {

View File

@@ -1,7 +1,6 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityCreature;
import net.minecraft.server.EntityLiving;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Creature;
import org.bukkit.entity.LivingEntity;
@@ -14,20 +13,16 @@ public class CraftCreature extends CraftLivingEntity implements Creature {
public void setTarget(LivingEntity target) {
EntityCreature entity = getHandle();
if (target == null) {
entity.target = null;
entity.setGoalTarget(null);
entity.setGoalTarget(null, null, false);
} else if (target instanceof CraftLivingEntity) {
entity.target = ((CraftLivingEntity) target).getHandle();
entity.pathEntity = entity.world.findPath(entity, entity.target, 16.0F, true, false, false, true);
entity.setGoalTarget(((CraftLivingEntity) target).getHandle());
entity.setGoalTarget(((CraftLivingEntity) target).getHandle(), null, false);
}
}
public CraftLivingEntity getTarget() {
if (getHandle().target == null) return null;
if (!(getHandle().target instanceof EntityLiving)) return null;
if (getHandle().getGoalTarget() == null) return null;
return (CraftLivingEntity) getHandle().target.getBukkitEntity();
return (CraftLivingEntity) getHandle().getGoalTarget().getBukkitEntity();
}
@Override

View File

@@ -2,6 +2,7 @@ package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityEnderman;
import net.minecraft.server.IBlockData;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.entity.Enderman;
@@ -14,12 +15,12 @@ public class CraftEnderman extends CraftMonster implements Enderman {
}
public MaterialData getCarriedMaterial() {
return CraftMagicNumbers.getMaterial(getHandle().getCarried()).getNewData((byte) getHandle().getCarriedData());
IBlockData blockData = getHandle().getCarried();
return CraftMagicNumbers.getMaterial(blockData.getBlock()).getNewData((byte) blockData.getBlock().toLegacyData(blockData));
}
public void setCarriedMaterial(MaterialData data) {
getHandle().setCarried(CraftMagicNumbers.getBlock(data.getItemTypeId()));
getHandle().setCarriedData(data.getData());
getHandle().setCarried(CraftMagicNumbers.getBlock(data.getItemTypeId()).fromLegacyData(data.getData()));
}
@Override

View File

@@ -0,0 +1,23 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityEndermite;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Endermite;
import org.bukkit.entity.EntityType;
public class CraftEndermite extends CraftMonster implements Endermite {
public CraftEndermite(CraftServer server, EntityEndermite entity) {
super(server, entity);
}
@Override
public String toString() {
return "CraftEndermite";
}
@Override
public EntityType getType() {
return EntityType.ENDERMITE;
}
}

View File

@@ -37,6 +37,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
if (entity instanceof EntityPlayer) { return new CraftPlayer(server, (EntityPlayer) entity); }
else { return new CraftHumanEntity(server, (EntityHuman) entity); }
}
// Water Animals
else if (entity instanceof EntityWaterAnimal) {
if (entity instanceof EntitySquid) { return new CraftSquid(server, (EntitySquid) entity); }
else { return new CraftWaterMob(server, (EntityWaterAnimal) entity); }
}
else if (entity instanceof EntityCreature) {
// Animals
if (entity instanceof EntityAnimal) {
@@ -52,6 +57,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
else if (entity instanceof EntitySheep) { return new CraftSheep(server, (EntitySheep) entity); }
else if (entity instanceof EntityHorse) { return new CraftHorse(server, (EntityHorse) entity); }
else if (entity instanceof EntityRabbit) { return new CraftRabbit(server, (EntityRabbit) entity); }
else { return new CraftAnimals(server, (EntityAnimal) entity); }
}
// Monsters
@@ -72,14 +78,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
if (entity instanceof EntityCaveSpider) { return new CraftCaveSpider(server, (EntityCaveSpider) entity); }
else { return new CraftSpider(server, (EntitySpider) entity); }
}
else if (entity instanceof EntityEndermite) { return new CraftEndermite(server, (EntityEndermite) entity); }
else if (entity instanceof EntityGuardian) { return new CraftGuardian(server, (EntityGuardian) entity); }
else { return new CraftMonster(server, (EntityMonster) entity); }
}
// Water Animals
else if (entity instanceof EntityWaterAnimal) {
if (entity instanceof EntitySquid) { return new CraftSquid(server, (EntitySquid) entity); }
else { return new CraftWaterMob(server, (EntityWaterAnimal) entity); }
}
else if (entity instanceof EntityGolem) {
if (entity instanceof EntitySnowman) { return new CraftSnowman(server, (EntitySnowman) entity); }
else if (entity instanceof EntityIronGolem) { return new CraftIronGolem(server, (EntityIronGolem) entity); }
@@ -105,6 +108,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
if (entity instanceof EntityBat) { return new CraftBat(server, (EntityBat) entity); }
else { return new CraftAmbient(server, (EntityAmbient) entity); }
}
else if (entity instanceof EntityArmorStand) { return new CraftArmorStand(server, (EntityArmorStand) entity); }
else { return new CraftLivingEntity(server, (EntityLiving) entity); }
}
else if (entity instanceof EntityComplexPart) {
@@ -154,7 +158,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntityTNTPrimed) { return new CraftTNTPrimed(server, (EntityTNTPrimed) entity); }
else if (entity instanceof EntityFireworks) { return new CraftFirework(server, (EntityFireworks) entity); }
throw new AssertionError("Unknown entity " + entity == null ? null : entity.getClass());
throw new AssertionError("Unknown entity " + (entity == null ? null : entity.getClass()));
}
public Location getLocation() {
@@ -224,7 +228,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
public List<org.bukkit.entity.Entity> getNearbyEntities(double x, double y, double z) {
@SuppressWarnings("unchecked")
List<Entity> notchEntityList = entity.world.getEntities(entity, entity.boundingBox.grow(x, y, z));
List<Entity> notchEntityList = entity.world.getEntities(entity, entity.getBoundingBox().grow(x, y, z));
List<org.bukkit.entity.Entity> bukkitEntityList = new java.util.ArrayList<org.bukkit.entity.Entity>(notchEntityList.size());
for (Entity e : notchEntityList) {
@@ -316,7 +320,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
public UUID getUniqueId() {
return getHandle().uniqueID;
return getHandle().getUniqueID();
}
public int getTicksLived() {
@@ -402,4 +406,34 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return getHandle().vehicle.getBukkitEntity();
}
@Override
public void setCustomName(String name) {
if (name == null) {
name = "";
}
getHandle().setCustomName(name);
}
@Override
public String getCustomName() {
String name = getHandle().getCustomName();
if (name == null || name.length() == 0) {
return null;
}
return name;
}
@Override
public void setCustomNameVisible(boolean flag) {
getHandle().setCustomNameVisible(flag);
}
@Override
public boolean isCustomNameVisible() {
return getHandle().getCustomNameVisible();
}
}

View File

@@ -33,11 +33,11 @@ public class CraftFallingSand extends CraftEntity implements FallingSand {
}
public int getBlockId() {
return CraftMagicNumbers.getId(getHandle().id);
return CraftMagicNumbers.getId(getHandle().getBlock().getBlock());
}
public byte getBlockData() {
return (byte) getHandle().data;
return (byte) getHandle().getBlock().getBlock().toLegacyData(getHandle().getBlock());
}
public boolean getDropItem() {

View File

@@ -1,5 +1,6 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.EntityFishingHook;
import net.minecraft.server.EntityHuman;
import net.minecraft.server.MathHelper;
@@ -50,7 +51,7 @@ public class CraftFish extends AbstractProjectile implements Fish {
EntityFishingHook hook = getHandle();
if (this.biteChance == -1) {
if (hook.world.isRainingAt(MathHelper.floor(hook.locX), MathHelper.floor(hook.locY) + 1, MathHelper.floor(hook.locZ))) {
if (hook.world.isRainingAt(new BlockPosition(MathHelper.floor(hook.locX), MathHelper.floor(hook.locY) + 1, MathHelper.floor(hook.locZ)))) {
return 1/300.0;
}
return 1/500.0;

View File

@@ -0,0 +1,23 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityGuardian;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Guardian;
public class CraftGuardian extends CraftMonster implements Guardian {
public CraftGuardian(CraftServer server, EntityGuardian entity) {
super(server, entity);
}
@Override
public String toString() {
return "CraftGuardian";
}
@Override
public EntityType getType() {
return EntityType.GUARDIAN;
}
}

View File

@@ -1,6 +1,8 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.EntityHanging;
import net.minecraft.server.EnumDirection;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.CraftServer;
@@ -23,30 +25,27 @@ public class CraftHanging extends CraftEntity implements Hanging {
public boolean setFacingDirection(BlockFace face, boolean force) {
Block block = getLocation().getBlock().getRelative(getAttachedFace()).getRelative(face.getOppositeFace()).getRelative(getFacing());
EntityHanging hanging = getHandle();
int x = hanging.x, y = hanging.y, z = hanging.z, dir = hanging.direction;
hanging.x = block.getX();
hanging.y = block.getY();
hanging.z = block.getZ();
BlockPosition old = hanging.getBlockPosition();
EnumDirection dir = hanging.direction;
hanging.blockPosition = new BlockPosition(block.getX(), block.getY(), block.getZ());
switch (face) {
case SOUTH:
default:
getHandle().setDirection(0);
getHandle().setDirection(EnumDirection.SOUTH);
break;
case WEST:
getHandle().setDirection(1);
getHandle().setDirection(EnumDirection.WEST);
break;
case NORTH:
getHandle().setDirection(2);
getHandle().setDirection(EnumDirection.NORTH);
break;
case EAST:
getHandle().setDirection(3);
getHandle().setDirection(EnumDirection.EAST);
break;
}
if (!force && !hanging.survives()) {
// Revert since it doesn't fit
hanging.x = x;
hanging.y = y;
hanging.z = z;
hanging.blockPosition = old;
hanging.setDirection(dir);
return false;
}
@@ -55,14 +54,14 @@ public class CraftHanging extends CraftEntity implements Hanging {
public BlockFace getFacing() {
switch (this.getHandle().direction) {
case 0:
case SOUTH:
default:
return BlockFace.SOUTH;
case 1:
case WEST:
return BlockFace.WEST;
case 2:
case NORTH:
return BlockFace.NORTH;
case 3:
case EAST:
return BlockFace.EAST;
}
}

View File

@@ -107,7 +107,7 @@ public class CraftHorse extends CraftAnimals implements Horse {
public void setOwner(AnimalTamer owner) {
if (owner != null) {
setTamed(true);
getHandle().setPathEntity(null);
getHandle().setGoalTarget(null, null, false);
setOwnerUUID(owner.getUniqueId());
} else {
setTamed(false);

View File

@@ -2,16 +2,7 @@ package org.bukkit.craftbukkit.entity;
import java.util.Set;
import net.minecraft.server.Container;
import net.minecraft.server.EntityHuman;
import net.minecraft.server.EntityMinecartHopper;
import net.minecraft.server.EntityPlayer;
import net.minecraft.server.PacketPlayInCloseWindow;
import net.minecraft.server.PacketPlayOutOpenWindow;
import net.minecraft.server.TileEntityBrewingStand;
import net.minecraft.server.TileEntityDispenser;
import net.minecraft.server.TileEntityFurnace;
import net.minecraft.server.TileEntityHopper;
import net.minecraft.server.*;
import org.bukkit.GameMode;
import org.bukkit.Location;
@@ -194,38 +185,38 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
break;
case DISPENSER:
if (craftinv.getInventory() instanceof TileEntityDispenser) {
getHandle().openDispenser((TileEntityDispenser) craftinv.getInventory());
getHandle().openTileEntity((TileEntityDispenser) craftinv.getInventory());
} else {
openCustomInventory(inventory, player, 3);
openCustomInventory(inventory, player, "minecraft:dispenser");
}
break;
case FURNACE:
if (craftinv.getInventory() instanceof TileEntityFurnace) {
getHandle().openFurnace((TileEntityFurnace) craftinv.getInventory());
getHandle().openTileEntity((TileEntityFurnace) craftinv.getInventory());
} else {
openCustomInventory(inventory, player, 2);
openCustomInventory(inventory, player, "minecraft:furnace");
}
break;
case WORKBENCH:
openCustomInventory(inventory, player, 1);
openCustomInventory(inventory, player, "minecraft:crafting_table");
break;
case BREWING:
if (craftinv.getInventory() instanceof TileEntityBrewingStand) {
getHandle().openBrewingStand((TileEntityBrewingStand) craftinv.getInventory());
getHandle().openTileEntity((TileEntityBrewingStand) craftinv.getInventory());
} else {
openCustomInventory(inventory, player, 5);
openCustomInventory(inventory, player, "minecraft:brewing_stand");
}
break;
case ENCHANTING:
openCustomInventory(inventory, player, 4);
openCustomInventory(inventory, player, "minecraft:enchanting_table");
break;
case HOPPER:
if (craftinv.getInventory() instanceof TileEntityHopper) {
getHandle().openHopper((TileEntityHopper) craftinv.getInventory());
getHandle().openTileEntity((TileEntityHopper) craftinv.getInventory());
} else if (craftinv.getInventory() instanceof EntityMinecartHopper) {
getHandle().openMinecartHopper((EntityMinecartHopper) craftinv.getInventory());
getHandle().openTileEntity((EntityMinecartHopper) craftinv.getInventory());
} else {
openCustomInventory(inventory, player, 9);
openCustomInventory(inventory, player, "minecraft:hopper");
}
break;
case CREATIVE:
@@ -239,7 +230,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
return getHandle().activeContainer.getBukkitView();
}
private void openCustomInventory(Inventory inventory, EntityPlayer player, int windowType) {
private void openCustomInventory(Inventory inventory, EntityPlayer player, String windowType) {
if (player.playerConnection == null) return;
Container container = new CraftContainer(inventory, this, player.nextContainerCounter());
@@ -249,7 +240,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
String title = container.getBukkitView().getTitle();
int size = container.getBukkitView().getTopInventory().getSize();
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, title, size, true));
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, new ChatComponentText(title), size));
getHandle().activeContainer = container;
getHandle().activeContainer.addSlotListener(player);
}
@@ -264,7 +255,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
if (location == null) {
location = getLocation();
}
getHandle().startCrafting(location.getBlockX(), location.getBlockY(), location.getBlockZ());
getHandle().openTileEntity(new TileEntityContainerWorkbench(getHandle().world, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ())));
if (force) {
getHandle().activeContainer.checkReachable = false;
}
@@ -281,7 +272,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
if (location == null) {
location = getLocation();
}
getHandle().startEnchanting(location.getBlockX(), location.getBlockY(), location.getBlockZ(), null);
getHandle().openTileEntity((ITileEntityContainer) getHandle().world.getTileEntity(new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ())));
if (force) {
getHandle().activeContainer.checkReachable = false;
}
@@ -311,10 +302,10 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
// Now open the window
InventoryType type = inventory.getType();
int windowType = CraftContainer.getNotchInventoryType(type);
String windowType = CraftContainer.getNotchInventoryType(type);
String title = inventory.getTitle();
int size = inventory.getTopInventory().getSize();
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, title, size, false));
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, new ChatComponentText(title), size));
player.activeContainer = container;
player.activeContainer.addSlotListener(player);
}

View File

@@ -197,11 +197,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
reason = DamageSource.mobAttack(((CraftLivingEntity) source).getHandle());
}
if (entity instanceof EntityEnderDragon) {
((EntityEnderDragon) entity).dealDamage(reason, (float) amount);
} else {
entity.damageEntity(reason, (float) amount);
}
entity.damageEntity(reason, (float) amount);
}
public Location getEyeLocation() {
@@ -263,7 +259,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
}
removePotionEffect(effect.getType());
}
getHandle().addEffect(new MobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient()));
getHandle().addEffect(new MobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), true));
return true;
}
@@ -384,47 +380,6 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
return super.teleport(location, cause);
}
public void setCustomName(String name) {
if (!(getHandle() instanceof EntityInsentient)) {
return;
}
if (name == null) {
name = "";
}
// Names cannot be more than 64 characters due to DataWatcher limitations
if (name.length() > 64) {
name = name.substring(0, 64);
}
((EntityInsentient) getHandle()).setCustomName(name);
}
public String getCustomName() {
if (!(getHandle() instanceof EntityInsentient)) {
return null;
}
String name = ((EntityInsentient) getHandle()).getCustomName();
if (name == null || name.length() == 0) {
return null;
}
return name;
}
public void setCustomNameVisible(boolean flag) {
if (getHandle() instanceof EntityInsentient) {
((EntityInsentient) getHandle()).setCustomNameVisible(flag);
}
}
public boolean isCustomNameVisible() {
return getHandle() instanceof EntityInsentient && ((EntityInsentient) getHandle()).getCustomNameVisible();
}
public boolean isLeashed() {
if (!(getHandle() instanceof EntityInsentient)) {
return false;

View File

@@ -54,9 +54,7 @@ public class CraftPainting extends CraftHanging implements Painting {
private void update() {
WorldServer world = ((CraftWorld) getWorld()).getHandle();
EntityPainting painting = new EntityPainting(world);
painting.x = getHandle().x;
painting.y = getHandle().y;
painting.z = getHandle().z;
painting.blockPosition = getHandle().blockPosition;
painting.art = getHandle().art;
painting.setDirection(getHandle().direction);
getHandle().die();

View File

@@ -1,12 +1,14 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.MapMaker;
import com.mojang.authlib.GameProfile;
import io.netty.buffer.Unpooled;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -19,7 +21,6 @@ import java.util.logging.Logger;
import net.minecraft.server.*;
import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.NotImplementedException;
import org.bukkit.*;
@@ -53,6 +54,7 @@ import org.bukkit.event.player.PlayerRegisterChannelEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerUnregisterChannelEvent;
import org.bukkit.inventory.InventoryView.Property;
import org.bukkit.map.MapCursor;
import org.bukkit.map.MapView;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
@@ -174,44 +176,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public String getPlayerListName() {
return getHandle().listName;
return CraftChatMessage.fromComponent(getHandle().listName);
}
@Override
public void setPlayerListName(String name) {
String oldName = getHandle().listName;
if (name == null) {
name = getName();
}
if (oldName.equals(name)) {
return;
}
if (name.length() > 16) {
throw new IllegalArgumentException("Player list names can only be a maximum of 16 characters long");
}
// Collisions will make for invisible people
for (int i = 0; i < server.getHandle().players.size(); ++i) {
if (((EntityPlayer) server.getHandle().players.get(i)).listName.equals(name)) {
throw new IllegalArgumentException(name + " is already assigned as a player list name for someone");
}
}
getHandle().listName = name;
// Change the name on the client side
PacketPlayOutPlayerInfo oldpacket = new PacketPlayOutPlayerInfo(oldName, false, 9999);
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(name, true, getHandle().ping);
for (int i = 0; i < server.getHandle().players.size(); ++i) {
EntityPlayer entityplayer = (EntityPlayer) server.getHandle().players.get(i);
if (entityplayer.playerConnection == null) continue;
if (entityplayer.getBukkitEntity().canSee(this)) {
entityplayer.playerConnection.sendPacket(oldpacket);
entityplayer.playerConnection.sendPacket(packet);
getHandle().listName = name.equals(getName()) ? null : CraftChatMessage.fromString(name)[0];
for (EntityPlayer player : (List<EntityPlayer>)server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
player.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.UPDATE_DISPLAY_NAME, getHandle()));
}
}
}
@@ -248,7 +224,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (getHandle().playerConnection == null) return;
// Do not directly assign here, from the packethandler we'll assign it.
getHandle().playerConnection.sendPacket(new PacketPlayOutSpawnPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
getHandle().playerConnection.sendPacket(new PacketPlayOutSpawnPosition(new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())));
}
@Override
@@ -343,7 +319,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (getHandle().playerConnection == null) return;
int packetData = effect.getId();
PacketPlayOutWorldEvent packet = new PacketPlayOutWorldEvent(packetData, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), data, false);
PacketPlayOutWorldEvent packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()), data, false);
getHandle().playerConnection.sendPacket(packet);
}
@@ -368,10 +344,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void sendBlockChange(Location loc, int material, byte data) {
if (getHandle().playerConnection == null) return;
PacketPlayOutBlockChange packet = new PacketPlayOutBlockChange(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), ((CraftWorld) loc.getWorld()).getHandle());
PacketPlayOutBlockChange packet = new PacketPlayOutBlockChange(((CraftWorld) loc.getWorld()).getHandle(), new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
packet.block = CraftMagicNumbers.getBlock(material);
packet.data = data;
packet.block = CraftMagicNumbers.getBlock(material).fromLegacyData(data);
getHandle().playerConnection.sendPacket(packet);
}
@@ -390,10 +365,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
throw new IllegalArgumentException("Must have at least 4 lines");
}
// Limit to 15 chars per line and set null lines to blank
String[] astring = CraftSign.sanitizeLines(lines);
IChatBaseComponent[] components = CraftSign.sanitizeLines(lines);
getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateSign(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), astring));
getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateSign(getHandle().world, new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()), components));
}
@Override
@@ -435,15 +409,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (getHandle().playerConnection == null) return;
RenderData data = ((CraftMapView) map).render(this);
for (int x = 0; x < 128; ++x) {
byte[] bytes = new byte[131];
bytes[1] = (byte) x;
for (int y = 0; y < 128; ++y) {
bytes[y + 3] = data.buffer[y * 128 + x];
Collection<MapIcon> icons = new ArrayList<MapIcon>();
for (MapCursor cursor : data.cursors) {
if (cursor.isVisible()) {
icons.add(new MapIcon(cursor.getRawType(), cursor.getX(), cursor.getY(), cursor.getDirection()));
}
PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), bytes);
getHandle().playerConnection.sendPacket(packet);
}
PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), map.getScale().getValue(), icons, data.buffer, 0, 0, 0, 0);
getHandle().playerConnection.sendPacket(packet);
}
@Override
@@ -455,7 +429,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
if (entity.playerConnection == null || entity.playerConnection.isDisconnected()) {
return false;
return false;
}
if (entity.passenger != null) {
@@ -781,7 +755,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (event.isCancelled()) {
return;
}
getHandle().e((Entity) getHandle()); // RENAME
getHandle().playerInteractManager.setGameMode(EnumGamemode.getById(mode.getValue()));
getHandle().fallDistance = 0;
getHandle().playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, mode.getValue()));
@@ -793,90 +768,108 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return GameMode.getByValue(getHandle().playerInteractManager.getGameMode().getId());
}
@Override
public void giveExp(int exp) {
getHandle().giveExp(exp);
}
@Override
public void giveExpLevels(int levels) {
getHandle().levelDown(levels);
}
@Override
public float getExp() {
return getHandle().exp;
}
@Override
public void setExp(float exp) {
getHandle().exp = exp;
getHandle().lastSentExp = -1;
}
@Override
public int getLevel() {
return getHandle().expLevel;
}
@Override
public void setLevel(int level) {
getHandle().expLevel = level;
getHandle().lastSentExp = -1;
}
@Override
public int getTotalExperience() {
return getHandle().expTotal;
}
@Override
public void setTotalExperience(int exp) {
getHandle().expTotal = exp;
}
@Override
public float getExhaustion() {
return getHandle().getFoodData().exhaustionLevel;
}
@Override
public void setExhaustion(float value) {
getHandle().getFoodData().exhaustionLevel = value;
}
@Override
public float getSaturation() {
return getHandle().getFoodData().saturationLevel;
}
@Override
public void setSaturation(float value) {
getHandle().getFoodData().saturationLevel = value;
}
@Override
public int getFoodLevel() {
return getHandle().getFoodData().foodLevel;
}
@Override
public void setFoodLevel(int value) {
getHandle().getFoodData().foodLevel = value;
}
@Override
public Location getBedSpawnLocation() {
World world = getServer().getWorld(getHandle().spawnWorld);
ChunkCoordinates bed = getHandle().getBed();
BlockPosition bed = getHandle().getBed();
if (world != null && bed != null) {
bed = EntityHuman.getBed(((CraftWorld) world).getHandle(), bed, getHandle().isRespawnForced());
if (bed != null) {
return new Location(world, bed.x, bed.y, bed.z);
return new Location(world, bed.getX(), bed.getY(), bed.getZ());
}
}
return null;
}
@Override
public void setBedSpawnLocation(Location location) {
setBedSpawnLocation(location, false);
}
@Override
public void setBedSpawnLocation(Location location, boolean override) {
if (location == null) {
getHandle().setRespawnPosition(null, override);
} else {
getHandle().setRespawnPosition(new ChunkCoordinates(location.getBlockX(), location.getBlockY(), location.getBlockZ()), override);
getHandle().setRespawnPosition(new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), override);
getHandle().spawnWorld = location.getWorld().getName();
}
}
@Override
public void hidePlayer(Player player) {
Validate.notNull(player, "hidden player cannot be null");
if (getHandle().playerConnection == null) return;
@@ -893,9 +886,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
//remove the hidden player from this player user list
getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), false, 9999));
getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, other));
}
@Override
public void showPlayer(Player player) {
Validate.notNull(player, "shown player cannot be null");
if (getHandle().playerConnection == null) return;
@@ -910,17 +904,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
entry.updatePlayer(getHandle());
}
getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), true, getHandle().ping));
getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, other));
}
public void removeDisconnectingPlayer(Player player) {
hiddenPlayers.remove(player.getUniqueId());
}
@Override
public boolean canSee(Player player) {
return !hiddenPlayers.contains(player.getUniqueId());
}
@Override
public Map<String, Object> serialize() {
Map<String, Object> result = new LinkedHashMap<String, Object>();
@@ -929,6 +925,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return result;
}
@Override
public Player getPlayer() {
return this;
}
@@ -955,14 +952,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return hash;
}
@Override
public long getFirstPlayed() {
return firstPlayed;
}
@Override
public long getLastPlayed() {
return lastPlayed;
}
@Override
public boolean hasPlayedBefore() {
return hasPlayedBefore;
}
@@ -1009,36 +1009,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
data.setString("lastKnownName", handle.getName());
}
@Override
public boolean beginConversation(Conversation conversation) {
return conversationTracker.beginConversation(conversation);
}
@Override
public void abandonConversation(Conversation conversation) {
conversationTracker.abandonConversation(conversation, new ConversationAbandonedEvent(conversation, new ManuallyAbandonedConversationCanceller()));
}
@Override
public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details) {
conversationTracker.abandonConversation(conversation, details);
}
@Override
public void acceptConversationInput(String input) {
conversationTracker.acceptConversationInput(input);
}
@Override
public boolean isConversing() {
return conversationTracker.isConversing();
}
@Override
public void sendPluginMessage(Plugin source, String channel, byte[] message) {
StandardMessenger.validatePluginMessage(server.getMessenger(), source, channel, message);
if (getHandle().playerConnection == null) return;
if (channels.contains(channel)) {
PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload(channel, message);
PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload(channel, new PacketDataSerializer(Unpooled.wrappedBuffer(message)));
getHandle().playerConnection.sendPacket(packet);
}
}
@Override
public void setTexturePack(String url) {
setResourcePack(url);
}
@@ -1047,7 +1054,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void setResourcePack(String url) {
Validate.notNull(url, "Resource pack URL cannot be null");
getHandle().setResourcePack(url);
getHandle().setResourcePack(url, "null");
}
public void addChannel(String channel) {
@@ -1062,6 +1069,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}
@Override
public Set<String> getListeningPluginChannels() {
return ImmutableSet.copyOf(channels);
}
@@ -1082,7 +1090,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}
getHandle().playerConnection.sendPacket(new PacketPlayOutCustomPayload("REGISTER", stream.toByteArray()));
getHandle().playerConnection.sendPacket(new PacketPlayOutCustomPayload("REGISTER", new PacketDataSerializer(Unpooled.wrappedBuffer(stream.toByteArray()))));
}
}
@@ -1126,10 +1134,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
perm.clearPermissions();
}
@Override
public boolean isFlying() {
return getHandle().abilities.isFlying;
}
@Override
public void setFlying(boolean value) {
if (!getAllowFlight() && value) {
throw new IllegalArgumentException("Cannot make player fly if getAllowFlight() is false");
@@ -1139,10 +1149,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
getHandle().updateAbilities();
}
@Override
public boolean getAllowFlight() {
return getHandle().abilities.canFly;
}
@Override
public void setAllowFlight(boolean value) {
if (isFlying() && !value) {
getHandle().abilities.isFlying = false;
@@ -1161,6 +1173,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}
@Override
public void setFlySpeed(float value) {
validateSpeed(value);
EntityPlayer player = getHandle();
@@ -1169,6 +1182,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
@Override
public void setWalkSpeed(float value) {
validateSpeed(value);
EntityPlayer player = getHandle();
@@ -1176,10 +1190,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
player.updateAbilities();
}
@Override
public float getFlySpeed() {
return getHandle().abilities.flySpeed * 2f;
}
@Override
public float getWalkSpeed() {
return getHandle().abilities.walkSpeed * 2f;
}
@@ -1209,10 +1225,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
getHandle().triggerHealthUpdate();
}
@Override
public CraftScoreboard getScoreboard() {
return this.server.getScoreboardManager().getPlayerBoard(this);
}
@Override
public void setScoreboard(Scoreboard scoreboard) {
Validate.notNull(scoreboard, "Scoreboard cannot be null");
PlayerConnection playerConnection = getHandle().playerConnection;
@@ -1226,6 +1244,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.server.getScoreboardManager().setPlayerBoard(this, scoreboard);
}
@Override
public void setHealthScale(double value) {
Validate.isTrue((float) value > 0F, "Must be greater than 0");
healthScale = value;
@@ -1233,16 +1252,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
updateScaledHealth();
}
@Override
public double getHealthScale() {
return healthScale;
}
@Override
public void setHealthScaled(boolean scale) {
if (scaledHealth != (scaledHealth = scale)) {
updateScaledHealth();
}
}
@Override
public boolean isHealthScaled() {
return scaledHealth;
}
@@ -1285,6 +1307,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
break;
}
}
collection.add(new AttributeModifiable(getHandle().getAttributeMap(), (new AttributeRanged("generic.maxHealth", scaledHealth ? healthScale : getMaxHealth(), 0.0D, Float.MAX_VALUE)).a("Max Health").a(true)));
collection.add(new AttributeModifiable(getHandle().getAttributeMap(), (new AttributeRanged(null, "generic.maxHealth", scaledHealth ? healthScale : getMaxHealth(), 0.0D, Float.MAX_VALUE)).a("Max Health").a(true)));
}
}

View File

@@ -0,0 +1,23 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityRabbit;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Rabbit;
public class CraftRabbit extends CraftAnimals implements Rabbit {
public CraftRabbit(CraftServer server, EntityRabbit entity) {
super(server, entity);
}
@Override
public String toString() {
return "CraftRabbit";
}
@Override
public EntityType getType() {
return EntityType.RABBIT;
}
}

View File

@@ -2,6 +2,7 @@ package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntitySheep;
import net.minecraft.server.EnumColor;
import org.bukkit.DyeColor;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
@@ -13,11 +14,11 @@ public class CraftSheep extends CraftAnimals implements Sheep {
}
public DyeColor getColor() {
return DyeColor.getByWoolData((byte) getHandle().getColor());
return DyeColor.getByWoolData((byte) getHandle().getColor().getColorIndex());
}
public void setColor(DyeColor color) {
getHandle().setColor(color.getWoolData());
getHandle().setColor(EnumColor.fromColorIndex(color.getWoolData()));
}
public boolean isSheared() {

View File

@@ -54,7 +54,7 @@ public class CraftTameableAnimal extends CraftAnimals implements Tameable, Creat
public void setOwner(AnimalTamer tamer) {
if (tamer != null) {
setTamed(true);
getHandle().setPathEntity(null);
getHandle().setGoalTarget(null, null, false);
setOwnerUUID(tamer.getUniqueId());
} else {
setTamed(false);

View File

@@ -3,10 +3,13 @@ package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityVillager;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Villager;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
public class CraftVillager extends CraftAgeable implements Villager {
public class CraftVillager extends CraftAgeable implements Villager, InventoryHolder {
public CraftVillager(CraftServer server, EntityVillager entity) {
super(server, entity);
}
@@ -33,4 +36,9 @@ public class CraftVillager extends CraftAgeable implements Villager {
Validate.notNull(profession);
getHandle().setProfession(profession.getId());
}
@Override
public Inventory getInventory() {
return new CraftInventory(getHandle().inventory);
}
}

View File

@@ -3,9 +3,10 @@ package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityWaterAnimal;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.WaterMob;
public class CraftWaterMob extends CraftCreature implements WaterMob {
public class CraftWaterMob extends CraftLivingEntity implements WaterMob {
public CraftWaterMob(CraftServer server, EntityWaterAnimal entity) {
super(server, entity);

View File

@@ -1,6 +1,7 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityWolf;
import net.minecraft.server.EnumColor;
import org.bukkit.DyeColor;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
@@ -30,10 +31,10 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf {
}
public DyeColor getCollarColor() {
return DyeColor.getByWoolData((byte) getHandle().getCollarColor());
return DyeColor.getByWoolData((byte) getHandle().getCollarColor().getColorIndex());
}
public void setCollarColor(DyeColor color) {
getHandle().setCollarColor(color.getWoolData());
getHandle().setCollarColor(EnumColor.fromColorIndex(color.getWoolData()));
}
}