Giter Club home page Giter Club logo

cities's Introduction

Cities

A module that creates roads, settlements, etc. procedurally from random numbers.

image1

This module contains a world generator City Worlds that creates grassland terrain based on random noise. This terrain is populated with randomly generated settlements of different sizes.

Setup

To see what it looks like, just add the module to your Terasology installation using

gradlew fetchModuleCities

When the game starts, create a new world using the City Worlds generator and ... explore !

Overview

The world is partitioned into square-shaped Sectors. For every sector, up to three suitable locations for settlements are determined. Long-distance roads are added to connect them in a pair-wise manner. Then, lots (and smaller streets) are created around the center. Finally, buildings and city furniture are generated.

Basically, every part of this module can be separated into three distinct parts:

  • A world entity definition, such as RomanesqueChurch, that contains all information on a particual model (size, height, windows, roof type, and so on). This is basically a POJO.

  • A generator that creates different instances of RomanesqueChurch based on random numbers.

  • A rasterizer that converts RomanesqueChurch instances into blocks. This is often a composite of several other rasterizers and a 3D brush.

Contributing

Actually, this is the fun part and it's really easy to do. Just create your own triple of entitiy definition, entity generation and entity rasterization to add a new element to the world.

image2

Debugging

There is a terrain generator BoundaryGenerator that creates a grid along sector and chunks borders (using magenta and black blocks).

You can also use the main method in this class to view the generated world in a 2D top-down perspective:

org.terasology.testing.SwingTest

Acknowledgements

We would like to thank D. Gilbert of Object Refinery Limited and Armin Joachimsmeyer for their friendly support.

Literature Overview

  • Introduction to Shape and Shape GrammerShape[Stiny 75/78/80] Mathematical foundation on how to use rules to replace a shape with another

  • Introduction to Urban Simulation[WaddellUlfarsson] tbd

  • Procedural 3D Modeling of Cityscape[Middelhoff05]: Three distinct simulation types: L-Systems, agent-based and stochastic.

  • Grammar-based L-Systems with extensions (ParishMüller01) L-Systems with self-intersection detection

  • Interactive Geometric Simulation of 4D Cities[Weber+08] Based on [ParishMüller01], but more sophisticated.

  • Modeling the Appearance and Behaviour of Urban Spaces[Vanegas+09] Nice survey on Roads, Buildings, Land Use and Rendering.

  • Procedural Modeling of Land Use In Cities[Lechner+05] Uses 2D agent-based simulation with SimCity3000 vis.

  • Konzeption & Realisierung eines prozeduralen Ansatzes zur Erzeugung von Gebäuden (Janusch, 2007) tbd

License

This module is licensed under the Apache 2.0 License.

cities's People

Contributors

4denthusiast avatar cervator avatar cptcrispycrunchy avatar flo avatar gooeyhub avatar jdrueckert avatar josharias avatar keturn avatar msteiger avatar pollend avatar qwertygiy avatar shartte avatar skaldarnar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

cities's Issues

Assorted issues after major facetization overhaul

@msteiger - I figure you're aware of most/all of this already and it is on a list somewhere but just in case I ran into anything useful posting some details I got from testing :-)

House generated on wrong side of city wall, slightly overlapping (few other houses did the same but from the inside):

terasology-150919150810-1152x720

After visiting a few cities I found one that broke on a structure (maybe?) and permanently left some chunks partially generated and invisible (even if I traveled away and came back). Screenie:

terasology-150919150956-1152x720

Big log snippet:

15:07:54.834 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 8904
15:07:56.462 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 8974
15:08:11.072 [Engine-Task-Pool] INFO  o.t.r.opengl.LwjglRenderingProcess - Screenshot 'Terasology-150919150810-1152x720.jpg' saved! 
15:08:14.118 [main] INFO  o.t.p.i.ReadWriteStorageManager - Saving - Creating game snapshot
15:08:14.122 [main] INFO  o.t.p.i.ReadWriteStorageManager - Saving - Snapshot created: Writing phase starts
15:08:15.053 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 10327
15:08:17.771 [Saving-0] INFO  o.t.p.internal.SaveTransaction - Save game finished
15:08:18.587 [Chunk-Generator-7] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-7
java.lang.IllegalArgumentException: Out of bounds: (1184, 332) for region (x=1152 y=320 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:08:18.614 [Chunk-Generator-0] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-0
java.lang.IllegalArgumentException: Out of bounds: (1184, 332) for region (x=1152 y=320 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:08:18.675 [Chunk-Generator-7] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-7
java.lang.IllegalArgumentException: Out of bounds: (1184, 332) for region (x=1152 y=320 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:08:18.793 [Chunk-Generator-3] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-3
java.lang.IllegalArgumentException: Out of bounds: (1184, 332) for region (x=1152 y=320 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:08:18.839 [Chunk-Generator-4] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-4
java.lang.IllegalArgumentException: Out of bounds: (1184, 332) for region (x=1152 y=320 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:08:18.943 [Chunk-Generator-1] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-1
java.lang.IllegalArgumentException: Out of bounds: (1184, 332) for region (x=1152 y=320 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:08:19.043 [Chunk-Generator-6] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-6
java.lang.IllegalArgumentException: Out of bounds: (1184, 332) for region (x=1152 y=320 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:08:19.291 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 10641

It also happened again later from an L&S world, seemingly in the city I started in:

15:13:15.625 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 381
15:13:17.660 [main] WARN  o.t.engine.internal.TimeBase - Delta too great (1160), capping to 1000
15:13:17.669 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 382
15:13:17.669 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 383
15:13:18.056 [main] ERROR o.t.e.e.internal.PojoEntityManager - Adding a component (class org.terasology.logic.location.LocationComponent) over an existing component for entity 384
15:13:18.332 [Chunk-Generator-2] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-2
java.lang.IllegalArgumentException: Out of bounds: (89, 128) for region (x=64 y=96 w=32 h=32)
    at org.terasology.world.generation.facets.base.BaseFacet2D.getWorldIndex(BaseFacet2D.java:55) ~[classes/:na]
    at org.terasology.world.generation.facets.base.BaseFieldFacet2D.getWorld(BaseFieldFacet2D.java:48) ~[classes/:na]
    at org.terasology.cities.walls.TownWallRasterizer$1.apply(TownWallRasterizer.java:55) ~[na:na]
    at org.terasology.cities.raster.Pens$2.draw(Pens.java:64) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawClippedLine(RasterUtil.java:166) ~[na:na]
    at org.terasology.cities.raster.RasterUtil.drawLine(RasterUtil.java:147) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.rasterSolid(TownWallRasterizer.java:79) ~[na:na]
    at org.terasology.cities.walls.TownWallRasterizer.generateChunk(TownWallRasterizer.java:64) ~[na:na]
    at org.terasology.world.generation.WorldImpl.rasterizeChunk(WorldImpl.java:67) ~[classes/:na]
    at org.terasology.world.generation.BaseFacetedWorldGenerator.createChunk(BaseFacetedWorldGenerator.java:75) ~[classes/:na]
    at org.terasology.world.chunks.localChunkProvider.LocalChunkProvider$4.run(LocalChunkProvider.java:661) ~[classes/:na]
    at org.terasology.utilities.concurrency.TaskProcessor.run(TaskProcessor.java:50) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
15:13:19.022 [Chunk-Generator-5] ERROR o.t.u.concurrency.TaskProcessor - Error in thread Chunk-Generator-5

I don't know if this relates but I found this monstrosity in said starting city:

terasology-150919151457-1152x720

Finally an entirely different quirk - the openings left in buildings seem to contain invisible unbreakable blocks you can't move through. In this screenie I broke the top block from a 1-block opening (window maybe? Broken glass block instead?) yet couldn't move through as the lower block acted solid. Couldn't interact with it, place a block there, etc. Same for the other openings. Break normal wall and you get normal openings you can walk through

terasology-150919151104-1152x720

Think of implementing some grammar-based architecture generator

There is a guy out there, who implements some commercial real-time voxel renderer software. And he has pretty decent implementation of l-system grammar to make buildings.
His blog with examples here:
http://procworld.blogspot.com.by/search/label/Grammar.

If someone has already declined the idea, I say sorry. But if not, I think it would be pretty challenging to implement something like this for city generator.

I offer my candidature for actually trying to implement this, although I have pretty little experience with formal grammars and procedural content generation.

Changed Fences mod to automatically connect them on placing

This however has broken anything that places them during generation. In order to fix it, you have to use blockId = "Fences:Fence.[ID]", where [ID] is a number that is a sum of the sides that it is connected to, where (as specified by SideBitFlag):

  • LEFT = 2
  • FRONT = 4
  • RIGHT = 16
  • BACK = 32

If you have any trouble updating these, let me know and I should be able to help out.

NPE on player tracker in a reloaded world

Seems something doesn't save/load right. The player tracking for city enter/exit (I think?) works fine on first creation of a world, but if you then save and reload player movement causes NPEs:

16:49:56.684 [main] ERROR o.t.e.event.internal.EventSystemImpl - Failed to invoke event
java.lang.NullPointerException: null
    at org.terasology.cities.events.PlayerTracker.onEnterBlock(PlayerTracker.java:94) ~[na:na]
    at org.terasology.cities.events.PlayerTrackerMethodAccess.invoke(Unknown Source) ~[na:na]
    at org.terasology.entitySystem.event.internal.EventSystemImpl$ByteCodeEventHandlerInfo.invoke(EventSystemImpl.java:502) [classes/:na]
    at org.terasology.entitySystem.event.internal.EventSystemImpl.sendStandardEvent(EventSystemImpl.java:270) [classes/:na]
    at org.terasology.entitySystem.event.internal.EventSystemImpl.send(EventSystemImpl.java:261) [classes/:na]
    at org.terasology.entitySystem.entity.internal.BaseEntityRef.send(BaseEntityRef.java:144) [classes/:na]
    at org.terasology.logic.characters.KinematicCharacterMover.checkBlockEntry(KinematicCharacterMover.java:152) [classes/:na]
    at org.terasology.logic.characters.KinematicCharacterMover.step(KinematicCharacterMover.java:106) [classes/:na]
    at org.terasology.logic.characters.ServerCharacterPredictionSystem.stepState(ServerCharacterPredictionSystem.java:145) [classes/:na]
    at org.terasology.logic.characters.ServerCharacterPredictionSystem.onPlayerInput(ServerCharacterPredictionSystem.java:129) [classes/:na]
    at org.terasology.logic.characters.ServerCharacterPredictionSystemMethodAccess.invoke(Unknown Source) [reflectasm-1.11.0.jar:na]
    at org.terasology.entitySystem.event.internal.EventSystemImpl$ByteCodeEventHandlerInfo.invoke(EventSystemImpl.java:502) [classes/:na]
    at org.terasology.entitySystem.event.internal.EventSystemImpl.sendStandardEvent(EventSystemImpl.java:270) [classes/:na]
    at org.terasology.entitySystem.event.internal.EventSystemImpl.send(EventSystemImpl.java:261) [classes/:na]
    at org.terasology.entitySystem.entity.internal.BaseEntityRef.send(BaseEntityRef.java:144) [classes/:na]
    at org.terasology.logic.players.LocalPlayerSystem.processInput(LocalPlayerSystem.java:154) [classes/:na]
    at org.terasology.logic.players.LocalPlayerSystem.update(LocalPlayerSystem.java:126) [classes/:na]
    at org.terasology.engine.modes.StateIngame.update(StateIngame.java:178) [classes/:na]
    at org.terasology.engine.TerasologyEngine.mainLoop(TerasologyEngine.java:414) [classes/:na]
    at org.terasology.engine.TerasologyEngine.run(TerasologyEngine.java:369) [classes/:na]
    at org.terasology.engine.Terasology.main(Terasology.java:154) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) [idea_rt.jar:na]
16:49:56.686 [main] ERROR o.t.e.event.internal.EventSystemImpl - Failed to invoke event

Seems fairly easy to reproduce (I stayed inside whatever city I spawned in the whole time). Doesn't crash the game or cause much trouble but it sure fills up the log in a hurry if you're moving around :-)

--- Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/28061592-npe-on-player-tracker-in-a-reloaded-world?utm_campaign=plugin&utm_content=tracker%2F681990&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F681990&utm_medium=issues&utm_source=github).

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.