From 9c159e64da526c8f4361d8ab93fa77511b2eac6d Mon Sep 17 00:00:00 2001 From: Luka Kresoja <57074484+LukeOnuke@users.noreply.github.com> Date: Thu, 17 Mar 2022 23:04:45 +0100 Subject: [PATCH] Fixed bugs - When server has no favicon it will display no default icon - Depricated mojang api status --- .../gui/StatusWindowController.java | 78 +----------------- .../java/app/admintools/util/Version.java | 4 +- src/main/resources/gui/fxml/StatusWindow.fxml | 28 +------ src/main/resources/img/unknown-server.png | Bin 0 -> 9873 bytes 4 files changed, 7 insertions(+), 103 deletions(-) create mode 100644 src/main/resources/img/unknown-server.png diff --git a/src/main/java/app/admintools/gui/StatusWindowController.java b/src/main/java/app/admintools/gui/StatusWindowController.java index 012ad6a..ef122a0 100644 --- a/src/main/java/app/admintools/gui/StatusWindowController.java +++ b/src/main/java/app/admintools/gui/StatusWindowController.java @@ -9,6 +9,8 @@ import java.net.URL; import java.util.ArrayList; import java.util.ResourceBundle; + +import app.admintools.AdminTools; import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.Initializable; @@ -48,22 +50,6 @@ public class StatusWindowController implements Initializable { d-dot statusDot but shortened */ - @FXML - private Pane sd1; - @FXML - private Pane sd2; - @FXML - private Pane sd3; - @FXML - private Pane sd4; - @FXML - private Pane sd5; - @FXML - private Pane sd6; - @FXML - private Pane sd7; - @FXML - private ProgressBar pbApi; //For mc serv status @FXML @@ -84,7 +70,6 @@ public class StatusWindowController implements Initializable { @Override public void initialize(URL url, ResourceBundle rb) { tickMcRefresh(); - tickApi(); } @FXML @@ -102,63 +87,6 @@ private void loadHome() { WindowLoader.loadHome(rootPane); } - @FXML - public void handleMouseClick(MouseEvent arg0) { - System.out.println("clicked on " + sOnlinePlayers.getSelectionModel().getSelectedItem()); - } - - private void refreshApiStatus() { - //set progressbar to spin - pbApi.setProgress(ProgressBar.INDETERMINATE_PROGRESS); - Thread st = new Thread(() -> { //new thread worker - //Initilse array list - ArrayList arrStatus = new ArrayList(); - try { - arrStatus = ApiQuerry.querry(); //querry - } catch (IOException ex) { - AtLogger.logger.warning(AtLogger.formatException(ex)); - } - final ArrayList arrStatus_ = arrStatus; //final arraylist - Platform.runLater(() -> { - // - sd1.setStyle("-fx-background-color : " + arrStatus_.get(0) + ";"); - sd2.setStyle("-fx-background-color : " + arrStatus_.get(2) + ";"); - sd3.setStyle("-fx-background-color : " + arrStatus_.get(3) + ";"); - sd4.setStyle("-fx-background-color : " + arrStatus_.get(4) + ";"); - sd5.setStyle("-fx-background-color : " + arrStatus_.get(5) + ";"); - sd6.setStyle("-fx-background-color : " + arrStatus_.get(6) + ";"); - sd7.setStyle("-fx-background-color : " + arrStatus_.get(7) + ";"); - pbApi.setProgress(0); - }); - }); - st.start(); - } - - private void tickApi() { - Thread ratf = new Thread(() -> { - if (Data.isOnStatusWindow) { - Platform.runLater(() -> { - refreshApiStatus(); - }); - Data data = Data.getInstance(); - try { - int timeSleep = (int) data.getQuerryMojangApiRefreshRate() * 1000; - for (int i = 0; i < timeSleep / 500; i++) { - if (!Data.isOnStatusWindow) { - return; - } - Thread.sleep(500); - } - } catch (InterruptedException | IOException ex) { - AtLogger.logger.warning(AtLogger.formatException(ex)); - } - tickApi(); - } - }); - ratf.setName("ApiTick"); - ThreadManager.startThread(ratf, ThreadType.ASYNCJOB); - } - @FXML private void mcStatusRefresh() { Thread mcsr = new Thread(() -> { @@ -174,7 +102,7 @@ private void mcStatusRefresh() { if (data.getFavicon() != null) { sFavicon.setImage(QuerryUtils.convertToImage(data.getFavicon())); } else { - sFavicon.setImage(new Image(StatusWindowController.class.getResourceAsStream("/app/admintools/img/unknown_server.png"))); + sFavicon.setImage(new Image(AdminTools.class.getResourceAsStream("/img/unknown-server.png"))); } }); diff --git a/src/main/java/app/admintools/util/Version.java b/src/main/java/app/admintools/util/Version.java index 2a68ad3..6e85d43 100644 --- a/src/main/java/app/admintools/util/Version.java +++ b/src/main/java/app/admintools/util/Version.java @@ -5,13 +5,13 @@ import java.util.concurrent.atomic.AtomicInteger; public class Version { - private final String VERSION_NUMBER = "7.0.0"; + private final String VERSION_NUMBER = "7.1.0"; /** * Snapshot version, only used if isDevelopmentVersion is true * * Version number goes like 23d12m2020y001v . So its [Day Of Release]d[Month Of Release]m[Year Of Release]y[Snapshot Number]v */ - private final String SNAPSHOT_VER = "8d3m2021y001v"; + private final String SNAPSHOT_VER = "17d3m2022y000v"; private final boolean isDevelopmentVersion = false; private static Version instance = null; diff --git a/src/main/resources/gui/fxml/StatusWindow.fxml b/src/main/resources/gui/fxml/StatusWindow.fxml index 4d3bcbd..aab01ad 100644 --- a/src/main/resources/gui/fxml/StatusWindow.fxml +++ b/src/main/resources/gui/fxml/StatusWindow.fxml @@ -1,14 +1,11 @@ - - - @@ -24,35 +21,14 @@ - - - - - - + diff --git a/src/main/resources/img/unknown-server.png b/src/main/resources/img/unknown-server.png new file mode 100644 index 0000000000000000000000000000000000000000..23372ec51ae73e16e49f8ac6ed6b4ad4e29bd6c5 GIT binary patch literal 9873 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