cerus/maps

MapScreen.java Broken

cameronbowe opened this issue · 5 comments

Issue description

I can never get my MapScreens to create due to issues in the console, and under some investigation, it seems out of my control.

To reproduce

		session.updateScreen(); //Update the screen.
		session.screen.spawnFrames(player); //Spawn the frames.
		session.screen.sendMaps(true, player); //Send the maps to the player.

This is my code, the session.updateScreen() handles the screen update and spawnFrames(player) SHOULD spawn the frames- but it doesn't, instead it throws a null pointer saying this.frames is not set. I looked into your Map Screen class and it attempts to get this.frames[x][y] but the this.frames variable was never setup within the class whatsoever, so therefore it just keeps throwing errors upon attempting to create it.

Expected behaviour

For map screens to actually show and not throw a null pointer.

Screenshots / videos

Look into MapScreen.java to see what I mean, it's pretty self-explanatory, but here's the log as well I keep getting.
java.lang.NullPointerException: Cannot load from object array because "this.frames" is null at com.legacymc.legacyrp.libraries.maps.api.MapScreen.spawnFrames(MapScreen.java:191) ~[LegacyRP-0.0.1.jar:?]

Additional information

No response

How do you create MapScreens? The frames are set when using the "official" storage implementation - here and here.

new MapScreen(CURRENT_ID.getAndUpdate(i -> (i < Integer.MAX_VALUE ? i : 0)), new VersionAdapter20R3(), NationsConfiguration.MAP_VIEWER_SIZE_WIDTH, NationsConfiguration.MAP_VIEWER_SIZE_HEIGHT); //Create the map screen.

Using this line. I don't need anything storage-wise since map screens are only shown via a command and removed after logout or exit- so I didn't think I needed the plugin to store them. So does the plugin automatically create the frames if they don't exist?

The plugin does not automatically create frames, they are usually created when the screen is first created. Take a look here

Oh I see, it was non-apparent in the docs how much the plugin really handles... It really isn't just storage, it's even creating the item frames, the location & setting all that- which none of the docs showcase since I guess you assumed everyone would use the plugin. So in a nutshell, the common shouldn't be touched on it's own without the plugin lol

Yeah, the scope of the plugin has kinda grown exponentially which wasn't planned at the start. It's probably getting time for another rewrite. But in the meantime you should be able to copy and adjust the plugins code to your needs