use of com.palmergames.bukkit.towny.object.PermissionData in project Towny by TownyAdvanced.
the class TownyFlatFileSource method loadTownBlocks.
@Override
public boolean loadTownBlocks() {
String line = "";
String path;
for (TownBlock townBlock : universe.getTownBlocks().values()) {
path = getTownBlockFilename(townBlock);
File fileTownBlock = new File(path);
if (fileTownBlock.exists() && fileTownBlock.isFile()) {
try {
HashMap<String, String> keys = FileMgmt.loadFileIntoHashMap(fileTownBlock);
line = keys.get("town");
if (line != null) {
if (line.isEmpty()) {
TownyMessaging.sendErrorMsg(Translation.of("flatfile_err_townblock_file_missing_town_delete", path));
universe.removeTownBlock(townBlock);
deleteTownBlock(townBlock);
continue;
}
Town town = null;
if (universe.hasTown(line.trim()))
town = universe.getTown(line.trim());
else if (universe.getReplacementNameMap().containsKey(line.trim()))
town = universe.getTown(universe.getReplacementNameMap().get(line).trim());
if (town == null) {
TownyMessaging.sendErrorMsg(Translation.of("flatfile_err_townblock_file_contains_unregistered_town_delete", line, path));
universe.removeTownBlock(townBlock);
deleteTownBlock(townBlock);
continue;
}
townBlock.setTown(town, false);
try {
town.addTownBlock(townBlock);
TownyWorld townyWorld = townBlock.getWorld();
if (townyWorld != null && !townyWorld.hasTown(town))
townyWorld.addTown(town);
} catch (AlreadyRegisteredException ignored) {
}
} else {
// Town line is null, townblock is invalid.
TownyMessaging.sendErrorMsg(Translation.of("flatfile_err_townblock_file_missing_town_delete", path));
universe.removeTownBlock(townBlock);
deleteTownBlock(townBlock);
continue;
}
line = keys.get("name");
if (line != null)
try {
townBlock.setName(line.trim());
} catch (Exception ignored) {
}
line = keys.get("type");
if (line != null)
townBlock.setType(TownBlockTypeHandler.getTypeInternal(line));
line = keys.get("resident");
if (line != null && !line.isEmpty()) {
Resident res = universe.getResident(line.trim());
if (res != null) {
townBlock.setResident(res, false);
} else {
TownyMessaging.sendErrorMsg(Translation.of("flatfile_err_invalid_townblock_resident", townBlock.toString()));
}
}
line = keys.get("price");
if (line != null)
try {
townBlock.setPlotPrice(Double.parseDouble(line.trim()));
} catch (Exception ignored) {
}
line = keys.get("outpost");
if (line != null)
try {
townBlock.setOutpost(Boolean.parseBoolean(line));
} catch (Exception ignored) {
}
line = keys.get("permissions");
if ((line != null) && !line.isEmpty())
try {
townBlock.setPermissions(line.trim());
} catch (Exception ignored) {
}
line = keys.get("changed");
if (line != null)
try {
townBlock.setChanged(Boolean.parseBoolean(line.trim()));
} catch (Exception ignored) {
}
line = keys.get("locked");
if (line != null)
try {
townBlock.setLocked(Boolean.parseBoolean(line.trim()));
} catch (Exception ignored) {
}
line = keys.get("claimedAt");
if (line != null)
try {
townBlock.setClaimedAt(Long.parseLong(line));
} catch (Exception ignored) {
}
line = keys.get("metadata");
if (line != null && !line.isEmpty())
MetadataLoader.getInstance().deserializeMetadata(townBlock, line.trim());
line = keys.get("groupID");
UUID groupID = null;
if (line != null && !line.isEmpty()) {
groupID = UUID.fromString(line.trim());
}
if (groupID != null) {
PlotGroup group = universe.getGroup(groupID);
if (group != null) {
townBlock.setPlotObjectGroup(group);
if (group.getPermissions() == null && townBlock.getPermissions() != null)
group.setPermissions(townBlock.getPermissions());
if (townBlock.hasResident())
group.setResident(townBlock.getResidentOrNull());
} else {
townBlock.removePlotObjectGroup();
}
}
line = keys.get("trustedResidents");
if (line != null && !line.isEmpty() && townBlock.getTrustedResidents().isEmpty()) {
for (Resident resident : TownyAPI.getInstance().getResidents(toUUIDArray(line.split(",")))) townBlock.addTrustedResident(resident);
if (townBlock.hasPlotObjectGroup() && townBlock.getPlotObjectGroup().getTrustedResidents().isEmpty() && townBlock.getTrustedResidents().size() > 0)
townBlock.getPlotObjectGroup().setTrustedResidents(townBlock.getTrustedResidents());
}
line = keys.get("customPermissionData");
if (line != null && !line.isEmpty() && townBlock.getPermissionOverrides().isEmpty()) {
Map<String, String> map = new Gson().fromJson(line, Map.class);
for (Map.Entry<String, String> entry : map.entrySet()) {
Resident resident;
try {
resident = TownyAPI.getInstance().getResident(UUID.fromString(entry.getKey()));
} catch (IllegalArgumentException e) {
continue;
}
if (resident == null)
continue;
townBlock.getPermissionOverrides().put(resident, new PermissionData(entry.getValue()));
}
if (townBlock.hasPlotObjectGroup() && townBlock.getPlotObjectGroup().getPermissionOverrides().isEmpty() && townBlock.getPermissionOverrides().size() > 0)
townBlock.getPlotObjectGroup().setPermissionOverrides(townBlock.getPermissionOverrides());
}
} catch (Exception e) {
TownyMessaging.sendErrorMsg(Translation.of("flatfile_err_exception_reading_townblock_file_at_line", path, line));
return false;
}
} else {
TownyMessaging.sendErrorMsg(Translation.of("flatfile_err_townblock_file_unknown_err", path));
universe.removeTownBlock(townBlock);
deleteTownBlock(townBlock);
}
}
return true;
}
use of com.palmergames.bukkit.towny.object.PermissionData in project Towny by TownyAdvanced.
the class TownyFlatFileSource method saveTownBlock.
@Override
public boolean saveTownBlock(TownBlock townBlock) {
FileMgmt.checkOrCreateFolder(dataFolderPath + File.separator + "townblocks" + File.separator + townBlock.getWorld().getName());
List<String> list = new ArrayList<>();
// name
list.add("name=" + townBlock.getName());
// price
list.add("price=" + townBlock.getPlotPrice());
// town
try {
list.add("town=" + townBlock.getTown().getName());
} catch (NotRegisteredException ignored) {
}
// resident
if (townBlock.hasResident())
list.add("resident=" + townBlock.getResidentOrNull().getName());
// type
list.add("type=" + townBlock.getTypeName());
// outpost
list.add("outpost=" + townBlock.isOutpost());
/*
* Only include a permissions line IF the plot perms are custom.
*/
if (townBlock.isChanged()) {
// permissions
list.add("permissions=" + townBlock.getPermissions().toString());
}
// Have permissions been manually changed
list.add("changed=" + townBlock.isChanged());
list.add("locked=" + townBlock.isLocked());
list.add("claimedAt=" + townBlock.getClaimedAt());
// Metadata
list.add("metadata=" + serializeMetadata(townBlock));
// Group ID
StringBuilder groupID = new StringBuilder();
if (townBlock.hasPlotObjectGroup()) {
groupID.append(townBlock.getPlotObjectGroup().getID());
}
list.add("groupID=" + groupID);
list.add("trustedResidents=" + StringMgmt.join(toUUIDList(townBlock.getTrustedResidents()), ","));
Map<String, String> stringMap = new HashMap<>();
for (Map.Entry<Resident, PermissionData> entry : townBlock.getPermissionOverrides().entrySet()) {
stringMap.put(entry.getKey().getUUID().toString(), entry.getValue().toString());
}
list.add("customPermissionData=" + new Gson().toJson(stringMap));
/*
* Make sure we only save in async
*/
this.queryQueue.add(new FlatFileSaveTask(list, getTownBlockFilename(townBlock)));
return true;
}
use of com.palmergames.bukkit.towny.object.PermissionData in project Towny by TownyAdvanced.
the class TownySQLSource method loadTownBlocks.
@Override
public boolean loadTownBlocks() {
String line = "";
boolean result;
TownyMessaging.sendDebugMsg("Loading Town Blocks.");
// Load town blocks
if (!getContext())
return false;
TownBlock townBlock = null;
try (Statement s = cntx.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM " + tb_prefix + "TOWNBLOCKS")) {
while (rs.next()) {
String worldName = rs.getString("world");
int x = rs.getInt("x");
int z = rs.getInt("z");
try {
townBlock = universe.getTownBlock(new WorldCoord(worldName, x, z));
} catch (NotRegisteredException ex) {
TownyMessaging.sendErrorMsg("Loading Error: Exception while fetching townblock: " + worldName + " " + x + " " + z + " from memory!");
return false;
}
line = rs.getString("name");
if (line != null)
try {
townBlock.setName(line.trim());
} catch (Exception ignored) {
}
line = rs.getString("town");
if (line != null) {
Town town = universe.getTown(line.trim());
if (town == null) {
TownyMessaging.sendErrorMsg("TownBlock file contains unregistered Town: " + line + " , deleting " + townBlock.getWorld().getName() + "," + townBlock.getX() + "," + townBlock.getZ());
universe.removeTownBlock(townBlock);
deleteTownBlock(townBlock);
continue;
}
townBlock.setTown(town, false);
try {
town.addTownBlock(townBlock);
TownyWorld townyWorld = townBlock.getWorld();
if (townyWorld != null && !townyWorld.hasTown(town))
townyWorld.addTown(town);
} catch (AlreadyRegisteredException ignored) {
}
}
line = rs.getString("type");
if (line != null)
townBlock.setType(TownBlockTypeHandler.getTypeInternal(line));
line = rs.getString("resident");
if (line != null && !line.isEmpty()) {
Resident res = universe.getResident(line.trim());
if (res != null)
townBlock.setResident(res, false);
else {
TownyMessaging.sendErrorMsg(String.format("Error fetching resident '%s' for townblock '%s'!", line.trim(), townBlock.toString()));
}
}
line = rs.getString("price");
if (line != null)
try {
townBlock.setPlotPrice(Float.parseFloat(line.trim()));
} catch (Exception ignored) {
}
line = rs.getString("typeName");
if (line != null)
townBlock.setType(TownBlockTypeHandler.getTypeInternal(line));
boolean outpost = rs.getBoolean("outpost");
try {
townBlock.setOutpost(outpost);
} catch (Exception ignored) {
}
line = rs.getString("permissions");
if ((line != null) && !line.isEmpty())
try {
townBlock.setPermissions(line.trim().replaceAll("#", ","));
// set = true;
} catch (Exception ignored) {
}
result = rs.getBoolean("changed");
try {
townBlock.setChanged(result);
} catch (Exception ignored) {
}
result = rs.getBoolean("locked");
try {
townBlock.setLocked(result);
} catch (Exception ignored) {
}
townBlock.setClaimedAt(rs.getLong("claimedAt"));
try {
line = rs.getString("metadata");
if (line != null && !line.isEmpty()) {
MetadataLoader.getInstance().deserializeMetadata(townBlock, line);
}
} catch (SQLException ignored) {
}
try {
line = rs.getString("groupID");
if (line != null && !line.isEmpty()) {
try {
UUID groupID = UUID.fromString(line.trim());
PlotGroup group = universe.getGroup(groupID);
if (group != null) {
townBlock.setPlotObjectGroup(group);
if (group.getPermissions() == null && townBlock.getPermissions() != null)
group.setPermissions(townBlock.getPermissions());
if (townBlock.hasResident())
group.setResident(townBlock.getResidentOrNull());
}
} catch (Exception ignored) {
}
}
} catch (SQLException ignored) {
}
line = rs.getString("trustedResidents");
if (line != null && !line.isEmpty() && townBlock.getTrustedResidents().isEmpty()) {
String search = (line.contains("#")) ? "#" : ",";
for (Resident resident : TownyAPI.getInstance().getResidents(toUUIDArray(line.split(search)))) townBlock.addTrustedResident(resident);
if (townBlock.hasPlotObjectGroup() && townBlock.getPlotObjectGroup().getTrustedResidents().isEmpty() && townBlock.getTrustedResidents().size() > 0)
townBlock.getPlotObjectGroup().setTrustedResidents(townBlock.getTrustedResidents());
}
line = rs.getString("customPermissionData");
if (line != null && !line.isEmpty() && townBlock.getPermissionOverrides().isEmpty()) {
Map<String, String> map = new Gson().fromJson(line, Map.class);
for (Map.Entry<String, String> entry : map.entrySet()) {
Resident resident;
try {
resident = TownyAPI.getInstance().getResident(UUID.fromString(entry.getKey()));
} catch (IllegalArgumentException e) {
continue;
}
if (resident == null)
continue;
townBlock.getPermissionOverrides().put(resident, new PermissionData(entry.getValue()));
}
if (townBlock.hasPlotObjectGroup() && townBlock.getPlotObjectGroup().getPermissionOverrides().isEmpty() && townBlock.getPermissionOverrides().size() > 0)
townBlock.getPlotObjectGroup().setPermissionOverrides(townBlock.getPermissionOverrides());
}
}
} catch (SQLException ex) {
TownyMessaging.sendErrorMsg("Loading Error: Exception while reading TownBlock: " + (townBlock != null ? townBlock : "NULL") + " at line: " + line + " in the sql database");
ex.printStackTrace();
return false;
}
return true;
}
use of com.palmergames.bukkit.towny.object.PermissionData in project Towny by TownyAdvanced.
the class PlotCommand method parsePlotPermCommand.
public void parsePlotPermCommand(Player player, String[] args) throws TownyException {
if (args.length == 0) {
if (!TownyUniverse.getInstance().getPermissionSource().testPermission(player, PermissionNodes.TOWNY_COMMAND_PLOT_PERM_INFO.getNode()))
throw new TownyException(Translatable.of("msg_err_command_disable"));
sendPlotInfo(player, args);
return;
}
if (!TownyUniverse.getInstance().getPermissionSource().testPermission(player, PermissionNodes.TOWNY_COMMAND_PLOT_PERM.getNode(args[0].toLowerCase())))
throw new TownyException(Translatable.of("msg_err_command_disable"));
if (args[0].equalsIgnoreCase("hud")) {
HUDManager.togglePermHUD(player);
} else {
// All other subcommands require the player to be in a claimed area
TownBlock townBlock = TownyAPI.getInstance().getTownBlock(player);
if (townBlock == null) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_not_claimed_1"));
return;
}
if (args[0].equalsIgnoreCase("gui")) {
Resident resident = TownyAPI.getInstance().getResident(player.getName());
if (resident == null) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_not_registered"));
return;
}
PermissionGUIUtil.openPermissionGUI(resident, townBlock);
} else if (args[0].equalsIgnoreCase("remove")) {
if (args.length < 2) {
HelpMenu.PLOT_PERM_HELP.send(player);
return;
}
try {
plotTestOwner(getResidentOrThrow(player.getUniqueId()), townBlock);
} catch (TownyException e) {
TownyMessaging.sendErrorMsg(player, e.getMessage(player));
return;
}
if (townBlock.hasPlotObjectGroup()) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_plot_belongs_to_group", "/plot group perm remove"));
return;
}
Resident resident = TownyAPI.getInstance().getResident(args[1]);
if (resident == null) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_not_registered_1", args[1]));
return;
}
if (!townBlock.getPermissionOverrides().containsKey(resident)) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_no_overrides_set", resident.getName(), Translatable.of("townblock")));
return;
}
townBlock.getPermissionOverrides().remove(resident);
townBlock.save();
TownyMessaging.sendMsg(player, Translatable.of("msg_overrides_removed", resident.getName()));
} else if (args[0].equalsIgnoreCase("add")) {
if (args.length < 2) {
HelpMenu.PLOT_PERM_HELP.send(player);
return;
}
try {
plotTestOwner(getResidentOrThrow(player.getUniqueId()), townBlock);
} catch (TownyException e) {
TownyMessaging.sendErrorMsg(player, e.getMessage(player));
return;
}
if (townBlock.hasPlotObjectGroup()) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_plot_belongs_to_group", "/plot group perm add"));
return;
}
Resident resident = TownyAPI.getInstance().getResident(args[1]);
if (resident == null || resident.isNPC()) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_not_registered_1", args[1]));
return;
}
if (townBlock.getPermissionOverrides().containsKey(resident)) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_overrides_already_set", resident.getName(), Translatable.of("townblock")));
return;
}
townBlock.getPermissionOverrides().put(resident, new PermissionData(PermissionGUIUtil.getDefaultTypes(), player.getName()));
townBlock.save();
TownyMessaging.sendMsg(player, Translatable.of("msg_overrides_added", resident.getName()));
}
}
}
use of com.palmergames.bukkit.towny.object.PermissionData in project Towny by TownyAdvanced.
the class PermissionGUIUtil method handleConversation.
public static void handleConversation(Player player) {
TownBlock startingTownBlock = WorldCoord.parseWorldCoord(player).getTownBlockOrNull();
if (startingTownBlock == null) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_not_claimed_1"));
return;
}
new ResidentConversation(player).runOnResponse((res) -> {
if (!TownyUniverse.getInstance().getPermissionSource().testPermission(player, PermissionNodes.TOWNY_COMMAND_PLOT_PERM_ADD.getNode())) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_command_disable"));
return;
}
Resident resident = (Resident) res;
if (startingTownBlock.hasPlotObjectGroup()) {
PlotGroup group = startingTownBlock.getPlotObjectGroup();
if (group.getPermissionOverrides().containsKey(resident)) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_overrides_already_set", resident.getName(), Translatable.of("plotgroup_sing")));
return;
}
group.putPermissionOverride(resident, new PermissionData(PermissionGUIUtil.getDefaultTypes(), player.getName()));
} else {
if (startingTownBlock.getPermissionOverrides().containsKey(resident)) {
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_overrides_already_set", resident.getName(), Translatable.of("townblock")));
return;
}
startingTownBlock.getPermissionOverrides().put(resident, new PermissionData(PermissionGUIUtil.getDefaultTypes(), player.getName()));
startingTownBlock.save();
}
TownyMessaging.sendMsg(player, Translatable.of("msg_overrides_added", resident.getName()));
PermissionGUIUtil.openPermissionGUI(TownyAPI.getInstance().getResident(player), startingTownBlock);
});
}
Aggregations