Skip to content

Commit 9dca192

Browse files
authored
Atlas support and (resource)pack improvements (#720)
* Tidy up (resource)-pack code a bit more, add atlas support and add more extensibillity * Just make bluemap scan the entire textures folder, its fast and improves compatibility * Apply spotless fixes * Add a way for extending ResourcePack#collectUsedTextureKeys() * Apply spotless again * Fix put not properly replacing already present paths
1 parent 4586182 commit 9dca192

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1340
-367
lines changed

common/src/main/java/de/bluecolored/bluemap/common/rendermanager/RenderManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ public class WorkerThread extends Thread {
354354

355355
private WorkerThread() {
356356
this.id = RenderManager.this.nextWorkerThreadIndex.getAndIncrement();
357-
this.setName("RenderManager-" + RenderManager.this.id + "-" + this.id);
357+
this.setName("BlueMap-RenderThread-" + RenderManager.this.id + "-" + this.id);
358358
}
359359

360360
@Override

core/src/main/java/de/bluecolored/bluemap/core/map/BmMap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public BmMap(String id, String name, World world, MapStorage storage, ResourcePa
101101

102102
Logger.global.logDebug("Loading textures for map '" + id + "'");
103103
this.textureGallery = loadTextureGallery();
104-
this.textureGallery.put(resourcePack);
104+
this.textureGallery.put(resourcePack.getTextures());
105105
saveTextureGallery();
106106

107107
this.hiresModelManager = new HiresModelManager(
@@ -197,7 +197,7 @@ private void saveTextureGallery() {
197197

198198
public synchronized void resetTextureGallery() {
199199
this.textureGallery.clear();
200-
this.textureGallery.put(this.resourcePack);
200+
this.textureGallery.put(this.resourcePack.getTextures());
201201
}
202202

203203
private void saveMapSettings() {

core/src/main/java/de/bluecolored/bluemap/core/map/TextureGallery.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.google.gson.*;
2828
import de.bluecolored.bluemap.core.resources.ResourcePath;
2929
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
30+
import de.bluecolored.bluemap.core.resources.pack.ResourcePool;
3031
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
3132
import de.bluecolored.bluemap.core.resources.pack.resourcepack.texture.Texture;
3233
import de.bluecolored.bluemap.core.util.Key;
@@ -74,13 +75,13 @@ public synchronized void put(ResourcePath<Texture> textureResourcePath) {
7475
});
7576
}
7677

77-
public synchronized void put(ResourcePack resourcePack) {
78+
public synchronized void put(ResourcePool<Texture> texturePool) {
7879
this.put(ResourcePack.MISSING_TEXTURE); // put this first
79-
resourcePack.getTextures().keySet()
80+
texturePool.paths()
8081
.stream()
8182
.sorted(Comparator
8283
.comparing((ResourcePath<Texture> r) -> {
83-
Texture texture = r.getResource(resourcePack::getTexture);
84+
Texture texture = r.getResource(texturePool::get);
8485
return texture != null && texture.getColorPremultiplied().a < 1f;
8586
})
8687
.thenComparing(Key::getFormatted))
@@ -114,7 +115,7 @@ public static TextureGallery readTexturesFile(InputStream in) throws IOException
114115
for (int ordinal = 0; ordinal < textures.length; ordinal++) {
115116
Texture texture = textures[ordinal];
116117
if (texture != null) {
117-
gallery.textureMappings.put(texture.getResourcePath(), new TextureMapping(ordinal, texture));
118+
gallery.textureMappings.put(texture.getKey(), new TextureMapping(ordinal, texture));
118119
}
119120
}
120121
} catch (JsonParseException ex) {

core/src/main/java/de/bluecolored/bluemap/core/map/hires/HiresModelRenderer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import de.bluecolored.bluemap.core.world.World;
3838
import de.bluecolored.bluemap.core.world.block.Block;
3939
import de.bluecolored.bluemap.core.world.block.BlockNeighborhood;
40+
import lombok.extern.flogger.Flogger;
4041

4142
public class HiresModelRenderer {
4243

core/src/main/java/de/bluecolored/bluemap/core/map/hires/block/BlockStateModelRenderer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import de.bluecolored.bluemap.core.map.hires.TileModelView;
3232
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
3333
import de.bluecolored.bluemap.core.resources.pack.resourcepack.blockstate.Variant;
34+
import de.bluecolored.bluemap.core.util.Key;
3435
import de.bluecolored.bluemap.core.util.math.Color;
3536
import de.bluecolored.bluemap.core.world.BlockState;
3637
import de.bluecolored.bluemap.core.world.block.BlockNeighborhood;
@@ -81,7 +82,7 @@ public void render(BlockNeighborhood block, BlockState blockState, TileModelView
8182
private void renderModel(BlockNeighborhood block, BlockState blockState, TileModelView tileModel, Color blockColor) {
8283
int modelStart = tileModel.getStart();
8384

84-
var stateResource = resourcePack.getBlockState(blockState);
85+
var stateResource = resourcePack.getBlockStates().get(blockState.getId());
8586
if (stateResource == null) return;
8687

8788
float blockColorOpacity = 0;
@@ -109,6 +110,6 @@ private void renderModel(BlockNeighborhood block, BlockState blockState, TileMod
109110
tileModel.initialize(modelStart);
110111
}
111112

112-
private final static BlockState WATERLOGGED_BLOCKSTATE = new BlockState("minecraft:water");
113+
private final static BlockState WATERLOGGED_BLOCKSTATE = new BlockState(Key.minecraft("water"));
113114

114115
}

core/src/main/java/de/bluecolored/bluemap/core/map/hires/block/LiquidModelRenderer.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@
3333
import de.bluecolored.bluemap.core.resources.BlockColorCalculatorFactory;
3434
import de.bluecolored.bluemap.core.resources.ResourcePath;
3535
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
36+
import de.bluecolored.bluemap.core.resources.pack.resourcepack.blockstate.Variant;
3637
import de.bluecolored.bluemap.core.resources.pack.resourcepack.model.Model;
3738
import de.bluecolored.bluemap.core.resources.pack.resourcepack.model.TextureVariable;
38-
import de.bluecolored.bluemap.core.resources.pack.resourcepack.blockstate.Variant;
3939
import de.bluecolored.bluemap.core.resources.pack.resourcepack.texture.Texture;
4040
import de.bluecolored.bluemap.core.util.Direction;
4141
import de.bluecolored.bluemap.core.util.math.Color;
@@ -46,6 +46,8 @@
4646
import de.bluecolored.bluemap.core.world.block.BlockNeighborhood;
4747
import de.bluecolored.bluemap.core.world.block.ExtendedBlock;
4848

49+
import java.util.function.Function;
50+
4951
/**
5052
* A model builder for all liquid blocks
5153
*/
@@ -58,7 +60,8 @@ public class LiquidModelRenderer implements BlockRenderer {
5860
.scale(0.5f, 0.5f, 1)
5961
.translate(0.5f, 0.5f);
6062

61-
private final ResourcePack resourcePack;
63+
private final Function<ResourcePath<Model>, Model> modelProvider;
64+
private final Function<ResourcePath<Texture>, Texture> textureProvider;
6265
private final TextureGallery textureGallery;
6366
private final RenderSettings renderSettings;
6467
private final BlockColorCalculatorFactory.BlockColorCalculator blockColorCalculator;
@@ -74,7 +77,8 @@ public class LiquidModelRenderer implements BlockRenderer {
7477
private Color blockColor;
7578

7679
public LiquidModelRenderer(ResourcePack resourcePack, TextureGallery textureGallery, RenderSettings renderSettings) {
77-
this.resourcePack = resourcePack;
80+
this.modelProvider = resourcePack.getModels()::get;
81+
this.textureProvider = resourcePack.getTextures()::get;
7882
this.textureGallery = textureGallery;
7983
this.renderSettings = renderSettings;
8084
this.blockColorCalculator = resourcePack.getColorCalculatorFactory().createCalculator();
@@ -98,7 +102,7 @@ public void render(BlockNeighborhood block, Variant variant, TileModelView block
98102
this.blockState = block.getBlockState();
99103
this.isWaterlogged = blockState.isWaterlogged() || block.getProperties().isAlwaysWaterlogged();
100104
this.isWaterLike = blockState.isWater() || isWaterlogged;
101-
this.modelResource = variant.getModel().getResource(resourcePack::getModel);
105+
this.modelResource = variant.getModel().getResource(modelProvider);
102106
this.blockModel = blockModel;
103107
this.blockColor = color;
104108

@@ -162,7 +166,7 @@ private void build() {
162166

163167
//calculate mapcolor
164168
if (upFaceRendered) {
165-
Texture stillTexture = stillTexturePath == null ? null : stillTexturePath.getResource(resourcePack::getTexture);
169+
Texture stillTexture = stillTexturePath == null ? null : stillTexturePath.getResource(textureProvider);
166170

167171
if (stillTexture != null) {
168172
blockColor.set(stillTexture.getColorPremultiplied());
@@ -224,14 +228,13 @@ private boolean isLiquidBlockingBlock(BlockState blockState){
224228
return !blockState.isAir();
225229
}
226230

227-
@SuppressWarnings("StringEquality")
228231
private boolean isSameLiquid(ExtendedBlock block){
229232
BlockState blockState = block.getBlockState();
230233

231234
if (this.isWaterlogged)
232235
return blockState.isWater() || blockState.isWaterlogged() || block.getProperties().isAlwaysWaterlogged();
233236

234-
if (blockState.getFormatted() == this.blockState.getFormatted())
237+
if (blockState.getId().equals(this.blockState.getId()))
235238
return true;
236239

237240
return this.isWaterLike && (blockState.isWaterlogged() || block.getProperties().isAlwaysWaterlogged());

core/src/main/java/de/bluecolored/bluemap/core/map/hires/block/ResourceModelRenderer.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,17 @@
5050
import de.bluecolored.bluemap.core.world.block.BlockNeighborhood;
5151
import de.bluecolored.bluemap.core.world.block.ExtendedBlock;
5252

53+
import java.util.function.Function;
54+
5355
/**
5456
* This model builder creates a BlockStateModel using the information from parsed resource-pack json files.
5557
*/
5658
@SuppressWarnings("DuplicatedCode")
5759
public class ResourceModelRenderer implements BlockRenderer {
5860
private static final float BLOCK_SCALE = 1f / 16f;
5961

60-
private final ResourcePack resourcePack;
62+
private final Function<ResourcePath<Model>, Model> modelProvider;
63+
private final Function<ResourcePath<Texture>, Texture> textureProvider;
6164
private final TextureGallery textureGallery;
6265
private final RenderSettings renderSettings;
6366
private final BlockColorCalculatorFactory.BlockColorCalculator blockColorCalculator;
@@ -76,7 +79,8 @@ public class ResourceModelRenderer implements BlockRenderer {
7679
private float blockColorOpacity;
7780

7881
public ResourceModelRenderer(ResourcePack resourcePack, TextureGallery textureGallery, RenderSettings renderSettings) {
79-
this.resourcePack = resourcePack;
82+
this.modelProvider = resourcePack.getModels()::get;
83+
this.textureProvider = resourcePack.getTextures()::get;
8084
this.textureGallery = textureGallery;
8185
this.renderSettings = renderSettings;
8286
this.blockColorCalculator = resourcePack.getColorCalculatorFactory().createCalculator();
@@ -91,7 +95,7 @@ public void render(BlockNeighborhood block, Variant variant, TileModelView block
9195
this.blockColor = color;
9296
this.blockColorOpacity = 0f;
9397
this.variant = variant;
94-
this.modelResource = variant.getModel().getResource(resourcePack::getModel);
98+
this.modelResource = variant.getModel().getResource(modelProvider);
9599

96100
if (this.modelResource == null) return;
97101

@@ -324,7 +328,7 @@ private void createElementFace(Element element, Direction faceDir, VectorM3f c0,
324328
//if is top face set model-color
325329
float a = faceRotationVector.y;
326330
if (a > 0.01 && texturePath != null) {
327-
Texture texture = texturePath.getResource(resourcePack::getTexture);
331+
Texture texture = texturePath.getResource(textureProvider);
328332
if (texture != null) {
329333
mapColor.set(texture.getColorPremultiplied());
330334
if (tintColor.a >= 0) {

core/src/main/java/de/bluecolored/bluemap/core/map/hires/entity/EntityModelRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public EntityModelRenderer(ResourcePack resourcePack, TextureGallery textureGall
4747
}
4848

4949
public void render(Entity entity, BlockNeighborhood block, TileModelView tileModel) {
50-
EntityState stateResource = resourcePack.getEntityState(entity.getId());
50+
EntityState stateResource = resourcePack.getEntityStates().get(entity.getId());
5151
if (stateResource == null) return;
5252

5353
Part[] parts = stateResource.getParts();

core/src/main/java/de/bluecolored/bluemap/core/map/hires/entity/ResourceModelRenderer.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,18 @@
4646
import de.bluecolored.bluemap.core.world.LightData;
4747
import de.bluecolored.bluemap.core.world.block.BlockNeighborhood;
4848

49+
import java.util.function.Function;
50+
4951
/**
5052
* This model builder creates a BlockStateModel using the information from parsed resource-pack json files.
5153
*/
5254
@SuppressWarnings("DuplicatedCode")
5355
public class ResourceModelRenderer implements EntityRenderer {
5456
private static final float SCALE = 1f / 16f;
5557

56-
final ResourcePack resourcePack;
57-
final TextureGallery textureGallery;
58-
final RenderSettings renderSettings;
58+
private final Function<ResourcePath<Model>, Model> modelProvider;
59+
private final TextureGallery textureGallery;
60+
private final RenderSettings renderSettings;
5961

6062
private final VectorM3f[] corners = new VectorM3f[8];
6163
private final VectorM2f[] rawUvs = new VectorM2f[4];
@@ -69,7 +71,7 @@ public class ResourceModelRenderer implements EntityRenderer {
6971

7072
@SuppressWarnings("unused")
7173
public ResourceModelRenderer(ResourcePack resourcePack, TextureGallery textureGallery, RenderSettings renderSettings) {
72-
this.resourcePack = resourcePack;
74+
this.modelProvider = resourcePack.getModels()::get;
7375
this.textureGallery = textureGallery;
7476
this.renderSettings = renderSettings;
7577

@@ -82,7 +84,7 @@ public void render(Entity entity, BlockNeighborhood block, Part part, TileModelV
8284
render(
8385
entity,
8486
block,
85-
part.getModel().getResource(resourcePack::getModel),
87+
part.getModel().getResource(modelProvider),
8688
TintColorProvider.NO_TINT,
8789
tileModel
8890
);

core/src/main/java/de/bluecolored/bluemap/core/map/renderstate/CellStorage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
import de.bluecolored.bluemap.core.storage.GridStorage;
3030
import de.bluecolored.bluemap.core.storage.compression.CompressedInputStream;
3131
import de.bluecolored.bluemap.core.util.Key;
32-
import de.bluecolored.bluemap.core.util.PalettedArrayAdapter;
33-
import de.bluecolored.bluemap.core.util.RegistryAdapter;
32+
import de.bluecolored.bluemap.core.util.nbt.PalettedArrayAdapter;
33+
import de.bluecolored.bluemap.core.util.nbt.RegistryAdapter;
3434
import de.bluecolored.bluenbt.BlueNBT;
3535
import de.bluecolored.bluenbt.TypeToken;
3636
import lombok.Getter;

0 commit comments

Comments
 (0)