Merge branch 'master' into fix/heightmaps

This commit is contained in:
Lukas Rieger (Blue) 2023-12-24 10:42:40 +01:00
commit 1d37b38b32
No known key found for this signature in database
GPG Key ID: 2D09EC5ED2687FF2
161 changed files with 2849 additions and 162 deletions

2
.gitignore vendored
View File

@ -14,6 +14,8 @@ node_modules/
*.launch *.launch
release.md
# exclude generated resource # exclude generated resource
BlueMapCommon/src/main/resources/de/bluecolored/bluemap/webapp.zip BlueMapCommon/src/main/resources/de/bluecolored/bluemap/webapp.zip
BlueMapCore/src/main/resources/de/bluecolored/bluemap/*/resourceExtensions.zip BlueMapCore/src/main/resources/de/bluecolored/bluemap/*/resourceExtensions.zip

View File

@ -372,7 +372,7 @@ private ConfigTemplate createNetherMapTemplate(String name, Path worldFolder, Ke
.setVariable("world", formatPath(worldFolder)) .setVariable("world", formatPath(worldFolder))
.setVariable("dimension", dimension.getFormatted()) .setVariable("dimension", dimension.getFormatted())
.setVariable("sky-color", "#290000") .setVariable("sky-color", "#290000")
.setVariable("void-color", "#000000") .setVariable("void-color", "#150000")
.setVariable("ambient-light", "0.6") .setVariable("ambient-light", "0.6")
.setVariable("remove-caves-below-y", "-10000") .setVariable("remove-caves-below-y", "-10000")
.setConditional("max-y-comment", false) .setConditional("max-y-comment", false)
@ -386,7 +386,7 @@ private ConfigTemplate createEndMapTemplate(String name, Path worldFolder, Key d
.setVariable("world", formatPath(worldFolder)) .setVariable("world", formatPath(worldFolder))
.setVariable("dimension", dimension.getFormatted()) .setVariable("dimension", dimension.getFormatted())
.setVariable("sky-color", "#080010") .setVariable("sky-color", "#080010")
.setVariable("void-color", "#000000") .setVariable("void-color", "#080010")
.setVariable("ambient-light", "0.6") .setVariable("ambient-light", "0.6")
.setVariable("remove-caves-below-y", "-10000") .setVariable("remove-caves-below-y", "-10000")
.setConditional("max-y-comment", true) .setConditional("max-y-comment", true)

View File

@ -2,6 +2,7 @@
// !!! SET YOUR SQL-CONNECTION SETTINGS HERE: !!! // !!! SET YOUR SQL-CONNECTION SETTINGS HERE: !!!
$driver = 'mysql'; // 'mysql' (MySQL) or 'pgsql' (PostgreSQL)
$hostname = '127.0.0.1'; $hostname = '127.0.0.1';
$port = 3306; $port = 3306;
$username = 'root'; $username = 'root';
@ -85,6 +86,14 @@ function getMimeType($path) {
return $mimeDefault; return $mimeDefault;
} }
function send($data) {
if (is_resource($data)) {
fpassthru($data);
} else {
echo $data;
}
}
// determine relative request-path // determine relative request-path
$root = dirname($_SERVER['PHP_SELF']); $root = dirname($_SERVER['PHP_SELF']);
if ($root === "/" || $root === "\\") $root = ""; if ($root === "/" || $root === "\\") $root = "";
@ -111,9 +120,12 @@ if (startsWith($path, "/maps/")) {
$mapId = $pathParts[0]; $mapId = $pathParts[0];
$mapPath = explode("?", $pathParts[1], 2)[0]; $mapPath = explode("?", $pathParts[1], 2)[0];
// get sql-connection // Initialize PDO
$sql = new mysqli($hostname, $username, $password, $database, $port); try {
if ($sql->errno) error(500, "Failed to connect to Database!"); $sql = new PDO("$driver:host=$hostname;dbname=$database", $username, $password);
$sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e ) { error(500, "Failed to connect to database"); }
// provide map-tiles // provide map-tiles
if (startsWith($mapPath, "tiles/")) { if (startsWith($mapPath, "tiles/")) {
@ -126,67 +138,72 @@ if (startsWith($path, "/maps/")) {
$compression = $lod === 0 ? $hiresCompression : "none"; $compression = $lod === 0 ? $hiresCompression : "none";
// query for tile // query for tile
$statement = $sql->prepare(" try {
SELECT t.`data` $statement = $sql->prepare("
FROM `bluemap_map_tile` t SELECT t.data
INNER JOIN `bluemap_map` m FROM bluemap_map_tile t
ON t.`map` = m.`id` INNER JOIN bluemap_map m
INNER JOIN `bluemap_map_tile_compression` c ON t.map = m.id
ON t.`compression` = c.`id` INNER JOIN bluemap_map_tile_compression c
WHERE m.`map_id` = ? ON t.compression = c.id
AND t.`lod` = ? WHERE m.map_id = :map_id
AND t.`x` = ? AND t.lod = :lod
AND t.`z` = ? AND t.x = :x
AND c.`compression` = ? AND t.z = :z
"); AND c.compression = :compression
$statement->bind_param("siiis", $mapId, $lod, $tileX, $tileZ, $compression); ");
$statement->execute(); $statement->bindParam( ':map_id', $mapId, PDO::PARAM_STR );
if ($statement->errno) error(500, "Database query failed!"); $statement->bindParam( ':lod', $lod, PDO::PARAM_INT );
$statement->bindParam( ':x', $tileX, PDO::PARAM_INT );
$statement->bindParam( ':z', $tileZ, PDO::PARAM_INT );
$statement->bindParam( ':compression', $compression, PDO::PARAM_STR);
$statement->setFetchMode(PDO::FETCH_ASSOC);
$statement->execute();
// return result // return result
$result = $statement->get_result(); if ($line = $statement->fetch()) {
if ($result && $line = $result->fetch_assoc()) { if ($compression !== "none")
if ($compression !== "none") header("Content-Encoding: $compression");
header("Content-Encoding: $compression"); if ($lod === 0) {
header("Content-Type: application/json");
if ($lod === 0) { } else {
header("Content-Type: application/json"); header("Content-Type: image/png");
} else { }
header("Content-Type: image/png"); send($line["data"]);
exit;
} }
echo $line["data"]; } catch (PDOException $e) { error(500, "Failed to fetch data"); }
exit;
}
// empty json response if nothing found // empty json response if nothing found
header("Content-Type: application/json"); header("Content-Type: application/json");
echo "{}"; echo "{}";
exit; exit;
} }
// provide meta-files // provide meta-files
$statement = $sql->prepare(" try {
SELECT t.`value` $statement = $sql->prepare("
FROM `bluemap_map_meta` t SELECT t.value
INNER JOIN `bluemap_map` m FROM bluemap_map_meta t
ON t.`map` = m.`id` INNER JOIN bluemap_map m
WHERE m.`map_id` = ? ON t.map = m.id
AND t.`key` = ? WHERE m.map_id = :map_id
"); AND t.key = :map_path
$statement->bind_param("ss", $mapId, $mapPath); ");
$statement->execute(); $statement->bindParam( ':map_id', $mapId, PDO::PARAM_STR );
if ($statement->errno) error(500, "Database query failed!"); $statement->bindParam( ':map_path', $mapPath, PDO::PARAM_STR );
$statement->setFetchMode(PDO::FETCH_ASSOC);
$statement->execute();
$result = $statement->get_result(); if ($line = $statement->fetch()) {
if ($result && $line = $result->fetch_assoc()) { header("Content-Type: ".getMimeType($mapPath));
header("Content-Type: ".getMimeType($mapPath)); send($line["value"]);
echo $line["value"]; exit;
exit; }
} } catch (PDOException $e) { error(500, "Failed to fetch data"); }
} }
// no match => 404 // no match => 404
error(404); error(404);

View File

@ -2,13 +2,13 @@
<div class="control-bar"> <div class="control-bar">
<MenuButton :close="appState.menu.isOpen" :back="false" @action="appState.menu.reOpenPage()" :title="$t('menu.tooltip')" /> <MenuButton :close="appState.menu.isOpen" :back="false" @action="appState.menu.reOpenPage()" :title="$t('menu.tooltip')" />
<div class="space thin-hide"></div> <div class="space thin-hide"></div>
<SvgButton v-if="appState.maps.length > 0" class="thin-hide" :title="$t('maps.tooltip')" <SvgButton v-if="appState.maps.length > 1" class="thin-hide" :title="$t('maps.tooltip')"
@action="appState.menu.openPage('maps', $t('maps.title'))"> @action="appState.menu.openPage('maps', $t('maps.title'))">
<svg viewBox="0 0 30 30"> <svg viewBox="0 0 30 30">
<polygon points="26.708,22.841 19.049,25.186 11.311,20.718 3.292,22.841 7.725,5.96 13.475,4.814 19.314,7.409 25.018,6.037 "/> <polygon points="26.708,22.841 19.049,25.186 11.311,20.718 3.292,22.841 7.725,5.96 13.475,4.814 19.314,7.409 25.018,6.037 "/>
</svg> </svg>
</SvgButton> </SvgButton>
<SvgButton v-if="showMapMenu && (markers.markerSets.length > 0 || markers.markers.length > 0)" class="thin-hide" :title="$t('markers.tooltip')" <SvgButton v-if="showMapMenu && showMarkerMenu" class="thin-hide" :title="$t('markers.tooltip')"
@action="appState.menu.openPage('markers', $t('markers.title'), {markerSet: markers})"> @action="appState.menu.openPage('markers', $t('markers.title'), {markerSet: markers})">
<svg viewBox="0 0 30 30"> <svg viewBox="0 0 30 30">
<path d="M15,3.563c-4.459,0-8.073,3.615-8.073,8.073c0,6.483,8.196,14.802,8.196,14.802s7.951-8.013,7.951-14.802 <path d="M15,3.563c-4.459,0-8.073,3.615-8.073,8.073c0,6.483,8.196,14.802,8.196,14.802s7.951-8.013,7.951-14.802
@ -101,12 +101,24 @@
}, },
showMapMenu() { showMapMenu() {
return this.mapViewer.mapState === "loading" || this.mapViewer.mapState === "loaded"; return this.mapViewer.mapState === "loading" || this.mapViewer.mapState === "loaded";
},
showMarkerMenu() {
return this.hasMarkers(this.markers)
} }
}, },
methods: { methods: {
openPlayerList() { openPlayerList() {
let playerList = this.playerMarkerSet; let playerList = this.playerMarkerSet;
this.appState.menu.openPage('markers', this.$t("players.title"), {markerSet: playerList}); this.appState.menu.openPage('markers', this.$t("players.title"), {markerSet: playerList});
},
hasMarkers(markerSet) {
if (markerSet.markers.length > 0) return true;
for (let set of markerSet.markerSets) {
if (set.id !== "bm-players" && set.id !== "bm-popup-set") {
if (this.hasMarkers(set)) return true;
}
}
return false;
} }
} }
} }

View File

@ -43,6 +43,7 @@ export default {
animation = animate(t => { animation = animate(t => {
let u = EasingFunctions.easeOutQuad(t); let u = EasingFunctions.easeOutQuad(t);
this.mapViewer.uniforms.sunlightStrength.value = startValue * (1-u) + targetValue * u; this.mapViewer.uniforms.sunlightStrength.value = startValue * (1-u) + targetValue * u;
this.$bluemap.mapViewer.redraw();
}, 300); }, 300);
} }
} }

View File

@ -8,15 +8,15 @@
<Group :title="$t('lighting.title')"> <Group :title="$t('lighting.title')">
<Slider :value="mapViewer.uniforms.sunlightStrength.value" :min="0" :max="1" :step="0.01" <Slider :value="mapViewer.uniforms.sunlightStrength.value" :min="0" :max="1" :step="0.01"
@update="mapViewer.uniforms.sunlightStrength.value = $event">{{$t('lighting.sunlight')}}</Slider> @update="mapViewer.uniforms.sunlightStrength.value = $event; $bluemap.mapViewer.redraw()">{{$t('lighting.sunlight')}}</Slider>
<Slider :value="mapViewer.uniforms.ambientLight.value" :min="0" :max="1" :step="0.01" <Slider :value="mapViewer.uniforms.ambientLight.value" :min="0" :max="1" :step="0.01"
@update="mapViewer.uniforms.ambientLight.value = $event">{{$t('lighting.ambientLight')}}</Slider> @update="mapViewer.uniforms.ambientLight.value = $event; $bluemap.mapViewer.redraw()">{{$t('lighting.ambientLight')}}</Slider>
</Group> </Group>
<Group :title="$t('resolution.title')"> <Group :title="$t('resolution.title')">
<SimpleButton v-for="stage of qualityStages" :key="stage.name" <SimpleButton v-for="stage of qualityStages" :key="stage.name"
:active="mapViewer.superSampling === stage.value" :active="mapViewer.superSampling === stage.value"
@action="$bluemap.mapViewer.superSampling = stage.value; $bluemap.saveUserSettings();" @action="$bluemap.mapViewer.superSampling = stage.value; $bluemap.saveUserSettings(); $bluemap.mapViewer.redraw()"
>{{stage.name}}</SimpleButton> >{{stage.name}}</SimpleButton>
</Group> </Group>

View File

@ -708,6 +708,12 @@ export class BlueMapApp {
} }
} }
switch (values[9]) {
case "flat" : this.setFlatView(0); break;
case "free" : this.setFreeFlight(0, controls.position.y); break;
default : this.setPerspectiveView(0); break;
}
controls.position.x = parseFloat(values[1]); controls.position.x = parseFloat(values[1]);
controls.position.y = parseFloat(values[2]); controls.position.y = parseFloat(values[2]);
controls.position.z = parseFloat(values[3]); controls.position.z = parseFloat(values[3]);
@ -717,11 +723,7 @@ export class BlueMapApp {
controls.tilt = parseFloat(values[7]); controls.tilt = parseFloat(values[7]);
controls.ortho = parseFloat(values[8]); controls.ortho = parseFloat(values[8]);
switch (values[9]) { this.updatePageAddress();
case "flat" : this.setFlatView(0); break;
case "free" : this.setFreeFlight(0, controls.position.y); break;
default : this.setPerspectiveView(0); break;
}
return true; return true;
} }

View File

@ -113,6 +113,9 @@ export class MapViewer {
this.markers = new MarkerSet("bm-root"); this.markers = new MarkerSet("bm-root");
this.lastFrame = 0; this.lastFrame = 0;
this.lastRedrawChange = 0;
events.addEventListener("bluemapCameraMoved", this.redraw)
events.addEventListener("bluemapTileLoaded", this.redraw)
// initialize // initialize
this.initializeRootElement(); this.initializeRootElement();
@ -160,6 +163,8 @@ export class MapViewer {
this.camera.aspect = this.rootElement.clientWidth / this.rootElement.clientHeight; this.camera.aspect = this.rootElement.clientWidth / this.rootElement.clientHeight;
this.camera.updateProjectionMatrix(); this.camera.updateProjectionMatrix();
this.redraw();
}; };
/** /**
@ -261,6 +266,13 @@ export class MapViewer {
} }
} }
/**
* Call to wake up the render-loop and render on high-fps for a while
*/
redraw = () => {
this.lastRedrawChange = Date.now();
}
/** /**
* @private * @private
* The render-loop to update and possibly render a new frame. * The render-loop to update and possibly render a new frame.
@ -272,7 +284,6 @@ export class MapViewer {
// calculate delta time // calculate delta time
if (this.lastFrame <= 0) this.lastFrame = now; if (this.lastFrame <= 0) this.lastFrame = now;
let delta = now - this.lastFrame; let delta = now - this.lastFrame;
this.lastFrame = now;
// update stats // update stats
this.stats.begin(); this.stats.begin();
@ -283,7 +294,10 @@ export class MapViewer {
} }
// render // render
this.render(delta); if (delta >= 1000 || Date.now() - this.lastRedrawChange < 1000) {
this.lastFrame = now;
this.render(delta);
}
// update stats // update stats
this.stats.update(); this.stats.update();

View File

@ -63,7 +63,7 @@ export class Map {
name: id, name: id,
startPos: {x: 0, z: 0}, startPos: {x: 0, z: 0},
skyColor: new Color(), skyColor: new Color(),
voidColor: new Color(), voidColor: new Color(0, 0, 0),
ambientLight: 0, ambientLight: 0,
hires: { hires: {
tileSize: {x: 32, z: 32}, tileSize: {x: 32, z: 32},

View File

@ -24,7 +24,7 @@
*/ */
import { Vector2, Scene, Group } from 'three'; import { Vector2, Scene, Group } from 'three';
import { Tile } from './Tile.js'; import { Tile } from './Tile.js';
import {alert, hashTile} from '../util/Utils.js'; import {alert, dispatchEvent, hashTile} from '../util/Utils.js';
import {TileMap} from "./TileMap"; import {TileMap} from "./TileMap";
export class TileManager { export class TileManager {
@ -194,6 +194,11 @@ export class TileManager {
this.tiles.set(tileHash, tile); this.tiles.set(tileHash, tile);
tile.load(this.tileLoader) tile.load(this.tileLoader)
.then(() => { .then(() => {
dispatchEvent(this.events, "bluemapTileLoaded", {
tileManager: this,
tile: tile
});
if (this.loadTimeout) clearTimeout(this.loadTimeout); if (this.loadTimeout) clearTimeout(this.loadTimeout);
this.loadTimeout = setTimeout(this.loadCloseTiles, 0); this.loadTimeout = setTimeout(this.loadCloseTiles, 0);
}) })

View File

@ -204,7 +204,11 @@ export const animate = function (animationFrame, durationMs = 1000, postAnimatio
} }
}; };
window.requestAnimationFrame(time => animation.frame(time)); if (durationMs !== 0) {
window.requestAnimationFrame(time => animation.frame(time));
} else {
animation.frame(0);
}
return animation; return animation;
} }

View File

@ -123,7 +123,7 @@ tasks.processResources {
//resource Extensions //resource Extensions
val resourceIds: Array<String> = arrayOf( val resourceIds: Array<String> = arrayOf(
"1_13", "1_15", "1_16", "1_18" "1_13", "1_15", "1_16", "1_18", "1_20_3"
) )
tasks.register("zipResourceExtensions") { tasks.register("zipResourceExtensions") {

View File

@ -38,7 +38,7 @@ public class MinecraftVersion implements Comparable<MinecraftVersion> {
private static final Pattern VERSION_REGEX = Pattern.compile("(?<major>\\d+)\\.(?<minor>\\d+)(?:\\.(?<patch>\\d+))?(?:-(?:pre|rc)\\d+)?"); private static final Pattern VERSION_REGEX = Pattern.compile("(?<major>\\d+)\\.(?<minor>\\d+)(?:\\.(?<patch>\\d+))?(?:-(?:pre|rc)\\d+)?");
public static final MinecraftVersion LATEST_SUPPORTED = new MinecraftVersion(1, 20, 2); public static final MinecraftVersion LATEST_SUPPORTED = new MinecraftVersion(1, 20, 3);
public static final MinecraftVersion EARLIEST_SUPPORTED = new MinecraftVersion(1, 13); public static final MinecraftVersion EARLIEST_SUPPORTED = new MinecraftVersion(1, 13);
private final int major, minor, patch; private final int major, minor, patch;
@ -152,7 +152,8 @@ public enum MinecraftResource {
MC_1_18 (new MinecraftVersion(1, 18), "mc1_18", "https://piston-data.mojang.com/v1/objects/020aa79e63a7aab5d6f30e5ec7a6c08baee6b64c/client.jar"), MC_1_18 (new MinecraftVersion(1, 18), "mc1_18", "https://piston-data.mojang.com/v1/objects/020aa79e63a7aab5d6f30e5ec7a6c08baee6b64c/client.jar"),
MC_1_19 (new MinecraftVersion(1, 19), "mc1_18", "https://piston-data.mojang.com/v1/objects/a45634ab061beb8c878ccbe4a59c3315f9c0266f/client.jar"), MC_1_19 (new MinecraftVersion(1, 19), "mc1_18", "https://piston-data.mojang.com/v1/objects/a45634ab061beb8c878ccbe4a59c3315f9c0266f/client.jar"),
MC_1_19_4 (new MinecraftVersion(1, 19, 4), "mc1_18", "https://piston-data.mojang.com/v1/objects/958928a560c9167687bea0cefeb7375da1e552a8/client.jar"), MC_1_19_4 (new MinecraftVersion(1, 19, 4), "mc1_18", "https://piston-data.mojang.com/v1/objects/958928a560c9167687bea0cefeb7375da1e552a8/client.jar"),
MC_1_20 (new MinecraftVersion(1, 20), "mc1_18", "https://piston-data.mojang.com/v1/objects/e575a48efda46cf88111ba05b624ef90c520eef1/client.jar"); MC_1_20 (new MinecraftVersion(1, 20), "mc1_18", "https://piston-data.mojang.com/v1/objects/e575a48efda46cf88111ba05b624ef90c520eef1/client.jar"),
MC_1_20_3 (new MinecraftVersion(1, 20, 3), "mc1_20_3", "https://piston-data.mojang.com/v1/objects/b178a327a96f2cf1c9f98a45e5588d654a3e4369/client.jar");
private final MinecraftVersion version; private final MinecraftVersion version;
private final String resourcePrefix; private final String resourcePrefix;

View File

@ -186,7 +186,7 @@ private TextureGallery loadTextureGallery() throws IOException {
private void saveTextureGallery() { private void saveTextureGallery() {
try (OutputStream out = storage.writeMeta(id, META_FILE_TEXTURES)) { try (OutputStream out = storage.writeMeta(id, META_FILE_TEXTURES)) {
this.textureGallery.writeTexturesFile(this.resourcePack, out); this.textureGallery.writeTexturesFile(out);
} catch (IOException ex) { } catch (IOException ex) {
Logger.global.logError("Failed to save textures for map '" + getId() + "'!", ex); Logger.global.logError("Failed to save textures for map '" + getId() + "'!", ex);
} }

View File

@ -33,10 +33,12 @@
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson; import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack; import de.bluecolored.bluemap.core.resources.resourcepack.ResourcePack;
import de.bluecolored.bluemap.core.resources.resourcepack.texture.Texture; import de.bluecolored.bluemap.core.resources.resourcepack.texture.Texture;
import de.bluecolored.bluemap.core.util.Key;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.io.*; import java.io.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -47,46 +49,53 @@ public class TextureGallery {
.setFieldNamingPolicy(FieldNamingPolicy.IDENTITY) .setFieldNamingPolicy(FieldNamingPolicy.IDENTITY)
.create(); .create();
private final Map<ResourcePath<Texture>, Integer> ordinalMap; private final Map<ResourcePath<Texture>, TextureMapping> textureMappings;
private int nextId; private int nextId;
public TextureGallery() { public TextureGallery() {
this.ordinalMap = new HashMap<>(); this.textureMappings = new HashMap<>();
this.nextId = 0; this.nextId = 0;
} }
public void clear() { public void clear() {
this.ordinalMap.clear(); this.textureMappings.clear();
this.nextId = 0; this.nextId = 0;
} }
public int get(@Nullable ResourcePath<Texture> textureResourcePath) { public int get(@Nullable ResourcePath<Texture> textureResourcePath) {
if (textureResourcePath == null) textureResourcePath = ResourcePack.MISSING_TEXTURE; if (textureResourcePath == null) textureResourcePath = ResourcePack.MISSING_TEXTURE;
Integer ordinal = ordinalMap.get(textureResourcePath); TextureMapping mapping = textureMappings.get(textureResourcePath);
return ordinal != null ? ordinal : 0; return mapping != null ? mapping.getId() : 0;
} }
public synchronized int put(ResourcePath<Texture> textureResourcePath) { public synchronized void put(ResourcePath<Texture> textureResourcePath) {
Integer ordinal = ordinalMap.putIfAbsent(textureResourcePath, nextId); textureMappings.compute(textureResourcePath, (r, mapping) -> {
if (ordinal == null) return nextId++; if (mapping == null)
return ordinal; return new TextureMapping(nextId++, textureResourcePath.getResource());
Texture texture = textureResourcePath.getResource();
if (texture != null) mapping.setTexture(texture);
return mapping;
});
} }
public synchronized void put(ResourcePack resourcePack) { public synchronized void put(ResourcePack resourcePack) {
resourcePack.getTextures().keySet().forEach(this::put); this.put(ResourcePack.MISSING_TEXTURE); // put this first
resourcePack.getTextures().keySet()
.stream()
.sorted(Comparator.comparing(Key::getFormatted))
.forEach(this::put);
} }
public void writeTexturesFile(ResourcePack resourcePack, OutputStream out) throws IOException { public void writeTexturesFile(OutputStream out) throws IOException {
Texture[] textures = new Texture[nextId]; Texture[] textures = new Texture[nextId];
Arrays.fill(textures, Texture.MISSING); Arrays.fill(textures, Texture.MISSING);
ordinalMap.forEach((textureResourcePath, ordinal) -> { this.textureMappings.forEach((textureResourcePath, mapping) -> {
Texture texture = textureResourcePath.getResource(resourcePack::getTexture); int ordinal = mapping.getId();
if (texture != null) textures[ordinal] = texture; Texture texture = mapping.getTexture();
if (texture == null) texture = Texture.missing(textureResourcePath);
// make sure the resource-path doesn't get lost textures[ordinal] = texture;
if (textures[ordinal].getResourcePath().equals(ResourcePack.MISSING_TEXTURE))
textures[ordinal] = Texture.missing(textureResourcePath);
}); });
try (Writer writer = new OutputStreamWriter(out)) { try (Writer writer = new OutputStreamWriter(out)) {
@ -105,7 +114,7 @@ public static TextureGallery readTexturesFile(InputStream in) throws IOException
for (int ordinal = 0; ordinal < textures.length; ordinal++) { for (int ordinal = 0; ordinal < textures.length; ordinal++) {
Texture texture = textures[ordinal]; Texture texture = textures[ordinal];
if (texture != null) { if (texture != null) {
gallery.ordinalMap.put(textures[ordinal].getResourcePath(), ordinal); gallery.textureMappings.put(texture.getResourcePath(), new TextureMapping(ordinal, texture));
} }
} }
} catch (JsonIOException ex) { } catch (JsonIOException ex) {
@ -114,4 +123,27 @@ public static TextureGallery readTexturesFile(InputStream in) throws IOException
return gallery; return gallery;
} }
static class TextureMapping {
private final int id;
private @Nullable Texture texture;
public TextureMapping(int id, @Nullable Texture texture) {
this.id = id;
this.texture = texture;
}
public int getId() {
return id;
}
public @Nullable Texture getTexture() {
return texture;
}
public void setTexture(@Nullable Texture texture) {
this.texture = texture;
}
}
} }

View File

@ -26,6 +26,7 @@
import de.bluecolored.bluemap.api.debug.DebugDump; import de.bluecolored.bluemap.api.debug.DebugDump;
import de.bluecolored.bluemap.core.resources.ResourcePath; import de.bluecolored.bluemap.core.resources.ResourcePath;
import de.bluecolored.bluemap.core.util.BufferedImageUtil;
import de.bluecolored.bluemap.core.util.math.Color; import de.bluecolored.bluemap.core.util.math.Color;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
@ -112,7 +113,7 @@ public static Texture from(ResourcePath<Texture> resourcePath, BufferedImage ima
boolean halfTransparent = checkHalfTransparent(image); boolean halfTransparent = checkHalfTransparent(image);
//calculate color //calculate color
Color color = calculateColor(image); Color color = BufferedImageUtil.averageColor(image);
//write to Base64 //write to Base64
ByteArrayOutputStream os = new ByteArrayOutputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream();
@ -136,36 +137,6 @@ private static boolean checkHalfTransparent(BufferedImage image){
return false; return false;
} }
private static Color calculateColor(BufferedImage image){
float alpha = 0f, red = 0f, green = 0f, blue = 0f;
int count = 0;
for (int x = 0; x < image.getWidth(); x++){
for (int y = 0; y < image.getHeight(); y++){
int pixel = image.getRGB(x, y);
float pixelAlpha = ((pixel >> 24) & 0xff) / 255f;
float pixelRed = ((pixel >> 16) & 0xff) / 255f;
float pixelGreen = ((pixel >> 8) & 0xff) / 255f;
float pixelBlue = (pixel & 0xff) / 255f;
count++;
alpha += pixelAlpha;
red += pixelRed * pixelAlpha;
green += pixelGreen * pixelAlpha;
blue += pixelBlue * pixelAlpha;
}
}
if (count == 0 || alpha == 0) return new Color();
red /= alpha;
green /= alpha;
blue /= alpha;
alpha /= count;
return new Color().set(red, green, blue, alpha, false);
}
public static Texture missing(ResourcePath<Texture> resourcePath) { public static Texture missing(ResourcePath<Texture> resourcePath) {
return new Texture(resourcePath); return new Texture(resourcePath);
} }

View File

@ -191,6 +191,8 @@ public void deleteMeta(String mapId, String name) throws IOException {
@Override @Override
public void purgeMap(String mapId, Function<ProgressInfo, Boolean> onProgress) throws IOException { public void purgeMap(String mapId, Function<ProgressInfo, Boolean> onProgress) throws IOException {
final Path directory = getFilePath(mapId); final Path directory = getFilePath(mapId);
if (!Files.exists(directory)) return;
final int subFilesCount; final int subFilesCount;
final LinkedList<Path> subFiles; final LinkedList<Path> subFiles;

View File

@ -162,10 +162,10 @@ public String selectMapIds() {
@Language("MySQL") @Language("MySQL")
public String initializeStorageMeta() { public String initializeStorageMeta() {
return "CREATE TABLE IF NOT EXISTS `bluemap_storage_meta` (" + return "CREATE TABLE IF NOT EXISTS `bluemap_storage_meta` (" +
"`key` varchar(255) NOT NULL, " + "`key` varchar(190) NOT NULL, " +
"`value` varchar(255) DEFAULT NULL, " + "`value` varchar(255) DEFAULT NULL, " +
"PRIMARY KEY (`key`)" + "PRIMARY KEY (`key`)" +
")"; ") COLLATE 'utf8mb4_bin'";
} }
@Override @Override
@ -187,10 +187,10 @@ public String insertStorageMeta() {
public String initializeMap() { public String initializeMap() {
return "CREATE TABLE `bluemap_map` (" + return "CREATE TABLE `bluemap_map` (" +
"`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT," + "`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"`map_id` VARCHAR(255) NOT NULL," + "`map_id` VARCHAR(190) NOT NULL," +
"PRIMARY KEY (`id`)," + "PRIMARY KEY (`id`)," +
"UNIQUE INDEX `map_id` (`map_id`)" + "UNIQUE INDEX `map_id` (`map_id`)" +
");"; ") COLLATE 'utf8mb4_bin';";
} }
@Override @Override
@ -198,10 +198,10 @@ public String initializeMap() {
public String initializeMapTileCompression() { public String initializeMapTileCompression() {
return "CREATE TABLE `bluemap_map_tile_compression` (" + return "CREATE TABLE `bluemap_map_tile_compression` (" +
"`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT," + "`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"`compression` VARCHAR(255) NOT NULL," + "`compression` VARCHAR(190) NOT NULL," +
"PRIMARY KEY (`id`)," + "PRIMARY KEY (`id`)," +
"UNIQUE INDEX `compression` (`compression`)" + "UNIQUE INDEX `compression` (`compression`)" +
");"; ") COLLATE 'utf8mb4_bin';";
} }
@Override @Override
@ -209,11 +209,11 @@ public String initializeMapTileCompression() {
public String initializeMapMeta() { public String initializeMapMeta() {
return "CREATE TABLE `bluemap_map_meta` (" + return "CREATE TABLE `bluemap_map_meta` (" +
"`map` SMALLINT UNSIGNED NOT NULL," + "`map` SMALLINT UNSIGNED NOT NULL," +
"`key` varchar(255) NOT NULL," + "`key` varchar(190) NOT NULL," +
"`value` LONGBLOB NOT NULL," + "`value` LONGBLOB NOT NULL," +
"PRIMARY KEY (`map`, `key`)," + "PRIMARY KEY (`map`, `key`)," +
"CONSTRAINT `fk_bluemap_map_meta_map` FOREIGN KEY (`map`) REFERENCES `bluemap_map` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT" + "CONSTRAINT `fk_bluemap_map_meta_map` FOREIGN KEY (`map`) REFERENCES `bluemap_map` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT" +
")"; ") COLLATE 'utf8mb4_bin'";
} }
@Override @Override
@ -230,7 +230,7 @@ public String initializeMapTile() {
"PRIMARY KEY (`map`, `lod`, `x`, `z`)," + "PRIMARY KEY (`map`, `lod`, `x`, `z`)," +
"CONSTRAINT `fk_bluemap_map_tile_map` FOREIGN KEY (`map`) REFERENCES `bluemap_map` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT," + "CONSTRAINT `fk_bluemap_map_tile_map` FOREIGN KEY (`map`) REFERENCES `bluemap_map` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT," +
"CONSTRAINT `fk_bluemap_map_tile_compression` FOREIGN KEY (`compression`) REFERENCES `bluemap_map_tile_compression` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT" + "CONSTRAINT `fk_bluemap_map_tile_compression` FOREIGN KEY (`compression`) REFERENCES `bluemap_map_tile_compression` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT" +
");"; ") COLLATE 'utf8mb4_bin';";
} }
@Override @Override

View File

@ -0,0 +1,63 @@
package de.bluecolored.bluemap.core.util;
import de.bluecolored.bluemap.core.util.math.Color;
import org.jetbrains.annotations.Nullable;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
public class BufferedImageUtil {
public static Color averageColor(BufferedImage image) {
Color average = new Color();
Color color = new Color();
float[] buffer = null;
int count = 0;
for (int x = 0; x < image.getWidth(); x++) {
for (int y = 0; y < image.getHeight(); y++) {
buffer = readPixel(image, x, y, color, buffer);
count++;
average.add(color.premultiplied());
}
}
average.div(count);
return average;
}
public static Color readPixel(BufferedImage image, int x, int y, @Nullable Color target) {
readPixel(image, x, y, target, null);
return target;
}
private static float[] readPixel(BufferedImage image, int x, int y, @Nullable Color target, float @Nullable [] buffer) {
if (target == null) target = new Color();
// workaround for java bug: 5051418
if (image.getType() == BufferedImage.TYPE_BYTE_GRAY) {
buffer = readPixelDirect(image, x, y, target, buffer);
} else {
readPixelDefault(image, x, y, target);
}
return buffer;
}
private static void readPixelDefault(BufferedImage image, int x, int y, Color target) {
target.set(image.getRGB(x, y), image.getColorModel().isAlphaPremultiplied());
}
private static float[] readPixelDirect(RenderedImage image, int x, int y, Color target, float @Nullable [] buffer) {
buffer = image.getData().getPixel(x, y, buffer);
float a = buffer.length >= 4 ? buffer[3] / 255f : 1f;
float r = buffer[0] / 255f;
float g = buffer.length >= 3 ? buffer[1] / 255f : r;
float b = buffer.length >= 3 ? buffer[2] / 255f : r;
target.set(r, g, b, a, image.getColorModel().isAlphaPremultiplied());
return buffer;
}
}

View File

@ -7,6 +7,7 @@
"minecraft:lava_cauldron": "#ffffff", "minecraft:lava_cauldron": "#ffffff",
"minecraft:grass_block": "@grass", "minecraft:grass_block": "@grass",
"minecraft:grass": "@grass", "minecraft:grass": "@grass",
"minecraft:short_grass": "@grass",
"minecraft:tall_grass": "@grass", "minecraft:tall_grass": "@grass",
"minecraft:fern": "@grass", "minecraft:fern": "@grass",
"minecraft:large_fern": "@grass", "minecraft:large_fern": "@grass",

View File

@ -6,6 +6,7 @@
"minecraft:bubble_column": { "alwaysWaterlogged": true }, "minecraft:bubble_column": { "alwaysWaterlogged": true },
"minecraft:grass": { "randomOffset": true }, "minecraft:grass": { "randomOffset": true },
"minecraft:short_grass": { "randomOffset": true },
"minecraft:tall_grass": { "randomOffset": true }, "minecraft:tall_grass": { "randomOffset": true },
"minecraft:fern": { "randomOffset": true }, "minecraft:fern": { "randomOffset": true },
"minecraft:dandelion": { "randomOffset": true }, "minecraft:dandelion": { "randomOffset": true },

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "bluemap:block/missing" }
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "bluemap:block/missing"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,324 @@
{
"minecraft:the_void": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:plains": {
"humidity": 0.4,
"temperature": 0.8,
"watercolor": 4159204
},
"minecraft:sunflower_plains": {
"humidity": 0.4,
"temperature": 0.8,
"watercolor": 4159204
},
"minecraft:snowy_plains": {
"humidity": 0.5,
"temperature": 0.0,
"watercolor": 4159204
},
"minecraft:ice_spikes": {
"humidity": 0.5,
"temperature": 0.0,
"watercolor": 4159204
},
"minecraft:desert": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204
},
"minecraft:swamp": {
"humidity": 0.9,
"temperature": 0.8,
"watercolor": 6388580,
"grasscolor": "#6A7039",
"foliagecolor": 6975545
},
"minecraft:mangrove_swamp": {
"humidity": 0.9,
"temperature": 0.8,
"watercolor": "#3A7A6A",
"grasscolor": "#6A7039",
"foliagecolor": "#8DB127"
},
"minecraft:forest": {
"humidity": 0.8,
"temperature": 0.7,
"watercolor": 4159204
},
"minecraft:flower_forest": {
"humidity": 0.8,
"temperature": 0.7,
"watercolor": 4159204
},
"minecraft:birch_forest": {
"humidity": 0.6,
"temperature": 0.6,
"watercolor": 4159204
},
"minecraft:dark_forest": {
"humidity": 0.8,
"temperature": 0.7,
"watercolor": 4159204,
"foliagecolor": "#28340a55",
"grasscolor": "#28340a88"
},
"minecraft:old_growth_birch_forest": {
"humidity": 0.6,
"temperature": 0.6,
"watercolor": 4159204
},
"minecraft:old_growth_pine_taiga": {
"humidity": 0.8,
"temperature": 0.3,
"watercolor": 4159204
},
"minecraft:old_growth_spruce_taiga": {
"humidity": 0.8,
"temperature": 0.25,
"watercolor": 4159204
},
"minecraft:taiga": {
"humidity": 0.8,
"temperature": 0.25,
"watercolor": 4159204
},
"minecraft:snowy_taiga": {
"humidity": 0.4,
"temperature": -0.5,
"watercolor": 4020182
},
"minecraft:savanna": {
"humidity": 0.0,
"temperature": 1.2,
"watercolor": 4159204
},
"minecraft:savanna_plateau": {
"humidity": 0.0,
"temperature": 1.0,
"watercolor": 4159204
},
"minecraft:windswept_hills": {
"humidity": 0.3,
"temperature": 0.2,
"watercolor": 4159204
},
"minecraft:windswept_gravelly_hills": {
"humidity": 0.3,
"temperature": 0.2,
"watercolor": 4159204
},
"minecraft:windswept_forest": {
"humidity": 0.3,
"temperature": 0.2,
"watercolor": 4159204
},
"minecraft:windswept_savanna": {
"humidity": 0.0,
"temperature": 1.1,
"watercolor": 4159204
},
"minecraft:jungle": {
"humidity": 0.9,
"temperature": 0.95,
"watercolor": 4159204
},
"minecraft:sparse_jungle": {
"humidity": 0.8,
"temperature": 0.95,
"watercolor": 4159204
},
"minecraft:bamboo_jungle": {
"humidity": 0.9,
"temperature": 0.95,
"watercolor": 4159204
},
"minecraft:badlands": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204,
"foliagecolor": 10387789,
"grasscolor": 9470285
},
"minecraft:eroded_badlands": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204,
"foliagecolor": 10387789,
"grasscolor": 9470285
},
"minecraft:wooded_badlands": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204,
"foliagecolor": 10387789,
"grasscolor": 9470285
},
"minecraft:meadow": {
"humidity": 0.8,
"temperature": 0.5,
"watercolor": 937679
},
"minecraft:grove": {
"humidity": 0.8,
"temperature": -0.2,
"watercolor": 4159204
},
"minecraft:snowy_slopes": {
"humidity": 0.9,
"temperature": -0.3,
"watercolor": 4159204
},
"minecraft:frozen_peaks": {
"humidity": 0.9,
"temperature": -0.7,
"watercolor": 4159204
},
"minecraft:jagged_peaks": {
"humidity": 0.9,
"temperature": -0.7,
"watercolor": 4159204
},
"minecraft:stony_peaks": {
"humidity": 0.3,
"temperature": 1.0,
"watercolor": 4159204
},
"minecraft:river": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:frozen_river": {
"humidity": 0.5,
"temperature": 0.0,
"watercolor": 3750089
},
"minecraft:beach": {
"humidity": 0.4,
"temperature": 0.8,
"watercolor": 4159204
},
"minecraft:snowy_beach": {
"humidity": 0.3,
"temperature": 0.05,
"watercolor": 4020182
},
"minecraft:stony_shore": {
"humidity": 0.3,
"temperature": 0.2,
"watercolor": 4159204
},
"minecraft:warm_ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4445678
},
"minecraft:lukewarm_ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4566514
},
"minecraft:deep_lukewarm_ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4566514
},
"minecraft:ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:deep_ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:cold_ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4020182
},
"minecraft:deep_cold_ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4020182
},
"minecraft:frozen_ocean": {
"humidity": 0.5,
"temperature": 0.0,
"watercolor": 3750089
},
"minecraft:deep_frozen_ocean": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 3750089
},
"minecraft:mushroom_fields": {
"humidity": 1.0,
"temperature": 0.9,
"watercolor": 4159204
},
"minecraft:dripstone_caves": {
"humidity": 0.4,
"temperature": 0.8,
"watercolor": 4159204
},
"minecraft:lush_caves": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:nether_wastes": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204
},
"minecraft:warped_forest": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204
},
"minecraft:crimson_forest": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204
},
"minecraft:soul_sand_valley": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204
},
"minecraft:basalt_deltas": {
"humidity": 0.0,
"temperature": 2.0,
"watercolor": 4159204
},
"minecraft:the_end": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:end_highlands": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:end_midlands": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:small_end_islands": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
},
"minecraft:end_barrens": {
"humidity": 0.5,
"temperature": 0.5,
"watercolor": 4159204
}
}

