123 lines
5.3 KiB
Diff
123 lines
5.3 KiB
Diff
--- a/net/minecraft/world/level/block/entity/TileEntitySign.java
|
|
+++ b/net/minecraft/world/level/block/entity/TileEntitySign.java
|
|
@@ -31,7 +31,17 @@
|
|
import net.minecraft.world.phys.Vec3D;
|
|
import org.slf4j.Logger;
|
|
|
|
-public class TileEntitySign extends TileEntity {
|
|
+// CraftBukkit start
|
|
+import net.minecraft.EnumChatFormat;
|
|
+import net.minecraft.nbt.NBTBase;
|
|
+import net.minecraft.server.level.EntityPlayer;
|
|
+import org.bukkit.craftbukkit.block.CraftBlock;
|
|
+import org.bukkit.craftbukkit.util.CraftChatMessage;
|
|
+import org.bukkit.entity.Player;
|
|
+import org.bukkit.event.block.SignChangeEvent;
|
|
+// CraftBukkit end
|
|
+
|
|
+public class TileEntitySign extends TileEntity implements ICommandListener { // CraftBukkit - implements
|
|
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
private static final int MAX_TEXT_LINE_WIDTH = 90;
|
|
@@ -100,7 +110,7 @@
|
|
@Override
|
|
protected void saveAdditional(NBTTagCompound nbttagcompound) {
|
|
super.saveAdditional(nbttagcompound);
|
|
- DataResult dataresult = SignText.DIRECT_CODEC.encodeStart(DynamicOpsNBT.INSTANCE, this.frontText);
|
|
+ DataResult<NBTBase> dataresult = SignText.DIRECT_CODEC.encodeStart(DynamicOpsNBT.INSTANCE, this.frontText); // CraftBukkit - decompile error
|
|
Logger logger = TileEntitySign.LOGGER;
|
|
|
|
Objects.requireNonNull(logger);
|
|
@@ -119,7 +129,7 @@
|
|
@Override
|
|
public void load(NBTTagCompound nbttagcompound) {
|
|
super.load(nbttagcompound);
|
|
- DataResult dataresult;
|
|
+ DataResult<SignText> dataresult; // CraftBukkit - decompile error
|
|
Logger logger;
|
|
|
|
if (nbttagcompound.contains("front_text")) {
|
|
@@ -179,6 +189,7 @@
|
|
this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3);
|
|
} else {
|
|
TileEntitySign.LOGGER.warn("Player {} just tried to change non-editable sign", entityhuman.getName().getString());
|
|
+ ((EntityPlayer) entityhuman).connection.send(this.getUpdatePacket()); // CraftBukkit
|
|
}
|
|
}
|
|
|
|
@@ -198,6 +209,25 @@
|
|
} else {
|
|
signtext = signtext.setMessage(i, IChatBaseComponent.literal(filteredtext.raw()).setStyle(chatmodifier), IChatBaseComponent.literal(filteredtext.filteredOrEmpty()).setStyle(chatmodifier));
|
|
}
|
|
+
|
|
+ // CraftBukkit start
|
|
+ Player player = ((EntityPlayer) entityhuman).getBukkitEntity();
|
|
+ String[] lines = new String[4];
|
|
+
|
|
+ for (int j = 0; j < list.size(); ++j) {
|
|
+ lines[j] = CraftChatMessage.fromComponent(signtext.getMessage(j, entityhuman.isTextFilteringEnabled()));
|
|
+ }
|
|
+
|
|
+ SignChangeEvent event = new SignChangeEvent(CraftBlock.at(this.level, this.worldPosition), player, lines);
|
|
+ entityhuman.level().getCraftServer().getPluginManager().callEvent(event);
|
|
+
|
|
+ if (!event.isCancelled()) {
|
|
+ IChatBaseComponent[] components = org.bukkit.craftbukkit.block.CraftSign.sanitizeLines(event.getLines());
|
|
+ for (int j = 0; j < components.length; j++) {
|
|
+ signtext = signtext.setMessage(j, components[j]);
|
|
+ }
|
|
+ }
|
|
+ // CraftBukkit end
|
|
}
|
|
|
|
return signtext;
|
|
@@ -250,11 +280,37 @@
|
|
return flag1;
|
|
}
|
|
|
|
- private static CommandListenerWrapper createCommandSourceStack(@Nullable EntityHuman entityhuman, World world, BlockPosition blockposition) {
|
|
+ // CraftBukkit start
|
|
+ @Override
|
|
+ public void sendSystemMessage(IChatBaseComponent ichatbasecomponent) {}
|
|
+
|
|
+ @Override
|
|
+ public org.bukkit.command.CommandSender getBukkitSender(CommandListenerWrapper wrapper) {
|
|
+ return wrapper.getEntity() != null ? wrapper.getEntity().getBukkitSender(wrapper) : new org.bukkit.craftbukkit.command.CraftBlockCommandSender(wrapper, this);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean acceptsSuccess() {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean acceptsFailure() {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean shouldInformAdmins() {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ private CommandListenerWrapper createCommandSourceStack(@Nullable EntityHuman entityhuman, World world, BlockPosition blockposition) {
|
|
+ // CraftBukkit end
|
|
String s = entityhuman == null ? "Sign" : entityhuman.getName().getString();
|
|
Object object = entityhuman == null ? IChatBaseComponent.literal("Sign") : entityhuman.getDisplayName();
|
|
|
|
- return new CommandListenerWrapper(ICommandListener.NULL, Vec3D.atCenterOf(blockposition), Vec2F.ZERO, (WorldServer) world, 2, s, (IChatBaseComponent) object, world.getServer(), entityhuman);
|
|
+ // CraftBukkit - this
|
|
+ return new CommandListenerWrapper(this, Vec3D.atCenterOf(blockposition), Vec2F.ZERO, (WorldServer) world, 2, s, (IChatBaseComponent) object, world.getServer(), entityhuman);
|
|
}
|
|
|
|
@Override
|
|
@@ -283,7 +339,7 @@
|
|
|
|
private void markUpdated() {
|
|
this.setChanged();
|
|
- this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3);
|
|
+ if (this.level != null) this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3); // CraftBukkit - skip notify if world is null (SPIGOT-5122)
|
|
}
|
|
|
|
public boolean isWaxed() {
|