- Added GuavaEventBusHijacker to access an inexplicably package-private
constructor in EventBus
- Added and utilized ReportingEventBus that reports caught exceptions
- Different blocks can now be placed
- Select block with (vertical) mouse wheel scrolling when block
placing is active
- All blocks except Test:Air are available
- Different tiles can now be placed
- Select tile with (vertical) mouse wheel scrolling when tile placing
is active
- Switch between placing blocks and tiles with middle mouse button,
horizontal mouse scrolling or Shift + (vertical) mouse scrolling
- Changed Test GUI text color to white to increase readability on blocks
- Recolored Test:Stones to better match granite textures
- Selection box restored
- Controls no longer get stuck after player entity is reloaded
- Moved test spawn location a little down so chunks would load
conveniently
- Moved test spawn variable into TestContent
- ShapeFragment.glsl now declares uniformColorMultiplier, which is used
as an additional fragment color multiplier (independent from VBAs)
- Managed with a new stack by ShapeRenderHelper
- Fixed dynamic font colors
- Added granite (monolith, cracked and gravel variants)
- Generates as a random combination of the variants instead of stone
on mountain cliffs
- Added snow (opaque, half and quarter variants)
- Generates at altitudes above 1500 m
- Distribution is bad atm, not fixing until proper worldgen is
introduced
- Reduced cliff areas
- Hotfixed texture flickering
- Changed dirt texture
- TickerCoordinator.pendingChanges is now a HashSet
- TickerCoordinator now makes some best-effort checks to make sure the
world does not change during evaluation phase
- Extracted Cached{Block,Tile}Change
- these classes implement hashCode() and equals() based on the
location of the block/tile they affect, thus ensuring that only one per
block/tile remain in the aforementioned set
- Similarly extracted PacketAffect{Block,Tile,Entity}
- Renamed a bunch of packets
- Moved PacketSendEntity to correct package (.common.world.entity)
- Temporarily added position, velocity and direction to EntityData
read/write methods
- Increased view distance to 150 m
- Squashed visible area vertically (to load less underground and air
chunks)
- A custom Object can be appended to any ChunkData to save its
generation status
- Handled by WorldGenerator
- Persistent
- Used to determine whether a chunk is ready to be sent to client
- ChunkIO now requires an IOConext
- ChunkIO now requires Data{In,Out}putStreams (as a combination of
Data{In,Out}put and {In,Out}putStream)
- Fixed some minor bugs
- CrashReports.report now throws an exception instead of invoking System.exit()
- Reduced chance of deadlocks
- Improved code readability
- added CrashReports.crash to handle exceptions thrown by report() in top-level catch blocks
- At most 1 chunk is updated (previously known as 'buildModel') every
frame
- 3x3x3 chunks closest to the player are updated in real-time without
the aforementioned limit
- Entities are no longer internally bound to chunks
- Entity visibility for a player is now unique for each entity
- Entities are send/revoked just like chunks by EntityManager
- LocalPlayer no longer stores an entity; instead it stores entity ID
and looks up the entity on demand
- Removed CommsChannel Roles
- Replaced with Client class hierarchy on the server
- Added ClientPlayer
- Added Player (a new server class holding all objects related to a
player)
- Player class in common renamed to PlayerData
- Added PlayerManager for the server
- Added PacketLoadChunk
- Added ChunkIO to handle converting ChunkData to/from bytes
- Client no longer generates chunks by default
- It still does generate them on request by server
- DataBuffer now exposes InputStream and OutputStream
- Faces are now grouped by texture primitive they use
- Massive FPS increase
- TexturePrimitive receive an additional unique ID immediately upon
instantiation