diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java index 3cb7186440..4aad8d816c 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java @@ -1,13 +1,17 @@ package org.bukkit.craftbukkit.block; +import com.google.common.base.Preconditions; import net.minecraft.network.chat.ChatComponentText; import net.minecraft.network.chat.IChatBaseComponent; +import net.minecraft.server.level.EntityPlayer; import net.minecraft.world.item.EnumColor; import net.minecraft.world.level.block.entity.TileEntitySign; import org.bukkit.DyeColor; import org.bukkit.World; import org.bukkit.block.Sign; +import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.util.CraftChatMessage; +import org.bukkit.entity.Player; public class CraftSign extends CraftBlockEntityState implements Sign { @@ -87,6 +91,17 @@ public class CraftSign extends CraftBlockEntityState implements } } + public static void openSign(Sign sign, Player player) { + Preconditions.checkArgument(sign != null, "sign == null"); + Preconditions.checkArgument(sign.isPlaced(), "Sign must be placed"); + Preconditions.checkArgument(sign.getWorld() == player.getWorld(), "Sign must be in same world as Player"); + + TileEntitySign handle = ((CraftSign) sign).getTileEntity(); + handle.isEditable = true; + + ((CraftPlayer) player).getHandle().openTextEdit(handle); + } + public static IChatBaseComponent[] sanitizeLines(String[] lines) { IChatBaseComponent[] components = new IChatBaseComponent[4]; diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 4a8988a96a..e857e5c1b6 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -96,6 +96,7 @@ import org.bukkit.Sound; import org.bukkit.Statistic; import org.bukkit.WeatherType; import org.bukkit.block.Block; +import org.bukkit.block.Sign; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.serialization.DelegateDeserialization; import org.bukkit.conversations.Conversation; @@ -1743,6 +1744,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { getInventory().setItemInMainHand(hand); } + @Override + public void openSign(Sign sign) { + CraftSign.openSign(sign, this); + } + @Override public void showDemoScreen() { if (getHandle().connection == null) return;