mirror of
https://github.com/BlueMap-Minecraft/BlueMap.git
synced 2024-06-28 15:35:04 +02:00
Implement BlueMapAPI v2
This commit is contained in:
parent
c4e7349c54
commit
4da988d31c
|
@ -1 +1 @@
|
||||||
Subproject commit 938621deb030f386c357a8dbee6d648095e7bb18
|
Subproject commit b466fb4ed8655d0b6212c7343594886753a0c21a
|
|
@ -37,9 +37,7 @@ repositories {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api ("com.mojang:brigadier:1.0.17")
|
api ("com.mojang:brigadier:1.0.17")
|
||||||
|
|
||||||
api ("de.bluecolored.bluemap.core:BlueMapCore")
|
api ("de.bluecolored.bluemap.core:BlueMapCore")
|
||||||
api ("de.bluecolored.bluemap.api:BlueMapAPI")
|
|
||||||
|
|
||||||
compileOnly ("org.jetbrains:annotations:16.0.2")
|
compileOnly ("org.jetbrains:annotations:16.0.2")
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
||||||
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
|
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
|
||||||
import de.bluecolored.bluemap.core.MinecraftVersion;
|
import de.bluecolored.bluemap.core.MinecraftVersion;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.debug.StateDumper;
|
import de.bluecolored.bluemap.core.debug.StateDumper;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
package de.bluecolored.bluemap.common.api;
|
||||||
|
|
||||||
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
|
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapAPI;
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapMap;
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapWorld;
|
||||||
|
import de.bluecolored.bluemap.common.plugin.Plugin;
|
||||||
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
|
import de.bluecolored.bluemap.core.world.World;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class BlueMapAPIImpl extends BlueMapAPI {
|
||||||
|
|
||||||
|
private final Plugin plugin;
|
||||||
|
private final LoadingCache<Object, Optional<BlueMapWorld>> worldCache;
|
||||||
|
private final LoadingCache<String, Optional<BlueMapMap>> mapCache;
|
||||||
|
|
||||||
|
public BlueMapAPIImpl(Plugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.worldCache = Caffeine.newBuilder()
|
||||||
|
.weakKeys()
|
||||||
|
.build(this::getWorldUncached);
|
||||||
|
this.mapCache = Caffeine.newBuilder()
|
||||||
|
.weakKeys()
|
||||||
|
.build(this::getMapUncached);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RenderManagerImpl getRenderManager() {
|
||||||
|
return new RenderManagerImpl(this, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WebAppImpl getWebApp() {
|
||||||
|
return new WebAppImpl(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<BlueMapMap> getMaps() {
|
||||||
|
return plugin.getMaps().values().stream()
|
||||||
|
.map(map -> {
|
||||||
|
try {
|
||||||
|
return new BlueMapMapImpl(plugin, map);
|
||||||
|
} catch (IOException e) {
|
||||||
|
Logger.global.logError("[API] Failed to create BlueMapMap for map " + map.getId(), e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toUnmodifiableSet());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<BlueMapWorld> getWorlds() {
|
||||||
|
return plugin.getWorlds().values().stream()
|
||||||
|
.map(world -> getWorld(world).orElse(null))
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toUnmodifiableSet());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<BlueMapWorld> getWorld(Object world) {
|
||||||
|
return worldCache.get(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<BlueMapWorld> getWorldUncached(Object world) {
|
||||||
|
|
||||||
|
if (world instanceof UUID) {
|
||||||
|
var coreWorld = plugin.getWorlds().get(world.toString());
|
||||||
|
if (coreWorld != null) world = coreWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof String) {
|
||||||
|
var coreWorld = plugin.getWorlds().get(world);
|
||||||
|
if (coreWorld != null) world = coreWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof World) {
|
||||||
|
var coreWorld = (World) world;
|
||||||
|
try {
|
||||||
|
return Optional.of(new BlueMapWorldImpl(plugin, coreWorld));
|
||||||
|
} catch (IOException e) {
|
||||||
|
Logger.global.logError("[API] Failed to create BlueMapWorld for world " + coreWorld.getSaveFolder(), e);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
var serverWorld = plugin.getServerInterface().getWorld(world).orElse(null);
|
||||||
|
if (serverWorld == null) return Optional.empty();
|
||||||
|
|
||||||
|
try {
|
||||||
|
String id = plugin.getBlueMap().getWorldId(serverWorld.getSaveFolder());
|
||||||
|
var coreWorld = plugin.getWorlds().get(id);
|
||||||
|
if (coreWorld == null) return Optional.empty();
|
||||||
|
|
||||||
|
return Optional.of(new BlueMapWorldImpl(plugin, coreWorld));
|
||||||
|
} catch (IOException e) {
|
||||||
|
Logger.global.logError("[API] Failed to create BlueMapWorld for world " + serverWorld.getSaveFolder(), e);
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<BlueMapMap> getMap(String id) {
|
||||||
|
return mapCache.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<BlueMapMap> getMapUncached(String id) {
|
||||||
|
var map = plugin.getMaps().get(id);
|
||||||
|
if (map == null) return Optional.empty();
|
||||||
|
|
||||||
|
var world = getWorld(map.getWorld()).orElse(null);
|
||||||
|
if (world == null) return Optional.empty();
|
||||||
|
|
||||||
|
return Optional.of(new BlueMapMapImpl(plugin, map, (BlueMapWorldImpl) world));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBlueMapVersion() {
|
||||||
|
return BlueMap.VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register() {
|
||||||
|
try {
|
||||||
|
BlueMapAPI.registerInstance(this);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Logger.global.logError("BlueMapAPI: A BlueMapAPI listener threw an exception (onEnable)!", ex.getCause());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregister() {
|
||||||
|
try {
|
||||||
|
BlueMapAPI.unregisterInstance(this);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Logger.global.logError("BlueMapAPI: A BlueMapAPI listener threw an exception (onDisable)!", ex.getCause());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,119 @@
|
||||||
|
package de.bluecolored.bluemap.common.api;
|
||||||
|
|
||||||
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapMap;
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapWorld;
|
||||||
|
import de.bluecolored.bluemap.api.marker.MarkerSet;
|
||||||
|
import de.bluecolored.bluemap.common.plugin.Plugin;
|
||||||
|
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
||||||
|
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
|
||||||
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
public class BlueMapMapImpl implements BlueMapMap {
|
||||||
|
|
||||||
|
private final WeakReference<Plugin> plugin;
|
||||||
|
private final WeakReference<BmMap> map;
|
||||||
|
private final BlueMapWorldImpl world;
|
||||||
|
|
||||||
|
public BlueMapMapImpl(Plugin plugin, BmMap map) throws IOException {
|
||||||
|
this.plugin = new WeakReference<>(plugin);
|
||||||
|
this.map = new WeakReference<>(map);
|
||||||
|
this.world = new BlueMapWorldImpl(plugin, map.getWorld());
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlueMapMapImpl(Plugin plugin, BmMap map, BlueMapWorldImpl world) {
|
||||||
|
this.plugin = new WeakReference<>(plugin);
|
||||||
|
this.map = new WeakReference<>(map);
|
||||||
|
this.world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BmMap getBmMap() {
|
||||||
|
return unpack(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return unpack(map).getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return unpack(map).getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlueMapWorld getWorld() {
|
||||||
|
return world;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, MarkerSet> getMarkerSets() {
|
||||||
|
return unpack(map).getMarkerSets();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vector2i getTileSize() {
|
||||||
|
return unpack(map).getHiresModelManager().getTileGrid().getGridSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vector2i getTileOffset() {
|
||||||
|
return unpack(map).getHiresModelManager().getTileGrid().getOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTileFilter(Predicate<Vector2i> filter) {
|
||||||
|
unpack(map).setTileFilter(filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Predicate<Vector2i> getTileFilter() {
|
||||||
|
return unpack(map).getTileFilter();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void setFrozen(boolean frozen) {
|
||||||
|
if (isFrozen()) unfreeze();
|
||||||
|
else freeze();
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void unfreeze() {
|
||||||
|
Plugin plugin = unpack(this.plugin);
|
||||||
|
BmMap map = unpack(this.map);
|
||||||
|
plugin.startWatchingMap(map);
|
||||||
|
plugin.getPluginState().getMapState(map).setUpdateEnabled(true);
|
||||||
|
plugin.getRenderManager().scheduleRenderTask(new MapUpdateTask(map));
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void freeze() {
|
||||||
|
Plugin plugin = unpack(this.plugin);
|
||||||
|
BmMap map = unpack(this.map);
|
||||||
|
plugin.stopWatchingMap(map);
|
||||||
|
plugin.getPluginState().getMapState(map).setUpdateEnabled(false);
|
||||||
|
plugin.getRenderManager().removeRenderTasksIf(task -> {
|
||||||
|
if (task instanceof MapUpdateTask)
|
||||||
|
return ((MapUpdateTask) task).getMap().equals(map);
|
||||||
|
|
||||||
|
if (task instanceof WorldRegionRenderTask)
|
||||||
|
return ((WorldRegionRenderTask) task).getMap().equals(map);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFrozen() {
|
||||||
|
return !unpack(plugin).getPluginState().getMapState(unpack(map)).isUpdateEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> T unpack(WeakReference<T> ref) {
|
||||||
|
return Objects.requireNonNull(ref.get(), "Reference lost to delegate object. Most likely BlueMap got reloaded and this instance is no longer valid.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package de.bluecolored.bluemap.common.api;
|
||||||
|
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapMap;
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapWorld;
|
||||||
|
import de.bluecolored.bluemap.common.plugin.Plugin;
|
||||||
|
import de.bluecolored.bluemap.core.world.World;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class BlueMapWorldImpl implements BlueMapWorld {
|
||||||
|
|
||||||
|
private final WeakReference<Plugin> plugin;
|
||||||
|
private final String id;
|
||||||
|
private final WeakReference<World> world;
|
||||||
|
|
||||||
|
public BlueMapWorldImpl(Plugin plugin, World world) throws IOException {
|
||||||
|
this.plugin = new WeakReference<>(plugin);
|
||||||
|
this.id = plugin.getBlueMap().getWorldId(world.getSaveFolder());
|
||||||
|
this.world = new WeakReference<>(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public World getWorld() {
|
||||||
|
return unpack(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Path getSaveFolder() {
|
||||||
|
return unpack(world).getSaveFolder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<BlueMapMap> getMaps() {
|
||||||
|
return unpack(plugin).getMaps().values().stream()
|
||||||
|
.filter(map -> map.getWorld().equals(unpack(world)))
|
||||||
|
.map(map -> new BlueMapMapImpl(unpack(plugin), map, this))
|
||||||
|
.collect(Collectors.toUnmodifiableSet());
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> T unpack(WeakReference<T> ref) {
|
||||||
|
return Objects.requireNonNull(ref.get(), "Reference lost to delegate object. Most likely BlueMap got reloaded and this instance is no longer valid.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
package de.bluecolored.bluemap.common.api;
|
||||||
|
|
||||||
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
|
import de.bluecolored.bluemap.api.BlueMapMap;
|
||||||
|
import de.bluecolored.bluemap.api.RenderManager;
|
||||||
|
import de.bluecolored.bluemap.common.plugin.Plugin;
|
||||||
|
import de.bluecolored.bluemap.common.rendermanager.MapPurgeTask;
|
||||||
|
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
public class RenderManagerImpl implements RenderManager {
|
||||||
|
|
||||||
|
private final BlueMapAPIImpl api;
|
||||||
|
private final Plugin plugin;
|
||||||
|
private final de.bluecolored.bluemap.common.rendermanager.RenderManager renderManager;
|
||||||
|
|
||||||
|
public RenderManagerImpl(BlueMapAPIImpl api, Plugin plugin) {
|
||||||
|
this.api = api;
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.renderManager = plugin.getRenderManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean scheduleMapUpdateTask(BlueMapMap map, boolean force) {
|
||||||
|
BlueMapMapImpl cmap = castMap(map);
|
||||||
|
return renderManager.scheduleRenderTask(new MapUpdateTask(cmap.getBmMap(), force));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean scheduleMapUpdateTask(BlueMapMap map, Collection<Vector2i> regions, boolean force) {
|
||||||
|
BlueMapMapImpl cmap = castMap(map);
|
||||||
|
return renderManager.scheduleRenderTask(new MapUpdateTask(cmap.getBmMap(), regions, force));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean scheduleMapPurgeTask(BlueMapMap map) throws IOException {
|
||||||
|
BlueMapMapImpl cmap = castMap(map);
|
||||||
|
return renderManager.scheduleRenderTask(MapPurgeTask.create(cmap.getBmMap()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int renderQueueSize() {
|
||||||
|
return renderManager.getScheduledRenderTaskCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int renderThreadCount() {
|
||||||
|
return renderManager.getWorkerThreadCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRunning() {
|
||||||
|
return renderManager.isRunning();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
if (!isRunning()){
|
||||||
|
renderManager.start(plugin.getConfigs().getCoreConfig().getRenderThreadCount());
|
||||||
|
}
|
||||||
|
plugin.getPluginState().setRenderThreadsEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start(int threadCount) {
|
||||||
|
if (!isRunning()){
|
||||||
|
renderManager.start(threadCount);
|
||||||
|
}
|
||||||
|
plugin.getPluginState().setRenderThreadsEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
renderManager.stop();
|
||||||
|
plugin.getPluginState().setRenderThreadsEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BlueMapMapImpl castMap(BlueMapMap map) {
|
||||||
|
BlueMapMapImpl cmap;
|
||||||
|
if (map instanceof BlueMapMapImpl) {
|
||||||
|
cmap = (BlueMapMapImpl) map;
|
||||||
|
} else {
|
||||||
|
cmap = (BlueMapMapImpl) api.getMap(map.getId())
|
||||||
|
.orElseThrow(() -> new IllegalStateException("Failed to get BlueMapMapImpl for map " + map.getId()));
|
||||||
|
}
|
||||||
|
return cmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
package de.bluecolored.bluemap.common.api;
|
||||||
|
|
||||||
|
import de.bluecolored.bluemap.api.WebApp;
|
||||||
|
import de.bluecolored.bluemap.common.plugin.Plugin;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class WebAppImpl implements WebApp {
|
||||||
|
private static final String IMAGE_ROOT_PATH = "images";
|
||||||
|
|
||||||
|
private final Plugin plugin;
|
||||||
|
|
||||||
|
public WebAppImpl(Plugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Path getWebRoot() {
|
||||||
|
return plugin.getConfigs().getWebappConfig().getWebroot();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPlayerVisibility(UUID player, boolean visible) {
|
||||||
|
if (visible) {
|
||||||
|
plugin.getPluginState().removeHiddenPlayer(player);
|
||||||
|
} else {
|
||||||
|
plugin.getPluginState().addHiddenPlayer(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String createImage(BufferedImage image, String path) throws IOException {
|
||||||
|
path = path.replaceAll("[^a-zA-Z0-9_.\\-/]", "_");
|
||||||
|
|
||||||
|
Path webRoot = getWebRoot().toAbsolutePath();
|
||||||
|
String separator = webRoot.getFileSystem().getSeparator();
|
||||||
|
|
||||||
|
Path webDataRoot = webRoot.resolve("data");
|
||||||
|
Path imagePath = webDataRoot.resolve(Path.of(IMAGE_ROOT_PATH, path.replace("/", separator) + ".png")).toAbsolutePath();
|
||||||
|
|
||||||
|
Files.deleteIfExists(imagePath);
|
||||||
|
Files.createFile(imagePath);
|
||||||
|
|
||||||
|
if (!ImageIO.write(image, "png", imagePath.toFile()))
|
||||||
|
throw new IOException("The format 'png' is not supported!");
|
||||||
|
|
||||||
|
return webRoot.relativize(imagePath).toString().replace(separator, "/");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> availableImages() throws IOException {
|
||||||
|
Path webRoot = getWebRoot().toAbsolutePath();
|
||||||
|
String separator = webRoot.getFileSystem().getSeparator();
|
||||||
|
|
||||||
|
Path imageRootPath = webRoot.resolve("data").resolve(IMAGE_ROOT_PATH).toAbsolutePath();
|
||||||
|
|
||||||
|
Map<String, String> availableImagesMap = new HashMap<>();
|
||||||
|
|
||||||
|
try (Stream<Path> fileStream = Files.walk(imageRootPath)){
|
||||||
|
fileStream
|
||||||
|
.filter(p -> !Files.isDirectory(p))
|
||||||
|
.filter(p -> p.getFileName().toString().endsWith(".png"))
|
||||||
|
.map(Path::toAbsolutePath)
|
||||||
|
.forEach(p -> {
|
||||||
|
try {
|
||||||
|
String key = imageRootPath.relativize(p).toString();
|
||||||
|
key = key
|
||||||
|
.substring(0, key.length() - 4) //remove .png
|
||||||
|
.replace(separator, "/");
|
||||||
|
|
||||||
|
String value = webRoot.relativize(p).toString()
|
||||||
|
.replace(separator, "/");
|
||||||
|
|
||||||
|
availableImagesMap.put(key, value);
|
||||||
|
} catch (IllegalArgumentException ignore) {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return availableImagesMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
import de.bluecolored.bluemap.common.config.storage.StorageConfig;
|
import de.bluecolored.bluemap.common.config.storage.StorageConfig;
|
||||||
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.util.Tristate;
|
import de.bluecolored.bluemap.core.util.Tristate;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.common.config;
|
package de.bluecolored.bluemap.common.config;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
import com.flowpowered.math.vector.Vector2i;
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
import com.flowpowered.math.vector.Vector3i;
|
import com.flowpowered.math.vector.Vector3i;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.map.MapSettings;
|
import de.bluecolored.bluemap.core.map.MapSettings;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
import org.spongepowered.configurate.objectmapping.meta.Required;
|
import org.spongepowered.configurate.objectmapping.meta.Required;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.common.config;
|
package de.bluecolored.bluemap.common.config;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.common.config;
|
package de.bluecolored.bluemap.common.config;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.common.config;
|
package de.bluecolored.bluemap.common.config;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.common.config.storage;
|
package de.bluecolored.bluemap.common.config.storage;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.storage.Compression;
|
import de.bluecolored.bluemap.core.storage.Compression;
|
||||||
import de.bluecolored.bluemap.core.storage.file.FileStorageSettings;
|
import de.bluecolored.bluemap.core.storage.file.FileStorageSettings;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.common.config.storage;
|
package de.bluecolored.bluemap.common.config.storage;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.storage.Compression;
|
import de.bluecolored.bluemap.core.storage.Compression;
|
||||||
import de.bluecolored.bluemap.core.storage.sql.SQLStorageSettings;
|
import de.bluecolored.bluemap.core.storage.sql.SQLStorageSettings;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
|
@ -24,12 +24,10 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.common.config.storage;
|
package de.bluecolored.bluemap.common.config.storage;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.storage.Storage;
|
import de.bluecolored.bluemap.core.storage.Storage;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
@SuppressWarnings("FieldMayBeFinal")
|
@SuppressWarnings("FieldMayBeFinal")
|
||||||
@DebugDump
|
@DebugDump
|
||||||
@ConfigSerializable
|
@ConfigSerializable
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package de.bluecolored.bluemap.common.live;
|
||||||
|
|
||||||
|
import de.bluecolored.bluemap.api.marker.MarkerGson;
|
||||||
|
import de.bluecolored.bluemap.api.marker.MarkerSet;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class LiveMarkersDataSupplier implements Supplier<String> {
|
||||||
|
|
||||||
|
private final Map<String, MarkerSet> markerSets;
|
||||||
|
|
||||||
|
public LiveMarkersDataSupplier(Map<String, MarkerSet> markerSets) {
|
||||||
|
this.markerSets = markerSets;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String get() {
|
||||||
|
return MarkerGson.INSTANCE.toJson(markerSets);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -28,6 +28,7 @@
|
||||||
import de.bluecolored.bluemap.common.BlueMapService;
|
import de.bluecolored.bluemap.common.BlueMapService;
|
||||||
import de.bluecolored.bluemap.common.InterruptableReentrantLock;
|
import de.bluecolored.bluemap.common.InterruptableReentrantLock;
|
||||||
import de.bluecolored.bluemap.common.MissingResourcesException;
|
import de.bluecolored.bluemap.common.MissingResourcesException;
|
||||||
|
import de.bluecolored.bluemap.common.api.BlueMapAPIImpl;
|
||||||
import de.bluecolored.bluemap.common.config.*;
|
import de.bluecolored.bluemap.common.config.*;
|
||||||
import de.bluecolored.bluemap.common.plugin.skins.PlayerSkinUpdater;
|
import de.bluecolored.bluemap.common.plugin.skins.PlayerSkinUpdater;
|
||||||
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
||||||
|
@ -38,7 +39,7 @@
|
||||||
import de.bluecolored.bluemap.common.web.MapRequestHandler;
|
import de.bluecolored.bluemap.common.web.MapRequestHandler;
|
||||||
import de.bluecolored.bluemap.common.web.RoutingRequestHandler;
|
import de.bluecolored.bluemap.common.web.RoutingRequestHandler;
|
||||||
import de.bluecolored.bluemap.common.webserver.WebServer;
|
import de.bluecolored.bluemap.common.webserver.WebServer;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.debug.StateDumper;
|
import de.bluecolored.bluemap.core.debug.StateDumper;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
|
@ -77,6 +78,8 @@ public class Plugin implements ServerEventListener {
|
||||||
private RenderManager renderManager;
|
private RenderManager renderManager;
|
||||||
private WebServer webServer;
|
private WebServer webServer;
|
||||||
|
|
||||||
|
private BlueMapAPIImpl api;
|
||||||
|
|
||||||
private Timer daemonTimer;
|
private Timer daemonTimer;
|
||||||
|
|
||||||
private Map<String, RegionFileWatchService> regionFileWatchServices;
|
private Map<String, RegionFileWatchService> regionFileWatchServices;
|
||||||
|
@ -267,9 +270,9 @@ public void run() {
|
||||||
//register listener
|
//register listener
|
||||||
serverInterface.registerListener(this);
|
serverInterface.registerListener(this);
|
||||||
|
|
||||||
//enable api TODO
|
//enable api
|
||||||
//this.api = new BlueMapAPIImpl(this);
|
this.api = new BlueMapAPIImpl(this);
|
||||||
//this.api.register();
|
this.api.register();
|
||||||
|
|
||||||
//done
|
//done
|
||||||
loaded = true;
|
loaded = true;
|
||||||
|
@ -292,9 +295,9 @@ public void unload() {
|
||||||
//save
|
//save
|
||||||
save();
|
save();
|
||||||
|
|
||||||
//disable api TODO
|
//disable api
|
||||||
//if (api != null) api.unregister();
|
if (api != null) api.unregister();
|
||||||
//api = null;
|
api = null;
|
||||||
|
|
||||||
//unregister listeners
|
//unregister listeners
|
||||||
serverInterface.unregisterAllListeners();
|
serverInterface.unregisterAllListeners();
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
import com.flowpowered.math.vector.Vector2i;
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
import de.bluecolored.bluemap.common.rendermanager.RenderManager;
|
import de.bluecolored.bluemap.common.rendermanager.RenderManager;
|
||||||
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
|
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
|
|
||||||
|
|
|
@ -38,14 +38,8 @@
|
||||||
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
||||||
import com.mojang.brigadier.context.CommandContext;
|
import com.mojang.brigadier.context.CommandContext;
|
||||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||||
import de.bluecolored.bluemap.api.BlueMapAPI;
|
|
||||||
import de.bluecolored.bluemap.api.BlueMapMap;
|
|
||||||
import de.bluecolored.bluemap.api.marker.MarkerAPI;
|
|
||||||
import de.bluecolored.bluemap.api.marker.MarkerSet;
|
|
||||||
import de.bluecolored.bluemap.api.marker.POIMarker;
|
|
||||||
import de.bluecolored.bluemap.common.plugin.Plugin;
|
import de.bluecolored.bluemap.common.plugin.Plugin;
|
||||||
import de.bluecolored.bluemap.common.plugin.PluginState;
|
import de.bluecolored.bluemap.common.plugin.PluginState;
|
||||||
import de.bluecolored.bluemap.common.serverinterface.CommandSource;
|
|
||||||
import de.bluecolored.bluemap.common.plugin.text.Text;
|
import de.bluecolored.bluemap.common.plugin.text.Text;
|
||||||
import de.bluecolored.bluemap.common.plugin.text.TextColor;
|
import de.bluecolored.bluemap.common.plugin.text.TextColor;
|
||||||
import de.bluecolored.bluemap.common.plugin.text.TextFormat;
|
import de.bluecolored.bluemap.common.plugin.text.TextFormat;
|
||||||
|
@ -53,6 +47,7 @@
|
||||||
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
||||||
import de.bluecolored.bluemap.common.rendermanager.RenderTask;
|
import de.bluecolored.bluemap.common.rendermanager.RenderTask;
|
||||||
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
|
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
|
||||||
|
import de.bluecolored.bluemap.common.serverinterface.CommandSource;
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import de.bluecolored.bluemap.core.MinecraftVersion;
|
import de.bluecolored.bluemap.core.MinecraftVersion;
|
||||||
import de.bluecolored.bluemap.core.debug.StateDumper;
|
import de.bluecolored.bluemap.core.debug.StateDumper;
|
||||||
|
@ -64,7 +59,10 @@
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
@ -209,40 +207,6 @@ public void init() {
|
||||||
.executes(this::mapsCommand)
|
.executes(this::mapsCommand)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
LiteralCommandNode<S> markerCommand =
|
|
||||||
literal("marker")
|
|
||||||
.requires(requirements("bluemap.marker"))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
LiteralCommandNode<S> createMarkerCommand =
|
|
||||||
literal("create")
|
|
||||||
.requires(requirements("bluemap.marker"))
|
|
||||||
.then(argument("id", StringArgumentType.word())
|
|
||||||
.then(argument("map", StringArgumentType.string()).suggests(new MapSuggestionProvider<>(plugin))
|
|
||||||
|
|
||||||
.then(argument("label", StringArgumentType.string())
|
|
||||||
.executes(this::createMarkerCommand))
|
|
||||||
|
|
||||||
.then(argument("x", DoubleArgumentType.doubleArg())
|
|
||||||
.then(argument("y", DoubleArgumentType.doubleArg())
|
|
||||||
.then(argument("z", DoubleArgumentType.doubleArg())
|
|
||||||
.then(argument("label", StringArgumentType.string())
|
|
||||||
.executes(this::createMarkerCommand)))))))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
LiteralCommandNode<S> removeMarkerCommand =
|
|
||||||
literal("remove")
|
|
||||||
.requires(requirements("bluemap.marker"))
|
|
||||||
.then(argument("id", StringArgumentType.word()).suggests(MarkerIdSuggestionProvider.getInstance())
|
|
||||||
.executes(this::removeMarkerCommand))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
LiteralCommandNode<S> listMarkersCommand =
|
|
||||||
literal("list")
|
|
||||||
.requires(requirements("bluemap.marker"))
|
|
||||||
.executes(this::listMarkersCommand)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// command tree
|
// command tree
|
||||||
dispatcher.getRoot().addChild(baseCommand);
|
dispatcher.getRoot().addChild(baseCommand);
|
||||||
baseCommand.addChild(versionCommand);
|
baseCommand.addChild(versionCommand);
|
||||||
|
@ -259,10 +223,6 @@ public void init() {
|
||||||
baseCommand.addChild(purgeCommand);
|
baseCommand.addChild(purgeCommand);
|
||||||
baseCommand.addChild(worldsCommand);
|
baseCommand.addChild(worldsCommand);
|
||||||
baseCommand.addChild(mapsCommand);
|
baseCommand.addChild(mapsCommand);
|
||||||
baseCommand.addChild(markerCommand);
|
|
||||||
markerCommand.addChild(createMarkerCommand);
|
|
||||||
markerCommand.addChild(removeMarkerCommand);
|
|
||||||
markerCommand.addChild(listMarkersCommand);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private <B extends ArgumentBuilder<S, B>> B addRenderArguments(B builder, Command<S> command) {
|
private <B extends ArgumentBuilder<S, B>> B addRenderArguments(B builder, Command<S> command) {
|
||||||
|
@ -883,137 +843,4 @@ public int mapsCommand(CommandContext<S> context) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int createMarkerCommand(CommandContext<S> context) {
|
|
||||||
CommandSource source = commandSourceInterface.apply(context.getSource());
|
|
||||||
|
|
||||||
String markerId = context.getArgument("id", String.class);
|
|
||||||
String markerLabel = context.getArgument("label", String.class)
|
|
||||||
.replace("<", "<")
|
|
||||||
.replace(">", ">"); //no html via commands
|
|
||||||
|
|
||||||
// parse map argument
|
|
||||||
String mapString = context.getArgument("map", String.class);
|
|
||||||
BmMap map = parseMap(mapString).orElse(null);
|
|
||||||
|
|
||||||
if (map == null) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "There is no ", helper.mapHelperHover(), " with this name: ", TextColor.WHITE, mapString));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// parse position
|
|
||||||
Optional<Double> x = getOptionalArgument(context, "x", Double.class);
|
|
||||||
Optional<Double> y = getOptionalArgument(context, "y", Double.class);
|
|
||||||
Optional<Double> z = getOptionalArgument(context, "z", Double.class);
|
|
||||||
|
|
||||||
Vector3d position;
|
|
||||||
|
|
||||||
if (x.isPresent() && y.isPresent() && z.isPresent()) {
|
|
||||||
position = new Vector3d(x.get(), y.get(), z.get());
|
|
||||||
} else {
|
|
||||||
position = source.getPosition().orElse(null);
|
|
||||||
|
|
||||||
if (position == null) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "Can't detect a position from this command-source, you'll have to define the x,y,z coordinates for the marker!").setHoverText(Text.of(TextColor.GRAY, "/bluemap marker create " + markerId + " " + "[world|map] <x> <y> <z> <label>")));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// get api
|
|
||||||
BlueMapAPI api = BlueMapAPI.getInstance().orElse(null);
|
|
||||||
if (api == null) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "MarkerAPI is not available, try ", TextColor.GRAY, "/bluemap reload"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// resolve api-map
|
|
||||||
Optional<BlueMapMap> apiMap = api.getMap(map.getId());
|
|
||||||
if (apiMap.isEmpty()) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "Failed to get map from API, try ", TextColor.GRAY, "/bluemap reload"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// add marker
|
|
||||||
try {
|
|
||||||
MarkerAPI markerApi = api.getMarkerAPI();
|
|
||||||
|
|
||||||
MarkerSet set = markerApi.getMarkerSet(DEFAULT_MARKER_SET_ID).orElse(null);
|
|
||||||
if (set == null) {
|
|
||||||
set = markerApi.createMarkerSet(DEFAULT_MARKER_SET_ID);
|
|
||||||
set.setLabel("Markers");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (set.getMarker(markerId).isPresent()) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "There already is a marker with this id: ", TextColor.WHITE, markerId));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
POIMarker marker = set.createPOIMarker(markerId, apiMap.get(), position);
|
|
||||||
marker.setLabel(markerLabel);
|
|
||||||
|
|
||||||
markerApi.save();
|
|
||||||
MarkerIdSuggestionProvider.getInstance().forceUpdate();
|
|
||||||
} catch (IOException e) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "There was an error trying to add the marker, please check the console for details!"));
|
|
||||||
Logger.global.logError("Exception trying to add a marker!", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
source.sendMessage(Text.of(TextColor.GREEN, "Marker added!"));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int removeMarkerCommand(CommandContext<S> context) {
|
|
||||||
CommandSource source = commandSourceInterface.apply(context.getSource());
|
|
||||||
|
|
||||||
String markerId = context.getArgument("id", String.class);
|
|
||||||
|
|
||||||
BlueMapAPI api = BlueMapAPI.getInstance().orElse(null);
|
|
||||||
if (api == null) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "MarkerAPI is not available, try ", TextColor.GRAY, "/bluemap reload"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
MarkerAPI markerApi = api.getMarkerAPI();
|
|
||||||
|
|
||||||
MarkerSet set = markerApi.createMarkerSet("markers");
|
|
||||||
if (!set.removeMarker(markerId)) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "There is no marker with this id: ", TextColor.WHITE, markerId));
|
|
||||||
}
|
|
||||||
|
|
||||||
markerApi.save();
|
|
||||||
MarkerIdSuggestionProvider.getInstance().forceUpdate();
|
|
||||||
} catch (IOException e) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "There was an error trying to remove the marker, please check the console for details!"));
|
|
||||||
Logger.global.logError("Exception trying to remove a marker!", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
source.sendMessage(Text.of(TextColor.GREEN, "Marker removed!"));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int listMarkersCommand(CommandContext<S> context) {
|
|
||||||
CommandSource source = commandSourceInterface.apply(context.getSource());
|
|
||||||
|
|
||||||
BlueMapAPI api = BlueMapAPI.getInstance().orElse(null);
|
|
||||||
if (api == null) {
|
|
||||||
source.sendMessage(Text.of(TextColor.RED, "MarkerAPI is not available, try ", TextColor.GRAY, "/bluemap reload"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
source.sendMessage(Text.of(TextColor.BLUE, "All Markers:"));
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
Collection<String> markerIds = MarkerIdSuggestionProvider.getInstance().getPossibleValues();
|
|
||||||
for (String markerId : markerIds) {
|
|
||||||
if (i++ >= 40) {
|
|
||||||
source.sendMessage(Text.of(TextColor.GRAY, "[" + (markerIds.size() - 40) + " more ...]"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
source.sendMessage(Text.of(TextColor.GRAY, " - ", TextColor.WHITE, markerId));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.common.plugin.commands;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import de.bluecolored.bluemap.api.BlueMapAPI;
|
|
||||||
import de.bluecolored.bluemap.api.marker.Marker;
|
|
||||||
import de.bluecolored.bluemap.api.marker.MarkerAPI;
|
|
||||||
import de.bluecolored.bluemap.api.marker.MarkerSet;
|
|
||||||
import de.bluecolored.bluemap.api.marker.POIMarker;
|
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
|
||||||
|
|
||||||
public class MarkerIdSuggestionProvider<S> extends AbstractSuggestionProvider<S> {
|
|
||||||
|
|
||||||
private static MarkerIdSuggestionProvider<?> instance;
|
|
||||||
|
|
||||||
private MarkerAPI markerApi;
|
|
||||||
private long lastUpdate = -1;
|
|
||||||
|
|
||||||
private MarkerIdSuggestionProvider() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getPossibleValues() {
|
|
||||||
Collection<String> values = new HashSet<>();
|
|
||||||
|
|
||||||
if (markerApi == null || lastUpdate + 1000 * 60 < System.currentTimeMillis()) { // only (re)load marker-values max every minute
|
|
||||||
lastUpdate = System.currentTimeMillis();
|
|
||||||
|
|
||||||
Optional<BlueMapAPI> api = BlueMapAPI.getInstance();
|
|
||||||
if (!api.isPresent()) return values;
|
|
||||||
|
|
||||||
try {
|
|
||||||
markerApi = api.get().getMarkerAPI();
|
|
||||||
} catch (IOException e) {
|
|
||||||
Logger.global.noFloodError("0FEz5tm345rf", "Failed to load MarkerAPI!", e);
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MarkerSet set = markerApi.getMarkerSet(Commands.DEFAULT_MARKER_SET_ID).orElse(null);
|
|
||||||
if (set != null) {
|
|
||||||
for (Marker marker : set.getMarkers()) {
|
|
||||||
if (marker instanceof POIMarker) {
|
|
||||||
values.add(marker.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void forceUpdate() {
|
|
||||||
lastUpdate = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public static <S> MarkerIdSuggestionProvider<S> getInstance(){
|
|
||||||
if (instance == null) {
|
|
||||||
instance = new MarkerIdSuggestionProvider<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (MarkerIdSuggestionProvider<S>) instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -27,7 +27,7 @@
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.common.plugin.skins;
|
package de.bluecolored.bluemap.common.plugin.skins;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.common.serverinterface.ServerEventListener;
|
import de.bluecolored.bluemap.common.serverinterface.ServerEventListener;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.common.rendermanager;
|
package de.bluecolored.bluemap.common.rendermanager;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.common.rendermanager;
|
package de.bluecolored.bluemap.common.rendermanager;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
import de.bluecolored.bluemap.core.storage.Storage;
|
import de.bluecolored.bluemap.core.storage.Storage;
|
||||||
import de.bluecolored.bluemap.core.storage.file.FileStorage;
|
import de.bluecolored.bluemap.core.storage.file.FileStorage;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.common.rendermanager;
|
package de.bluecolored.bluemap.common.rendermanager;
|
||||||
|
|
||||||
import com.flowpowered.math.vector.Vector2i;
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
import de.bluecolored.bluemap.core.world.Grid;
|
import de.bluecolored.bluemap.core.world.Grid;
|
||||||
import de.bluecolored.bluemap.core.world.World;
|
import de.bluecolored.bluemap.core.world.World;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.common.rendermanager;
|
package de.bluecolored.bluemap.common.rendermanager;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
import com.flowpowered.math.vector.Vector2i;
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
import com.flowpowered.math.vector.Vector2l;
|
import com.flowpowered.math.vector.Vector2l;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
import de.bluecolored.bluemap.core.world.Grid;
|
import de.bluecolored.bluemap.core.world.Grid;
|
||||||
import de.bluecolored.bluemap.core.world.Region;
|
import de.bluecolored.bluemap.core.world.Region;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.common.serverinterface;
|
package de.bluecolored.bluemap.common.serverinterface;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.MinecraftVersion;
|
import de.bluecolored.bluemap.core.MinecraftVersion;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.Tristate;
|
import de.bluecolored.bluemap.core.util.Tristate;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
@ -55,6 +55,10 @@ default Optional<ServerWorld> getWorld(Path worldFolder) {
|
||||||
.findAny();
|
.findAny();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
@DebugDump
|
@DebugDump
|
||||||
Collection<ServerWorld> getLoadedWorlds();
|
Collection<ServerWorld> getLoadedWorlds();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.common.serverinterface;
|
package de.bluecolored.bluemap.common.serverinterface;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package de.bluecolored.bluemap.common.web;
|
package de.bluecolored.bluemap.common.web;
|
||||||
|
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class CachedRateLimitDataSupplier implements Supplier<String> {
|
public class CachedRateLimitDataSupplier implements Supplier<String> {
|
||||||
|
|
||||||
|
private final ReentrantLock lock = new ReentrantLock();
|
||||||
|
|
||||||
private final Supplier<String> delegate;
|
private final Supplier<String> delegate;
|
||||||
private final long rateLimitMillis;
|
private final long rateLimitMillis;
|
||||||
|
|
||||||
|
@ -22,10 +25,16 @@ public String get() {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void update() {
|
protected void update() {
|
||||||
long now = System.currentTimeMillis();
|
if (lock.tryLock()) {
|
||||||
if (data != null && now < updateTime + this.rateLimitMillis) return;
|
try {
|
||||||
this.updateTime = now;
|
long now = System.currentTimeMillis();
|
||||||
this.data = delegate.get();
|
if (data != null && now < updateTime + this.rateLimitMillis) return;
|
||||||
|
this.data = delegate.get();
|
||||||
|
this.updateTime = now;
|
||||||
|
} finally {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,27 @@
|
||||||
package de.bluecolored.bluemap.common.web;
|
package de.bluecolored.bluemap.common.web;
|
||||||
|
|
||||||
|
import de.bluecolored.bluemap.api.marker.MarkerSet;
|
||||||
import de.bluecolored.bluemap.common.config.PluginConfig;
|
import de.bluecolored.bluemap.common.config.PluginConfig;
|
||||||
|
import de.bluecolored.bluemap.common.live.LiveMarkersDataSupplier;
|
||||||
import de.bluecolored.bluemap.common.live.LivePlayersDataSupplier;
|
import de.bluecolored.bluemap.common.live.LivePlayersDataSupplier;
|
||||||
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
import de.bluecolored.bluemap.core.storage.Storage;
|
import de.bluecolored.bluemap.core.storage.Storage;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class MapRequestHandler extends RoutingRequestHandler {
|
public class MapRequestHandler extends RoutingRequestHandler {
|
||||||
|
|
||||||
public MapRequestHandler(BmMap map, ServerInterface serverInterface, PluginConfig pluginConfig, Predicate<UUID> playerFilter) {
|
public MapRequestHandler(BmMap map, ServerInterface serverInterface, PluginConfig pluginConfig,
|
||||||
this(map.getId(), map.getWorldId(), map.getStorage(), serverInterface, pluginConfig, playerFilter);
|
Predicate<UUID> playerFilter) {
|
||||||
|
this(map.getId(), map.getWorldId(), map.getStorage(), map.getMarkerSets(),
|
||||||
|
serverInterface, pluginConfig, playerFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapRequestHandler(String mapId, String worldId, Storage mapStorage, ServerInterface serverInterface, PluginConfig pluginConfig, Predicate<UUID> playerFilter) {
|
public MapRequestHandler(String mapId, String worldId, Storage mapStorage, Map<String, MarkerSet> markerSets,
|
||||||
|
ServerInterface serverInterface, PluginConfig pluginConfig, Predicate<UUID> playerFilter) {
|
||||||
register(".*", new MapStorageRequestHandler(mapId, mapStorage));
|
register(".*", new MapStorageRequestHandler(mapId, mapStorage));
|
||||||
|
|
||||||
register("live/players", "", new JsonDataRequestHandler(
|
register("live/players", "", new JsonDataRequestHandler(
|
||||||
|
@ -23,6 +29,11 @@ public MapRequestHandler(String mapId, String worldId, Storage mapStorage, Serve
|
||||||
new LivePlayersDataSupplier(serverInterface, pluginConfig, worldId, playerFilter),
|
new LivePlayersDataSupplier(serverInterface, pluginConfig, worldId, playerFilter),
|
||||||
1000)
|
1000)
|
||||||
));
|
));
|
||||||
|
register("live/markers", "", new JsonDataRequestHandler(
|
||||||
|
new CachedRateLimitDataSupplier(
|
||||||
|
new LiveMarkersDataSupplier(markerSets),
|
||||||
|
10000)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.common.webserver;
|
package de.bluecolored.bluemap.common.webserver;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
|
@ -32,16 +32,16 @@ repositories {
|
||||||
@Suppress("GradlePackageUpdate")
|
@Suppress("GradlePackageUpdate")
|
||||||
dependencies {
|
dependencies {
|
||||||
api ("com.github.ben-manes.caffeine:caffeine:2.8.5")
|
api ("com.github.ben-manes.caffeine:caffeine:2.8.5")
|
||||||
api ("com.google.code.gson:gson:2.8.0")
|
|
||||||
api ("org.apache.commons:commons-lang3:3.6")
|
api ("org.apache.commons:commons-lang3:3.6")
|
||||||
api ("commons-io:commons-io:2.5")
|
api ("commons-io:commons-io:2.5")
|
||||||
api ("com.flowpowered:flow-math:1.0.3")
|
|
||||||
api ("org.spongepowered:configurate-hocon:4.1.1")
|
api ("org.spongepowered:configurate-hocon:4.1.1")
|
||||||
api ("org.spongepowered:configurate-gson:4.1.1")
|
api ("org.spongepowered:configurate-gson:4.1.1")
|
||||||
api ("com.github.Querz:NBT:4.0")
|
api ("com.github.Querz:NBT:4.0")
|
||||||
api ("org.apache.commons:commons-dbcp2:2.9.0")
|
api ("org.apache.commons:commons-dbcp2:2.9.0")
|
||||||
|
|
||||||
compileOnly ("org.jetbrains:annotations:16.0.2")
|
api ("de.bluecolored.bluemap.api:BlueMapAPI")
|
||||||
|
|
||||||
|
compileOnly ("org.jetbrains:annotations:23.0.0")
|
||||||
|
|
||||||
testImplementation ("org.junit.jupiter:junit-jupiter:5.8.2")
|
testImplementation ("org.junit.jupiter:junit-jupiter:5.8.2")
|
||||||
testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.8.2")
|
testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.8.2")
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core;
|
package de.bluecolored.bluemap.core;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.Lazy;
|
import de.bluecolored.bluemap.core.util.Lazy;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.debug;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target({
|
|
||||||
ElementType.METHOD,
|
|
||||||
ElementType.FIELD,
|
|
||||||
ElementType.TYPE
|
|
||||||
})
|
|
||||||
public @interface DebugDump {
|
|
||||||
|
|
||||||
String value() default "";
|
|
||||||
|
|
||||||
}
|
|
|
@ -24,6 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.debug;
|
package de.bluecolored.bluemap.core.debug;
|
||||||
|
|
||||||
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import org.spongepowered.configurate.ConfigurationNode;
|
import org.spongepowered.configurate.ConfigurationNode;
|
||||||
import org.spongepowered.configurate.ConfigurationOptions;
|
import org.spongepowered.configurate.ConfigurationOptions;
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
package de.bluecolored.bluemap.core.map;
|
package de.bluecolored.bluemap.core.map;
|
||||||
|
|
||||||
import com.flowpowered.math.vector.Vector2i;
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.marker.MarkerSet;
|
||||||
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.map.hires.HiresModelManager;
|
import de.bluecolored.bluemap.core.map.hires.HiresModelManager;
|
||||||
import de.bluecolored.bluemap.core.map.hires.HiresTileMeta;
|
import de.bluecolored.bluemap.core.map.hires.HiresTileMeta;
|
||||||
|
@ -40,8 +41,10 @@
|
||||||
import de.bluecolored.bluemap.core.world.World;
|
import de.bluecolored.bluemap.core.world.World;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
@DebugDump
|
@DebugDump
|
||||||
|
@ -61,6 +64,8 @@ public class BmMap {
|
||||||
private final HiresModelManager hiresModelManager;
|
private final HiresModelManager hiresModelManager;
|
||||||
private final LowresModelManager lowresModelManager;
|
private final LowresModelManager lowresModelManager;
|
||||||
|
|
||||||
|
private final Map<String, MarkerSet> markerSets;
|
||||||
|
|
||||||
private Predicate<Vector2i> tileFilter;
|
private Predicate<Vector2i> tileFilter;
|
||||||
|
|
||||||
private long renderTimeSumNanos;
|
private long renderTimeSumNanos;
|
||||||
|
@ -98,6 +103,8 @@ public BmMap(String id, String name, String worldId, World world, Storage storag
|
||||||
|
|
||||||
this.tileFilter = t -> true;
|
this.tileFilter = t -> true;
|
||||||
|
|
||||||
|
this.markerSets = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
this.renderTimeSumNanos = 0;
|
this.renderTimeSumNanos = 0;
|
||||||
this.tilesRendered = 0;
|
this.tilesRendered = 0;
|
||||||
|
|
||||||
|
@ -211,6 +218,10 @@ public LowresModelManager getLowresModelManager() {
|
||||||
return lowresModelManager;
|
return lowresModelManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, MarkerSet> getMarkerSets() {
|
||||||
|
return markerSets;
|
||||||
|
}
|
||||||
|
|
||||||
public Predicate<Vector2i> getTileFilter() {
|
public Predicate<Vector2i> getTileFilter() {
|
||||||
return tileFilter;
|
return tileFilter;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.core.map;
|
package de.bluecolored.bluemap.core.map;
|
||||||
|
|
||||||
import com.flowpowered.math.vector.Vector2i;
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package de.bluecolored.bluemap.core.map;
|
package de.bluecolored.bluemap.core.map;
|
||||||
|
|
||||||
import com.google.gson.JsonIOException;
|
import com.google.gson.JsonIOException;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
||||||
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
|
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.world.Grid;
|
import de.bluecolored.bluemap.core.world.Grid;
|
||||||
import de.bluecolored.bluemap.core.world.World;
|
import de.bluecolored.bluemap.core.world.World;
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
import com.flowpowered.math.GenericMath;
|
import com.flowpowered.math.GenericMath;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.ConfigUtils;
|
import de.bluecolored.bluemap.core.util.ConfigUtils;
|
||||||
import de.bluecolored.bluemap.core.util.math.Color;
|
import de.bluecolored.bluemap.core.util.math.Color;
|
||||||
import de.bluecolored.bluemap.core.world.Biome;
|
import de.bluecolored.bluemap.core.world.Biome;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.core.resources;
|
package de.bluecolored.bluemap.core.resources;
|
||||||
|
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.world.BlockProperties;
|
import de.bluecolored.bluemap.core.world.BlockProperties;
|
||||||
import de.bluecolored.bluemap.core.world.BlockState;
|
import de.bluecolored.bluemap.core.world.BlockState;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.resources;
|
package de.bluecolored.bluemap.core.resources;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.world.BlockState;
|
import de.bluecolored.bluemap.core.world.BlockState;
|
||||||
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.Key;
|
import de.bluecolored.bluemap.core.util.Key;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.core.resources.biome;
|
package de.bluecolored.bluemap.core.resources.biome;
|
||||||
|
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
|
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
|
||||||
import de.bluecolored.bluemap.core.resources.biome.datapack.DpBiome;
|
import de.bluecolored.bluemap.core.resources.biome.datapack.DpBiome;
|
||||||
import de.bluecolored.bluemap.core.world.Biome;
|
import de.bluecolored.bluemap.core.world.Biome;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.resources.BlockColorCalculatorFactory;
|
import de.bluecolored.bluemap.core.resources.BlockColorCalculatorFactory;
|
||||||
import de.bluecolored.bluemap.core.resources.BlockPropertiesConfig;
|
import de.bluecolored.bluemap.core.resources.BlockPropertiesConfig;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.core.resources.resourcepack.blockmodel;
|
package de.bluecolored.bluemap.core.resources.resourcepack.blockmodel;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.texture.Texture;
|
import de.bluecolored.bluemap.core.resources.resourcepack.texture.Texture;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
||||||
import de.bluecolored.bluemap.core.util.Direction;
|
import de.bluecolored.bluemap.core.util.Direction;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package de.bluecolored.bluemap.core.resources.resourcepack.blockmodel;
|
package de.bluecolored.bluemap.core.resources.resourcepack.blockmodel;
|
||||||
|
|
||||||
import com.flowpowered.math.vector.Vector4f;
|
import com.flowpowered.math.vector.Vector4f;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
||||||
import de.bluecolored.bluemap.core.util.Direction;
|
import de.bluecolored.bluemap.core.util.Direction;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
||||||
import de.bluecolored.bluemap.core.util.math.Axis;
|
import de.bluecolored.bluemap.core.util.math.Axis;
|
||||||
import de.bluecolored.bluemap.core.util.math.MatrixM4f;
|
import de.bluecolored.bluemap.core.util.math.MatrixM4f;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.texture.Texture;
|
import de.bluecolored.bluemap.core.resources.resourcepack.texture.Texture;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.core.resources.resourcepack.blockstate;
|
package de.bluecolored.bluemap.core.resources.resourcepack.blockstate;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.core.resources.resourcepack.blockstate;
|
package de.bluecolored.bluemap.core.resources.resourcepack.blockstate;
|
||||||
|
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.Preconditions;
|
import de.bluecolored.bluemap.core.util.Preconditions;
|
||||||
import de.bluecolored.bluemap.core.world.BlockState;
|
import de.bluecolored.bluemap.core.world.BlockState;
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
||||||
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
|
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
|
||||||
import de.bluecolored.bluemap.core.world.BlockState;
|
import de.bluecolored.bluemap.core.world.BlockState;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
||||||
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
||||||
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonToken;
|
import com.google.gson.stream.JsonToken;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
|
||||||
import de.bluecolored.bluemap.core.world.BlockState;
|
import de.bluecolored.bluemap.core.world.BlockState;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.core.resources.resourcepack.texture;
|
package de.bluecolored.bluemap.core.resources.resourcepack.texture;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
||||||
import de.bluecolored.bluemap.core.util.math.Color;
|
import de.bluecolored.bluemap.core.util.math.Color;
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package de.bluecolored.bluemap.core.storage.file;
|
package de.bluecolored.bluemap.core.storage.file;
|
||||||
|
|
||||||
import com.flowpowered.math.vector.Vector2i;
|
import com.flowpowered.math.vector.Vector2i;
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.storage.*;
|
import de.bluecolored.bluemap.core.storage.*;
|
||||||
import de.bluecolored.bluemap.core.util.AtomicFileHelper;
|
import de.bluecolored.bluemap.core.util.AtomicFileHelper;
|
||||||
import de.bluecolored.bluemap.core.util.DeletingPathVisitor;
|
import de.bluecolored.bluemap.core.util.DeletingPathVisitor;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.bluecolored.bluemap.core.util;
|
package de.bluecolored.bluemap.core.util;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
import de.bluecolored.bluemap.core.resources.ResourcePath;
|
||||||
|
|
||||||
@DebugDump
|
@DebugDump
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.util;
|
package de.bluecolored.bluemap.core.util;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.util.math;
|
package de.bluecolored.bluemap.core.util.math;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
|
|
||||||
@DebugDump
|
@DebugDump
|
||||||
public class Color {
|
public class Color {
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.world;
|
package de.bluecolored.bluemap.core.world;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.Key;
|
import de.bluecolored.bluemap.core.util.Key;
|
||||||
import de.bluecolored.bluemap.core.util.math.Color;
|
import de.bluecolored.bluemap.core.util.math.Color;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.world;
|
package de.bluecolored.bluemap.core.world;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.Tristate;
|
import de.bluecolored.bluemap.core.util.Tristate;
|
||||||
|
|
||||||
@DebugDump
|
@DebugDump
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.world;
|
package de.bluecolored.bluemap.core.world;
|
||||||
|
|
||||||
import de.bluecolored.bluemap.core.debug.DebugDump;
|
import de.bluecolored.bluemap.api.debug.DebugDump;
|
||||||
import de.bluecolored.bluemap.core.util.Key;
|
import de.bluecolored.bluemap.core.util.Key;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -142,6 +144,27 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof Identifier) {
|
||||||
|
DimensionType dimensionType = DimensionType.byId((Identifier) world);
|
||||||
|
if (dimensionType != null) world = dimensionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof DimensionType) {
|
||||||
|
var serverWorld = serverInstance.getWorld((DimensionType) world);
|
||||||
|
if (serverWorld != null) world = serverWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.server.world.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.server.world.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
||||||
return worlds.get(serverWorld);
|
return worlds.get(serverWorld);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,8 @@
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -142,6 +144,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof RegistryKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getWorld((RegistryKey<World>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.server.world.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.server.world.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
||||||
return worlds.get(serverWorld);
|
return worlds.get(serverWorld);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,8 @@
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -142,6 +144,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof RegistryKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getWorld((RegistryKey<World>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.server.world.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.server.world.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
||||||
return worlds.get(serverWorld);
|
return worlds.get(serverWorld);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,8 @@
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -142,6 +144,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof RegistryKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getWorld((RegistryKey<World>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.server.world.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.server.world.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
||||||
return worlds.get(serverWorld);
|
return worlds.get(serverWorld);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,8 @@
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -142,6 +144,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof RegistryKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getWorld((RegistryKey<World>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.server.world.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.server.world.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
||||||
return worlds.get(serverWorld);
|
return worlds.get(serverWorld);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,8 @@
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -142,6 +144,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof RegistryKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getWorld((RegistryKey<World>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.server.world.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.server.world.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
public ServerWorld getWorld(net.minecraft.server.world.ServerWorld serverWorld) {
|
||||||
return worlds.get(serverWorld);
|
return worlds.get(serverWorld);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
||||||
|
@ -155,6 +157,28 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof ResourceLocation) {
|
||||||
|
DimensionType dimensionType = DimensionType.byName((ResourceLocation) world);
|
||||||
|
if (dimensionType != null) world = dimensionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof DimensionType) {
|
||||||
|
var serverWorld = serverInstance.getWorld((DimensionType) world);
|
||||||
|
//noinspection ConstantConditions
|
||||||
|
if (serverWorld != null) world = serverWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.world.server.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.world.server.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.world.server.ServerWorld world) {
|
public ServerWorld getWorld(net.minecraft.world.server.ServerWorld world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
||||||
|
@ -155,6 +157,28 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof ResourceLocation) {
|
||||||
|
DimensionType dimensionType = DimensionType.byName((ResourceLocation) world);
|
||||||
|
if (dimensionType != null) world = dimensionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof DimensionType) {
|
||||||
|
var serverWorld = serverInstance.getWorld((DimensionType) world);
|
||||||
|
//noinspection ConstantConditions
|
||||||
|
if (serverWorld != null) world = serverWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.world.server.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.world.server.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.world.server.ServerWorld world) {
|
public ServerWorld getWorld(net.minecraft.world.server.ServerWorld world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.util.RegistryKey;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
||||||
|
@ -155,6 +157,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof RegistryKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getWorld((RegistryKey<World>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof net.minecraft.world.server.ServerWorld)
|
||||||
|
return Optional.of(getWorld((net.minecraft.world.server.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(net.minecraft.world.server.ServerWorld world) {
|
public ServerWorld getWorld(net.minecraft.world.server.ServerWorld world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,11 @@
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import de.bluecolored.bluemap.core.MinecraftVersion;
|
import de.bluecolored.bluemap.core.MinecraftVersion;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
||||||
|
@ -154,6 +156,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof ResourceKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getLevel((ResourceKey<Level>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof ServerLevel)
|
||||||
|
return Optional.of(getWorld((ServerLevel) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(ServerLevel world) {
|
public ServerWorld getWorld(ServerLevel world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,11 @@
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import de.bluecolored.bluemap.core.MinecraftVersion;
|
import de.bluecolored.bluemap.core.MinecraftVersion;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
||||||
|
@ -154,6 +156,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof ResourceKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getLevel((ResourceKey<Level>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof ServerLevel)
|
||||||
|
return Optional.of(getWorld((ServerLevel) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(ServerLevel world) {
|
public ServerWorld getWorld(ServerLevel world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,11 @@
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
import de.bluecolored.bluemap.core.BlueMap;
|
||||||
import de.bluecolored.bluemap.core.MinecraftVersion;
|
import de.bluecolored.bluemap.core.MinecraftVersion;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
||||||
|
@ -154,6 +156,24 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof ResourceKey) {
|
||||||
|
try {
|
||||||
|
world = serverInstance.getLevel((ResourceKey<Level>) world);
|
||||||
|
} catch (ClassCastException ignored) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof ServerLevel)
|
||||||
|
return Optional.of(getWorld((ServerLevel) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(ServerLevel world) {
|
public ServerWorld getWorld(ServerLevel world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,6 +190,27 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof String) {
|
||||||
|
var serverWorld = Bukkit.getWorld((String) world);
|
||||||
|
if (serverWorld != null) world = serverWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof UUID) {
|
||||||
|
var serverWorld = Bukkit.getWorld((UUID) world);
|
||||||
|
if (serverWorld != null) world = serverWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof World)
|
||||||
|
return Optional.of(getWorld((World) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(World world) {
|
public ServerWorld getWorld(World world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
import de.bluecolored.bluemap.sponge.SpongeCommands.SpongeCommandProxy;
|
import de.bluecolored.bluemap.sponge.SpongeCommands.SpongeCommandProxy;
|
||||||
import org.apache.maven.artifact.versioning.ArtifactVersion;
|
import org.apache.maven.artifact.versioning.ArtifactVersion;
|
||||||
import org.spongepowered.api.Platform;
|
import org.spongepowered.api.Platform;
|
||||||
|
import org.spongepowered.api.ResourceKey;
|
||||||
import org.spongepowered.api.Server;
|
import org.spongepowered.api.Server;
|
||||||
import org.spongepowered.api.Sponge;
|
import org.spongepowered.api.Sponge;
|
||||||
import org.spongepowered.api.command.Command;
|
import org.spongepowered.api.command.Command;
|
||||||
|
@ -226,6 +227,22 @@ public Collection<ServerWorld> getLoadedWorlds() {
|
||||||
return loadedWorlds;
|
return loadedWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ServerWorld> getWorld(Object world) {
|
||||||
|
if (world instanceof Path)
|
||||||
|
return getWorld((Path) world);
|
||||||
|
|
||||||
|
if (world instanceof ResourceKey) {
|
||||||
|
var serverWorld = Sponge.server().worldManager().world((ResourceKey) world).orElse(null);
|
||||||
|
if (serverWorld != null) world = serverWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world instanceof org.spongepowered.api.world.server.ServerWorld)
|
||||||
|
return Optional.of(getWorld((org.spongepowered.api.world.server.ServerWorld) world));
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public ServerWorld getWorld(org.spongepowered.api.world.server.ServerWorld world) {
|
public ServerWorld getWorld(org.spongepowered.api.world.server.ServerWorld world) {
|
||||||
return worlds.get(world);
|
return worlds.get(world);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user