Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-16 21:10:17 +01:00
improved sign handling
Dieser Commit ist enthalten in:
Ursprung
b054cfdda7
Commit
97c5f2bb8e
@ -855,69 +855,59 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
|
|||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
if (((WorldServer) this.player.world).isLoaded(packet130updatesign.x, packet130updatesign.y, packet130updatesign.z)) {
|
if (((WorldServer) this.player.world).isLoaded(packet130updatesign.x, packet130updatesign.y, packet130updatesign.z)) {
|
||||||
TileEntity tileentity = ((WorldServer) this.player.world).getTileEntity(packet130updatesign.x, packet130updatesign.y, packet130updatesign.z);
|
TileEntity tileentity = ((WorldServer) this.player.world).getTileEntity(packet130updatesign.x, packet130updatesign.y, packet130updatesign.z);
|
||||||
// CraftBukkit end
|
|
||||||
|
|
||||||
if (tileentity instanceof TileEntitySign) {
|
if (tileentity instanceof TileEntitySign) {
|
||||||
TileEntitySign tileentitysign = (TileEntitySign) tileentity;
|
TileEntitySign tileentitysign = (TileEntitySign) tileentity;
|
||||||
|
|
||||||
if (!tileentitysign.a()) {
|
if (!tileentitysign.a()) {
|
||||||
this.minecraftServer.c("Player " + this.player.name + " just tried to change non-editable sign");
|
this.minecraftServer.c("Player " + this.player.name + " just tried to change non-editable sign");
|
||||||
|
this.sendPacket(new Packet130UpdateSign(packet130updatesign.x, packet130updatesign.y, packet130updatesign.z, tileentitysign.lines));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
for (j = 0; j < 4; ++j) {
|
for (j = 0; j < 4; ++j) {
|
||||||
boolean flag = true;
|
boolean flag = true;
|
||||||
|
|
||||||
if (packet130updatesign.lines[j].length() > 15) {
|
if (packet130updatesign.lines[j].length() > 15) {
|
||||||
flag = false;
|
flag = false;
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < packet130updatesign.lines[j].length(); ++i) {
|
for (i = 0; i < packet130updatesign.lines[j].length(); ++i) {
|
||||||
if (FontAllowedCharacters.a.indexOf(packet130updatesign.lines[j].charAt(i)) < 0) {
|
if (FontAllowedCharacters.a.indexOf(packet130updatesign.lines[j].charAt(i)) < 0) {
|
||||||
flag = false;
|
flag = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!flag) {
|
if (!flag) {
|
||||||
packet130updatesign.lines[j] = "!?";
|
packet130updatesign.lines[j] = "!?";
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tileentity instanceof TileEntitySign) {
|
|
||||||
j = packet130updatesign.x;
|
|
||||||
int k = packet130updatesign.y;
|
|
||||||
|
|
||||||
i = packet130updatesign.z;
|
|
||||||
TileEntitySign tileentitysign1 = (TileEntitySign) tileentity;
|
|
||||||
|
|
||||||
// CraftBukkit start - SIGN_CHANGE hook
|
|
||||||
Player player = server.getPlayer(this.player);
|
|
||||||
SignChangeEvent event = new SignChangeEvent((CraftBlock) player.getWorld().getBlockAt(j, k, i), server.getPlayer(this.player), packet130updatesign.lines);
|
|
||||||
server.getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
if (event.isCancelled()) {
|
|
||||||
// Normally we would return here, but we have to update the sign with blank text if it's been cancelled
|
|
||||||
// Otherwise the client will have bad text on their sign (client shows text changes as they type)
|
|
||||||
for (int l = 0; l < 4; ++l) {
|
|
||||||
event.setLine(l, "");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// CraftBukkit end
|
|
||||||
|
|
||||||
for (int l = 0; l < 4; ++l) {
|
if (tileentity instanceof TileEntitySign) {
|
||||||
tileentitysign1.lines[l] = event.getLine(l);
|
j = packet130updatesign.x;
|
||||||
// CraftBukkit
|
int k = packet130updatesign.y;
|
||||||
|
i = packet130updatesign.z;
|
||||||
|
|
||||||
|
Player player = server.getPlayer(this.player);
|
||||||
|
SignChangeEvent event = new SignChangeEvent((CraftBlock) player.getWorld().getBlockAt(j, k, i), server.getPlayer(this.player), packet130updatesign.lines);
|
||||||
|
server.getPluginManager().callEvent(event);
|
||||||
|
|
||||||
|
if (!event.isCancelled()) {
|
||||||
|
for (int l = 0; l < 4; ++l) {
|
||||||
|
tileentitysign.lines[l] = event.getLine(l);
|
||||||
|
}
|
||||||
|
tileentitysign.setEditable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
tileentitysign.update();
|
||||||
|
((WorldServer) this.player.world).notify(j, k, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
tileentitysign1.update();
|
|
||||||
// CraftBukkit
|
|
||||||
((WorldServer) this.player.world).notify(j, k, i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean c() {
|
public boolean c() {
|
||||||
|
@ -47,4 +47,10 @@ public class TileEntitySign extends TileEntity {
|
|||||||
public boolean a() {
|
public boolean a() {
|
||||||
return this.c;
|
return this.c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CraftBukkit start
|
||||||
|
public void setEditable(boolean editable) {
|
||||||
|
this.c = editable;
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren