Add Player#openSign API to edit a placed sign

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot 2021-12-05 08:34:54 +11:00
parent 6646c417c5
commit 14215fdadd
2 changed files with 21 additions and 0 deletions

View File

@ -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<TileEntitySign> implements Sign {
@ -87,6 +91,17 @@ public class CraftSign extends CraftBlockEntityState<TileEntitySign> 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];

View File

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