/** * PermissionsEx * Copyright (C) zml and PermissionsEx contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ninja.leaping.permissionsex.bukkit; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import net.milkbowl.vault.chat.Chat; import ninja.leaping.permissionsex.PermissionsEx; import org.bukkit.OfflinePlayer; import javax.annotation.Nullable; import java.util.Map; import java.util.Set; @SuppressWarnings("deprecation") class PEXVaultChat extends Chat { private final PermissionsExPlugin plugin; private final PEXVault perms; PEXVaultChat(PEXVault perms) { super(perms); this.perms = perms; this.plugin = perms.plugin; } @Override public String getName() { return this.plugin.getName(); } @Override public boolean isEnabled() { return this.plugin.isEnabled(); } private Set<Map.Entry<String, String>> contextsFrom(@Nullable String world) { return world == null ? PermissionsEx.GLOBAL_CONTEXT : ImmutableSet.of(Maps.immutableEntry("world", world)); } @Override public String getGroupInfoString(final String world, String name, final String key, String defaultValue) { return perms.getGroup(name).getOption(contextsFrom(world), key).orElse(defaultValue); } @Override public void setGroupInfoString(final String world, String name, final String key, final String value) { perms.getSubject(name).data().update(input -> input.setOption(contextsFrom(world), key, value)); } @Override public String getPlayerInfoString(String world, OfflinePlayer player, String node, String defaultValue) { return perms.getSubject(player).getOption(contextsFrom(world), node).orElse(defaultValue); } @Override public void setPlayerInfoString(final String world, OfflinePlayer player, final String node, final String value) { perms.getSubject(player).data().update(input -> input.setOption(contextsFrom(world), node, value)); } // -- Passthrough methods @Override public String getGroupPrefix(String world, String name) { return getGroupInfoString(world, name, "prefix", ""); } @Override public void setGroupPrefix(String world, String name, String prefix) { setGroupInfoString(world, name, "prefix", prefix); } @Override public String getGroupSuffix(String world, String name) { return getGroupInfoString(world, name, "suffix", ""); } @Override public void setGroupSuffix(String world, String name, String suffix) { setGroupInfoString(world, name, "suffix", suffix); } @Override public int getGroupInfoInteger(String world, String name, String node, int defaultValue) { try { return Integer.parseInt(getGroupInfoString(world, name, node, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } } @Override public void setGroupInfoInteger(String world, String name, String node, int value) { setGroupInfoString(world, name, node, String.valueOf(value)); } @Override public double getGroupInfoDouble(String world, String name, String node, double defaultValue) { try { return Double.parseDouble(getGroupInfoString(world, name, node, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } } @Override public void setGroupInfoDouble(String world, String name, String node, double value) { setGroupInfoString(world, name, node, String.valueOf(value)); } @Override public boolean getGroupInfoBoolean(String world, String name, String node, boolean defaultValue) { return Boolean.parseBoolean(getGroupInfoString(world, name, node, String.valueOf(defaultValue))); } @Override public void setGroupInfoBoolean(String world, String name, String node, boolean value) { setGroupInfoString(world, name, node, String.valueOf(value)); } @Override public String getPlayerPrefix(String world, OfflinePlayer player) { return getPlayerInfoString(world, player, "prefix", null); } @Override public void setPlayerPrefix(String world, OfflinePlayer player, String prefix) { setPlayerInfoString(world, player, "prefix", prefix); } @Override public String getPlayerSuffix(String world, OfflinePlayer player) { return getPlayerInfoString(world, player, "suffix", null); } @Override public void setPlayerSuffix(String world, OfflinePlayer player, String suffix) { setPlayerInfoString(world, player, "suffix", suffix); } @Override public int getPlayerInfoInteger(String world, OfflinePlayer player, String node, int defaultValue) { try { return Integer.parseInt(getPlayerInfoString(world, player, node, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } } @Override public void setPlayerInfoInteger(String world, OfflinePlayer player, String node, int value) { setPlayerInfoString(world, player, node, String.valueOf(value)); } @Override public double getPlayerInfoDouble(String world, OfflinePlayer player, String node, double defaultValue) { try { return Double.parseDouble(getPlayerInfoString(world, player, node, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } } @Override public void setPlayerInfoDouble(String world, OfflinePlayer player, String node, double value) { setPlayerInfoString(world, player, node, String.valueOf(value)); } @Override public boolean getPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean defaultValue) { return Boolean.parseBoolean(getPlayerInfoString(world, player, node, String.valueOf(defaultValue))); } @Override public void setPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean value) { setPlayerInfoString(world, player, node, String.valueOf(value)); } // -- Deprecated stuff @SuppressWarnings("deprecation") private OfflinePlayer pFromName(String name) { return plugin.getServer().getOfflinePlayer(name); } @Override public int getPlayerInfoInteger(String world, String name, String node, int defaultValue) { return getPlayerInfoInteger(world, pFromName(name), node, defaultValue); } @Override public void setPlayerInfoInteger(String world, String name, String node, int value) { setPlayerInfoInteger(world, pFromName(name), node, value); } @Override @Deprecated public String getPlayerInfoString(String world, String name, String node, String defaultValue) { return getPlayerInfoString(world, pFromName(name), node, defaultValue); } @Override public void setPlayerInfoString(String world, String name, String node, String value) { setPlayerInfoString(world, pFromName(name), node, value); } @Override public boolean getPlayerInfoBoolean(String world, String name, String node, boolean defaultValue) { return getPlayerInfoBoolean(world, pFromName(name), node, defaultValue); } @Override public void setPlayerInfoBoolean(String world, String name, String node, boolean value) { setPlayerInfoBoolean(world, pFromName(name), node, value); } @Override public double getPlayerInfoDouble(String world, String name, String node, double defaultValue) { return getPlayerInfoDouble(world, pFromName(name), node, defaultValue); } @Override public void setPlayerInfoDouble(String world, String name, String node, double value) { setPlayerInfoDouble(world, pFromName(name), node, value); } @Override public String getPlayerPrefix(String world, String name) { return getPlayerPrefix(world, pFromName(name)); } @Override public void setPlayerPrefix(String world, String name, String prefix) { setPlayerPrefix(world, pFromName(name), prefix); } @Override public String getPlayerSuffix(String world, String name) { return getPlayerSuffix(world, pFromName(name)); } @Override public void setPlayerSuffix(String world, String name, String suffix) { setPlayerSuffix(world, pFromName(name), suffix); } }