From 95bcc71d237f8728d3b5048165b0265c33056234 Mon Sep 17 00:00:00 2001 From: Morippi Date: Thu, 8 Jul 2021 12:40:36 +0200 Subject: [PATCH] various fix --- build.gradle | 71 +++++----- .../lod/objects/quadTree/LodQuadTree.java | 10 +- .../lod/objects/quadTree/QuadTreeImage.java | 127 ++++++++++++------ .../com/seibel/lod/util/BiomeColorsUtils.java | 120 ++++++++++++++++- 4 files changed, 244 insertions(+), 84 deletions(-) diff --git a/build.gradle b/build.gradle index 36e41725f..8c16ed141 100644 --- a/build.gradle +++ b/build.gradle @@ -3,13 +3,13 @@ buildscript { maven { url = 'https://files.minecraftforge.net/maven' } jcenter() mavenCentral() - maven { url = 'https://repo.spongepowered.org/maven/' } - // potential replacement in case of problems: - // https://dist.creeper.host/Sponge/maven + maven { url = 'https://repo.spongepowered.org/maven/' } + // potential replacement in case of problems: + // https://dist.creeper.host/Sponge/maven } dependencies { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true - classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.7-SNAPSHOT' + classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.7-SNAPSHOT' } } apply plugin: 'net.minecraftforge.gradle' @@ -18,7 +18,7 @@ apply plugin: 'org.spongepowered.mixin' apply plugin: 'eclipse' apply plugin: 'maven-publish' -version = 'a1.2' +version = 'a1.3' group = 'com.backsun.lod' archivesBaseName = 'lod_1.16.5' @@ -31,10 +31,10 @@ minecraft { // stable_# Stables are built at the discretion of the MCP team. // Use non-default mappings at your own risk. they may not always work. // Simply re-run your setup task after changing the mappings to update your workspace. - mappings channel: 'official', version: '1.16.5' + mappings channel: 'official', version: '1.16.5' // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. - + accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Default run configurations. @@ -42,10 +42,10 @@ minecraft { runs { client { workingDirectory project.file('run') - arg "-mixin.config=lod.mixins.json" + arg "-mixin.config=lod.mixins.json" // Recommended logging data for a userdev environment - // The markers can be changed as needed. + // The markers can be changed as needed. // "SCAN": For mods scan. // "REGISTRIES": For firing of registry events. // "REGISTRYDUMP": For getting the contents of all registries. @@ -65,10 +65,10 @@ minecraft { server { workingDirectory project.file('run') - arg "-mixin.config=lod.mixins.json" - + arg "-mixin.config=lod.mixins.json" + // Recommended logging data for a userdev environment - // The markers can be changed as needed. + // The markers can be changed as needed. // "SCAN": For mods scan. // "REGISTRIES": For firing of registry events. // "REGISTRYDUMP": For getting the contents of all registries. @@ -90,7 +90,7 @@ minecraft { workingDirectory project.file('run') // Recommended logging data for a userdev environment - // The markers can be changed as needed. + // The markers can be changed as needed. // "SCAN": For mods scan. // "REGISTRIES": For firing of registry events. // "REGISTRYDUMP": For getting the contents of all registries. @@ -120,12 +120,11 @@ repositories { mavenCentral() maven { url 'https://jitpack.io' } } - dependencies { // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. // The userdev artifact is a special name and will get all sorts of transformations applied to it. - minecraft 'net.minecraftforge:forge:1.16.4-35.1.4' + minecraft 'net.minecraftforge:forge:1.16.5-36.1.0' /* classpath group: 'com.github.KaptainWutax', name: 'BiomeUtils-lib', version: '-SNAPSHOT' @@ -152,20 +151,19 @@ dependencies { compile('com.github.KaptainWutax:TerrainUtils:1.0.0') { transitive = false } - - // these were added to hopefully allow for cloning - // configuredFeatures to allow for safe - // multi threaded feature generation. Sadly I couldn't find - // a way to duplicate lambda functions (which features use) - // so for now I'm not sure what to do. - //implementation 'io.github.kostaskougios:cloning:1.10.3' - // - //implementation ('com.esotericsoftware:kryo:5.1.1') { - // exclude group: "org.objenesis" - //} - //implementation 'org.objenesis:objenesis:3.2' - - + // these were added to hopefully allow for cloning + // configuredFeatures to allow for safe + // multi threaded feature generation. Sadly I couldn't find + // a way to duplicate lambda functions (which features use) + // so for now I'm not sure what to do. + //implementation 'io.github.kostaskougios:cloning:1.10.3' + // + //implementation ('com.esotericsoftware:kryo:5.1.1') { + // exclude group: "org.objenesis" + //} + //implementation 'org.objenesis:objenesis:3.2' + + // You may put jars on which you depend on in ./libs or you may define them like so.. // compile "some.group:artifact:version:classifier" // compile "some.group:artifact:version" @@ -190,19 +188,19 @@ dependencies { jar { manifest { attributes([ - "Specification-Title": "Levels of Detail", - "Specification-Version": "1", // We are version 1 of ourselves - "Implementation-Title": project.name, - "Implementation-Version": "{version}", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), - "MixinConfigs": "lod.mixins.json", + "Specification-Title": "Level of Detail", + "Specification-Version": "1", // We are version 1 of ourselves + "Implementation-Title": project.name, + "Implementation-Version": "{version}", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + "MixinConfigs": "lod.mixins.json", ]) } } // Example configuration to allow publishing using the maven-publish task // This is the preferred method to reobfuscate your jar file -jar.finalizedBy('reobfJar') +jar.finalizedBy('reobfJar') // However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing //publish.dependsOn('reobfJar') @@ -222,3 +220,4 @@ publishing { mixin { add sourceSets.main, "lod.refmap.json" } + diff --git a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java index 4043062f1..1f4d652a3 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java @@ -333,7 +333,7 @@ public class LodQuadTree { /** * Nodes that can be generated in the approximated version - * A level is generated only if it has child and is higher than the target level + * A level is generated only if it has child and is higher than the target level and in the distance range * @param x * @param z * @param targetLevel @@ -352,10 +352,11 @@ public class LodQuadTree { int min = distances.stream().mapToInt(Integer::intValue).min().getAsInt(); int max = distances.stream().mapToInt(Integer::intValue).max().getAsInt(); List> nodeList = new ArrayList<>(); - if ( targetLevel > lodNodeData.level) { + if ( targetLevel > lodNodeData.level ) { return nodeList; } - if (min > maxDistance || max < minDistance){ + // + if ((min > maxDistance || max < minDistance) && !isCoordinateInLevel(x,z)){ return nodeList; } if(isNodeFull()) { @@ -435,6 +436,9 @@ public class LodQuadTree { return (lodNodeData != null); } + public boolean isCoordinateInLevel(int x, int z){ + return !(lodNodeData.startX > x || lodNodeData.startZ > z || lodNodeData.endX < x || lodNodeData.endZ < z); + } public String toString(){ String s = lodNodeData.toString(); return s; diff --git a/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java b/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java index c338a51f7..66ce3cd92 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java @@ -1,8 +1,10 @@ package com.seibel.lod.objects.quadTree; + import com.seibel.lod.util.BiomeColorsUtils; import kaptainwutax.biomeutils.biome.Biome; import kaptainwutax.biomeutils.source.OverworldBiomeSource; import kaptainwutax.mcutils.version.MCVersion; + import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; @@ -17,18 +19,22 @@ import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.io.File; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.Timer; + @SuppressWarnings("serial") public class QuadTreeImage extends JPanel { - private static final int PREF_W = 600; + private static final int PREF_W = 1024; private static final int PREF_H = PREF_W; private List drawables = new ArrayList<>(); @@ -66,22 +72,25 @@ public class QuadTreeImage extends JPanel { repaint(); } - private static void createAndShowGui( ) { - LodQuadTree lodQuadTree = new LodQuadTree(0,0); + private static void createAndShowGui() { + LodQuadTree lodQuadTree = new LodQuadTree(0, 0); + final QuadTreeImage quadTreeImage = new QuadTreeImage(); + + System.out.println(lodQuadTree.getLodNodeData().endX); int playerX = 150; int playerZ = 260; - OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 20); - for(int i = 0; i<9; i++){ - for(int j = 0; j<5; j++) { + List> listOfList = new ArrayList<>(); + OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 0); + for (int i = 0; i <= (9 - 2); i++) { + for (int j = 0; j < 1; j++) { int dist; if (i == 9) { - dist = 100; - }else{ - dist = 100; + dist = 500; + } else { + dist = 50; } - List> levelToGenerate = lodQuadTree.getLevelToGenerate(playerX, playerZ, (byte) (9-i), (int) dist * (9 - i), 0); - boolean bw = true; - //System.out.println(levelToGenerate); + List> levelToGenerate = lodQuadTree.getLevelToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist * (9 - i + 1), 0); + System.out.println(levelToGenerate); for (AbstractMap.SimpleEntry levelDist : levelToGenerate) { LodQuadTree level = levelDist.getKey(); Color color; @@ -89,44 +98,51 @@ public class QuadTreeImage extends JPanel { int startZ = level.getLodNodeData().startZ; int endX = level.getLodNodeData().endX; int endZ = level.getLodNodeData().endZ; + int centerX = level.getLodNodeData().centerX; + int centerZ = level.getLodNodeData().centerZ; int width = level.getLodNodeData().width; byte otherLevel = LodNodeData.BLOCK_LEVEL; int otherWidth = LodNodeData.BLOCK_WIDTH; - int posX = startX / otherWidth; - int posZ = startZ / otherWidth; - color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId()); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true); - posX = endX / otherWidth; - posZ = startZ / otherWidth; - color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId()); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true); + List posXs = new ArrayList<>(); + List posZs = new ArrayList<>(); + if(level.getLodNodeData().level == 0){ + posXs.add(startX / otherWidth); + posZs.add(startZ / otherWidth); + }else if(level.getLodNodeData().level == 2){ + posXs.add(startX / otherWidth); + posXs.add(endX / otherWidth); + posZs.add(startZ / otherWidth); + posZs.add(endZ / otherWidth); + }else{ + posXs.add(startX / otherWidth); + posXs.add((centerX / otherWidth)-1); + posXs.add(centerX / otherWidth); + posXs.add(endX / otherWidth); + posZs.add(startZ / otherWidth); + posZs.add((centerZ / otherWidth)-1); + posZs.add(centerZ / otherWidth); + posZs.add(endZ / otherWidth); + } - posX = startX / otherWidth; - posZ = endZ / otherWidth; - color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId()); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true); - - posX = endX / otherWidth; - posZ = endZ / otherWidth; - color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId()); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true); + for(Integer posXI : posXs){ + for(Integer posZI : posZs){ + int posX = posXI.intValue(); + int posZ = posZI.intValue(); + color = BiomeColorsUtils.getColorFromBiomeBlock(biomeSource.getBiome(posZ, 0, posX)); + //color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId()); + lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true); + } + } } } - } - Collection lodList = lodQuadTree.getNodeToRender(playerX,playerZ,(byte) 2,10000,0); - //lodList = lodQuadTree.getNodeList(false,false,true); - System.out.println(lodList); - final List myDrawables = new ArrayList<>(); - for(LodNodeData data : lodList) { - myDrawables.add(new MyDrawable(new Rectangle2D.Double(data.startX, data.startZ, data.width, data.width), - data.color, new BasicStroke(1))); - } + Collection lodList = lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 0, 10000, 0); - myDrawables.add(new MyDrawable(new Rectangle2D.Double(playerZ-10,playerX-10, 20, 20), - Color.yellow, new BasicStroke(1))); - final QuadTreeImage quadTreeImage = new QuadTreeImage(); + //lodList = lodQuadTree.getNodeList(false,false,false); + listOfList.add(lodList); + System.out.println(listOfList.size()); + } JFrame frame = new JFrame("DrawChit"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); @@ -134,11 +150,34 @@ public class QuadTreeImage extends JPanel { frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); + int timerDelay = 1000; + new Timer(timerDelay, new ActionListener() { + private int drawCount = 0; - for(int i=0; i= listOfList.size()) { + drawCount = 0; + quadTreeImage.clearAll(); + } else { + final List myDrawables = new ArrayList<>(); + int amp = 2; + Collection lodList = listOfList.get(drawCount); + for (LodNodeData data : lodList) { + myDrawables.add(new MyDrawable(new Rectangle2D.Double(data.startX * amp, data.startZ * amp, data.width * amp, data.width * amp), + data.color, new BasicStroke(1))); + } + myDrawables.add(new MyDrawable(new Rectangle2D.Double(playerZ * amp - 10, playerX * amp - 10, 20, 20), + Color.yellow, new BasicStroke(1))); + for (int k = 0; k < myDrawables.size(); k++) { + quadTreeImage.addMyDrawable(myDrawables.get(k)); + } + drawCount++; + } + } + }).start(); } + public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { diff --git a/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java b/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java index df5a584dc..ce7732818 100644 --- a/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java +++ b/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java @@ -1,7 +1,7 @@ package com.seibel.lod.util; import net.minecraft.block.Blocks; -import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.*; import java.awt.*; @@ -171,6 +171,124 @@ public class BiomeColorsUtils { return new Color(color); } + /** + * methods that gives the ChunkBase color of biomes + * @param biome to check + * @return color of the biome + */ + public static Color getColorFromBiomeBlock(kaptainwutax.biomeutils.biome.Biome biome){ + int color = 0; + switch(biome.getCategory()) { + case BEACH: + case DESERT: + color = Blocks.SAND.defaultMaterialColor().col; + break; + case EXTREME_HILLS: + color = Blocks.SNOW.defaultMaterialColor().col; + break; + case FOREST: + color = Blocks.OAK_LEAVES.defaultMaterialColor().col; + break; + case SAVANNA: + color = Blocks.ACACIA_LEAVES.defaultMaterialColor().col; + break; + case JUNGLE: + color = Blocks.JUNGLE_LEAVES.defaultMaterialColor().col; + break; + case TAIGA: + color = Blocks.SPRUCE_LEAVES.defaultMaterialColor().col; + break; + case MUSHROOM: + color = Blocks.MYCELIUM.defaultMaterialColor().col; + break; + case PLAINS: + color = Blocks.GRASS_BLOCK.defaultMaterialColor().col; + break; + case OCEAN: + case RIVER: + color = Blocks.WATER.defaultMaterialColor().col; + case SWAMP: + color = Blocks.LILY_PAD.defaultMaterialColor().col; + break; + case ICY: + color = Blocks.PACKED_ICE.defaultMaterialColor().col; + break; + case THE_END: + color = Blocks.END_STONE.defaultMaterialColor().col; + break; + case NETHER: + color = Blocks.NETHERRACK.defaultMaterialColor().col; + break; + case BADLANDS_PLATEAU: + case MESA: + color = Blocks.RED_SAND.defaultMaterialColor().col; + break; + case NONE: + default: + color = 0; + } + return new Color(color); + } + + /** + * methods that gives the ChunkBase color of biomes + * @param biome to check + * @return color of the biome + */ + public static Color getColorFromBiomeManual(kaptainwutax.biomeutils.biome.Biome biome){ + Color color; + switch(biome.getCategory()) { + case BEACH: + case DESERT: + color = new Color(); + break; + case EXTREME_HILLS: + color = Blocks.SNOW.defaultMaterialColor().col; + break; + case FOREST: + color = Blocks.OAK_LEAVES.defaultMaterialColor().col; + break; + case SAVANNA: + color = Blocks.ACACIA_LEAVES.defaultMaterialColor().col; + break; + case JUNGLE: + color = Blocks.JUNGLE_LEAVES.defaultMaterialColor().col; + break; + case TAIGA: + color = Blocks.SPRUCE_LEAVES.defaultMaterialColor().col; + break; + case MUSHROOM: + color = Blocks.MYCELIUM.defaultMaterialColor().col; + break; + case PLAINS: + color = Blocks.GRASS_BLOCK.defaultMaterialColor().col; + break; + case OCEAN: + case RIVER: + color = Blocks.WATER.defaultMaterialColor().col; + case SWAMP: + color = Blocks.LILY_PAD.defaultMaterialColor().col; + break; + case ICY: + color = Blocks.PACKED_ICE.defaultMaterialColor().col; + break; + case THE_END: + color = Blocks.END_STONE.defaultMaterialColor().col; + break; + case NETHER: + color = Blocks.NETHERRACK.defaultMaterialColor().col; + break; + case BADLANDS_PLATEAU: + case MESA: + color = Blocks.RED_SAND.defaultMaterialColor().col; + break; + case NONE: + default: + color = 0; + } + return color; + } + /** * methods that gives the ChunkBase color of biomes * @param biomeId id of the biome