This repository has been archived by the owner. It is now read-only.
Minecraft inspired modding focused voxel game
Java GLSL
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
core
desktop
documentation
doxygen
eclipse_settings
gradle/wrapper
.gitignore
.pmd
LICENSE
README.md
build.gradle
gradle.properties
gradlew
gradlew.bat
settings.gradle

README.md

jCubicWorld

This project was started by me as an educational training-project with libgdx. I was porting my unity3d voxel engine to libgdx, but it was that much fun that i started to write kind of a game. I dunno if i ever finish this, may i will. may i'll quit at some point :P

This project is currently under heavy development and not ready for playing!

What is jCubicWorld?

jCubicWorld started as a voxel rendering fun-project. I was porting my Unity VoxelEngine to Java and i wanted to try out libgdx. Working with libgdx was that much fun so i decided to make a whole game out of it.

My goal is to build a game similar to minecraft but specialized on user-created content. I want to provide a modding api for unlimited access to all of the game mechanics.

Eclipse Plugins

Cubicworld uses the following Eclipse Plugins (+Repos):

Needed

gradle - http://dist.springsource.com/snapshot/TOOLS/gradle/nightly

Eclipse 4.4 Recommended!

Recommended

PMD - http://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/ FindBugs - http://findbugs.cs.umd.edu/eclipse/ Mylyn - http://download.eclipse.org/mylyn/releases/luna

Eclipse 4.x Recommended!

Conventions

There are a few conventions for adding code to this project:

General

Whenever you use a Vector3 obtained by a getter method wrap it into a new vector like this new Vector3(obj.getPos()); Remeber, in java there's call by reference so if you get a vector by a getter you will get the reference of the Vector used in the object, not a new instance!

Always create a new vector if you want to modify it and use it in another space! You can use a position returned by getPosition() to set new values to the vector3 instance, but you shouldn't. Use the setPosition() method instead!

Please use firstLowerCamelCase for your variable names. For class, interface, abstract classes or enumerations, please use FirstUpperCamelCase.

Abstract classes have a prefix "A". Interface have "I". Example: AEntity (Abstract class) and IPacketModel (Interface)

Generally classes in this project are not thread-safe, only if the documentation explicitly states it.

Entities

Entity positions ALWAYS point to the bottom center position of it's collision box. If you access entity position or rotation use the getter and setter method! Otherwise it is not guaranteed that the values will be updated correctly.

Also, if any value of an entity depends on position or rotation, just overwrite AEntity's setter methods and take care of the dependence.

Formatting

You can find my eclipse code style configuration for auto-formatting in this repo under eclipse_settings/formatter_settings.xml!

Libraries

jCubicWorld uses the following libraries:

Current Features

  • Multiuser (Entity system)
  • Voxel world rendering
  • World editing (+ Multiplayer sync)
  • Basic physics system (Supports collision boxes and raycasting)
  • Input system
  • Pathfinder (A*)
  • GUI System
  • Inventory/Item System
  • Plugin API
  • Enemy AI System
  • Simple lighting system

Planned Features

  • Light sources
  • Gravity blocks
  • Better physics implementation
  • Fluid system / simulation (Maybe like the one of minecraft?)
  • Weapons (Swords, Bows, Guns)
  • Tools (Pickaxe, Shovel, ...)
  • Multiple Dimensions
  • Multiblock structures
  • Minecraft like world generation (Caves and so on)

Screenshots

Furnaces, the middle one is working Player inventory Test entity implementation with A* Pathfinding