package com.laytonsmith.abstraction.bukkit.events;
import com.laytonsmith.abstraction.MCCraftingInventory;
import com.laytonsmith.abstraction.MCEnchantment;
import com.laytonsmith.abstraction.MCHumanEntity;
import com.laytonsmith.abstraction.MCInventory;
import com.laytonsmith.abstraction.MCInventoryView;
import com.laytonsmith.abstraction.MCItemStack;
import com.laytonsmith.abstraction.MCPlayer;
import com.laytonsmith.abstraction.MCRecipe;
import com.laytonsmith.abstraction.blocks.MCBlock;
import com.laytonsmith.abstraction.bukkit.BukkitConvertor;
import com.laytonsmith.abstraction.bukkit.BukkitMCCraftingInventory;
import com.laytonsmith.abstraction.bukkit.BukkitMCEnchantment;
import com.laytonsmith.abstraction.bukkit.BukkitMCInventory;
import com.laytonsmith.abstraction.bukkit.BukkitMCInventoryView;
import com.laytonsmith.abstraction.bukkit.BukkitMCItemStack;
import com.laytonsmith.abstraction.bukkit.blocks.BukkitMCBlock;
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCHumanEntity;
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCPlayer;
import com.laytonsmith.abstraction.enums.MCClickType;
import com.laytonsmith.abstraction.enums.MCDragType;
import com.laytonsmith.abstraction.enums.MCInventoryAction;
import com.laytonsmith.abstraction.enums.MCResult;
import com.laytonsmith.abstraction.enums.MCSlotType;
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCClickType;
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCInventoryAction;
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCResult;
import com.laytonsmith.abstraction.events.MCEnchantItemEvent;
import com.laytonsmith.abstraction.events.MCInventoryClickEvent;
import com.laytonsmith.abstraction.events.MCInventoryCloseEvent;
import com.laytonsmith.abstraction.events.MCInventoryDragEvent;
import com.laytonsmith.abstraction.events.MCInventoryEvent;
import com.laytonsmith.abstraction.events.MCInventoryInteractEvent;
import com.laytonsmith.abstraction.events.MCInventoryOpenEvent;
import com.laytonsmith.abstraction.events.MCItemHeldEvent;
import com.laytonsmith.abstraction.events.MCItemSwapEvent;
import com.laytonsmith.abstraction.events.MCPrepareItemCraftEvent;
import com.laytonsmith.abstraction.events.MCPrepareItemEnchantEvent;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Result;
import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryEvent;
import org.bukkit.event.inventory.InventoryInteractEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
*
* @author jb_aero
*/
public class BukkitInventoryEvents {
public static class BukkitMCInventoryEvent implements MCInventoryEvent {
InventoryEvent event;
public BukkitMCInventoryEvent(InventoryEvent e) {
event = e;
}
@Override
public List<MCHumanEntity> getViewers() {
List<MCHumanEntity> viewers = new ArrayList<MCHumanEntity>();
for (HumanEntity viewer : event.getViewers()) {
viewers.add(new BukkitMCHumanEntity(viewer));
}
return viewers;
}
@Override
public MCInventoryView getView() {
return new BukkitMCInventoryView(event.getView());
}
@Override
public MCInventory getInventory() {
return new BukkitMCInventory(event.getInventory());
}
@Override
public Object _GetObject() {
return event;
}
}
public static class BukkitMCInventoryInteractEvent extends BukkitMCInventoryEvent
implements MCInventoryInteractEvent {
InventoryInteractEvent iie;
public BukkitMCInventoryInteractEvent(InventoryInteractEvent e) {
super(e);
iie = e;
}
@Override
public MCHumanEntity getWhoClicked() {
return new BukkitMCHumanEntity(iie.getWhoClicked());
}
@Override
public void setResult(MCResult newResult) {
iie.setResult(Result.valueOf(newResult.name()));
}
@Override
public MCResult getResult() {
return BukkitMCResult.getConvertor().getAbstractedEnum(iie.getResult());
}
@Override
public boolean isCanceled() {
return iie.isCancelled();
}
@Override
public void setCancelled(boolean cancelled) {
iie.setCancelled(cancelled);
}
}
public static class BukkitMCInventoryOpenEvent extends BukkitMCInventoryEvent
implements MCInventoryOpenEvent {
InventoryOpenEvent ioe;
public BukkitMCInventoryOpenEvent(InventoryOpenEvent e) {
super(e);
ioe = e;
}
@Override
public MCHumanEntity getPlayer() {
return new BukkitMCHumanEntity(ioe.getPlayer());
}
}
public static class BukkitMCInventoryCloseEvent extends BukkitMCInventoryEvent
implements MCInventoryCloseEvent {
InventoryCloseEvent ice;
public BukkitMCInventoryCloseEvent(InventoryCloseEvent e) {
super(e);
ice = e;
}
@Override
public MCHumanEntity getPlayer() {
return new BukkitMCHumanEntity(ice.getPlayer());
}
}
public static class BukkitMCInventoryClickEvent extends BukkitMCInventoryInteractEvent
implements MCInventoryClickEvent {
InventoryClickEvent ic;
public BukkitMCInventoryClickEvent(InventoryClickEvent e) {
super(e);
this.ic = e;
}
@Override
public MCItemStack getCurrentItem() {
return new BukkitMCItemStack(ic.getCurrentItem());
}
@Override
public MCItemStack getCursor() {
return new BukkitMCItemStack(ic.getCursor());
}
@Override
public int getSlot() {
return ic.getSlot();
}
@Override
public int getRawSlot() {
return ic.getRawSlot();
}
@Override
public int getHotbarButton() {
return ic.getHotbarButton();
}
@Override
public MCSlotType getSlotType() {
return MCSlotType.valueOf(ic.getSlotType().name());
}
@Override
public boolean isLeftClick() {
return ic.getClick().isLeftClick();
}
@Override
public boolean isRightClick() {
return ic.getClick().isRightClick();
}
@Override
public boolean isShiftClick() {
return ic.getClick().isShiftClick();
}
@Override
public boolean isCreativeClick() {
return ic.getClick().isCreativeAction();
}
@Override
public boolean isKeyboardClick() {
return ic.getClick().isKeyboardClick();
}
@Override
public void setCurrentItem(MCItemStack slot) {
if (slot != null) {
ic.setCurrentItem(((BukkitMCItemStack) slot).asItemStack());
} else {
ic.setCurrentItem(null);
}
}
@Override
public void setCursor(MCItemStack cursor) {
ic.setCursor(((BukkitMCItemStack) cursor).asItemStack());
}
@Override
public MCInventoryAction getAction() {
return BukkitMCInventoryAction.getConvertor().getAbstractedEnum(ic.getAction());
}
@Override
public MCClickType getClickType() {
return BukkitMCClickType.getConvertor().getAbstractedEnum((ic.getClick()));
}
}
public static class BukkitMCInventoryDragEvent extends BukkitMCInventoryInteractEvent
implements MCInventoryDragEvent {
InventoryDragEvent id;
public BukkitMCInventoryDragEvent(InventoryDragEvent e) {
super(e);
this.id = e;
}
@Override
public Map<Integer, MCItemStack> getNewItems() {
Map<Integer, MCItemStack> ret = new HashMap<Integer, MCItemStack>();
for (Map.Entry<Integer, ItemStack> ni : id.getNewItems().entrySet()) {
Integer key = ni.getKey();
ItemStack value = ni.getValue();
ret.put(key, new BukkitMCItemStack(value));
}
return ret;
}
@Override
public Set<Integer> getRawSlots() {
Set<Integer> ret = new HashSet<Integer>();
for (Integer rs : id.getRawSlots()) {
ret.add(rs);
}
return ret;
}
@Override
public Set<Integer> getInventorySlots() {
Set<Integer> ret = new HashSet<Integer>();
for (Integer is : id.getInventorySlots()) {
ret.add(is);
}
return ret;
}
@Override
public MCItemStack getCursor() {
return new BukkitMCItemStack(id.getCursor());
}
@Override
public void setCursor(MCItemStack newCursor) {
id.setCursor(((BukkitMCItemStack) newCursor).asItemStack());
}
@Override
public MCItemStack getOldCursor() {
return new BukkitMCItemStack(id.getOldCursor());
}
@Override
public MCDragType getType() {
return MCDragType.valueOf(id.getType().name());
}
}
public static class BukkitMCEnchantItemEvent extends BukkitMCInventoryEvent implements MCEnchantItemEvent {
EnchantItemEvent ei;
public BukkitMCEnchantItemEvent(EnchantItemEvent e) {
super(e);
this.ei = e;
}
@Override
public MCBlock getEnchantBlock() {
return new BukkitMCBlock(ei.getEnchantBlock());
}
@Override
public MCPlayer GetEnchanter() {
return new BukkitMCPlayer(ei.getEnchanter());
}
@Override
public Map<MCEnchantment, Integer> getEnchantsToAdd() {
Map<MCEnchantment, Integer> ret = new HashMap<MCEnchantment, Integer>();
for (Map.Entry<Enchantment, Integer> ea : ei.getEnchantsToAdd().entrySet()) {
Enchantment key = ea.getKey();
Integer value = ea.getValue();
ret.put(new BukkitMCEnchantment(key), value);
}
return ret;
}
@Override
public void setEnchantsToAdd(Map<MCEnchantment, Integer> enchants) {
Map<Enchantment, Integer> ret = ei.getEnchantsToAdd();
ret.clear();
// for (Map.Entry<MCEnchantment, Integer> ea : enchants.entrySet()) {
// MCEnchantment key = ea.getKey();
// Integer value = ea.getValue();
// ret.put(((BukkitMCEnchantment) key).asEnchantment(), value);
// }
Map<Enchantment, Integer> enchantments = new HashMap<Enchantment, Integer>();
for (Map.Entry<MCEnchantment, Integer> ea : enchants.entrySet()) {
MCEnchantment key = ea.getKey();
Integer value = ea.getValue();
enchantments.put(((BukkitMCEnchantment) key).asEnchantment(), value);
}
ItemStack item = ei.getItem();
item.addUnsafeEnchantments(enchantments);
}
@Override
public MCItemStack getItem() {
return new BukkitMCItemStack(ei.getItem());
}
@Override
public void setItem(MCItemStack i) {
ItemStack item = ei.getItem();
ItemStack is = ((BukkitMCItemStack) i).asItemStack();
item.setAmount(is.getAmount());
item.setData(is.getData());
item.setDurability(is.getDurability());
item.setItemMeta(is.getItemMeta());
item.setType(is.getType());
}
@Override
public void setExpLevelCost(int level) {
ei.setExpLevelCost(level);
}
@Override
public int getExpLevelCost() {
return ei.getExpLevelCost();
}
@Override
public int whichButton() {
return ei.whichButton();
}
}
public static class BukkitMCPrepareItemEnchantEvent extends BukkitMCInventoryEvent implements MCPrepareItemEnchantEvent {
PrepareItemEnchantEvent pie;
public BukkitMCPrepareItemEnchantEvent(PrepareItemEnchantEvent e) {
super(e);
this.pie = e;
}
@Override
public MCBlock getEnchantBlock() {
return new BukkitMCBlock(pie.getEnchantBlock());
}
@Override
public MCPlayer getEnchanter() {
return new BukkitMCPlayer(pie.getEnchanter());
}
@Override
public int getEnchantmentBonus() {
return pie.getEnchantmentBonus();
}
@Override
public int[] getExpLevelCostsOffered() {
return pie.getExpLevelCostsOffered();
}
@Override
public MCItemStack getItem() {
return new BukkitMCItemStack(pie.getItem());
}
@Override
public void setItem(MCItemStack i) {
ItemStack item = pie.getItem();
ItemStack is = ((BukkitMCItemStack) i).asItemStack();
item.setAmount(is.getAmount());
item.setData(is.getData());
item.setDurability(is.getDurability());
item.setItemMeta(is.getItemMeta());
item.setType(is.getType());
}
}
public static class BukkitMCItemHeldEvent implements MCItemHeldEvent {
PlayerItemHeldEvent ih;
public BukkitMCItemHeldEvent(PlayerItemHeldEvent event) {
ih = event;
}
@Override
public MCPlayer getPlayer() {
return new BukkitMCPlayer(ih.getPlayer());
}
@Override
public Object _GetObject() {
return ih;
}
@Override
public int getNewSlot() {
return ih.getNewSlot();
}
@Override
public int getPreviousSlot() {
return ih.getPreviousSlot();
}
}
public static class BukkitMCItemSwapEvent implements MCItemSwapEvent {
PlayerSwapHandItemsEvent is;
public BukkitMCItemSwapEvent(PlayerSwapHandItemsEvent event) {
is = event;
}
public BukkitMCItemSwapEvent(Event event) {
is = (PlayerSwapHandItemsEvent) event;
}
@Override
public MCPlayer getPlayer() {
return new BukkitMCPlayer(is.getPlayer());
}
@Override
public Object _GetObject() {
return is;
}
@Override
public MCItemStack getMainHandItem() {
return new BukkitMCItemStack(is.getMainHandItem());
}
@Override
public MCItemStack getOffHandItem() {
return new BukkitMCItemStack(is.getOffHandItem());
}
@Override
public void setMainHandItem(MCItemStack item) {
is.setMainHandItem((ItemStack) item.getHandle());
}
@Override
public void setOffHandItem(MCItemStack item) {
is.setOffHandItem((ItemStack) item.getHandle());
}
}
public static class BukkitMCPrepareItemCraftEvent extends BukkitMCInventoryEvent implements MCPrepareItemCraftEvent {
PrepareItemCraftEvent e;
public BukkitMCPrepareItemCraftEvent(PrepareItemCraftEvent event) {
super(event);
e = event;
}
@Override
public MCRecipe getRecipe() {
return BukkitConvertor.BukkitGetRecipe(e.getRecipe());
}
@Override
public boolean isRepair() {
return e.isRepair();
}
@Override
public MCCraftingInventory getInventory() {
return new BukkitMCCraftingInventory(e.getInventory());
}
}
}