2023-06-08 01:30:00 +10:00

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() {