e886d8118e
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing
79 lines
6.7 KiB
Diff
79 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/BlockCommand.java b/src/main/java/net/minecraft/server/BlockCommand.java
|
|
index dd7066d1a72f5c6f54c1f40a7b694deb827410dc..6b353a99c04e0312f520f8559c05ddaf51c26aaf 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockCommand.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockCommand.java
|
|
@@ -105,7 +105,7 @@ public class BlockCommand extends BlockTileEntity {
|
|
public EnumInteractionResult interact(IBlockData iblockdata, World world, BlockPosition blockposition, EntityHuman entityhuman, EnumHand enumhand, MovingObjectPositionBlock movingobjectpositionblock) {
|
|
TileEntity tileentity = world.getTileEntity(blockposition);
|
|
|
|
- if (tileentity instanceof TileEntityCommand && entityhuman.isCreativeAndOp()) {
|
|
+ if (tileentity instanceof TileEntityCommand && (entityhuman.isCreativeAndOp() || (entityhuman.isCreative() && entityhuman.getBukkitEntity().hasPermission("minecraft.commandblock")))) { // Paper - command block permission
|
|
entityhuman.a((TileEntityCommand) tileentity);
|
|
return EnumInteractionResult.a(world.isClientSide);
|
|
} else {
|
|
diff --git a/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java b/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
|
index 7e13b1cf6d92c3e0f2dab1ba1d42bd4f250e256c..3820acd65f3cd488dba964e6d9c458852570f4a0 100644
|
|
--- a/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
|
@@ -179,7 +179,7 @@ public abstract class CommandBlockListenerAbstract implements ICommandListener {
|
|
}
|
|
|
|
public EnumInteractionResult a(EntityHuman entityhuman) {
|
|
- if (!entityhuman.isCreativeAndOp()) {
|
|
+ if (!entityhuman.isCreativeAndOp() && !entityhuman.isCreative() && !entityhuman.getBukkitEntity().hasPermission("minecraft.commandblock")) { // Paper - command block permission
|
|
return EnumInteractionResult.PASS;
|
|
} else {
|
|
if (entityhuman.getWorld().isClientSide) {
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
index 9e8d28146658782c7a89dca7b12c68ea70e132b2..2d2fd9a45bcfd2b1da8b7dd109eb50257ab394c9 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -648,7 +648,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
PlayerConnectionUtils.ensureMainThread(packetplayinsetcommandblock, this, this.player.getWorldServer());
|
|
if (!this.minecraftServer.getEnableCommandBlock()) {
|
|
this.player.sendMessage(new ChatMessage("advMode.notEnabled"), SystemUtils.b);
|
|
- } else if (!this.player.isCreativeAndOp()) {
|
|
+ } else if (!this.player.isCreativeAndOp() && !this.player.isCreative() && !this.player.getBukkitEntity().hasPermission("minecraft.commandblock")) { // Paper - command block permission
|
|
this.player.sendMessage(new ChatMessage("advMode.notAllowed"), SystemUtils.b);
|
|
} else {
|
|
CommandBlockListenerAbstract commandblocklistenerabstract = null;
|
|
@@ -711,7 +711,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
PlayerConnectionUtils.ensureMainThread(packetplayinsetcommandminecart, this, this.player.getWorldServer());
|
|
if (!this.minecraftServer.getEnableCommandBlock()) {
|
|
this.player.sendMessage(new ChatMessage("advMode.notEnabled"), SystemUtils.b);
|
|
- } else if (!this.player.isCreativeAndOp()) {
|
|
+ } else if (!this.player.isCreativeAndOp() && !this.player.isCreative() && !this.player.getBukkitEntity().hasPermission("minecraft.commandblock")) { // Paper - command block permission
|
|
this.player.sendMessage(new ChatMessage("advMode.notAllowed"), SystemUtils.b);
|
|
} else {
|
|
CommandBlockListenerAbstract commandblocklistenerabstract = packetplayinsetcommandminecart.a(this.player.world);
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
|
index cdaeeb8b01f084ae7a91f9681850a737af8a74be..4b564d36135e9dbdbb57a95791f89aefd180457b 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
|
@@ -353,7 +353,7 @@ public class PlayerInteractManager {
|
|
TileEntity tileentity = this.world.getTileEntity(blockposition);
|
|
Block block = iblockdata.getBlock();
|
|
|
|
- if ((block instanceof BlockCommand || block instanceof BlockStructure || block instanceof BlockJigsaw) && !this.player.isCreativeAndOp()) {
|
|
+ if ((block instanceof BlockCommand || block instanceof BlockStructure || block instanceof BlockJigsaw) && !this.player.isCreativeAndOp() && !(block instanceof BlockCommand && (this.player.isCreative() && this.player.getBukkitEntity().hasPermission("minecraft.commandblock")))) { // Paper - command block permission
|
|
this.world.notify(blockposition, iblockdata, iblockdata, 3);
|
|
return false;
|
|
} else if (this.player.a((World) this.world, blockposition, this.gamemode)) {
|
|
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();
|
|
}
|