From 69caa8e9e919336711fc1b709fa0ae1a9005be99 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 25 Feb 2019 19:26:56 +1100 Subject: [PATCH] Add creative mode NBT permissions diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java index bc72dc444..7d76be658 100644 --- a/src/main/java/net/minecraft/server/ItemBlock.java +++ b/src/main/java/net/minecraft/server/ItemBlock.java @@ -166,7 +166,7 @@ public class ItemBlock extends Item { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity != null) { - if (!world.isClientSide && tileentity.isFilteredNBT() && (entityhuman == null || !entityhuman.isCreativeAndOp())) { + if (!world.isClientSide && tileentity.isFilteredNBT() && (entityhuman == null || !(entityhuman.isCreativeAndOp() || (entityhuman.abilities.canInstantlyBuild && entityhuman.getBukkitEntity().hasPermission("minecraft.nbt.place"))))) { // Spigot - add permission return false; } diff --git a/src/main/java/net/minecraft/server/ItemDebugStick.java b/src/main/java/net/minecraft/server/ItemDebugStick.java index 40d141cd6..351040a75 100644 --- a/src/main/java/net/minecraft/server/ItemDebugStick.java +++ b/src/main/java/net/minecraft/server/ItemDebugStick.java @@ -33,7 +33,7 @@ public class ItemDebugStick extends Item { } private void a(EntityHuman entityhuman, IBlockData iblockdata, GeneratorAccess generatoraccess, BlockPosition blockposition, boolean flag, ItemStack itemstack) { - if (entityhuman.isCreativeAndOp()) { + if (entityhuman.isCreativeAndOp() || (entityhuman.abilities.canInstantlyBuild && entityhuman.getBukkitEntity().hasPermission("minecraft.debugstick"))) { Block block = iblockdata.getBlock(); BlockStateList blockstatelist = block.getStates(); Collection> collection = blockstatelist.d(); diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 7a770257e..9062767ef 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -2283,7 +2283,7 @@ public class PlayerConnection implements PacketListenerPlayIn { ItemStack itemstack = packetplayinsetcreativeslot.getItemStack(); NBTTagCompound nbttagcompound = itemstack.b("BlockEntityTag"); - if (!itemstack.isEmpty() && nbttagcompound != null && nbttagcompound.hasKey("x") && nbttagcompound.hasKey("y") && nbttagcompound.hasKey("z")) { + if (!itemstack.isEmpty() && nbttagcompound != null && nbttagcompound.hasKey("x") && nbttagcompound.hasKey("y") && nbttagcompound.hasKey("z") && this.player.getBukkitEntity().hasPermission("minecraft.nbt.copy")) { // Spigot BlockPosition blockposition = new BlockPosition(nbttagcompound.getInt("x"), nbttagcompound.getInt("y"), nbttagcompound.getInt("z")); TileEntity tileentity = this.player.world.getTileEntity(blockposition); 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 6bea250b8..574aee621 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java +++ b/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java @@ -11,6 +11,11 @@ public final class CraftDefaultPermissions { public static void registerCorePermissions() { Permission parent = DefaultPermissions.registerPermission(ROOT, "Gives the user the ability to use all vanilla utilities and commands"); CommandPermissions.registerPermissions(parent); + // Spigot start + DefaultPermissions.registerPermission(ROOT + ".nbt.place", "Gives the user the ability to place restricted blocks with NBT in creative", org.bukkit.permissions.PermissionDefault.OP, parent); + 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 creative", org.bukkit.permissions.PermissionDefault.OP, parent); + // Spigot end parent.recalculatePermissibles(); } } -- 2.20.1