mirror of
https://github.com/BlueMap-Minecraft/BlueMap.git
synced 2024-09-27 14:52:57 +02:00
Merge branch 'master' into fix/heightmaps
This commit is contained in:
commit
1d37b38b32
2
.gitignore
vendored
2
.gitignore
vendored
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
@ -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},
|
||||||
|
@ -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);
|
||||||
})
|
})
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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") {
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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",
|
||||||
|
@ -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 },
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "bluemap:block/missing" }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "block/cube_all",
|
||||||
|
"textures": {
|
||||||
|
"all": "bluemap:block/missing"
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
@ -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
|
||||||
|
}
|
||||||
|
}
|
@ -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"
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "block/bubble_column" }
|
||||||
|
}
|
||||||
|
}
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": {
|
||||||
|
"model": "minecraft:block/short_grass"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "block/lava" }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "block/water" }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/black"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/black"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/blue"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/blue"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/brown"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/brown"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/cyan"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/cyan"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/gray"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/gray"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/green"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/green"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/light_blue"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/light_blue"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/light_gray"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/light_gray"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/lime"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/lime"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/magenta"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/magenta"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/orange"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/orange"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/pink"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/pink"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/purple"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/purple"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/red"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_head",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/red"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent":"block/bed/bed_foot",
|
||||||
|
"textures": {
|
||||||
|
"bed": "entity/bed/white"
|
||||||
|
}
|
||||||
|
}
|
@ -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
Loading…
Reference in New Issue
Block a user