aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0444-Add-permission-for-command-blocks.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0444-Add-permission-for-command-blocks.patch')
-rw-r--r--patches/server/0444-Add-permission-for-command-blocks.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/patches/server/0444-Add-permission-for-command-blocks.patch b/patches/server/0444-Add-permission-for-command-blocks.patch
new file mode 100644
index 0000000000..02e3126cfe
--- /dev/null
+++ b/patches/server/0444-Add-permission-for-command-blocks.patch
@@ -0,0 +1,79 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Mariell Hoversholm <[email protected]>
+Date: Sat, 16 May 2020 10:05:30 +0200
+Subject: [PATCH] Add permission for command blocks
+
+
+diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+index d4f57fde2f02071dfde08cb2a5c8359984056aef..176e5bbac94cf39805dcacfcae3a3daa98b793b7 100644
+--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
++++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+@@ -403,7 +403,7 @@ public class ServerPlayerGameMode {
+ BlockEntity tileentity = this.level.getBlockEntity(pos);
+ Block block = iblockdata.getBlock();
+
+- if (block instanceof GameMasterBlock && !this.player.canUseGameMasterBlocks()) {
++ if (block instanceof GameMasterBlock && !this.player.canUseGameMasterBlocks() && !(block instanceof net.minecraft.world.level.block.CommandBlock && (this.player.isCreative() && this.player.getBukkitEntity().hasPermission("minecraft.commandblock")))) { // Paper - command block permission
+ this.level.sendBlockUpdated(pos, iblockdata, iblockdata, 3);
+ return false;
+ } else if (this.player.blockActionRestricted(this.level, pos, this.gameModeForPlayer)) {
+diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+index 2d02799d99e0eea9327820fe8a014910c346ec21..770f11ad28f17427306e79509ecd192555854f1e 100644
+--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+@@ -792,7 +792,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
+ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
+ if (!this.server.isCommandBlockEnabled()) {
+ this.player.sendMessage(new TranslatableComponent("advMode.notEnabled"), Util.NIL_UUID);
+- } else if (!this.player.canUseGameMasterBlocks()) {
++ } else if (!this.player.canUseGameMasterBlocks() && (!this.player.isCreative() || !this.player.getBukkitEntity().hasPermission("minecraft.commandblock"))) { // Paper - command block permission
+ this.player.sendMessage(new TranslatableComponent("advMode.notAllowed"), Util.NIL_UUID);
+ } else {
+ BaseCommandBlock commandblocklistenerabstract = null;
+@@ -859,7 +859,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
+ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
+ if (!this.server.isCommandBlockEnabled()) {
+ this.player.sendMessage(new TranslatableComponent("advMode.notEnabled"), Util.NIL_UUID);
+- } else if (!this.player.canUseGameMasterBlocks()) {
++ } else if (!this.player.canUseGameMasterBlocks() && (!this.player.isCreative() || !this.player.getBukkitEntity().hasPermission("minecraft.commandblock"))) { // Paper - command block permission
+ this.player.sendMessage(new TranslatableComponent("advMode.notAllowed"), Util.NIL_UUID);
+ } else {
+ BaseCommandBlock commandblocklistenerabstract = packet.getCommandBlock(this.player.level);
+diff --git a/src/main/java/net/minecraft/world/level/BaseCommandBlock.java b/src/main/java/net/minecraft/world/level/BaseCommandBlock.java
+index 5b125aa77e769983a0aee7c5f6eb6a8a146fead0..fca57e5d1e25db6367c53ad04e49508ebf2223e7 100644
+--- a/src/main/java/net/minecraft/world/level/BaseCommandBlock.java
++++ b/src/main/java/net/minecraft/world/level/BaseCommandBlock.java
+@@ -199,7 +199,7 @@ public abstract class BaseCommandBlock implements CommandSource {
+ }
+
+ public InteractionResult usedBy(Player player) {
+- if (!player.canUseGameMasterBlocks()) {
++ if (!player.canUseGameMasterBlocks() && (!player.isCreative() || !player.getBukkitEntity().hasPermission("minecraft.commandblock"))) { // Paper - command block permission
+ return InteractionResult.PASS;
+ } else {
+ if (player.getCommandSenderWorld().isClientSide) {
+diff --git a/src/main/java/net/minecraft/world/level/block/CommandBlock.java b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
+index 25a297968388f85108d7b9de96fdc7d368034e4d..1a48c5ea1f2f755abfa85469e26f37ea5f02d6da 100644
+--- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java
++++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
+@@ -130,7 +130,7 @@ public class CommandBlock extends BaseEntityBlock implements GameMasterBlock {
+ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+
+- if (tileentity instanceof CommandBlockEntity && player.canUseGameMasterBlocks()) {
++ if (tileentity instanceof CommandBlockEntity && (player.canUseGameMasterBlocks() || (player.isCreative() && player.getBukkitEntity().hasPermission("minecraft.commandblock")))) { // Paper - command block permission
+ player.openCommandBlock((CommandBlockEntity) tileentity);
+ return InteractionResult.sidedSuccess(world.isClientSide);
+ } else {
+diff --git a/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java b/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java
+index c93eec7a81ed83dc9190417dd51acb2780d3b60d..cb75827316fe6c22ec900efea800d35d40573380 100644
+--- a/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java
++++ b/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java
+@@ -16,6 +16,7 @@ public final class CraftDefaultPermissions {
+ DefaultPermissions.registerPermission(CraftDefaultPermissions.ROOT + ".nbt.copy", "Gives the user the ability to copy NBT in creative", org.bukkit.permissions.PermissionDefault.TRUE, parent);
+ DefaultPermissions.registerPermission(CraftDefaultPermissions.ROOT + ".debugstick", "Gives the user the ability to use the debug stick in creative", org.bukkit.permissions.PermissionDefault.OP, parent);
+ DefaultPermissions.registerPermission(CraftDefaultPermissions.ROOT + ".debugstick.always", "Gives the user the ability to use the debug stick in all game modes", org.bukkit.permissions.PermissionDefault.FALSE, parent);
++ DefaultPermissions.registerPermission(CraftDefaultPermissions.ROOT + ".commandblock", "Gives the user the ability to use command blocks.", org.bukkit.permissions.PermissionDefault.OP, parent); // Paper
+ // Spigot end
+ parent.recalculatePermissibles();
+ }