From f2cfedf4c9f3a471df1616c7041ca33011a2ee87 Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Thu, 3 Aug 2017 11:56:07 +0200 Subject: [PATCH 01/30] Remove unnecessary .stream() call Add setAutoCommit(false) at the SQLite connection; Improves speed massively --- .../java/com/djrapitops/plan/database/databases/SQLiteDB.java | 4 +++- .../com/djrapitops/plan/database/tables/GMTimesTable.java | 2 +- .../com/djrapitops/plan/database/tables/SessionsTable.java | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java index 6b07d0bec..830de2d74 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java @@ -50,7 +50,9 @@ public class SQLiteDB extends SQLDB { try { Class.forName("org.sqlite.JDBC"); - return DriverManager.getConnection("jdbc:sqlite:" + new File(plugin.getDataFolder(), dbName + ".db").getAbsolutePath()); + Connection connection = DriverManager.getConnection("jdbc:sqlite:" + new File(plugin.getDataFolder(), dbName + ".db").getAbsolutePath()); + connection.setAutoCommit(false); + return connection; } catch (ClassNotFoundException | SQLException e) { return null; } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java index 58c7e8437..0af21a887 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java @@ -298,7 +298,7 @@ public class GMTimesTable extends Table { List>> batches = DBUtils.splitIntoBatchesWithID(gmTimes); - batches.stream().forEach(batch -> { + batches.forEach(batch -> { try { addNewGMTimesBatch(batch); } catch (SQLException e) { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index a5b4e609e..dc77351ae 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -218,7 +218,7 @@ public class SessionsTable extends Table { List>> batches = splitIntoBatches(sessions); - batches.stream().forEach(batch -> { + batches.forEach(batch -> { try { saveSessionBatch(batch); } catch (SQLException e) { From 4f3c542bdafb21696f92dd0200ed41db0ae53943 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 3 Aug 2017 13:28:10 +0300 Subject: [PATCH 02/30] Test for catching DB Commit issues --- .../plan/database/DatabaseCommitTest.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseCommitTest.java diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseCommitTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseCommitTest.java new file mode 100644 index 000000000..37f0d4771 --- /dev/null +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseCommitTest.java @@ -0,0 +1,128 @@ +package test.java.main.java.com.djrapitops.plan.database; + +import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.data.TPS; +import main.java.com.djrapitops.plan.data.UserData; +import main.java.com.djrapitops.plan.database.Database; +import main.java.com.djrapitops.plan.database.databases.SQLiteDB; +import main.java.com.djrapitops.plan.utilities.MiscUtils; +import org.bukkit.plugin.java.JavaPlugin; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import test.java.utils.MockUtils; +import test.java.utils.RandomData; +import test.java.utils.TestInit; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.sql.SQLException; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertTrue; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(JavaPlugin.class) +public class DatabaseCommitTest { + + + private Plan plan; + private Database db; + private int rows; + + + @Before + public void setUp() throws Exception { + TestInit t = TestInit.init(); + plan = t.getPlanMock(); + db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { + @Override + public void startConnectionPingTask() { + + } + + @Override + public void convertBukkitDataToDB() { + + } + }; + File f = new File(plan.getDataFolder(), "Errors.txt"); + rows = 0; + if (f.exists()) { + rows = Files.lines(f.toPath(), Charset.defaultCharset()).collect(Collectors.toList()).size(); + } + } + + /** + * @throws IOException + * @throws SQLException + */ + @After + public void tearDown() throws IOException, SQLException { + db.close(); + File f = new File(plan.getDataFolder(), "Errors.txt"); + int rowsAgain = 0; + if (f.exists()) { + List lines = Files.lines(f.toPath(), Charset.defaultCharset()).collect(Collectors.toList()); + rowsAgain = lines.size(); + for (String line : lines) { + System.out.println(line); + } + } + assertTrue("Errors were caught.", rows == rowsAgain); + } + + @Test + public void testCommitToDBFile() throws SQLException { + db.init(); + HashMap c = new HashMap<>(); + c.put("/plan", 1); + c.put("/tp", 4); + c.put("/pla", 7); + c.put("/help", 21); + db.saveCommandUse(c); + db.close(); + db.init(); + assertTrue(!db.getCommandUse().isEmpty()); + } + + @Test + public void testCommitToDBFile2() throws SQLException { + db.init(); + List tps = RandomData.randomTPS(); + db.getTpsTable().saveTPSData(tps); + db.close(); + db.init(); + assertTrue(!db.getTpsTable().getTPSData().isEmpty()); + } + + @Test + public void testCommitToDBFile3() throws SQLException { + db.init(); + UserData userData = MockUtils.mockUser(); + db.saveUserData(userData); + db.close(); + db.init(); + assertTrue(!db.getUserDataForUUIDS(Collections.singletonList(MockUtils.getPlayerUUID())).isEmpty()); + } + + @Test + public void testCommitToDBFile4() throws SQLException { + db.init(); + List data = RandomData.randomUserData(); + List uuids = data.stream().map(UserData::getUuid).collect(Collectors.toList()); + db.saveMultipleUserData(data); + db.close(); + db.init(); + assertTrue(!db.getUserDataForUUIDS(uuids).isEmpty()); + } +} From 3fc0abc4f18c8ebbc958e0aec9a4cb4e7368da90 Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Thu, 3 Aug 2017 13:23:59 +0200 Subject: [PATCH 03/30] Remove unnecessary .stream() call Optimizes .html files (tested) Removes unnecessary throws --- .../plan/data/additional/PluginData.java | 4 +- .../plan/data/cache/DataCacheHandler.java | 7 +- .../data/handling/importing/Importer.java | 2 +- .../plan/database/tables/GMTimesTable.java | 4 +- .../plan/database/tables/SessionsTable.java | 5 +- .../plan/database/tables/TPSTable.java | 5 +- .../plan/database/tables/UsersTable.java | 2 +- .../plan/ui/webserver/WebServer.java | 2 +- Plan/src/main/resources/analysis.html | 56 ++++++------- Plan/src/main/resources/player.html | 81 +++++++------------ .../plan/data/handling/info/KillInfoTest.java | 12 ++- Plan/src/test/java/utils/MockUtils.java | 3 +- Plan/src/test/java/utils/TestInit.java | 3 +- 13 files changed, 75 insertions(+), 111 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java index a06c57935..49bed7046 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java @@ -31,7 +31,7 @@ public abstract class PluginData { *

* Second parameter of any super constructor. */ - protected String placeholder; + protected final String placeholder; /** * Name of the plugin the data is coming from. *

@@ -43,7 +43,7 @@ public abstract class PluginData { *

* First parameter of any super constructor. */ - protected String sourcePlugin; + protected final String sourcePlugin; /** * Determines if the datapoint should only be used for the analysis page. *

diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java index 4c30f2d3c..a9f730ba2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java @@ -339,11 +339,8 @@ public class DataCacheHandler extends SessionCache { if (averages.isEmpty()) { return; } - try { - db.getTpsTable().saveTPSData(averages); - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - } + + db.getTpsTable().saveTPSData(averages); } private List calculateAverageTpsForEachMinute() { diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/Importer.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/Importer.java index 3812ab806..59f3a26c5 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/Importer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/Importer.java @@ -130,7 +130,7 @@ public abstract class Importer { handler.addToPool(importData(uuid, args)); } - plan.processStatus().finishExecution(processName); + processStatus.finishExecution(processName); } finally { plan.getAnalysisCache().enableAnalysis(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java index 0af21a887..2c6133fbe 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java @@ -220,7 +220,7 @@ public class GMTimesTable extends Table { List>> batches = DBUtils.splitIntoBatchesWithID(gmTimes); - batches.stream().forEach(batch -> { + batches.forEach(batch -> { try { saveGMTimesBatch(batch); } catch (SQLException e) { @@ -281,7 +281,7 @@ public class GMTimesTable extends Table { } } - private void addNewGMTimesRows(Map> gamemodeTimes) throws SQLException { + private void addNewGMTimesRows(Map> gamemodeTimes) { if (Verify.isEmpty(gamemodeTimes)) { return; } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index dc77351ae..3246e59de 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -265,10 +265,7 @@ public class SessionsTable extends Table { } } - /** - * @throws SQLException - */ - public void clean() throws SQLException { + public void clean() { // TODO Clean sessions before Configurable time span } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java index 904ddcbb5..b87133d2f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java @@ -117,10 +117,9 @@ public class TPSTable extends Table { * @param data * @throws SQLException */ - public void saveTPSData(List data) throws SQLException { + public void saveTPSData(List data) { List> batches = DBUtils.splitIntoBatches(data); - batches.stream() - .forEach(batch -> { + batches.forEach(batch -> { try { saveTPSBatch(batch); } catch (SQLException e) { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java index 21e912da8..90be86038 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java @@ -683,7 +683,7 @@ public class UsersTable extends Table { List> batches = DBUtils.splitIntoBatches(newUserdata); - batches.stream() + batches .forEach(batch -> { try { insertNewUserData(batch); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java index b1ab4dc6e..0d55fcbed 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java @@ -169,7 +169,7 @@ public class WebServer { } } - private boolean startHttpsServer() throws IOException { + private boolean startHttpsServer() { String keyStorePath = Settings.WEBSERVER_CERTIFICATE_PATH.toString(); if (!Paths.get(keyStorePath).isAbsolute()) { keyStorePath = plugin.getDataFolder() + File.separator + keyStorePath; diff --git a/Plan/src/main/resources/analysis.html b/Plan/src/main/resources/analysis.html index 62d10ced7..113c83217 100644 --- a/Plan/src/main/resources/analysis.html +++ b/Plan/src/main/resources/analysis.html @@ -14,7 +14,7 @@ left: 0; width: 100%; height: 88px; - padding: 0px; + padding: 0; background-color: #348e0f; z-index: 1; } @@ -44,11 +44,11 @@ text-decoration: none; background-color: #89c471; color: #fff; - margin: 10px 0px; + margin: 10px 0; } .sidenav a { - margin: 10px 0px; + margin: 10px 0; width: 100%; padding: 8px 8px 8px 16px; text-decoration: none; @@ -86,10 +86,9 @@ background-color: #fff; padding: 5px; text-decoration: none;!important; - color: #000 + color: #000; text-align: left; margin: 5px; - padding: 5px; } .box p { @@ -106,7 +105,7 @@ .content { text-align: center; padding: 5px; - margin: 0px; + margin: 0; } .row { width: 50%; @@ -151,8 +150,7 @@ .headerbox { color: #348e0f; display: inline-block; - border-style: solid; - border-color: #348e0f; + border: solid #348e0f; padding: 8px 14px; border-radius: 3px; width: 95%; @@ -165,9 +163,9 @@ font-size: x-large; } .header-label { - padding: 0px; - margin: 0px; - border: 0px; + padding: 0; + margin: 0; + border: 0; } .button { padding: 8px 14px; @@ -183,8 +181,7 @@ .table { border-collapse: collapse; table-layout: fixed; - border-style: solid; - border-width: 1px; + border: 1px solid; padding: 8px 14px; width: 100%; } @@ -243,20 +240,18 @@ display: none; } header { - margin: 0px; - padding 0px; + margin: 0; + padding: 0; } header h1 { - margin: 0px; + margin: 0; } header img { + padding: 0; margin: 0px; - padding: 0px; - margin-right: 0px; } header p { - margin: 0px; - margin-top: 5px; + margin: 5px 0px 0px; } .tab { flex-direction: column; @@ -268,11 +263,11 @@ width: 100%; } .sidenav { - width: 0%; + width: 0; transition: 0s; } .main-limiter { - margin-left: 0%; + margin-left: 0; width: 100%; } } @@ -342,7 +337,7 @@ -

+

Unique Players: %uniquejoinsday% | Unique/Day: %avguniquejoinsday%

@@ -419,7 +414,7 @@ -
+

Month:
@@ -678,7 +673,8 @@ var playersOnlineSeries = { name: 'Players Online', data: %playersonlineseries%, - type: 'areaspline', + type: 'areaspline' + , color: '#%playersgraphcolor%', tooltip: { valueDecimals: 0 @@ -797,7 +793,7 @@ @@ -1086,12 +1086,12 @@ var myChart = Highcharts.chart('worldPie', { chart: { plotBackgroundColor: null, - plotBorderWidth: null, - plotShadow: false, + plotBorderWidth: null, + plotShadow: false, type: 'pie' }, title: {text: 'World Playtime'}, - subtitle: {text: '%worldtotal%'}, + subtitle: {text: '%worldtotal%'}, tooltip: { pointFormat: '{series.name}: {point.percentage:.2f}%' }, @@ -1111,14 +1111,14 @@ + + - -

diff --git a/Plan/src/main/resources/locale_FI.txt b/Plan/src/main/resources/locale_FI.txt new file mode 100644 index 000000000..fa175215e --- /dev/null +++ b/Plan/src/main/resources/locale_FI.txt @@ -0,0 +1,118 @@ +Analysis - Third Party || Analyysi | Analysoidaan Kolmannen osapuolen lähteitä +Analysis FAIL - Fetch Exception || Analyysi | Datan haku ei onnistunut, Virhe. +Analysis FAIL - No Data || Analyysi | Analyysi ei onnistunut, Ei dataa. +Analysis FAIL - No Players || Analyysi | Analyysi ei onnistunut, Ei tunnettuja pelaajia +Analysis - Fetch Phase || Analyysi | Haetaan Dataa.. +Analysis - Fetch Phase Start || Analyysi | Tarkistetaan saatavilla olevia pelaajia.. +Analysis - Complete || Analyysi | Analyysi Valmis. (meni REPLACE0ms) REPLACE1 +Analysis - Begin Analysis || Analyysi | Data Haettu (REPLACE0 käyttäjää, meni REPLACE1ms), aloitetaan Datan analysointi.. +Analysis - Start || Analyysi | Aloitetaan Analyysi.. +>Constant - CMD Footer || §f» +>Constant - List Ball || §7 •§2 +Cmd FAIL - No Data View || §e[Plan] Dataa ei voida näyttää. +Cmd FAIL - No Permission || §c[Plan] Sinulla ei ole lupaa tähän komentoon. +Cmd FAIL - Requires Arguments || §c[Plan] Komento tarvitsee argumentteja. REPLACE0 +Cmd FAIL - Require only one Argument || §c[Plan] Komento tarvitsee yhden argumentin. +Cmd FAIL - Timeout || §c[Plan] REPLACE0 komento aikakatkaistu! Tarkista '/plan status' & konsoli. +Cmd FAIL - Unknown Username || §c[Plan] Pelaajaa ei löytynyt tietokannasta +Cmd FAIL - Unseen Username || §c[Plan] Pelaaja ei ole pelannut palvelimella. +Cmd FAIL - Invalid Username || §c[Plan] Pelaajaa ei ole olemassa. +Cmd Header - Analysis || §f»§2 Player Analytics - Analyysin tulokset +Cmd Header - Info || §f»§2 Player Analytics - Tietoja +Cmd Header - Inspect || §f»§2 Player Analytics - Pelaajan tiedot: +Cmd Header - Search || §f»§2 Player Analytics - Haun tulokset: +In Depth Help - /plan analyze ? || §2Analyysi Komento\§f Päivittää Analyysin ja antaa linkin sen sivulle.\§7 /plan status-komentoa voidaan käyttää Analyysin tilan tarkistamiseen\§7 Vaihtoehtoiset komennot: analyze, analyse, analysis, a +In Depth Help - /plan inspect ? || §2Inspect Komento\§f Antaa linkin pelaajan sivulle.\§7 Oman sivun voi nähdä komennolla /plan inspect\§7 Vaihtoehtoiset komennot /plan +In Depth Help - /plan list ? || §2List Komento\§f Antaa linkin pelaajalista sivulle.\§7 Pelaajalista sivulla näkyy kaikki välimuistissa olevat pelaajien sivut.\§7 Vaihtoehtoiset komennot: /plan pl +In Depth Help - /plan manage ? || §2Manage Komento\§f Käytetään Tietokannan hallitsemiseen\§7 Vaihtoehtoiset komennot /plan m\§7 /plan m - Listaa komennot\§7 /plan m ? - tarkempi apu +In Depth Help - /plan manage clear ? || §2Manage Clear Komento\§f Tyhjentää kaiken tiedon tietokannasta\§7 Plan kannattaa uudelleenkäynnistää onnistuneen tyhjennyksen jälkeen\§7 Vaihtoehtoiset komennot /plan pl +In Depth Help - /plan manage dump ? || §2Manage Dump Komento\§f Heittää kaiken tiedon hastebiniin kehittäjän avuksi +In Depth Help - /plan manage hotswap ? || §2Manage Hotswap Komento\§f Vaihtaa tietokantaa lennossa\§7 Ei vaihda tietokantaa mikäli yhteyttä ei saada muodostettua +In Depth Help - /plan manage import ? || §2Manage Import Komento\§f Tuo Dataa muista lähteistä\§7 Analyysi poistetaan käytöstä tuonnin ajaksi +In Depth Help - /plan manage remove ? || §2Manage Remove Komento\§f Poistaa käyttäjän datan aktiivisesta tietokannasta +In Depth Help - /plan ? || §2/plan - Pää komento\§f Käytetään kaikkien komentojen käyttämiseen\§7 /plan - Listaa komennot\§7 /plan ? - tarkempi apu +In Depth Help - /plan qanalyze ? || §2Quick Analysis Komento\§f Näyttää osan analyysin tietoja pelissä\§7 Vähemmän tietoa kuin nettisivulla.\§7 Vaihtoehtoiset komennot: qanalyze, ganalyse, qanalysis, qa +In Depth Help - /plan qinspect ? || §2Quick Inspect Komento\§f Näyttää osan pelaajan tiedoista pelissä.\§7 Vähemmän tietoa kuin nettisivulla.\§7 Vaihtoehtoiset komennot /plan qi +In Depth Help - /plan search ? || §2Search Komento\§f Hakee pelaajia joiden nimestä löytyy haettava osa.\§7 Esim: /plan search 123 - Hakee pelaajat joiden nimestä löytyy 123 +In Depth Help - /plan webuser ? || §2Web User Manage Komento\§f Hallitsee Nettiserverin käyttäjiä\§7 Käyttäjillä on lupa taso:\§f 0 - Kaikki sivut\§f 1 - /players & kaikki pelaaja sivut\§f 2 - Oma pelaajan sivu\§7 Vaihtoehtoiset komennot /plan web +In Depth Help - /plan webuser register ? || §2Web Register Komento\§f Rekisteröi uuden käyttäjän nettiserverille.\§7 Toiselle henkilölle rekisteröinti tarvitsee plan.webmanage luvan.\§7 Passwords are hashed with PBKDF2 (64,000 iterations of SHA1) using a cryptographically-random salt. +Analysis NOTIFY - Temporary Disable || §eAnalyysi poistettu käytöstä toistaiseksi, /plan status kertoo lisää +Cmd - Click Me || Klikkaa minua +Cmd - Fetch Data || §f»§2 Haetaan tietoja välimuistiin.. +Cmd - Link || §7 • §2Linkki: §f +Cmd - No Results || §7 • §2Ei tuloksia hakusanalle §7REPLACE0§2. +Cmd - Reload Success || §a[Plan] Uudelleenkäynnistys Valmis. +Cmd - Results || §7 Sopivat pelaajat: §f +Cmd - Searching || §f»§2Haetaaan.. +Cmd - Usage /plan analyze || Katso serverin analyysi +Cmd - Usage /plan help || Katso komentolista. +Cmd - Usage /plan info || Tarkista Plan versio +Cmd - Usage /plan inspect || Tutki pelaajan sivua +Cmd - Usage /plan list || Listaa välimuistissa olevat pelaajat +Cmd - Usage /plan manage || Tietokannan hallinta komento +Cmd - Usage /plan manage backup || Varmuuskopioi tietokanta .db tiedostoon +Cmd - Usage /plan manage clean || Putsaa vanha data tietokannasta +Cmd - Usage /plan manage clear || Putsaa KAIKKI data tietokannasta +Cmd - Usage /plan manage dump || Luo Hastebin loki kehittäjän avuksi. +Cmd - Usage /plan manage hotswap || Vaihda tietokantaa lennossa ja käynnistä Plan uudelleen +Cmd - Usage /plan manage import || Tuo dataa muualta aktiiviseen tietokantaan +Cmd - Usage /plan manage move || Kopioi tiedot tietokannasta toiseen, ylikirjoittaen vanhat arvot. +Cmd - Usage /plan manage remove || Poista pelaajan tiedot aktiivisesta tietokannasta +Cmd - Usage /plan manage restore || Palauta varmuuskopio +Cmd - Usage /plan qanalyze || Tutki pika-analyysia +Cmd - Usage /plan qinspect || Tutki pelaajan tietoja pelissä +Cmd - Usage /plan reload || Restart the Plugin (Reloads config) +Cmd - Usage /plan search || Hae pelaajaa +Cmd - Usage /plan webuser || Hallitse nettikäyttäjiä +Cmd - Usage /plan webuser check || Tarkista nettikäyttäjä ja sen lupa taso +Cmd - Usage /plan webuser delete || Poista nettikäyttäjä +Cmd - Usage /plan webuser level || Tietoa lupa tasoista +Cmd - Usage /plan webuser register || Register a user for the webserver +Disable || Player Analytics Disabled. +Disable - Save || Tallennetaan välimuistia.. +Disable - WebServer || Sammutetaan Web palvelin.. +Enable || Player Analytics Enabled. +Enable - Boot Analysis 30s Notify || Analyysi | Käynnistyksen yhteinen analyysi 30 sekunnin kuluttua.. +Enable - Boot Analysis Notify || Analysis | Aloitetaan Käynnistyksen yhteinen analyysi.. +Enable Db FAIL - Disable Info || Database initialization has failed, disabling Plan. +Enable - Db Info || REPLACE0-tietokantayhteys onnistui. +Enable - Db || Tietokannan käynnistys.. +Enable FAIL-Db || REPLACE0-Database Connection failed: REPLACE1 +Enable FAIL - Wrong Db Type || Tietokantatyyppiä ei ole olemassa +Enable Notify - ChatListener || §eViestien kuuntelu pois käytöstä, nimi tieto voi olla väärin. +Enable Notify - Disabled CommandListener || §eKomentojen kuuntelu pois käytöstä. +Enable Notify - Disabled DeathListener || §eKuolema kuuntelu pois käytöstä, tappoja ei lasketa. +Enable Notify-Empty IP || §eIP in server.properties is empty & AlternativeServerIP is not used, incorrect links will be given! +Enable Notify - No data view || §eNetti Palvelin Poissa käytöstä, mutta Alternative IP/TextUI ei ole käytössä, dataa ei voi tarkastella! +Enable - WebServer || Käynnistetään Netti Palvelin.. +Enable - WebServer Info || Netti Palvelin pyörii PORTILLA REPLACE0 +Html - Active || Pelaaja on aktiivinen +Html - Banned || | Pannassa +Html - Inactive || Pelaaja ei ole aktiivinen +Html - No Extra Plugins ||

Ei kauheasti lisä plugineita.

+Html - Offline || | Offline +Html - Online || | Online +Html - OP || , Operaattori (Op) +Html - Table No Kills || Ei tappoja +Manage FAIL - Confirm Action || §c[Plan] Lisää -a vahvistaaksesi! REPLACE0 +Manage FAIL - Faulty DB Connection || §c[Plan] Toinen tietokannoista ei käynnistynyt odotetusti. +Manage FAIL - Backup File Not Found || §c[Plan] Varmuuskopiota ei ole olemassa! +Manage FAIL - Incorrect DB || §c[Plan] Väärä tietokanta! (sqlite/mysql hyväksytään): +Manage FAIL - Incorrect Plugin || §c[Plan] Plugin ei ole tuettu: +Manage FAIL - Empty DB || §c[Plan] Tietokannassa ei ole pelaaja dataa! +Manage FAIL - Unenabled Plugin || §c[Plan] Plugin ei ole käynnissä: +Manage FAIL - Same DB || §c[Plan] Ei voida siirtää samaan tietokantaan! +Manage - Clear Success || §a[Plan] Kaikki data siirretty onnistuneesti! +Manage - Remind Config Change || §e[Plan] Muista vaihtaa tietokantaa ja käynnistää Plan uudelleen. +Manage - Copy Success || §a[Plan] Kaikki tiedot kopioitu onnistuneesti! +Manage - Process Fail || §c[Plan] Jokin meni vikaan dataa käsitellessä! +Manage - Import || §f» §2 Tuodaan Dataa.. +Manage - Move Success || §a[Plan] Kaikki data siirretty onnistuneesti! +Manage - Remove Success || §f» §fREPLACE0:n§2 data poistettiin tietokannasta §fREPLACE1§2. +Manage - Start || »§7 Käsitellään Dataa.. +Manage - Success || §f» §2 Onnistui! +Manage NOTIFY - Overwrite || Tiedot REPLACE0-tietokannassa ylikirjoitetaan! +Manage NOTIFY - Partial Overwrite || Osa tiedoista REPLACE0-tietokannassa ylikirjoitetaan! +Manage NOTIFY - Remove || Tiedot REPLACE0-tietokannassa poistetaan! +Manage NOTIFY - Rewrite || Tiedot REPLACE0-tietokannassa uudelleenkirjoitetaan! +WARN - Too Small Queue Size || Queue size is too small! (REPLACE0), change the setting to a higher number! (Currently REPLACE1) diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/MiscUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/MiscUtilsTest.java index 45ceb55bb..b19bec2f7 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/MiscUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/MiscUtilsTest.java @@ -11,6 +11,7 @@ import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; @@ -118,6 +119,7 @@ public class MiscUtilsTest { * */ @Test + @Ignore("DB mock") public void testGetMatchingDisplaynames() throws Exception { TestInit.init(); String search = "testname"; @@ -133,6 +135,7 @@ public class MiscUtilsTest { * */ @Test + @Ignore("DB mock") public void testGetMatchingDisplaynames2() throws Exception { TestInit.init(); String search = "2"; From eb00a94c8891a279b17ed482d777ee3a37d470c4 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 10 Aug 2017 20:38:00 +0300 Subject: [PATCH 25/30] Fix #227 (Removed exception throw) --- .../java/com/djrapitops/plan/data/time/TimeKeeper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/data/time/TimeKeeper.java b/Plan/src/main/java/com/djrapitops/plan/data/time/TimeKeeper.java index 33e45499c..50c312a04 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/time/TimeKeeper.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/time/TimeKeeper.java @@ -70,9 +70,9 @@ public abstract class TimeKeeper { */ public void changeState(String newState, long playTime) throws IllegalArgumentException, IllegalStateException { Verify.nullCheck(newState); - if (playTime < lastStateChange) { - throw new IllegalStateException("Given Playtime is lower than last status change time: " + playTime + " / " + lastStateChange); - } +// if (playTime < lastStateChange) { +// throw new IllegalStateException("Given Playtime is lower than last status change time: " + playTime + " / " + lastStateChange); +// } if (state == null) { state = newState; } @@ -81,7 +81,7 @@ public abstract class TimeKeeper { currentTime = 0L; } long diff = playTime - lastStateChange; - times.put(state, currentTime + diff); + times.put(state, currentTime + Math.abs(diff)); state = newState; lastStateChange = playTime; } From a11e507308f907f30ecc10cabd05ac0f521fc50c Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 10 Aug 2017 20:40:35 +0300 Subject: [PATCH 26/30] 3.6.2 Version bump --- Plan/pom.xml | 2 +- Plan/src/main/resources/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plan/pom.xml b/Plan/pom.xml index d6e851fea..85bc6745b 100644 --- a/Plan/pom.xml +++ b/Plan/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.djrapitops Plan - 3.6.1 + 3.6.2 jar diff --git a/Plan/src/main/resources/plugin.yml b/Plan/src/main/resources/plugin.yml index 9214c2da2..3e0993c53 100644 --- a/Plan/src/main/resources/plugin.yml +++ b/Plan/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Plan author: Rsl1122 main: main.java.com.djrapitops.plan.Plan -version: 3.6.1 +version: 3.6.2 softdepend: - OnTime - EssentialsX From 1839307e3e1d4d2fec252aa6bd80f87c940cb47d Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 10 Aug 2017 20:59:48 +0300 Subject: [PATCH 27/30] Update Locale Documentation --- documentation/Configuration.md | 1 + documentation/Localization.md | 21 +++++++++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/documentation/Configuration.md b/documentation/Configuration.md index ccec8dd77..c465240b4 100644 --- a/documentation/Configuration.md +++ b/documentation/Configuration.md @@ -15,6 +15,7 @@ Config.Point | Version introduced | Type | Default | Description --- | ---- | ------ | --- | --------------------------------- Debug | 3.0.0 | boolean | false | Enables debug messages on console. Locale | 2.5.0 | String | default | Two letter Locale combination. Can be set to one of the Available locales. If a faulty combination is used, default locale will be used. [Available locales](https://github.com/Rsl1122/Plan-PlayerAnalytics/tree/master/Plan/localization) +WriteNewLocaleFileOnStart | 3.6.2 | boolean | false | Setting this to true & reloading the plugin will generate a new locale.txt & it will be set back to false. [Localization](/documentation/Localization.md) UseTextUI | 3.0.0 | boolean | false | Redirects */plan inspect* and */plan analyze* commands to display same messages as */plan qinspect* & */plan qanalyze* Data.ChatListener | 3.4.2 | boolean | true | Enables Chat listener Data.GatherKillData | 3.4.2 | boolean | true | Enables Death listener diff --git a/documentation/Localization.md b/documentation/Localization.md index 85afcdcc2..6769d1efa 100644 --- a/documentation/Localization.md +++ b/documentation/Localization.md @@ -2,30 +2,27 @@ # Localization This article will tell you how you can change the messages seen in the plugin. -(Introduced in version 2.5.0) +(Introduced in version 2.5.0 & Revamped in 3.6.2) -By Default Plan uses internal Locale found inside Phrase.java & Html.java (Config setting: default) - -- [Phrase](https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/java/com/djrapitops/plan/Phrase.java) -- [Html](https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/java/com/djrapitops/plan/ui/Html.java) +By Default Plan uses internal Locale found inside Locale.java (Config setting: default) +- [Locale](https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/java/com/djrapitops/plan/locale/Locale.java) ## Config setting In the config, there is a setting for Locale. -Setting this to, for example EN, will attempt to fetch locale from Github to be used with the plugin. -Unfortunately when this setting is used, the Color customization setting for commands is not used. This can be circumvented by copying the existing locale from Github to `/plugins/Plan/locale.txt` and changing the colors in the file. +Setting this to, for example FI, (Finnish) will attempt to use locale from inside the plugin jar. +Inside the plugin there are multiple locale files. -If you want to use your own locale, just copy contents of this file on github to `/plugins/Plan/locale.txt` -Now you can customize all in game messages! +You can generate a new locale (default values) by setting the config setting **WriteNewLocaleFileOnStart** to true. +This will generate a locale.txt to the plugin's folder & that will be used when present. + +To change the messages, only change the parts on the right, left ones are identifiers. Some messages in the html pages are not loaded from the text file, and need to be changed seperately. This can be done by copying the html files from the .jar to the plugin folder and editing them. - [Available Locales](https://github.com/Rsl1122/Plan-PlayerAnalytics/tree/master/Plan/localization) -## Known caveats: -- The 'äåö'-letters etc do not work on the webpage, this will hopefully be fixed in a future update. - ## End If you want to help me out with localizing the plugin to your language, you can translate the locale file to your language and send the contents to me in one way: - Do a pull request From aa09b6707d990f359a3811044c93d0f2b436ad98 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 10 Aug 2017 21:30:14 +0300 Subject: [PATCH 28/30] Deutsch Locale --- Plan/src/main/resources/locale_DE.txt | 118 ++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Plan/src/main/resources/locale_DE.txt diff --git a/Plan/src/main/resources/locale_DE.txt b/Plan/src/main/resources/locale_DE.txt new file mode 100644 index 000000000..61c875e46 --- /dev/null +++ b/Plan/src/main/resources/locale_DE.txt @@ -0,0 +1,118 @@ +Analysis - Third Party || Analysis | Analyzing additional data sources (3rd party) +Analysis FAIL - Fetch Exception || Analysis | Failed to fetch data for Analysis, Exception occurred. +Analysis FAIL - No Data || Analyse | Analyse fehlgeschlagen, keine Daten in der Datenbank. +Analysis FAIL - No Players || Analyse | Analyse fehlgeschlagen, keine bekannten Spieler. +Analysis - Fetch Phase || Analyse | Hole Daten... +Analysis - Fetch Phase Start || Analyse | Suche nach verfügbaren Spieler... +Analysis - Complete || Analyse | Analyse vollständig. (dauerte REPLACE0ms) REPLACE1 +Analysis - Begin Analysis || Analyse | Daten geholt (REPLACE0 spieler, dauerte REPLACE1ms), beginne mit der Analyse der Daten... +Analysis - Start || Analyse | Beginne die Analyse der Spieler Daten... +>Constant - CMD Footer || §f» +>Constant - List Ball || §7 •§2 +Cmd FAIL - No Data View || §e[Plan] Dieser Befehl kann nur benutzt werden wenn Webserver/TextUI auf dem Server aktiviert ist. +Cmd FAIL - No Permission || §c[Plan] Du hast nicht die benötigte Berechtigung. +Cmd FAIL - Requires Arguments || §c[Plan] Dieser Befehl erfordert Argumente. REPLACE0 +Cmd FAIL - Require only one Argument || §c[Plan] Der Befehl benötigt ein Argument. +Cmd FAIL - Timeout || §c[Plan] REPLACE0 Befehl ausgetimed! Ansehen '/plan status' & Serverkonsole. +Cmd FAIL - Unknown Username || §c[Plan] Der Spielername konnte in der Datenbank nicht gefunden werden. +Cmd FAIL - Unseen Username || §c[Plan] Dieser Spieler war noch nie auf diesem Server. +Cmd FAIL - Invalid Username || §c[Plan] Dieser Spieler existiert nicht. +Cmd Header - Analysis || §f»§2 Player Analytics - Analyse Ergebnisse +Cmd Header - Info || §f»§2 Player Analytics - Info +Cmd Header - Inspect || §f»§2 Player Analytics - Überprüfe die Ergebnisse: +Cmd Header - Search || §f»§2 Player Analytics - Suchergebnisse für: +In Depth Help - /plan analyze ? || §2Analysis Command\§f Used to Refresh analysis cache & Access the result page\§7 /plan status can be used to check status of analysis while it is running.\§7 Aliases: analyze, analyse, analysis, a +In Depth Help - /plan inspect ? || §2Inspect command\§f Used to get a link to User's inspect page.\§7 Own inspect page can be accessed with /plan inspect\§7 Alias: /plan +In Depth Help - /plan list ? || §2List command\§f Used to get a link to players page.\§7 Players page contains links to all cached inspect pages.\§7 Alias: /plan pl +In Depth Help - /plan manage ? || §2Manage command\§f Used to Manage Database of the plugin.\§7 Alias: /plan m\§7 /plan m - List subcommands\§7 /plan m ? - in depth help +In Depth Help - /plan manage clear ? || §2Manage Clear command\§f Used to delete ALL data in the active database.\§7 Plugin should be reloaded after successful clear.\§7 Alias: /plan pl +In Depth Help - /plan manage dump ? || §2Manage Dump command\§f Used to dump important data for bug reporting to hastebin. +In Depth Help - /plan manage hotswap ? || §2Manage Hotswap command\§f Used to change database in use on the fly.\§7 Does not change database if connection fails +In Depth Help - /plan manage import ? || §2Manage Import command\§f Used to import data from other sources\§7 Analysis will be disabled during import. +In Depth Help - /plan manage remove ? || §2Manage Remove command\§f Used to Remove user's data from the active database. +In Depth Help - /plan ? || §2/plan - Main Command\§f Used to access all SubCommands & help\§7 /plan - List subcommands\§7 /plan ? - in depth help +In Depth Help - /plan qanalyze ? || §2Quick Analysis command\§f Used to get in game info about analysis.\§7 Has less info than full Analysis web page.\§7 Aliases: qanalyze, ganalyse, qanalysis, qa +In Depth Help - /plan qinspect ? || §2Quick Inspect command\§f Used to get some inspect info in game.\§7 Has less info than full Inspect web page.\§7 Alias: /plan qi +In Depth Help - /plan search ? || §2Search command\§f Used to get a list of Player names that match the given argument.\§7 Example: /plan search 123 - Finds all users with 123 in their name. +In Depth Help - /plan webuser ? || §2Web User Manage command\§f Used to manage web users of the plugin\§7 Users have a permission level:\§f 0 - Access to all pages\§f 1 - Access to /players & all inspect pages\§f 2 - Access to own inspect page\§7 Alias: /plan web +In Depth Help - /plan webuser register ? || §2Web Register command\§f Used to register a new user for the webserver.\§7 Registering a user for another player requires plan.webmanage permission.\§7 Passwords are hashed with PBKDF2 (64,000 iterations of SHA1) using a cryptographically-random salt. +Analysis NOTIFY - Temporary Disable || §eAnalysis has been temporarily disabled due to expensive task, use /plan status for info. +Cmd - Click Me || Klick Mich +Cmd - Fetch Data || §f»§2 Hole Daten ins Cache... +Cmd - Link || §7 •§2 Link: §f +Cmd - No Results || §7 •§2 Keine Ergebnisse für §7REPLACE0§2. +Cmd - Reload Success || §a[Plan] Reload abgeschlossen. +Cmd - Results || §7 Übereinstimmender Spieler: §f +Cmd - Searching || §f»§2Searching.. +Cmd - Usage /plan analyze || Zeige die Server Analyse +Cmd - Usage /plan help || Show command list. +Cmd - Usage /plan info || Zeige die Version von Plan +Cmd - Usage /plan inspect || Prüfe Spieler Daten +Cmd - Usage /plan list || List to all cached players +Cmd - Usage /plan manage || Datenbank Management Befehl +Cmd - Usage /plan manage backup || Erstelle eine Sicherheitskopie der Datenbank als .db Datei +Cmd - Usage /plan manage clean || Clear old data from the database +Cmd - Usage /plan manage clear || Leere Daten aus einer Datenbank +Cmd - Usage /plan manage dump || Create a Hastebin log for Dev for easier Issue reporting. +Cmd - Usage /plan manage hotswap || Wechsle zu einer anderen Datenbank & starte das Plugin neu +Cmd - Usage /plan manage import || Importiere Daten von unterstützten Plugins zur aktiven Datenbank. +Cmd - Usage /plan manage move || Kopiere Daten von einer Datenbank zur anderen & überschreibe die Werte +Cmd - Usage /plan manage remove || Entferne die Spieler Daten aus der aktiven Datenbank. +Cmd - Usage /plan manage restore || Stelle eine Sicherheitskopie einer Datenbank aus einer Datei wieder her. +Cmd - Usage /plan qanalyze || View the Server Analysis as Text +Cmd - Usage /plan qinspect || Inspect Player's Data as Text +Cmd - Usage /plan reload || Lade die Plugin Konfiguration neu. +Cmd - Usage /plan search || Suche nach einem Spieler +Cmd - Usage /plan webuser || Manage Webusers +Cmd - Usage /plan webuser check || Check a webuser and their permission level. +Cmd - Usage /plan webuser delete || Delete a webuser +Cmd - Usage /plan webuser level || Info about permission levels. +Cmd - Usage /plan webuser register || Register a user for the webserver +Disable || Player Analytics deaktiviert. +Disable - Save || Daten im Cache werden gespeichert... +Disable - WebServer || Webserver wird heruntergefahren... +Enable || Player Analytics aktiviert. +Enable - Boot Analysis 30s Notify || Analyse | Boot Analyse in 30 Sekunden... +Enable - Boot Analysis Notify || Analyse | Starte Boot Analyse... +Enable Db FAIL - Disable Info || Datenbank Initialisierung fehlgeschlagen, deaktiviere Plan. +Enable - Db Info || REPLACE0-Datenbank Verbindung hergestellt. +Enable - Db || Datenbank Initialisierung... +Enable FAIL-Db || REPLACE0-Datenbank Verbindung fehlgeschlagen: REPLACE1 +Enable FAIL - Wrong Db Type || Dieser Datenbank Typ existiert nicht. +Enable Notify - ChatListener || §eChat listener disabled, nickname info inaccurate. +Enable Notify - Disabled CommandListener || §eCommand usage listener disabled. +Enable Notify - Disabled DeathListener || §eDeath listener disabled, player & mob kills not recorded. +Enable Notify-Empty IP || §e[Plan] IP in server.properties ist leer & Alternative ServerIP wird nicht benutzt, fehlerhafte Links werden ausgegeben! +Enable Notify - No data view || §eWebserver deaktiviert aber Alternative IP/PlanLite wird nicht benutzt, Daten können nicht angezeigt werden! +Enable - WebServer || Initialisiere Webserver... +Enable - WebServer Info || Webserver läuft auf PORT REPLACE0 +Html - Active || Spieler ist aktiv +Html - Banned || | Gesperrt +Html - Inactive || Spieler ist inaktiv +Html - No Extra Plugins ||

No extra plugins registered.

+Html - Offline || | Offline +Html - Online || | Online +Html - OP || , Operator (Op) +Html - Table No Kills || No Kills +Manage FAIL - Confirm Action || §c[Plan] Füge -a hinzu um den Befehl zu bestätigen! REPLACE0 +Manage FAIL - Faulty DB Connection || §c[Plan] Eine der Datenbanken wurde nicht richtig initialisiert. +Manage FAIL - Backup File Not Found || §c[Plan] Sicherheitskopie existiert nicht! +Manage FAIL - Incorrect DB || §c[Plan] Falsche Datenbank! (SQlite/MySQL wird unterstützt): +Manage FAIL - Incorrect Plugin || §c[Plan] Plugin nicht unterstützt: +Manage FAIL - Empty DB || §c[Plan] Datenbank hat keine Spieler Daten! +Manage FAIL - Unenabled Plugin || §c[Plan] Plugin ist nicht aktiviert: +Manage FAIL - Same DB || §c[Plan] Kann nicht zur selben Datenbank bewegen! +Manage - Clear Success || §a[Plan] Alle Daten wurden erfolgreich gesäubert! +Manage - Remind Config Change || §e[Plan] Vergiss nicht zur neuen Datenbank zu wechseln und das Plugin neu zu laden +Manage - Copy Success || §a[Plan] Alle Daten wurden erfolgreich kopiert! +Manage - Process Fail || §c[Plan] Irgendwas lief schief während die Daten verarbeitet wurden! +Manage - Import || §f» §2 Importiere Daten... +Manage - Move Success || §a[Plan] Alle Daten wurden erfolgreich verschoben! +Manage - Remove Success || §f» §2Daten von §fREPLACE0§2 wurden aus dieser Datenbank entfernt §fREPLACE1§2. +Manage - Start || »§7 Verarbeite Daten... +Manage - Success || §f» §2 Erfolgreich! +Manage NOTIFY - Overwrite || Daten in REPLACE0-Datenbank werden überschrieben! +Manage NOTIFY - Partial Overwrite || Einige Daten in REPLACE0-Datenbank werden überschrieben! +Manage NOTIFY - Remove || Daten in REPLACE0-Datenbank werden entfernt! +Manage NOTIFY - Rewrite || Daten in REPLACE0-Datenbank werden neu geschrieben! +WARN - Too Small Queue Size || Queue size is too small! (REPLACE0), change the setting to a higher number! (Currently REPLACE1) From c913524179d59a8b651a41d5f138c52ccdcf9ad5 Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Thu, 10 Aug 2017 23:46:14 +0200 Subject: [PATCH 29/30] Update DE locale --- .../plan/command/commands/ListCommand.java | 1 + Plan/src/main/resources/locale_DE.txt | 119 +++++++++--------- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java index b9fada386..95290a651 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java @@ -42,6 +42,7 @@ public class ListCommand extends SubCommand { if (!Check.isTrue(ConditionUtils.pluginHasViewCapability(), Locale.get(Msg.CMD_FAIL_NO_DATA_VIEW) + "", sender)) { return true; } + sendListMsg(sender); return true; } diff --git a/Plan/src/main/resources/locale_DE.txt b/Plan/src/main/resources/locale_DE.txt index 61c875e46..55faf3e2c 100644 --- a/Plan/src/main/resources/locale_DE.txt +++ b/Plan/src/main/resources/locale_DE.txt @@ -1,73 +1,73 @@ -Analysis - Third Party || Analysis | Analyzing additional data sources (3rd party) -Analysis FAIL - Fetch Exception || Analysis | Failed to fetch data for Analysis, Exception occurred. +Analysis - Third Party || Analysis | Analysiere zusätzliche Datenquellen (von Dritten) +Analysis FAIL - Fetch Exception || Analysis | Das Abrufen von Daten für die Analyse ist fehlgeschlagen, ein Fehler ist aufgetreten. Analysis FAIL - No Data || Analyse | Analyse fehlgeschlagen, keine Daten in der Datenbank. Analysis FAIL - No Players || Analyse | Analyse fehlgeschlagen, keine bekannten Spieler. Analysis - Fetch Phase || Analyse | Hole Daten... Analysis - Fetch Phase Start || Analyse | Suche nach verfügbaren Spieler... Analysis - Complete || Analyse | Analyse vollständig. (dauerte REPLACE0ms) REPLACE1 -Analysis - Begin Analysis || Analyse | Daten geholt (REPLACE0 spieler, dauerte REPLACE1ms), beginne mit der Analyse der Daten... +Analysis - Begin Analysis || Analyse | Daten geholt (REPLACE0 Spieler, dauerte REPLACE1ms), beginne mit der Analyse der Daten... Analysis - Start || Analyse | Beginne die Analyse der Spieler Daten... >Constant - CMD Footer || §f» >Constant - List Ball || §7 •§2 -Cmd FAIL - No Data View || §e[Plan] Dieser Befehl kann nur benutzt werden wenn Webserver/TextUI auf dem Server aktiviert ist. +Cmd FAIL - No Data View || §e[Plan] Dieser Befehl kann nur benutzt werden wenn der WebServer oder das TextUI auf dem Server aktiviert ist. Cmd FAIL - No Permission || §c[Plan] Du hast nicht die benötigte Berechtigung. Cmd FAIL - Requires Arguments || §c[Plan] Dieser Befehl erfordert Argumente. REPLACE0 Cmd FAIL - Require only one Argument || §c[Plan] Der Befehl benötigt ein Argument. -Cmd FAIL - Timeout || §c[Plan] REPLACE0 Befehl ausgetimed! Ansehen '/plan status' & Serverkonsole. +Cmd FAIL - Timeout || §c[Plan] REPLACE0 Befehl ausgetimed! Mehr Infos unter '/plan status' und in der Serverkonsole. Cmd FAIL - Unknown Username || §c[Plan] Der Spielername konnte in der Datenbank nicht gefunden werden. Cmd FAIL - Unseen Username || §c[Plan] Dieser Spieler war noch nie auf diesem Server. Cmd FAIL - Invalid Username || §c[Plan] Dieser Spieler existiert nicht. Cmd Header - Analysis || §f»§2 Player Analytics - Analyse Ergebnisse Cmd Header - Info || §f»§2 Player Analytics - Info -Cmd Header - Inspect || §f»§2 Player Analytics - Überprüfe die Ergebnisse: -Cmd Header - Search || §f»§2 Player Analytics - Suchergebnisse für: -In Depth Help - /plan analyze ? || §2Analysis Command\§f Used to Refresh analysis cache & Access the result page\§7 /plan status can be used to check status of analysis while it is running.\§7 Aliases: analyze, analyse, analysis, a -In Depth Help - /plan inspect ? || §2Inspect command\§f Used to get a link to User's inspect page.\§7 Own inspect page can be accessed with /plan inspect\§7 Alias: /plan -In Depth Help - /plan list ? || §2List command\§f Used to get a link to players page.\§7 Players page contains links to all cached inspect pages.\§7 Alias: /plan pl -In Depth Help - /plan manage ? || §2Manage command\§f Used to Manage Database of the plugin.\§7 Alias: /plan m\§7 /plan m - List subcommands\§7 /plan m ? - in depth help -In Depth Help - /plan manage clear ? || §2Manage Clear command\§f Used to delete ALL data in the active database.\§7 Plugin should be reloaded after successful clear.\§7 Alias: /plan pl -In Depth Help - /plan manage dump ? || §2Manage Dump command\§f Used to dump important data for bug reporting to hastebin. -In Depth Help - /plan manage hotswap ? || §2Manage Hotswap command\§f Used to change database in use on the fly.\§7 Does not change database if connection fails -In Depth Help - /plan manage import ? || §2Manage Import command\§f Used to import data from other sources\§7 Analysis will be disabled during import. -In Depth Help - /plan manage remove ? || §2Manage Remove command\§f Used to Remove user's data from the active database. -In Depth Help - /plan ? || §2/plan - Main Command\§f Used to access all SubCommands & help\§7 /plan - List subcommands\§7 /plan ? - in depth help -In Depth Help - /plan qanalyze ? || §2Quick Analysis command\§f Used to get in game info about analysis.\§7 Has less info than full Analysis web page.\§7 Aliases: qanalyze, ganalyse, qanalysis, qa -In Depth Help - /plan qinspect ? || §2Quick Inspect command\§f Used to get some inspect info in game.\§7 Has less info than full Inspect web page.\§7 Alias: /plan qi -In Depth Help - /plan search ? || §2Search command\§f Used to get a list of Player names that match the given argument.\§7 Example: /plan search 123 - Finds all users with 123 in their name. -In Depth Help - /plan webuser ? || §2Web User Manage command\§f Used to manage web users of the plugin\§7 Users have a permission level:\§f 0 - Access to all pages\§f 1 - Access to /players & all inspect pages\§f 2 - Access to own inspect page\§7 Alias: /plan web -In Depth Help - /plan webuser register ? || §2Web Register command\§f Used to register a new user for the webserver.\§7 Registering a user for another player requires plan.webmanage permission.\§7 Passwords are hashed with PBKDF2 (64,000 iterations of SHA1) using a cryptographically-random salt. -Analysis NOTIFY - Temporary Disable || §eAnalysis has been temporarily disabled due to expensive task, use /plan status for info. +Cmd Header - Inspect || §f»§2 Player Analytics - Überprüfe die Ergebnisse: +Cmd Header - Search || §f»§2 Player Analytics - Suchergebnisse für: +In Depth Help - /plan analyze ? || §2Analyse Befehl\§f Wird benutzt um den Analysecache neu zu laden und auf die Resultatseite zuzugreifen\§7 /plan status kann benutzt werden, um den Status der laufenden Analyse zu überprüfen.\§7 Aliasse: analyze, analyse, analysis, a +In Depth Help - /plan inspect ? || §2Inspect Befehl\§f Wird benutzt um den Link zur Inspektionsseite des Spielers zu bekommen.\§7 Die eigene Inspektionseite kann mit /plan inspect aufgerufen werden\§7 Alias: /plan +In Depth Help - /plan list ? || §2List Befehl\§f Wird benutzt um den Link zur Spielerübersichtsseite zu bekommen.\§7 Die Spielerübersichtsseite beinhaltet die Links von allen gecachten Inspektionsseiten.\§7 Alias: /plan pl +In Depth Help - /plan manage ? || §2Manage Befehl\§f Wird benutzt um die Datenbank des Plugins zu verwalten.\§7 Alias: /plan m\§7 /plan m - Auflistung der Unterbefehle\§7 /plan m ? - Ausführliche Hilfe +In Depth Help - /plan manage clear ? || §2Manage Clear Befehl\§f Wird benutzt um ALLE Daten der aktiven Datenbank zu löschen.\§7 Das Plugin sollte nach einer erfolgreichen Reinigung neugeladen werden.\§7 Alias: /plan pl +In Depth Help - /plan manage dump ? || §2Manage Dump Befehl\§f Wird benutzt um wichtige Daten für das Melden von Fehlern auf Hastebin hochzuladen. +In Depth Help - /plan manage hotswap ? || §2Manage Hotswap Befehl\§f Wird benutzt um die benutzte Datenbank direkt zu ändern.\§7 Die Datenbank wird nicht geändert, wenn die Verbindung fehlschlägt +In Depth Help - /plan manage import ? || §2Manage Import Befehl\§f Wird benutzt um Daten von anderen Quellen zu importieren\§7 Die Analyse wird während dem Importieren deaktiviert. +In Depth Help - /plan manage remove ? || §2Manage Remove Befehl\§f Wird benutzt um die Daten des Spielers zu entfernen. +In Depth Help - /plan ? || §2/plan - Hauptbefehl\§f Wird benutzt um alle Unterbefehle & die Hilfe aufzurufen\§7 /plan - Auflistung der Unterbefehle\§7 /plan ? - Ausführliche Hilfe +In Depth Help - /plan qanalyze ? || §2Quick Analysis Befehl\§f Wird benutzt um im Spiel Analyseinformationen zu bekommen.\§7 Diese Informationen beinhalten weniger Informationen als die Analyseinternetseite.\§7 Aliasse: qanalyze, ganalyse, qanalysis, qa +In Depth Help - /plan qinspect ? || §2Quick Inspect Befehl\§f Wird benutzt um im Spiel Inspizierungsinformationen zu bekommen.\§7 Diese Informationen beinhalten weniger Informationen als die Inspizierungsinternetseite.\§7 Alias: /plan qi +In Depth Help - /plan search ? || §2Search Befehl\§f Wird benutzt um eine Liste der Spieler die dem gegebenen Argument entsprechen zu bekommen.\§7 Beispiel: /plan search 123 - Zeigt alle Spieler mit 123 im Namen an. +In Depth Help - /plan webuser ? || §2Web User Manage Befehl\§f Wird benutzt um die Webbenutzer vom Plugin zu verwalten\§7 Die Benutzer haben ein Zugriffslevel:\§f 0 - Zugriff auf alle Seiten\§f 1 - Zugriff auf /players & alle Inspizierungsseiten\§f 2 - Zugriff auf die eigene Inspizierungsseite\§7 Alias: /plan web +In Depth Help - /plan webuser register ? || §2Web Register Befehl\§f Wird benutzt um einen neuen Benutzer für den Webserver zu registrieren.\§7 Um einen Benutzer für einen anderen Spieler zu registrieren, braucht man das plan.webmanage Recht.\§7 Die Passwörter werden mit PBKDF2 (64.000 Iterationen von SHA1) gehasht, es wird ein kryptograpisch zufälliger Salt benutzt. +Analysis NOTIFY - Temporary Disable || §eAnalyse wurde temporär aufgrund von einer leistungstechnisch aufwendigen Aufgabe deaktiviert, benutze /plan status für mehr Informationen. Cmd - Click Me || Klick Mich -Cmd - Fetch Data || §f»§2 Hole Daten ins Cache... +Cmd - Fetch Data || §f»§2 Hole Daten in den Cache... Cmd - Link || §7 •§2 Link: §f Cmd - No Results || §7 •§2 Keine Ergebnisse für §7REPLACE0§2. Cmd - Reload Success || §a[Plan] Reload abgeschlossen. Cmd - Results || §7 Übereinstimmender Spieler: §f -Cmd - Searching || §f»§2Searching.. -Cmd - Usage /plan analyze || Zeige die Server Analyse -Cmd - Usage /plan help || Show command list. -Cmd - Usage /plan info || Zeige die Version von Plan -Cmd - Usage /plan inspect || Prüfe Spieler Daten -Cmd - Usage /plan list || List to all cached players -Cmd - Usage /plan manage || Datenbank Management Befehl -Cmd - Usage /plan manage backup || Erstelle eine Sicherheitskopie der Datenbank als .db Datei -Cmd - Usage /plan manage clean || Clear old data from the database -Cmd - Usage /plan manage clear || Leere Daten aus einer Datenbank -Cmd - Usage /plan manage dump || Create a Hastebin log for Dev for easier Issue reporting. -Cmd - Usage /plan manage hotswap || Wechsle zu einer anderen Datenbank & starte das Plugin neu -Cmd - Usage /plan manage import || Importiere Daten von unterstützten Plugins zur aktiven Datenbank. -Cmd - Usage /plan manage move || Kopiere Daten von einer Datenbank zur anderen & überschreibe die Werte -Cmd - Usage /plan manage remove || Entferne die Spieler Daten aus der aktiven Datenbank. -Cmd - Usage /plan manage restore || Stelle eine Sicherheitskopie einer Datenbank aus einer Datei wieder her. -Cmd - Usage /plan qanalyze || View the Server Analysis as Text -Cmd - Usage /plan qinspect || Inspect Player's Data as Text -Cmd - Usage /plan reload || Lade die Plugin Konfiguration neu. -Cmd - Usage /plan search || Suche nach einem Spieler -Cmd - Usage /plan webuser || Manage Webusers -Cmd - Usage /plan webuser check || Check a webuser and their permission level. -Cmd - Usage /plan webuser delete || Delete a webuser -Cmd - Usage /plan webuser level || Info about permission levels. -Cmd - Usage /plan webuser register || Register a user for the webserver +Cmd - Searching || §f»§2Suchen... +Cmd - Usage /plan analyze || Zeigt die Server Analyse +Cmd - Usage /plan help || Zeigt die Befehlsliste +Cmd - Usage /plan info || Zeigt die Version von Plan +Cmd - Usage /plan inspect || Prüft Spieler Daten +Cmd - Usage /plan list || Liste zu allen gecachten Spielern +Cmd - Usage /plan manage || Datenbank Verwaltungs Befehl +Cmd - Usage /plan manage backup || Erstellt eine Sicherheitskopie der Datenbank als .db Datei +Cmd - Usage /plan manage clean || Beseitigt alte Daten von der Datenbank +Cmd - Usage /plan manage clear || Leert Daten aus der Datenbank +Cmd - Usage /plan manage dump || Erstellt ein Hastebin Log für das einfache Melden von Fehlern +Cmd - Usage /plan manage hotswap || Wechselt zu einer anderen Datenbank & starte das Plugin neu +Cmd - Usage /plan manage import || Importiert Daten von unterstützten Plugins zur aktiven Datenbank +Cmd - Usage /plan manage move || Kopiert Daten von einer Datenbank zur anderen & überschreibe die Werte +Cmd - Usage /plan manage remove || Entfernt die Spieler Daten aus der aktiven Datenbank. +Cmd - Usage /plan manage restore || Stellt eine Sicherheitskopie einer Datenbank aus einer Datei wieder her +Cmd - Usage /plan qanalyze || Zeigt die Serveranalyse als Text an +Cmd - Usage /plan qinspect || Zeigt die Daten vom Spieler als Text an +Cmd - Usage /plan reload || Lädt die Plugin Konfiguration neu +Cmd - Usage /plan search || Sucht nach einem Spieler +Cmd - Usage /plan webuser || Verwaltet die Webbenutzer +Cmd - Usage /plan webuser check || Überprüft einen Webbenutzer und sein Zugriffslevel +Cmd - Usage /plan webuser delete || Löscht einen Webbenutzer +Cmd - Usage /plan webuser level || Informationen über die Zugriffslevel +Cmd - Usage /plan webuser register || Registriert einen Webbenutzer Disable || Player Analytics deaktiviert. Disable - Save || Daten im Cache werden gespeichert... Disable - WebServer || Webserver wird heruntergefahren... @@ -79,28 +79,27 @@ Enable - Db Info || REPLACE0-Datenbank Verbindung herge Enable - Db || Datenbank Initialisierung... Enable FAIL-Db || REPLACE0-Datenbank Verbindung fehlgeschlagen: REPLACE1 Enable FAIL - Wrong Db Type || Dieser Datenbank Typ existiert nicht. -Enable Notify - ChatListener || §eChat listener disabled, nickname info inaccurate. -Enable Notify - Disabled CommandListener || §eCommand usage listener disabled. -Enable Notify - Disabled DeathListener || §eDeath listener disabled, player & mob kills not recorded. -Enable Notify-Empty IP || §e[Plan] IP in server.properties ist leer & Alternative ServerIP wird nicht benutzt, fehlerhafte Links werden ausgegeben! -Enable Notify - No data view || §eWebserver deaktiviert aber Alternative IP/PlanLite wird nicht benutzt, Daten können nicht angezeigt werden! +Enable Notify - ChatListener || §eChataufzeichnung deaktiviert, die Information der Nicknamen ist nicht akkurat. +Enable Notify - Disabled CommandListener || §eBefehlsaufzeichnung deaktiviert. +Enable Notify - Disabled DeathListener || §eTodesaufzeichnung deaktiviert, Spieler & Mob Kills werden nicht aufgezeichnet. +Enable Notify - No data view || §eWebserver deaktiviert, aber es wird keine alternative IP benutzt, sodass Daten nicht angezeigt werden können! Enable - WebServer || Initialisiere Webserver... Enable - WebServer Info || Webserver läuft auf PORT REPLACE0 Html - Active || Spieler ist aktiv Html - Banned || | Gesperrt Html - Inactive || Spieler ist inaktiv -Html - No Extra Plugins ||

No extra plugins registered.

+Html - No Extra Plugins ||

Keine zusätzlichen Plugins registriert.

Html - Offline || | Offline Html - Online || | Online Html - OP || , Operator (Op) -Html - Table No Kills || No Kills +Html - Table No Kills || Keine Kills Manage FAIL - Confirm Action || §c[Plan] Füge -a hinzu um den Befehl zu bestätigen! REPLACE0 Manage FAIL - Faulty DB Connection || §c[Plan] Eine der Datenbanken wurde nicht richtig initialisiert. Manage FAIL - Backup File Not Found || §c[Plan] Sicherheitskopie existiert nicht! -Manage FAIL - Incorrect DB || §c[Plan] Falsche Datenbank! (SQlite/MySQL wird unterstützt): -Manage FAIL - Incorrect Plugin || §c[Plan] Plugin nicht unterstützt: +Manage FAIL - Incorrect DB || §c[Plan] Falsche Datenbank! (SQlite/MySQL wird unterstützt): +Manage FAIL - Incorrect Plugin || §c[Plan] Plugin nicht unterstützt: Manage FAIL - Empty DB || §c[Plan] Datenbank hat keine Spieler Daten! -Manage FAIL - Unenabled Plugin || §c[Plan] Plugin ist nicht aktiviert: +Manage FAIL - Unenabled Plugin || §c[Plan] Plugin ist nicht aktiviert: Manage FAIL - Same DB || §c[Plan] Kann nicht zur selben Datenbank bewegen! Manage - Clear Success || §a[Plan] Alle Daten wurden erfolgreich gesäubert! Manage - Remind Config Change || §e[Plan] Vergiss nicht zur neuen Datenbank zu wechseln und das Plugin neu zu laden @@ -115,4 +114,4 @@ Manage NOTIFY - Overwrite || Daten in REPLACE0-Datenbank werden Manage NOTIFY - Partial Overwrite || Einige Daten in REPLACE0-Datenbank werden überschrieben! Manage NOTIFY - Remove || Daten in REPLACE0-Datenbank werden entfernt! Manage NOTIFY - Rewrite || Daten in REPLACE0-Datenbank werden neu geschrieben! -WARN - Too Small Queue Size || Queue size is too small! (REPLACE0), change the setting to a higher number! (Currently REPLACE1) +WARN - Too Small Queue Size || Warteschlagengröße ist zu klein! (REPLACE0), änder diese Einstellung zu einer höheren! (Derzeit REPLACE1) From c7f4e3a97caaf1929bbb8d6cc43ae67c541cd6b6 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 11 Aug 2017 09:50:32 +0300 Subject: [PATCH 30/30] Made Locale unload onDisable (Prevent possible memory leaks due to singleton holder.) --- .../main/java/com/djrapitops/plan/Plan.java | 1 + .../com/djrapitops/plan/locale/Locale.java | 22 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/Plan.java b/Plan/src/main/java/com/djrapitops/plan/Plan.java index fa60623da..f04272aac 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Plan.java +++ b/Plan/src/main/java/com/djrapitops/plan/Plan.java @@ -260,6 +260,7 @@ public class Plan extends BukkitPlugin { } Log.info(Locale.get(Msg.DISABLED).toString()); + Locale.unload(); } private void registerListeners() { diff --git a/Plan/src/main/java/com/djrapitops/plan/locale/Locale.java b/Plan/src/main/java/com/djrapitops/plan/locale/Locale.java index 26640b246..bdd93b08a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/locale/Locale.java +++ b/Plan/src/main/java/com/djrapitops/plan/locale/Locale.java @@ -14,6 +14,7 @@ import main.java.com.djrapitops.plan.utilities.comparators.StringLengthComparato import main.java.com.djrapitops.plan.utilities.file.FileUtil; import org.bukkit.ChatColor; +import java.io.Closeable; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -32,7 +33,7 @@ import java.util.stream.Collectors; * @author Rsl1122 * @since 3.6.2 */ -public class Locale { +public class Locale implements Closeable { private final Plan plugin; private final Map messages; @@ -319,8 +320,25 @@ public class Locale { return message != null ? message : new Message(""); } + @Override + public void close() { + messages.clear(); + LocaleHolder.LOCALE = null; + } + + public static void unload() { + Locale locale = LocaleHolder.getLOCALE(); + if (locale != null) { + locale.close(); + } + } + public static Message get(Msg msg) { - return LocaleHolder.getLOCALE().getMessage(msg); + Locale locale = LocaleHolder.getLOCALE(); + if (locale == null) { + throw new IllegalStateException("Locale has not been initialized."); + } + return locale.getMessage(msg); } private static class LocaleHolder {