mirror of
https://github.com/BlueMap-Minecraft/BlueMap.git
synced 2025-01-27 18:51:21 +01:00
Fix lighting bug and two bugs with resource-loading
This commit is contained in:
parent
69e0e51fed
commit
5421f956d2
@ -98,7 +98,7 @@ public LightData getLightData(Vector3i pos) {
|
|||||||
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
||||||
|
|
||||||
Section section = this.sections[sectionY];
|
Section section = this.sections[sectionY];
|
||||||
if (section == null) return LightData.FULL;
|
if (section == null) return LightData.SKY;
|
||||||
|
|
||||||
return section.getLightData(pos);
|
return section.getLightData(pos);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ public LightData getLightData(Vector3i pos) {
|
|||||||
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
||||||
|
|
||||||
Section section = this.sections[sectionY];
|
Section section = this.sections[sectionY];
|
||||||
if (section == null) return LightData.FULL;
|
if (section == null) return LightData.SKY;
|
||||||
|
|
||||||
return section.getLightData(pos);
|
return section.getLightData(pos);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ public LightData getLightData(Vector3i pos) {
|
|||||||
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
||||||
|
|
||||||
Section section = this.sections[sectionY];
|
Section section = this.sections[sectionY];
|
||||||
if (section == null) return LightData.FULL;
|
if (section == null) return LightData.SKY;
|
||||||
|
|
||||||
return section.getLightData(pos);
|
return section.getLightData(pos);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ public Block getBlock(Vector3i pos) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pos.getY() > getMaxY()) {
|
if (pos.getY() > getMaxY()) {
|
||||||
return new Block(this, BlockState.AIR, LightData.FULL, Biome.DEFAULT, BlockProperties.TRANSPARENT, pos);
|
return new Block(this, BlockState.AIR, LightData.SKY, Biome.DEFAULT, BlockProperties.TRANSPARENT, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.resourcepack.BlockStateResource.Builder;
|
import de.bluecolored.bluemap.core.resourcepack.BlockStateResource.Builder;
|
||||||
import de.bluecolored.bluemap.core.resourcepack.fileaccess.BluemapAssetOverrideFileAccess;
|
import de.bluecolored.bluemap.core.resourcepack.fileaccess.BluemapAssetOverrideFileAccess;
|
||||||
|
import de.bluecolored.bluemap.core.resourcepack.fileaccess.CaseInsensitiveFileAccess;
|
||||||
import de.bluecolored.bluemap.core.resourcepack.fileaccess.CombinedFileAccess;
|
import de.bluecolored.bluemap.core.resourcepack.fileaccess.CombinedFileAccess;
|
||||||
import de.bluecolored.bluemap.core.resourcepack.fileaccess.FileAccess;
|
import de.bluecolored.bluemap.core.resourcepack.fileaccess.FileAccess;
|
||||||
import de.bluecolored.bluemap.core.world.BlockState;
|
import de.bluecolored.bluemap.core.world.BlockState;
|
||||||
@ -140,7 +141,7 @@ public void load(File... sources) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FileAccess sourcesAccess = new BluemapAssetOverrideFileAccess(combinedSources);
|
FileAccess sourcesAccess = new CaseInsensitiveFileAccess(new BluemapAssetOverrideFileAccess(combinedSources));
|
||||||
|
|
||||||
textures.reloadAllTextures(sourcesAccess);
|
textures.reloadAllTextures(sourcesAccess);
|
||||||
|
|
||||||
|
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of BlueMap, licensed under the MIT License (MIT).
|
||||||
|
*
|
||||||
|
* Copyright (c) Blue (Lukas Rieger) <https://bluecolored.de>
|
||||||
|
* Copyright (c) contributors
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
package de.bluecolored.bluemap.core.resourcepack.fileaccess;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This {@link FileAccess} maps its parent {@link FileAccess} to first look in assets/[namespace]/bluemap/... instead of assets/[namespace]/...
|
||||||
|
*/
|
||||||
|
public class CaseInsensitiveFileAccess implements FileAccess {
|
||||||
|
|
||||||
|
public FileAccess parent;
|
||||||
|
|
||||||
|
public CaseInsensitiveFileAccess(FileAccess parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputStream readFile(String path) throws FileNotFoundException, IOException {
|
||||||
|
try {
|
||||||
|
return parent.readFile(path);
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
try {
|
||||||
|
return parent.readFile(path.toLowerCase());
|
||||||
|
} catch (FileNotFoundException ex2) {
|
||||||
|
path = correctPathCase(path);
|
||||||
|
return parent.readFile(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String correctPathCase(String path) throws FileNotFoundException, IOException {
|
||||||
|
path = FileAccess.normalize(path);
|
||||||
|
String[] pathParts = path.split("/");
|
||||||
|
|
||||||
|
String correctPath = "";
|
||||||
|
for (int i = 0; i < pathParts.length; i++) {
|
||||||
|
String part = correctPath + pathParts[i];
|
||||||
|
|
||||||
|
boolean found = false;
|
||||||
|
for(String folder : listFolders(correctPath)) {
|
||||||
|
if (!folder.equalsIgnoreCase(part)) continue;
|
||||||
|
|
||||||
|
part = folder;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found && i == pathParts.length - 1) {
|
||||||
|
for(String folder : listFiles(correctPath, false)) {
|
||||||
|
if (!folder.equalsIgnoreCase(part)) continue;
|
||||||
|
|
||||||
|
part = folder;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found) throw new FileNotFoundException();
|
||||||
|
|
||||||
|
correctPath = part + "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
correctPath = FileAccess.normalize(correctPath);
|
||||||
|
return correctPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> listFiles(String path, boolean recursive) {
|
||||||
|
return parent.listFiles(path, recursive);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> listFolders(String path) {
|
||||||
|
return parent.listFolders(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
parent.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -31,6 +31,7 @@
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipException;
|
import java.util.zip.ZipException;
|
||||||
import java.util.zip.ZipFile;
|
import java.util.zip.ZipFile;
|
||||||
@ -85,14 +86,20 @@ public Collection<String> listFiles(String path, boolean recursive) {
|
|||||||
public Collection<String> listFolders(String path) {
|
public Collection<String> listFolders(String path) {
|
||||||
path = normalizeFolderPath(path);
|
path = normalizeFolderPath(path);
|
||||||
|
|
||||||
Collection<String> folders = new ArrayList<String>();
|
Collection<String> folders = new HashSet<String>();
|
||||||
for (Enumeration<? extends ZipEntry> entries = file.entries(); entries.hasMoreElements();) {
|
for (Enumeration<? extends ZipEntry> entries = file.entries(); entries.hasMoreElements();) {
|
||||||
ZipEntry entry = entries.nextElement();
|
ZipEntry entry = entries.nextElement();
|
||||||
|
|
||||||
if (!entry.isDirectory()) continue;
|
|
||||||
|
|
||||||
String file = entry.getName();
|
String file = entry.getName();
|
||||||
file = file.substring(0, file.length() - 1); //strip last /
|
if (!entry.isDirectory()) {
|
||||||
|
int nameSplit = file.lastIndexOf('/');
|
||||||
|
if (nameSplit == -1) continue;
|
||||||
|
file = file.substring(0, nameSplit);
|
||||||
|
}
|
||||||
|
file = normalizeFolderPath(file);
|
||||||
|
|
||||||
|
//strip last /
|
||||||
|
file = file.substring(0, file.length() - 1);
|
||||||
|
|
||||||
int nameSplit = file.lastIndexOf('/');
|
int nameSplit = file.lastIndexOf('/');
|
||||||
String filePath = "/";
|
String filePath = "/";
|
||||||
@ -101,7 +108,17 @@ public Collection<String> listFolders(String path) {
|
|||||||
}
|
}
|
||||||
filePath = normalizeFolderPath(filePath);
|
filePath = normalizeFolderPath(filePath);
|
||||||
|
|
||||||
if (!path.equals(filePath)) continue;
|
if (!filePath.startsWith(path)) continue;
|
||||||
|
|
||||||
|
int subFolderMark = file.indexOf('/', path.length());
|
||||||
|
if (subFolderMark != -1) {
|
||||||
|
file = file.substring(0, subFolderMark);
|
||||||
|
}
|
||||||
|
|
||||||
|
file = normalizeFolderPath(file);
|
||||||
|
|
||||||
|
//strip last /
|
||||||
|
file = file.substring(0, file.length() - 1);
|
||||||
|
|
||||||
folders.add(file);
|
folders.add(file);
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
public class LightData {
|
public class LightData {
|
||||||
|
|
||||||
public static final LightData ZERO = new LightData(0, 0);
|
public static final LightData ZERO = new LightData(0, 0);
|
||||||
public static final LightData FULL = new LightData(15, 15);
|
public static final LightData SKY = new LightData(15, 0);
|
||||||
|
public static final LightData FULL = new LightData(15, 15);
|
||||||
|
|
||||||
private final int skyLight, blockLight;
|
private final int skyLight, blockLight;
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ private Block createAirBlock(Vector3i pos) {
|
|||||||
return new Block(
|
return new Block(
|
||||||
this,
|
this,
|
||||||
BlockState.AIR,
|
BlockState.AIR,
|
||||||
pos.getY() < this.min.getY() ? LightData.ZERO : LightData.FULL,
|
pos.getY() < this.min.getY() ? LightData.ZERO : LightData.SKY,
|
||||||
Biome.DEFAULT,
|
Biome.DEFAULT,
|
||||||
BlockProperties.TRANSPARENT,
|
BlockProperties.TRANSPARENT,
|
||||||
pos
|
pos
|
||||||
|
Loading…
Reference in New Issue
Block a user