001/*
002 * Trident - A Multithreaded Server Alternative
003 * Copyright 2014 The TridentSDK Team
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *    http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package net.tridentsdk.server.entity.projectile;
018
019import net.tridentsdk.base.Position;
020import net.tridentsdk.entity.Entity;
021import net.tridentsdk.entity.living.ProjectileLauncher;
022import net.tridentsdk.entity.projectile.Enderpearl;
023import net.tridentsdk.entity.traits.EntityProperties;
024import net.tridentsdk.entity.types.EntityType;
025
026import java.util.UUID;
027
028/**
029 * Represents an ender pearl in flight
030 *
031 * @author The TridentSDK Team
032 */
033public class TridentEnderPearl extends TridentProjectile implements Enderpearl {
034    public TridentEnderPearl(UUID uuid, Position spawnPosition, ProjectileLauncher projectileLauncher) {
035        super(uuid, spawnPosition, projectileLauncher);
036    }
037
038    @Override
039    public void applyProperties(EntityProperties properties) {
040
041    }
042
043    @Override
044    protected void hit() {
045        ProjectileLauncher launcher;
046
047        // In case the launcher had not had the time yet to
048        // record the launch into the projectile
049        while ((launcher = launcher()) == null) {
050        }
051
052        if (launcher instanceof Entity) {
053            Entity entity = (Entity) launcher;
054            entity.teleport(position());
055        }
056    }
057
058    @Override
059    public EntityType type() {
060        return EntityType.ENDER_PEARL;
061    }
062}