/* * This file is part of BukkitBridge. * * Copyright (c) 2012 Spout LLC <http://www.spout.org/> * BukkitBridge is licensed under the GNU General Public License. * * BukkitBridge is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * BukkitBridge is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.spout.bridge.bukkit.entity; import org.spout.api.entity.Entity; import org.spout.api.entity.Player; import org.spout.vanilla.component.entity.living.Living; import org.spout.vanilla.component.entity.substance.Substance; import org.spout.vanilla.protocol.entity.creature.CreatureType; import org.spout.vanilla.protocol.entity.object.ObjectType; /** * Creates BridgeEntity and BridgePlayer objects upon request. */ public final class EntityFactory { /** * Creates a BridgeEntity from a Spout API Entity. If the Entity is a Player, this method will return a BridgePlayer object instead of a plain BridgeEntity. * * @param entity The Spout API Entity to create a BridgeEntity from * @return The BridgeEntity that represents the Spout API Entity */ public static BridgeEntity createEntity(Entity entity) { if (entity instanceof Player) { return createPlayer((Player) entity); } Living living = entity.get(Living.class); if (living != null) { switch (CreatureType.get(living.getClass())) { case BAT: return null; // TODO: Implement Bat case BLAZE: return new BridgeBlaze(entity); case CAVE_SPIDER: return new BridgeCaveSpider(entity); case CHICKEN: return new BridgeChicken(entity); case COW: return new BridgeCow(entity); case CREEPER: return new BridgeCreeper(entity); case ENDER_DRAGON: return new BridgeEnderDragon(entity); case ENDERMAN: return new BridgeEnderman(entity); case GHAST: return new BridgeGhast(entity); case GIANT: return new BridgeGiant(entity); case IRON_GOLEM: return new BridgeIronGolem(entity); case MAGMA_CUBE: return new BridgeMagmaCube(entity); case MUSHROOM_COW: return new BridgeMushroomCow(entity); case OCELOT: return new BridgeOcelot(entity); case PIG: return new BridgePig(entity); case PIG_ZOMBIE: return new BridgePigZombie(entity); case SHEEP: return new BridgeSheep(entity); case SILVERFISH: return new BridgeSilverfish(entity); case SKELETON: return new BridgeSkeleton(entity); case SLIME: return new BridgeSlime(entity); case SNOW_GOLEM: return new BridgeSnowman(entity); case SPIDER: return new BridgeSpider(entity); case SQUID: return new BridgeSquid(entity); case VILLAGER: return new BridgeVillager(entity); case WOLF: return new BridgeWolf(entity); case ZOMBIE: return new BridgeZombie(entity); default: return null; } } Substance object = entity.get(Substance.class); if (object != null) { switch (ObjectType.get(object.getClass())) { case BOAT: return new BridgeBoat(entity); case ITEM: return new BridgeItem(entity); case MINECART: return new BridgeMinecart(entity); case PRIMED_TNT: return new BridgeTNTPrimed(entity); case ENDER_CRYSTAL: return new BridgeEnderCrystal(entity); case ARROW: return new BridgeArrow(entity); case SNOWBALL: return new BridgeSnowball(entity); case EGG: return new BridgeEgg(entity); case ENDER_PEARL: return new BridgeEnderPearl(entity); case WITHER_SKULL: return null; // TODO: Implement Wither skulls case FALLING_OBJECT: return new BridgeFallingSand(entity); // TODO: Not sure if this is 100% correct case ITEM_FRAME: return null; // TODO: Implement item frames case EYE_OF_ENDER: return null; // TODO: Implement Eye of Ender case POTION: return new BridgeThrownPotion(entity); case DRAGON_EGG: return null; // TODO: Implement Dragon egg case EXP_BOTTLE: return new BridgeThrownExpBottle(entity); case FIREWORKS_ROCKET: return null; // TODO: Implement Fireworks case FISHING_BOB: return new BridgeFish(entity); default: return null; } } return null; } /** * Creates a BridgePlayer from a Spout API Player. * * @param player The Spout API Player to create a BridgePlayer from * @return The BridgePlayer that represents the Spout API Player */ public static BridgePlayer createPlayer(Player player) { return new BridgePlayer(player); } }