geforkt von Mirrors/Paper
Migrate ArmorStand meta to using entity tag (#11107)
Dieser Commit ist enthalten in:
Ursprung
f011be78fc
Commit
d0221fe540
@ -45,113 +45,80 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
static final ItemMetaKeyType<CustomData> ENTITY_TAG = new ItemMetaKeyType<>(DataComponents.ENTITY_DATA, "entity-tag");
|
static final ItemMetaKeyType<CustomData> ENTITY_TAG = new ItemMetaKeyType<>(DataComponents.ENTITY_DATA, "entity-tag");
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
|
+ static final ItemMetaKey ENTITY_ID = new ItemMetaKey("id", "entity-id");
|
||||||
+ static final ItemMetaKey INVISIBLE = new ItemMetaKey("Invisible", "invisible");
|
+ static final ItemMetaKey INVISIBLE = new ItemMetaKey("Invisible", "invisible");
|
||||||
+ static final ItemMetaKey NO_BASE_PLATE = new ItemMetaKey("NoBasePlate", "no-base-plate");
|
+ static final ItemMetaKey NO_BASE_PLATE = new ItemMetaKey("NoBasePlate", "no-base-plate");
|
||||||
+ static final ItemMetaKey SHOW_ARMS = new ItemMetaKey("ShowArms", "show-arms");
|
+ static final ItemMetaKey SHOW_ARMS = new ItemMetaKey("ShowArms", "show-arms");
|
||||||
+ static final ItemMetaKey SMALL = new ItemMetaKey("Small", "small");
|
+ static final ItemMetaKey SMALL = new ItemMetaKey("Small", "small");
|
||||||
+ static final ItemMetaKey MARKER = new ItemMetaKey("Marker", "marker");
|
+ static final ItemMetaKey MARKER = new ItemMetaKey("Marker", "marker");
|
||||||
+
|
|
||||||
+ private Boolean invisible = null;
|
|
||||||
+ private Boolean noBasePlate = null;
|
|
||||||
+ private Boolean showArms = null;
|
|
||||||
+ private Boolean small = null;
|
|
||||||
+ private Boolean marker = null;
|
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
CompoundTag entityTag;
|
CompoundTag entityTag;
|
||||||
|
|
||||||
CraftMetaArmorStand(CraftMetaItem meta) {
|
CraftMetaArmorStand(CraftMetaItem meta) {
|
||||||
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
||||||
}
|
|
||||||
|
|
||||||
CraftMetaArmorStand armorStand = (CraftMetaArmorStand) meta;
|
|
||||||
+ // Paper start
|
|
||||||
+ this.invisible = armorStand.invisible;
|
|
||||||
+ this.noBasePlate = armorStand.noBasePlate;
|
|
||||||
+ this.showArms = armorStand.showArms;
|
|
||||||
+ this.small = armorStand.small;
|
|
||||||
+ this.marker = armorStand.marker;
|
|
||||||
+ // Paper end
|
|
||||||
this.entityTag = armorStand.entityTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
|
||||||
|
|
||||||
getOrEmpty(tag, CraftMetaArmorStand.ENTITY_TAG).ifPresent((nbt) -> {
|
|
||||||
this.entityTag = nbt.copyTag();
|
|
||||||
+ // Paper start
|
|
||||||
+ if (entityTag.contains(INVISIBLE.NBT)) {
|
|
||||||
+ invisible = entityTag.getBoolean(INVISIBLE.NBT);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (entityTag.contains(NO_BASE_PLATE.NBT)) {
|
|
||||||
+ noBasePlate = entityTag.getBoolean(NO_BASE_PLATE.NBT);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (entityTag.contains(SHOW_ARMS.NBT)) {
|
|
||||||
+ showArms = entityTag.getBoolean(SHOW_ARMS.NBT);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (entityTag.contains(SMALL.NBT)) {
|
|
||||||
+ small = entityTag.getBoolean(SMALL.NBT);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (entityTag.contains(MARKER.NBT)) {
|
|
||||||
+ marker = entityTag.getBoolean(MARKER.NBT);
|
|
||||||
+ }
|
|
||||||
+ // Paper end
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
CraftMetaArmorStand(Map<String, Object> map) {
|
CraftMetaArmorStand(Map<String, Object> map) {
|
||||||
super(map);
|
super(map);
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ this.invisible = SerializableMeta.getBoolean(map, INVISIBLE.BUKKIT);
|
+ String entityTag = SerializableMeta.getString(map, ENTITY_TAG.BUKKIT, true);
|
||||||
+ this.noBasePlate = SerializableMeta.getBoolean(map, NO_BASE_PLATE.BUKKIT);
|
+ if (entityTag != null) {
|
||||||
+ this.showArms = SerializableMeta.getBoolean(map, SHOW_ARMS.BUKKIT);
|
+ java.io.ByteArrayInputStream buf = new java.io.ByteArrayInputStream(java.util.Base64.getDecoder().decode(entityTag));
|
||||||
+ this.small = SerializableMeta.getBoolean(map, SMALL.BUKKIT);
|
+ try {
|
||||||
+ this.marker = SerializableMeta.getBoolean(map, MARKER.BUKKIT);
|
+ this.entityTag = net.minecraft.nbt.NbtIo.readCompressed(buf, net.minecraft.nbt.NbtAccounter.unlimitedHeap());
|
||||||
|
+ } catch (java.io.IOException ex) {
|
||||||
|
+ java.util.logging.Logger.getLogger(CraftMetaItem.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||||
|
+ }
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ SerializableMeta.getObjectOptionally(Boolean.class, map, INVISIBLE.BUKKIT, true).ifPresent((value) -> {
|
||||||
|
+ populateTagIfNull();
|
||||||
|
+ this.entityTag.putBoolean(INVISIBLE.NBT, value);
|
||||||
|
+ });
|
||||||
|
+ SerializableMeta.getObjectOptionally(Boolean.class, map, NO_BASE_PLATE.BUKKIT, true).ifPresent((value) -> {
|
||||||
|
+ populateTagIfNull();
|
||||||
|
+ this.entityTag.putBoolean(NO_BASE_PLATE.NBT, value);
|
||||||
|
+ });
|
||||||
|
+ SerializableMeta.getObjectOptionally(Boolean.class, map, SHOW_ARMS.BUKKIT, true).ifPresent((value) -> {
|
||||||
|
+ populateTagIfNull();
|
||||||
|
+ this.entityTag.putBoolean(SHOW_ARMS.NBT, value);
|
||||||
|
+ });
|
||||||
|
+ SerializableMeta.getObjectOptionally(Boolean.class, map, SMALL.BUKKIT, true).ifPresent((value) -> {
|
||||||
|
+ populateTagIfNull();
|
||||||
|
+ this.entityTag.putBoolean(SMALL.NBT, value);
|
||||||
|
+ });
|
||||||
|
+ SerializableMeta.getObjectOptionally(Boolean.class, map, MARKER.BUKKIT, true).ifPresent((value) -> {
|
||||||
|
+ populateTagIfNull();
|
||||||
|
+ this.entityTag.putBoolean(MARKER.NBT, value);
|
||||||
|
+ });
|
||||||
|
+ SerializableMeta.getObjectOptionally(String.class, map, ENTITY_ID, true).ifPresent((value) -> {
|
||||||
|
+ populateTagIfNull();
|
||||||
|
+ this.entityTag.putString(ENTITY_ID.NBT, value);
|
||||||
|
+ });
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
||||||
void applyToItem(CraftMetaItem.Applicator tag) {
|
|
||||||
super.applyToItem(tag);
|
|
||||||
|
|
||||||
+ // Paper start
|
if (tag.contains(CraftMetaArmorStand.ENTITY_TAG.NBT)) {
|
||||||
+ if (!isArmorStandEmpty() && this.entityTag == null) {
|
this.entityTag = tag.getCompound(CraftMetaArmorStand.ENTITY_TAG.NBT);
|
||||||
+ this.entityTag = new CompoundTag();
|
+ if (!this.entityTag.contains(ENTITY_ID.NBT)) entityTag.putString(ENTITY_ID.NBT, "minecraft:armor_stand"); // Paper - fixup legacy armorstand metas that did not include this.
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (this.invisible != null) {
|
|
||||||
+ this.entityTag.putBoolean(INVISIBLE.NBT, this.invisible);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (this.noBasePlate != null) {
|
|
||||||
+ this.entityTag.putBoolean(NO_BASE_PLATE.NBT, this.noBasePlate);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (this.showArms != null) {
|
|
||||||
+ this.entityTag.putBoolean(SHOW_ARMS.NBT, this.showArms);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (this.small != null) {
|
|
||||||
+ this.entityTag.putBoolean(SMALL.NBT, this.small);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (this.marker != null) {
|
|
||||||
+ this.entityTag.putBoolean(MARKER.NBT, this.marker);
|
|
||||||
+ }
|
|
||||||
+ // Paper end
|
|
||||||
if (this.entityTag != null) {
|
|
||||||
tag.put(CraftMetaArmorStand.ENTITY_TAG, CustomData.of(this.entityTag));
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void serializeInternal(Map<String, Tag> internalTags) {
|
||||||
|
- if (this.entityTag != null && !this.entityTag.isEmpty()) {
|
||||||
|
+ if (false && this.entityTag != null && !this.entityTag.isEmpty()) { // Paper - now correctly serialised as entity tag
|
||||||
|
internalTags.put(CraftMetaArmorStand.ENTITY_TAG.NBT, this.entityTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isArmorStandEmpty() {
|
boolean isArmorStandEmpty() {
|
||||||
- return !(this.entityTag != null);
|
- return !(this.entityTag != null);
|
||||||
+ return !(this.invisible != null || this.noBasePlate != null || this.showArms != null || this.small != null || this.marker != null || this.entityTag != null); // Paper
|
+ return entityTag == null || entityTag.isEmpty(); // Paper - consider armor stand empty if tag is empty.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -161,53 +128,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
- return this.entityTag != null ? that.entityTag != null && this.entityTag.equals(that.entityTag) : this.entityTag == null;
|
- return this.entityTag != null ? that.entityTag != null && this.entityTag.equals(that.entityTag) : this.entityTag == null;
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ return java.util.Objects.equals(this.entityTag, that.entityTag) &&
|
+ return java.util.Objects.equals(this.entityTag, that.entityTag);
|
||||||
+ this.invisible == that.invisible &&
|
|
||||||
+ this.noBasePlate == that.noBasePlate &&
|
|
||||||
+ this.showArms == that.showArms &&
|
|
||||||
+ this.small == that.small &&
|
|
||||||
+ this.marker == that.marker;
|
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
|
||||||
if (this.entityTag != null) {
|
|
||||||
hash = 73 * hash + this.entityTag.hashCode();
|
|
||||||
}
|
|
||||||
+ // Paper start
|
|
||||||
+ hash = 61 * hash + (this.invisible != null ? Boolean.hashCode(this.isInvisible()) : 0);
|
|
||||||
+ hash = 61 * hash + (this.noBasePlate != null ? Boolean.hashCode(this.hasNoBasePlate()) : 0);
|
|
||||||
+ hash = 61 * hash + (this.showArms != null ? Boolean.hashCode(this.shouldShowArms()) : 0);
|
|
||||||
+ hash = 61 * hash + (this.small != null ? Boolean.hashCode(this.isSmall()) : 0);
|
|
||||||
+ hash = 61 * hash + (this.marker != null ? Boolean.hashCode(this.isMarker()) : 0);
|
|
||||||
+ // Paper end
|
|
||||||
|
|
||||||
return original != hash ? CraftMetaArmorStand.class.hashCode() ^ hash : hash;
|
|
||||||
}
|
|
||||||
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
@@ -0,0 +0,0 @@ public class CraftMetaArmorStand extends CraftMetaItem {
|
||||||
Builder<String, Object> serialize(Builder<String, Object> builder) {
|
Builder<String, Object> serialize(Builder<String, Object> builder) {
|
||||||
super.serialize(builder);
|
super.serialize(builder);
|
||||||
|
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ if (invisible != null) {
|
+ if (entityTag == null) {
|
||||||
+ builder.put(INVISIBLE.BUKKIT, invisible);
|
+ return builder;
|
||||||
+ }
|
+ } else if (true) {
|
||||||
+
|
+ java.io.ByteArrayOutputStream buf = new java.io.ByteArrayOutputStream();
|
||||||
+ if (noBasePlate != null) {
|
+ try {
|
||||||
+ builder.put(NO_BASE_PLATE.BUKKIT, noBasePlate);
|
+ net.minecraft.nbt.NbtIo.writeCompressed(entityTag, buf);
|
||||||
+ }
|
+ } catch (java.io.IOException ex) {
|
||||||
+
|
+ java.util.logging.Logger.getLogger(CraftMetaItem.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||||
+ if (showArms != null) {
|
+ }
|
||||||
+ builder.put(SHOW_ARMS.BUKKIT, showArms);
|
+ builder.put(ENTITY_TAG.BUKKIT, java.util.Base64.getEncoder().encodeToString(buf.toByteArray()));
|
||||||
+ }
|
+ return builder;
|
||||||
+
|
|
||||||
+ if (small != null) {
|
|
||||||
+ builder.put(SMALL.BUKKIT, small);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (marker != null) {
|
|
||||||
+ builder.put(MARKER.BUKKIT, marker);
|
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
+
|
+
|
||||||
@ -220,54 +161,66 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
|
+ private void populateTagIfNull() {
|
||||||
|
+ if (this.entityTag == null) {
|
||||||
|
+ this.entityTag = new CompoundTag();
|
||||||
|
+ this.entityTag.putString(ENTITY_ID.NBT, "minecraft:armor_stand");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public boolean isInvisible() {
|
+ public boolean isInvisible() {
|
||||||
+ return invisible != null && invisible;
|
+ return entityTag != null && entityTag.contains(INVISIBLE.NBT) && entityTag.getBoolean(INVISIBLE.NBT);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public boolean hasNoBasePlate() {
|
+ public boolean hasNoBasePlate() {
|
||||||
+ return noBasePlate != null && noBasePlate;
|
+ return entityTag != null && entityTag.contains(NO_BASE_PLATE.NBT) && entityTag.getBoolean(NO_BASE_PLATE.NBT);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public boolean shouldShowArms() {
|
+ public boolean shouldShowArms() {
|
||||||
+ return showArms != null && showArms;
|
+ return entityTag != null && entityTag.contains(SHOW_ARMS.NBT) && entityTag.getBoolean(SHOW_ARMS.NBT);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public boolean isSmall() {
|
+ public boolean isSmall() {
|
||||||
+ return small != null && small;
|
+ return entityTag != null && entityTag.contains(SMALL.NBT) && entityTag.getBoolean(SMALL.NBT);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public boolean isMarker() {
|
+ public boolean isMarker() {
|
||||||
+ return marker != null && marker;
|
+ return entityTag != null && entityTag.contains(MARKER.NBT) && entityTag.getBoolean(MARKER.NBT);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public void setInvisible(boolean invisible) {
|
+ public void setInvisible(boolean invisible) {
|
||||||
+ this.invisible = invisible;
|
+ populateTagIfNull();
|
||||||
|
+ entityTag.putBoolean(INVISIBLE.NBT, invisible);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public void setNoBasePlate(boolean noBasePlate) {
|
+ public void setNoBasePlate(boolean noBasePlate) {
|
||||||
+ this.noBasePlate = noBasePlate;
|
+ populateTagIfNull();
|
||||||
|
+ entityTag.putBoolean(NO_BASE_PLATE.NBT, noBasePlate);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public void setShowArms(boolean showArms) {
|
+ public void setShowArms(boolean showArms) {
|
||||||
+ this.showArms = showArms;
|
+ populateTagIfNull();
|
||||||
|
+ entityTag.putBoolean(SHOW_ARMS.NBT, showArms);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public void setSmall(boolean small) {
|
+ public void setSmall(boolean small) {
|
||||||
+ this.small = small;
|
+ populateTagIfNull();
|
||||||
|
+ entityTag.putBoolean(SMALL.NBT, small);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public void setMarker(boolean marker) {
|
+ public void setMarker(boolean marker) {
|
||||||
+ this.marker = marker;
|
+ populateTagIfNull();
|
||||||
|
+ entityTag.putBoolean(MARKER.NBT, marker);
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren