SPIGOT-7372, SPIGOT-7373: Signs can't be edited, issues with SignChangeEvent
This commit is contained in:
parent
5f7bd4d78a
commit
98b4d2ff88
@ -1,6 +1,6 @@
|
|||||||
--- a/net/minecraft/world/level/block/entity/TileEntitySign.java
|
--- a/net/minecraft/world/level/block/entity/TileEntitySign.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/TileEntitySign.java
|
+++ b/net/minecraft/world/level/block/entity/TileEntitySign.java
|
||||||
@@ -31,7 +31,17 @@
|
@@ -31,7 +31,18 @@
|
||||||
import net.minecraft.world.phys.Vec3D;
|
import net.minecraft.world.phys.Vec3D;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
@ -9,6 +9,7 @@
|
|||||||
+import net.minecraft.EnumChatFormat;
|
+import net.minecraft.EnumChatFormat;
|
||||||
+import net.minecraft.nbt.NBTBase;
|
+import net.minecraft.nbt.NBTBase;
|
||||||
+import net.minecraft.server.level.EntityPlayer;
|
+import net.minecraft.server.level.EntityPlayer;
|
||||||
|
+import org.bukkit.block.sign.Side;
|
||||||
+import org.bukkit.craftbukkit.block.CraftBlock;
|
+import org.bukkit.craftbukkit.block.CraftBlock;
|
||||||
+import org.bukkit.craftbukkit.util.CraftChatMessage;
|
+import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||||
+import org.bukkit.entity.Player;
|
+import org.bukkit.entity.Player;
|
||||||
@ -19,7 +20,7 @@
|
|||||||
|
|
||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
private static final int MAX_TEXT_LINE_WIDTH = 90;
|
private static final int MAX_TEXT_LINE_WIDTH = 90;
|
||||||
@@ -100,7 +110,7 @@
|
@@ -100,7 +111,7 @@
|
||||||
@Override
|
@Override
|
||||||
protected void saveAdditional(NBTTagCompound nbttagcompound) {
|
protected void saveAdditional(NBTTagCompound nbttagcompound) {
|
||||||
super.saveAdditional(nbttagcompound);
|
super.saveAdditional(nbttagcompound);
|
||||||
@ -28,7 +29,7 @@
|
|||||||
Logger logger = TileEntitySign.LOGGER;
|
Logger logger = TileEntitySign.LOGGER;
|
||||||
|
|
||||||
Objects.requireNonNull(logger);
|
Objects.requireNonNull(logger);
|
||||||
@@ -119,7 +129,7 @@
|
@@ -119,7 +130,7 @@
|
||||||
@Override
|
@Override
|
||||||
public void load(NBTTagCompound nbttagcompound) {
|
public void load(NBTTagCompound nbttagcompound) {
|
||||||
super.load(nbttagcompound);
|
super.load(nbttagcompound);
|
||||||
@ -37,7 +38,14 @@
|
|||||||
Logger logger;
|
Logger logger;
|
||||||
|
|
||||||
if (nbttagcompound.contains("front_text")) {
|
if (nbttagcompound.contains("front_text")) {
|
||||||
@@ -179,6 +189,7 @@
|
@@ -173,12 +184,13 @@
|
||||||
|
public void updateSignText(EntityHuman entityhuman, boolean flag, List<FilteredText> list) {
|
||||||
|
if (!this.isWaxed() && entityhuman.getUUID().equals(this.getPlayerWhoMayEdit()) && this.level != null) {
|
||||||
|
this.updateText((signtext) -> {
|
||||||
|
- return this.setMessages(entityhuman, list, signtext);
|
||||||
|
+ return this.setMessages(entityhuman, list, signtext, flag); // CraftBukkit
|
||||||
|
}, flag);
|
||||||
|
this.setAllowedPlayerEditor((UUID) null);
|
||||||
this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3);
|
this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3);
|
||||||
} else {
|
} else {
|
||||||
TileEntitySign.LOGGER.warn("Player {} just tried to change non-editable sign", entityhuman.getName().getString());
|
TileEntitySign.LOGGER.warn("Player {} just tried to change non-editable sign", entityhuman.getName().getString());
|
||||||
@ -45,33 +53,45 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,6 +209,25 @@
|
@@ -188,7 +200,8 @@
|
||||||
} else {
|
return this.setText((SignText) unaryoperator.apply(signtext), flag);
|
||||||
signtext = signtext.setMessage(i, IChatBaseComponent.literal(filteredtext.raw()).setStyle(chatmodifier), IChatBaseComponent.literal(filteredtext.filteredOrEmpty()).setStyle(chatmodifier));
|
}
|
||||||
|
|
||||||
|
- private SignText setMessages(EntityHuman entityhuman, List<FilteredText> list, SignText signtext) {
|
||||||
|
+ private SignText setMessages(EntityHuman entityhuman, List<FilteredText> list, SignText signtext, boolean front) { // CraftBukkit
|
||||||
|
+ SignText originalText = signtext; // CraftBukkit
|
||||||
|
for (int i = 0; i < list.size(); ++i) {
|
||||||
|
FilteredText filteredtext = (FilteredText) list.get(i);
|
||||||
|
ChatModifier chatmodifier = signtext.getMessage(i, entityhuman.isTextFilteringEnabled()).getStyle();
|
||||||
|
@@ -200,6 +213,27 @@
|
||||||
}
|
}
|
||||||
+
|
|
||||||
+ // 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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ // 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, (front) ? Side.FRONT : Side.BACK);
|
||||||
|
+ 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]);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ signtext = originalText;
|
||||||
|
+ }
|
||||||
|
+ // CraftBukkit end
|
||||||
|
+
|
||||||
return signtext;
|
return signtext;
|
||||||
@@ -250,11 +280,37 @@
|
}
|
||||||
|
|
||||||
|
@@ -250,11 +284,37 @@
|
||||||
return flag1;
|
return flag1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +131,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -283,7 +339,7 @@
|
@@ -283,7 +343,7 @@
|
||||||
|
|
||||||
private void markUpdated() {
|
private void markUpdated() {
|
||||||
this.setChanged();
|
this.setChanged();
|
||||||
|
@ -109,7 +109,7 @@ public class CraftSign<T extends TileEntitySign> extends CraftBlockEntityState<T
|
|||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
if (i < lines.length && lines[i] != null) {
|
if (i < lines.length && lines[i] != null) {
|
||||||
components[i] = CraftChatMessage.fromString(lines[i])[0];
|
components[i] = IChatBaseComponent.literal("").append(CraftChatMessage.fromString(lines[i])[0]); // SPIGOT-7372: Vanilla wants a literal first
|
||||||
} else {
|
} else {
|
||||||
components[i] = IChatBaseComponent.empty();
|
components[i] = IChatBaseComponent.empty();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user