80 lines
6.7 KiB
Diff
80 lines
6.7 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Mariell Hoversholm <proximyst@proximyst.com>
|
||
|
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 af048ab682612233c01f7087d7b8afbf7e58945b..79f3e4176145c42debb9adc1e68175cf063c1f22 100644
|
||
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||
|
@@ -386,7 +386,7 @@ public class ServerPlayerGameMode {
|
||
|
BlockEntity tileentity = this.level.getBlockEntity(pos);
|
||
|
Block block = iblockdata.getBlock();
|
||
|
|
||
|
- if ((block instanceof CommandBlock || block instanceof StructureBlock || block instanceof JigsawBlock) && !this.player.canUseGameMasterBlocks()) {
|
||
|
+ if ((block instanceof CommandBlock || block instanceof StructureBlock || block instanceof JigsawBlock) && !this.player.canUseGameMasterBlocks() && !(block instanceof 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((Level) 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 a0b2fc3fe59d97b9282a9451f35542b39df774e7..471370a9aafa3eda83beb4097c6233650bd155ee 100644
|
||
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||
|
@@ -796,7 +796,7 @@ public class ServerGamePacketListenerImpl implements ServerGamePacketListener {
|
||
|
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 ServerGamePacketListener {
|
||
|
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 00dc4cd436023b946d7005f17a7ba983a4bbdfb6..23500428abf5e7daec19f8fb3c24e6c5361f0819 100644
|
||
|
--- a/src/main/java/net/minecraft/world/level/BaseCommandBlock.java
|
||
|
+++ b/src/main/java/net/minecraft/world/level/BaseCommandBlock.java
|
||
|
@@ -192,7 +192,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 088d78905732cacf69beb7a4b713dac4bec82220..c5e81e7d67504b1bc2a87c0b577bb93be4a57e9c 100644
|
||
|
--- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java
|
||
|
+++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
|
||
|
@@ -128,7 +128,7 @@ public class CommandBlock extends BaseEntityBlock {
|
||
|
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 525ebf961e5da0687183a5e2ead23ed92cbd9d79..a4a809f302c5ff9c76cde5fc0add2ceec1bdf9b5 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(ROOT + ".nbt.copy", "Gives the user the ability to copy NBT in creative", org.bukkit.permissions.PermissionDefault.TRUE, parent);
|
||
|
DefaultPermissions.registerPermission(ROOT + ".debugstick", "Gives the user the ability to use the debug stick in creative", org.bukkit.permissions.PermissionDefault.OP, parent);
|
||
|
DefaultPermissions.registerPermission(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(ROOT + ".commandblock", "Gives the user the ability to use command blocks.", org.bukkit.permissions.PermissionDefault.OP, parent); // Paper
|
||
|
// Spigot end
|
||
|
parent.recalculatePermissibles();
|
||
|
}
|