Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-19 04:50:06 +01:00
SPIGOT-2768: Fully implement map color
Dieser Commit ist enthalten in:
Ursprung
c25ddf063a
Commit
54450b727e
@ -3,27 +3,30 @@ package org.bukkit.craftbukkit.inventory;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.minecraft.server.NBTTagCompound;
|
import net.minecraft.server.NBTTagCompound;
|
||||||
|
import net.minecraft.server.NBTTagInt;
|
||||||
import net.minecraft.server.NBTTagString;
|
import net.minecraft.server.NBTTagString;
|
||||||
|
|
||||||
|
import org.bukkit.Color;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.serialization.DelegateDeserialization;
|
import org.bukkit.configuration.serialization.DelegateDeserialization;
|
||||||
import org.bukkit.craftbukkit.inventory.CraftMetaItem.SerializableMeta;
|
import org.bukkit.craftbukkit.inventory.CraftMetaItem.SerializableMeta;
|
||||||
import org.bukkit.inventory.meta.MapMeta;
|
import org.bukkit.inventory.meta.MapMeta;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
@DelegateDeserialization(SerializableMeta.class)
|
@DelegateDeserialization(SerializableMeta.class)
|
||||||
class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
||||||
static final ItemMetaKey MAP_SCALING = new ItemMetaKey("map_is_scaling", "scaling");
|
static final ItemMetaKey MAP_SCALING = new ItemMetaKey("map_is_scaling", "scaling");
|
||||||
static final ItemMetaKey MAP_LOC_NAME = new ItemMetaKey("LocName", "display-loc-name");
|
static final ItemMetaKey MAP_LOC_NAME = new ItemMetaKey("LocName", "display-loc-name");
|
||||||
static final ItemMetaKey MAP_COLOR = new ItemMetaKey("Mapcolor", "display-map-color");
|
static final ItemMetaKey MAP_COLOR = new ItemMetaKey("MapColor", "display-map-color");
|
||||||
static final byte SCALING_EMPTY = (byte) 0;
|
static final byte SCALING_EMPTY = (byte) 0;
|
||||||
static final byte SCALING_TRUE = (byte) 1;
|
static final byte SCALING_TRUE = (byte) 1;
|
||||||
static final byte SCALING_FALSE = (byte) 2;
|
static final byte SCALING_FALSE = (byte) 2;
|
||||||
|
|
||||||
private byte scaling = SCALING_EMPTY;
|
private byte scaling = SCALING_EMPTY;
|
||||||
private String locName;
|
private String locName;
|
||||||
private String mapColor;
|
private Color color;
|
||||||
|
|
||||||
CraftMetaMap(CraftMetaItem meta) {
|
CraftMetaMap(CraftMetaItem meta) {
|
||||||
super(meta);
|
super(meta);
|
||||||
@ -34,6 +37,8 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
|
|
||||||
CraftMetaMap map = (CraftMetaMap) meta;
|
CraftMetaMap map = (CraftMetaMap) meta;
|
||||||
this.scaling = map.scaling;
|
this.scaling = map.scaling;
|
||||||
|
this.locName = map.locName;
|
||||||
|
this.color = map.color;
|
||||||
}
|
}
|
||||||
|
|
||||||
CraftMetaMap(NBTTagCompound tag) {
|
CraftMetaMap(NBTTagCompound tag) {
|
||||||
@ -42,7 +47,7 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
if (tag.hasKey(MAP_SCALING.NBT)) {
|
if (tag.hasKey(MAP_SCALING.NBT)) {
|
||||||
this.scaling = tag.getBoolean(MAP_SCALING.NBT) ? SCALING_TRUE : SCALING_FALSE;
|
this.scaling = tag.getBoolean(MAP_SCALING.NBT) ? SCALING_TRUE : SCALING_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag.hasKey(DISPLAY.NBT)) {
|
if (tag.hasKey(DISPLAY.NBT)) {
|
||||||
NBTTagCompound display = tag.getCompound(DISPLAY.NBT);
|
NBTTagCompound display = tag.getCompound(DISPLAY.NBT);
|
||||||
|
|
||||||
@ -51,7 +56,7 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (display.hasKey(MAP_COLOR.NBT)) {
|
if (display.hasKey(MAP_COLOR.NBT)) {
|
||||||
mapColor = display.getString(MAP_COLOR.NBT);
|
color = Color.fromRGB(display.getInt(MAP_COLOR.NBT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,6 +68,16 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
if (scaling != null) {
|
if (scaling != null) {
|
||||||
setScaling(scaling);
|
setScaling(scaling);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String locName = SerializableMeta.getString(map, MAP_LOC_NAME.BUKKIT, true);
|
||||||
|
if (locName != null) {
|
||||||
|
setLocationName(locName);
|
||||||
|
}
|
||||||
|
|
||||||
|
Color color = SerializableMeta.getObject(Color.class, map, MAP_COLOR.BUKKIT, true);
|
||||||
|
if (color != null) {
|
||||||
|
setColor(color);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -77,8 +92,8 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
setDisplayTag(tag, MAP_LOC_NAME.NBT, new NBTTagString(getLocationName()));
|
setDisplayTag(tag, MAP_LOC_NAME.NBT, new NBTTagString(getLocationName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasMapColor()) {
|
if (hasColor()) {
|
||||||
setDisplayTag(tag, MAP_COLOR.NBT, new NBTTagString(mapColor));
|
setDisplayTag(tag, MAP_COLOR.NBT, new NBTTagInt(color.asRGB()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +113,7 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean isMapEmpty() {
|
boolean isMapEmpty() {
|
||||||
return !hasScaling();
|
return !(hasScaling() | hasLocationName() || hasColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasScaling() {
|
boolean hasScaling() {
|
||||||
@ -125,11 +140,26 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLocationName(String name) {
|
public void setLocationName(String name) {
|
||||||
|
Preconditions.checkArgument(name != null, "name");
|
||||||
|
|
||||||
this.locName = name;
|
this.locName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasMapColor() {
|
@Override
|
||||||
return this.mapColor != null;
|
public boolean hasColor() {
|
||||||
|
return this.color != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Color getColor() {
|
||||||
|
return this.color;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setColor(Color color) {
|
||||||
|
Preconditions.checkArgument(color != null, "color");
|
||||||
|
|
||||||
|
this.color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -141,8 +171,8 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
CraftMetaMap that = (CraftMetaMap) meta;
|
CraftMetaMap that = (CraftMetaMap) meta;
|
||||||
|
|
||||||
return (this.scaling == that.scaling)
|
return (this.scaling == that.scaling)
|
||||||
&& (hasLocationName() ? that.hasLocationName() && this.getLocationName().equals(that.getLocationName()) : !that.hasLocationName())
|
&& (hasLocationName() ? that.hasLocationName() && this.locName.equals(that.locName) : !that.hasLocationName())
|
||||||
&& (hasMapColor() ? that.hasMapColor() && this.mapColor.equals(that.mapColor) : !that.hasMapColor());
|
&& (hasColor() ? that.hasColor() && this.color.equals(that.color) : !that.hasColor());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -160,10 +190,17 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
if (hasScaling()) {
|
if (hasScaling()) {
|
||||||
hash ^= 0x22222222 << (isScaling() ? 1 : -1);
|
hash ^= 0x22222222 << (isScaling() ? 1 : -1);
|
||||||
}
|
}
|
||||||
|
if (hasLocationName()) {
|
||||||
|
hash = 61 * hash + locName.hashCode();
|
||||||
|
}
|
||||||
|
if (hasColor()) {
|
||||||
|
hash = 61 * hash + color.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
return original != hash ? CraftMetaMap.class.hashCode() ^ hash : hash;
|
return original != hash ? CraftMetaMap.class.hashCode() ^ hash : hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public CraftMetaMap clone() {
|
public CraftMetaMap clone() {
|
||||||
return (CraftMetaMap) super.clone();
|
return (CraftMetaMap) super.clone();
|
||||||
}
|
}
|
||||||
@ -180,8 +217,8 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
|
|||||||
builder.put(MAP_LOC_NAME.BUKKIT, getLocationName());
|
builder.put(MAP_LOC_NAME.BUKKIT, getLocationName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasMapColor()) {
|
if (hasColor()) {
|
||||||
builder.put(MAP_COLOR.BUKKIT, mapColor);
|
builder.put(MAP_COLOR.BUKKIT, getColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren