diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index 98f13e4e3..474370f44 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -972,6 +972,10 @@ public class NMS { BRIDGE.setWitherInvulnerableTicks(wither, ticks); } + public static void setOpWithoutSaving(Player player, boolean op) { + BRIDGE.setOpWithoutSaving(player, op); + } + public static boolean shouldBroadcastToPlayer(NPC npc, Supplier defaultResponse) { return npc != null && npc.data().has(NPC.Metadata.NPC_SPAWNING_IN_PROGRESS) ? false : defaultResponse.get(); } diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java index 3f852d97b..36d74458b 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java +++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -298,6 +298,8 @@ public interface NMSBridge { wither.setInvulnerabilityTicks(ticks); } + public void setOpWithoutSaving(Player player, boolean op); + public boolean shouldJump(Entity entity); public void shutdown(); diff --git a/main/src/main/java/net/citizensnpcs/util/Util.java b/main/src/main/java/net/citizensnpcs/util/Util.java index 0611135f2..74b8ae1f1 100644 --- a/main/src/main/java/net/citizensnpcs/util/Util.java +++ b/main/src/main/java/net/citizensnpcs/util/Util.java @@ -463,7 +463,7 @@ public class Util { } boolean wasOp = clicker.isOp(); if (op) { - clicker.setOp(true); + NMS.setOpWithoutSaving(clicker, true); } try { if (bungeeServer != null) { @@ -479,7 +479,12 @@ public class Util { t.printStackTrace(); } finally { if (op) { - clicker.setOp(wasOp); + if (!wasOp) { + // Disk I/O operation caused by Player#setOp(boolean) + // is not necessary here because changes on permission + // are not actually saved + NMS.setOpWithoutSaving(clicker, false); + } } } } diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java index 62a6cab69..f049877bb 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java @@ -18,6 +18,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_10_R1.DedicatedPlayerList; +import net.minecraft.server.v1_10_R1.DedicatedServer; +import net.minecraft.server.v1_10_R1.OpList; +import net.minecraft.server.v1_10_R1.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1316,6 +1320,21 @@ public class NMSImpl implements NMSBridge { handle.g(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getPropertyManager().getInt("op-permission-level", 4), opList.b(profile))); + } else { + opList.remove(profile); + } + player.recalculatePermissions(); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java index 5489aeb94..03f29df39 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java @@ -18,6 +18,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_11_R1.DedicatedPlayerList; +import net.minecraft.server.v1_11_R1.DedicatedServer; +import net.minecraft.server.v1_11_R1.OpList; +import net.minecraft.server.v1_11_R1.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1369,6 +1373,21 @@ public class NMSImpl implements NMSBridge { handle.g(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getPropertyManager().getInt("op-permission-level", 4), opList.b(profile))); + } else { + opList.remove(profile); + } + player.recalculatePermissions(); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java index 18f6e2fad..087876008 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java @@ -19,6 +19,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_12_R1.DedicatedPlayerList; +import net.minecraft.server.v1_12_R1.DedicatedServer; +import net.minecraft.server.v1_12_R1.OpList; +import net.minecraft.server.v1_12_R1.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1377,6 +1381,21 @@ public class NMSImpl implements NMSBridge { handle.g(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getPropertyManager().getInt("op-permission-level", 4), opList.b(profile))); + } else { + opList.remove(profile); + } + player.recalculatePermissions(); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java index 631200b58..98fe3e68e 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java @@ -18,6 +18,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_13_R2.DedicatedPlayerList; +import net.minecraft.server.v1_13_R2.DedicatedServer; +import net.minecraft.server.v1_13_R2.OpList; +import net.minecraft.server.v1_13_R2.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1413,6 +1417,22 @@ public class NMSImpl implements NMSBridge { handle.d(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final EntityPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getPropertyManager().getInt("op-permission-level", 4), opList.b(profile))); + } else { + opList.remove(profile); + } + playerList.f(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java index d3d8d83f6..f6dedac54 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java @@ -17,6 +17,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_14_R1.DedicatedPlayerList; +import net.minecraft.server.v1_14_R1.DedicatedServer; +import net.minecraft.server.v1_14_R1.OpList; +import net.minecraft.server.v1_14_R1.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1483,6 +1487,22 @@ public class NMSImpl implements NMSBridge { handle.r(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final EntityPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getDedicatedServerProperties().opPermissionLevel, opList.b(profile))); + } else { + opList.remove(profile); + } + playerList.d(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java index 1d2d5530e..27c36fffa 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java @@ -17,6 +17,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_15_R1.DedicatedPlayerList; +import net.minecraft.server.v1_15_R1.DedicatedServer; +import net.minecraft.server.v1_15_R1.OpList; +import net.minecraft.server.v1_15_R1.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1532,6 +1536,22 @@ public class NMSImpl implements NMSBridge { handle.s(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final EntityPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getDedicatedServerProperties().opPermissionLevel, opList.b(profile))); + } else { + opList.remove(profile); + } + playerList.d(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index 7046917f0..09070774a 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -17,6 +17,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_16_R3.DedicatedPlayerList; +import net.minecraft.server.v1_16_R3.DedicatedServer; +import net.minecraft.server.v1_16_R3.OpList; +import net.minecraft.server.v1_16_R3.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1552,6 +1556,22 @@ public class NMSImpl implements NMSBridge { handle.setInvul(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final EntityPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getDedicatedServerProperties().opPermissionLevel, opList.b(profile))); + } else { + opList.remove(profile); + } + playerList.d(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java index 05a5ad7e9..ea086a4a2 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java @@ -16,6 +16,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.dedicated.DedicatedPlayerList; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.players.ServerOpList; +import net.minecraft.server.players.ServerOpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1549,6 +1553,22 @@ public class NMSImpl implements NMSBridge { handle.setInvulnerableTicks(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final ServerPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final ServerOpList opList = playerList.getOps(); + if (op) { + opList.add(new ServerOpListEntry(profile, server.getOperatorUserPermissionLevel(), opList.canBypassPlayerLimit(profile))); + } else { + opList.remove(profile); + } + playerList.sendPlayerPermissionLevel(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof org.bukkit.entity.LivingEntity)) diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java index 444767419..b792d911e 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java @@ -15,6 +15,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.dedicated.DedicatedPlayerList; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.players.ServerOpList; +import net.minecraft.server.players.ServerOpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1559,6 +1563,22 @@ public class NMSImpl implements NMSBridge { handle.setInvulnerableTicks(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final ServerPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final ServerOpList opList = playerList.getOps(); + if (op) { + opList.add(new ServerOpListEntry(profile, server.getOperatorUserPermissionLevel(), opList.canBypassPlayerLimit(profile))); + } else { + opList.remove(profile); + } + playerList.sendPlayerPermissionLevel(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof org.bukkit.entity.LivingEntity)) diff --git a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java index 954f6d044..134aa0009 100644 --- a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java +++ b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java @@ -20,6 +20,10 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; +import net.minecraft.server.dedicated.DedicatedPlayerList; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.players.ServerOpList; +import net.minecraft.server.players.ServerOpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1763,6 +1767,22 @@ public class NMSImpl implements NMSBridge { handle.setInvulnerableTicks(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final ServerPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final ServerOpList opList = playerList.getOps(); + if (op) { + opList.add(new ServerOpListEntry(profile, server.getOperatorUserPermissionLevel(), opList.canBypassPlayerLimit(profile))); + } else { + opList.remove(profile); + } + playerList.sendPlayerPermissionLevel(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof org.bukkit.entity.LivingEntity)) diff --git a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java index 725e9dcd9..aa4c1ce83 100644 --- a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java +++ b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java @@ -18,6 +18,10 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; +import net.minecraft.server.dedicated.DedicatedPlayerList; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.players.ServerOpList; +import net.minecraft.server.players.ServerOpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1804,6 +1808,22 @@ public class NMSImpl implements NMSBridge { } } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final ServerPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final ServerOpList opList = playerList.getOps(); + if (op) { + opList.add(new ServerOpListEntry(profile, server.getOperatorUserPermissionLevel(), opList.canBypassPlayerLimit(profile))); + } else { + opList.remove(profile); + } + playerList.sendPlayerPermissionLevel(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof org.bukkit.entity.LivingEntity)) diff --git a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java index e4430984a..16821c177 100644 --- a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java +++ b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java @@ -18,6 +18,10 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; +import net.minecraft.server.dedicated.DedicatedPlayerList; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.players.ServerOpList; +import net.minecraft.server.players.ServerOpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1768,6 +1772,22 @@ public class NMSImpl implements NMSBridge { } } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final ServerPlayer playerHandle = ((CraftPlayer) player).getHandle(); + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final ServerOpList opList = playerList.getOps(); + if (op) { + opList.add(new ServerOpListEntry(profile, server.getOperatorUserPermissionLevel(), opList.canBypassPlayerLimit(profile))); + } else { + opList.remove(profile); + } + playerList.sendPlayerPermissionLevel(playerHandle); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof org.bukkit.entity.LivingEntity)) diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java index 9184c7265..05da68200 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java @@ -19,6 +19,10 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import net.minecraft.server.v1_8_R3.DedicatedPlayerList; +import net.minecraft.server.v1_8_R3.DedicatedServer; +import net.minecraft.server.v1_8_R3.OpList; +import net.minecraft.server.v1_8_R3.OpListEntry; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -1242,6 +1246,21 @@ public class NMSImpl implements NMSBridge { handle.r(ticks); } + @Override + public void setOpWithoutSaving(Player player, boolean op) { + if (player.isOp() == op) return; + final GameProfile profile = ((CraftPlayer) player).getProfile(); + final DedicatedPlayerList playerList = ((CraftServer) player.getServer()).getHandle(); + final DedicatedServer server = playerList.getServer(); + final OpList opList = playerList.getOPs(); + if (op) { + opList.add(new OpListEntry(profile, server.getPropertyManager().getInt("op-permission-level", 4), opList.b(profile))); + } else { + opList.remove(profile); + } + player.recalculatePermissions(); + } + @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof LivingEntity))