package com.sk89q.mapbook;
import java.util.HashMap;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.block.CraftChest;
import org.bukkit.craftbukkit.block.CraftDispenser;
import org.bukkit.craftbukkit.block.CraftFurnace;
import org.bukkit.craftbukkit.maps.CraftShape;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.map.MapListener;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerEggThrowEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerInventoryEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerPreLoginEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.maps.ContextualMapRenderer;
import org.bukkit.maps.MapCanvas;
import org.bukkit.maps.MapCursorCollection;
import org.bukkit.maps.MapPrintOrder;
import org.bukkit.maps.MapRenderer;
import org.bukkit.maps.MapType;
import org.bukkit.maps.MapView;
import org.bukkit.maps.Shape;
import com.sk89q.mapbook.ChestWatcherBase.ListenerObject;
public class ChestWatcherBase implements ContextualMapRenderer {
private MapBookPlugin plugin;
public ChestWatcherBase(MapBookPlugin s) {
plugin = s;
}
HashMap<Player, ListenerObject> players = new HashMap<Player, ListenerObject>();
public class ListenerObject {
protected CraftFurnace lastFurnaceClicked;
protected CraftDispenser lastDispencerClicked;
protected CraftChest lastChestClicked;
}
public void render(MapView map, MapCanvas canvas, Player player) {
map.setRate(15);
map.setPrintOrder(MapPrintOrder.Sequential);
for (int i = 0; i < 128; i++) {
for (int j = 0; j < 128; j++) {
canvas.setPixel(i, j, (byte) 21);
}
}
ListenerObject curPlayer;
if ((curPlayer = players.get(player)) == null)
return;
if (curPlayer.lastFurnaceClicked != null) {
map.getStringDrawer().drawText(30, 2, "Furnace");
map.getStringDrawer().drawText(
10,
118,
"CookTime " + curPlayer.lastFurnaceClicked.getCookTime()
+ " \\ "
+ curPlayer.lastFurnaceClicked.getLightLevel());
ItemStack[] cnt = curPlayer.lastFurnaceClicked.getInventory()
.getContents();
drawInventory(map, cnt);
}
if (curPlayer.lastDispencerClicked != null) {
map.getStringDrawer().drawText(30, 2, "Dispencer");
ItemStack[] cnt = curPlayer.lastDispencerClicked.getInventory()
.getContents();
drawInventory(map, cnt);
}
if (curPlayer.lastChestClicked != null) {
map.getStringDrawer().drawText(35, 2, "Chest");
ItemStack[] cnt = curPlayer.lastChestClicked.getInventory()
.getContents();
drawInventory(map, cnt);
}
}
private void drawInventory(MapView map, ItemStack[] cnt) {
int x = 16;
int y = 16;
// map.getDrawer().fillRectangle(8, 8, 112, 112);
Shape square = CraftShape.Square.cloneMe();
square.setCenter(1, 1);
for (int i = 0; i < cnt.length; i++) {
ItemStack item = cnt[i];
map.getDrawer().setForeColor((byte) 14);
map.getDrawer().setBackColor((byte) 34);
map.getDrawer().fillShape(x, y, square, 8);
if (item != null) {
map.getDrawer().setForeColor((byte) 19);
map.getStringDrawer().drawText(x + 3, y + 5,
item.getTypeId() + "");
}
x += 16;
if (x > 96) {
x = 16;
y += 16;
}
}
}
int tick = 0;
public void initialize(MapView map) {
Listener pe = new PlayerListener() {
public void onPlayerInteract(PlayerInteractEvent event) {
Material type = event.getClickedBlock().getType();
ListenerObject curPlayer;
if ((curPlayer = players.get(event.getPlayer())) == null) {
players.put(event.getPlayer(),
curPlayer = new ListenerObject());
}
if (type == Material.CHEST) {
curPlayer.lastChestClicked = new CraftChest(
event.getClickedBlock());
curPlayer.lastFurnaceClicked = null;
curPlayer.lastDispencerClicked = null;
}
if (type == Material.DISPENSER) {
curPlayer.lastDispencerClicked = new CraftDispenser(
event.getClickedBlock());
curPlayer.lastFurnaceClicked = null;
curPlayer.lastChestClicked = null;
}
if (type == Material.FURNACE
|| type == Material.BURNING_FURNACE) {
curPlayer.lastFurnaceClicked = new CraftFurnace(
event.getClickedBlock());
curPlayer.lastDispencerClicked = null;
curPlayer.lastChestClicked = null;
}
}
};
plugin.getServer()
.getPluginManager()
.registerEvent(Event.Type.PLAYER_INTERACT, pe, Priority.Normal,
plugin);
}
}