mirror of
https://github.com/BlueMap-Minecraft/BlueMap.git
synced 2025-02-04 14:41:23 +01:00
Implement API additions
This commit is contained in:
parent
4a54cf7b79
commit
633021d6e8
@ -1 +1 @@
|
||||
Subproject commit 7774935fb3be51ea32b144261d1e5a02294f9d49
|
||||
Subproject commit b8abf79957681f908ab6834aae1e6144e274efb9
|
@ -59,7 +59,7 @@ public class BlueMapAPIImpl extends BlueMapAPI {
|
||||
public BlueMapAPIImpl(Plugin plugin) {
|
||||
this.plugin = plugin;
|
||||
|
||||
this.renderer = new RenderAPIImpl(this, plugin.getRenderManager());
|
||||
this.renderer = new RenderAPIImpl(this, plugin);
|
||||
|
||||
worlds = new HashMap<>();
|
||||
for (World world : plugin.getWorlds()) {
|
||||
|
@ -25,10 +25,13 @@
|
||||
package de.bluecolored.bluemap.common.api;
|
||||
|
||||
import com.flowpowered.math.vector.Vector2i;
|
||||
|
||||
import de.bluecolored.bluemap.api.BlueMapMap;
|
||||
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
||||
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
|
||||
import de.bluecolored.bluemap.core.map.BmMap;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class BlueMapMapImpl implements BlueMapMap {
|
||||
|
||||
private BlueMapAPIImpl api;
|
||||
@ -64,6 +67,47 @@ public Vector2i getTileOffset() {
|
||||
return delegate.getHiresModelManager().getTileGrid().getOffset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTileFilter(Predicate<Vector2i> filter) {
|
||||
delegate.setTileFilter(filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<Vector2i> getTileFilter() {
|
||||
return delegate.getTileFilter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFrozen() {
|
||||
return !api.plugin.getPluginState().getMapState(delegate).isUpdateEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void setFrozen(boolean frozen) {
|
||||
if (isFrozen()) unfreeze();
|
||||
else freeze();
|
||||
}
|
||||
|
||||
private synchronized void unfreeze() {
|
||||
api.plugin.startWatchingMap(delegate);
|
||||
api.plugin.getPluginState().getMapState(delegate).setUpdateEnabled(true);
|
||||
api.plugin.getRenderManager().scheduleRenderTask(new MapUpdateTask(delegate));
|
||||
}
|
||||
|
||||
private synchronized void freeze() {
|
||||
api.plugin.stopWatchingMap(delegate);
|
||||
api.plugin.getPluginState().getMapState(delegate).setUpdateEnabled(false);
|
||||
api.plugin.getRenderManager().removeRenderTasksIf(task -> {
|
||||
if (task instanceof MapUpdateTask)
|
||||
return ((MapUpdateTask) task).getMap().equals(delegate);
|
||||
|
||||
if (task instanceof WorldRegionRenderTask)
|
||||
return ((WorldRegionRenderTask) task).getMap().equals(delegate);
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
public BmMap getMapType() {
|
||||
return delegate;
|
||||
}
|
||||
|
@ -30,20 +30,28 @@
|
||||
import de.bluecolored.bluemap.api.renderer.RenderAPI;
|
||||
import de.bluecolored.bluemap.common.api.BlueMapAPIImpl;
|
||||
import de.bluecolored.bluemap.common.api.BlueMapMapImpl;
|
||||
import de.bluecolored.bluemap.common.plugin.Plugin;
|
||||
import de.bluecolored.bluemap.common.rendermanager.MapPurgeTask;
|
||||
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
|
||||
import de.bluecolored.bluemap.common.rendermanager.RenderManager;
|
||||
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
|
||||
import de.bluecolored.bluemap.core.map.BmMap;
|
||||
import de.bluecolored.bluemap.core.world.Grid;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.UUID;
|
||||
|
||||
public class RenderAPIImpl implements RenderAPI {
|
||||
|
||||
private BlueMapAPIImpl api;
|
||||
private RenderManager renderManager;
|
||||
private final BlueMapAPIImpl api;
|
||||
private final Plugin plugin;
|
||||
private final RenderManager renderManager;
|
||||
|
||||
public RenderAPIImpl(BlueMapAPIImpl api, RenderManager renderManager) {
|
||||
public RenderAPIImpl(BlueMapAPIImpl api, Plugin plugin) {
|
||||
this.api = api;
|
||||
this.renderManager = renderManager;
|
||||
this.plugin = plugin;
|
||||
this.renderManager = plugin.getRenderManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -63,12 +71,7 @@ public void render(String mapId, Vector2i tile) {
|
||||
|
||||
@Override
|
||||
public void render(BlueMapMap map, Vector2i tile) {
|
||||
BlueMapMapImpl cmap;
|
||||
if (map instanceof BlueMapMapImpl) {
|
||||
cmap = (BlueMapMapImpl) map;
|
||||
} else {
|
||||
cmap = api.getMapForId(map.getId());
|
||||
}
|
||||
BlueMapMapImpl cmap = castMap(map);
|
||||
|
||||
Grid regionGrid = cmap.getWorld().getWorld().getRegionGrid();
|
||||
Grid tileGrid = cmap.getMapType().getHiresModelManager().getTileGrid();
|
||||
@ -78,6 +81,24 @@ public void render(BlueMapMap map, Vector2i tile) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scheduleMapUpdateTask(BlueMapMap map, boolean force) {
|
||||
BlueMapMapImpl cmap = castMap(map);
|
||||
return renderManager.scheduleRenderTask(new MapUpdateTask(cmap.getMapType(), force));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scheduleMapUpdateTask(BlueMapMap map, Collection<Vector2i> regions, boolean force) {
|
||||
BlueMapMapImpl cmap = castMap(map);
|
||||
return renderManager.scheduleRenderTask(new MapUpdateTask(cmap.getMapType(), regions, force));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scheduleMapPurgeTask(BlueMapMap map) throws IOException {
|
||||
BlueMapMapImpl cmap = castMap(map);
|
||||
return renderManager.scheduleRenderTask(new MapPurgeTask(cmap.getMapType()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int renderQueueSize() {
|
||||
return renderManager.getScheduledRenderTasks().size();
|
||||
@ -95,12 +116,27 @@ public boolean isRunning() {
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
if (!isRunning()) renderManager.start(api.plugin.getCoreConfig().getRenderThreadCount());
|
||||
if (!isRunning()){
|
||||
renderManager.start(api.plugin.getCoreConfig().getRenderThreadCount());
|
||||
}
|
||||
plugin.getPluginState().setRenderThreadsEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pause() {
|
||||
renderManager.stop();
|
||||
plugin.getPluginState().setRenderThreadsEnabled(false);
|
||||
}
|
||||
|
||||
private BlueMapMapImpl castMap(BlueMapMap map) {
|
||||
BlueMapMapImpl cmap;
|
||||
if (map instanceof BlueMapMapImpl) {
|
||||
cmap = (BlueMapMapImpl) map;
|
||||
} else {
|
||||
cmap = api.getMapForId(map.getId());
|
||||
}
|
||||
|
||||
return cmap;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -37,6 +37,7 @@
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class BmMap {
|
||||
|
||||
@ -50,6 +51,8 @@ public class BmMap {
|
||||
private final HiresModelManager hiresModelManager;
|
||||
private final LowresModelManager lowresModelManager;
|
||||
|
||||
private Predicate<Vector2i> tileFilter;
|
||||
|
||||
public BmMap(String id, String name, World world, Path fileRoot, ResourcePack resourcePack, MapSettings settings) throws IOException {
|
||||
this.id = Objects.requireNonNull(id);
|
||||
this.name = Objects.requireNonNull(name);
|
||||
@ -79,9 +82,13 @@ public BmMap(String id, String name, World world, Path fileRoot, ResourcePack re
|
||||
new Vector2i(settings.getLowresPointsPerHiresTile(), settings.getLowresPointsPerHiresTile()),
|
||||
settings.useGzipCompression()
|
||||
);
|
||||
|
||||
this.tileFilter = t -> true;
|
||||
}
|
||||
|
||||
public void renderTile(Vector2i tile) {
|
||||
if (!tileFilter.test(tile)) return;
|
||||
|
||||
HiresModel hiresModel = hiresModelManager.render(world, tile);
|
||||
lowresModelManager.render(hiresModel);
|
||||
}
|
||||
@ -127,7 +134,15 @@ public HiresModelManager getHiresModelManager() {
|
||||
public LowresModelManager getLowresModelManager() {
|
||||
return lowresModelManager;
|
||||
}
|
||||
|
||||
|
||||
public Predicate<Vector2i> getTileFilter() {
|
||||
return tileFilter;
|
||||
}
|
||||
|
||||
public void setTileFilter(Predicate<Vector2i> tileFilter) {
|
||||
this.tileFilter = tileFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return id.hashCode();
|
||||
|
Loading…
Reference in New Issue
Block a user