diff --git a/fabric/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java b/fabric/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java index 93e695f2..19a1b62e 100644 --- a/fabric/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java +++ b/fabric/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java @@ -1,11 +1,11 @@ package org.popcraft.chunky.listeners.bossbar; +import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerBossEvent; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.permissions.Permissions; import net.minecraft.world.BossEvent; import net.minecraft.world.level.Level; import org.popcraft.chunky.Chunky; @@ -19,6 +19,19 @@ import java.util.function.Consumer; public class BossBarTaskUpdateListener implements Consumer { + private static final boolean HAS_PERMISSIONS; + + static { + boolean hasPermissions; + try { + Class.forName("me.lucko.fabric.api.permissions.v0.Permissions"); + hasPermissions = true; + } catch (ClassNotFoundException e) { + hasPermissions = false; + } + HAS_PERMISSIONS = hasPermissions; + } + private final Map bossBars; public BossBarTaskUpdateListener(final Map bossBars) { @@ -41,7 +54,7 @@ public void accept(final GenerationTaskUpdateEvent event) { } final MinecraftServer server = fabricWorld.getWorld().getServer(); for (final ServerPlayer player : server.getPlayerList().getPlayers()) { - if (player.permissions().hasPermission(Permissions.COMMANDS_GAMEMASTER)) { + if (hasBossBarPermission(server, player)) { bossBar.addPlayer(player); } else { bossBar.removePlayer(player); @@ -61,6 +74,17 @@ public void accept(final GenerationTaskUpdateEvent event) { } } + private static boolean hasBossBarPermission(final MinecraftServer server, final ServerPlayer player) { + if (server != null && server.isSingleplayer()) { + return true; + } + if (HAS_PERMISSIONS) { + return (Permissions.check(player, "chunky.command", 2) + || Permissions.check(player, "chunky.progressbar", 2)); + } + return player.permissions().hasPermission(net.minecraft.server.permissions.Permissions.COMMANDS_GAMEMASTER); + } + private ServerBossEvent createNewBossBar(final Identifier worldIdentifier) { final ServerBossEvent bossBar = new ServerBossEvent( UUID.randomUUID(), diff --git a/forge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java b/forge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java index 20ebe9a3..658e0111 100644 --- a/forge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java +++ b/forge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java @@ -41,7 +41,7 @@ public void accept(final GenerationTaskUpdateEvent event) { } final MinecraftServer server = forgeWorld.getWorld().getServer(); for (final ServerPlayer player : server.getPlayerList().getPlayers()) { - if (player.permissions().hasPermission(Permissions.COMMANDS_GAMEMASTER)) { + if (hasBossBarPermission(server, player)) { bossBar.addPlayer(player); } else { bossBar.removePlayer(player); @@ -61,6 +61,13 @@ public void accept(final GenerationTaskUpdateEvent event) { } } + private static boolean hasBossBarPermission(final MinecraftServer server, final ServerPlayer player) { + if (server != null && server.isSingleplayer()) { + return true; + } + return player.permissions().hasPermission(Permissions.COMMANDS_GAMEMASTER); + } + private ServerBossEvent createNewBossBar(final Identifier worldIdentifier) { final ServerBossEvent bossBar = new ServerBossEvent( UUID.randomUUID(), diff --git a/neoforge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java b/neoforge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java index 9759176e..1693918e 100644 --- a/neoforge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java +++ b/neoforge/src/main/java/org/popcraft/chunky/listeners/bossbar/BossBarTaskUpdateListener.java @@ -41,7 +41,7 @@ public void accept(final GenerationTaskUpdateEvent event) { } final MinecraftServer server = neoForgeWorld.getWorld().getServer(); for (final ServerPlayer player : server.getPlayerList().getPlayers()) { - if (player.permissions().hasPermission(Permissions.COMMANDS_GAMEMASTER)) { + if (hasBossBarPermission(server, player)) { bossBar.addPlayer(player); } else { bossBar.removePlayer(player); @@ -61,6 +61,13 @@ public void accept(final GenerationTaskUpdateEvent event) { } } + private static boolean hasBossBarPermission(final MinecraftServer server, final ServerPlayer player) { + if (server != null && server.isSingleplayer()) { + return true; + } + return player.permissions().hasPermission(Permissions.COMMANDS_GAMEMASTER); + } + private ServerBossEvent createNewBossBar(final Identifier worldIdentifier) { final ServerBossEvent bossBar = new ServerBossEvent( UUID.randomUUID(),