Git Product home page Git Product logo

blockmap's Introduction

BlockMap – A Minecraft 1.18 world viewer

Build Status

Features:

  • Beautiful, realistic renders
  • Reasonably fast
  • Works with huge worlds
  • Works on servers (requires admins and a web server, but no Minecraft server plugins)
  • Rendering scale: 1 pixel : 1 block
  • An interactive GUI viewer made with JavaFX
  • Pins on the map show points of interest like players, generated structures and villages
  • Different color maps and shaders that highlight exactly what you are looking for (including an underground caves and an ocean ground view)
  • A command line interface to render your worlds from scripts
  • The core rendering code as library to use in your own projects
  • Works with 1.18 worlds (with limited support down to 1.13)

Gallery

Four rendered region files, each with one with a different color map Four rendered region files, each one with a different shader Screenshot from the GUI Screenshot showing different Minecraft structures as pins on the map Gif of the GUI zooming out in a large world

Requirements:

  • Minecraft 1.13+ worlds. Chunks from before the release (even from 1.13 snapshots) will be ignored. Please optimize your worlds in Minecraft before rendering them (or use other map viewer, like TMCMR).
  • Java 17+
    • While BlockMap should run on any Java, using the OpenJDK is recommended.
    • If you won't hack on the code itself, the JRE should suffice (in the downloads section, choose JRE over JDK)
    • Past experience has shown that Java updates are not as backwards-compatible as they could be. So while any newer Java version should work just fine, it has currently only been tested up to Java 17. If you encounter any problems that go away by downgrading Java, please open up an issue.

Download / Installation:

Download the latest version from the Release page.

AUR package

Arch Linux users can install BlockMap directly from the AUR.

Other distros

BlockMap hasn't been packaged for other distros yet (looking for maintainers).

Use it (GUI):

The GUI version should just run by (double)clicking it. Otherwise run it through:

java -jar BlockMap-gui-2.4.1.jar

to start. If you installed BlockMap through a package manager, search for it in your launcher or menu.

GUI controls:

  • Mouse wheel to zoom in and out
  • Drag with the left mouse button to pan the view
    • If you drag to the edge, the mouse will wrap around so you can drag indefinitely. Blender users will appreciate this
      • Currently broken, sorry
  • When loading a world, you can select either a world folder, a region folder or a single region file
  • You can only load remote worlds (from servers) if the server owner supports it.

Use it (CLI):

If you want to use BlockMap through the command line without,

# For general usage help
java -jar BlockMap-cli-2.4.1.jar help
# For help about rendering worlds to a folder
java -jar BlockMap-cli-2.4.1.jar help render

will get you started. On Linux even with colors!

If your world has been created before the Minecraft 1.13 release, please optimize it. To do this, start Minecraft, select your world, go to "Edit" and then "Optimize World".

Server usage:

This feature is not stabilized yet. Backwards-incompatible changes may occur even on minor releases. Any feedback welcome.

The new server mode is based around the following concept:

  • Declare a configuration file with all your worlds and how you want to render them. An example configuration can be found here.
  • Call blockmap render-many and pass the configuration file as argument.
  • An output directory will be created with all the rendered files. You can view them in BlockMap.
  • Host that folder using the web server of your choice (e.g. miniserve). Clients will now be able to view your worlds across the Internet.
  • Call this on a scheduled basis (e.g. Systemd timer, or from a server plugin). Subsequent runs will update the folder without re-rendering everything.
  • You can control which pins will be generated and included in the output and which not. Omitting any of these options will always default to true.

Old server usage:

The "old" way of doing server support: a simple shell script that calls the CLI.

The bash script server.sh is an example of how this could be used in a server environment. Simply set the paths at the top of the file and call this script regularly on the server. It has a few different render settings pre-configured, but they are easy to adapt to your needs.

Use it (Library):

If you have trouble getting the library as dependency into your build system, please open up an issue. We generally recommend using JitPack.

The main action happens in the RegionRenderer class. It takes some RenderSettings (color map, height bounds, etc.) and renders whole RegionFiles at once. The result will be a Region object, which contains not only the pixel data but also extensive metadata about the structure of the world. The RegionFolder class helps you manage rendering whole worlds, especially with regards to keeping a rendered world up to date and other caching problems. Example usage:

MinecraftDimension dimension = MinecraftDimension.OVERWOLRD;
RenderSettings settings = new RenderSettings();
RegionRenderer renderer = new RegionRenderer(settings);
Path input; // <-- must point to a Minecraft world folder
Path inputRegion = input.resolve(dimension.getRegionPath());
Path output; // <-- must point to an empty folder

/* Actual rendering 
 *
 * We could simply start loading `RegionFile`s per hand and feeding them into the `renderer`, but the `RegionFolder`s will help us
 * with most of the dirty work. A `CachedRegionFolder` will be used to actually (and automatically) save the images on disk.
 */
WorldRegionFolder world = WorldRegionFolder.load(inputRegion, renderer, dimension == MinecraftDimension.NETHER);
CachedRegionFolder cached = CachedRegionFolder.create(world, false, output);
for (Vector2ic pos : world.listRegions()) {
	cached.render(pos);
}

For more detailed examples (including all the possible settings and a "merge everything into a huge PNG" mode), look at the CLI code (CommandLineMain.java).

Build it:

