Paper/Spigot-Server-Patches/0278-Configurable-Unrestricted-Signs.patch
Zach Brown 6f2009754d
Stop explicitly blocking Vanilla Method Profiler
At the time this was re-added, there was concern around how the JIT
would handle the system property that enabled it.

This shouldn't be a problem, and as such we no longer need to block
access to it.

The Vanilla Method Profiler will not provide much to most users however
there is no harm in providing it as an option. For most users, the
recommended and supported method for determining performance issues with
Paper will continue to be Timings.
2018-03-31 14:55:42 -04:00

84 lines
4.1 KiB
Diff

From b0972764eddda27e7f6ff9e0f55f2fecda2bb046 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 21 Mar 2018 19:57:10 -0400
Subject: [PATCH] Configurable Unrestricted Signs
Bukkit restricts command execution of signs to test if the sender
has permission to run the specified command. This breaks vanilla
maps that use signs to intentionally run as elevated permission.
Bukkit provides an unrestricted advancements setting, so this setting
compliments that one and allows for unrestricted signs.
We still filter sign update packets to strip out commands at edit phase,
however there is no sanity in ever expecting creative mode to not be
able to create signs with any command.
Creative servers should absolutely never enable this.
Non creative servers, enable at own risk!!!
diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java
index 3f2c5b2d..67bd3bcb 100644
--- a/src/main/java/net/minecraft/server/TileEntitySign.java
+++ b/src/main/java/net/minecraft/server/TileEntitySign.java
@@ -38,7 +38,7 @@ public class TileEntitySign extends TileEntity {
public void load(NBTTagCompound nbttagcompound) {
this.isEditable = false;
super.load(nbttagcompound);
- ICommandListener icommandlistener = new ICommandListener() {
+ ICommandListener icommandlistener = new ISignCommandListener() { // Paper
public String getName() {
return "Sign";
}
@@ -125,7 +125,7 @@ public class TileEntitySign extends TileEntity {
}
public boolean b(final EntityHuman entityhuman) {
- ICommandListener icommandlistener = new ICommandListener() {
+ ICommandListener icommandlistener = new ISignCommandListener() { // Paper
public String getName() {
return entityhuman.getName();
}
@@ -200,4 +200,5 @@ public class TileEntitySign extends TileEntity {
public CommandObjectiveExecutor f() {
return this.i;
}
+ public interface ISignCommandListener extends ICommandListener {} // Paper
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index e86c1675..6095948e 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -175,6 +175,7 @@ public final class CraftServer implements Server {
private CraftIconCache icon;
private boolean overrideAllCommandBlockCommands = false;
private boolean unrestrictedAdvancements;
+ private boolean unrestrictedSignCommands; // Paper
private final List<CraftPlayer> playerView;
public int reloadCount;
public static Exception excessiveVelEx; // Paper - Velocity warnings
@@ -253,6 +254,12 @@ public final class CraftServer implements Server {
saveCommandsConfig();
overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*");
unrestrictedAdvancements = commandsConfiguration.getBoolean("unrestricted-advancements");
+ // Paper start
+ unrestrictedSignCommands = commandsConfiguration.getBoolean("unrestricted-signs");
+ if (unrestrictedSignCommands) {
+ logger.warning("Warning: Commands are no longer restricted on signs. If you allow players to use Creative Mode, there may be risk of players bypassing permissions. Use this setting at your own risk!!!!");
+ }
+ // Paper end
pluginManager.useTimings(configuration.getBoolean("settings.plugin-profiling"));
monsterSpawn = configuration.getInt("spawn-limits.monsters");
animalSpawn = configuration.getInt("spawn-limits.animals");
@@ -270,6 +277,7 @@ public final class CraftServer implements Server {
listener = ((CommandListenerWrapper) listener).base;
}
+ if (unrestrictedSignCommands && listener instanceof TileEntitySign.ISignCommandListener) return true; // Paper
return unrestrictedAdvancements && listener instanceof AdvancementRewards.AdvancementCommandListener;
}
--
2.14.3