mirror of
https://github.com/PaperMC/Paper.git
synced 2024-10-30 23:39:58 +01:00
0e230a1bee
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 CraftBukkit Changes: 6788550f SPIGOT-6678: ChunkSnapshot#isSectionEmpty() not working as intended. 3ad0fb1c #901: Fix PlayerStatisticIncrementEvent spam
80 lines
6.8 KiB
Diff
80 lines
6.8 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 3f7919f4e8f5a5b79bf4e541ea5f4ce482965fa1..81275857101522b2bb8824313159744036a1cc4f 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
@@ -392,7 +392,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((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 d6fc3ed5339f974b826123d4833045527007ae6e..15b16f94736b250e1e4207498a42043901dd8f1b 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -787,7 +787,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;
|
|
@@ -854,7 +854,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 2e6172930526efc536a214e420e690a5ea42ac3e..a71cd95291e593a54c66f5672554f91b0f1470fa 100644
|
|
--- a/src/main/java/net/minecraft/world/level/BaseCommandBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/BaseCommandBlock.java
|
|
@@ -200,7 +200,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 363ad038e6c2edc675ded828c7800852d1b0668a..fd73e9100feac8c7bf9a5fee21a0ab2d502dc3e0 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
|
|
@@ -129,7 +129,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();
|
|
}
|