All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.craftbukkit.map.CraftMapCanvas Maven / Gradle / Ivy

There is a newer version: 2.4.0
Show newest version
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.*;
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.flagDirty(x, 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;
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy