package org.bukkit.craftbukkit.map;
import org.bukkit.map.MapCanvas;
import org.bukkit.map.MapCursorCollection;
import org.bukkit.map.MapFont;
import org.bukkit.map.MapFont.CharacterSprite;
import org.bukkit.map.MapPalette;
import java.awt.Image;
import java.util.Arrays;
public class CraftMapCanvas implements MapCanvas
{
private final byte[] buffer = new byte[128 * 128];
private final CraftMapView mapView;
private byte[] base;
private MapCursorCollection cursors = new MapCursorCollection();
protected CraftMapCanvas(CraftMapView mapView)
{
this.mapView = mapView;
Arrays.fill(buffer, (byte) -1);
}
public CraftMapView getMapView()
{
return mapView;
}
public MapCursorCollection getCursors()
{
return cursors;
}
public void setCursors(MapCursorCollection cursors)
{
this.cursors = cursors;
}
public void setPixel(int x, int y, byte color)
{
if(x < 0 || y < 0 || x >= 128 || y >= 128)
return;
if(buffer[y * 128 + x] != color)
{
buffer[y * 128 + x] = color;
mapView.worldMap.setColumnDirty(x, y, y);
}
}
public byte getPixel(int x, int y)
{
if(x < 0 || y < 0 || x >= 128 || y >= 128)
return 0;
return buffer[y * 128 + x];
}
public byte getBasePixel(int x, int y)
{
if(x < 0 || y < 0 || x >= 128 || y >= 128)
return 0;
return base[y * 128 + x];
}
protected void setBase(byte[] base)
{
this.base = base;
}
protected byte[] getBuffer()
{
return buffer;
}
public void drawImage(int x, int y, Image image)
{
byte[] bytes = MapPalette.imageToBytes(image);
for(int x2 = 0; x2 < image.getWidth(null); ++x2)
{
for(int y2 = 0; y2 < image.getHeight(null); ++y2)
{
setPixel(x + x2, y + y2, bytes[y2 * image.getWidth(null) + x2]);
}
}
}
public void drawText(int x, int y, MapFont font, String text)
{
int xStart = x;
byte color = MapPalette.DARK_GRAY;
if(!font.isValid(text))
{
throw new IllegalArgumentException("text contains invalid characters");
}
for(int i = 0; i < text.length(); ++i)
{
char ch = text.charAt(i);
if(ch == '\n')
{
x = xStart;
y += font.getHeight() + 1;
continue;
}
else if(ch == '\u00A7')
{
int j = text.indexOf(';', i);
if(j >= 0)
{
try
{
color = Byte.parseByte(text.substring(i + 1, j));
i = j;
continue;
} catch(NumberFormatException ex)
{
}
}
}
CharacterSprite sprite = font.getChar(text.charAt(i));
for(int r = 0; r < font.getHeight(); ++r)
{
for(int c = 0; c < sprite.getWidth(); ++c)
{
if(sprite.get(r, c))
{
setPixel(x + c, y + r, color);
}
}
}
x += sprite.getWidth() + 1;
}
}
}