Add live-api configurations

This commit is contained in:
Blue (Lukas Rieger) 2020-08-16 13:49:40 +02:00
parent 3a5dac58ea
commit 1716098622
14 changed files with 230 additions and 15 deletions

View File

@ -9,3 +9,9 @@ webserver {
port: 8100
maxConnectionCount: 100
}
liveUpdates {
enabled: true
hiddenGameModes: []
hideInvisible: true
hideSneaking: false
}

View File

@ -38,6 +38,7 @@ webroot: "bluemap/web"
#webdata: "path/to/data/folder"
# If the web-application should use cookies to save the configurations of a user.
# Default is true
useCookies: true
webserver {
@ -165,3 +166,23 @@ maps: [
}
]
liveUpdates {
# If the server should send live-updates and player-positions.
# Default is true
enabled: true
# A list of gamemodes that will prevent a player from appearing on the map.
# Possible values are: survival, creative, spectator, adventure
hiddenGameModes: [
"spectator"
]
# If this is true, players that have an invisibility (potion-)effect will be hidden on the map.
# Default is true
hideInvisible: true
# If this is true, players that are sneaking will be hidden on the map.
# Default is false
hideSneaking: false
}

View File

@ -28,6 +28,7 @@
import de.bluecolored.bluemap.common.live.LiveAPIRequestHandler;
import de.bluecolored.bluemap.common.plugin.serverinterface.ServerInterface;
import de.bluecolored.bluemap.core.config.LiveAPISettings;
import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.web.FileRequestHandler;
import de.bluecolored.bluemap.core.web.WebFilesManager;
@ -50,12 +51,12 @@ public BlueMapWebServer(WebServerConfig config) {
this.webFilesManager = new WebFilesManager(config.getWebRoot());
}
public BlueMapWebServer(WebServerConfig config, ServerInterface server) {
public BlueMapWebServer(WebServerConfig config, LiveAPISettings liveSettings, ServerInterface server) {
super(
config.getWebserverPort(),
config.getWebserverMaxConnections(),
config.getWebserverBindAdress(),
new LiveAPIRequestHandler(server, new FileRequestHandler(config.getWebRoot(), "BlueMap/Webserver"))
new LiveAPIRequestHandler(server, liveSettings, new FileRequestHandler(config.getWebRoot(), "BlueMap/Webserver"))
);
this.webFilesManager = new WebFilesManager(config.getWebRoot());

View File

@ -31,9 +31,9 @@
import com.google.gson.stream.JsonWriter;
import de.bluecolored.bluemap.common.plugin.serverinterface.Gamemode;
import de.bluecolored.bluemap.common.plugin.serverinterface.Player;
import de.bluecolored.bluemap.common.plugin.serverinterface.ServerInterface;
import de.bluecolored.bluemap.core.config.LiveAPISettings;
import de.bluecolored.bluemap.core.webserver.HttpRequest;
import de.bluecolored.bluemap.core.webserver.HttpRequestHandler;
import de.bluecolored.bluemap.core.webserver.HttpResponse;
@ -45,7 +45,9 @@ public class LiveAPIRequestHandler implements HttpRequestHandler {
private Map<String, HttpRequestHandler> liveAPIRequests;
private ServerInterface server;
public LiveAPIRequestHandler(ServerInterface server, HttpRequestHandler notFoundHandler) {
private LiveAPISettings config;
public LiveAPIRequestHandler(ServerInterface server, LiveAPISettings config, HttpRequestHandler notFoundHandler) {
this.server = server;
this.notFoundHandler = notFoundHandler;
@ -53,10 +55,14 @@ public LiveAPIRequestHandler(ServerInterface server, HttpRequestHandler notFound
this.liveAPIRequests.put("live", this::handleLivePingRequest);
this.liveAPIRequests.put("live/players", this::handlePlayersRequest);
this.config = config;
}
@Override
public HttpResponse handle(HttpRequest request) {
if (!config.isLiveUpdatesEnabled()) this.notFoundHandler.handle(request);
HttpRequestHandler handler = liveAPIRequests.get(request.getPath());
if (handler != null) return handler.handle(request);
@ -81,9 +87,9 @@ public HttpResponse handlePlayersRequest(HttpRequest request) {
json.name("players").beginArray();
for (Player player : server.getOnlinePlayers()) {
if (player.isInvisible()) continue;
if (player.isSneaking()) continue;
if (player.getGamemode() == Gamemode.SPECTATOR) continue;
if (config.isHideInvisible() && player.isInvisible()) continue;
if (config.isHideSneaking() && player.isSneaking()) continue;
if (config.getHiddenGameModes().contains(player.getGamemode().getId())) continue;
json.beginObject();
json.name("uuid").value(player.getUuid().toString());

View File

@ -272,8 +272,10 @@ public synchronized void load() throws IOException, ParseResourceException {
serverInterface.registerListener(updateHandler);
//start skin updater
if (config.isLiveUpdatesEnabled()) {
this.skinUpdater = new PlayerSkinUpdater(config.getWebRoot().resolve("assets").resolve("playerheads").toFile());
serverInterface.registerListener(skinUpdater);
}
//create/update webfiles
WebFilesManager webFilesManager = new WebFilesManager(config.getWebRoot());
@ -299,7 +301,7 @@ public synchronized void load() throws IOException, ParseResourceException {
//start webserver
if (config.isWebserverEnabled()) {
webServer = new BlueMapWebServer(config, serverInterface);
webServer = new BlueMapWebServer(config, config, serverInterface);
webServer.updateWebfiles();
webServer.start();
}

View File

@ -26,9 +26,29 @@
public enum Gamemode {
SURVIVAL,
CREATIVE,
ADVENTURE,
SPECTATOR
SURVIVAL ("survival"),
CREATIVE ("creative"),
ADVENTURE ("adventure"),
SPECTATOR ("spectator");
private final String id;
Gamemode(String id){
this.id = id;
}
public String getId() {
return id;
}
public static Gamemode getById(String id) {
if (id == null) throw new NullPointerException("id cannot be null");
for (Gamemode gamemode : values()) {
if (gamemode.id.equals(id)) return gamemode;
}
throw new IllegalArgumentException("There is no Gamemode with id: '" + id + "'");
}
}

View File

@ -0,0 +1,39 @@
/*
* This file is part of BlueMap, licensed under the MIT License (MIT).
*
* Copyright (c) Blue (Lukas Rieger) <https://bluecolored.de>
* Copyright (c) contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package de.bluecolored.bluemap.core.config;
import java.util.Collection;
public interface LiveAPISettings {
boolean isLiveUpdatesEnabled();
Collection<String> getHiddenGameModes();
boolean isHideInvisible();
boolean isHideSneaking();
}

View File

@ -31,6 +31,8 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
@ -43,7 +45,7 @@
import de.bluecolored.bluemap.core.web.WebServerConfig;
import ninja.leaping.configurate.ConfigurationNode;
public class MainConfig implements WebServerConfig {
public class MainConfig implements WebServerConfig, LiveAPISettings {
private static final Pattern VALID_ID_PATTERN = Pattern.compile("[a-zA-Z0-9_]+");
private boolean downloadAccepted = false;
@ -64,6 +66,11 @@ public class MainConfig implements WebServerConfig {
private List<MapConfig> mapConfigs = new ArrayList<>();
private boolean liveUpdatesEnabled = false;
private Collection<String> hiddenGameModes = Collections.emptyList();
private boolean hideInvisible = false;
private boolean hideSneaking = false;
public MainConfig(ConfigurationNode node) throws OutdatedConfigException, IOException {
checkOutdated(node);
@ -101,6 +108,19 @@ public MainConfig(ConfigurationNode node) throws OutdatedConfigException, IOExce
//maps
loadMapConfigs(node.getNode("maps"));
//live-updates
ConfigurationNode liveNode = node.getNode("liveUpdates");
liveUpdatesEnabled = liveNode.getNode("enabled").getBoolean(true);
hiddenGameModes = new ArrayList<>();
for (ConfigurationNode gameModeNode : liveNode.getNode("hiddenGameModes").getChildrenList()) {
hiddenGameModes.add(gameModeNode.getString());
}
hiddenGameModes = Collections.unmodifiableCollection(hiddenGameModes);
hideInvisible = liveNode.getNode("hideInvisible").getBoolean(true);
hideSneaking = liveNode.getNode("hideSneaking").getBoolean(false);
}
private void loadWebConfig(ConfigurationNode node) throws IOException {
@ -196,6 +216,26 @@ public List<MapConfig> getMapConfigs(){
return mapConfigs;
}
@Override
public boolean isLiveUpdatesEnabled() {
return this.liveUpdatesEnabled;
}
@Override
public Collection<String> getHiddenGameModes() {
return this.hiddenGameModes;
}
@Override
public boolean isHideInvisible() {
return this.hideInvisible;
}
@Override
public boolean isHideSneaking() {
return this.hideSneaking;
}
public class MapConfig implements RenderSettings {
private String id;

View File

@ -9,3 +9,9 @@ webserver {
port: 8100
maxConnectionCount: 100
}
liveUpdates {
enabled: true
hiddenGameModes: []
hideInvisible: true
hideSneaking: false
}

View File

@ -38,6 +38,7 @@ webroot: "bluemap/web"
#webdata: "path/to/data/folder"
# If the web-application should use cookies to save the configurations of a user.
# Default is true
useCookies: true
webserver {
@ -165,3 +166,23 @@ maps: [
}
]
liveUpdates {
# If the server should send live-updates and player-positions.
# Default is true
enabled: true
# A list of gamemodes that will prevent a player from appearing on the map.
# Possible values are: survival, creative, spectator, adventure
hiddenGameModes: [
"spectator"
]
# If this is true, players that have an invisibility (potion-)effect will be hidden on the map.
# Default is true
hideInvisible: true
# If this is true, players that are sneaking will be hidden on the map.
# Default is false
hideSneaking: false
}

View File

@ -9,3 +9,9 @@ webserver {
port: 8100
maxConnectionCount: 100
}
liveUpdates {
enabled: true
hiddenGameModes: []
hideInvisible: true
hideSneaking: false
}

View File

@ -38,6 +38,7 @@ webroot: "bluemap/web"
#webdata: "path/to/data/folder"
# If the web-application should use cookies to save the configurations of a user.
# Default is true
useCookies: true
webserver {
@ -165,3 +166,23 @@ maps: [
}
]
liveUpdates {
# If the server should send live-updates and player-positions.
# Default is true
enabled: true
# A list of gamemodes that will prevent a player from appearing on the map.
# Possible values are: survival, creative, spectator, adventure
hiddenGameModes: [
"spectator"
]
# If this is true, players that have an invisibility (potion-)effect will be hidden on the map.
# Default is true
hideInvisible: true
# If this is true, players that are sneaking will be hidden on the map.
# Default is false
hideSneaking: false
}

View File

@ -9,3 +9,9 @@ webserver {
port: 8100
maxConnectionCount: 100
}
liveUpdates {
enabled: true
hiddenGameModes: []
hideInvisible: true
hideSneaking: false
}

View File

@ -160,3 +160,23 @@ maps: [
}
]
liveUpdates {
# If the server should send live-updates and player-positions.
# Default is true
enabled: true
# A list of gamemodes that will prevent a player from appearing on the map.
# Possible values are: survival, creative, spectator, adventure
hiddenGameModes: [
"spectator"
]
# If this is true, players that have an invisibility (potion-)effect will be hidden on the map.
# Default is true
hideInvisible: true
# If this is true, players that are sneaking will be hidden on the map.
# Default is false
hideSneaking: false
}