diff --git a/build-data/paper.at b/build-data/paper.at index d1158d474d..f9e03a9515 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -605,6 +605,7 @@ public net.minecraft.world.level.block.entity.SculkSensorBlockEntity lastVibrati public net.minecraft.world.level.block.entity.SculkShriekerBlockEntity warningLevel public net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity openCount public net.minecraft.world.level.block.entity.SignBlockEntity playerWhoMayEdit +public net.minecraft.world.level.block.entity.SkullBlockEntity customName public net.minecraft.world.level.block.entity.SkullBlockEntity noteBlockSound public net.minecraft.world.level.block.entity.SkullBlockEntity owner public net.minecraft.world.level.block.entity.StructureBlockEntity author diff --git a/paper-api/src/main/java/org/bukkit/block/Skull.java b/paper-api/src/main/java/org/bukkit/block/Skull.java index d73137292a..07033434f8 100644 --- a/paper-api/src/main/java/org/bukkit/block/Skull.java +++ b/paper-api/src/main/java/org/bukkit/block/Skull.java @@ -1,5 +1,6 @@ package org.bukkit.block; +import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; @@ -168,4 +169,24 @@ public interface Skull extends TileState { @Deprecated(since = "1.13", forRemoval = true) @Contract("_ -> fail") public void setSkullType(SkullType skullType); + + /** + * Get the custom name of skull. + *

This name is set when placing a skull item that has a custom name. + * This name is only carried back to the item when broken for player heads + * (skeleton/creeper heads will not retain the name).

+ * + * @return Custom name of skull + */ + public @Nullable Component customName(); + + /** + * Set the custom name of skull. + *

This name is set when placing a skull item that has a custom name. + * This name is only carried back to the item when broken for player heads + * (skeleton/creeper heads will not retain the name).

+ * + * @param customName Custom name of skull + */ + public void customName(@Nullable Component customName); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java index bae6f61321..4e6c1b2d24 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java @@ -2,6 +2,8 @@ package org.bukkit.craftbukkit.block; import com.google.common.base.Preconditions; import com.mojang.authlib.GameProfile; +import io.papermc.paper.adventure.PaperAdventure; +import net.kyori.adventure.text.Component; import net.minecraft.Util; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -216,4 +218,16 @@ public class CraftSkull extends CraftBlockEntityState implemen public CraftSkull copy(Location location) { return new CraftSkull(this, location); } + + @Override + public @Nullable Component customName() { + SkullBlockEntity snapshot = getSnapshot(); + return snapshot.customName == null ? null : PaperAdventure.asAdventure(snapshot.customName); + } + + @Override + public void customName(@Nullable Component customName) { + SkullBlockEntity snapshot = getSnapshot(); + snapshot.customName = customName == null ? null : PaperAdventure.asVanilla(customName); + } }