public ServerInfo() { Server server = Sponge.getServer(); Platform platform = Sponge.getPlatform(); this.motd = server.getMotd().toBuilder().build(); this.players = server.getOnlinePlayers().size(); this.maxPlayers = server.getMaxPlayers(); if (server.getBoundAddress().isPresent()) { InetSocketAddress addr = server.getBoundAddress().get(); this.address = addr.getHostName() + (addr.getPort() == 25565 ? "" : ":" + addr.getPort()); } this.onlineMode = server.getOnlineMode(); this.resourcePack = server.getDefaultResourcePack().map(ResourcePack::getName).orElse(null); this.hasWhitelist = server.hasWhitelist(); this.uptimeTicks = server.getRunningTimeTicks(); this.tps = server.getTicksPerSecond(); this.minecraftVersion = platform.getMinecraftVersion().getName(); this.game = new CachedPluginContainer(platform.getContainer(Platform.Component.GAME)); this.api = new CachedPluginContainer(platform.getContainer(Platform.Component.API)); this.implementation = new CachedPluginContainer(platform.getContainer(Platform.Component.IMPLEMENTATION)); } }
@Override public Set<Context> getActiveContexts() { time().onGetActiveContexts().startTimingIfSync(); try { int ticks; ActiveContextsHolder holder, newHolder; do { ticks = Sponge.getGame().getServer().getRunningTimeTicks(); holder = this.cachedContexts.get(); if (holder != null && ticks == holder.getUpdateTicks()) { return holder.getContexts(); } Set<Context> set = new HashSet<>(); for (ContextCalculator<Subject> calc : this.collection.getPlugin().getContextCalculators()) { calc.accumulateContexts(this, set); } newHolder = new ActiveContextsHolder(ticks, ImmutableSet.copyOf(set)); } while (!this.cachedContexts.compareAndSet(holder, newHolder)); return newHolder.getContexts(); } finally { time().onGetActiveContexts().stopTimingIfSync(); } }