diff --git a/Readme.txt b/Readme.txt index f1a6b586d..0b631d786 100644 --- a/Readme.txt +++ b/Readme.txt @@ -1,69 +1,55 @@ -This mod adds a Level Of Detail (LOD) system to Minecraft. -This implementation renders simplified chunks outside the normal render distance -allowing for an increased view distance without harming performance. - -Or in other words: this mod let's you see farther without turning your game into a slide show. -If you want to see a quick demo, check out the video I made here: -https://youtu.be/CCT-3s02tYA - - -Forge version: 1.16.5-36.1.0 - -Notes: -This version has been confirmed to work in Eclipse. - +This branch is used only to test the QuadTree data structure. This branch cannot be used to compile the mode and the classes +that are not listed below in the next section are not updated to the last version of the main branch. ======================== -source code installation +QUADTREE VERSION - HOW IT WORK AND HOW TO USE ======================== +This are the file that you should use if you want to import the quadTree to your current version. -See the Forge Documentation online for more detailed instructions: -http://mcforge.readthedocs.io/en/latest/gettingstarted/ +DistanceGenerationMode (added NONE) +LodQuadTreeDimensionFileHandler +LodDataPoint (added hash and equal function) +LodQuadTreeNode +LodQuadTree +LodQuadTreeDimension +LodQuadTreeWorld (this is identical to LodWorld but uses LodQuadTreeDimension) -Step 1: Create a system variable called "JAVA_MC_HOME" with the location of the JDK 1.8.0_251 (This is needed for gradle to work correctly) +and those two optional classes +BiomeColorsUtils is a class that i've created that contain various static methods to create colors from a biom +QuadTreeImage uses the ChunkBase map generation to test the QuadTree. You should refresh dependencies to import + the KaptainWutax code (check the build.gradle if you want to use them. I still can only use the code in intellij + but can't import it in the final mod jar, because i'm still new to this stuff, so it wouldn't work in game at the moment) -Step 2: replace JAVA_HOME with JAVA_MC_HOME in gradle.bat - -Step 3: open a command line in the project folder - -Step 4: run the command: "./gradlew geneclipseruns" - -Step 5: run the command: "./gradlew eclipse" - -Step 6: Make sure the eclipse has the JDK 1.8.0_251 installed. (This is needed so that eclipse can run minecraft) - -Step 7: Import the project into eclipse +You should then update the builders, the renderer, the templates... to work with this. +--HOW IT WORK +I've tried to make this classes as similar as possible to yours. This way you could even do the same stuff that you are doing now +like using all the Lod with the same quality. LodDetail is not used anywhere and is replaced by a level value in +LodQuadTreeNode. -========= -compiling -========= +A LodQuadTree has a quad tree structure. So it has 4 children of the same type and a LodQuadTreeNode that contain all +the information of the node such as position, level (the level is the depth of the quad tree) and the LodDataPoint. +If in the future you want to add multiple LodDataPoint per position (maybe you want to show floating island) you could still +do it by transforming the lodDataPoint variable in a LodDataPoint array. -Step 1: open a command line in the project folder +The two most important factor of a Node is the level and the level position. At level 9 you find the region (of width 2^9=512) +at level 4 you find the chunk (of width 2^4=16) and at level 0 you find the blocks (of width 2^0=1). The pos is like the +region pos and the chunk pos but for every level. +The complexity of a node indicate how the node was built, so i've used the DistanceGenerationMode enum. The complexity is +ordered by the order in the enum (NONE -> BIOME_ONLY -> BIOME_ONLY_SIMULATE_HEIGHT -> SURFACE -> FEATURES -> SERVER). The idea +is that you cannot override a node with a node that is less complex. This way you could use different type of generation based +on the distance. -Step 2: run the command: "./gradlew build" +LodQuadTreeDimensionFileHandler is used to save all the region (quadTree). I've just converted your method of saving +to work with this. -Step 3: the compiled jar file will be in the folder "build\libs" +--HOW TO USE +You can create the LodQuadTreeWorld and the LodQuadTreeDimension in the same way as yours. +You can build a LodQuadTreeNode by specifying the level, the position in the level, the LodDataPoint, the complexity +(the DistanceGenerationMode setting selected to generate the information of the node or NONE if the node is fake and empty). -============== -Other commands -============== - -"./gradlew --refresh-dependencies" to refresh local dependencies. -"./gradlew clean" to reset everything (this does not affect your code) and then start the process again. - - - -============ -Note to self -============ - -The Minecraft source code is NOT added to your workspace in a editable way. Minecraft is treated like a normal Library. Sources are there for documentation and research purposes only. - -Source code uses mcp mappings not Mojangs. - -The source code can be 'created' with the ./eclipse command and can be found in the following path: -minecraft-lod-mod\build\fg_cache\mcp\ VERSION \joined\ RANDOM_STRING \patch\output.jar +How to select the node that i want to generate? +At the moment you can select this in two ways: the first is to use the getLodNodeToGenerate diff --git a/src/main/java/com/seibel/lod/enums/LodCorner.java b/src/main/java/com/seibel/lod/enums/LodCorner.java deleted file mode 100644 index 97f8f3456..000000000 --- a/src/main/java/com/seibel/lod/enums/LodCorner.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.seibel.lod.enums; - -/** - * NE, SE, SW, NW - * - * @author James Seibel - * @version 1-20-2020 - */ -public enum LodCorner -{ - /** -Z, +X */ - NE(0), - /** +Z, +X */ - SE(1), - /** +Z, -X */ - SW(2), - /** -Z, -X */ - NW(3); - - public final int value; - - private LodCorner(int newValue) - { - value = newValue; - } -} diff --git a/src/main/java/com/seibel/lod/objects/HOWTOUSE.txt b/src/main/java/com/seibel/lod/objects/HOWTOUSE.txt index c9051e34d..8b1378917 100644 --- a/src/main/java/com/seibel/lod/objects/HOWTOUSE.txt +++ b/src/main/java/com/seibel/lod/objects/HOWTOUSE.txt @@ -1,29 +1 @@ -This are the file that you should use -DistanceGenerationMode (added NONE) -LodQuadTreeDimensionFileHandler -LodDataPoint (added hash and equal function) -LodQuadTreeNode -LodQuadTree -LodQuadTreeDimension -LodQuadTreeWorld (this is identical to LodWorld but uses LodQuadTreeDimension) - -HOW IT WORK -I've tried to make this classes as similar at yours. This way you could even do the same stuff that you are doing now -like using all the Lod with the same quality. LodDetail is not used anywhere and is replaced by a level value in -LodQuadTreeNode. - -A LodQuadTree has a quad tree structure. So it has 4 children of the same type and a LodQuadTreeNode that contain all -the information of the node such as position, level (the level is the depth of the quad tree) and the LodDataPoint. -If in the future you want to add multiple LodDataPoint per position (maybe you want to show floating island) you could still -do it by transforming the lodDataPoint variable in a LodDataPoint array. - -The two most important factor of a Node is the level and the level position. At level 9 you find the region (of width 2^9=512) -at level 4 you find the chunk (of width 2^4=16) and at level 0 you find the blocks (of width 2^0=1). The pos is like the -region pos and the chunk pos but for every level. -The complexity of a node indicate how the node was built, so i've used the DistanceGenerationMode enum. The complexity is -ordered by the order in the enum (NONE -> BIOME_ONLY -> BIOME_ONLY_SIMULATE_HEIGHT -> SURFACE -> FEATURES -> SERVER). The idea -is that you cannot override a node with a node that is less complex. This way you could use different type of generation based -on the distance. - -HOW TO USE