Giter Site home page Giter Site logo

bluemapsignextractor's Issues

Support all the different sign materials

Currently, all signs are displayed as Oak Signs, even the ones that aren't.

I would like to figure out a way to extract the material type from the region files.

Display double-sided signs better

Currently, signs that have text on both sides of the sign look a quite bad:
image

I would like to improve this, but I am not exactly sure of a good way to make it look pretty.

If anyone has any ideas on how to make it look pretty, please let me know by replying to this issue.

Not fully fixed: chunkBlockEntities was null

Regarding #1, I still see errors when running the plugin:

[21:09:18] [Craft Scheduler Thread - 4 - BlueMapSignExtractor/INFO]: [BlueMapSignExtractor] Processing region r.-1.-1.mca
[21:09:18] [Craft Scheduler Thread - 4 - BlueMapSignExtractor/ERROR]: [BlueMapSignExtractor] Error reading region file
java.io.IOException: chunkBlockEntities was null in chunk 13, 10 in region file /opt/papermc/karte2_nether/DIM-1/region/r.-1.-1.mca
        Chunk class: MC_1_20_4_Chunk
        Chunk data version: 3578
        at com.technicjelle.bluemapsignextractor.common.MCA.getBlockEntities(MCA.java:71) ~[BlueMapSignExtractor-1.1.jar:?]
        at com.technicjelle.bluemapsignextractor.common.Core.processMCA(Core.java:37) ~[BlueMapSignExtractor-1.1.jar:?]
        at com.technicjelle.bluemapsignextractor.common.Core.lambda$loadMarkers$1(Core.java:23) ~[BlueMapSignExtractor-1.1.jar:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:?]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?]
        at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?]
        at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939) ~[?:?]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[?:?]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
        at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
        at com.technicjelle.bluemapsignextractor.common.Core.loadMarkers(Core.java:23) ~[BlueMapSignExtractor-1.1.jar:?]
        at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.lambda$new$0(BlueMapSignExtractor.java:41) ~[BlueMapSignExtractor-1.1.jar:?]
        at org.bukkit.craftbukkit.v1_20_R3.scheduler.CraftTask.run(CraftTask.java:101) ~[paper-1.20.4.jar:git-Paper-350]
        at org.bukkit.craftbukkit.v1_20_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[paper-1.20.4.jar:git-Paper-350]
        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[paper-1.20.4.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]
[21:09:18] [Craft Scheduler Thread - 4 - BlueMapSignExtractor/INFO]: [BlueMapSignExtractor] Processing region r.-1.0.mca
[21:09:18] [Craft Scheduler Thread - 4 - BlueMapSignExtractor/ERROR]: [BlueMapSignExtractor] Error reading region file
java.io.IOException: chunkBlockEntities was null in chunk 13, 0 in region file /opt/papermc/karte2_nether/DIM-1/region/r.-1.0.mca
        Chunk class: MC_1_20_4_Chunk
        Chunk data version: 3578
        at com.technicjelle.bluemapsignextractor.common.MCA.getBlockEntities(MCA.java:71) ~[BlueMapSignExtractor-1.1.jar:?]
        at com.technicjelle.bluemapsignextractor.common.Core.processMCA(Core.java:37) ~[BlueMapSignExtractor-1.1.jar:?]
        at com.technicjelle.bluemapsignextractor.common.Core.lambda$loadMarkers$1(Core.java:23) ~[BlueMapSignExtractor-1.1.jar:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:?]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?]
        at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?]
        at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939) ~[?:?]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[?:?]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
        at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
        at com.technicjelle.bluemapsignextractor.common.Core.loadMarkers(Core.java:23) ~[BlueMapSignExtractor-1.1.jar:?]
        at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.lambda$new$0(BlueMapSignExtractor.java:41) ~[BlueMapSignExtractor-1.1.jar:?]
        at org.bukkit.craftbukkit.v1_20_R3.scheduler.CraftTask.run(CraftTask.java:101) ~[paper-1.20.4.jar:git-Paper-350]
        at org.bukkit.craftbukkit.v1_20_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[paper-1.20.4.jar:git-Paper-350]
        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[paper-1.20.4.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]

As far as I could tell, only regions from the Nether are affected. I attached the files as usual.
nether-regions.zip

Make pretty

Currently, the plugin just creates a pretty boring POI Marker.
I want to make this prettier.

`chunkBlockEntities` is null

