13
0
geforkt von Mirrors/Paper

Painting improvements. Thanks CelticMinstrel!

Added interface to get/set the art and facing direction on paintings, and expanded painting break events to catch more cases (including fire and lightning); removed PaintingBreakByWorldEvent since it's identical to its superclass

By: EvilSeph <evilseph@gmail.com>
Dieser Commit ist enthalten in:
Bukkit/Spigot 2011-10-01 13:30:59 -04:00
Ursprung 5db08677a3
Commit 367dbc663e
4 geänderte Dateien mit 147 neuen und 22 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,96 @@
package org.bukkit;
import java.util.HashMap;
/**
* Represents the art on a painting
*/
public enum Art {
KEBAB(0,1,1),
AZTEC(1,1,1),
ALBAN(2,1,1),
AZTEC2(3,1,1),
BOMB(4,1,1),
PLANT(5,1,1),
WASTELAND(6,1,1),
POOL(7,2,1),
COURBET(8,2,1),
SEA(9,2,1),
SUNSET(10,2,1),
CREEBET(11,2,1),
WANDERER(12,1,2),
GRAHAM(13,1,2),
MATCH(14,4,2),
BUST(15,2,2),
STAGE(16,2,2),
VOID(17,2,2),
SKULL_AND_ROSES(18,2,2),
FIGHTERS(19,2,2),
POINTER(20,4,4),
PIGSCENE(21,4,4),
BURNINGSKULL(22,4,4),
SKELETON(23,4,3),
DONKEYKONG(24,4,3);
private int id, width, height;
private static HashMap<String,Art> names = new HashMap<String,Art>();
private static HashMap<Integer,Art> ids = new HashMap<Integer,Art>();
static {
for (Art art : Art.values()) {
ids.put(art.id, art);
names.put(art.toString(), art);
}
}
private Art(int id, int width, int height) {
this.id = id;
this.width = width;
this.height = height;
}
/**
* Gets the width of the painting, in blocks
*
* @return The width of the painting, in blocks
*/
public int getBlockWidth() {
return width;
}
/**
* Gets the height of the painting, in blocks
*
* @return The height of the painting, in blocks
*/
public int getBlockHeight() {
return height;
}
/**
* Get the ID of this painting.
*
* @return The ID of this painting
*/
public int getId() {
return id;
}
/**
* Get a painting by its numeric ID
*
* @param id The ID
* @return The painting
*/
public static Art getById(int id) {
return ids.get(id);
}
/**
* Get a painting by its unique name
*
* @param name The name
* @return The painting
*/
public static Art getByName(String name) {
return names.get(name);
}
}

Datei anzeigen

@ -1,12 +1,42 @@
/**
*
*/
package org.bukkit.entity;
import org.bukkit.Art;
import org.bukkit.block.BlockFace;
import org.bukkit.material.Attachable;
/**
* Represents a Painting.
*
* @author Cogito
*
*/
public interface Painting extends Entity {}
public interface Painting extends Entity, Attachable {
/**
* Get the art on this painting
* @return The art
*/
public Art getArt();
/**
* Set the art on this painting
* @param art The new art
* @return False if the new art won't fit at the painting's current location
*/
public boolean setArt(Art art);
/**
* Set the art on this painting
* @param art The new art
* @param force If true, force the new art regardless of whether it fits at the current location
* Note that forcing it where it can't fit normally causes it to drop as an item unless you override
* this by catching the PAINTING_BREAK event.
* @return False if force was false and the new art won't fit at the painting's current location
*/
public boolean setArt(Art art, boolean force);
/**
* Sets the direction of the painting, potentially overriding rules of placement. Note that if the result
* is not valid the painting would normally drop as an item.
* @param face The new direction.
* @param force Whether to force it.
* @return False if force was false and there was no block for it to attach to in order to face the given direction.
*/
public boolean setFacingDirection(BlockFace face, boolean force);
}

Datei anzeigen

@ -1,12 +0,0 @@
package org.bukkit.event.painting;
import org.bukkit.entity.Painting;
/**
* Triggered when a painting is removed by the world (water flowing over it, block damaged behind it)
*/
public class PaintingBreakByWorldEvent extends PaintingBreakEvent {
public PaintingBreakByWorldEvent(final Painting painting) {
super(painting, RemoveCause.WORLD);
}
}

Datei anzeigen

@ -42,9 +42,20 @@ public class PaintingBreakEvent extends PaintingEvent implements Cancellable {
*/
ENTITY,
/**
* Removed by the world - block the painting is on is destroyed, water flowing over etc
* Removed by fire
*/
WORLD
FIRE,
/**
* Removed by placing a block on it
*/
OBSTRUCTION,
/**
* Removed by water flowing over it
*/
WATER,
/**
* Removed by destroying the block behind it, etc
*/
PHYSICS,
}
}