From ce8c8855f1938abcb026f5c0076c0b485870fdd6 Mon Sep 17 00:00:00 2001 From: Bjorn Beishline <75190918+BjornTheProgrammer@users.noreply.github.com> Date: Fri, 30 Jan 2026 15:21:29 -0700 Subject: [PATCH] Add in op stuff --- .../entity/PatchBukkitHumanEntity.java | 35 +++++++++++++++++++ rust/src/java/jvm/worker.rs | 25 +++++++++++++ 2 files changed, 60 insertions(+) diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitHumanEntity.java b/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitHumanEntity.java index 5b561f0..e48457f 100644 --- a/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitHumanEntity.java +++ b/java/patchbukkit/src/main/java/org/patchbukkit/entity/PatchBukkitHumanEntity.java @@ -36,6 +36,8 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.InventoryView.Property; +import org.bukkit.permissions.PermissibleBase; +import org.bukkit.permissions.Permission; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.MainHand; import org.bukkit.inventory.Merchant; @@ -61,12 +63,45 @@ import net.kyori.adventure.util.TriState; public class PatchBukkitHumanEntity extends PatchBukkitLivingEntity implements HumanEntity { + private boolean op; + protected final PermissibleBase perm = new PermissibleBase(this); public PatchBukkitHumanEntity(UUID uuid, String name) { super(uuid, name); } + @Override + public boolean isOp() { + return this.op; + } + + @Override + public void setOp(boolean value) { + this.op = value; + this.perm.recalculatePermissions(); + } + + @Override + public boolean isPermissionSet(String name) { + return this.perm.isPermissionSet(name); + } + + @Override + public boolean isPermissionSet(Permission perm) { + return this.perm.isPermissionSet(perm); + } + + @Override + public boolean hasPermission(String name) { + return this.perm.hasPermission(name); + } + + @Override + public boolean hasPermission(Permission perm) { + return this.perm.hasPermission(perm); + } + @Override public double getEyeHeight() { // TODO Auto-generated method stub diff --git a/rust/src/java/jvm/worker.rs b/rust/src/java/jvm/worker.rs index f92ce11..1de2bae 100644 --- a/rust/src/java/jvm/worker.rs +++ b/rust/src/java/jvm/worker.rs @@ -188,6 +188,31 @@ impl JvmWorker { ) .map_err(|e| format!("Failed to create player instance: {}", e)) .unwrap(); + + let player_permission_level = player.permission_lvl.load(); + if player_permission_level + >= self + .context + .as_ref() + .unwrap() + .server + .basic_config + .op_permission_level + { + jvm.invoke( + &j_player, + "setOp", + &[InvocationArg::try_from(true) + .unwrap() + .into_primitive() + .unwrap()], + ) + .map_err(|e| { + format!("Failed to give operator status to new player: {}", e) + }) + .unwrap(); + }; + let patch_server = jvm .cast(&server_instance, "org.patchbukkit.PatchBukkitServer") .unwrap();