Compare commits

...

6 commits

16 changed files with 1159 additions and 6511 deletions

View file

@ -50,7 +50,6 @@ dependencies {
implementation 'org.yaml:snakeyaml:2.0'
implementation 'org.luaj:luaj-jse:3.0.1'
implementation 'net.dv8tion:JDA:5.0.0-beta.12'
implementation 'joda-time:joda-time:2.12.4'
implementation 'net.kyori:adventure-text-serializer-legacy:4.15.0'
implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'
implementation 'io.socket:socket.io-client:2.1.0'

View file

@ -2,6 +2,7 @@ package me.chayapak1.chomens_bot;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import me.chayapak1.chomens_bot.plugins.ConsolePlugin;
import me.chayapak1.chomens_bot.util.ComponentUtilities;
import me.chayapak1.chomens_bot.util.HttpUtilities;
import me.chayapak1.chomens_bot.util.LoggerUtilities;
import me.chayapak1.chomens_bot.util.PersistentDataUtilities;
@ -9,6 +10,7 @@ import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.requests.GatewayIntent;
import net.kyori.adventure.text.Component;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
@ -82,6 +84,9 @@ public class Main {
config = yaml.load(reader);
PersistentDataUtilities.init();
ComponentUtilities.stringify(Component.empty()); // best way to initialize the class 2024
executor.scheduleAtFixedRate(() -> {
try {
checkInternet();

View file

@ -16,14 +16,15 @@ import me.chayapak1.chomens_bot.util.PersistentDataUtilities;
import me.chayapak1.chomens_bot.util.UUIDUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.TranslatableComponent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@ -174,8 +175,12 @@ public class MailCommand extends Command {
if (!mail.sentTo.equals(sender.profile.getName())) continue;
final DateTimeFormatter formatter = DateTimeFormat.forPattern("MMMM d, YYYY, hh:mm:ss a Z");
final String formattedTime = formatter.print(mail.timeSent);
final Instant instant = Instant.ofEpochMilli(mail.timeSent);
final ZoneId zoneId = ZoneId.systemDefault();
final OffsetDateTime localDateTime = OffsetDateTime.ofInstant(instant, zoneId);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy, hh:mm:ss a Z");
final String formattedTime = localDateTime.format(formatter);
mailsComponent.add(
Component.translatable(

View file

@ -12,11 +12,9 @@ import me.chayapak1.chomens_bot.util.ColorUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.format.NamedTextColor;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@ -70,10 +68,12 @@ public class SeenCommand extends Command {
if (time == null) throw new CommandException(Component.text("This player does not have the `lastSeen.time` entry in the database for some reason."));
final DateTime dateTime = new DateTime(time.getAsLong(), DateTimeZone.UTC);
final Instant instant = Instant.ofEpochMilli(time.getAsLong());
final ZoneId zoneId = ZoneId.of("UTC"); // should i be doing this?
final OffsetDateTime localDateTime = OffsetDateTime.ofInstant(instant, zoneId);
final DateTimeFormatter formatter = DateTimeFormat.forPattern("EEEE, MMMM d, YYYY, hh:mm:ss a z");
final String formattedTime = formatter.print(dateTime);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy, hh:mm:ss a Z");
final String formattedTime = localDateTime.format(formatter);
final String server = lastSeen.get("server").getAsString();

View file

@ -8,10 +8,11 @@ import me.chayapak1.chomens_bot.command.TrustLevel;
import me.chayapak1.chomens_bot.util.ColorUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.time.DateTimeException;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class TimeCommand extends Command {
public TimeCommand () {
@ -27,26 +28,24 @@ public class TimeCommand extends Command {
@Override
public Component execute(CommandContext context) throws CommandException {
final Bot bot = context.bot;
final String timezone = context.getString(true, true);
DateTimeZone zone;
try {
zone = DateTimeZone.forID(timezone);
} catch (IllegalArgumentException ignored) {
final Bot bot = context.bot;
final String timezone = context.getString(true, true);
final ZoneId zoneId = ZoneId.of(timezone);
final ZonedDateTime zonedDateTime = ZonedDateTime.now(zoneId);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy, hh:mm:ss a");
final String formattedTime = zonedDateTime.format(formatter);
return Component.translatable(
"The current time for %s is: %s",
Component.text(timezone).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)),
Component.text(formattedTime).color(NamedTextColor.GREEN)
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
} catch (DateTimeException e) {
throw new CommandException(Component.text("Invalid timezone (case-sensitive)"));
}
final DateTime dateTime = new DateTime(zone);
final DateTimeFormatter formatter = DateTimeFormat.forPattern("EEEE, MMMM d, YYYY, hh:mm:ss a");
final String formattedTime = formatter.print(dateTime);
return Component.translatable(
"The current time for %s is: %s",
Component.text(timezone).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)),
Component.text(formattedTime).color(NamedTextColor.GREEN)
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
}
}

View file

@ -11,14 +11,13 @@ import me.chayapak1.chomens_bot.util.ColorUtilities;
import me.chayapak1.chomens_bot.util.HttpUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class WeatherCommand extends Command {
public WeatherCommand () {
@ -53,13 +52,11 @@ public class WeatherCommand extends Command {
final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class);
final DateTimeFormatter formatter = DateTimeFormat.forPattern("hh:mm:ss a");
final ZoneId zoneId = ZoneId.of(jsonObject.get("location").getAsJsonObject().get("tz_id").getAsString());
final ZonedDateTime zonedDateTime = ZonedDateTime.now(zoneId);
final DateTimeZone zone = DateTimeZone.forID(jsonObject.get("location").getAsJsonObject().get("tz_id").getAsString());
final DateTime dateTime = new DateTime(zone);
final String time = formatter.print(dateTime);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss a");
final String time = zonedDateTime.format(formatter);
return Component.translatable(
"Weather forecast for %s, %s:\n%s (%s), feels like %s (%s)\nTime: %s",

View file

@ -58,11 +58,9 @@ public class ChatCommandHandlerPlugin extends ChatPlugin.Listener {
final PlayerCommandContext context = new PlayerCommandContext(bot, displayName, prefix, "@a", message.sender);
bot.executorService.submit(() -> {
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
if (output != null) context.sendOutput(output);
});
if (output != null) context.sendOutput(output);
return true;
}
@ -94,10 +92,8 @@ public class ChatCommandHandlerPlugin extends ChatPlugin.Listener {
final PlayerCommandContext context = new PlayerCommandContext(bot, displayName, prefix, selector, sender);
bot.executorService.submit(() -> {
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
if (output != null) context.sendOutput(output);
});
if (output != null) context.sendOutput(output);
}
}

View file

@ -96,11 +96,13 @@ public class FilterPlugin extends PlayersPlugin.Listener {
@Override
public void playerJoined (PlayerEntry target) {
final FilteredPlayer player = getPlayer(target.profile.getName());
bot.executorService.submit(() -> {
final FilteredPlayer player = getPlayer(target.profile.getName());
if (player == null) return;
if (player == null) return;
doAll(target);
doAll(target);
});
}
@Override

View file

@ -5,10 +5,9 @@ import me.chayapak1.chomens_bot.data.PlayerEntry;
import me.chayapak1.chomens_bot.util.ColorUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.UUID;
@ -64,10 +63,10 @@ public class TrustedPlugin extends PlayersPlugin.Listener {
Component.text(target.profile.getName()).color(ColorUtilities.getColorByString(bot.config.colorPalette.username))
).color(NamedTextColor.GREEN);
} else {
final DateTime now = DateTime.now();
final LocalDateTime now = LocalDateTime.now();
final DateTimeFormatter formatter = DateTimeFormat.forPattern("hh:mm:ss a");
final String formattedTime = formatter.print(now);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss a");
final String formattedTime = now.format(formatter);
component = Component.translatable(
"""

View file

@ -278,7 +278,7 @@ public class NBSConverter implements Converter {
private static final Map<String, String> subtitles = new HashMap<>();
static {
for (Map.Entry<String, String> entry : ComponentUtilities.englishLanguage.entrySet()) {
for (Map.Entry<String, String> entry : ComponentUtilities.language.entrySet()) {
if (!entry.getKey().startsWith("subtitles.")) continue;
subtitles.put(entry.getKey(), entry.getValue());

View file

@ -26,7 +26,6 @@ public class ComponentUtilities {
// component parsing
public static final Map<String, String> language = loadJsonStringMap("language.json");
public static final Map<String, String> englishLanguage = loadJsonStringMap("englishLanguage.json");
private static final Map<String, String> voiceChatLanguage = loadJsonStringMap("voiceChatLanguage.json");
private static final Map<String, String> keybinds = loadJsonStringMap("keybinds.json");
@ -64,9 +63,6 @@ public class ComponentUtilities {
String lastColor
) {}
private ComponentUtilities () {
}
private static Map<String, String> loadJsonStringMap (String name) {
Map<String, String> map = new HashMap<>();
@ -321,7 +317,7 @@ public class ComponentUtilities {
public static PartiallyStringified stringifyPartially (KeybindComponent message, boolean motd, boolean ansi, String lastColor, boolean noHex) {
String keybind = message.keybind();
Component component = keybinds.containsKey(keybind) ? Component.translatable(keybind) : Component.text(keybind); // TODO: Fix some keys like `key.keyboard.a`
Component component = keybinds.containsKey(keybind) ? Component.translatable(keybinds.get(keybind)) : Component.text(keybind);
return stringifyPartially(component, motd, ansi, lastColor, noHex);
}
}

View file

@ -4,6 +4,7 @@ import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import me.chayapak1.chomens_bot.Main;
import java.io.BufferedReader;
import java.io.BufferedWriter;
@ -21,11 +22,7 @@ public class PersistentDataUtilities {
private static boolean stopping = false;
static {
init();
}
private static void init () {
public static void init () {
try {
if (!Files.exists(path)) Files.createFile(path);
@ -47,12 +44,16 @@ public class PersistentDataUtilities {
private static void write (String string) {
if (stopping) return; // is this necessary?
try {
writer = Files.newBufferedWriter(path, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
Main.executorService.submit(() -> {
try {
writer.close();
writer.write(string);
writer.flush();
} catch (IOException ignored) {}
writer = Files.newBufferedWriter(path, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
writer.write(string);
writer.flush();
} catch (IOException ignored) {}
});
}
public static void stop () {

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -33,6 +33,7 @@
"block.amethyst_block.fall",
"block.amethyst_block.hit",
"block.amethyst_block.place",
"block.amethyst_block.resonate",
"block.amethyst_block.step",
"block.amethyst_cluster.break",
"block.amethyst_cluster.fall",
@ -52,6 +53,19 @@
"block.anvil.place",
"block.anvil.step",
"block.anvil.use",
"entity.armadillo.eat",
"entity.armadillo.hurt",
"entity.armadillo.hurt_reduced",
"entity.armadillo.ambient",
"entity.armadillo.step",
"entity.armadillo.death",
"entity.armadillo.roll",
"entity.armadillo.land",
"entity.armadillo.scute_drop",
"entity.armadillo.unroll_finish",
"entity.armadillo.peek",
"entity.armadillo.unroll_start",
"entity.armadillo.brush",
"item.armor.equip_chain",
"item.armor.equip_diamond",
"item.armor.equip_elytra",
@ -61,6 +75,8 @@
"item.armor.equip_leather",
"item.armor.equip_netherite",
"item.armor.equip_turtle",
"item.armor.equip_wolf",
"item.armor.unequip_wolf",
"entity.armor_stand.break",
"entity.armor_stand.fall",
"entity.armor_stand.hit",
@ -152,6 +168,11 @@
"entity.blaze.shoot",
"entity.boat.paddle_land",
"entity.boat.paddle_water",
"entity.bogged.ambient",
"entity.bogged.death",
"entity.bogged.hurt",
"entity.bogged.shear",
"entity.bogged.step",
"block.bone_block.break",
"block.bone_block.fall",
"block.bone_block.hit",
@ -164,9 +185,25 @@
"item.bottle.empty",
"item.bottle.fill",
"item.bottle.fill_dragonbreath",
"entity.breeze.charge",
"entity.breeze.deflect",
"entity.breeze.inhale",
"entity.breeze.idle_ground",
"entity.breeze.idle_air",
"entity.breeze.shoot",
"entity.breeze.jump",
"entity.breeze.land",
"entity.breeze.slide",
"entity.breeze.death",
"entity.breeze.hurt",
"entity.breeze.whirl",
"entity.breeze.wind_burst",
"block.brewing_stand.brew",
"item.brush.brushing",
"item.brush.brush_sand_completed",
"item.brush.brushing.generic",
"item.brush.brushing.sand",
"item.brush.brushing.gravel",
"item.brush.brushing.sand.complete",
"item.brush.brushing.gravel.complete",
"block.bubble_column.bubble_pop",
"block.bubble_column.upwards_ambient",
"block.bubble_column.upwards_inside",
@ -282,6 +319,11 @@
"block.chorus_flower.death",
"block.chorus_flower.grow",
"item.chorus_fruit.teleport",
"block.cobweb.break",
"block.cobweb.step",
"block.cobweb.place",
"block.cobweb.hit",
"block.cobweb.fall",
"entity.cod.ambient",
"entity.cod.death",
"entity.cod.flop",
@ -296,11 +338,27 @@
"block.conduit.ambient.short",
"block.conduit.attack.target",
"block.conduit.deactivate",
"block.copper_bulb.break",
"block.copper_bulb.step",
"block.copper_bulb.place",
"block.copper_bulb.hit",
"block.copper_bulb.fall",
"block.copper_bulb.turn_on",
"block.copper_bulb.turn_off",
"block.copper.break",
"block.copper.step",
"block.copper.place",
"block.copper.hit",
"block.copper.fall",
"block.copper_door.close",
"block.copper_door.open",
"block.copper_grate.break",
"block.copper_grate.step",
"block.copper_grate.place",
"block.copper_grate.hit",
"block.copper_grate.fall",
"block.copper_trapdoor.close",
"block.copper_trapdoor.open",
"block.coral_block.break",
"block.coral_block.fall",
"block.coral_block.hit",
@ -311,6 +369,8 @@
"entity.cow.hurt",
"entity.cow.milk",
"entity.cow.step",
"block.crafter.craft",
"block.crafter.fail",
"entity.creeper.death",
"entity.creeper.hurt",
"entity.creeper.primed",
@ -327,6 +387,8 @@
"block.decorated_pot.break",
"block.decorated_pot.fall",
"block.decorated_pot.hit",
"block.decorated_pot.insert",
"block.decorated_pot.insert_fail",
"block.decorated_pot.step",
"block.decorated_pot.place",
"block.decorated_pot.shatter",
@ -364,6 +426,7 @@
"entity.donkey.death",
"entity.donkey.eat",
"entity.donkey.hurt",
"entity.donkey.jump",
"block.dripstone_block.break",
"block.dripstone_block.step",
"block.dripstone_block.place",
@ -477,6 +540,11 @@
"block.suspicious_sand.place",
"block.suspicious_sand.hit",
"block.suspicious_sand.fall",
"block.suspicious_gravel.break",
"block.suspicious_gravel.step",
"block.suspicious_gravel.place",
"block.suspicious_gravel.hit",
"block.suspicious_gravel.fall",
"block.froglight.break",
"block.froglight.fall",
"block.froglight.hit",
@ -589,6 +657,11 @@
"block.hanging_sign.fall",
"block.hanging_sign.hit",
"block.hanging_sign.place",
"block.heavy_core.break",
"block.heavy_core.fall",
"block.heavy_core.hit",
"block.heavy_core.place",
"block.heavy_core.step",
"block.nether_wood_hanging_sign.step",
"block.nether_wood_hanging_sign.break",
"block.nether_wood_hanging_sign.fall",
@ -599,6 +672,22 @@
"block.bamboo_wood_hanging_sign.fall",
"block.bamboo_wood_hanging_sign.hit",
"block.bamboo_wood_hanging_sign.place",
"block.trial_spawner.break",
"block.trial_spawner.step",
"block.trial_spawner.place",
"block.trial_spawner.hit",
"block.trial_spawner.fall",
"block.trial_spawner.spawn_mob",
"block.trial_spawner.about_to_spawn_item",
"block.trial_spawner.spawn_item",
"block.trial_spawner.spawn_item_begin",
"block.trial_spawner.detect_player",
"block.trial_spawner.ominous_activate",
"block.trial_spawner.ambient",
"block.trial_spawner.ambient_ominous",
"block.trial_spawner.open_shutter",
"block.trial_spawner.close_shutter",
"block.trial_spawner.eject_item",
"item.hoe.till",
"entity.hoglin.ambient",
"entity.hoglin.angry",
@ -710,6 +799,9 @@
"block.lodestone.hit",
"block.lodestone.fall",
"item.lodestone_compass.lock",
"item.mace.smash_air",
"item.mace.smash_ground",
"item.mace.smash_ground_heavy",
"entity.magma_cube.death",
"entity.magma_cube.hurt",
"entity.magma_cube.hurt_small",
@ -774,6 +866,7 @@
"entity.mule.death",
"entity.mule.eat",
"entity.mule.hurt",
"entity.mule.jump",
"music.creative",
"music.credits",
"music_disc.5",
@ -791,6 +884,10 @@
"music_disc.wait",
"music_disc.ward",
"music_disc.otherside",
"music_disc.relic",
"music_disc.creator",
"music_disc.creator_music_box",
"music_disc.precipice",
"music.dragon",
"music.end",
"music.game",
@ -803,7 +900,7 @@
"music.overworld.jagged_peaks",
"music.overworld.lush_caves",
"music.overworld.swamp",
"music.overworld.jungle_and_forest",
"music.overworld.forest",
"music.overworld.old_growth_taiga",
"music.overworld.meadow",
"music.overworld.cherry_grove",
@ -813,6 +910,12 @@
"music.nether.soul_sand_valley",
"music.overworld.stony_peaks",
"music.nether.warped_forest",
"music.overworld.flower_forest",
"music.overworld.desert",
"music.overworld.badlands",
"music.overworld.jungle",
"music.overworld.sparse_jungle",
"music.overworld.bamboo_jungle",
"music.under_water",
"block.nether_bricks.break",
"block.nether_bricks.step",
@ -836,7 +939,7 @@
"block.nether_wood_pressure_plate.click_on",
"block.nether_wood_fence_gate.close",
"block.nether_wood_fence_gate.open",
"minecraft:intentionally_empty",
"intentionally_empty",
"block.packed_mud.break",
"block.packed_mud.fall",
"block.packed_mud.hit",
@ -907,6 +1010,7 @@
"entity.ocelot.hurt",
"entity.ocelot.ambient",
"entity.ocelot.death",
"item.ominous_bottle.dispose",
"entity.painting.break",
"entity.painting.place",
"entity.panda.pre_sneeze",
@ -926,6 +1030,8 @@
"entity.parrot.fly",
"entity.parrot.hurt",
"entity.parrot.imitate.blaze",
"entity.parrot.imitate.bogged",
"entity.parrot.imitate.breeze",
"entity.parrot.imitate.creeper",
"entity.parrot.imitate.drowned",
"entity.parrot.imitate.elder_guardian",
@ -1012,6 +1118,7 @@
"entity.player.splash",
"entity.player.splash.high_speed",
"entity.player.swim",
"entity.player.teleport",
"entity.polar_bear.ambient",
"entity.polar_bear.ambient_baby",
"entity.polar_bear.death",
@ -1221,6 +1328,9 @@
"entity.sniffer.digging",
"entity.sniffer.digging_stop",
"entity.sniffer.happy",
"block.sniffer_egg.plop",
"block.sniffer_egg.crack",
"block.sniffer_egg.hatch",
"entity.snowball.throw",
"block.snow.break",
"block.snow.fall",
@ -1238,6 +1348,12 @@
"entity.spider.step",
"entity.splash_potion.break",
"entity.splash_potion.throw",
"block.sponge.break",
"block.sponge.fall",
"block.sponge.hit",
"block.sponge.place",
"block.sponge.step",
"block.sponge.absorb",
"item.spyglass.use",
"item.spyglass.stop_using",
"entity.squid.ambient",
@ -1288,6 +1404,16 @@
"block.tuff.place",
"block.tuff.hit",
"block.tuff.fall",
"block.tuff_bricks.break",
"block.tuff_bricks.fall",
"block.tuff_bricks.hit",
"block.tuff_bricks.place",
"block.tuff_bricks.step",
"block.polished_tuff.break",
"block.polished_tuff.fall",
"block.polished_tuff.hit",
"block.polished_tuff.place",
"block.polished_tuff.step",
"entity.turtle.ambient_land",
"entity.turtle.death",
"entity.turtle.death_baby",
@ -1309,6 +1435,20 @@
"ui.toast.challenge_complete",
"ui.toast.in",
"ui.toast.out",
"block.vault.activate",
"block.vault.ambient",
"block.vault.break",
"block.vault.close_shutter",
"block.vault.deactivate",
"block.vault.eject_item",
"block.vault.reject_rewarded_player",
"block.vault.fall",
"block.vault.hit",
"block.vault.insert_item",
"block.vault.insert_item_fail",
"block.vault.open_shutter",
"block.vault.place",
"block.vault.step",
"entity.vex.ambient",
"entity.vex.charge",
"entity.vex.death",
@ -1373,6 +1513,8 @@
"entity.warden.sonic_charge",
"entity.warden.step",
"entity.warden.tendril_clicks",
"block.hanging_sign.waxed_interact_fail",
"block.sign.waxed_interact_fail",
"block.water.ambient",
"weather.rain",
"weather.rain.above",
@ -1381,6 +1523,14 @@
"block.wet_grass.hit",
"block.wet_grass.place",
"block.wet_grass.step",
"block.wet_sponge.break",
"block.wet_sponge.dries",
"block.wet_sponge.fall",
"block.wet_sponge.hit",
"block.wet_sponge.place",
"block.wet_sponge.step",
"entity.wind_charge.wind_burst",
"entity.wind_charge.throw",
"entity.witch.ambient",
"entity.witch.celebrate",
"entity.witch.death",
@ -1397,6 +1547,10 @@
"entity.wither_skeleton.hurt",
"entity.wither_skeleton.step",
"entity.wither.spawn",
"item.wolf_armor.break",
"item.wolf_armor.crack",
"item.wolf_armor.damage",
"item.wolf_armor.repair",
"entity.wolf.ambient",
"entity.wolf.death",
"entity.wolf.growl",
@ -1452,5 +1606,8 @@
"entity.zombie_villager.cure",
"entity.zombie_villager.death",
"entity.zombie_villager.hurt",
"entity.zombie_villager.step"
"entity.zombie_villager.step",
"event.mob_effect.bad_omen",
"event.mob_effect.trial_omen",
"event.mob_effect.raid_omen"
]

View file

@ -1,13 +1,13 @@
{
"key.categories.voicechat": "Voice Chat",
"key.push_to_talk": "Push To Talk",
"key.push_to_talk": "Push to Talk",
"key.whisper": "Whisper",
"key.mute_microphone": "Mute Microphone",
"key.disable_voice_chat": "Disable Voice Chat",
"key.hide_icons": "Hide Voice Chat Icons",
"key.voice_chat_settings": "Voice Chat Settings",
"key.voice_chat": "Voice Chat GUI",
"key.voice_chat_group": "Voice Chat Group",
"key.voice_chat": "Voice Chat Menu",
"key.voice_chat_group": "Group Management",
"key.voice_chat_toggle_recording": "Toggle Recording",
"key.voice_chat_adjust_volumes": "Adjust Volumes",
"gui.voicechat.voice_chat.title": "Voice Chat",
@ -15,151 +15,198 @@
"gui.voicechat.adjust_volume.title": "Adjust Volumes",
"gui.voicechat.select_microphone.title": "Select Microphone",
"gui.voicechat.select_speaker.title": "Select Speaker",
"gui.voicechat.group.title": "Group Chat",
"gui.voicechat.group.title": "Group Management",
"gui.voicechat.join_create_group.title": "Join or Create Group",
"gui.voicechat.create_group.title": "Create a Group",
"gui.voicechat.create_group.title": "Create Group",
"gui.voicechat.enter_password.title": "Enter Group Password",
"message.voicechat.settings": "Settings",
"message.voicechat.group": "Group",
"message.voicechat.voice_chat_volume": "Voice chat volume: %s",
"message.voicechat.microphone_amplification": "Microphone amplification: %s",
"message.voicechat.mic_test_on": "Disable microphone testing",
"message.voicechat.mic_test_off": "Enable microphone testing",
"message.voicechat.mic_test_unavailable": "Microphone testing unavailable",
"message.voicechat.voice_chat_volume": "Voice Chat Volume: %s",
"message.voicechat.microphone_amplification": "Microphone Amplification: %s",
"message.voicechat.mic_test_unavailable": "Microphone testing unavailable!",
"message.voicechat.mic_test.disabled": "Press to enable microphone testing.",
"message.voicechat.mic_test.enabled": "Press to disable microphone testing.",
"message.voicechat.voice_chat_unavailable": "Voice chat unavailable",
"message.voicechat.voice_chat_not_connected": "Voice chat not connected",
"message.voicechat.activation_type": "Activation type: %s",
"message.voicechat.activation_type.ptt": "Push to talk",
"message.voicechat.activation_type": "Activation Method: %s",
"message.voicechat.activation_type.ptt": "Push to Talk",
"message.voicechat.activation_type.voice": "Voice",
"message.voicechat.voice_activation": "Voice activation threshold: %s dB",
"message.voicechat.voice_activation": "Voice Activation Threshold: %s dB",
"message.voicechat.voice_activation.disabled": "0 dB deactivates the microphone!",
"message.voicechat.adjust_volumes": "Adjust volumes",
"message.voicechat.adjust_volumes": "Adjust Volumes",
"message.voicechat.volume_amplification": "Amplification: %s",
"message.voicechat.muted": "Muted",
"message.voicechat.adjust_volume_player": "Adjust volume of %s",
"message.voicechat.no_microphone": "No microphone available",
"message.voicechat.no_speaker": "No speaker available",
"message.voicechat.select": "Select",
"message.voicechat.select_microphone": "Select microphone",
"message.voicechat.select_speaker": "Select speaker",
"message.voicechat.no_microphone": "No microphones available",
"message.voicechat.no_speaker": "No speakers available",
"message.voicechat.select_microphone": "Select Microphone",
"message.voicechat.select_speaker": "Select Speaker",
"message.voicechat.back": "Back",
"message.voicechat.client_not_connected": "Client not connected",
"message.voicechat.failed_to_send_ping": "Failed to send ping: %s",
"message.voicechat.sending_ping": "Sending ping...",
"message.voicechat.ping_sent_waiting": "Ping sent. Waiting for response...",
"message.voicechat.ping_received": "Got a response in %sms",
"message.voicechat.ping_received_attempt": "Got a response after %s attempts in %sms",
"message.voicechat.ping_received": "Got a response in %s ms",
"message.voicechat.ping_received_attempt": "Got a response in %s ms after %s attempts",
"message.voicechat.ping_retry": "No response. Retrying...",
"message.voicechat.ping_timed_out": "Request timed out after %s attempts",
"message.voicechat.icons_hidden": "Voice chat icons hidden",
"message.voicechat.icons_visible": "Voice chat icons visible",
"message.voicechat.incompatible_version": "Your voice chat version is not compatible with the servers version.\nPlease install version %s of %s.",
"message.voicechat.incompatible": "Your voice chat version is not compatible with the servers version.",
"message.voicechat.group_members": "Group members",
"message.voicechat.no_group_members": "This group is empty",
"message.voicechat.incompatible_version": "Your voice chat client version is not compatible with the server-side version.\nPlease install version %s of %s.",
"message.voicechat.incompatible": "Your voice chat client version is not compatible with the server-side version.",
"message.voicechat.group_members": "Group members:",
"message.voicechat.no_group_members": "Empty group",
"message.voicechat.join_create_group": "Join or Create Group",
"message.voicechat.group_name": "Group name",
"message.voicechat.leave_group": "Leave group",
"message.voicechat.group_name": "Group Name",
"message.voicechat.leave_group": "Press to leave the group.",
"message.voicechat.not_in_group": "You are not in a group",
"message.voicechat.invite": "%s invited you to the group %s. %s",
"message.voicechat.accept_invite": "ACCEPT",
"message.voicechat.accept_invite.hover": "Click to accept invitation",
"message.voicechat.join_successful": "Successfully joined %s",
"message.voicechat.accept_invite.hover": "Click to accept the invitation",
"message.voicechat.join_successful": "Successfully joined the group %s",
"message.voicechat.leave_successful": "Successfully left the group",
"message.voicechat.groups_disabled": "Groups are disabled on this server",
"message.voicechat.recording_disabled": "Recording is disabled on this server",
"message.voicechat.invite_successful": "Successfully invited %s",
"message.voicechat.processing_recording_session": "Processing recording session...",
"message.voicechat.processing_progress": "Processing %s%%",
"message.voicechat.save_session": "Saved session to '%s'",
"message.voicechat.save_session": "Saved session to %s",
"message.voicechat.save_session_failed": "Failed to save recording session: %s",
"message.voicechat.recording_started": "Started Recording",
"message.voicechat.recording_stopped": "Stopped Recording",
"message.voicechat.open_folder": "Open Folder",
"message.voicechat.storage_size": "Expected Storage Size %s",
"message.voicechat.saved_debug_report": "Saved voice chat debug report to %s",
"message.voicechat.open": "Open",
"message.voicechat.saved_debug_report_failed": "Failed to save voice chat debug report: %s",
"message.voicechat.open_folder": "Open folder",
"message.voicechat.storage_size": "Estimated disk space usage: %s.",
"message.voicechat.microphone_unavailable": "Microphone unavailable",
"message.voicechat.speaker_unavailable": "Speaker unavailable",
"message.voicechat.playback_unavailable": "Playback unavailable",
"message.voicechat.denoiser": "Noise suppression: %s",
"message.voicechat.enabled": "Enabled",
"message.voicechat.disabled": "Disabled",
"message.voicechat.denoiser": "Noise Suppression: %s",
"message.voicechat.denoiser.on": "ON",
"message.voicechat.denoiser.off": "OFF",
"message.voicechat.group_type_title": "%s (%s)",
"message.voicechat.group_title": "%s",
"message.voicechat.group_does_not_exist": "This group does not exist",
"message.voicechat.group_does_not_exist": "Such a group does not exist",
"message.voicechat.group_name_not_unique": "Group name is ambiguous",
"message.voicechat.create": "Create",
"message.voicechat.create_group": "Create a Group",
"message.voicechat.create_group_button": "Create a group",
"message.voicechat.create_group": "Create Group",
"message.voicechat.create_group_button": "Create Group",
"message.voicechat.optional_password": "Password (Optional)",
"message.voicechat.group_type": "Group type",
"message.voicechat.group_type": "Group Type",
"message.voicechat.group_type.normal": "Normal",
"message.voicechat.group_type.normal.description": "Players that are not in your group can't hear you, but you can hear them",
"message.voicechat.group_type.normal.description": "Players who are not in your group can't hear you, but you can hear them.",
"message.voicechat.group_type.open": "Open",
"message.voicechat.group_type.open.description": "Players that are not in your group can hear you and you can hear them",
"message.voicechat.group_type.open.description": "Players who are not in your group can hear you, and you can hear them too.",
"message.voicechat.group_type.isolated": "Isolated",
"message.voicechat.group_type.isolated.description": "Players that are not in your group can't hear you and you can't hear them",
"message.voicechat.join_group": "Join group",
"message.voicechat.group_type.isolated.description": "Players who are not in your group can't hear you, and you can't hear them either.",
"message.voicechat.join_group": "Join Group",
"message.voicechat.enter_group_password": "Enter Group Password",
"message.voicechat.password": "Password",
"message.voicechat.wrong_password": "Wrong Password",
"message.voicechat.wrong_password": "Incorrect Password",
"message.voicechat.server_port": "Voice chat server hosted on port %s",
"message.voicechat.macos_no_mic_permission": "No microphone permission. Please check Security & Privacy settings",
"message.voicechat.macos_unsupported_launcher": "Your launcher does not support MacOS microphone permissions",
"message.voicechat.macos_no_mic_permission": "No permission to access your microphone. Please open System Settings > Privacy & Security and check the access options there",
"message.voicechat.macos_unsupported_launcher": "Your launcher does not support macOS microphone permissions",
"message.voicechat.player_no_voicechat": "%s does not have %s installed",
"message.voicechat.mute.enabled": "Press to unmute your microphone",
"message.voicechat.mute.disabled": "Press to mute your microphone",
"message.voicechat.mute.disabled_ptt": "You can't mute when using push to talk",
"message.voicechat.disable.enabled": "Press to enable all voice chat sounds",
"message.voicechat.disable.disabled": "Press to disable all voice chat sounds",
"message.voicechat.disable.no_speaker": "No speaker available",
"message.voicechat.hide_icons.enabled": "Press to show all voice chat icons",
"message.voicechat.hide_icons.disabled": "Press to hide all voice chat icons",
"message.voicechat.show_group_hud.enabled": "Press to hide the group chat HUD",
"message.voicechat.show_group_hud.disabled": "Press to show the group chat HUD",
"message.voicechat.recording.disabled": "Press to start recording",
"message.voicechat.recording.enabled": "Press to stop recording",
"message.voicechat.mute.enabled": "Press to unmute your microphone.",
"message.voicechat.mute.disabled": "Press to mute your microphone.",
"message.voicechat.mute.disabled_ptt": "You can't mute your microphone when using push to talk.",
"message.voicechat.disable.enabled": "Press to enable all voice chat sounds.",
"message.voicechat.disable.disabled": "Press to disable all voice chat sounds.",
"message.voicechat.disable.no_speaker": "No speakers available.",
"message.voicechat.hide_icons.enabled": "Press to show all voice chat icons.",
"message.voicechat.hide_icons.disabled": "Press to hide all voice chat icons.",
"message.voicechat.show_group_hud.enabled": "Press to hide the group chat HUD.",
"message.voicechat.show_group_hud.disabled": "Press to show the group chat HUD.",
"message.voicechat.recording.disabled": "Press to start recording.",
"message.voicechat.recording.enabled": "Press to stop recording.",
"message.voicechat.no_speak_permission": "You do not have permission to speak",
"message.voicechat.no_listen_permission": "You do not have permission to hear the voice chat",
"message.voicechat.no_group_permission": "You do not have permission to join groups",
"message.voicechat.search_hint": "Search...",
"message.voicechat.search_empty": "Couldn't find any players with that name",
"message.voicechat.other_volume": "Other",
"message.voicechat.other_volume.description": "The volume of any sound not listed below",
"message.voicechat.other_volume.description": "The volume of any sound not listed below.",
"message.voicechat.more_members": "and %s more...",
"message.voicechat.no_groups": "No existing groups",
"message.voicechat.audio_type": "3D audio: %s",
"message.voicechat.audio_type": "3D Audio: %s",
"message.voicechat.audio_type.normal": "Normal",
"message.voicechat.audio_type.reduced": "Reduced",
"message.voicechat.audio_type.off": "Off",
"message.voicechat.invite_player": "Invite %s to your group",
"message.voicechat.audio_type.off": "OFF",
"message.voicechat.invite_player": "Press to invite %s to your group.",
"message.voicechat.press_to_reassign_key": "Press to assign a key.",
"message.voicechat.set_up": "Press %s to set up",
"message.voicechat.onboarding.reset": "Onboarding status has been reset",
"message.voicechat.onboarding.next": "Next",
"message.voicechat.onboarding.confirm": "Confirm",
"message.voicechat.onboarding.back": "Back",
"message.voicechat.onboarding.cancel": "Cancel",
"message.voicechat.onboarding.introduction.title": "Set Up %s",
"message.voicechat.onboarding.introduction.description": "This setup guide will help you configure your voice chat.\n\nYou can skip it if you know what you are doing.",
"message.voicechat.onboarding.introduction.skip": "I Know What I Am Doing - Skip",
"message.voicechat.onboarding.skip.title": "Skip Setup",
"message.voicechat.onboarding.skip.description": "Are you sure you want to skip this setup guide?\n\nIf you skip it, you will have to adjust all the settings manually!",
"message.voicechat.onboarding.microphone": "Select Microphone",
"message.voicechat.onboarding.speaker": "Select Speaker",
"message.voicechat.onboarding.activation.title": "Select Activation Method",
"message.voicechat.onboarding.activation": "Please choose the method to activate your microphone.",
"message.voicechat.onboarding.activation.ptt": "When selecting %s, you need to press and hold a button to speak.",
"message.voicechat.onboarding.activation.ptt.name": "Push to Talk",
"message.voicechat.onboarding.activation.voice": "%s automatically activates your microphone when a certain volume threshold is reached.",
"message.voicechat.onboarding.activation.voice.name": "Voice Activation",
"message.voicechat.onboarding.ptt.title": "Choose Push to Talk Keybind",
"message.voicechat.onboarding.ptt.description": "Please choose the key that should be used to activate your microphone.",
"message.voicechat.onboarding.ptt.button_description": "Press to assign",
"message.voicechat.onboarding.voice.title": "Adjust Microphone Activation Threshold",
"message.voicechat.onboarding.voice.description": "Enable microphone testing and make sure the volume is below the slider when you are silent and above it when you are speaking.",
"message.voicechat.onboarding.final": "Finish Setup",
"message.voicechat.onboarding.final.description.success": "You have successfully configured your voice chat!\n\nOpen the voice chat menu with %s.",
"message.voicechat.onboarding.final.description.ptt": "Hold %s while speaking to use the voice chat.",
"message.voicechat.onboarding.final.description.voice": "You will be muted after exiting this screen. Press %s to unmute.",
"message.voicechat.onboarding.final.description.configuration": "You can always change all the settings in the voice chat menu.\nKeybinds, however, can be changed just like any other keybind in the game.",
"message.voicechat.onboarding.final.finish_setup": "Finish Setup",
"resourcepack.voicechat.classic_icons": "Classic Icons",
"resourcepack.voicechat.classic_icons.description": "Classic Voice Chat Icons",
"resourcepack.voicechat.classic_icons.description": "Classic voice chat icons",
"resourcepack.voicechat.white_icons": "White Icons",
"resourcepack.voicechat.white_icons.description": "White Voice Chat Icons",
"resourcepack.voicechat.white_icons.description": "White voice chat icons",
"resourcepack.voicechat.black_icons": "Black Icons",
"resourcepack.voicechat.black_icons.description": "Black Voice Chat Icons",
"resourcepack.voicechat.black_icons.description": "Black voice chat icons",
"cloth_config.voicechat.settings": "Voice Chat Settings",
"cloth_config.voicechat.category.general": "General",
"cloth_config.voicechat.category.other": "Other",
"cloth_config.voicechat.category.audio": "Audio",
"cloth_config.voicechat.category.hud_icons": "HUD Icons",
"cloth_config.voicechat.category.group_chat_icons": "Group Chat Icons",
"cloth_config.voicechat.category.hud_icons": "Voice Chat HUD",
"cloth_config.voicechat.category.group_chat_icons": "Group Chat HUD",
"cloth_config.voicechat.category.ingame_menu": "In-Game Menu",
"cloth_config.voicechat.config.recording_destination": "Recording destination",
"cloth_config.voicechat.config.run_local_server": "Run in singleplayer/LAN worlds",
"cloth_config.voicechat.config.recording_destination.description": "The location where recordings should be saved.\nLeave blank to use the default location.",
"cloth_config.voicechat.config.run_local_server": "Run in singleplayer or LAN worlds",
"cloth_config.voicechat.config.run_local_server.description": "If the voice chat should work in singleplayer or in worlds shared over LAN.",
"cloth_config.voicechat.config.offline_player_volume_adjustment": "Offline player volume adjustment",
"cloth_config.voicechat.config.freecam_support": "Freecam support",
"cloth_config.voicechat.config.offline_player_volume_adjustment.description": "If the volume adjustment interface should also display offline players.",
"cloth_config.voicechat.config.freecam_mode": "Freecam mode",
"cloth_config.voicechat.config.freecam_mode.description": "How listening to other players should work when using freecam mods.\nCAMERA: You will hear the voice chat around your camera. Whether you will still be able to hear the voice chat when the camera is far away from your character depends on the voice chat broadcast range of the server.\nPLAYER: You will hear the voice chat around your character no matter where your camera is.",
"cloth_config.voicechat.config.freecam_mode.camera": "Camera",
"cloth_config.voicechat.config.freecam_mode.player": "Player",
"cloth_config.voicechat.config.mute_on_join": "Mute on join",
"cloth_config.voicechat.config.mute_on_join.description": "If enabled, you will be automatically muted when joining a world.",
"cloth_config.voicechat.config.audio_packet_threshold": "Audio packet threshold",
"cloth_config.voicechat.config.deactivation_delay": "Deactivation delay",
"cloth_config.voicechat.config.audio_packet_threshold.description": "The maximum number of audio packets that should be held back if a packet arrives out of order or is dropped.\nThis prevents audio packets that are only slightly out of order from being discarded.\nSet this to 0 to disable.",
"cloth_config.voicechat.config.voice_deactivation_delay": "Microphone deactivation delay",
"cloth_config.voicechat.config.voice_deactivation_delay.description": "The time it takes for the microphone to deactivate when using voice activation.\nA value of 1 means 20 milliseconds, 2=40 ms, 3=60 ms, and so on.",
"cloth_config.voicechat.config.output_buffer_size": "Output buffer size",
"cloth_config.voicechat.config.hud_icon_scale": "HUD icon scale",
"cloth_config.voicechat.config.hud_icon_x": "HUD icon X pos",
"cloth_config.voicechat.config.hud_icon_y": "HUD icon Y pos",
"cloth_config.voicechat.config.group_player_icon_orientation": "Group HUD icon orientation",
"cloth_config.voicechat.config.group_hud_icon_scale": "Group HUD icon scale",
"cloth_config.voicechat.config.group_player_icon_pos_x": "Group icon X position",
"cloth_config.voicechat.config.group_player_icon_pos_y": "Group icon Y position",
"cloth_config.voicechat.config.show_own_group_icon": "Show own group HUD icon"
"cloth_config.voicechat.config.output_buffer_size.description": "The size of the audio output buffer (in packets).\nHigher values mean a higher latency but less crackling.\nIncrease this value if you have an unstable internet connection.",
"cloth_config.voicechat.config.hud_icon_scale": "Voice chat HUD icon scale",
"cloth_config.voicechat.config.hud_icon_scale.description": "The scale of the icons in the voice chat HUD, such as microphone or connection status.",
"cloth_config.voicechat.config.hud_icon_pos_x": "Voice chat HUD icon X position",
"cloth_config.voicechat.config.hud_icon_pos_x.description": "The X position of the icons in the voice chat HUD.\nNegative values mean anchoring to the right instead.",
"cloth_config.voicechat.config.hud_icon_pos_y": "Voice chat HUD icon Y position",
"cloth_config.voicechat.config.hud_icon_pos_y.description": "The Y position of the icons in the voice chat HUD.\nNegative values mean anchoring to the bottom instead.",
"cloth_config.voicechat.config.group_player_icon_orientation": "Group chat HUD icon orientation",
"cloth_config.voicechat.config.group_player_icon_orientation.description": "The orientation of the player icons in the group chat HUD.",
"cloth_config.voicechat.config.group_player_icon_orientation.vertical": "Vertical",
"cloth_config.voicechat.config.group_player_icon_orientation.horizontal": "Horizontal",
"cloth_config.voicechat.config.group_hud_icon_scale": "Group chat HUD icon scale",
"cloth_config.voicechat.config.group_hud_icon_scale.description": "The scale of the player icons in the group chat HUD.",
"cloth_config.voicechat.config.group_player_icon_pos_x": "Group chat HUD icon X position",
"cloth_config.voicechat.config.group_player_icon_pos_x.description": "The X position of the player icons in the group chat HUD.\nNegative values mean anchoring to the right instead.",
"cloth_config.voicechat.config.group_player_icon_pos_y": "Group chat HUD icon Y position",
"cloth_config.voicechat.config.group_player_icon_pos_y.description": "The Y position of the player icons in the group chat HUD.\nNegative values mean anchoring to the bottom instead.",
"cloth_config.voicechat.config.show_own_group_icon": "Show yourself in the group chat HUD",
"cloth_config.voicechat.config.show_own_group_icon.description": "If your own player icon should be displayed in the group chat HUD when you are in a group."
}