Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.*;

public class TitleLoader {
Expand Down Expand Up @@ -80,6 +82,62 @@ public static List<Title> getByTier(Tier tier){
return list;
}

/** Writes one title's current state back to its tier file, keeping the other entries and their order. */
public static boolean saveTitle(Title title) {
return saveTitle(title, inputFolder);
}

static boolean saveTitle(Title title, File folder) {
File file = new File(folder, title.getTier().getId().toLowerCase() + ".json");
JsonObject root = new JsonObject();
if (file.exists()) {
try (Reader reader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)) {
root = JsonParser.parseReader(reader).getAsJsonObject();
} catch (Exception e) {
// Never overwrite a file we could not read: that would drop every other title in the tier.
e.printStackTrace();
return false;
}
}
JsonObject entry = root.has(title.getId()) && root.get(title.getId()).isJsonObject()
? root.getAsJsonObject(title.getId())
: new JsonObject();
writeEntry(entry, title);
root.add(title.getId(), entry);

File tmp = new File(folder, file.getName() + ".tmp");
try {
folder.mkdirs();
try (Writer writer = new OutputStreamWriter(new FileOutputStream(tmp), StandardCharsets.UTF_8)) {
new GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(root, writer);
}
Files.move(tmp.toPath(), file.toPath(), StandardCopyOption.REPLACE_EXISTING);
return true;
} catch (IOException | JsonIOException e) {
e.printStackTrace();
tmp.delete();
return false;
}
}

static void writeEntry(JsonObject entry, Title title) {
if (title.getName() != null) entry.addProperty("name", title.getName());
if (title.getRgb() != null) entry.addProperty("rgb", title.getRgb());
if (entry.has("title-complete") || title.isTitleComplete()) {
entry.addProperty("title-complete", String.valueOf(title.isTitleComplete()));
}
if (entry.has("provinces") || !title.getProvinces().isEmpty()) {
JsonArray provinceArray = new JsonArray();
for (int provinceId : title.getProvinces()) provinceArray.add(provinceId);
entry.add("provinces", provinceArray);
}
if (entry.has("titles") || !title.getTitles().isEmpty()) {
JsonArray titleArray = new JsonArray();
for (String titleId : title.getTitles()) titleArray.add(titleId);
entry.add("titles", titleArray);
}
}

//Create new

public static Title createNewTitle(Tier tier, String id, String name, String rgb, List<Integer> provinces, List<String> usedTitles, boolean titleComplete) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import net.tfminecraft.simplefactions.installation.handler.ConstructResult;
import net.tfminecraft.simplefactions.settlement.handler.CapitalResult;
import net.tfminecraft.simplefactions.tiers.Title;
import net.tfminecraft.simplefactions.tiers.admin.TitleAdminCommand;
import net.tfminecraft.simplefactions.utils.DisplayNameGate;
import net.tfminecraft.simplefactions.utils.DisplayNameGate.NameOperation;
import net.tfminecraft.simplefactions.utils.Formatter;
Expand All @@ -60,6 +61,10 @@ public class CommandManager implements Listener, CommandExecutor{

@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
// Title editing is staff-only and also works from the console.
if(cmd.getName().equalsIgnoreCase(cmd1) && args.length >= 1 && args[0].equalsIgnoreCase(TitleAdminCommand.SUBCOMMAND)) {
return TitleAdminCommand.handle(sender, args);
}
if(sender instanceof Player) {
Player p = (Player) sender;
if((cmd.getName().equalsIgnoreCase(cmd1) || cmd.getName().equalsIgnoreCase(cmd2)) && args.length < 1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ public Province get(int id) {
return provinces.getOrDefault(id, new Province());
}

/** {@link #get} never returns null, so use this to check an id against provinces.txt. */
public boolean contains(int id) {
return provinces.containsKey(id);
}

public void start(Map<Integer, Province> map) {
provinces = map;
}
Expand Down
14 changes: 13 additions & 1 deletion src/main/java/net/tfminecraft/simplefactions/tiers/Title.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,19 @@ public List<Integer> getProvinces() {
public List<String> getTitles() {
return titles;
}


public void setName(String name) {
this.name = name;
}

public void setRgb(String rgb) {
this.rgb = rgb;
}

public void setTitleComplete(boolean titleComplete) {
this.titleComplete = titleComplete;
}

public boolean canGrant(Faction f) {
return f.getTitles(tier).size() >= 2;
}
Expand Down
Loading