Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-19 13:00:06 +01:00
Add method to send fake sign updates to players. Adds BUKKIT-2300
Dieser Commit ist enthalten in:
Ursprung
903575ff2e
Commit
0df7555cec
@ -1583,12 +1583,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
|||||||
this.server.getPluginManager().callEvent(event);
|
this.server.getPluginManager().callEvent(event);
|
||||||
|
|
||||||
if (!event.isCancelled()) {
|
if (!event.isCancelled()) {
|
||||||
for (int l = 0; l < 4; ++l) {
|
tileentitysign1.lines = org.bukkit.craftbukkit.block.CraftSign.sanitizeLines(event.getLines());
|
||||||
tileentitysign1.lines[l] = event.getLine(l);
|
|
||||||
if(tileentitysign1.lines[l] == null) {
|
|
||||||
tileentitysign1.lines[l] = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tileentitysign1.isEditable = false;
|
tileentitysign1.isEditable = false;
|
||||||
}
|
}
|
||||||
// System.arraycopy(packetplayinupdatesign.f(), 0, tileentitysign1.lines, 0, 4);
|
// System.arraycopy(packetplayinupdatesign.f(), 0, tileentitysign1.lines, 0, 4);
|
||||||
|
@ -30,17 +30,7 @@ public class TileEntitySign extends TileEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Packet getUpdatePacket() {
|
public Packet getUpdatePacket() {
|
||||||
String[] astring = new String[4];
|
String[] astring = sanitizeLines(this.lines); // CraftBukkit - call sign line sanitizer to limit line length
|
||||||
|
|
||||||
// CraftBukkit start - Limit sign text to 15 chars per line
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
|
||||||
astring[i] = this.lines[i];
|
|
||||||
|
|
||||||
if (this.lines[i].length() > 15) {
|
|
||||||
astring[i] = this.lines[i].substring(0, 15);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
|
||||||
|
|
||||||
return new PacketPlayOutUpdateSign(this.x, this.y, this.z, astring);
|
return new PacketPlayOutUpdateSign(this.x, this.y, this.z, astring);
|
||||||
}
|
}
|
||||||
@ -56,4 +46,18 @@ public class TileEntitySign extends TileEntity {
|
|||||||
public EntityHuman b() {
|
public EntityHuman b() {
|
||||||
return this.k;
|
return this.k;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CraftBukkit start - central method to limit sign text to 15 chars per line
|
||||||
|
public static String[] sanitizeLines(String[] lines) {
|
||||||
|
String[] astring = new String[4];
|
||||||
|
for (int i = 0; i < 4; ++i) {
|
||||||
|
astring[i] = lines[i];
|
||||||
|
|
||||||
|
if (lines[i].length() > 15) {
|
||||||
|
astring[i] = lines[i].substring(0, 15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return astring;
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
@ -35,16 +35,24 @@ public class CraftSign extends CraftBlockState implements Sign {
|
|||||||
boolean result = super.update(force, applyPhysics);
|
boolean result = super.update(force, applyPhysics);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
for(int i = 0; i < 4; i++) {
|
sign.lines = sanitizeLines(lines);
|
||||||
if(lines[i] != null) {
|
|
||||||
sign.lines[i] = lines[i];
|
|
||||||
} else {
|
|
||||||
sign.lines[i] = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sign.update();
|
sign.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String[] sanitizeLines(String[] lines) {
|
||||||
|
String[] astring = new String[4];
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
if (i < lines.length && lines[i] != null) {
|
||||||
|
astring[i] = lines[i];
|
||||||
|
} else {
|
||||||
|
astring[i] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TileEntitySign.sanitizeLines(astring);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ import org.bukkit.configuration.serialization.DelegateDeserialization;
|
|||||||
import org.bukkit.conversations.Conversation;
|
import org.bukkit.conversations.Conversation;
|
||||||
import org.bukkit.conversations.ConversationAbandonedEvent;
|
import org.bukkit.conversations.ConversationAbandonedEvent;
|
||||||
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
|
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
|
||||||
|
import org.bukkit.craftbukkit.block.CraftSign;
|
||||||
import org.bukkit.craftbukkit.conversations.ConversationTracker;
|
import org.bukkit.craftbukkit.conversations.ConversationTracker;
|
||||||
import org.bukkit.craftbukkit.CraftEffect;
|
import org.bukkit.craftbukkit.CraftEffect;
|
||||||
import org.bukkit.craftbukkit.CraftOfflinePlayer;
|
import org.bukkit.craftbukkit.CraftOfflinePlayer;
|
||||||
@ -368,6 +369,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|||||||
getHandle().playerConnection.sendPacket(packet);
|
getHandle().playerConnection.sendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendSignChange(Location loc, String[] lines) {
|
||||||
|
if (getHandle().playerConnection == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lines == null) {
|
||||||
|
lines = new String[4];
|
||||||
|
}
|
||||||
|
|
||||||
|
Validate.notNull(loc, "Location can not be null");
|
||||||
|
if (lines.length < 4) {
|
||||||
|
throw new IllegalArgumentException("Must have at least 4 lines");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Limit to 15 chars per line and set null lines to blank
|
||||||
|
String[] astring = CraftSign.sanitizeLines(lines);
|
||||||
|
|
||||||
|
getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateSign(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), astring));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data) {
|
public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data) {
|
||||||
if (getHandle().playerConnection == null) return false;
|
if (getHandle().playerConnection == null) return false;
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren