Map works correctly

This commit is contained in:
Morippi
2021-07-07 20:22:05 +02:00
parent c6a96ae710
commit 86e4ab7e83
3 changed files with 626 additions and 53 deletions
@@ -1,5 +1,8 @@
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;
@@ -65,44 +68,42 @@ public class QuadTreeImage extends JPanel {
private static void createAndShowGui( ) {
LodQuadTree lodQuadTree = new LodQuadTree(0,0);
OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 0);
for(int i = 0; i<9; i++){
for(int j = 0; j<8; j++) {
List<AbstractMap.SimpleEntry<LodQuadTree, Integer>> levelToGenerate = lodQuadTree.getLevelToGenerate(150, 260, (byte) (9-i), (int) 50 * (9 - i), 0);
boolean bw = true;
//System.out.println(levelToGenerate);
for (AbstractMap.SimpleEntry<LodQuadTree, Integer> levelDist : levelToGenerate) {
LodQuadTree level = levelDist.getKey();
Color color;
int startX = level.getLodNodeData().startX;
int startZ = level.getLodNodeData().startZ;
int endX = level.getLodNodeData().endX;
int endZ = level.getLodNodeData().endZ;
int width = level.getLodNodeData().width;
byte otherLevel = LodNodeData.BLOCK_LEVEL;
int otherWidth = LodNodeData.BLOCK_WIDTH;
int posX = 2 * startX / otherWidth;
int posZ = 2 * startZ / otherWidth;
color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId());
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true);
for(int i = 0; i<6; i++){
List<AbstractMap.SimpleEntry<LodQuadTree, Integer>> levelToGenerate= lodQuadTree.getLevelToGenerate(0,0,(byte) (7),350,0);
boolean bw= true;
System.out.println(levelToGenerate);
for(AbstractMap.SimpleEntry<LodQuadTree, Integer> levelDist : levelToGenerate){
LodQuadTree level = levelDist.getKey();
Color color ;
if(bw){
color = Color.red;
bw = false;
}else{
color = Color.blue;
bw = true;
posX = 2 * endX / otherWidth;
posZ = 2 * startZ / otherWidth;
color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId());
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true);
posX = 2 * startX / otherWidth;
posZ = 2 * endZ / otherWidth;
color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId());
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true);
posX = 2 * endX / otherWidth;
posZ = 2 * endZ / otherWidth;
color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ,0,posX).getId());
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true);
}
int startX = level.getLodNodeData().startX;
int startZ = level.getLodNodeData().startZ;
int endX = level.getLodNodeData().endX;
int endZ = level.getLodNodeData().endZ;
int width = level.getLodNodeData().width;
byte otherLevel = LodNodeData.BLOCK_LEVEL;
int otherWidth = LodNodeData.BLOCK_WIDTH;
int posZ = 2*startX/otherWidth;
int posX = 2*startZ/otherWidth;
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true);
posZ = 2*endX/otherWidth;
posX = 2*startZ/otherWidth;
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true);
posZ = 2*startX/otherWidth;
posX = 2*endZ/otherWidth;
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true);
posZ = 2*endX/otherWidth;
posX = 2*endZ/otherWidth;
lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true);
}
}
System.out.println(lodQuadTree.getNodeList(false,false,false));
@@ -124,21 +125,9 @@ public class QuadTreeImage extends JPanel {
frame.setLocationByPlatform(true);
frame.setVisible(true);
int timerDelay = 1;
new Timer(timerDelay, new ActionListener() {
private int drawCount = 0;
@Override
public void actionPerformed(ActionEvent e) {
if (drawCount >= myDrawables.size()) {
drawCount = 0;
quadTreeImage.clearAll();
} else {
quadTreeImage.addMyDrawable(myDrawables.get(drawCount));
drawCount++;
}
}
}).start();
for(int i=0; i<myDrawables.size(); i++){
quadTreeImage.addMyDrawable(myDrawables.get(i));
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@@ -177,7 +166,7 @@ class MyDrawable {
Stroke oldStroke = g2.getStroke();
g2.setColor(color);
g2.setStroke(stroke);
g2.fill(shape);
g2.draw(shape);
g2.setColor(oldColor);
@@ -0,0 +1,581 @@
package com.seibel.lod.util;
import net.minecraft.block.Blocks;
import net.minecraft.world.biome.Biome;
import java.awt.*;
public class BiomeColorsUtils {
//public static OverworldBiomeSource overworldBiomeSource = new OverworldBiomeSource(MCVersion.v1_16_4, 64971835648254);
public static Color getColorFromBiome(Biome biome,double x, double y){
int color = 0;
switch(biome.getBiomeCategory()) {
case BEACH:
case DESERT:
color = Blocks.SAND.defaultMaterialColor().col;
break;
case EXTREME_HILLS:
color = Blocks.SNOW.defaultMaterialColor().col;
break;
case NONE:
break;
case FOREST:
case JUNGLE:
case TAIGA:
color = biome.getFoliageColor();
break;
case MUSHROOM:
color = Blocks.MYCELIUM.defaultMaterialColor().col;
break;
case PLAINS:
case SAVANNA:
color = biome.getGrassColor(x,y);
break;
case OCEAN:
case RIVER:
case SWAMP:
color = biome.getWaterColor();
break;
case ICY:
color = Blocks.PACKED_ICE.defaultMaterialColor().col;
break;
case THEEND:
color = Blocks.END_STONE.defaultMaterialColor().col;
break;
case NETHER:
color = Blocks.NETHERRACK.defaultMaterialColor().col;
break;
case MESA:
color = Blocks.RED_SAND.defaultMaterialColor().col;
break;
default:
color = 0;
}
return new Color(color);
}
public static Color getColorFromBiome(Biome biome){
int color = 0;
switch(biome.getBiomeCategory()) {
case BEACH:
case DESERT:
color = Blocks.SAND.defaultMaterialColor().col;
break;
case EXTREME_HILLS:
color = Blocks.SNOW.defaultMaterialColor().col;
break;
case FOREST:
case SAVANNA:
case JUNGLE:
case TAIGA:
color = biome.getFoliageColor();
break;
case MUSHROOM:
color = Blocks.MYCELIUM.defaultMaterialColor().col;
break;
case PLAINS:
color = Blocks.GRASS_BLOCK.defaultMaterialColor().col;
break;
case OCEAN:
case RIVER:
case SWAMP:
color = biome.getWaterColor();
break;
case ICY:
color = Blocks.PACKED_ICE.defaultMaterialColor().col;
break;
case THEEND:
color = Blocks.END_STONE.defaultMaterialColor().col;
break;
case NETHER:
color = Blocks.NETHERRACK.defaultMaterialColor().col;
break;
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 getColorFromIdRealistic(kaptainwutax.biomeutils.biome.Biome biome){
Biome.Builder builder = new Biome.Builder();
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:
builder.biomeCategory(Biome.Category.FOREST);
color = builder.build().getFoliageColor();
break;
case SAVANNA:
builder.biomeCategory(Biome.Category.SAVANNA);
color = builder.build().getFoliageColor();
break;
case JUNGLE:
builder.biomeCategory(Biome.Category.JUNGLE);
color = builder.build().getFoliageColor();
break;
case TAIGA:
builder.biomeCategory(Biome.Category.TAIGA);
color = builder.build().getFoliageColor();
break;
case MUSHROOM:
color = Blocks.MYCELIUM.defaultMaterialColor().col;
break;
case PLAINS:
color = Blocks.GRASS_BLOCK.defaultMaterialColor().col;
break;
case OCEAN:
builder.biomeCategory(Biome.Category.OCEAN);
color = builder.build().getWaterColor();
break;
case RIVER:
builder.biomeCategory(Biome.Category.RIVER);
color = builder.build().getWaterColor();
break;
case SWAMP:
builder.biomeCategory(Biome.Category.SWAMP);
color = builder.build().getWaterColor();
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 biomeId id of the biome
* @return color of the biome
*/
public static Color getColorFromIdCB(int biomeId){
int red=0;
int green=0;
int blue=0;
switch(biomeId) {
case 0:
red = 0;
green = 0;
blue = 112;
break;
case 1:
red = 141;
green = 179;
blue = 96;
break;
case 2:
red = 250;
green = 148;
blue = 24;
break;
case 3:
red = 96;
green = 96;
blue = 96;
break;
case 4:
red = 5;
green = 102;
blue = 33;
break;
case 5:
red = 11;
green = 2;
blue = 89;
break;
case 6:
red = 7;
green = 249;
blue = 178;
break;
case 7:
red = 0;
green = 0;
blue = 255;
break;
case 8:
red = 255;
green = 0;
blue = 0;
break;
case 9:
red = 128;
green = 128;
blue = 255;
break;
case 10:
red = 112;
green = 112;
blue = 214;
break;
case 11:
red = 160;
green = 160;
blue = 255;
break;
case 12:
red = 255;
green = 255;
blue = 255;
break;
case 13:
red = 160;
green = 160;
blue = 160;
break;
case 14:
red = 255;
green = 0;
blue = 255;
break;
case 15:
red = 160;
green = 0;
blue = 255;
break;
case 16:
red = 250;
green = 222;
blue = 85;
break;
case 17:
red = 210;
green = 95;
blue = 18;
break;
case 18:
red = 34;
green = 85;
blue = 28;
break;
case 19:
red = 22;
green = 57;
blue = 51;
break;
case 20:
red = 114;
green = 120;
blue = 154;
break;
case 21:
red = 83;
green = 123;
blue = 9;
break;
case 22:
red = 44;
green = 66;
blue = 5;
break;
case 23:
red = 98;
green = 139;
blue = 23;
break;
case 24:
red = 0;
green = 0;
blue = 48;
break;
case 25:
red = 162;
green = 162;
blue = 132;
break;
case 26:
red = 250;
green = 240;
blue = 192;
break;
case 27:
red = 48;
green = 116;
blue = 68;
break;
case 28:
red = 31;
green = 5;
blue = 50;
break;
case 29:
red = 64;
green = 81;
blue = 26;
break;
case 30:
red = 49;
green = 85;
blue = 74;
break;
case 31:
red = 36;
green = 63;
blue = 54;
break;
case 32:
red = 89;
green = 102;
blue = 81;
break;
case 33:
red = 69;
green = 7;
blue = 62;
break;
case 34:
red = 80;
green = 112;
blue = 80;
break;
case 35:
red = 189;
green = 18;
blue = 95;
break;
case 36:
red = 167;
green = 157;
blue = 100;
break;
case 37:
red = 217;
green = 69;
blue = 21;
break;
case 38:
red = 17;
green = 151;
blue = 101;
break;
case 39:
red = 202;
green = 140;
blue = 101;
break;
case 40:
red = 128;
green = 128;
blue = 255;
break;
case 41:
red = 128;
green = 128;
blue = 255;
break;
case 42:
red = 128;
green = 128;
blue = 255;
break;
case 43:
red = 128;
green = 128;
blue = 255;
break;
case 44:
red = 0;
green = 0;
blue = 172;
break;
case 45:
red = 0;
green = 0;
blue = 144;
break;
case 46:
red = 32;
green = 32;
blue = 112;
break;
case 47:
red = 0;
green = 0;
blue = 80;
break;
case 48:
red = 0;
green = 0;
blue = 64;
break;
case 49:
red = 32;
green = 32;
blue = 56;
break;
case 50:
red = 64;
green = 64;
blue = 144;
break;
case 127:
red = 0;
green = 0;
blue = 0;
break;
case 129:
red = 181;
green = 219;
blue = 136;
break;
case 130:
red = 255;
green = 188;
blue = 64;
break;
case 131:
red = 136;
green = 136;
blue = 136;
break;
case 132:
red = 45;
green = 142;
blue = 73;
break;
case 133:
red = 51;
green = 142;
blue = 19;
break;
case 134:
red = 47;
green = 255;
blue = 18;
break;
case 140:
red = 180;
green = 20;
blue = 220;
break;
case 149:
red = 123;
green = 13;
blue = 49;
break;
case 151:
red = 138;
green = 179;
blue = 63;
break;
case 155:
red = 88;
green = 156;
blue = 108;
break;
case 156:
red = 71;
green = 15;
blue = 90;
break;
case 157:
red = 104;
green = 121;
blue = 66;
break;
case 158:
red = 89;
green = 125;
blue = 114;
break;
case 160:
red = 129;
green = 142;
blue = 121;
break;
case 161:
red = 109;
green = 119;
blue = 102;
break;
case 162:
red = 120;
green = 52;
blue = 120;
break;
case 163:
red = 229;
green = 218;
blue = 135;
break;
case 164:
red = 207;
green = 197;
blue = 140;
break;
case 165:
red = 255;
green = 109;
blue = 61;
break;
case 166:
red = 216;
green = 191;
blue = 141;
break;
case 167:
red = 242;
green = 180;
blue = 141;
break;
case 168:
red = 118;
green = 142;
blue = 20;
break;
case 169:
red = 59;
green = 71;
blue = 10;
break;
case 170:
red = 82;
green = 41;
blue = 33;
break;
case 171:
red = 221;
green = 8;
blue = 8;
break;
case 172:
red = 73;
green = 144;
blue = 123;
break;
default:
red = 255;
green = 0;
blue = 0;
}
return new Color(red, green, blue);
}
}