I use paper-1.20.2-291 with a 1.12.2 map and the current prelease of the plugin.

When starting the server i have the following message in the server console:

[21:44:33 INFO]: [BlueMapSignExtractor] Processing region r.-1.-1.mca
[21:44:33 WARN]: [BlueMapSignExtractor] Plugin BlueMapSignExtractor v0.1 generated an exception while executing task 24
java.lang.NullPointerException: Cannot read the array length because "<local10>" is null
        at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.processMCA(BlueMapSignExtractor.java:79) ~[BlueMapSignExtractor-0.1.jar:?]
        at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.lambda$loadMarkers$3(BlueMapSignExtractor.java:52) ~[BlueMapSignExtractor-0.1.jar:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:?]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?]
        at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?]
        at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939) ~[?:?]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[?:?]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
        at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
        at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.loadMarkers(BlueMapSignExtractor.java:52) ~[BlueMapSignExtractor-0.1.jar:?]
        at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.lambda$new$0(BlueMapSignExtractor.java:42) ~[BlueMapSignExtractor-0.1.jar:?]
        at org.bukkit.craftbukkit.v1_20_R2.scheduler.CraftTask.run(CraftTask.java:101) ~[paper-1.20.2.jar:git-Paper-291]        at org.bukkit.craftbukkit.v1_20_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[paper-1.20.2.jar:git-Paper-291]
        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[paper-1.20.2.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]

Sadly I know nothing about compling JAR files or I would have built a new version myself with the new commits.

Allow custom filtering rules to be configured

Perhaps through some sort of scripting?
That seems awfully complicated, though...

Perhaps just a black/white-list, like BMAreaControl has is already enough..?

Please feel free to comment on this issue with your own thoughts on this!

Out of memory for 100+ GB map

Crashed after ~15 minutes of collecting data (16GB RAM, Purpur 1.20.2)