View File

@ -0,0 +1,20 @@
{
"default": "@foliage",
"minecraft:water": "@water",
"minecraft:cauldron": "@water",
"minecraft:water_cauldron": "@water",
"minecraft:powder_snow_cauldron": "#ffffff",
"minecraft:lava_cauldron": "#ffffff",
"minecraft:grass_block": "@grass",
"minecraft:grass": "@grass",
"minecraft:short_grass": "@grass",
"minecraft:tall_grass": "@grass",
"minecraft:fern": "@grass",
"minecraft:large_fern": "@grass",
"minecraft:redstone_wire": "@redstone",
"minecraft:birch_leaves": 8431445,
"minecraft:spruce_leaves": 6396257,
"minecraft:stonecutter": "#ffffff",
"minecraft:snow": "#ffffff",
"minecraft:cherry_leaves": "#ffffff"
}

View File

@ -0,0 +1,55 @@
{
"minecraft:seagrass": { "alwaysWaterlogged": true },
"minecraft:tall_seagrass": { "alwaysWaterlogged": true },
"minecraft:kelp": { "alwaysWaterlogged": true },
"minecraft:kelp_plant": { "alwaysWaterlogged": true },
"minecraft:bubble_column": { "alwaysWaterlogged": true },
"minecraft:grass": { "randomOffset": true },
"minecraft:short_grass": { "randomOffset": true },
"minecraft:tall_grass": { "randomOffset": true },
"minecraft:fern": { "randomOffset": true },
"minecraft:dandelion": { "randomOffset": true },
"minecraft:cornflower": { "randomOffset": true },
"minecraft:poppy": { "randomOffset": true },
"minecraft:blue_orchid": { "randomOffset": true },
"minecraft:allium": { "randomOffset": true },
"minecraft:azure_bluet": { "randomOffset": true },
"minecraft:red_tulip": { "randomOffset": true },
"minecraft:orange_tulip": { "randomOffset": true },
"minecraft:white_tulip": { "randomOffset": true },
"minecraft:pink_tulip": { "randomOffset": true },
"minecraft:oxeye_daisy": { "randomOffset": true },
"minecraft:lily_of_the_valley": { "randomOffset": true },
"minecraft:wither_rose": { "randomOffset": true },
"minecraft:crimson_roots": { "randomOffset": true },
"minecraft:warped_roots": { "randomOffset": true },
"minecraft:nether_sprouts": { "randomOffset": true },
"minecraft:rose_bush": { "randomOffset": true },
"minecraft:peony": { "randomOffset": true },
"minecraft:lilac": { "randomOffset": true },
"minecraft:sunflower": { "randomOffset": true },
"minecraft:hanging_roots": { "randomOffset": true },
"minecraft:small_dripleaf": { "randomOffset": true },
"minecraft:glass": { "occluding": false, "cullingIdentical": true },
"minecraft:tinted_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:white_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:orange_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:magenta_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:light_blue_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:yellow_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:lime_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:pink_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:gray_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:light_gray_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:cyan_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:purple_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:blue_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:brown_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:green_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:red_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:black_stained_glass": { "occluding": false, "cullingIdentical": true },
"minecraft:ice": { "cullingIdentical": true }
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/acacia" },
"rotation=1": { "model": "block/sign/acacia", "y": 22.5 },
"rotation=2": { "model": "block/sign/acacia", "y": 45 },
"rotation=3": { "model": "block/sign/acacia", "y": 67.5 },
"rotation=4": { "model": "block/sign/acacia", "y": 90 },
"rotation=5": { "model": "block/sign/acacia", "y": 112.5 },
"rotation=6": { "model": "block/sign/acacia", "y": 135 },
"rotation=7": { "model": "block/sign/acacia", "y": 157.5 },
"rotation=8": { "model": "block/sign/acacia", "y": 180 },
"rotation=9": { "model": "block/sign/acacia", "y": 202.5 },
"rotation=10": { "model": "block/sign/acacia", "y": 225 },
"rotation=11": { "model": "block/sign/acacia", "y": 247.5 },
"rotation=12": { "model": "block/sign/acacia", "y": 270 },
"rotation=13": { "model": "block/sign/acacia", "y": 292.5 },
"rotation=14": { "model": "block/sign/acacia", "y": 315 },
"rotation=15": { "model": "block/sign/acacia", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_acacia" },
"facing=west": { "model": "block/sign/wall_acacia", "y": 90 },
"facing=north": { "model": "block/sign/wall_acacia", "y": 180 },
"facing=east": { "model": "block/sign/wall_acacia", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/birch" },
"rotation=1": { "model": "block/sign/birch", "y": 22.5 },
"rotation=2": { "model": "block/sign/birch", "y": 45 },
"rotation=3": { "model": "block/sign/birch", "y": 67.5 },
"rotation=4": { "model": "block/sign/birch", "y": 90 },
"rotation=5": { "model": "block/sign/birch", "y": 112.5 },
"rotation=6": { "model": "block/sign/birch", "y": 135 },
"rotation=7": { "model": "block/sign/birch", "y": 157.5 },
"rotation=8": { "model": "block/sign/birch", "y": 180 },
"rotation=9": { "model": "block/sign/birch", "y": 202.5 },
"rotation=10": { "model": "block/sign/birch", "y": 225 },
"rotation=11": { "model": "block/sign/birch", "y": 247.5 },
"rotation=12": { "model": "block/sign/birch", "y": 270 },
"rotation=13": { "model": "block/sign/birch", "y": 292.5 },
"rotation=14": { "model": "block/sign/birch", "y": 315 },
"rotation=15": { "model": "block/sign/birch", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_birch" },
"facing=west": { "model": "block/sign/wall_birch", "y": 90 },
"facing=north": { "model": "block/sign/wall_birch", "y": 180 },
"facing=east": { "model": "block/sign/wall_birch", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/black_head" },
"part=head,facing=east": { "model": "block/bed/black_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/black_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/black_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/black_foot" },
"part=foot,facing=east": { "model": "block/bed/black_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/black_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/black_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/blue_head" },
"part=head,facing=east": { "model": "block/bed/blue_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/blue_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/blue_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/blue_foot" },
"part=foot,facing=east": { "model": "block/bed/blue_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/blue_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/blue_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/brown_head" },
"part=head,facing=east": { "model": "block/bed/brown_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/brown_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/brown_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/brown_foot" },
"part=foot,facing=east": { "model": "block/bed/brown_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/brown_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/brown_foot", "y": 270 }
}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "block/bubble_column" }
}
}

View File

@ -0,0 +1,16 @@
{
"variants": {
"type=single,facing=north": { "model": "block/chest/normal", "y": 90 },
"type=single,facing=east": { "model": "block/chest/normal", "y": 180 },
"type=single,facing=south": { "model": "block/chest/normal", "y": 270 },
"type=single,facing=west": { "model": "block/chest/normal"},
"type=right,facing=north": { "model": "block/chest/normal_double_right", "y": 90 },
"type=right,facing=east": { "model": "block/chest/normal_double_right", "y": 180 },
"type=right,facing=south": { "model": "block/chest/normal_double_right", "y": 270 },
"type=right,facing=west": { "model": "block/chest/normal_double_right"},
"type=left,facing=north": { "model": "block/chest/normal_double_left", "y": 90 },
"type=left,facing=east": { "model": "block/chest/normal_double_left","y": 180 },
"type=left,facing=south": { "model": "block/chest/normal_double_left", "y": 270 },
"type=left,facing=west": { "model": "block/chest/normal_double_left"}
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/crimson" },
"rotation=1": { "model": "block/sign/crimson", "y": 22.5 },
"rotation=2": { "model": "block/sign/crimson", "y": 45 },
"rotation=3": { "model": "block/sign/crimson", "y": 67.5 },
"rotation=4": { "model": "block/sign/crimson", "y": 90 },
"rotation=5": { "model": "block/sign/crimson", "y": 112.5 },
"rotation=6": { "model": "block/sign/crimson", "y": 135 },
"rotation=7": { "model": "block/sign/crimson", "y": 157.5 },
"rotation=8": { "model": "block/sign/crimson", "y": 180 },
"rotation=9": { "model": "block/sign/crimson", "y": 202.5 },
"rotation=10": { "model": "block/sign/crimson", "y": 225 },
"rotation=11": { "model": "block/sign/crimson", "y": 247.5 },
"rotation=12": { "model": "block/sign/crimson", "y": 270 },
"rotation=13": { "model": "block/sign/crimson", "y": 292.5 },
"rotation=14": { "model": "block/sign/crimson", "y": 315 },
"rotation=15": { "model": "block/sign/crimson", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_crimson" },
"facing=west": { "model": "block/sign/wall_crimson", "y": 90 },
"facing=north": { "model": "block/sign/wall_crimson", "y": 180 },
"facing=east": { "model": "block/sign/wall_crimson", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/cyan_head" },
"part=head,facing=east": { "model": "block/bed/cyan_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/cyan_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/cyan_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/cyan_foot" },
"part=foot,facing=east": { "model": "block/bed/cyan_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/cyan_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/cyan_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/dark_oak" },
"rotation=1": { "model": "block/sign/dark_oak", "y": 22.5 },
"rotation=2": { "model": "block/sign/dark_oak", "y": 45 },
"rotation=3": { "model": "block/sign/dark_oak", "y": 67.5 },
"rotation=4": { "model": "block/sign/dark_oak", "y": 90 },
"rotation=5": { "model": "block/sign/dark_oak", "y": 112.5 },
"rotation=6": { "model": "block/sign/dark_oak", "y": 135 },
"rotation=7": { "model": "block/sign/dark_oak", "y": 157.5 },
"rotation=8": { "model": "block/sign/dark_oak", "y": 180 },
"rotation=9": { "model": "block/sign/dark_oak", "y": 202.5 },
"rotation=10": { "model": "block/sign/dark_oak", "y": 225 },
"rotation=11": { "model": "block/sign/dark_oak", "y": 247.5 },
"rotation=12": { "model": "block/sign/dark_oak", "y": 270 },
"rotation=13": { "model": "block/sign/dark_oak", "y": 292.5 },
"rotation=14": { "model": "block/sign/dark_oak", "y": 315 },
"rotation=15": { "model": "block/sign/dark_oak", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_dark_oak" },
"facing=west": { "model": "block/sign/wall_dark_oak", "y": 90 },
"facing=north": { "model": "block/sign/wall_dark_oak", "y": 180 },
"facing=east": { "model": "block/sign/wall_dark_oak", "y": 270 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=north": { "model": "block/chest/ender", "y": 90 },
"facing=east": { "model": "block/chest/ender", "y": 180 },
"facing=south": { "model": "block/chest/ender", "y":270 },
"facing=west": { "model": "block/chest/ender"}
}
}

View File

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "minecraft:block/short_grass"
}
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/gray_head" },
"part=head,facing=east": { "model": "block/bed/gray_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/gray_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/gray_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/gray_foot" },
"part=foot,facing=east": { "model": "block/bed/gray_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/gray_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/gray_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/green_head" },
"part=head,facing=east": { "model": "block/bed/green_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/green_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/green_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/green_foot" },
"part=foot,facing=east": { "model": "block/bed/green_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/green_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/green_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/jungle" },
"rotation=1": { "model": "block/sign/jungle", "y": 22.5 },
"rotation=2": { "model": "block/sign/jungle", "y": 45 },
"rotation=3": { "model": "block/sign/jungle", "y": 67.5 },
"rotation=4": { "model": "block/sign/jungle", "y": 90 },
"rotation=5": { "model": "block/sign/jungle", "y": 112.5 },
"rotation=6": { "model": "block/sign/jungle", "y": 135 },
"rotation=7": { "model": "block/sign/jungle", "y": 157.5 },
"rotation=8": { "model": "block/sign/jungle", "y": 180 },
"rotation=9": { "model": "block/sign/jungle", "y": 202.5 },
"rotation=10": { "model": "block/sign/jungle", "y": 225 },
"rotation=11": { "model": "block/sign/jungle", "y": 247.5 },
"rotation=12": { "model": "block/sign/jungle", "y": 270 },
"rotation=13": { "model": "block/sign/jungle", "y": 292.5 },
"rotation=14": { "model": "block/sign/jungle", "y": 315 },
"rotation=15": { "model": "block/sign/jungle", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_jungle" },
"facing=west": { "model": "block/sign/wall_jungle", "y": 90 },
"facing=north": { "model": "block/sign/wall_jungle", "y": 180 },
"facing=east": { "model": "block/sign/wall_jungle", "y": 270 }
}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "block/lava" }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/light_blue_head" },
"part=head,facing=east": { "model": "block/bed/light_blue_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/light_blue_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/light_blue_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/light_blue_foot" },
"part=foot,facing=east": { "model": "block/bed/light_blue_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/light_blue_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/light_blue_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/light_gray_head" },
"part=head,facing=east": { "model": "block/bed/light_gray_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/light_gray_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/light_gray_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/light_gray_foot" },
"part=foot,facing=east": { "model": "block/bed/light_gray_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/light_gray_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/light_gray_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/lime_head" },
"part=head,facing=east": { "model": "block/bed/lime_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/lime_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/lime_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/lime_foot" },
"part=foot,facing=east": { "model": "block/bed/lime_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/lime_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/lime_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/magenta_head" },
"part=head,facing=east": { "model": "block/bed/magenta_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/magenta_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/magenta_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/magenta_foot" },
"part=foot,facing=east": { "model": "block/bed/magenta_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/magenta_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/magenta_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/mangrove" },
"rotation=1": { "model": "block/sign/mangrove", "y": 22.5 },
"rotation=2": { "model": "block/sign/mangrove", "y": 45 },
"rotation=3": { "model": "block/sign/mangrove", "y": 67.5 },
"rotation=4": { "model": "block/sign/mangrove", "y": 90 },
"rotation=5": { "model": "block/sign/mangrove", "y": 112.5 },
"rotation=6": { "model": "block/sign/mangrove", "y": 135 },
"rotation=7": { "model": "block/sign/mangrove", "y": 157.5 },
"rotation=8": { "model": "block/sign/mangrove", "y": 180 },
"rotation=9": { "model": "block/sign/mangrove", "y": 202.5 },
"rotation=10": { "model": "block/sign/mangrove", "y": 225 },
"rotation=11": { "model": "block/sign/mangrove", "y": 247.5 },
"rotation=12": { "model": "block/sign/mangrove", "y": 270 },
"rotation=13": { "model": "block/sign/mangrove", "y": 292.5 },
"rotation=14": { "model": "block/sign/mangrove", "y": 315 },
"rotation=15": { "model": "block/sign/mangrove", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_mangrove" },
"facing=west": { "model": "block/sign/wall_mangrove", "y": 90 },
"facing=north": { "model": "block/sign/wall_mangrove", "y": 180 },
"facing=east": { "model": "block/sign/wall_mangrove", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/oak" },
"rotation=1": { "model": "block/sign/oak", "y": 22.5 },
"rotation=2": { "model": "block/sign/oak", "y": 45 },
"rotation=3": { "model": "block/sign/oak", "y": 67.5 },
"rotation=4": { "model": "block/sign/oak", "y": 90 },
"rotation=5": { "model": "block/sign/oak", "y": 112.5 },
"rotation=6": { "model": "block/sign/oak", "y": 135 },
"rotation=7": { "model": "block/sign/oak", "y": 157.5 },
"rotation=8": { "model": "block/sign/oak", "y": 180 },
"rotation=9": { "model": "block/sign/oak", "y": 202.5 },
"rotation=10": { "model": "block/sign/oak", "y": 225 },
"rotation=11": { "model": "block/sign/oak", "y": 247.5 },
"rotation=12": { "model": "block/sign/oak", "y": 270 },
"rotation=13": { "model": "block/sign/oak", "y": 292.5 },
"rotation=14": { "model": "block/sign/oak", "y": 315 },
"rotation=15": { "model": "block/sign/oak", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_oak" },
"facing=west": { "model": "block/sign/wall_oak", "y": 90 },
"facing=north": { "model": "block/sign/wall_oak", "y": 180 },
"facing=east": { "model": "block/sign/wall_oak", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/orange_head" },
"part=head,facing=east": { "model": "block/bed/orange_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/orange_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/orange_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/orange_foot" },
"part=foot,facing=east": { "model": "block/bed/orange_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/orange_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/orange_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/pink_head" },
"part=head,facing=east": { "model": "block/bed/pink_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/pink_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/pink_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/pink_foot" },
"part=foot,facing=east": { "model": "block/bed/pink_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/pink_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/pink_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/purple_head" },
"part=head,facing=east": { "model": "block/bed/purple_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/purple_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/purple_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/purple_foot" },
"part=foot,facing=east": { "model": "block/bed/purple_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/purple_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/purple_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/red_head" },
"part=head,facing=east": { "model": "block/bed/red_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/red_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/red_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/red_foot" },
"part=foot,facing=east": { "model": "block/bed/red_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/red_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/red_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/spruce" },
"rotation=1": { "model": "block/sign/spruce", "y": 22.5 },
"rotation=2": { "model": "block/sign/spruce", "y": 45 },
"rotation=3": { "model": "block/sign/spruce", "y": 67.5 },
"rotation=4": { "model": "block/sign/spruce", "y": 90 },
"rotation=5": { "model": "block/sign/spruce", "y": 112.5 },
"rotation=6": { "model": "block/sign/spruce", "y": 135 },
"rotation=7": { "model": "block/sign/spruce", "y": 157.5 },
"rotation=8": { "model": "block/sign/spruce", "y": 180 },
"rotation=9": { "model": "block/sign/spruce", "y": 202.5 },
"rotation=10": { "model": "block/sign/spruce", "y": 225 },
"rotation=11": { "model": "block/sign/spruce", "y": 247.5 },
"rotation=12": { "model": "block/sign/spruce", "y": 270 },
"rotation=13": { "model": "block/sign/spruce", "y": 292.5 },
"rotation=14": { "model": "block/sign/spruce", "y": 315 },
"rotation=15": { "model": "block/sign/spruce", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_spruce" },
"facing=west": { "model": "block/sign/wall_spruce", "y": 90 },
"facing=north": { "model": "block/sign/wall_spruce", "y": 180 },
"facing=east": { "model": "block/sign/wall_spruce", "y": 270 }
}
}

View File

@ -0,0 +1,16 @@
{
"variants": {
"type=single,facing=north": { "model": "block/chest/trapped", "y": 90 },
"type=single,facing=east": { "model": "block/chest/trapped", "y": 180 },
"type=single,facing=south": { "model": "block/chest/trapped", "y":270 },
"type=single,facing=west": { "model": "block/chest/trapped"},
"type=right,facing=north": { "model": "block/chest/trapped_double_right", "y": 90 },
"type=right,facing=east": { "model": "block/chest/trapped_double_right", "y": 180 },
"type=right,facing=south": { "model": "block/chest/trapped_double_right", "y":270 },
"type=right,facing=west": { "model": "block/chest/trapped_double_right"},
"type=left,facing=north": { "model": "block/chest/trapped_double_left", "y": 90 },
"type=left,facing=east": { "model": "block/chest/trapped_double_left", "y": 180 },
"type=left,facing=south": { "model": "block/chest/trapped_double_left", "y":270 },
"type=left,facing=west": { "model": "block/chest/trapped_double_left"}
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/warped" },
"rotation=1": { "model": "block/sign/warped", "y": 22.5 },
"rotation=2": { "model": "block/sign/warped", "y": 45 },
"rotation=3": { "model": "block/sign/warped", "y": 67.5 },
"rotation=4": { "model": "block/sign/warped", "y": 90 },
"rotation=5": { "model": "block/sign/warped", "y": 112.5 },
"rotation=6": { "model": "block/sign/warped", "y": 135 },
"rotation=7": { "model": "block/sign/warped", "y": 157.5 },
"rotation=8": { "model": "block/sign/warped", "y": 180 },
"rotation=9": { "model": "block/sign/warped", "y": 202.5 },
"rotation=10": { "model": "block/sign/warped", "y": 225 },
"rotation=11": { "model": "block/sign/warped", "y": 247.5 },
"rotation=12": { "model": "block/sign/warped", "y": 270 },
"rotation=13": { "model": "block/sign/warped", "y": 292.5 },
"rotation=14": { "model": "block/sign/warped", "y": 315 },
"rotation=15": { "model": "block/sign/warped", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_warped" },
"facing=west": { "model": "block/sign/wall_warped", "y": 90 },
"facing=north": { "model": "block/sign/wall_warped", "y": 180 },
"facing=east": { "model": "block/sign/wall_warped", "y": 270 }
}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "block/water" }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/white_head" },
"part=head,facing=east": { "model": "block/bed/white_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/white_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/white_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/white_foot" },
"part=foot,facing=east": { "model": "block/bed/white_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/white_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/white_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/yellow_head" },
"part=head,facing=east": { "model": "block/bed/yellow_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/yellow_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/yellow_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/yellow_foot" },
"part=foot,facing=east": { "model": "block/bed/yellow_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/yellow_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/yellow_foot", "y": 270 }
}
}

View File

@ -0,0 +1,39 @@
{
"elements": [
{
"from": [0, 0, 13],
"to": [3, 3, 16],
"faces": {
"north": {"uv": [14.75, 0.75, 15.5, 1.5], "texture": "#bed"},
"east": {"uv": [14, 0.75, 14.75, 1.5], "texture": "#bed"},
"south": {"uv": [13.25, 0.75, 14, 1.5], "texture": "#bed"},
"west": {"uv": [12.5, 0.75, 13.25, 1.5], "texture": "#bed"},
"up": {"uv": [13.25, 0, 14, 0.75], "texture": "#bed"},
"down": {"uv": [14, 0, 14.75, 0.75], "texture": "#bed"}
}
},
{
"from": [13, 0, 13],
"to": [16, 3, 16],
"faces": {
"north": {"uv": [14, 3.75, 14.75, 4.5], "texture": "#bed"},
"east": {"uv": [13.25, 3.75, 14, 4.5], "texture": "#bed"},
"south": {"uv": [12.5, 3.75, 13.25, 4.5], "texture": "#bed"},
"west": {"uv": [14.75, 3.75, 15.5, 4.5], "texture": "#bed"},
"up": {"uv": [13.25, 3, 14, 3.75], "texture": "#bed"},
"down": {"uv": [14, 3, 14.75, 3.75], "texture": "#bed"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"faces": {
"east": {"uv": [5.5, 7, 7, 11], "rotation": 90, "texture": "#bed"},
"south": {"uv": [5.5, 7, 9.5, 5.5], "texture": "#bed"},
"west": {"uv": [0, 7, 1.5, 11], "rotation": 270, "texture": "#bed"},
"up": {"uv": [1.5, 7, 5.5, 11], "texture": "#bed"},
"down": {"uv": [7, 7, 11, 11], "rotation": 180, "texture": "#bed"}
}
}
]
}

View File

@ -0,0 +1,39 @@
{
"elements": [
{
"from": [0, 0, 0],
"to": [3, 3, 3],
"faces": {
"north": {"uv": [12.5, 2.25, 13.25, 3], "texture": "#bed"},
"east": {"uv": [14.75, 2.25, 15.5, 3], "texture": "#bed"},
"south": {"uv": [14, 2.25, 14.75, 3], "texture": "#bed"},
"west": {"uv": [13.25, 2.25, 14, 3], "texture": "#bed"},
"up": {"uv": [13.25, 1.5, 14, 2.25], "texture": "#bed"},
"down": {"uv": [14, 1.5, 14.75, 2.25], "texture": "#bed"}
}
},
{
"from": [13, 0, 0],
"to": [16, 3, 3],
"faces": {
"north": {"uv": [13.25, 5.25, 14, 6], "texture": "#bed"},
"east": {"uv": [12.5, 5.25, 13.25, 6], "texture": "#bed"},
"south": {"uv": [14.75, 5.25, 15.5, 6], "texture": "#bed"},
"west": {"uv": [14, 5.25, 14.75, 6], "texture": "#bed"},
"up": {"uv": [13.25, 4.5, 14, 5.25], "texture": "#bed"},
"down": {"uv": [14, 4.5, 14.75, 5.25], "texture": "#bed"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"faces": {
"north": {"uv": [1.5, 1.5, 5.5, 0], "texture": "#bed"},
"east": {"uv": [5.5, 1.5, 7, 5.5], "rotation": 90, "texture": "#bed"},
"west": {"uv": [0, 1.5, 1.5, 5.5], "rotation": 270, "texture": "#bed"},
"up": {"uv": [1.5, 1.5, 5.5, 5.5], "texture": "#bed"},
"down": {"uv": [7, 1.5, 11, 5.5], "rotation": 180, "texture": "#bed"}
}
}
]
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/black"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/black"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/brown"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/brown"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/cyan"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/cyan"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/green"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/green"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/light_blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/light_blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/light_gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/light_gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/lime"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/lime"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/magenta"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/magenta"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/orange"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/orange"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/pink"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/pink"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/purple"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/purple"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/red"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/red"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/white"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/white"
}
}

Some files were not shown because too many files have changed in this diff Show More