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;
018
019import net.tridentsdk.base.Position;
020import net.tridentsdk.entity.DroppedItem;
021import net.tridentsdk.entity.types.EntityType;
022import net.tridentsdk.inventory.Item;
023import net.tridentsdk.server.data.MetadataType;
024import net.tridentsdk.server.data.ProtocolMetadata;
025import net.tridentsdk.server.data.Slot;
026import net.tridentsdk.server.packets.play.out.PacketPlayOutEntityMetadata;
027import net.tridentsdk.server.packets.play.out.PacketPlayOutSpawnObject;
028import net.tridentsdk.server.player.TridentPlayer;
029
030import java.util.UUID;
031
032/**
033 * Represents an item that is dropped on the ground
034 *
035 * @author The TridentSDK Team
036 */
037public class TridentDroppedItem extends TridentEntity implements DroppedItem {
038
039    private int age = 0;
040    private Item item;
041
042    public TridentDroppedItem(Position spawnPosition, Item item) {
043        super(UUID.randomUUID(), spawnPosition);
044        this.item = item;
045        setSize(0.25f, 0.25f);
046    }
047
048    @Override
049    public int age() {
050        return age;
051    }
052
053    @Override
054    public void setAge(int age) {
055        this.age = age;
056    }
057
058    @Override
059    protected void doTick(){
060        age++;
061    }
062
063    @Override
064    public short health() {
065        return 0;
066    }
067
068    @Override
069    public void setHealth(short health) {
070
071    }
072
073    @Override
074    public String owner() {
075        return null;
076    }
077
078    @Override
079    public void setOwner(String owner) {
080
081    }
082
083    @Override
084    public String dropper() {
085        return null;
086    }
087
088    @Override
089    public void setDropper(String dropper) {
090
091    }
092
093    @Override
094    public EntityType type() {
095        return EntityType.ITEM;
096    }
097
098    @Override
099    public TridentEntity spawn(){
100        super.spawn();
101
102        ProtocolMetadata metadata = new ProtocolMetadata();
103        super.encodeMetadata(metadata);
104        metadata.setMeta(10, MetadataType.SLOT, new Slot(item));
105
106        PacketPlayOutSpawnObject object = new PacketPlayOutSpawnObject();
107        object.set("entityId", entityId());
108        object.set("entity", this);
109
110        PacketPlayOutEntityMetadata meta = new PacketPlayOutEntityMetadata();
111        meta.set("entityId", entityId());
112        meta.set("metadata", metadata);
113
114        TridentPlayer.sendAll(object);
115        TridentPlayer.sendAll(meta);
116        return this;
117    }
118
119    public Item item(){
120        return item;
121    }
122
123    public boolean canPickupItem(){
124        return age() > 40; // TODO Find out actual value
125    }
126}