package server;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
public class Item extends RoomEntity {
private static final long serialVersionUID = 12349817419237461L;
private String name;
private String description = "";
private String image;
private boolean destroyed;
public Item() {
}
public Item(Player player, String name, Container container) {
super(IdType.ITEM);
this.name = name;
IdType.addItem(this);
moveTo(container);
}
public void setName(String name) {
this.name = name;
getRoom().notifyRoomEntityChanged(this, null);
}
public Container getContainer() {
return ParentTracker.ITEM.getParent(this);
}
@Override
public Room getRoom() {
Container container = getContainer();
if (container == null) {
return null;
}
ContainerHolder holder = container.getHolder();
if (holder instanceof Room) {
return (Room) holder;
}
return null;
}
@Override
public boolean isVisibleTo(Player player) {
return true;
}
@Override
public boolean isAudibleTo(Player player) {
return true;
}
public void destroy() {
this.destroyed = true;
moveTo((Container) null);
IdType.removeItem(this);
}
public String getName() {
return name;
}
@Override
public String getDescription(Player observer) {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
@Override
public void sendInfo(Player player) {
player.sendText(true, "@000@10F Type: @000Item");
player.sendText(false, "@000@10F Id: @000" + getId());
player.sendText(false, "@000@10F Name: @000" + getName(player, false));
if (player.getAdminFlags().contains(AdminFlag.ADMIN_VIEWS)) {
Room room = getRoom();
player.sendText(false, "@000@10F Room: @000" + String.valueOf(room));
}
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
if (destroyed) {
throw new FatalError("Attempt to save destroyed item: " + this);
}
super.writeExternal(out);
out.writeInt(1); out.writeObject(name);
out.writeObject(description);
out.writeObject(image);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
super.readExternal(in);
in.readInt(); name = (String) in.readObject();
description = (String) in.readObject();
image = (String) in.readObject();
IdType.addItem(this);
}
@Override
public String getPossessive(Player observer, boolean somebodyIfUnknown) {
return getNominative(observer, somebodyIfUnknown) + "'s";
}
@Override
public void moveTo(Room room) {
moveTo(room.getInventory());
}
public void moveTo(Container container) {
Container oldContainer = getContainer();
if (oldContainer != null) {
ContainerHolder oldHolder = oldContainer.getHolder();
if (oldHolder instanceof Room) {
((Room) oldHolder).notifyRoomEntityRemoved(this);
}
}
ParentTracker.ITEM.setParent(this, container);
if (container != null) {
ContainerHolder holder = container.getHolder();
if (holder instanceof Room) {
((Room) holder).notifyRoomEntityAdded(this);
}
}
}
@Override
public String toString() {
return getName() + " #" + getId();
}
@Override
public String getName(Player observer, boolean showStatus) {
return getName() + " #" + getId();
}
@Override
public String getPlural() {
return null;
}
@Override
public String getPossessed() {
return null;
}
}