Due to technical, legal and performance reasons, some resources required to run and test BlockMap are not included in this repository, but generated locally. The Gradle task regenerate will download all required files (you only need an internet connection the first time and after a clean) and generate and compile a bunch of stuff. Without this, nothing will work. On a freshly cloned repository, use initEclipse or initIdea to transform the repository into a project you can simply open in your favorite IDE. (Warning: The eclipse and idea tasks have to be called each time some dependencies changed. Furthermore, they link to some folders in the build directory. This means that they won't work as intended until regenerate has been called.)

All screenshots from above are generated automatically through the Gradle task generateScreenshots. This way, they are always up to date with the latest version. Be aware that this task needs to generate a fairly large Minecraft world first and then render it, which takes both time and space and will cause Gradle to slow down a lot.

Run it:

To run from code:

./gradlew regenerate
# For the CLI
./gradlew :BlockMap-cli:run
# For the GUI
./gradlew :BlockMap-gui:run

If you want to create a release jar and run it, use ./gradlew :BlockMap-gui:runShadow and ./gradlew :BlockMap-cli:runShadow.

Update and Release BlockMap:

./gradlew regenerate
./gradlew generateScreenshots # Optional
./gradlew release
  • Bump the version in build.gradle
  • Update README.md
    • Bump the version information in file paths
    • Bump the Minecraft version (if applicable)
    • Check the feature list and read through it
  • Update the changelog.md
  • Regenerate all resources (see above)
    • If something in the UI changed, regenerate the screenshots
    • If some dependencies changed: Run ./gradlew licenseReport and copy the generated JSON file to ./BlockMap-gui/src/main/resources/de/piegames/blockmap/gui/standalone/about/licenseReport.json
  • Commit the changes as Version bump: $VESRION. Add a tag with the version. Don't forget to push the tag as well! (git push --tags)
  • Generate the release binaries (need to be called on each target platform)
    • This will create two executable fat (=containing all needed dependencies) jars in ./BlockMap-{gui,cli}/build/libs/fat/.
  • Release on GitHub
  • Update all packaged versions (currently only AUR)

Update to newer Minecraft version

  1. Update to the currently latest minor version, according to the instructions below, before going on with the next major update.
  2. Update and start Minecraft. Create a new debug world. Copy it to ./BlockMap-internal/src/test/resources. Delete the playerdata, stats and advancements folders in it.
  3. Copy the current block color instructions in ./BlockMap-internal/src/main/resources/ to match the new Minecraft version.
  4. Copy the current ChunkRenderer in de.piegames.blockmap.renderer (in BlockMap-core) to match the new Minecraft version.
  5. Commit as Minecraft $VERSION: Update preparation
  6. Run ./gradlew checkMinecraftVersions and update de.piegames.blockmap.MinecraftVersion accordingly.
  7. Update the Minecraft version of ChunkRenderer_$VERSION in the constructor
  8. Update de.piegames.blockmap.renderer.RegionRenderer to use the new ChunkRenderer
  9. Run ./gradlew regenerate and make it work
  10. Run all the tests (./gradlew test) and make them work
    • If Minecraft changed something on the save format, the ChunkRenderer will fail
    • If Minecraft added new blocks, the color map needs to be updated. The failing tests will tell which blocks are missing. Additional information can be retrieved from the default resource pack.
    • If Minecraft added or changed biomes, manual checking and updating is required
  11. Generate a Minecraft vanilla world and test the GUI
  12. Implement any new features of the update (e.g. new data that can be shown as GUI pin)
    • Don't forget ./BlockMap-internal/src/main/resources/biome-color-instructions.json
  13. Regenerate the screenshots
    • Optimize the BlockMapWorld in Minecraft
    • ./gradlew clean && ./gradlew regenerate && ./gradlew generateScreenshots
  14. Update version references in README.md (and elsewhere)
  15. Release it 🎉

Troubleshooting

Mod support

Currently, no Minecraft mods are supported, but the rendering engine is built in an extensible way. Mod support will only be implemented on request.

TODO

  • Portalruinen Nether
  • Map pins buggy

blockmap's People

Contributors

alotron avatar dinosaurismus avatar piegamesde avatar reispfannenfresser avatar saibotk avatar uncovery avatar yanlyub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blockmap's Issues

Compile fails with directory not found

I want compile BlockMap on a freshly cloned repository on Debian Stretch using Gradle 5 for automatically generation of maps for our minecraft server. But after using gradle regenerate following error appears:

> Task :BlockMap:BlockMap-internal:extractMinecraftData FAILED

> Task :regenerate FAILED
Task ':regenerate' is not up-to-date because:
  Task has not declared any outputs despite executing actions.
Selected primary task 'BlockMap-internal:generateSources' from project :BlockMap-internal
Selected primary task 'BlockMap-internal:generateData' from project :BlockMap-internal
:BlockMap:BlockMap-internal:compileJava (Thread[Execution worker for ':',5,main]) started.
:BlockMap:BlockMap-internal:compileJava (Thread[Execution worker for ':',5,main]) completed. Took 0.067 secs.
:BlockMap:BlockMap-internal:processResources (Thread[Execution worker for ':',5,main]) started.
:BlockMap:BlockMap-internal:processResources (Thread[Execution worker for ':',5,main]) completed. Took 0.011 secs.
:BlockMap:BlockMap-internal:extractMinecraftData (Thread[Execution worker for ':',5,main]) started.
:BlockMap:BlockMap-internal:extractMinecraftData (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs.
:regenerate (Thread[Execution worker for ':',5,main]) completed. Took 0.625 secs.

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':BlockMap:BlockMap-internal:extractMinecraftData'.
> Directory '/home/minecraft/maps/BlockMap/BlockMap-internal/null/server.jar' specified for property '$1' does not exist.

Installed Java version is openjdk8u181

Support Java 16

Environment info

  • BlockMap version: 2.2.1
  • Java version: AdoptOpenJDK 16.0.1.9
  • Operating system: Windows 10 20H2

Description

BlockMap crashes just after showing the splashscreen, without further notice.
When running in the command-prompt, it shows "FATAL GuiMain [50] - Cannot start BlockMap", "javafx.fxml.LoadException".

Steps to reproduce

I tried to start the jar-File on Windows with several Java Versions (Oracle: 16, AdoptOpen: 16, 14, 12), also tried to start with admin privileges and everything in BlockMap version 2.2.0.

Actual result

The application always crashes with "FATAL GuiMain [50] - Cannot start BlockMap", "javafx.fxml.LoadException".

Debug log

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
21-05-17 09:09:16 INFO  RegionFolderCache [73] - Removed 0 worlds from cache
21-05-17 09:09:16 FATAL GuiMain [50] - Cannot start BlockMap
javafx.fxml.LoadException:
file:/C:/Users/Axel%20Geldmeyer/Downloads/BlockMap-gui-2.2.1-windows.jar!/de/piegames/blockmap/gui/standalone/scene.fxml:21

        at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2603) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at de.piegames.blockmap.gui.standalone.GuiMain.init(GuiMain.java:46) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:824) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at java.lang.Thread.run(Thread.java:831) [?:?]
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.lang.Object java.util.Optional.value accessible: module java.base does not "opens java.util" to unnamed module @4691fef1
        at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357) ~[?:?]
        at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[?:?]
        at java.lang.reflect.Field.checkCanSetAccessible(Field.java:177) ~[?:?]
        at java.lang.reflect.Field.setAccessible(Field.java:171) ~[?:?]
        at com.google.gson.internal.reflect.UnsafeReflectionAccessor.makeAccessible(UnsafeReflectionAccessor.java:44) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:159) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.Gson.getAdapter(Gson.java:458) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.Gson.getAdapter(Gson.java:458) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.Gson.getAdapter(Gson.java:458) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.Gson.fromJson(Gson.java:931) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at com.google.gson.Gson.fromJson(Gson.java:897) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at de.piegames.blockmap.gui.standalone.HistoryManager.<init>(HistoryManager.java:60) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at de.piegames.blockmap.gui.standalone.GuiController.<init>(GuiController.java:121) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78) ~[?:?]
        at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
        at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
        at java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128) ~[?:?]
        at jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350) ~[?:?]
        at java.lang.Class.newInstance(Class.java:642) ~[?:?]
        at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:936) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:980) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:227) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:752) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722) ~[BlockMap-gui-2.2.1-windows.jar:?]
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552) ~[BlockMap-gui-2.2.1-windows.jar:?]
        ... 6 more

Rerendering existing images takes a lot of time

When a world grows there might be a lot of files and if you want to keep a map updated rendering those files can take a lot of time.
However most of the region files usually don't change that often and if they don't change a new render of them is probably not needed.

A solution would be to have a render data file that keeps track of when the files were rendered last time and what version of the program that was used to render the image. If the region file is older than the render time, it would then not re render unless you tell the program to.

New render options could be:
--full (where everything renders regardless of what the datafile says)
--fast (where only the files that has been changed since last time or was rendered using a previous version gets rendered)

Default should probably be "full" to not confuse anyone.

Banner positions are wrong

Environment info

  • BlockMap version: 1.6.0
  • Java version:
openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode) 
  • Operating system: Linux triceraptodactyl 5.5.8-1-MANJARO #1 SMP PREEMPT Thu Mar 5 20:29:51 UTC 2020 x86_64 GNU/Linux
  • Minecraft version: 1.13.2

Description

Banner pin positions are wrong.

Steps to reproduce

  1. fly away from origin
  2. place some banners and add them to a map
  3. place the map
  4. render the world

Actual result

The banner pins are near origin.

Expected result:

The banner pins should be near the map.

Screenshots

The banners should be spread across the town, but they are near origin
kommt-ein-pferd-in-die-bar
Map position is marked in pink
sagt-der-barmann

Error: cannot access class com.sun.javafx.util.Utils

Environment info

  • BlockMap version: 1.3.0
  • Java version: Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
  • Operating system: Windows 10 1903

Description

command: java --module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls,javafx.swing -jar .\BlockMap-1.3.0.jar
error message:

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
19-06-10 04:17:40:790 FATAL GuiMain [46] - Cannot start BlockMap
java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x6e3039d9) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x6e3039d9
        at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38) ~[BlockMap-1.3.0.jar:?]
        at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056) ~[BlockMap-1.3.0.jar:?]
        at de.piegames.blockmap.guistandalone.GuiMain.start(GuiMain.java:34) ~[BlockMap-1.3.0.jar:?]
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) ~[javafx.graphics.jar:?]
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) ~[javafx.graphics.jar:?]
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) ~[javafx.graphics.jar:?]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) ~[javafx.graphics.jar:?]
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) ~[javafx.graphics.jar:?]
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[javafx.graphics.jar:?]
        at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) ~[javafx.graphics.jar:?]
        at java.lang.Thread.run(Thread.java:834) [?:?]

Steps to reproduce

  1. Open PowerShell
  2. Run command.

Actual result

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
19-06-10 04:17:40:790 FATAL GuiMain [46] - Cannot start BlockMap
java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x6e3039d9) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x6e3039d9
        at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38) ~[BlockMap-1.3.0.jar:?]
        at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056) ~[BlockMap-1.3.0.jar:?]
        at de.piegames.blockmap.guistandalone.GuiMain.start(GuiMain.java:34) ~[BlockMap-1.3.0.jar:?]
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) ~[javafx.graphics.jar:?]
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) ~[javafx.graphics.jar:?]
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) ~[javafx.graphics.jar:?]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) ~[javafx.graphics.jar:?]
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) ~[javafx.graphics.jar:?]
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[javafx.graphics.jar:?]
        at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) ~[javafx.graphics.jar:?]
        at java.lang.Thread.run(Thread.java:834) [?:?]

Expected result:

Replace me

Screenshots

Debug log

Various errors with openjdk 14.0.2 on win7x64

