3import com.osroyale.content.WellOfGoodwill;
4import com.osroyale.content.bloodmoney.BloodChestEvent;
5import com.osroyale.content.clanchannel.ClanRepository;
6import com.osroyale.content.itemaction.ItemActionRepository;
7import com.osroyale.content.lms.LMSGameEvent;
8import com.osroyale.content.lms.loadouts.LMSLoadoutManager;
9import com.osroyale.content.lms.lobby.LMSLobbyEvent;
10import com.osroyale.content.mysterybox.MysteryBox;
11import com.osroyale.content.preloads.PreloadRepository;
12import com.osroyale.content.shootingstar.ShootingStar;
13import com.osroyale.content.skill.SkillRepository;
14import com.osroyale.content.tradingpost.TradingPost;
15import com.osroyale.content.triviabot.TriviaBot;
16import com.osroyale.content.wintertodt.Wintertodt;
17import com.osroyale.fs.cache.FileSystem;
18import com.osroyale.fs.cache.decoder.*;
19import com.osroyale.game.engine.GameEngine;
20import com.osroyale.game.plugin.PluginManager;
21import com.osroyale.game.service.*;
22import com.osroyale.game.task.impl.ClanUpdateEvent;
23import com.osroyale.game.task.impl.DoubleExperienceEvent;
24import com.osroyale.game.task.impl.MessageEvent;
25import com.osroyale.game.task.impl.PlayerSaveEvent;
26import com.osroyale.game.world.World;
27import com.osroyale.game.world.WorldType;
28import com.osroyale.game.world.cronjobs.Jobs;
29import com.osroyale.game.world.entity.combat.attack.listener.CombatListenerManager;
30import com.osroyale.game.world.entity.combat.strategy.npc.boss.skotizo.SkotizoEvent;
31import com.osroyale.game.world.entity.mob.npc.definition.NpcDefinition;
32import com.osroyale.game.world.entity.mob.player.BannedPlayers;
33import com.osroyale.game.world.entity.mob.player.IPBannedPlayers;
34import com.osroyale.game.world.entity.mob.player.IPMutedPlayers;
35import com.osroyale.game.world.entity.mob.player.profile.ProfileRepository;
36import com.osroyale.game.world.items.ItemDefinition;
37import com.osroyale.io.PacketListenerLoader;
38import com.osroyale.net.LoginExecutorService;
39import com.osroyale.net.discord.Discord;
40import com.osroyale.net.discord.DiscordPlugin;
41import com.osroyale.util.GameSaver;
42import com.osroyale.util.Stopwatch;
43import com.osroyale.util.parser.impl.*;
44import dev.advo.fs.FileServer;
45import org.apache.logging.log4j.LogManager;
46import org.apache.logging.log4j.Logger;
47import org.jire.tarnishps.OldToNew;
48import org.jire.tarnishps.objectexamines.ObjectExamines;
49import org.joda.time.DateTime;
50import org.joda.time.DateTimeZone;
51import plugin.click.item.ClueScrollPlugin;
53import java.io.IOException;
54import java.util.concurrent.TimeUnit;
55import java.util.concurrent.atomic.AtomicBoolean;
89public final class OSRoyale {
91 private static final Logger logger = LogManager.getLogger(OSRoyale.class);
93 public static final AtomicBoolean serverStarted =
new AtomicBoolean(
false);
101 private static final OSRoyale INSTANCE =
new OSRoyale();
109 private void processSequentialStatupTasks() {
116 new MapDefinitionDecoder(fs).run();
120 }
catch (IOException e) {
125 ObjectExamines.loadObjectExamines();
133 com.osroyale.content.dialogue.script.DialogueScriptParser.loadAll();
143 private void processParallelStatupTasks() {
153 startupService.submit(ClueScrollPlugin::declare);
156 startupService.submit(GameSaver::load);
158 startupService.submit(TradingPost::loadAllListings);
159 startupService.submit(TradingPost::loadItemHistory);
160 startupService.submit(TradingPost::loadRecentItemHistory);
161 startupService.shutdown();
167 private void onStart() {
180 logger.info(
"Events have been scheduled");
183 public void start()
throws Exception {
193 new FileServer().start();
195 logger.info(
"Tarnish is running (client version " +
Config.CLIENT_VERSION +
")");
197 processSequentialStatupTasks();
198 processParallelStatupTasks();
200 startupService.awaitUntilFinished(5, TimeUnit.MINUTES);
201 logger.info(
"Startup service finished");
207 gameService.startAsync().awaitRunning();
208 logger.info(
"Game service started");
221 public static void main(String[] args) {
222 Runtime.getRuntime().addShutdownHook(
new Thread(() -> {
223 logger.info(
"shutting down server, initializing shutdown hook");
229 }
catch (Throwable t) {
230 logger.error(
"A problem has been encountered while starting the server.", t);
235 public static OSRoyale getInstance() {
239 public static DateTime currentDateTime() {
240 return new DateTime(timeZone());
243 public static DateTimeZone timeZone() {
244 return DateTimeZone.UTC;
248 return this.loginExecutorService;
static final int SERVER_PORT
static final boolean PARALLEL_GAME_ENGINE
static final boolean FORUM_INTEGRATION
static void loadChannels()
static final int CONFIG_ARCHIVE
static FileSystem create(String directory)
static void schedule(Task task)