mirror of
https://github.com/YouHaveTrouble/BlockEdit.git
synced 2026-06-29 13:36:19 +00:00
locale files, working
This commit is contained in:
@@ -10,18 +10,28 @@ import java.util.Map;
|
||||
public class BELocale {
|
||||
|
||||
private static final Map<Locale, BELocale> locales = new HashMap<>();
|
||||
private static final Locale defaultLocale = Locale.ENGLISH;
|
||||
private static final Locale defaultLocale = Locale.of("en_US");
|
||||
|
||||
public final String COULD_NOT_FIND_WAND_BY_ID;
|
||||
public final String couldNotFindWandById, selectArea, copiedSelectionToClipboard, selectionReset, firstPositionSet,
|
||||
secondPositionSet, pastingClipboard, clipboardRotated, settingBlocks, replacingBlocks;
|
||||
|
||||
|
||||
protected BELocale(JsonObject json) {
|
||||
COULD_NOT_FIND_WAND_BY_ID = json.get("could_not_find_wand_by_id").getAsString();
|
||||
BlockEdit.getPlugin().getSLF4JLogger().info(json.toString());
|
||||
couldNotFindWandById = json.get("could_not_find_wand_by_id").getAsString();
|
||||
selectArea = json.get("select_area").getAsString();
|
||||
copiedSelectionToClipboard = json.get("copied_selection_to_clipboard").getAsString();
|
||||
selectionReset = json.get("selection_reset").getAsString();
|
||||
firstPositionSet = json.get("first_position_set").getAsString();
|
||||
secondPositionSet = json.get("second_position_set").getAsString();
|
||||
pastingClipboard = json.get("pasting_clipboard").getAsString();
|
||||
clipboardRotated = json.get("clipboard_rotated").getAsString();
|
||||
settingBlocks = json.get("setting_blocks").getAsString();
|
||||
replacingBlocks = json.get("replacing_blocks").getAsString();
|
||||
}
|
||||
|
||||
protected static void registerLocale(Locale locale, BELocale blockEditLocale) {
|
||||
locales.put(locale, blockEditLocale);
|
||||
System.out.println("Registered locale " + locale.getISO3Country() + " " + locale.getISO3Language());
|
||||
}
|
||||
|
||||
public static BELocale getLocale(@NotNull Locale locale) {
|
||||
|
||||
@@ -5,10 +5,14 @@ import com.google.gson.JsonObject;
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import me.youhavetrouble.blockedit.wands.SelectionWand;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.reflections.Reflections;
|
||||
import org.reflections.scanners.Scanners;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.net.URL;
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public final class BlockEdit extends JavaPlugin {
|
||||
|
||||
@@ -51,37 +55,33 @@ public final class BlockEdit extends JavaPlugin {
|
||||
}
|
||||
|
||||
private boolean initLocales() {
|
||||
List<String> localeFiles;
|
||||
try (InputStream in = BlockEdit.class.getClassLoader().getResourceAsStream("locale");
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
|
||||
localeFiles = br.lines().toList();
|
||||
} catch (IOException e) {
|
||||
plugin.getSLF4JLogger().error("Error loading locale files", e);
|
||||
return false;
|
||||
}
|
||||
Reflections reflections = new Reflections("locale", Scanners.Resources);
|
||||
Set<String> fileNames = reflections.getResources(Pattern.compile("([a-zA-Z]{1,3}_[a-zA-Z]{1,3})(\\.json)"));
|
||||
|
||||
Gson gson = new Gson();
|
||||
for (String fileName : localeFiles) {
|
||||
for (String fileName : fileNames) {
|
||||
Locale locale;
|
||||
try {
|
||||
String localeString = fileName.replace(".json", "");
|
||||
String[] split = localeString.split("_");
|
||||
if (split.length == 1) {
|
||||
locale = Locale.of(split[0]);
|
||||
} else {
|
||||
locale = Locale.of(split[0], split[1]);
|
||||
}
|
||||
String localeString = fileName
|
||||
.replace(".json", "")
|
||||
.replace("locale/", "");
|
||||
locale = Locale.of(localeString);
|
||||
} catch (IllegalArgumentException e) {
|
||||
plugin.getSLF4JLogger().error("Invalid locale file name: {}", fileName);
|
||||
continue;
|
||||
}
|
||||
try (InputStream fileStream = BlockEdit.class.getClassLoader().getResourceAsStream("locale/" + fileName);
|
||||
JsonReader reader = new JsonReader(new InputStreamReader(fileStream))) {
|
||||
String resourcePath = "/" + fileName;
|
||||
try (InputStream fileStream = BlockEdit.class.getResourceAsStream(resourcePath)) {
|
||||
if (fileStream == null) {
|
||||
plugin.getSLF4JLogger().error("Locale file not found: {}", resourcePath);
|
||||
continue;
|
||||
}
|
||||
JsonReader reader = new JsonReader(new InputStreamReader(fileStream));
|
||||
JsonObject json = gson.fromJson(reader, JsonObject.class);
|
||||
BELocale beLocale = new BELocale(json);
|
||||
BELocale.registerLocale(locale, beLocale);
|
||||
} catch (IOException e) {
|
||||
plugin.getSLF4JLogger().error("Error reading locale file: {}", fileName, e);
|
||||
plugin.getSLF4JLogger().error("Error reading locale file: {}", resourcePath, e);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -17,6 +17,7 @@ import me.youhavetrouble.blockedit.operations.SetOperation;
|
||||
import me.youhavetrouble.blockedit.util.Selection;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -80,7 +81,6 @@ public class BlockEditCommands {
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private static LiteralCommandNode<CommandSourceStack> wandCommand() {
|
||||
@@ -106,7 +106,8 @@ public class BlockEditCommands {
|
||||
String wandId = ctx.getArgument("wand_id", String.class);
|
||||
ItemStack wand = BlockEditAPI.getWandsHandler().getWand(wandId);
|
||||
if (wand == null) {
|
||||
ctx.getSource().getSender().sendMessage(Component.text("Could not find wand with id %s".formatted(wandId), NamedTextColor.RED));
|
||||
BlockEdit.getPlugin().getSLF4JLogger().info(String.valueOf(player.locale()));
|
||||
ctx.getSource().getSender().sendMessage(Component.text(BELocale.getLocale(player.locale()).couldNotFindWandById.formatted(wandId), NamedTextColor.RED));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
}
|
||||
player.getInventory().addItem(wand);
|
||||
@@ -133,9 +134,9 @@ public class BlockEditCommands {
|
||||
BEPlayer bePlayer = BEPlayer.getByPlayer(player);
|
||||
try {
|
||||
bePlayer.setClipboardFromSelection();
|
||||
player.sendMessage(Component.text("Copied selection to clipboard"));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).copiedSelectionToClipboard, NamedTextColor.GRAY));
|
||||
} catch (IllegalStateException e) {
|
||||
player.sendMessage(Component.text("You need to select an area first"));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).selectArea, NamedTextColor.RED));
|
||||
}
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
@@ -151,7 +152,7 @@ public class BlockEditCommands {
|
||||
.executes(ctx -> {
|
||||
Player player = (Player) ctx.getSource().getSender();
|
||||
BEPlayer.getByPlayer(player).resetSelection();
|
||||
player.sendMessage(Component.text("You have reset your selection"));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).selectionReset, NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
.build();
|
||||
@@ -165,8 +166,10 @@ public class BlockEditCommands {
|
||||
})
|
||||
.executes(ctx -> {
|
||||
Player player = (Player) ctx.getSource().getSender();
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint1(player.getLocation().toBlockLocation());
|
||||
player.sendMessage(Component.text("First point set at your location"));
|
||||
Location location = player.getLocation().toBlockLocation();
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint1(location);
|
||||
String locationString = "X: " + location.blockX() + " Y: " + location.blockY() + " Z: " + location.blockZ();
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).firstPositionSet.formatted(locationString), NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
.build();
|
||||
@@ -180,8 +183,10 @@ public class BlockEditCommands {
|
||||
})
|
||||
.executes(ctx -> {
|
||||
Player player = (Player) ctx.getSource().getSender();
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint2(player.getLocation().toBlockLocation());
|
||||
player.sendMessage(Component.text("Second point set at your location"));
|
||||
Location location = player.getLocation().toBlockLocation();
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint2(location);
|
||||
String locationString = "X: " + location.blockX() + " Y: " + location.blockY() + " Z: " + location.blockZ();
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).secondPositionSet.formatted(locationString), NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
.build();
|
||||
@@ -207,7 +212,7 @@ public class BlockEditCommands {
|
||||
|
||||
Selection selection = Selection.fromClipboard(absoluteBlocks.keySet(), player.getWorld());
|
||||
BlockEditAPI.runOperation(selection, 1, new PasteOperation(absoluteBlocks));
|
||||
player.sendMessage(Component.text("Pasting clipboard..."));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).pastingClipboard, NamedTextColor.GRAY));
|
||||
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
@@ -227,7 +232,7 @@ public class BlockEditCommands {
|
||||
double angle = ctx.getArgument("angle", Double.class);
|
||||
BEPlayer bePlayer = BEPlayer.getByPlayer(player);
|
||||
bePlayer.getClipboard().rotate(angle);
|
||||
player.sendMessage(Component.text("Rotated clipboard by " + angle + " degrees"));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).clipboardRotated.formatted(angle), NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
)
|
||||
@@ -248,7 +253,7 @@ public class BlockEditCommands {
|
||||
BlockState blockState = ctx.getArgument("block", BlockState.class);
|
||||
Selection selection = bePlayer.getSelection();
|
||||
BlockEditAPI.runOperation(selection, 1, new SetOperation(blockState));
|
||||
player.sendMessage(Component.text("Setting blocks..."));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).settingBlocks, NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
)
|
||||
@@ -261,7 +266,7 @@ public class BlockEditCommands {
|
||||
int chunksPerTick = ctx.getArgument("chunks_per_tick", Integer.class);
|
||||
Selection selection = bePlayer.getSelection();
|
||||
BlockEditAPI.runOperation(selection, chunksPerTick, new SetOperation(blockState));
|
||||
player.sendMessage(Component.text("Setting blocks..."));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).settingBlocks, NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
}))
|
||||
.build();
|
||||
@@ -285,7 +290,7 @@ public class BlockEditCommands {
|
||||
BlockState replaceWith = ctx.getArgument("replace_with", BlockState.class);
|
||||
Selection selection = bePlayer.getSelection();
|
||||
BlockEditAPI.runOperation(selection, 1, new ReplaceOperation(toReplace, replaceWith));
|
||||
player.sendMessage(Component.text("Replacing blocks..."));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).replacingBlocks, NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
)
|
||||
@@ -299,7 +304,7 @@ public class BlockEditCommands {
|
||||
int chunksPerTick = ctx.getArgument("chunks_per_tick", Integer.class);
|
||||
Selection selection = bePlayer.getSelection();
|
||||
BlockEditAPI.runOperation(selection, chunksPerTick, new ReplaceOperation(toReplace, replaceWith));
|
||||
player.sendMessage(Component.text("Replacing blocks..."));
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).replacingBlocks, NamedTextColor.GRAY));
|
||||
return Command.SINGLE_SUCCESS;
|
||||
})
|
||||
)
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
package me.youhavetrouble.blockedit.wands;
|
||||
|
||||
import me.youhavetrouble.blockedit.BELocale;
|
||||
import me.youhavetrouble.blockedit.BEPlayer;
|
||||
import me.youhavetrouble.blockedit.api.BlockEditAPI;
|
||||
import me.youhavetrouble.blockedit.api.BlockEditWand;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@@ -13,6 +16,7 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public class SelectionWand implements Listener, BlockEditWand {
|
||||
|
||||
@Override
|
||||
@@ -47,14 +51,18 @@ public class SelectionWand implements Listener, BlockEditWand {
|
||||
Action action = event.getAction();
|
||||
if (action.equals(Action.LEFT_CLICK_BLOCK)) {
|
||||
event.setCancelled(true);
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint1(block.getLocation());
|
||||
player.sendMessage(Component.text("First point set"));
|
||||
Location location = block.getLocation();
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint1(location);
|
||||
String locationString = "X: " + location.blockX() + " Y: " + location.blockY() + " Z: " + location.blockZ();
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).firstPositionSet.formatted(locationString), NamedTextColor.GRAY));
|
||||
return;
|
||||
}
|
||||
if (action.equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||
event.setCancelled(true);
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint2(block.getLocation());
|
||||
player.sendMessage(Component.text("Second point set"));
|
||||
Location location = block.getLocation();
|
||||
BEPlayer.getByPlayer(player).setSelectionPoint2(location);
|
||||
String locationString = "X: " + location.blockX() + " Y: " + location.blockY() + " Z: " + location.blockZ();
|
||||
player.sendMessage(Component.text(BELocale.getLocale(player.locale()).secondPositionSet.formatted(locationString), NamedTextColor.GRAY));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"could_not_find_wand_by_id": "Could not find wand with id %s",
|
||||
"select_area": "You need to select an area first",
|
||||
"copied_selection_to_clipboard": "Copied selection to clipboard",
|
||||
"selection_reset": "You have reset your selection",
|
||||
"first_position_set": "First position set to %s",
|
||||
"second_position_set": "Second position set to %s",
|
||||
"pasting_clipboard": "Pasting clipboard...",
|
||||
"clipboard_rotated": "Clipboard rotated %s degrees",
|
||||
"setting_blocks": "Setting blocks...",
|
||||
"replacing_blocks": "Replacing blocks..."
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"could_not_find_wand_by_id": "Could not find wand with id %s"
|
||||
}
|
||||
Reference in New Issue
Block a user