Environment info

  • BlockMap version: 2.1.0
  • Java version:
    openjdk version "14.0.2" 2020-07-14
    OpenJDK Runtime Environment (build 14.0.2+12-46)
    OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
  • Operating system: `win7x64

Description

I found BlockMap while looking into TOGoS's Map Renderer which no longer works for Minecraft 1.13 and above. I've glad to see it being updated.

Now, I do not know Java -- I've only downloaded & installed the JRE from Oracle. I finally decided to upgrade from Java 10 and found all the business about the license changes. So I went to openjdk.java.net and downloaded what appears to be the latest version: 14.0.2. I tested this version with Minecraft and it worked with no problems I saw. It also worked fine with MultiMC and the fabric loader with all the mods I use.

Next I tried BlockMap (I ran this from an MSYS2 bash shell):

$ OpenJDK/jdk-14.0.2/bin/java -jar BlockMap-gui-2.1.0-windows.jar
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.

What appeared to be sort of a splash screen image appeared and then... nothing. I had to kill the process.

Next I tried:

$ OpenJDK/jdk-14.0.2/bin/java -jar BlockMap-cli-2.1.0.jar render -o Jeepers --create-tile-html "$APPDATA/.minecraft/saves/JeepersCreepers Backup"
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.gson.internal.reflect.UnsafeReflectionAccessor (file:/C:/Users/me/Desktop/BlockMap/BlockMap-cli-2.1.0.jar) to field java.util.Optional.value
WARNING: Please consider reporting this to the maintainers of com.google.gson.internal.reflect.UnsafeReflectionAccessor
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
20-07-26 08:46:25 INFO RegionRenderer [56] - Rendering region file 2 1
:
:

It ran to completion, the tiles are rendered. It is a very large image. Is there a way to allow zooming in/out?

As BlockMap development seems to be in progress, I figured I'd let you know.

Error initializing QuantumRenderer: no suitable pipeline found

Under the Java 12 JDK I get the following error while trying to run this app. I am running this on Windows 10 build 1903.

ERROR FOLLOWS:

Graphics Device initialization failed for :  d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:243)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        ... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:835)
  • java version "12.0.2" 2019-07-16
  • Java(TM) SE Runtime Environment (build 12.0.2+10)
  • Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

Error: NoSuchElementException: No value present

Command used: sudo java -jar BlockMap-1.4.0.jar -v render -l --create-tile-html --min-X=15000 --max-X=15000 --min-Z=15000 --max-Z=15000 -o="/var/www/html/render/topdown" "/home/mc/world name/region"

Result:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.gson.internal.reflect.UnsafeReflectionAccessor (file:/home/mc/render/BlockMap-1.4.0.jar) to constructor java.util.Optional()
WARNING: Please consider reporting this to the maintainers of com.google.gson.internal.reflect.UnsafeReflectionAccessor
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
19-06-23 00:38:09 INFO  PostProcessing [34] - Writing HTML tiles...
Exception in thread "main" picocli.CommandLine$ExecutionException: Error while running command (de.piegames.blockmap.standalone.CommandLineMain$CommandRender@6c0d7c83): java.util.NoSuchElementException: No value present
        at picocli.CommandLine.execute(CommandLine.java:1051)
        at picocli.CommandLine.access$900(CommandLine.java:142)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:1246)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:1214)
        at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1122)
        at picocli.CommandLine.parseWithHandlers(CommandLine.java:1405)
        at picocli.CommandLine.parseWithHandler(CommandLine.java:1344)
        at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:209)
Caused by: java.util.NoSuchElementException: No value present
        at java.base/java.util.OptionalInt.getAsInt(OptionalInt.java:128)
        at de.piegames.blockmap.standalone.PostProcessing.createTileHtml(PostProcessing.java:53)
        at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.run(CommandLineMain.java:181)
        at picocli.CommandLine.execute(CommandLine.java:1043)
        ... 7 more

Currently trying to run version 1.4.0 on a Debian server.

Rendering stops with State unstable=false does not exist

18-11-09 15:11:28:542 WARN RegionRenderer [211] - Skipping chunk
java.lang.IllegalArgumentException: State unstable=false does not exist
at de.piegames.blockmap.renderer.BlockState.valueOf(BlockState.java:317) ~[BlockMap-1.1.1.jar:?]
at de.piegames.blockmap.renderer.RegionRenderer.parseBlockState(RegionRenderer.java:260) ~[BlockMap-1.1.1.jar:?]
at de.piegames.blockmap.renderer.RegionRenderer.lambda$renderSection$3(RegionRenderer.java:234) ~[BlockMap-1.1.1.jar:?]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_191]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_191]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[?:1.8.0_191]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_191]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_191]
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[?:1.8.0_191]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_191]
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[?:1.8.0_191]
at de.piegames.blockmap.renderer.RegionRenderer.renderSection(RegionRenderer.java:235) ~[BlockMap-1.1.1.jar:?]
at de.piegames.blockmap.renderer.RegionRenderer.renderRaw(RegionRenderer.java:172) [BlockMap-1.1.1.jar:?]
at de.piegames.blockmap.renderer.RegionRenderer.render(RegionRenderer.java:43) [BlockMap-1.1.1.jar:?]
at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.run(CommandLineMain.java:156) [BlockMap-1.1.1.jar:?]
at picocli.CommandLine.execute(CommandLine.java:858) [BlockMap-1.1.1.jar:?]
at picocli.CommandLine.access$700(CommandLine.java:104) [BlockMap-1.1.1.jar:?]
at picocli.CommandLine$RunLast.handle(CommandLine.java:1035) [BlockMap-1.1.1.jar:?]
at picocli.CommandLine$RunLast.handle(CommandLine.java:1003) [BlockMap-1.1.1.jar:?]
at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:911) [BlockMap-1.1.1.jar:?]
at picocli.CommandLine.parseWithHandlers(CommandLine.java:1194) [BlockMap-1.1.1.jar:?]
at picocli.CommandLine.parseWithHandler(CommandLine.java:1133) [BlockMap-1.1.1.jar:?]
at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:202) [BlockMap-1.1.1.jar:?]
Caused by: java.lang.IllegalArgumentException: No enum constant de.piegames.blockmap.renderer.BlockState.UNSTABLE_FALSE
at java.lang.Enum.valueOf(Enum.java:238) ~[?:1.8.0_191]
at de.piegames.blockmap.renderer.BlockState.valueOf(BlockState.java:10) ~[BlockMap-1.1.1.jar:?]
at de.piegames.blockmap.renderer.BlockState.valueOf(BlockState.java:315) ~[BlockMap-1.1.1.jar:?]
... 22 more

issues with running on mac os x

Any suggestions?

 $ java -version
 java version "1.8.0_131"
 Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
 Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
 $ 
 $ java -jar BlockMap-1.3.0.jar 
 Error: A JNI error has occurred, please check your installation and try again
 Exception in thread "main" java.lang.UnsupportedClassVersionError: de/piegames/blockmap/standalone/CommandLineMain has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
 	at java.lang.ClassLoader.defineClass1(Native Method)
 	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
 	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
 	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
 	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
 	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
 	at java.security.AccessController.doPrivileged(Native Method)
 	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
 	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
  • Used brew to install java, which gave me java 12:
     $ java -version
     openjdk version "12.0.1" 2019-04-16
     OpenJDK Runtime Environment (build 12.0.1+12)
     OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)
     
     $ java -jar BlockMap-1.3.0.jar 
     WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
     Graphics Device initialization failed for :  es2, sw
     Error initializing QuantumRenderer: no suitable pipeline found
     java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
     	at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
     	at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:243)
     	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
     	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
     	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
     	at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
     	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
     	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
     	at java.base/java.lang.Thread.run(Thread.java:835)
     Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
     	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
     	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
     	... 1 more
     19-05-12 16:37:42:475 FATAL RegionRenderer [256] - Could not load GUI main class
     java.lang.reflect.InvocationTargetException: null
     	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
     	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
     	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
     	at java.lang.reflect.Method.invoke(Method.java:567) ~[?:?]
     	at de.piegames.blockmap.standalone.CommandLineMain.run(CommandLineMain.java:249) [BlockMap-1.3.0.jar:?]
     	at picocli.CommandLine.execute(CommandLine.java:1043) [BlockMap-1.3.0.jar:?]
     	at picocli.CommandLine.access$900(CommandLine.java:142) [BlockMap-1.3.0.jar:?]
     	at picocli.CommandLine$RunLast.handle(CommandLine.java:1246) [BlockMap-1.3.0.jar:?]
     	at picocli.CommandLine$RunLast.handle(CommandLine.java:1214) [BlockMap-1.3.0.jar:?]
     	at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1122) [BlockMap-1.3.0.jar:?]
     	at picocli.CommandLine.parseWithHandlers(CommandLine.java:1405) [BlockMap-1.3.0.jar:?]
     	at picocli.CommandLine.parseWithHandler(CommandLine.java:1344) [BlockMap-1.3.0.jar:?]
     	at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:265) [BlockMap-1.3.0.jar:?]
     Caused by: java.lang.RuntimeException: No toolkit found
     	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272) ~[BlockMap-1.3.0.jar:?]
     	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267) ~[BlockMap-1.3.0.jar:?]
     	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158) ~[BlockMap-1.3.0.jar:?]
     	at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658) ~[BlockMap-1.3.0.jar:?]
     	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678) ~[BlockMap-1.3.0.jar:?]
     	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) ~[BlockMap-1.3.0.jar:?]
     	at java.lang.Thread.run(Thread.java:835) ~[?:?]
     $ export FX12=/Users/ray/Projects/javafx-sdk-11.0.2/lib
     
     $ java --module-path $FX12 --add-modules javafx.controls -jar BlockMap-1.3.0.jar 
     WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
     19-05-12 17:09:08:386 FATAL GuiMain [46] - Cannot start BlockMap
     java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x298a30df) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x298a30df
     	at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38) ~[BlockMap-1.3.0.jar:?]
     	at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056) ~[BlockMap-1.3.0.jar:?]
     	at de.piegames.blockmap.guistandalone.GuiMain.start(GuiMain.java:34) ~[BlockMap-1.3.0.jar:?]
     	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) ~[javafx.graphics.jar:?]
     	at java.security.AccessController.doPrivileged(AccessController.java:389) ~[?:?]
     	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) ~[javafx.graphics.jar:?]
     	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) [javafx.graphics.jar:?]
     
     $ java --module-path $FX12 --add-modules javafx.controls,javafx.fxml -jar BlockMap-1.3.0.jar 
     WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
     19-05-12 17:10:04:655 FATAL GuiMain [46] - Cannot start BlockMap
     java.lang.IllegalAccessError: superclass access check failed: class impl.org.controlsfx.behavior.RangeSliderBehavior (in unnamed module @0xa1d113b) cannot access class com.sun.javafx.scene.control.behavior.BehaviorBase (in module javafx.controls) because module javafx.controls does not export com.sun.javafx.scene.control.behavior to unnamed module @0xa1d113b
     	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
     	at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
     	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151) ~[?:?]
     	at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802) ~[?:?]
     	at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700) ~[?:?]
     	at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623) ~[?:?]
     	at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[?:?]
     	at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[?:?]
     	at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
     	at impl.org.controlsfx.skin.RangeSliderSkin.<init>(RangeSliderSkin.java:95) ~[BlockMap-1.3.0.jar:?]
     	at org.controlsfx.control.RangeSlider.createDefaultSkin(RangeSlider.java:194) ~[BlockMap-1.3.0.jar:?]
     	at javafx.scene.control.Control.doProcessCSS(Control.java:897) ~[javafx.controls.jar:?]
     	at javafx.scene.control.Control.access$000(Control.java:83) ~[javafx.controls.jar:?]
     	at javafx.scene.control.Control$1.doProcessCSS(Control.java:89) ~[javafx.controls.jar:?]
     	at com.sun.javafx.scene.control.ControlHelper.processCSSImpl(ControlHelper.java:67) ~[javafx.controls.jar:?]
     	at com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:145) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent.doProcessCSS(Parent.java:1397) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent.access$400(Parent.java:79) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent$1.doProcessCSS(Parent.java:125) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:145) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent.doProcessCSS(Parent.java:1397) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent.access$400(Parent.java:79) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent$1.doProcessCSS(Parent.java:125) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:145) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent.doProcessCSS(Parent.java:1397) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent.access$400(Parent.java:79) ~[javafx.graphics.jar:?]
     	at javafx.scene.Parent$1.doProcessCSS(Parent.java:125) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:145) ~[javafx.graphics.jar:?]
     	at javafx.scene.Node.processCSS(Node.java:9529) ~[javafx.graphics.jar:?]
     	at javafx.scene.Scene.doCSSPass(Scene.java:569) ~[javafx.graphics.jar:?]
     	at javafx.scene.Scene.preferredSize(Scene.java:1745) ~[javafx.graphics.jar:?]
     	at javafx.scene.Scene$2.preferredSize(Scene.java:393) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.scene.SceneHelper.preferredSize(SceneHelper.java:66) ~[javafx.graphics.jar:?]
     	at javafx.stage.Window$12.invalidated(Window.java:1086) ~[javafx.graphics.jar:?]
     	at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110) ~[javafx.base.jar:?]
     	at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145) ~[javafx.base.jar:?]
     	at javafx.stage.Window.setShowing(Window.java:1174) ~[javafx.graphics.jar:?]
     	at javafx.stage.Window.show(Window.java:1189) ~[javafx.graphics.jar:?]
     	at javafx.stage.Stage.show(Stage.java:273) ~[javafx.graphics.jar:?]
     	at de.piegames.blockmap.guistandalone.GuiMain.start(GuiMain.java:41) ~[BlockMap-1.3.0.jar:?]
     	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) ~[javafx.graphics.jar:?]
     	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) ~[javafx.graphics.jar:?]
     	at java.security.AccessController.doPrivileged(AccessController.java:389) ~[?:?]
     	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) ~[javafx.graphics.jar:?]
     	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) [javafx.graphics.jar:?]
     

Build failing with Java 14

I hate filing this sort of bug. Sorry. But BlockMap was working for me. I would run with "./gradlew run2" and everything was good.

I tried to do a git pull and build and that failed.
I cloned a new copy of BlockMap. That failed.
I waited a month. I cloned a new copy of BlockMap. That failed.

I do not see other instructions. Apologies if I have missed something that I should have seen.

% java --version 
java 14 2020-03-17
Java(TM) SE Runtime Environment (build 14+36-1461)
Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
%
%
% ./gradlew regenerate
Starting a Gradle Daemon (subsequent builds will be faster)
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
        at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43)
        at org.codehaus.groovy.reflection.GroovyClassValueFactory.<clinit>(GroovyClassValueFactory.java:35)
        at org.codehaus.groovy.reflection.ClassInfo.<clinit>(ClassInfo.java:107)
        at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
        at org.codehaus.groovy.reflection.ReflectionCache.<clinit>(ReflectionCache.java:39)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(MetaClassRegistryImpl.java:210)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:108)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:86)
        at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36)
        at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:86)
        at groovy.lang.GroovyObjectSupport.getDefaultMetaClass(GroovyObjectSupport.java:59)
        at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
        at org.gradle.internal.extensibility.DefaultExtraPropertiesExtension.<init>(DefaultExtraPropertiesExtension.java:29)
        at org.gradle.internal.extensibility.DefaultConvention.<init>(DefaultConvention.java:49)
        at org.gradle.internal.extensibility.ExtensibleDynamicObject.<init>(ExtensibleDynamicObject.java:60)
        at org.gradle.internal.instantiation.generator.MixInExtensibleDynamicObject.<init>(MixInExtensibleDynamicObject.java:35)
        at org.gradle.initialization.DefaultSettings_Decorated.getAsDynamicObject(Unknown Source)
        at org.gradle.initialization.SettingsFactory.createSettings(SettingsFactory.java:58)
        at org.gradle.initialization.ScriptEvaluatingSettingsProcessor.process(ScriptEvaluatingSettingsProcessor.java:61)
        at org.gradle.initialization.PropertiesLoadingSettingsProcessor.process(PropertiesLoadingSettingsProcessor.java:38)
        at org.gradle.initialization.SettingsEvaluatedCallbackFiringSettingsProcessor.process(SettingsEvaluatedCallbackFiringSettingsProcessor.java:34)
        at org.gradle.initialization.RootBuildCacheControllerSettingsProcessor.process(RootBuildCacheControllerSettingsProcessor.java:36)
        at org.gradle.initialization.BuildOperationSettingsProcessor$2.call(BuildOperationSettingsProcessor.java:50)
        at org.gradle.initialization.BuildOperationSettingsProcessor$2.call(BuildOperationSettingsProcessor.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.initialization.BuildOperationSettingsProcessor.process(BuildOperationSettingsProcessor.java:47)
        at org.gradle.initialization.DefaultSettingsLoader.findSettingsAndLoadIfAppropriate(DefaultSettingsLoader.java:102)
        at org.gradle.initialization.DefaultSettingsLoader.findAndLoadSettings(DefaultSettingsLoader.java:45)
        at org.gradle.initialization.SettingsAttachingSettingsLoader.findAndLoadSettings(SettingsAttachingSettingsLoader.java:35)
        at org.gradle.internal.composite.CommandLineIncludedBuildSettingsLoader.findAndLoadSettings(CommandLineIncludedBuildSettingsLoader.java:34)
        at org.gradle.internal.composite.ChildBuildRegisteringSettingsLoader.findAndLoadSettings(ChildBuildRegisteringSettingsLoader.java:52)
        at org.gradle.internal.composite.CompositeBuildSettingsLoader.findAndLoadSettings(CompositeBuildSettingsLoader.java:35)
        at org.gradle.initialization.DefaultSettingsPreparer.prepareSettings(DefaultSettingsPreparer.java:36)
        at org.gradle.initialization.BuildOperatingFiringSettingsPreparer$LoadBuild.doLoadBuild(BuildOperatingFiringSettingsPreparer.java:59)
        at org.gradle.initialization.BuildOperatingFiringSettingsPreparer$LoadBuild.run(BuildOperatingFiringSettingsPreparer.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.initialization.BuildOperatingFiringSettingsPreparer.prepareSettings(BuildOperatingFiringSettingsPreparer.java:42)
        at org.gradle.initialization.DefaultGradleLauncher.prepareSettings(DefaultGradleLauncher.java:194)
        at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:138)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:130)
        at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:110)
        at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:60)
        at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:57)
        at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:85)
        at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
        at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
        at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78)
        at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:57)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
        at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
        at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
        at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
        at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
        at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
        at org.gradle.util.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.base/java.lang.Thread.run(Thread.java:832)

FAILURE: Build failed with an exception.

* What went wrong:
Could not initialize class org.codehaus.groovy.reflection.ReflectionCache

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s

Feature Request: Add legend to map modes

The map modes, especially the biom mode, need a legend to identify the meaning of each color blob.
With the biom mode it's easy to differ between a desert and a forest, but it is not really possible to spot e.g. a birch forest.
The height map should also get one, just for the sake of completeness.

Big image maps won't render

With this command:

java -jar BlockMap.jar render /home/minecraft/server/bukkit/empire/region --create-big-image --min-X=-5 --max-X=4 --min-Z=-5 --max-Z=4 -o /home/minecraft/server/maps/empire/png

I get the following:

18-11-09 15:02:21:711 DEBUG RegionRenderer [112] - Dimension: 542208, 101376 18-11-09 15:02:21:711 ERROR RegionRenderer [117] - Could not create image, is it too big? java.lang.NegativeArraySizeException: null at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:75) ~[?:1.8.0_191] at java.awt.image.Raster.createPackedRaster(Raster.java:467) ~[?:1.8.0_191] at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1032) ~[?:1.8.0_191] at java.awt.image.BufferedImage.<init>(BufferedImage.java:333) ~[?:1.8.0_191] at de.piegames.blockmap.standalone.PostProcessing.createBigImage(PostProcessing.java:115) [BlockMap-1.1.1.jar:?] at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.run(CommandLineMain.java:166) [BlockMap-1.1.1.jar:?] at picocli.CommandLine.execute(CommandLine.java:858) [BlockMap-1.1.1.jar:?] at picocli.CommandLine.access$700(CommandLine.java:104) [BlockMap-1.1.1.jar:?] at picocli.CommandLine$RunLast.handle(CommandLine.java:1035) [BlockMap-1.1.1.jar:?] at picocli.CommandLine$RunLast.handle(CommandLine.java:1003) [BlockMap-1.1.1.jar:?] at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:911) [BlockMap-1.1.1.jar:?] at picocli.CommandLine.parseWithHandlers(CommandLine.java:1194) [BlockMap-1.1.1.jar:?] at picocli.CommandLine.parseWithHandler(CommandLine.java:1133) [BlockMap-1.1.1.jar:?] at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:202) [BlockMap-1.1.1.jar:?] 18-11-09 15:02:21:714 INFO RegionRenderer [173] - Done. Region files rendered/skipped/failed/total: 202/0/0/202
the image is def. not too big to be rendered, IT should be 4kx4k pixels, 1.4 MB. I wonder why the dimensions are given as 542208, 101376

Nether and end not missing rendered chunks correctly 1.15

Environment info

  • BlockMap version: 1.6.1
  • Java version: OpenJDK 12
  • Operating system: macOS 10.15.3
    MC 1.15

Description

Some of the regions I render for the end and the nether are empty and seem to have a lot of skipped chunks. The rendered.json reports RENDERED and FULL for most of the fields.

Steps to reproduce

  1. use 1.14.4 world
  2. use the mc jar to --forceUpgrade the chunks to 1.15.2
  3. java -jar BlockMap-cli-1.6.1.jar render -o nether_gen --max-height=72 --create-tile-html world/DIM-1/region

run fails: Did not find internal color map default

Exception in thread "main" picocli.CommandLine$ExecutionException: Error while running command (de.piegames.blockmap.standalone.CommandLineMain$CommandRender@433d61fb): java.lang.IllegalArgumentException: Did not find internal color map default
at picocli.CommandLine.execute(CommandLine.java:1051)
at picocli.CommandLine.access$900(CommandLine.java:142)
at picocli.CommandLine$RunLast.handle(CommandLine.java:1246)
at picocli.CommandLine$RunLast.handle(CommandLine.java:1214)
at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1122)
at picocli.CommandLine.parseWithHandlers(CommandLine.java:1405)
at picocli.CommandLine.parseWithHandler(CommandLine.java:1344)
at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:208)
Caused by: java.lang.IllegalArgumentException: Did not find internal color map default
at de.piegames.blockmap.color.BlockColorMap.loadInternal(BlockColorMap.java:154)
at de.piegames.blockmap.color.BlockColorMap$InternalColorMap.getColorMap(BlockColorMap.java:32)
at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.run(CommandLineMain.java:125)
at picocli.CommandLine.execute(CommandLine.java:1043)
... 7 more
Caused by: java.lang.NullPointerException
at java.io.Reader.(Reader.java:78)
at java.io.InputStreamReader.(InputStreamReader.java:72)
at de.piegames.blockmap.color.BlockColorMap.loadInternal(BlockColorMap.java:152)
... 10 more

I assume I have to use BlockMap/BlockMap-standalone/build/libs/BlockMap-1.1.1.jar ?

Rendering fails 1.16.1

Command

Environment info

  • BlockMap version: 2.1.0
  • Java version: java -version
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
  • Operating system: Replace me
Darwin Kernel Version 19.3.0: Thu Jan  9 20:58:23 PST 2020; root:xnu-6153.81.5~1/RELEASE_X86_64 x86_64
macOS 10.15.3 Catalina

Description

Can't finish render any dimension without errors like the following:

20-07-23 15:15:03 WARN  LevelMetadata [501] - Could not access map map_143.dat
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Number (java.lang.String and java.lang.Number are in module java.base of loader 'bootstrap')
	at de.piegames.blockmap.world.LevelMetadata.loadFromWorld(LevelMetadata.java:496) [blockmap.jar:?]
	at de.piegames.blockmap.standalone.CommandLineMain$CommandServer.call(CommandLineMain.java:379) [blockmap.jar:?]
	at de.piegames.blockmap.standalone.CommandLineMain$CommandServer.call(CommandLineMain.java:277) [blockmap.jar:?]
	at picocli.CommandLine.executeUserObject(CommandLine.java:1743) [blockmap.jar:?]
	at picocli.CommandLine.access$900(CommandLine.java:145) [blockmap.jar:?]
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2101) [blockmap.jar:?]
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2068) [blockmap.jar:?]
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:1935) [blockmap.jar:?]
	at picocli.CommandLine.execute(CommandLine.java:1864) [blockmap.jar:?]
	at de.piegames.blockmap.standalone.CommandLineMain.mainWithoutQuit(CommandLineMain.java:415) [blockmap.jar:?]
	at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:419) [blockmap.jar:?]
20-07-23 15:15:03 WARN  LevelMetadata [454] - r.2.-10.mca is empty?!
20-07-23 15:15:03 WARN  LevelMetadata [454] - r.1.-10.mca is empty?!

Steps to reproduce

{
	"output dir": "./rendered-web",
	"server": {
		"server name": "Minecraaaaaaft",
		"server description": "The best server in the world",
		"server address": "127.0.0.1",
		"max players": 5
	},
	"worlds": [
		{
			"name": "End",
			"input dir": "../lambdacraft-server-1.16/world",
			"dimension": "END",
			"force": false
		}
	]
}
  1. java -jar blockmap-2.1.0.jar render-many config.json

compile fail, cannot find symbol: variable instance, location: class GuiMain

Task :BlockMap-internal:compileJava FAILED
...\BlockMap\BlockMap-internal\src\main\java\de\piegames\blockmap\generate\Generator.java:275: error: cannot find symbol
while (GuiMain.instance == null)
^
symbol: variable instance
location: class GuiMain

this goes for all the occurances of GuiMain.instance below.

blurry faces

Environment info

  • BlockMap version: 2.1.0
  • Java version: java-14-openjdk
  • Operating system: Linux triceraptodactyl 5.6.16-1-MANJARO #1 SMP PREEMPT Wed Jun 3 14:26:28 UTC 2020 x86_64 GNU/Linux

Description

The players skins are loaded, but the displayed faces are blurry.

Steps to reproduce

  1. Load any world
  2. Find a player pin
  3. Make sure it's not a merged pin
  4. Look at the face

Actual result

The face is blurry.

Expected result:

The face should be sharp.

Screenshots

How my skin's face is displayed:
Screenshot from 2020-07-10 01-19-56

How my skin's face looks:
Screenshot from 2020-07-10 01-20-55

About Pane not found

Environment info

  • BlockMap version: 1.5.0
  • Java version: 12.0.2
  • Operating system: Windows 10

Description

Error dialog on navigation to Help->About.
A single "guistandalone" didn't get split to "gui.standalone" in /BlockMap-gui/src/main/resources/de/piegames/blockmap/gui/standalone/about/dependency.fxml

Steps to reproduce

Navigate to Help->About.

Debug log

javafx.fxml.LoadException: de.piegames.blockmap.guistandalone.about.DependencyPane is not a valid type.
file:/C:/Users/lincoln/Downloads/BlockMap-gui-1.5.0-windows-10.jar!/de/piegames/blockmap/gui/standalone/about/dependency.fxml:21
    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2621) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.java:1314) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at de.piegames.blockmap.gui.standalone.about.DependencyPane.<init>(DependencyPane.java:27) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at de.piegames.blockmap.gui.standalone.about.AboutDialog.<init>(AboutDialog.java:72) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at de.piegames.blockmap.gui.standalone.GuiController.showAbout(GuiController.java:438) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:567) ~[?:?]
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:567) ~[?:?]
    at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.event.Event.fireEvent(Event.java:198) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.scene.control.MenuItem.fire(MenuItem.java:459) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1380) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1333) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.event.Event.fireEvent(Event.java:198) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3862) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.scene.Scene.processMouseEvent(Scene.java:1849) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2590) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at java.security.AccessController.doPrivileged(AccessController.java:389) ~[?:?]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:411) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.glass.ui.View.handleMouseEvent(View.java:556) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.glass.ui.View.notifyMouse(View.java:942) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) ~[BlockMap-gui-1.5.0-windows-10.jar:?]
    at java.lang.Thread.run(Thread.java:835) [?:?]

Entering server address with missing '/' suffix results in exception

Environment info

  • BlockMap version: 2.1.0
  • Java version: openjdk 14.0.2
  • Operating system: Arch Linux 5.4.52-1-lts

Description

Entering a server address as example.address instead of https://example.address/ results in an IllegalArgumentException (first log below). Even a missing slash at the end (https://example.address instead of https://example.address/) throws an exception (second log below). The second exception is not shown in the log if blockmap-gui -v was used.

Steps to reproduce

  1. launch blockmap-gui
  2. enter example.url or https://example.address via File > Load from server or top address bar
  3. observe exception

Actual result

The user is confronted with a stack trace.

Expected result:

Blockmap detects a address and completes it accordingly by adding a missing https:// prefix, a missing slash at the end etc. If the error is intended behaviour the error dialog should display a user friendly error message instead of a stack trace at least.

Debug log

Log for missing https:// prefix. Actual server address has been replaced by server.stuff:

> blockmap-gui -v
20-07-23 00:33:05 INFO  RegionFolderCache [73] - Removed 0 worlds from cache
20-07-23 00:33:17 WARN  GuiControllerServer [139] - Could not load server world server.stuff
java.lang.IllegalArgumentException: URI is not absolute
        at java.net.URL.fromURI(URL.java:719) ~[?:?]
        at java.net.URI.toURL(URI.java:1139) ~[?:?]
        at de.piegames.blockmap.gui.standalone.GuiControllerServer.reload(GuiControllerServer.java:113) ~[BlockMap-gui.jar:?]
        at de.piegames.blockmap.gui.standalone.GuiControllerServer.load(GuiControllerServer.java:109) ~[BlockMap-gui.jar:?]
        at de.piegames.blockmap.gui.standalone.GuiController.loadRemote(GuiController.java:512) ~[BlockMap-gui.jar:?]
        at de.piegames.blockmap.gui.standalone.GuiController.load(GuiController.java:424) ~[BlockMap-gui.jar:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76) ~[javafx-base-13-linux.jar:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83) ~[javafx-fxml-13-linux.jar:?]
        at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784) ~[javafx-fxml-13-linux.jar:?]
        at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670) ~[javafx-fxml-13-linux.jar:?]
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) ~[javafx-base-13-linux.jar:?]
        at javafx.event.Event.fireEvent(Event.java:198) ~[javafx-base-13-linux.jar:?]
        at javafx.scene.Node.fireEvent(Node.java:8890) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.javafx.scene.control.behavior.TextFieldBehavior.fire(TextFieldBehavior.java:184) ~[javafx-controls-13-linux.jar:?]
        at com.sun.javafx.scene.control.behavior.TextInputControlBehavior.lambda$keyMapping$62(TextInputControlBehavior.java:330) ~[javafx-controls-13-linux.jar:?]
        at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274) ~[javafx-controls-13-linux.jar:?]
        at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) ~[javafx-base-13-linux.jar:?]
        at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) ~[javafx-base-13-linux.jar:?]
        at javafx.event.Event.fireEvent(Event.java:198) ~[javafx-base-13-linux.jar:?]
        at javafx.scene.Scene$KeyHandler.process(Scene.java:4070) ~[javafx-graphics-13-linux.jar:?]
        at javafx.scene.Scene.processKeyEvent(Scene.java:2121) ~[javafx-graphics-13-linux.jar:?]
        at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2597) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149) ~[javafx-graphics-13-linux.jar:?]
        at java.security.AccessController.doPrivileged(AccessController.java:391) ~[?:?]
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:248) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.glass.ui.View.handleKeyEvent(View.java:547) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.glass.ui.View.notifyKey(View.java:971) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) ~[javafx-graphics-13-linux.jar:?]
        at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277) ~[javafx-graphics-13-linux.jar:?]
        at java.lang.Thread.run(Thread.java:832) [?:?]

Log for missing slash at the end. Actual server address has been replaced by server.stuff:

> blockmap-gui -v
20-07-23 00:34:45 INFO  RegionFolderCache [73] - Removed 0 worlds from cache
20-07-23 00:34:56 WARN  GuiControllerServer [91] - Could not load world Overworld from remote file https://server.stuff

Stack trace provided by the gui. Actual server address has been replaced by server.stuff:

java.net.UnknownHostException: blockmap.server.stuffOverworld
	at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:567)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
	at java.base/java.net.Socket.connect(Socket.java:648)
	at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:290)
	at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
	at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
	at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:265)
	at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372)
	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:177)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1194)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1082)
	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:163)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1600)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1528)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224)
	at java.base/java.net.URL.openStream(URL.java:1167)
	at de.piegames.blockmap.world.RegionFolder$RemoteRegionFolder.getInputStream(RegionFolder.java:347)
	at de.piegames.blockmap.world.RegionFolder$RemoteRegionFolder.load(RegionFolder.java:352)
	at de.piegames.blockmap.world.RegionFolder$RemoteRegionFolder.load(RegionFolder.java:339)
	at de.piegames.blockmap.world.RegionFolder$SavedRegionFolder.<init>(RegionFolder.java:251)
	at de.piegames.blockmap.world.RegionFolder$RemoteRegionFolder.<init>(RegionFolder.java:342)
	at de.piegames.blockmap.gui.standalone.GuiControllerServer.lambda$new$1(GuiControllerServer.java:88)
	at de.piegames.blockmap.gui.standalone.GuiControllerServer.reload(GuiControllerServer.java:136)
	at de.piegames.blockmap.gui.standalone.GuiControllerServer.load(GuiControllerServer.java:109)
	at de.piegames.blockmap.gui.standalone.GuiController.loadRemote(GuiController.java:512)
	at de.piegames.blockmap.gui.standalone.GuiController.load(GuiController.java:424)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
	at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Node.fireEvent(Node.java:8890)
	at com.sun.javafx.scene.control.behavior.TextFieldBehavior.fire(TextFieldBehavior.java:184)
	at com.sun.javafx.scene.control.behavior.TextInputControlBehavior.lambda$keyMapping$62(TextInputControlBehavior.java:330)
	at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$KeyHandler.process(Scene.java:4070)
	at javafx.scene.Scene.processKeyEvent(Scene.java:2121)
	at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2597)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:248)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
	at com.sun.glass.ui.View.handleKeyEvent(View.java:547)
	at com.sun.glass.ui.View.notifyKey(View.java:971)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
	at java.base/java.lang.Thread.run(Thread.java:832)

Setting the max-block-height to low values stops the rendering entirely

Description

The renderer doesn't work for very low blocks when the max-height is set to low values. The blocks which are not visible then are visible for higher values of max-height though.

Steps to reproduce

  1. Load any map
  2. set the max block height to very low levels (1 - 30)
  3. if the program works as it should, try loading a different map and repeat the steps

Actual result

The program stops rendering the map entirely

Expected result:

The program should render the lower blocks with a low value for the max-height

Custom Color Map compiled, but not usable

Environment info

  • BlockMap version: 1.6.1
  • Java version: openjdk version "12.0.2" 2019-07-16
  • Operating system: Debian

Description

I've made for my server a new, custom color map to generate only rails on the map (for own further processing). I've added in the block-color-instructions-1_15.json a new color map rails and it compiles successfully. But with the current 1.6.1 (and as I can see in older logs in 1.6.0) the custom color map doesn't know the custom color map. In the BlockMap-core/build/resources/main dir I find the compiled color map block-colors-rails-1_15.json. And it worked on older versions.

Steps to reproduce

  1. Compile the branch railmap on my fork, I use ./gradlew regenerate && ./gradlew release && cp BlockMap-cli/build/libs/fat/BlockMap-cli-1.6.1.jar .
  2. execute java -jar BlockMap-cli-1.6.1.jar render --lazy --create-big-image --create-tile-html --color-map RAILS --shader=FLAT --max-X=5000 --max-Z=5000 --min-X=-5000 --min-Z=-5000 -o <outputdir> <regionfiledir>

Actual result

Blockmap displays:

Invalid value for option '--color-map': expected one of [DEFAULT, OCEAN_GROUND, NO_FOLIAGE, CAVES, X_RAY] (case-sensitive) but was 'RAILS'
Usage: blockmap render [-hlp] [--create-big-image] [--create-tile-html] [-c=
                       {DEFAULT|CAVES|NO_FOLIAGE|OCEAN_GROUND|RAILS}] [-d=
                       {OVERWORLD|NETHER|END}] [--max-X=<maxX>]
                       [--max-Y=<maxY>] [--max-Z=<maxZ>] [--min-X=<minX>]
                       [--min-Y=<minY>] [--min-Z=<minZ>] [-o=<FOLDER>] [-s=
                       {FLAT|RELIEF|BIOMES|HEIGHTMAP}] INPUT
...

Feature Request: Add error dialogues

Add dialogues to tell the user that something went wrong.
For example when trying to load a folder where BlockMap does not have the needed permissions to read the files.

Cannot read field "pins" because "helper" is null

Environment info

  • BlockMap version: 2.2.1
  • Java version: "16.0.1" 2021-04-20
  • Operating system: CENTOS Linux aimba 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Description

On one among several worlds, I am getting the following error:

ava.lang.NullPointerException: Cannot read field "pins" because "helper" is null
	at de.piegames.blockmap.world.RegionFolder$SavedRegionFolder.<init>(RegionFolder.java:293)
	at de.piegames.blockmap.world.RegionFolder$LocalRegionFolder.<init>(RegionFolder.java:355)
	at de.piegames.blockmap.world.RegionFolder$CachedRegionFolder.<init>(RegionFolder.java:442)
	at de.piegames.blockmap.world.RegionFolder$CachedRegionFolder.create(RegionFolder.java:551)
	at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.call(CommandLineMain.java:236)
	at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.call(CommandLineMain.java:113)
	at picocli.CommandLine.executeUserObject(CommandLine.java:1933)
	at picocli.CommandLine.access$1100(CommandLine.java:145)
	at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
	at picocli.CommandLine.execute(CommandLine.java:2058)
	at de.piegames.blockmap.standalone.CommandLineMain.mainWithoutQuit(CommandLineMain.java:399)
	at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:403)

Steps to reproduce

I cannot instruct how to reproduce without uploading the whole world somewhere. Is there a chance to make a test for "helper" being null in the code and outputting which file is making trouble?

I tried to compile it myself but my Java skills are close to zero so I could not get it done. Compiling works but running throws this here:

java.lang.IllegalArgumentException: Did not find internal color map default
        at de.piegames.blockmap.color.BlockColorMap.loadInternal(BlockColorMap.java:348)
.....

Launch instructions are not clear for running from source project on Mac

Environment info

Mac OS 10.13.6 on Macbook Air.

$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
$

Description

Launch instructions are not clear for running from source project on Mac.

Steps to reproduce

The README says "java -jar BlockMap-1.1.1.jar" will launch the app.

$ find * -name Block\*jar
BlockMap-core/build/libs/BlockMap-core-1.1.2.jar
BlockMap-core/build/libs/BlockMap-core-1.2.0.jar
BlockMap-gui/build/libs/BlockMap-gui-1.1.2.jar
BlockMap-gui/build/libs/BlockMap-gui-1.2.0.jar
BlockMap-internal/build/libs/BlockMap-internal-1.1.2.jar
BlockMap-standalone/build/libs/BlockMap-standalone-1.1.2.jar
$

Which one of these am I supposed to launch with? The way I have found that will work is to use "gradle run". If there is a java command line that will launch it, please say.

At the least, updating the instructions to refer to the current version of the jar shows that someone has checked this at least once. :-)

An illegal reflective access operation has occurred

Environment info

  • BlockMap version: BlockMap-cli-1.5.1.jar
  • Java version: openjdk version "12.0.2" 2019-07-16
    OpenJDK Runtime Environment 19.3 (build 12.0.2+9)
    OpenJDK 64-Bit Server VM 19.3 (build 12.0.2+9, mixed mode, sharing)
  • Operating system: CentOS 7, Linux 3.10.0-862.2.3.el7.x86_64

Description

I get the following warnings:

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.gson.internal.reflect.UnsafeReflectionAccessor (file:/home/minecraft/server/blockmap/BlockMap-cli-1.5.1.jar) to constructor java.util.Optional()
WARNING: Please consider reporting this to the maintainers of com.google.gson.internal.reflect.UnsafeReflectionAccessor
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Steps to reproduce

  1. java -jar BlockMap.jar -v render ./region --create-big-image --min-X=-2048 --max-X=2048 --min-Z=-2048 --max-Z=2048 -o ./png --create-tile-html

UnsupportedOperationException

Hello, upon running the program with Java 17 and on Raspbian, I have this exception that blocks the execution

It happens after some regions already being rendered, so it might be related to 1.18.1

I didn't investigate further, but I guess it could be enough for a fix

java.lang.UnsupportedOperationException
        at java.base/java.util.Collections$UnmodifiableCollection.retainAll(Collections.java:1083)
        at de.piegames.blockmap.world.RegionFolder$CachedRegionFolder$1.rendered(RegionFolder.java:508)
        at de.piegames.blockmap.world.RegionFolder$CachedRegionFolder$1.rendered(RegionFolder.java:505)
        at de.piegames.blockmap.world.ChunkMetadata$ChunkMetadataRendered.visit(ChunkMetadata.java:85)
        at de.piegames.blockmap.world.RegionFolder$CachedRegionFolder.lambda$filterStructures$1(RegionFolder.java:505)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779)
        at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
        at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
        at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at de.piegames.blockmap.world.RegionFolder$CachedRegionFolder.filterStructures(RegionFolder.java:505)
        at java.base/java.util.Optional.ifPresent(Optional.java:178)
        at de.piegames.blockmap.standalone.CommandLineMain$CommandServer.call(CommandLineMain.java:370)
        at de.piegames.blockmap.standalone.CommandLineMain$CommandServer.call(CommandLineMain.java:276)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2314)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2316)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at de.piegames.blockmap.standalone.CommandLineMain.mainWithoutQuit(CommandLineMain.java:399)
        at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:403)

Provide AppImage files

A constant pain point is that people have trouble getting a correct Java environment to run BlockMap (it is kind of hard, to be fair). A good solution to this would be to provide AppImage files. While they will be bulky (since the whole point is that they come with a JDK bundled), they'll have the advantage of being "click and run" without further setup.

I have never used AppImage though, and no idea how to create those.

Also, we'd need to investigate if there are similar solutions for Windows users. (Maybe PortableApps?)

--create-big-image ignores render settings

It seems that --create-big-image only cares about what world files exist and then renders according to that instead of the render settings.

Example: I have a world with region files from -5 to 5 (in both X and Z). Asking it to render from -1028 to 1028 in both direction creates a big.png that 3,584px × 4,096px large.

So first of all, the file should be much smaller if it would be rendering only the chunks bounding the +-1028 blocks (-3 to 2 instead of -5 to 5). The tiles.html does the same mistake by the way, but at least it contains the full block area assigned in the render command line.

Second of all the big.png cuts off the right border of the image as it does not include the full width if the tiles rendered.

Looking at the code at https://github.com/Minecraft-Technik-Wiki/BlockMap/blob/master/BlockMap-standalone/src/main/java/de/piegames/blockmap/standalone/PostProcessing.java#L98, it anyhow seems as if the RenderSettings are not a part of calculating the affected areas at all. Instead, all the dimensions for the image are taken from the availability of world files, not from the desired settings.

Jar file never finishes downloading

This isn't really related to the program but I can't download the jar file, chrome has the file about to be downloaded but something about it makes it unable to complete. I know that this file is the issue and it's not an issue with my computer because I tried downloading other jar files and they work fine. please help!

Ambiguous error message

I loaded a 1.12 world. I got tons of messages:

20-08-02 15:39:56 WARN RegionRenderer [130] - Skipping chunk because it is too old

Does it mean that the minecraft version of the world is too old (not supported)? Or does it mean that some timestamp on a chunk is too long in the past? If the latter, is there a way to ignore the error and render the chunk anyway?

1.16 Support?

1.16 was released today, block map is unable to render any of the chunks for it.

Failed to render chunk (5, 5) section 3. This is very likely because your chunk is corrupt. If possible, please verify it manually before sending a bug report.

Use the command line to convert 1.14.2 map, but output blank images

Environment info

  • BlockMap version: 1.3.0
  • Java version: OpenJDK Runtime Environment 18.9 (build 11.0.3+7-LTS)
  • Operating system: Linux localhost.localdomain 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Description

command: java -jar /root/Minecraft/1.14.2/BlockMap-1.3.0.jar render -l -o=/root/Minecraft/1.14.2/map_display /root/Minecraft/1.14.2/world_a/region --color-map=NO_FOLIAGE

Steps to reproduce

  1. Run commandjava -jar /root/Minecraft/1.14.2/BlockMap-1.3.0.jar render -l -o=/root/Minecraft/1.14.2/map_display /root/Minecraft/1.14.2/world_a/region --color-map=NO_FOLIAGE
  2. Waiting for finish.

Actual result

The output PNG image has only transparent color (1kb).

Expected result:

Screenshots

Debug log

Feature Request: Web map

A leaflet powered web map would be nice.

I already made one, see https://lambdacraft.dev/craft/map/
The source https://github.com/LambdaCraft/LambdaMap

It's in react but can be statically compiled to deliverable html and js. The player positions are handled by a REST api in a fabric mod. The output of blockmap is passed through pngquant for small file delivery.

It would be nice however to have all this bundled into one server fabric mod, with updating player positions, refreshing tiles, etc.

Personally I would prefer if the server mod was lightweight as to not take up too much CPU in a client/server-worker model but perhaps if it hooked into the server instance to find the average TPS/MSPT and only do rendering when there is compute time available that would be great.

Using small values for --min-X etc causes weird issues in the tiles.html rendering

Environment info

  • BlockMap version: 1.2.0
  • Java version: openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
  • Operating system: Linux 3.10.0-862.2.3.el7.x86_64 #1 SMP Wed May 9 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Description

using small coordinates (smaller than a chunk) creates weird results.
the big.png seems to be ok.

Steps to reproduce

  1. I am using a command line such as

java -jar BlockMap.jar render ./world/region --create-big-image --min-X=-4 --max-X=3 --min-Z=-4 --max-Z=3 -o ./target/png --create-tile-html
2. look at the result
3. ...

Actual result

It renders the given coordinates for every chunk in the affected regions, then assembles all the half-rendered chunks in all actually affected regions into a new image

Expected result:

it should render the coordinates as expected only.

Screenshots

tiles.html looks like this:
this is the full tiles.html

Debug log

Unsupported compression type, must be between 0 and 2

I am getting this error on one of my maps, others work fine.

Exception in thread "main" picocli.CommandLine$ExecutionException: Error while running command (de.piegames.blockmap.standalone.CommandLineMain$CommandRender@59b38691): java.lang.IllegalArgumentException: Unsupported compression type, must be between 0 and 2 (inclusive)
	at picocli.CommandLine.execute(CommandLine.java:1051)
	at picocli.CommandLine.access$900(CommandLine.java:142)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:1246)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:1214)
	at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1122)
	at picocli.CommandLine.parseWithHandlers(CommandLine.java:1405)
	at picocli.CommandLine.parseWithHandler(CommandLine.java:1344)
	at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:199)
Caused by: java.lang.IllegalArgumentException: Unsupported compression type, must be between 0 and 2 (inclusive)
	at com.flowpowered.nbt.stream.NBTInputStream.<init>(NBTInputStream.java:120)
	at com.flowpowered.nbt.stream.NBTInputStream.<init>(NBTInputStream.java:92)
	at com.flowpowered.nbt.regionfile.Chunk.getInputStream(Chunk.java:192)
	at com.flowpowered.nbt.regionfile.Chunk.readTag(Chunk.java:199)
	at de.piegames.blockmap.renderer.RegionRenderer.renderRaw(RegionRenderer.java:113)
	at de.piegames.blockmap.renderer.RegionRenderer.render(RegionRenderer.java:56)
	at de.piegames.blockmap.world.RegionFolder$WorldRegionFolder.render(RegionFolder.java:150)
	at de.piegames.blockmap.world.RegionFolder$CachedRegionFolder.render(RegionFolder.java:395)
	at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.run(CommandLineMain.java:156)
	at picocli.CommandLine.execute(CommandLine.java:1043)
	... 7 more 

null pointer exceptio

Hi,

Great software, i tried it today for the first time: it renders only some chunks, rest stays "blue". I have attached the output from the commandline.

Ubuntu 18.04
OpenJDK-8

regards,
flo
log.txt

Generating HTML file fails

Environment info

  • BlockMap version: 1.6.1
  • Java version:
openjdk 13.0.2 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
  • Operating system:
~ $ uname -a
Linux pecet 5.4.0-4-amd64 #1 SMP Debian 5.4.19-1 (2020-02-13) x86_64 GNU/Linux
~ $ cat /etc/debian_version 
bullseye/sid

Description

I can't get the HTML map to generate propertly, it fails with an error.

Steps to reproduce

jdk-13.0.2/bin/java -jar Pobrane/BlockMap-cli-1.6.1.jar -v render -l --create-tile-html -d OVERWORLD -o a Minecraft/Zapisy/Lody

Actual result

~ $ cat a/tiles.html 
<html><head>
<link rel="stylesheet" type="text/css" href="tiles.css"/>
</head><body>
<div style="height: 18944px">%
~ $

Expected result:

Working map in HTML file.

Debug log

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.gson.internal.reflect.UnsafeReflectionAccessor (file:/home/grzesiek11/Pobrane/BlockMap-cli-1.6.1.jar) to field java.util.Optional.value
WARNING: Please consider reporting this to the maintainers of com.google.gson.internal.reflect.UnsafeReflectionAccessor
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
20-03-10 16:21:57 INFO  PostProcessing [34] - Writing HTML tiles...
java.lang.NullPointerException
        at de.piegames.blockmap.world.RegionFolder$LocalRegionFolder.getPath(RegionFolder.java:315)
        at de.piegames.blockmap.standalone.PostProcessing.createTileHtml(PostProcessing.java:73)
        at de.piegames.blockmap.standalone.CommandLineMain$CommandRender.run(CommandLineMain.java:202)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1729)
        at picocli.CommandLine.access$900(CommandLine.java:145)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2101)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2068)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:1935)
        at picocli.CommandLine.execute(CommandLine.java:1864)
        at de.piegames.blockmap.standalone.CommandLineMain.main(CommandLineMain.java:210)

--create-big-image with min-X etc iterates ALL region files

Environment info

  • BlockMap version: 1.2.0
  • Java version: openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
  • Operating system: Linux 3.10.0-862.2.3.el7.x86_64 #1 SMP Wed May 9 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Description

When I use --create-big-image, the render seems to iterate all available region files, no matter if the -min-X etc flags exclude a vast majority of the available map.

Steps to reproduce

  1. use a command such as java -jar BlockMap.jar render ./world/region --create-tile-html --min-X=-500--max-X=500--min-Z=-500--max-Z=500 -o ./target/png
  2. The output during rendering will be:
19-01-21 12:12:16:186 INFO  RegionRenderer [55] - Rendering region file -1 -1
19-01-21 12:12:18:774 INFO  RegionRenderer [55] - Rendering region file -1 0
19-01-21 12:12:21:482 INFO  RegionRenderer [55] - Rendering region file 0 -1
19-01-21 12:12:23:433 INFO  RegionRenderer [55] - Rendering region file 0 0
19-01-21 12:12:25:671 INFO  RegionRenderer [35] - Writing HTML tiles...
  1. use instead java -jar BlockMap.jar render ./world/region --create-big-image --min-X=-500--max-X=500--min-Z=-500--max-Z=500 -o ./target/png
19-01-21 12:12:57:686 INFO  RegionRenderer [55] - Rendering region file -1 -1
19-01-21 12:13:00:048 INFO  RegionRenderer [55] - Rendering region file -1 0
19-01-21 12:13:02:910 INFO  RegionRenderer [55] - Rendering region file 0 -1
19-01-21 12:13:04:879 INFO  RegionRenderer [55] - Rendering region file 0 0
19-01-21 12:13:07:142 INFO  RegionRenderer [98] - Creating big image...
19-01-21 12:13:07:150 INFO  RegionRenderer [55] - Rendering region file 2 1
19-01-21 12:13:09:217 INFO  RegionRenderer [55] - Rendering region file 2 2
19-01-21 12:13:10:609 INFO  RegionRenderer [55] - Rendering region file 2 3
19-01-21 12:13:12:596 INFO  RegionRenderer [55] - Rendering region file 2 4
19-01-21 12:13:13:300 INFO  RegionRenderer [55] - Rendering region file 2 5
... plus many more.
  1. The big.png only covers the regions in the -500 ... 500 square.

Expected result:

I would expect in both cases the rendering to do only the regions needed (-1...0)

Pins point at corners of blocks instead of pointing at the center

Environment info

  • BlockMap version: 2.1.0
  • Java version: java-14-openjdk
  • Operating system: Linux triceraptodactyl 5.6.16-1-MANJARO #1 SMP PREEMPT Wed Jun 3 14:26:28 UTC 2020 x86_64 GNU/Linux

Description

Pin positions are at the corners of blocks instead of being centered. This may not be an issue for most structures, but it definitely is for POIs.

Steps to reproduce

Happens always.
Best visible when fully zoomed in on a POI.

Actual result

The pin is pointing at the corner of the block.

Expected result:

The pin should be pointing at the center of the block.

Screenshots

Screenshot from 2020-07-10 01-10-36

CommandLineMain has been compiled by a more recent version of the Java Runtime

Environment info

  • BlockMap version: 1.6.1
  • Java version:
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Debian-2)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Debian-2, mixed mode, sharing)
  • Operating system:
Linux pecet 5.4.0-4-amd64 #1 SMP Debian 5.4.19-1 (2020-02-13) x86_64 GNU/Linux

Description

I can't run this program on Debian Sid.

Steps to reproduce

  1. Install Debian Sid
  2. Install openjdk-11-jre
  3. Download the CLI version
  4. Run it via java -jar $THE_JAR

Actual result

~/Pobrane $ java -jar BlockMap-cli-1.6.1.jar
Error: LinkageError occurred while loading main class de.piegames.blockmap.standalone.CommandLineMain
        java.lang.UnsupportedClassVersionError: de/piegames/blockmap/standalone/CommandLineMain has been compiled by a more recent version of the Java Runtime (class file version 56.0), this version of the Java Runtime only recognizes class file versions up to 55.0
~/Pobrane $

Expected result:

I don't know, I never used the program. But it should show me a help message, I think.

Debug log

Seems to not change anything. I probably shouldn't except anything, cause it's Java error...

~/Pobrane $ java -jar BlockMap-cli-1.6.1.jar -v                                    
Error: LinkageError occurred while loading main class de.piegames.blockmap.standalone.CommandLineMain
        java.lang.UnsupportedClassVersionError: de/piegames/blockmap/standalone/CommandLineMain has been compiled by a more recent version of the Java Runtime (class file version 56.0), this version of the Java Runtime only recognizes class file versions up to 55.0
~/Pobrane $ 

EDIT: I also tried to compile it. gradlew gave me error saying that the project is incompatible with latest version.

~/BlockMap $ ./gradlew regenerate
Downloading https://services.gradle.org/distributions/gradle-6.0.1-bin.zip
.........10%.........20%.........30%.........40%.........50%.........60%.........70%.........80%.........90%.........100%

Welcome to Gradle 6.0.1!

Here are the highlights of this release:
 - Substantial improvements in dependency management, including
   - Publishing Gradle Module Metadata in addition to pom.xml
   - Advanced control of transitive versions
   - Support for optional features and dependencies
   - Rules to tweak published metadata
 - Support for Java 13
 - Faster incremental Java and Groovy compilation
 - New Zinc compiler for Scala
 - VS2019 support
 - Support for Gradle Enterprise plugin 3.0

For more details see https://docs.gradle.org/6.0.1/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)
> Task :BlockMap:BlockMap-core:compileJava FAILED
> Task :regenerate FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':BlockMap:BlockMap-core:compileJava'.
> Could not target platform: 'Java SE 12' using tool chain: 'JDK 11 (11)'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 2m 0s
1 actionable task: 1 executed
~/BlockMap $

EDIT 2: The same happens on Debian 10.
EDIT 3: Sorry, just noticed that I need Java 12 :/ Closing for now.

1.13 colors are missing

Missing color for minecraft:stone_slab,type=bottom
Missing color for minecraft:stone_brick_stairs,facing=south,half=bottom,shape=straight
Missing color for minecraft:stone_brick_stairs,facing=north,half=bottom,shape=straight
Missing color for minecraft:oak_stairs,facing=north,half=bottom,shape=straight

etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.