1919package net .onelitefeather .bettergopaint ;
2020
2121import com .fastasyncworldedit .core .Fawe ;
22+ import net .kyori .adventure .key .Key ;
23+ import net .kyori .adventure .text .Component ;
2224import net .kyori .adventure .text .minimessage .MiniMessage ;
25+ import net .kyori .adventure .translation .GlobalTranslator ;
26+ import net .kyori .adventure .translation .TranslationRegistry ;
27+ import net .kyori .adventure .util .UTF8ResourceBundleControl ;
2328import net .onelitefeather .bettergopaint .brush .PlayerBrushManager ;
2429import net .onelitefeather .bettergopaint .command .GoPaintCommand ;
2530import net .onelitefeather .bettergopaint .command .ReloadCommand ;
2631import net .onelitefeather .bettergopaint .listeners .ConnectListener ;
2732import net .onelitefeather .bettergopaint .listeners .InteractListener ;
2833import net .onelitefeather .bettergopaint .listeners .InventoryListener ;
2934import net .onelitefeather .bettergopaint .objects .other .Settings ;
35+ import net .onelitefeather .bettergopaint .service .UpdateService ;
36+ import net .onelitefeather .bettergopaint .translations .PluginTranslationRegistry ;
3037import org .bstats .bukkit .Metrics ;
3138import org .bstats .charts .SimplePie ;
3239import org .bukkit .Bukkit ;
4451import org .jetbrains .annotations .Nullable ;
4552
4653import java .io .File ;
54+ import java .io .IOException ;
55+ import java .net .URL ;
56+ import java .net .URLClassLoader ;
57+ import java .nio .file .Files ;
58+ import java .nio .file .Path ;
59+ import java .util .HashSet ;
60+ import java .util .Locale ;
4761import java .util .Objects ;
62+ import java .util .ResourceBundle ;
4863import java .util .logging .Level ;
4964
5065public class BetterGoPaint extends JavaPlugin implements Listener {
5166
5267 public static final String PAPER_DOCS = "https://jd.papermc.io/paper/1.20.6/org/bukkit/Material.html#enum-constant-summary" ;
53- public static final String USE_PERMISSION = "bettergopaint.use" ;
54- public static final String ADMIN_PERMISSION = "bettergopaint.admin" ;
55- public static final String RELOAD_PERMISSION = "bettergopaint.command.admin.reload" ;
56- public static final String WORLD_BYPASS_PERMISSION = "bettergopaint.world.bypass" ;
5768
5869 private final PlayerBrushManager brushManager = new PlayerBrushManager ();
5970 private final Metrics metrics = new Metrics (this , 18734 );
71+ private UpdateService updateService ;
6072
6173 @ Override
6274 public void onLoad () {
@@ -81,6 +93,30 @@ public void onEnable() {
8193
8294 reloadConfig ();
8395
96+ final TranslationRegistry translationRegistry = new PluginTranslationRegistry (TranslationRegistry .create (Key .key ("bettergopaint" , "translations" )));
97+ translationRegistry .defaultLocale (Locale .US );
98+ Path langFolder = getDataFolder ().toPath ().resolve ("lang" );
99+ var languages = new HashSet <>(Settings .settings ().generic .LANGUAGES );
100+ languages .add ("en-US" );
101+ if (Files .exists (langFolder )) {
102+ try (var urlClassLoader = new URLClassLoader (new URL []{langFolder .toUri ().toURL ()})) {
103+ languages .stream ().map (Locale ::forLanguageTag ).forEach (r -> {
104+ var bundle = ResourceBundle .getBundle ("bettergopaint" , r , urlClassLoader , UTF8ResourceBundleControl .get ());
105+ translationRegistry .registerAll (r , bundle , false );
106+ });
107+ } catch (IOException e ) {
108+ throw new RuntimeException (e );
109+ }
110+ } else {
111+ languages .stream ().map (Locale ::forLanguageTag ).forEach (r -> {
112+ var bundle = ResourceBundle .getBundle ("bettergopaint" , r , UTF8ResourceBundleControl .get ());
113+ translationRegistry .registerAll (r , bundle , false );
114+ });
115+ }
116+ GlobalTranslator .translator ().addSource (translationRegistry );
117+ donationInformation ();
118+
119+
84120 Material brush = Settings .settings ().generic .DEFAULT_BRUSH ;
85121 if (!brush .isItem ()) {
86122 getComponentLogger ().error ("{} is not a valid default brush, it has to be an item" , brush .name ());
@@ -95,17 +131,34 @@ public void onEnable() {
95131
96132 registerListeners ();
97133 registerCommands ();
134+ updateService ();
98135 }
99136
100137 @ Override
101138 public void onDisable () {
102139 metrics .shutdown ();
140+ this .updateService .shutdown ();
103141 }
104142
105143 public void reloadConfig () {
106- Settings .settings ().reload (this , new File (getDataFolder (), "config.yml" ));
144+ try {
145+ Files .createDirectories (getDataFolder ().toPath ());
146+ final Path resolve = getDataFolder ().toPath ().resolve ("config.yml" );
147+ Settings .settings ().save (resolve .toFile ());
148+ Settings .settings ().load (resolve .toFile ());
149+ } catch (IOException e ) {
150+ getLogger ().log (Level .SEVERE , "Cannot init config" , e );
151+ }
152+
107153 }
108154
155+ private void updateService () {
156+ this .updateService = new UpdateService (this );
157+ this .updateService .run ();
158+ this .updateService .notifyConsole (getComponentLogger ());
159+ }
160+
161+
109162 @ SuppressWarnings ("UnstableApiUsage" )
110163 private void registerCommands () {
111164 Bukkit .getCommandMap ().register ("gopaint" , getPluginMeta ().getName (), new GoPaintCommand (this ));
@@ -121,13 +174,17 @@ private void registerListeners() {
121174 PluginManager pm = getServer ().getPluginManager ();
122175 pm .registerEvents (new InventoryListener (getBrushManager ()), this );
123176 pm .registerEvents (new InteractListener (this ), this );
124- pm .registerEvents (new ConnectListener (getBrushManager ()), this );
177+ pm .registerEvents (new ConnectListener (getBrushManager (), this ), this );
125178 }
126179
127180 private boolean hasOriginalGoPaint () {
128181 return getServer ().getPluginManager ().getPlugin ("goPaint" ) != this ;
129182 }
130183
184+ private void donationInformation () {
185+ getComponentLogger ().info (Component .translatable ("bettergopaint.notify.donation.console" ));
186+ }
187+
131188 private @ Nullable AnnotationParser <CommandSender > enableCommandSystem () {
132189 try {
133190 LegacyPaperCommandManager <CommandSender > commandManager = LegacyPaperCommandManager .createNative (
@@ -150,4 +207,8 @@ private boolean hasOriginalGoPaint() {
150207 return brushManager ;
151208 }
152209
210+ public UpdateService getUpdateService () {
211+ return updateService ;
212+ }
213+
153214}
0 commit comments