Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 6.7 kB view raw
1package com.legacyminecraft.poseidon; 2 3import com.legacyminecraft.poseidon.utility.PoseidonVersionChecker; 4import com.legacyminecraft.poseidon.watchdog.WatchDogThread; 5import com.projectposeidon.johnymuffin.UUIDManager; 6import net.minecraft.server.MinecraftServer; 7import net.minecraft.server.NetServerHandler; 8import org.bukkit.Bukkit; 9import org.bukkit.craftbukkit.CraftServer; 10 11import java.io.IOException; 12import java.io.InputStream; 13import java.util.ArrayList; 14import java.util.Arrays; 15import java.util.List; 16import java.util.Properties; 17import java.util.logging.Logger; 18 19public final class PoseidonServer { 20 private final MinecraftServer server; 21 private final CraftServer craftServer; 22 23 private final List<String> hiddenCommands = new ArrayList<>(); 24 private final Properties versionProperties = new Properties(); 25 26 private boolean serverInitialized = false; 27 28 private PoseidonVersionChecker poseidonVersionChecker; 29 private WatchDogThread watchDogThread; 30 31 public PoseidonServer(MinecraftServer server, CraftServer craftServer) { 32 this.server = server; 33 this.craftServer = craftServer; 34 35 loadVersionProperties(); 36 37 addHiddenCommands(Arrays.asList("login", "l", "register", "reg", "unregister", "changepassword", "changepw")); 38 } 39 40 private void loadVersionProperties() { 41 try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("version.properties")) { 42 if (inputStream != null) { 43 versionProperties.load(inputStream); 44 } 45 } catch (IOException e) { 46 getLogger().warning("Failed to load version.properties: " + e.getMessage()); 47 } 48 } 49 50 public void initializeServer() { 51 if (serverInitialized) { 52 throw new UnsupportedOperationException("Server already initialized"); 53 } 54 55 getLogger().info("[Poseidon] Starting Project Poseidon Modules!"); 56 57 PoseidonConfig.getInstance(); 58 UUIDManager.getInstance(); 59 60 initializeUpdateChecker(); 61 62 //Start Watchdog 63 watchDogThread = new WatchDogThread(Thread.currentThread()); 64 if (PoseidonConfig.getInstance().getBoolean("settings.enable-watchdog", true)) { 65 getLogger().info("[Poseidon] Starting Watchdog to detect any server hangs!"); 66 watchDogThread.start(); 67 watchDogThread.tickUpdate(); 68 } 69 70 serverInitialized = true; 71 getLogger().info("[Poseidon] Finished loading Project Poseidon Modules!"); 72 } 73 74 private void initializeUpdateChecker() { 75 if (!PoseidonConfig.getInstance().getConfigBoolean("settings.update-checker.enabled", true)) { 76 getLogger().info("[Poseidon] Version checker disabled. The server will not check for updates."); 77 return; 78 } 79 80 String releaseVersion = getReleaseVersion(); 81 82 if (releaseVersion == null) { 83 getLogger().warning("[Poseidon] Version checker is disabled as no version.properties file was found."); 84 return; 85 } 86 87 if (!getBuildType().equalsIgnoreCase("production")) { 88 getLogger().warning("[Poseidon] Version checker is disabled as this is a " + getBuildType() + " build. The updater will only check for updates on production builds."); 89 return; 90 } 91 92 poseidonVersionChecker = new PoseidonVersionChecker(craftServer, releaseVersion); 93 94 getLogger().info("[Poseidon] Version checker enabled. The server will check for updates every hour."); 95 // Run the version checker in a separate thread every hour 96 Bukkit.getScheduler().scheduleSyncRepeatingTask(new PoseidonPlugin(), new Runnable() { 97 @Override 98 public void run() { 99 poseidonVersionChecker.fetchLatestVersion(); 100 } 101 }, 0, 20 * 60 * 60); 102 } 103 104 public void shutdownServer() { 105 if (!serverInitialized) { 106 throw new UnsupportedOperationException("Server not initialized"); 107 } 108 109 getLogger().info("[Poseidon] Stopping Project Poseidon Modules!"); 110 111 UUIDManager.getInstance().saveJsonArray(); 112 113 if (watchDogThread != null) { 114 getLogger().info("[Poseidon] Stopping Watchdog!"); 115 watchDogThread.interrupt(); 116 } 117 118 serverInitialized = false; 119 getLogger().info("[Poseidon] Finished unloading Project Poseidon Modules!"); 120 } 121 122 public Logger getLogger() { 123 return MinecraftServer.log; 124 } 125 126 public String getAppName() { 127 return versionProperties.getProperty("app_name", "Unknown"); 128 } 129 130 public String getReleaseVersion() { 131 return versionProperties.getProperty("release_version", "Unknown"); 132 } 133 134 public String getMavenVersion() { 135 return versionProperties.getProperty("maven_version", "Unknown"); 136 } 137 138 public String getBuildTimestamp() { 139 return versionProperties.getProperty("build_timestamp", "Unknown"); 140 } 141 142 public String getGitCommit() { 143 return versionProperties.getProperty("git_commit", "Unknown"); 144 } 145 146 public String getBuildType() { 147 return versionProperties.getProperty("build_type", "Unknown"); 148 } 149 150 public boolean isUpdateAvailable() { 151 return poseidonVersionChecker != null && poseidonVersionChecker.isUpdateAvailable(); 152 } 153 154 public String getNewestVersion() { 155 return poseidonVersionChecker == null ? "Unknown" : poseidonVersionChecker.getLatestVersion(); 156 } 157 158 public WatchDogThread getWatchDogThread() { 159 return watchDogThread; 160 } 161 162 /** 163 * Returns the current hide state of the command from param (Hide from console) 164 * 165 * @param cmdName Command name 166 * @return True if the command from param is hidden and false otherwise 167 */ 168 public boolean isCommandHidden(String cmdName) { 169 return hiddenCommands.contains(cmdName.toLowerCase()); 170 } 171 172 173 /** 174 * Hides the command from param from being logged to server console 175 * 176 * @param cmd Command name 177 */ 178 public void addHiddenCommand(String cmd) { 179 cmd = cmd.toLowerCase(); 180 181 if (hiddenCommands.contains(cmd)) { 182 Logger.getLogger(NetServerHandler.class.getName()).warning("List of Hidden commands already contains " + cmd); 183 return; 184 } 185 186 hiddenCommands.add(cmd); 187 } 188 189 /** 190 * Hides the commands from param from being logged to server console 191 * 192 * @param commands List of command names 193 */ 194 public void addHiddenCommands(List<String> commands) { 195 for (String cmd : commands) { 196 addHiddenCommand(cmd); 197 } 198 } 199 200}