13
0
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:
CraftBukkit/Spigot 2023-01-08 20:36:10 +11:00
Ursprung 20992162c0
Commit d310f63995
5 geänderte Dateien mit 149 neuen und 1 gelöschten Zeilen

Datei anzeigen

@ -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);
}

Datei anzeigen

@ -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());
}

Datei anzeigen

@ -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;

Datei anzeigen

@ -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;
}
}

Datei anzeigen

@ -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;
}
}
);