! [пт 18:40:05 WARN  BlueMapSignExtractor] Plugin BlueMapSignExtractor v1.2 generated an exception while executing task 67
java.lang.OutOfMemoryError
    at java.base/java.util.zip.Inflater.inflateBytesBytes(Native Method)
    at java.base/java.util.zip.Inflater.inflate(Inflater.java:378)
    at java.base/java.util.zip.InflaterInputStream.read(InflaterInputStream.java:152)
    at java.base/java.util.zip.InflaterInputStream.read(InflaterInputStream.java:122)
    at java.base/java.io.FilterInputStream.read(FilterInputStream.java:82)
    at BlueMapSignExtractor-1.2.jar//de.bluecolored.bluenbt.NBTReader.readTag(NBTReader.java:462)
    at BlueMapSignExtractor-1.2.jar//de.bluecolored.bluenbt.NBTReader.peek(NBTReader.java:57)
    at BlueMapSignExtractor-1.2.jar//de.bluecolored.bluenbt.NBTReader.checkState(NBTReader.java:500)
    at BlueMapSignExtractor-1.2.jar//de.bluecolored.bluenbt.NBTReader.beginCompound(NBTReader.java:77)
    at BlueMapSignExtractor-1.2.jar//de.bluecolored.bluenbt.adapter.DefaultAdapterFactory$DefaultAdapter.read(DefaultAdapterFactory.java:129)
    at BlueMapSignExtractor-1.2.jar//de.bluecolored.bluenbt.BlueNBT.read(BlueNBT.java:109)
    at BlueMapSignExtractor-1.2.jar//de.bluecolored.bluenbt.BlueNBT.read(BlueNBT.java:117)
    at BlueMapSignExtractor-1.2.jar//com.technicjelle.bluemapsignextractor.common.MCA.getBlockEntities(MCA.java:51)
    at BlueMapSignExtractor-1.2.jar//com.technicjelle.bluemapsignextractor.common.Core.processMCA(Core.java:37)
    at BlueMapSignExtractor-1.2.jar//com.technicjelle.bluemapsignextractor.common.Core.lambda$loadMarkers$1(Core.java:23)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
    at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
    at java.base/java.util.stream.AbstractPipeline.copyInto(Ab

But it's sounds like very cool plugin for me, many thanks to you by advance!
(Actually have been looking for a long time to be able to display signs on the map)

Update markers every once in a while (+cache)

Currently, the plugin creates markers for each sign, once when BlueMap loads.

The markers should probably update more often than that.

On a timer?
I don't really like that idea a whole lot...

Perhaps based on events from the server?
I like that a bit more, I think...
Although making this plugin cross-platform would be a bit more effort if I do that.
I think it'd probably be worth it, though.

Maybe I could also just base it off the world files changing, just like BlueMap does.
However, it may be nice if the signs were (near) instant.

Exception while collecting markers

Purpur 1.20.2, Blue Map 3.17

[00:02:15] [Craft Scheduler Thread - 5 - BlueMap/WARN]: [BlueMapSignExtractor] New version available: v1.2 (current: v1.3-PREVIEW2)
[00:02:15] [Craft Scheduler Thread - 5 - BlueMap/WARN]: [BlueMapSignExtractor] Download it at https://github.com/TechnicJelle/BlueMapSignExtractor/releases/latest
[00:02:15] [Craft Scheduler Thread - 5 - BlueMap/INFO]: [BlueMapAreaControl] BlueMapAreaControl enabled!
[00:02:15] [Craft Scheduler Thread - 5 - BlueMap/INFO]: [BlueMapAreaControl] Loading existing configs
[00:02:15] [Craft Scheduler Thread - 5 - BlueMap/INFO]: [BlueMapAreaControl] Loading config for map: world
[00:02:15] [Craft Scheduler Thread - 2 - BlueMapSignExtractor/INFO]: [BlueMapSignExtractor] World "world": Extracting signs into markers...
[00:02:15] [Craft Scheduler Thread - 5 - BlueMap/INFO]: [BlueMapAreaControl] Loading config for map: world_the_end
[00:02:15] [Craft Scheduler Thread - 5 - BlueMap/INFO]: [BlueMap] Loaded!
[01:37:56] [Craft Scheduler Thread - 2 - BlueMapSignExtractor/WARN]: [BlueMapSignExtractor] Plugin BlueMapSignExtractor v1.3-PREVIEW2 generated an exception while executing task 67
java.lang.NullPointerException: null
	at java.util.Objects.requireNonNull(Objects.java:208) ~[?:?]
	at java.util.ImmutableCollections$SetN.contains(ImmutableCollections.java:937) ~[?:?]
	at com.technicjelle.bluemapsignextractor.common.Chunk.isFinished(Chunk.java:20) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at com.technicjelle.bluemapsignextractor.common.Chunk.isGenerated(Chunk.java:31) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at com.technicjelle.bluemapsignextractor.common.MCARegion.getBlockEntities(MCARegion.java:112) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at com.technicjelle.bluemapsignextractor.common.Core.fillMarkerSetFromRegionFile(Core.java:57) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at com.technicjelle.bluemapsignextractor.common.Core.lambda$loadMarkerSetFromWorld$2(Core.java:42) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[?:?]
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?]
	at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?]
	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
	at com.technicjelle.bluemapsignextractor.common.Core.loadMarkerSetFromWorld(Core.java:42) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at com.technicjelle.bluemapsignextractor.common.Core.addMarkersToBlueMapWorld(Core.java:24) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.loadMarkersFromWorlds(BlueMapSignExtractor.java:67) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at com.technicjelle.bluemapsignextractor.BlueMapSignExtractor.lambda$new$0(BlueMapSignExtractor.java:50) ~[BlueMapSignExtractor-1.3-PREVIEW2.jar:?]
	at org.bukkit.craftbukkit.v1_20_R2.scheduler.CraftTask.run(CraftTask.java:101) ~[purpur-1.20.2.jar:git-Purpur-2095]
	at org.bukkit.craftbukkit.v1_20_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[purpur-1.20.2.jar:git-Purpur-2095]
	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[purpur-1.20.2.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]

Create automated tests

  • Create tests
    • Research testing frameworks for Java (Perhaps have a peek at how BlueNBT's automated testing works...)
    • Create a server with each Minecraft version, starting with 1.13
    • Place signs in the world
    • Copy the region file into the repository to use for the tests
    • Write the actual tests, using the copied region files, so each Minecraft version should be covered
  • Automate them with GitHub Actions

Fabric version

I'd like to make a Fabric version of this plugin sometime...

Create config file

  • MarkerSet options:
     # Marker Set Options
     # Documentation: https://bluemap.bluecolored.de/wiki/customization/Markers.html#marker-sets
     MarkerSetName: "Signs"
     Toggleable: true
     DefaultHidden: false
  • Marker max-distance
  • #5
  • Suppress warnings about old/incompatible chunks

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.