geforkt von Mirrors/Paper
SPIGOT-7034: Add methods for set/get instrument in Goat Horn
By: byquanton <32410361+byquanton@users.noreply.github.com>
Dieser Commit ist enthalten in:
Ursprung
20992162c0
Commit
d310f63995
@ -322,6 +322,8 @@ public final class CraftItemFactory implements ItemFactory {
|
||||
return meta instanceof CraftMetaCompass ? meta : new CraftMetaCompass(meta);
|
||||
case BUNDLE:
|
||||
return meta instanceof CraftMetaBundle ? meta : new CraftMetaBundle(meta);
|
||||
case GOAT_HORN:
|
||||
return meta instanceof CraftMetaMusicInstrument ? meta : new CraftMetaMusicInstrument(meta);
|
||||
default:
|
||||
return new CraftMetaItem(meta);
|
||||
}
|
||||
|
@ -585,6 +585,8 @@ public final class CraftItemStack extends ItemStack {
|
||||
return new CraftMetaCompass(item.getTag());
|
||||
case BUNDLE:
|
||||
return new CraftMetaBundle(item.getTag());
|
||||
case GOAT_HORN:
|
||||
return new CraftMetaMusicInstrument(item.getTag());
|
||||
default:
|
||||
return new CraftMetaItem(item.getTag());
|
||||
}
|
||||
|
@ -158,6 +158,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||
.put(CraftMetaEntityTag.class, "ENTITY_TAG")
|
||||
.put(CraftMetaCompass.class, "COMPASS")
|
||||
.put(CraftMetaBundle.class, "BUNDLE")
|
||||
.put(CraftMetaMusicInstrument.class, "MUSIC_INSTRUMENT")
|
||||
.put(CraftMetaItem.class, "UNSPECIFIC")
|
||||
.build();
|
||||
|
||||
@ -1418,7 +1419,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||
CraftMetaCompass.LODESTONE_DIMENSION.NBT,
|
||||
CraftMetaCompass.LODESTONE_POS.NBT,
|
||||
CraftMetaCompass.LODESTONE_TRACKED.NBT,
|
||||
CraftMetaBundle.ITEMS.NBT
|
||||
CraftMetaBundle.ITEMS.NBT,
|
||||
CraftMetaMusicInstrument.GOAT_HORN_INSTRUMENT.NBT
|
||||
));
|
||||
}
|
||||
return HANDLED_TAGS;
|
||||
|
@ -0,0 +1,133 @@
|
||||
package org.bukkit.craftbukkit.inventory;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import java.util.Map;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.MusicInstrument;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.configuration.serialization.DelegateDeserialization;
|
||||
import org.bukkit.inventory.meta.MusicInstrumentMeta;
|
||||
|
||||
@DelegateDeserialization(CraftMetaItem.SerializableMeta.class)
|
||||
public class CraftMetaMusicInstrument extends CraftMetaItem implements MusicInstrumentMeta {
|
||||
|
||||
static final ItemMetaKey GOAT_HORN_INSTRUMENT = new ItemMetaKey("instrument");
|
||||
private MusicInstrument instrument;
|
||||
|
||||
CraftMetaMusicInstrument(CraftMetaItem meta) {
|
||||
super(meta);
|
||||
|
||||
if (meta instanceof CraftMetaMusicInstrument) {
|
||||
CraftMetaMusicInstrument craftMetaMusicInstrument = (CraftMetaMusicInstrument) meta;
|
||||
this.instrument = craftMetaMusicInstrument.instrument;
|
||||
}
|
||||
}
|
||||
|
||||
CraftMetaMusicInstrument(NBTTagCompound tag) {
|
||||
super(tag);
|
||||
|
||||
if (tag.contains(GOAT_HORN_INSTRUMENT.NBT)) {
|
||||
String string = tag.getString(GOAT_HORN_INSTRUMENT.NBT);
|
||||
this.instrument = MusicInstrument.getByKey(NamespacedKey.fromString(string));
|
||||
}
|
||||
}
|
||||
|
||||
CraftMetaMusicInstrument(Map<String, Object> map) {
|
||||
super(map);
|
||||
|
||||
String instrumentString = SerializableMeta.getString(map, GOAT_HORN_INSTRUMENT.BUKKIT, true);
|
||||
if (instrumentString != null) {
|
||||
this.instrument = MusicInstrument.getByKey(NamespacedKey.fromString(instrumentString));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void applyToItem(NBTTagCompound tag) {
|
||||
super.applyToItem(tag);
|
||||
|
||||
if (instrument != null) {
|
||||
tag.putString(GOAT_HORN_INSTRUMENT.NBT, instrument.getKey().toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean applicableTo(Material type) {
|
||||
switch (type) {
|
||||
case GOAT_HORN:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean equalsCommon(CraftMetaItem meta) {
|
||||
if (!super.equalsCommon(meta)) {
|
||||
return false;
|
||||
}
|
||||
if (meta instanceof CraftMetaMusicInstrument) {
|
||||
CraftMetaMusicInstrument that = (CraftMetaMusicInstrument) meta;
|
||||
return this.instrument == that.instrument;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean notUncommon(CraftMetaItem meta) {
|
||||
return super.notUncommon(meta) && (meta instanceof CraftMetaMusicInstrument || isInstrumentEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isEmpty() {
|
||||
return super.isEmpty() && isInstrumentEmpty();
|
||||
}
|
||||
|
||||
boolean isInstrumentEmpty() {
|
||||
return instrument == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
int applyHash() {
|
||||
final int orginal;
|
||||
int hash = orginal = super.applyHash();
|
||||
|
||||
if (hasInstrument()) {
|
||||
hash = 61 * hash + instrument.hashCode();
|
||||
}
|
||||
|
||||
return orginal != hash ? CraftMetaMusicInstrument.class.hashCode() ^ hash : hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftMetaMusicInstrument clone() {
|
||||
CraftMetaMusicInstrument meta = (CraftMetaMusicInstrument) super.clone();
|
||||
meta.instrument = this.instrument;
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
ImmutableMap.Builder<String, Object> serialize(ImmutableMap.Builder<String, Object> builder) {
|
||||
super.serialize(builder);
|
||||
|
||||
if (hasInstrument()) {
|
||||
builder.put(GOAT_HORN_INSTRUMENT.BUKKIT, instrument.getKey().toString());
|
||||
}
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MusicInstrument getInstrument() {
|
||||
return instrument;
|
||||
}
|
||||
|
||||
public boolean hasInstrument() {
|
||||
return instrument != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInstrument(MusicInstrument instrument) {
|
||||
this.instrument = instrument;
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@ import org.bukkit.DyeColor;
|
||||
import org.bukkit.FireworkEffect;
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.MusicInstrument;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeModifier;
|
||||
@ -377,6 +378,14 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.GOAT_HORN) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final CraftMetaMusicInstrument meta = (CraftMetaMusicInstrument) cleanStack.getItemMeta();
|
||||
meta.setInstrument(MusicInstrument.ADMIRE);
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren