Skip to content

Commit

Permalink
Merge pull request #1 from tommarekCZE/main
Browse files Browse the repository at this point in the history
Multi lang support + minor changes
  • Loading branch information
Ifiht authored Dec 24, 2024
2 parents 9686d61 + 0fb56fe commit def3de1
Show file tree
Hide file tree
Showing 12 changed files with 353 additions and 40 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

group = 'org.evlis'
version = '1.0.1'
version = '1.0.2'

def targetJavaVersion = 21

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/evlis/lunamatic/GlobalVars.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ public class GlobalVars {
public static Boolean debug = false;
// Check for updates?
public static Boolean checkUpdates = true;
//
public static String lang = "en_US";
// enabled moons:
public static Boolean fullMoonEnabled = true;
public static Boolean harvestMoonEnabled = true;
Expand Down
68 changes: 60 additions & 8 deletions src/main/java/org/evlis/lunamatic/Lunamatic.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,26 @@
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;
import org.evlis.lunamatic.commands.LumaCommand;
import org.evlis.lunamatic.events.*;
import org.evlis.lunamatic.triggers.Scheduler;

import org.evlis.lunamatic.utilities.TranslationManager;

import java.io.InputStreamReader;
import java.lang.module.ModuleDescriptor;
import java.net.HttpURLConnection;
import java.net.URL;

public final class Lunamatic extends JavaPlugin {
//getComponentLogger dosent output anything! Fixed that with getServer().getConsoleSender().sendMessage

public final class Lunamatic extends JavaPlugin {
//private final ConsoleCommandSender consoleLogger = getServer().getConsoleSender();
private static Lunamatic instance;
public TranslationManager translationManager;

public TimeSkip timeSkip;
public PlayerJoin playerJoin;
public PlayerQuit playerQuit;
Expand All @@ -28,22 +35,60 @@ public final class Lunamatic extends JavaPlugin {
//public final Logger logger = this.getLogger();
//public final File configFile = new File(this.getDataFolder(), "config.yml");
private static final String REQUIRED_VERSION = "1.21";
public static final int REQUIRED_LANG_VER = 2;
private static final String API_URL = "https://api.modrinth.com/v2/project/lunamatic/version";

public void troubleShootLang() {
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.YELLOW + "---Language Troubleshoot Guide---\n1. If you recently updated Lunamatic, it is recommended to delete plugins/Lunamatic/translations folder. (To allow Lunamatic to use recent translation files)\n2. Check for wrong entered language name in Lunamatic/config.yml\n3. If you were messing with the translations files, you might forget to update the lang_ver value.");
}

public void troubleShootConfig() {
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.YELLOW + "---Config Troubleshoot Guide---\n1. If you recently updated Lunamatic, it is recommended to delete plugins/Lunamatic/config.yml file. (To allow Lunamatic to use recent config version)\n2. You might did some typos in Lunamatic/config.yml");
}

@Override
public void onEnable() {
// Begin Initialization
this.getComponentLogger().debug(Component.text("Loading Lunamatic...", NamedTextColor.GOLD));

// Assing instance variable
instance = this;

// Get versions
String serverVersion = getServer().getMinecraftVersion();
String currentVersion = this.getPluginMeta().getVersion();
// Check server version, log error if not supported.
if (!serverVersion.startsWith(REQUIRED_VERSION)) {
this.getComponentLogger().error(Component.text("Unsupported server version: " + serverVersion, NamedTextColor.RED));
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.RED + "Unsupported server version detected! Expected ver: "+REQUIRED_VERSION+", Your version: "+serverVersion);
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.YELLOW + "Expect unexpected behaviours or crashes!, It is recommended to use expected version!");
}
// Config Initialization
saveDefaultConfig();
loadGlobalConfig();

// Load translations
TranslationManager.initialize(getDataFolder(),GlobalVars.lang);
translationManager = TranslationManager.getInstance();
translationManager.saveDefaultTranslations();
translationManager.loadTranslations();

if (!translationManager.doesTranslationExist(GlobalVars.lang)) {
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.RED + GlobalVars.lang + " language does NOT exists! Disabling plugin.");
troubleShootLang();
Bukkit.getPluginManager().disablePlugin(this);
return;
}


if (Integer.parseInt(translationManager.getTranslation("lang_ver")) != REQUIRED_LANG_VER) {
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.RED + "Unsupported language version! Disabling plugin. Expected lang ver: "+REQUIRED_LANG_VER);
troubleShootLang();
Bukkit.getPluginManager().disablePlugin(this);
return;
}

getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.GREEN + translationManager.getTranslation("lang_load_success"));

// Update check
if (GlobalVars.checkUpdates) {
checkForUpdates(currentVersion);
Expand All @@ -64,13 +109,13 @@ public void onEnable() {

schedule.GetOmens(this);
// Notify of successful plugin start
this.getComponentLogger().debug(Component.text("Successfully enabled Lunamatic v" + currentVersion, NamedTextColor.GOLD));
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.GOLD + translationManager.getTranslation("plugin_success_load") + currentVersion);
}

@Override
public void onDisable() {
// Plugin shutdown logic
this.getComponentLogger().debug(Component.text("Lunamatic has been disabled.", NamedTextColor.GOLD));
this.getLogger().warning("Lunamatic has been disabled.");
}

public void registerCommands() {
Expand All @@ -83,6 +128,7 @@ public void loadGlobalConfig() {
reloadConfig();
// plugin vars
GlobalVars.checkUpdates = getConfig().getBoolean("checkForUpdates");
GlobalVars.lang = getConfig().getString("lang");
// moons enabled
GlobalVars.disabledWorlds = getConfig().getStringList("disabledWorlds");
GlobalVars.fullMoonEnabled = getConfig().getBoolean("fullMoonEnabled");
Expand All @@ -93,12 +139,14 @@ public void loadGlobalConfig() {
GlobalVars.harvestMoonDieSides = getConfig().getInt("bloodMoonDieSides");
GlobalVars.bloodMoonDieSides = getConfig().getInt("harvestMoonDieSides");
} catch (Exception e) {
getLogger().severe("Failed to load configuration: " + e.getMessage());
getLogger().severe("Failed to load configuration! Disabling plugin. Error: " + e.getMessage());
troubleShootConfig();
Bukkit.getPluginManager().disablePlugin(this);
}
}

public void checkForUpdates(String currentVersionString) {
getLogger().info("Checking for updates...");
getLogger().info(translationManager.getTranslation("update_check"));
try {
// Open a connection to the API
HttpURLConnection connection = (HttpURLConnection) new URL(API_URL).openConnection();
Expand All @@ -118,13 +166,17 @@ public void checkForUpdates(String currentVersionString) {
ModuleDescriptor.Version latestVersion = ModuleDescriptor.Version.parse(latestVersionString);
ModuleDescriptor.Version currentVersion = ModuleDescriptor.Version.parse(currentVersionString);
if (currentVersion.compareTo(latestVersion) < 0) {
this.getComponentLogger().debug(Component.text("New Version " + latestVersionString + " available (you are on v" + currentVersionString + ")! Download here: https://modrinth.com/plugin/lunamatic", NamedTextColor.GOLD));
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.GOLD + translationManager.getTranslation("update_found").replace("%a",latestVersionString).replace("%b",currentVersionString));
}

reader.close();
connection.disconnect();
} catch (Exception e) {
this.getComponentLogger().error(Component.text("Unable to check for updates: " + e.getMessage(), NamedTextColor.RED));
getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.RED + translationManager.getTranslation("update_error"));
}
}

public static Lunamatic getInstance() {
return instance;
}
}
65 changes: 53 additions & 12 deletions src/main/java/org/evlis/lunamatic/commands/LumaCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,38 @@
import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.*;
import io.papermc.paper.world.MoonPhase;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.evlis.lunamatic.GlobalVars;
import org.evlis.lunamatic.utilities.ResetFlags;
import org.jetbrains.annotations.NotNull;
import org.evlis.lunamatic.utilities.TranslationManager;
import org.evlis.lunamatic.Lunamatic;
import org.evlis.lunamatic.utilities.PlayerMessage;

import static org.evlis.lunamatic.Lunamatic.REQUIRED_LANG_VER;

@CommandAlias("luma")
public class LumaCommand extends BaseCommand {

private final Plugin plugin; // stores the reference to your main plugin

public LumaCommand(Plugin plugin) {
this.plugin = plugin;
}

private TranslationManager getTranslationManager() {
return TranslationManager.getInstance(); // Always fetch the latest instance
}

@Default
public void defCommand(CommandSender sender) {
// Display GlobalVars status
sender.sendMessage("You are running Lunamatic v" + plugin.getPluginMeta().getVersion());
sender.sendMessage(getTranslationManager().getTranslation("cmd_running") + plugin.getPluginMeta().getVersion());
}

@Subcommand("reload")
Expand All @@ -33,9 +44,38 @@ public void onReload(CommandSender sender) {
// Display GlobalVars status
try {
plugin.reloadConfig();
sender.sendMessage("Lunamatic reload successful!");
Lunamatic.getInstance().loadGlobalConfig();

TranslationManager.initialize(plugin.getDataFolder(),GlobalVars.lang);

getTranslationManager().loadTranslations();

if (!getTranslationManager().doesTranslationExist(GlobalVars.lang)) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.RED + GlobalVars.lang + " language does NOT exists! Disabling plugin.");
sender.sendMessage("Error occurred while loading language! Check console.");
Lunamatic.getInstance().troubleShootLang();
Bukkit.getPluginManager().disablePlugin(plugin);
return;
}

if (Integer.parseInt(getTranslationManager().getTranslation("lang_ver")) != REQUIRED_LANG_VER) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.RED + "Unsupported language version! Disabling plugin. Expected lang ver: "+REQUIRED_LANG_VER);
sender.sendMessage("Error occurred while loading language! Check console.");
Lunamatic.getInstance().troubleShootLang();
Bukkit.getPluginManager().disablePlugin(plugin);
return;
}

plugin.getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.GREEN + getTranslationManager().getTranslation("lang_load_success"));
sender.sendMessage(getTranslationManager().getTranslation("cmd_reload_success"));
if (sender instanceof Player) {
PlayerMessage.Send((Player) sender,getTranslationManager().getTranslation("cmd_reload_warn"), NamedTextColor.YELLOW);
} else {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.WHITE + "[Lunamatic] " + ChatColor.RESET + ChatColor.YELLOW + GlobalVars.lang + getTranslationManager().getTranslation("cmd_reload_warn"));
}

} catch (Exception e) {
sender.sendMessage("Lunamatic encountered an error: " + e.getMessage());
sender.sendMessage(getTranslationManager().getTranslation("cmd_reload_fail") + e.getMessage());
}
}

Expand All @@ -48,14 +88,15 @@ public void onStatus(Player player) {
World world = player.getWorld();
@NotNull MoonPhase moonPhase = world.getMoonPhase();
// Display GlobalVars status
player.sendMessage("Blood Moon Enabled: " + GlobalVars.bloodMoonEnabled);
player.sendMessage("Blood Moon Now: " + GlobalVars.bloodMoonNow);
player.sendMessage("Blood Moon Today: " + GlobalVars.bloodMoonToday);
player.sendMessage("Harvest Moon Enabled: " + GlobalVars.harvestMoonEnabled);
player.sendMessage("Harvest Moon Now: " + GlobalVars.harvestMoonNow);
player.sendMessage("Harvest Moon Today: " + GlobalVars.harvestMoonToday);
player.sendMessage("Disabled worlds: " + String.join(", ", GlobalVars.disabledWorlds));
player.sendMessage("Current moon phase for world " + world.getName() + ": " + moonPhase);
player.sendMessage(getTranslationManager().getTranslation("cmd_lang") + GlobalVars.lang);
player.sendMessage(getTranslationManager().getTranslation("cmd_blood_moon_enabled") + GlobalVars.bloodMoonEnabled);
player.sendMessage(getTranslationManager().getTranslation("cmd_blood_moon_now") + GlobalVars.bloodMoonNow);
player.sendMessage(getTranslationManager().getTranslation("cmd_blood_moon_today") + GlobalVars.bloodMoonToday);
player.sendMessage(getTranslationManager().getTranslation("cmd_harv_moon_enabled") + GlobalVars.harvestMoonEnabled);
player.sendMessage(getTranslationManager().getTranslation("cmd_harv_moon_now") + GlobalVars.harvestMoonNow);
player.sendMessage(getTranslationManager().getTranslation("cmd_harv_moon_today") + GlobalVars.harvestMoonToday);
player.sendMessage(getTranslationManager().getTranslation("cmd_disabled_worlds") + String.join(", ", GlobalVars.disabledWorlds));
player.sendMessage(getTranslationManager().getTranslation("cmd_curr_phase") + world.getName() + ": " + moonPhase);
}

