Add Player#openSign API to edit a placed sign

This commit is contained in:
md_5 2021-12-05 08:34:54 +11:00
parent 1825cc0b04
commit 27a27cdb84
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11
2 changed files with 21 additions and 0 deletions

View File

@ -1,13 +1,17 @@
package org.bukkit.craftbukkit.block; package org.bukkit.craftbukkit.block;
import com.google.common.base.Preconditions;
import net.minecraft.network.chat.ChatComponentText; import net.minecraft.network.chat.ChatComponentText;
import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.network.chat.IChatBaseComponent;
import net.minecraft.server.level.EntityPlayer;
import net.minecraft.world.item.EnumColor; import net.minecraft.world.item.EnumColor;
import net.minecraft.world.level.block.entity.TileEntitySign; import net.minecraft.world.level.block.entity.TileEntitySign;
import org.bukkit.DyeColor; import org.bukkit.DyeColor;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.craftbukkit.util.CraftChatMessage; import org.bukkit.craftbukkit.util.CraftChatMessage;
import org.bukkit.entity.Player;
public class CraftSign extends CraftBlockEntityState<TileEntitySign> implements Sign { 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) { public static IChatBaseComponent[] sanitizeLines(String[] lines) {
IChatBaseComponent[] components = new IChatBaseComponent[4]; IChatBaseComponent[] components = new IChatBaseComponent[4];

View File

@ -96,6 +96,7 @@ import org.bukkit.Sound;
import org.bukkit.Statistic; import org.bukkit.Statistic;
import org.bukkit.WeatherType; import org.bukkit.WeatherType;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.serialization.DelegateDeserialization; import org.bukkit.configuration.serialization.DelegateDeserialization;
import org.bukkit.conversations.Conversation; import org.bukkit.conversations.Conversation;
@ -1743,6 +1744,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
getInventory().setItemInMainHand(hand); getInventory().setItemInMainHand(hand);
} }
@Override
public void openSign(Sign sign) {
CraftSign.openSign(sign, this);
}
@Override @Override
public void showDemoScreen() { public void showDemoScreen() {
if (getHandle().connection == null) return; if (getHandle().connection == null) return;