mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-25 14:46:45 +01:00
Fix startup issues and make messages send properly
This commit is contained in:
parent
28d6d4db92
commit
a4c9ed90b7
@ -1094,4 +1094,15 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
return (PlayerManager<BukkitPlayer, Player>) getInjector().getInstance(PlayerManager.class);
|
return (PlayerManager<BukkitPlayer, Player>) getInjector().getInstance(PlayerManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override public void copyCaptionMaps() {
|
||||||
|
/* Make this prettier at some point */
|
||||||
|
final String[] languages = new String[] { "en" };
|
||||||
|
for (final String language : languages) {
|
||||||
|
if (!new File(new File(this.getDataFolder(), "lang"), String.format("messages_%s.json", language)).exists()) {
|
||||||
|
this.saveResource(String.format("lang/messages_%s.json", language), false);
|
||||||
|
logger.info("Copied language file 'messages_{}.json'", language);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -253,6 +253,11 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
*/
|
*/
|
||||||
@Nonnull Audience getConsoleAudience();
|
@Nonnull Audience getConsoleAudience();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the caption maps
|
||||||
|
*/
|
||||||
|
void copyCaptionMaps();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the {@link PermissionHandler} implementation for the platform
|
* Get the {@link PermissionHandler} implementation for the platform
|
||||||
*
|
*
|
||||||
|
@ -90,7 +90,6 @@ import java.net.MalformedURLException;
|
|||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.nio.file.StandardOpenOption;
|
import java.nio.file.StandardOpenOption;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayDeque;
|
import java.util.ArrayDeque;
|
||||||
@ -141,7 +140,7 @@ public class PlotSquared {
|
|||||||
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
|
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
|
||||||
private YamlConfiguration config;
|
private YamlConfiguration config;
|
||||||
// Localization
|
// Localization
|
||||||
private Map<String, CaptionMap> captionMaps;
|
private final Map<String, CaptionMap> captionMaps = new HashMap<>();
|
||||||
// Platform / Version / Update URL
|
// Platform / Version / Update URL
|
||||||
private PlotVersion version;
|
private PlotVersion version;
|
||||||
// Files and configuration
|
// Files and configuration
|
||||||
@ -174,6 +173,13 @@ public class PlotSquared {
|
|||||||
//
|
//
|
||||||
ConfigurationSerialization.registerClass(BlockBucket.class, "BlockBucket");
|
ConfigurationSerialization.registerClass(BlockBucket.class, "BlockBucket");
|
||||||
|
|
||||||
|
// Load caption map
|
||||||
|
try {
|
||||||
|
this.loadCaptionMap();
|
||||||
|
} catch (final Exception e) {
|
||||||
|
logger.error("Failed to load caption map", e);
|
||||||
|
}
|
||||||
|
|
||||||
// Setup the global flag container
|
// Setup the global flag container
|
||||||
GlobalFlagContainer.setup();
|
GlobalFlagContainer.setup();
|
||||||
|
|
||||||
@ -197,8 +203,6 @@ public class PlotSquared {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.captionMaps = new HashMap<>();
|
|
||||||
|
|
||||||
this.worldedit = WorldEdit.getInstance();
|
this.worldedit = WorldEdit.getInstance();
|
||||||
|
|
||||||
// Create Event utility class
|
// Create Event utility class
|
||||||
@ -224,16 +228,19 @@ public class PlotSquared {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadCaptionMap() throws IOException {
|
public void loadCaptionMap() throws Exception {
|
||||||
|
this.platform.copyCaptionMaps();
|
||||||
// Setup localization
|
// Setup localization
|
||||||
CaptionMap captionMap;
|
CaptionMap captionMap;
|
||||||
if (Settings.Enabled_Components.PER_USER_LOCALE) {
|
if (Settings.Enabled_Components.PER_USER_LOCALE) {
|
||||||
captionMap = CaptionLoader.loadAll(Paths.get("lang"));
|
captionMap = CaptionLoader.loadAll(new File(this.platform.getDirectory(), "lang").toPath());
|
||||||
} else {
|
} else {
|
||||||
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
||||||
captionMap = CaptionLoader.loadSingle(Paths.get("lang", fileName));
|
captionMap = CaptionLoader.loadSingle(new File(new File(this.platform.getDirectory(), "lang"), fileName).toPath());
|
||||||
}
|
}
|
||||||
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
||||||
|
logger.info("Loaded caption map for namespace 'plotsquared': {}",
|
||||||
|
this.captionMaps.get(TranslatableCaption.DEFAULT_NAMESPACE).getClass().getCanonicalName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -301,12 +301,12 @@ public class MainCommand extends Command {
|
|||||||
throw e;
|
throw e;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
String message = e.getLocalizedMessage();
|
String message = e.getMessage();
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.error"),
|
player.sendMessage(TranslatableCaption.of("errors.error"),
|
||||||
net.kyori.adventure.text.minimessage.Template.of("value", message));
|
net.kyori.adventure.text.minimessage.Template.of("value", message));
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.error"));
|
player.sendMessage(TranslatableCaption.of("errors.error"), net.kyori.adventure.text.minimessage.Template.of("value", ""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Reset command scope //
|
// Reset command scope //
|
||||||
|
@ -117,7 +117,7 @@ public class Reload extends SubCommand {
|
|||||||
});
|
});
|
||||||
this.worldConfiguration.save(this.worldFile);
|
this.worldConfiguration.save(this.worldFile);
|
||||||
player.sendMessage(TranslatableCaption.of("reload.reloaded_configs"));
|
player.sendMessage(TranslatableCaption.of("reload.reloaded_configs"));
|
||||||
} catch (IOException e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
player.sendMessage(TranslatableCaption.of("reload.reload_failed"));
|
player.sendMessage(TranslatableCaption.of("reload.reload_failed"));
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.core.configuration.caption;
|
package com.plotsquared.core.configuration.caption;
|
||||||
|
|
||||||
|
import com.google.common.reflect.TypeToken;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -64,7 +63,7 @@ public final class CaptionLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CaptionMap loadSingle(@Nonnull final Path file) throws IOException {
|
@Nonnull public static CaptionMap loadSingle(@Nonnull final Path file) {
|
||||||
final String fileName = file.getFileName().toString();
|
final String fileName = file.getFileName().toString();
|
||||||
final Matcher matcher = FILE_NAME_PATTERN.matcher(fileName);
|
final Matcher matcher = FILE_NAME_PATTERN.matcher(fileName);
|
||||||
final Locale locale;
|
final Locale locale;
|
||||||
@ -73,14 +72,14 @@ public final class CaptionLoader {
|
|||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(fileName + " is an invalid message file (cannot extract locale)");
|
throw new IllegalArgumentException(fileName + " is an invalid message file (cannot extract locale)");
|
||||||
}
|
}
|
||||||
JsonObject object = GSON.fromJson(
|
final Map<String, String> object;
|
||||||
Files.newBufferedReader(file, StandardCharsets.UTF_16),
|
try {
|
||||||
JsonObject.class);
|
object = GSON.fromJson(Files.newBufferedReader(file, StandardCharsets.UTF_8), new TypeToken<Map<String, String>>() {}.getType());
|
||||||
Map<TranslatableCaption, String> captions = new HashMap<>();
|
} catch (final Exception e) {
|
||||||
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
|
throw new RuntimeException(String.format("Failed to load caption file '%s'", file.getFileName().toString()), e);
|
||||||
TranslatableCaption key = TranslatableCaption.of(entry.getKey());
|
|
||||||
captions.put(key, entry.getValue().getAsString());
|
|
||||||
}
|
}
|
||||||
|
final Map<TranslatableCaption, String> captions = new HashMap<>();
|
||||||
|
object.forEach((key, value) -> captions.put(TranslatableCaption.of(key), value));
|
||||||
return new LocalizedCaptionMap(locale, captions);
|
return new LocalizedCaptionMap(locale, captions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ public interface CaptionMap {
|
|||||||
class NoSuchCaptionException extends IllegalArgumentException {
|
class NoSuchCaptionException extends IllegalArgumentException {
|
||||||
|
|
||||||
public NoSuchCaptionException(@Nonnull final NamespacedCaption caption) {
|
public NoSuchCaptionException(@Nonnull final NamespacedCaption caption) {
|
||||||
super(String.format("No caption with the key '%s' exists in the map", caption.getKey()));
|
super(String.format("No caption with the key '%s:%s' exists in the map", caption.getNamespace(), caption.getKey()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -55,8 +55,6 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class ConsolePlayer extends PlotPlayer<Actor> {
|
public class ConsolePlayer extends PlotPlayer<Actor> {
|
||||||
@ -145,15 +143,11 @@ public class ConsolePlayer extends PlotPlayer<Actor> {
|
|||||||
if (message.isEmpty()) {
|
if (message.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
message = CaptionUtility.format(this, message).
|
message = CaptionUtility.format(this, message)
|
||||||
/* Magic replacement characters */
|
.replace('\u2010', '%').replace('\u2020', '&').replace('\u2030', '&')
|
||||||
replace('\u2010', '%').replace('\u2020', '&').replace('\u2030', '&');
|
.replace("<prefix>", TranslatableCaption.of("core.prefix").getComponent(this));
|
||||||
// Create the template list, and add the prefix as a replacement
|
|
||||||
final List<Template> templates = Arrays.asList(replacements);
|
|
||||||
templates.add(Template.of("prefix", MINI_MESSAGE.parse(
|
|
||||||
TranslatableCaption.of("core.prefix").getComponent(this))));
|
|
||||||
// Parse the message
|
// Parse the message
|
||||||
PlotSquared.platform().getConsoleAudience().sendMessage(MINI_MESSAGE.parse(message, templates));
|
PlotSquared.platform().getConsoleAudience().sendMessage(MINI_MESSAGE.parse(message, replacements));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public void teleport(Location location, TeleportCause cause) {
|
@Override public void teleport(Location location, TeleportCause cause) {
|
||||||
|
@ -32,12 +32,11 @@ import com.plotsquared.core.PlotSquared;
|
|||||||
import com.plotsquared.core.collection.ByteArrayUtilities;
|
import com.plotsquared.core.collection.ByteArrayUtilities;
|
||||||
import com.plotsquared.core.command.CommandCaller;
|
import com.plotsquared.core.command.CommandCaller;
|
||||||
import com.plotsquared.core.command.RequiredType;
|
import com.plotsquared.core.command.RequiredType;
|
||||||
import com.plotsquared.core.configuration.caption.Caption;
|
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
|
import com.plotsquared.core.configuration.caption.Caption;
|
||||||
import com.plotsquared.core.configuration.caption.CaptionMap;
|
import com.plotsquared.core.configuration.caption.CaptionMap;
|
||||||
import com.plotsquared.core.configuration.caption.CaptionUtility;
|
import com.plotsquared.core.configuration.caption.CaptionUtility;
|
||||||
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
||||||
import com.plotsquared.core.configuration.caption.Templates;
|
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.database.DBFunc;
|
import com.plotsquared.core.database.DBFunc;
|
||||||
import com.plotsquared.core.events.TeleportCause;
|
import com.plotsquared.core.events.TeleportCause;
|
||||||
@ -79,13 +78,11 @@ import javax.annotation.Nullable;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -98,7 +95,6 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
*/
|
*/
|
||||||
public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, LocaleHolder {
|
public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, LocaleHolder {
|
||||||
|
|
||||||
private static final MiniMessage MINI_MESSAGE = MiniMessage.builder().build();
|
|
||||||
private static final String NON_EXISTENT_CAPTION = "<red>PlotSquared does not recognize the caption: ";
|
private static final String NON_EXISTENT_CAPTION = "<red>PlotSquared does not recognize the caption: ";
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger("P2/" + PlotPlayer.class.getSimpleName());
|
private static final Logger logger = LoggerFactory.getLogger("P2/" + PlotPlayer.class.getSimpleName());
|
||||||
@ -827,9 +823,9 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
|||||||
public void sendTitle(@Nonnull final Caption title, @Nonnull final Caption subtitle,
|
public void sendTitle(@Nonnull final Caption title, @Nonnull final Caption subtitle,
|
||||||
final int fadeIn, final int stay, final int fadeOut,
|
final int fadeIn, final int stay, final int fadeOut,
|
||||||
@Nonnull final Template... replacements) {
|
@Nonnull final Template... replacements) {
|
||||||
final Component titleComponent = MINI_MESSAGE.parse(title.getComponent(this), replacements);
|
final Component titleComponent = MiniMessage.get().parse(title.getComponent(this), replacements);
|
||||||
final Component subtitleComponent =
|
final Component subtitleComponent =
|
||||||
MINI_MESSAGE.parse(subtitle.getComponent(this), replacements);
|
MiniMessage.get().parse(subtitle.getComponent(this), replacements);
|
||||||
getAudience().showTitle(Title
|
getAudience().showTitle(Title
|
||||||
.of(titleComponent, subtitleComponent, Duration.of(fadeIn * 50, ChronoUnit.MILLIS),
|
.of(titleComponent, subtitleComponent, Duration.of(fadeIn * 50, ChronoUnit.MILLIS),
|
||||||
Duration.of(stay * 50, ChronoUnit.MILLIS),
|
Duration.of(stay * 50, ChronoUnit.MILLIS),
|
||||||
@ -851,14 +847,11 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Replace placeholders, etc
|
// Replace placeholders, etc
|
||||||
message = CaptionUtility.format(this, message).
|
message = CaptionUtility.format(this, message)
|
||||||
/* Magic replacement characters */
|
.replace('\u2010', '%').replace('\u2020', '&').replace('\u2030', '&')
|
||||||
replace('\u2010', '%').replace('\u2020', '&').replace('\u2030', '&');
|
.replace("<prefix>", TranslatableCaption.of("core.prefix").getComponent(this));
|
||||||
// Create the template list, and add the prefix as a replacement
|
|
||||||
final List<Template> templates = Arrays.asList(replacements);
|
|
||||||
templates.add(Templates.of(this, "prefix", TranslatableCaption.of("core.prefix")));
|
|
||||||
// Parse the message
|
// Parse the message
|
||||||
final Component component = MINI_MESSAGE.parse(message, templates);
|
final Component component = MiniMessage.get().parse(message, replacements);
|
||||||
if (!Objects.equal(component, this.getMeta("lastMessage"))
|
if (!Objects.equal(component, this.getMeta("lastMessage"))
|
||||||
|| System.currentTimeMillis() - this.<Long>getMeta("lastMessageTime") > 5000) {
|
|| System.currentTimeMillis() - this.<Long>getMeta("lastMessageTime") > 5000) {
|
||||||
setMeta("lastMessage", component);
|
setMeta("lastMessage", component);
|
||||||
|
@ -298,7 +298,7 @@
|
|||||||
"errors.invalid_player": "<prefix><red>Player not found: </red><gray><value></gray><red>.</red>",
|
"errors.invalid_player": "<prefix><red>Player not found: </red><gray><value></gray><red>.</red>",
|
||||||
"errors.invalid_player_offline": "<prefix><gray><player></gray><red> must be online.</red>",
|
"errors.invalid_player_offline": "<prefix><gray><player></gray><red> must be online.</red>",
|
||||||
"errors.invalid_command_flag": "<prefix><red>Invalid command flag: </red><value></gray>",
|
"errors.invalid_command_flag": "<prefix><red>Invalid command flag: </red><value></gray>",
|
||||||
"errors.error": "<prefix><red>An error occurred: </gray><value></gray></red>",
|
"errors.error": "<prefix><red>An error occurred: <gray><value></gray></red>",
|
||||||
"errors.error_create": "<prefix><red>An error occurred while creating the world: <gray><world></gray></red>",
|
"errors.error_create": "<prefix><red>An error occurred while creating the world: <gray><world></gray></red>",
|
||||||
"errors.error_console": "<prefix><red>An error occurred. See the console for more information.</red>",
|
"errors.error_console": "<prefix><red>An error occurred. See the console for more information.</red>",
|
||||||
"errors.command_went_wrong": "<prefix><red>Something went wrong when executing that command...</red>",
|
"errors.command_went_wrong": "<prefix><red>Something went wrong when executing that command...</red>",
|
||||||
|
Loading…
Reference in New Issue
Block a user