@Subcommand("makebloodmoon")
Expand Down
11 changes: 6 additions & 5 deletions src/main/java/org/evlis/lunamatic/events/PlayerJoin.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@
import org.evlis.lunamatic.triggers.NightEffects;
import org.evlis.lunamatic.utilities.PlayerMessage;
import org.evlis.lunamatic.utilities.ResetFlags;
import org.evlis.lunamatic.utilities.TranslationManager;
import org.jetbrains.annotations.NotNull;

public class PlayerJoin implements Listener {

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
TranslationManager translationManager = TranslationManager.getInstance();
Player player = event.getPlayer();
World world = player.getWorld();
if (world.getPlayers().isEmpty()) {
Expand All @@ -33,18 +34,18 @@ public void onPlayerJoin(PlayerJoinEvent event) {
// currently cannot be separated without a code rewrite.
if (moonPhase == MoonPhase.FULL_MOON) {
if (GlobalVars.harvestMoonToday) {
PlayerMessage.Send(player, "Harvest moon tonight.", NamedTextColor.GOLD);
PlayerMessage.Send(player, translationManager.getTranslation("harvest_moon_tonight"), NamedTextColor.GOLD);
} else {
PlayerMessage.Send(player, "Full moon tonight.", NamedTextColor.YELLOW);
PlayerMessage.Send(player, translationManager.getTranslation("full_moon_tonight"), NamedTextColor.YELLOW);
}
if (time >= 12610) {
NightEffects.ApplyMoonlight(player, MoonPhase.FULL_MOON, (24000 - (int)time));
}
} else if (moonPhase == MoonPhase.NEW_MOON) {
if (GlobalVars.bloodMoonToday) {
PlayerMessage.Send(player, "Blood moon tonight.", NamedTextColor.DARK_RED);
PlayerMessage.Send(player, translationManager.getTranslation("blood_moon_tonight"), NamedTextColor.DARK_RED);
} else {
PlayerMessage.Send(player, "New moon tonight.", NamedTextColor.DARK_GRAY);
PlayerMessage.Send(player, translationManager.getTranslation("new_moon_tonight"), NamedTextColor.DARK_GRAY);
}
if (time >= 12610) {
NightEffects.ApplyMoonlight(player, MoonPhase.NEW_MOON, (24000 - (int)time));
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/org/evlis/lunamatic/events/PlayerSleep.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@
import org.evlis.lunamatic.Lunamatic;
import org.evlis.lunamatic.utilities.PlayerMessage;
import org.jetbrains.annotations.NotNull;
import org.evlis.lunamatic.utilities.TranslationManager;

public class PlayerSleep implements Listener {

@EventHandler
public void onPlayerSleep(PlayerBedEnterEvent event) {
TranslationManager translationManager = TranslationManager.getInstance();
Player player = event.getPlayer();
World world = player.getWorld();
@NotNull MoonPhase moonPhase = world.getMoonPhase();

if (GlobalVars.bloodMoonNow) {
PlayerMessage.Send(player, "The blood moon shines! You cannot sleep!", NamedTextColor.RED);
PlayerMessage.Send(player, translationManager.getTranslation("blood_moon_sleep"), NamedTextColor.RED);
event.setCancelled(true);
}
}
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/org/evlis/lunamatic/triggers/NightEffects.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.evlis.lunamatic.utilities.PlayerMessage;
import org.evlis.lunamatic.utilities.TranslationManager;

public class NightEffects {

public static void ApplyMoonlight(Player player, MoonPhase moonPhase, Integer timeTilDawn) {
TranslationManager translationManager = TranslationManager.getInstance();
if (moonPhase == MoonPhase.FULL_MOON) {
player.addPotionEffect(new PotionEffect(PotionEffectType.LUCK, timeTilDawn, 0));
PlayerMessage.Send(player, "You feel lucky!", NamedTextColor.DARK_GREEN);
PlayerMessage.Send(player, translationManager.getTranslation("lucky_feel"), NamedTextColor.DARK_GREEN);
} else if (moonPhase == MoonPhase.NEW_MOON) {
player.addPotionEffect(new PotionEffect(PotionEffectType.UNLUCK, timeTilDawn, 0));
PlayerMessage.Send(player, "You feel wary...", NamedTextColor.DARK_PURPLE);
PlayerMessage.Send(player, translationManager.getTranslation("wary_feel"), NamedTextColor.DARK_PURPLE);
}

}
Expand Down
Loading

0 comments on commit def3de1

Please sign in to comment.