Skip to content

Commit

Permalink
feat: add list command & update translation colors
Browse files Browse the repository at this point in the history
  • Loading branch information
sekwah41 committed Nov 18, 2024
1 parent 9deb765 commit 33c9221
Show file tree
Hide file tree
Showing 11 changed files with 316 additions and 124 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ private void registerPortalCommand(CommandRegister commandRegister) {
this.portalCommand.registerSubCommand("endgatewayblock", new EndGatewayBlockSubCommand());
this.portalCommand.registerSubCommand("create", new CreatePortalSubCommand());
this.portalCommand.registerSubCommand("remove", new RemoveSubCommand());
this.portalCommand.registerSubCommand("list", new ListSubCommand());

commandRegister.registerCommand("portal", this.portalCommand);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,6 @@ public class CoreListeners {

public void playerJoin(PlayerContainer player) {
this.portalTempDataServices.activateCooldown(player);
if(player.isOp()) {
if(!Lang.translate("translatedata.lastchange").equals(AdvancedPortalsCore.lastTranslationUpdate)) {
player.sendMessage(Lang.translate("messageprefix.negative")
+ Lang.translateInsertVariables("translatedata.translationsoutdated", configRepository.getTranslation()));
player.sendMessage(Lang.translate("messageprefix.negative")
+ Lang.translate("translatedata.replacecommand"));
}
}
}

public void teleportEvent(PlayerContainer player) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,69 @@
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.util.Lang;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class LangUpdateSubCommand implements SubCommand {

@Inject
private AdvancedPortalsCore portalsCore;
@Inject
private ConfigRepository configRepository;

public LangUpdateSubCommand() {
}

@Override
public void onCommand(CommandSenderContainer sender, String[] args) {
if(args.length > 1 && args[1].equalsIgnoreCase("overwrite")) {
this.portalsCore.getDataStorage().copyDefaultFile("lang/en_GB.lang", true);
this.portalsCore.getDataStorage().copyDefaultFile("lang/" + configRepository.getTranslation() + ".lang", true);
sender.sendMessage(Lang.translate("messageprefix.positive") + Lang.translate("translatedata.replaced"));
Lang.loadLanguage(configRepository.getTranslation());
} else {
this.portalsCore.getDataStorage().copyDefaultFile("lang/en_GB.lang", "lang/en_GB-new.lang", true);
sender.sendMessage(Lang.translate("messageprefix.positive") + Lang.translate("translatedata.replaced") + Lang.translate("translatedata.overwrite"));
// TODO check what keys are missing and append them to the end of the file, check the translation first then GB
Lang lang = Lang.instance;
Map<String, String> internalTranslation = lang.getInternalLanguageMap(Lang.DEFAULT_LANG);
internalTranslation.putAll(lang.getInternalLanguageMap(configRepository.getTranslation()));

Map<String, String> currentTranslation = lang.getLanguageMap(configRepository.getTranslation());
// Remove everything to leave just the missing keys
for(Map.Entry<String, String> entry : currentTranslation.entrySet()) {
internalTranslation.remove(entry.getKey());
}

List<String> newTranslations = new ArrayList<>();
for(Map.Entry<String, String> entry : internalTranslation.entrySet()) {
newTranslations.add(entry.getKey() + "=" + entry.getValue());
}

String appendText = String.join("\n", newTranslations);

InputStream translationFile = this.portalsCore.getDataStorage().loadResource("lang/" + configRepository.getTranslation() + ".lang");
String result = new BufferedReader(new InputStreamReader(translationFile))
.lines().collect(Collectors.joining("\n"));
InputStream withExtras = new ByteArrayInputStream(result.concat("\n").concat(appendText).getBytes());
this.portalsCore.getDataStorage().writeResource(withExtras, "lang/" + configRepository.getTranslation() + ".lang");

Lang.loadLanguage(configRepository.getTranslation());

sender.sendMessage(Lang.translate("messageprefix.positive") + Lang.translateInsertVariables("translatedata.updated", newTranslations.size()));

/*if(!configRepository.getTranslation().equals("en_GB")) {
// Copy this just to allow people to check the new translations.
this.portalsCore.getDataStorage().copyDefaultFile("lang/en_GB.lang", "lang/en_GB-new.lang", true);
}
this.portalsCore.getDataStorage().copyDefaultFile("lang/" + configRepository.getTranslation() + ".lang", "lang/" + configRepository.getTranslation() + "-new.lang", true);
sender.sendMessage(Lang.translate("messageprefix.positive") + Lang.translate("translatedata.replaced") + Lang.translate("translatedata.overwrite"));*/
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.sekwah.advancedportals.core.commands.subcommands.portal;

import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;

import java.util.List;

public class ListSubCommand implements SubCommand {

@Inject
PortalServices portalServices;

@Override
public void onCommand(CommandSenderContainer sender, String[] args) {
sender.sendMessage(Lang.translate("messageprefix.positive") + Lang.translate("command.list"));
}

@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
}

@Override
public List<String> onTabComplete(CommandSenderContainer sender, String[] args) {
return null;
}

@Override
public String getBasicHelpText() {
return Lang.translate("command.list.help");
}

@Override
public String getDetailedHelpText() {
return Lang.translate("command.list.help");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
Expand All @@ -21,11 +22,15 @@ public class ReloadSubCommand implements SubCommand {
@Inject
DestinationServices destinationServices;

@Inject
ConfigRepository configRepository;

@Override
public void onCommand(CommandSenderContainer sender, String[] args) {
portalsCore.loadPortalConfig();
portalServices.loadPortals();
destinationServices.loadDestinations();
Lang.loadLanguage(configRepository.getTranslation());
sender.sendMessage(Lang.translate("messageprefix.positive") + Lang.translate("command.reload.reloaded"));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,7 @@ public boolean copyDefaultFile(String sourceLoc, String fileLoc, boolean overwri
return false;
}

FileOutputStream outStream = new FileOutputStream(outFile);

byte[] buf = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0) {
outStream.write(buf, 0, len);
}
inputStream.close();
outStream.close();
writeToFile(inputStream, outFile);
} catch (NullPointerException e) {
e.printStackTrace();
this.infoLogger.logWarning("Could not load " + sourceLoc + ". The file does" +
Expand Down Expand Up @@ -157,4 +149,24 @@ public InputStream loadResource(String location) {
}
}
}

public void writeResource(InputStream inputStream, String location) {
File outFile = new File(dataFolder, location);
try {
writeToFile(inputStream, outFile);
} catch (IOException e) {
e.printStackTrace();
}
}

private void writeToFile(InputStream inputStream, File outFile) throws IOException {
FileOutputStream outStream = new FileOutputStream(outFile);
byte[] buf = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0) {
outStream.write(buf, 0, len);
}
inputStream.close();
outStream.close();
}
}
60 changes: 38 additions & 22 deletions core/src/main/java/com/sekwah/advancedportals/core/util/Lang.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
Expand Down Expand Up @@ -34,20 +36,19 @@ public class Lang {
@Inject
private InfoLogger infoLogger;

//private final String DEFAULT_LANG = "en_GB";

/*public Lang() {
injectTranslations(this, DEFAULT_LANG);
}*/
public static final String DEFAULT_LANG = "en_GB";

public static void loadLanguage(String fileName) {
if(!DEFAULT_LANG.equals(fileName)) {
instance.injectTranslations(instance, DEFAULT_LANG);
}
instance.injectTranslations(instance, fileName);
}

public static String translate(String s) {
if (instance.languageMap.containsKey(s)) {
String translation = instance.languageMap.get(s);
translation = translation.replaceAll("\\\\u00A7", "\u00A7");
translation = translation.replaceAll("&([0-9a-frk-o])", "\u00A7$1");
return translation;
} else {
return s;
Expand All @@ -62,35 +63,50 @@ public static String translateInsertVariables(String s, Object... args) {
return translation;
}

public Map<String, String> getLanguageMap(String fileName) {
InputStream stream = this.dataStorage.loadResource("lang/" + fileName + ".lang");
if (stream != null) {
return Lang.parseLang(stream);
}
return Collections.emptyMap();
}

public Map<String, String> getInternalLanguageMap(String fileName) {
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("lang/" + fileName + ".lang");
if (stream != null) {
return Lang.parseLang(stream);
}
return Collections.emptyMap();
}

private void injectTranslations(Lang lang, String fileName) {
try {
//URL url = lang.getClass().getClassLoader().getResource("lang/" + fileName + ".lang");
//System.out.println(url);
//Map<String, String> newLangMap = lang.parseLang(url.openStream());
InputStream stream = this.dataStorage.loadResource("lang/" + fileName + ".lang");
if (stream != null) {
Map<String, String> newLangMap = lang.parseLang(stream);
if (newLangMap != null) {
lang.languageMap.putAll(newLangMap);
}
URL url = lang.getClass().getClassLoader().getResource("lang/" + fileName + ".lang");
if (url != null) {
Map<String, String> initialMap = Lang.parseLang(url.openStream());
lang.languageMap.putAll(initialMap);
} else {
this.infoLogger.logWarning("Could not load " + fileName + ".lang from within Advanced Portals as it doesn't exist.");
}
} catch (NullPointerException e) {
} catch (IOException e) {
e.printStackTrace();
this.infoLogger.logWarning("Could not load " + fileName + ".lang The file does" +
"not exist or there has been an error reading the file. Canceled loading language file.");
this.infoLogger.logWarning("Could not load " + fileName + ".lang from within Advanced Portals.");
}

Map<String, String> newLangMap = this.getLanguageMap("lang/" + fileName + ".lang");
lang.languageMap.putAll(newLangMap);
}

private Map<String, String> parseLang(InputStream inputStream) {
public static Map<String, String> parseLang(InputStream inputStream) {
Scanner scanner = new Scanner(inputStream, "UTF-8");
String line = getNextLine(scanner);
HashMap<String, String> newMap = new HashMap<>();
while (scanner != null && line != null) {
while (line != null) {
//System.out.println(line);
if (!line.startsWith("#") && line.indexOf('=') > -1) {
int split = line.indexOf('=');
String key = line.substring(0, split);
String value = line.substring(split + 1, line.length());
String value = line.substring(split + 1);
newMap.put(key, value);
}
line = getNextLine(scanner);
Expand All @@ -103,7 +119,7 @@ private Map<String, String> parseLang(InputStream inputStream) {
return newMap;
}

private String getNextLine(Scanner scanner) {
private static String getNextLine(Scanner scanner) {
if (scanner.hasNextLine()) {
return scanner.nextLine();
}
Expand Down
Loading

0 comments on commit 33c9221

Please sign in to comment.