package com.w67clement.mineapi.nms.reflection.packets.play.out;
import com.w67clement.mineapi.api.ReflectionAPI.*;
import com.w67clement.mineapi.api.wrappers.ChatComponentWrapper;
import com.w67clement.mineapi.inventory.packets.WindowOpen;
import com.w67clement.mineapi.inventory.packets.WindowType;
import java.lang.reflect.Field;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import static com.w67clement.mineapi.api.ReflectionAPI.*;
/**
* Created by w67clement on 09/02/2016.
* <p>
* Class of project: MineAPI
*/
public class CraftWindowOpen extends WindowOpen<Object>
{
private static final Class<?> packetClass;
private static final Field idField;
private static final Field typeField;
private static final Field titleField;
private static final Field sizeField;
private static final Field horseIdField;
static
{
packetClass = getNmsClass("PacketPlayOutOpenWindow");
idField = getFirstFieldOfType(packetClass, int.class, true);
typeField = getFirstFieldOfType(packetClass, String.class, true);
titleField = getFirstFieldOfType(packetClass, NmsClass.getIChatBaseComponentClass(), true);
sizeField = getField(packetClass, "d", true);
horseIdField = getField(packetClass, "e", true);
}
public CraftWindowOpen(Object packet)
{
super(packet);
}
public CraftWindowOpen(int id, WindowType type, String title, int size)
{
this(id, type, title, size, 0);
}
public CraftWindowOpen(int id, WindowType type, String title, int size, int horseId)
{
super(SunUnsafe.newInstance(packetClass));
setId(id);
setWindowType(type);
setTitle(title);
setSize(size);
setHorseId(horseId);
}
public CraftWindowOpen(int id, Inventory inventory)
{
super(SunUnsafe.newInstance(packetClass));
setId(id);
setWindowType(WindowType.getByInventory(inventory.getType()));
setTitleText(inventory.getTitle());
setSize(inventory.getSize());
setHorseId(0);
}
@Override
public int getId()
{
return getIntValue(packet, idField);
}
@Override
public WindowOpen setId(int id)
{
setValue(packet, idField, id);
return this;
}
@Override
public WindowType getWindowType()
{
return WindowType.getByMCValue(getStringValue(packet, typeField));
}
@Override
public WindowOpen setWindowType(WindowType type)
{
setValue(packet, typeField, type.getMCValue());
return this;
}
@Override
public String getTitle()
{
return ChatComponentWrapper.makeJsonByChatComponent(getValue(packet, titleField));
}
@Override
public WindowOpen setTitle(String title)
{
setValue(packet, titleField, ChatComponentWrapper.makeChatComponentByJson(title));
return this;
}
@Override
public int getSize()
{
return getIntValue(packet, sizeField);
}
@Override
public WindowOpen setSize(int size)
{
setValue(packet, sizeField, size);
return this;
}
@Override
public int getHorseId()
{
return getIntValue(packet, horseIdField);
}
@Override
public WindowOpen setHorseId(int horseId)
{
setValue(packet, horseIdField, horseId);
return this;
}
@Override
public void send(Player player)
{
NmsClass.sendPacket(player, this.getHandle());
}
}