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}