From cac8521e453229ee4bb52d42a2efb4a22f1d120a Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Tue, 19 Nov 2024 23:36:32 +0100 Subject: [PATCH] First version! Currently only includes vanilla leaves --- Better-Leaves-Lite-vanilla+0.1.zip | Bin 0 -> 41364 bytes LICENSE | 21 +++ README.md | 32 +++- assets/minecraft/models/block/leaves.json | 40 +++++ assets/minecraft/models/block/leaves1.json | 40 +++++ assets/minecraft/models/block/leaves2.json | 40 +++++ assets/minecraft/models/block/leaves3.json | 40 +++++ assets/minecraft/models/block/leaves4.json | 40 +++++ .../models/block/leaves_notint1.json | 40 +++++ .../models/block/leaves_notint2.json | 40 +++++ .../models/block/leaves_notint3.json | 40 +++++ .../models/block/leaves_notint4.json | 40 +++++ gen-pack.py | 147 ++++++++++++++++++ .../textures/block/acacia_leaves.png | Bin 0 -> 210 bytes .../textures/block/azalea_leaves.png | Bin 0 -> 209 bytes .../minecraft/textures/block/birch_leaves.png | Bin 0 -> 198 bytes .../textures/block/cherry_leaves.png | Bin 0 -> 276 bytes .../textures/block/dark_oak_leaves.png | Bin 0 -> 201 bytes .../block/flowering_azalea_leaves.png | Bin 0 -> 232 bytes .../textures/block/jungle_leaves.png | Bin 0 -> 238 bytes .../textures/block/mangrove_leaves.png | Bin 0 -> 221 bytes .../minecraft/textures/block/oak_leaves.png | Bin 0 -> 202 bytes .../textures/block/pale_oak_leaves.png | Bin 0 -> 221 bytes .../textures/block/spruce_leaves.png | Bin 0 -> 212 bytes input/mask.png | Bin 0 -> 6243 bytes input/overrides.json | 6 + leaves.bbmodel | 1 + pack.mcmeta | 7 + pack.png | Bin 0 -> 7262 bytes 29 files changed, 573 insertions(+), 1 deletion(-) create mode 100644 Better-Leaves-Lite-vanilla+0.1.zip create mode 100644 LICENSE create mode 100644 assets/minecraft/models/block/leaves.json create mode 100644 assets/minecraft/models/block/leaves1.json create mode 100644 assets/minecraft/models/block/leaves2.json create mode 100644 assets/minecraft/models/block/leaves3.json create mode 100644 assets/minecraft/models/block/leaves4.json create mode 100644 assets/minecraft/models/block/leaves_notint1.json create mode 100644 assets/minecraft/models/block/leaves_notint2.json create mode 100644 assets/minecraft/models/block/leaves_notint3.json create mode 100644 assets/minecraft/models/block/leaves_notint4.json create mode 100644 gen-pack.py create mode 100644 input/assets/minecraft/textures/block/acacia_leaves.png create mode 100644 input/assets/minecraft/textures/block/azalea_leaves.png create mode 100644 input/assets/minecraft/textures/block/birch_leaves.png create mode 100644 input/assets/minecraft/textures/block/cherry_leaves.png create mode 100644 input/assets/minecraft/textures/block/dark_oak_leaves.png create mode 100644 input/assets/minecraft/textures/block/flowering_azalea_leaves.png create mode 100644 input/assets/minecraft/textures/block/jungle_leaves.png create mode 100644 input/assets/minecraft/textures/block/mangrove_leaves.png create mode 100644 input/assets/minecraft/textures/block/oak_leaves.png create mode 100644 input/assets/minecraft/textures/block/pale_oak_leaves.png create mode 100644 input/assets/minecraft/textures/block/spruce_leaves.png create mode 100644 input/mask.png create mode 100644 input/overrides.json create mode 100644 leaves.bbmodel create mode 100644 pack.mcmeta create mode 100644 pack.png diff --git a/Better-Leaves-Lite-vanilla+0.1.zip b/Better-Leaves-Lite-vanilla+0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..5983798ac1bdfddf1a15fe32954294bf432d2a25 GIT binary patch literal 41364 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 }63;^J&$=KQ?g zVgBPxdr6kK&-GSbc!XPkTi5FjDx7MGi_YS?rKZ}o?TP4hb~^L*U;q1)AMoS1-!`P% zIhb46{?}6XKmPguS6|XD+O0dPp7GuD50W z8}5Jnw}0mTuwI3ZONVenuQy-)GZ)fG@OzDau%YA5A#9rK&#QmS{=LpW*wAt15O(t) zuz#=h4>ok%IE1Zxy*u^ajvIEpq2t0K?Bg5RKle1it~hkqH-!H3df(qakNjsk?3zPI zbwlU^*Zyn&o({X}&_UY}`q&@QVb>ixCL2O`zutuV&tw0k#{zcYp);-_coOVC!o#jS zbU-x(|L)K5uuBh}E)Bu!ly8XAKCelz~(wh!2~hYody;PY^A9R1ID*tLg_ zV}{`6@csx7yY|pI$`Jg{pW$KG9y$OSf=|T1Y4pEzqQI^_bb2uaFL1rz^Pf+vU+}PN z4;?)W!B6}d9(L`abAusx&+9KXe=vI3wTBMly zZWn?#Ci&DaRxSjOK>SB|*tLfax`p8LZ^Zx7tpmIE&?&VLyzKS%=6`zzq3iez;=WIfR@Tvcg zLa^rqIvNuq)b)QAf;~6TVU`dfKj8oIh+xkVbo?YlNPy-hA*i-6*mDCN9SISb`cnbe za{?Xv2odn7{lg=GJr~f4jSv9_x<3^7eGXuSEkXqPZWMqKz4-Gj4p`}c5WFYDP2>Ls z|9kym#o0mdOiX`-|GoOK64xO3~hp`G<1_+;Um z@xNUD!NNluWkc|ccW=i3asdSk4{gN@!P80IjQ{0JJS;r4X(N_4R0cej# zh(NFW%>qzg!C(nM8_q!ljFfK{_`4Gr#yJLUN(B+hSHD>Z>QfljkwDwyKm@$5qlkYy ziGS{T|7msj(e(|zJV1NWK*+`qZy^7&Ho#&-`@lfha*u9c|GF~3fizK%L)O4 zPc!<(7~$tL9hNNtn($ML$cy+Smbkk)z*F+dR}1k***8 T!NI9t{|mgn=DrB}@xT8EiJ7wU literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..bb06002 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Motschen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 3e81a69..deb6a7c 100644 --- a/README.md +++ b/README.md @@ -1 +1,31 @@ -# BetterLeavesLite \ No newline at end of file +# Motschen's Better Leaves: Lite +A more optimized version of my Better Leaves pack aiming to be the best-performing of all, while still looking spectacular. + +### In which ways is this more optimized than the regular version? +Glad you asked. +First of all, the leaf models use way less elements in comparison, as the round textures are generated in advance instead of being faked as round during rendering. + +### Does it also outperform packs made by other authors? +Yes, probably. +Most other packs use two seperate textures: one for the regular part of the leaves and one for the bushy part. +This is generally not a problem, since Minecraft bakes textures into an atlas (a big texture containing all the smaller block textures), to avoid constant texture rebinds. +However, using two textures in a model can still cause some overhead, as the game has to locate the coordinates of both on the atlas. +Additionally, the atlas size might have to be increased to fit two textures per leaf block – also resulting in performance loss. + +This pack mitigates this by just replacing the regular leaf texture with one round version, which contains the default texture in the middle. + +### Are there any downsides? +As with everything good, there are a couple caviats, but don't worry, as I've designed the pack with them in mind. + +The first is the fact that – compared to the regular pack – there is no compatibility with texturepacks that feature custom leaf textures. +You can however easily build your own version of the pack with custom textures by using the script included in this repo (see more below). +This should also work with higher-res textures, though your mileage may wary. + +The second downside is that mod-support always has to be explicitly added, while the regular version has basic support for all mods using the vanilla leaf model as a base. +Though I aim to solve this over time by just adding that explicit support, also resulting in better quality than the basic support would bring. + +## Building versions for your texturepack (or mod) +To build your own version, simply download this repository and replace the textures in the input/assets folder with those of your texturepack. +Then, make sure you've installed Python (available for every OS). +After that, simply open a terminal in the main directory and run `python3 gen-pack.py ` +Tada! You should now have a zip file ready for use. Have fun :) \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves.json b/assets/minecraft/models/block/leaves.json new file mode 100644 index 0000000..398fa3b --- /dev/null +++ b/assets/minecraft/models/block/leaves.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north", "tintindex": 0}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west", "tintindex": 0}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up", "tintindex": 0}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "from": [-5.5, -6, 14], + "to": [26.5, 22, 14], + "rotation": {"angle": 45, "axis": "y", "origin": [2, 0, 14]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + }, + { + "from": [-5.5, -6, 2], + "to": [26.5, 22, 2], + "rotation": {"angle": -45, "axis": "y", "origin": [2, 0, 2]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves1.json b/assets/minecraft/models/block/leaves1.json new file mode 100644 index 0000000..67163c5 --- /dev/null +++ b/assets/minecraft/models/block/leaves1.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north", "tintindex": 0}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west", "tintindex": 0}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up", "tintindex": 0}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "from": [-7.98959, -6, 7.98959], + "to": [24.01041, 22, 7.98959], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8.01041, 8, 7.98959]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + }, + { + "from": [-6.5, -6, 3], + "to": [25.5, 22, 3], + "rotation": {"angle": -45, "axis": "y", "origin": [1, 0, 3]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves2.json b/assets/minecraft/models/block/leaves2.json new file mode 100644 index 0000000..3b827d7 --- /dev/null +++ b/assets/minecraft/models/block/leaves2.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north", "tintindex": 0}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west", "tintindex": 0}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up", "tintindex": 0}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "from": [-5.5, -6, 15], + "to": [26.5, 22, 15], + "rotation": {"angle": 45, "axis": "y", "origin": [2, 0, 15]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + }, + { + "from": [-7.98959, -6, 8.01041], + "to": [24.01041, 22, 8.01041], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.01041, 8, 8.01041]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves3.json b/assets/minecraft/models/block/leaves3.json new file mode 100644 index 0000000..ab56c4f --- /dev/null +++ b/assets/minecraft/models/block/leaves3.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north", "tintindex": 0}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west", "tintindex": 0}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up", "tintindex": 0}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "from": [-6.98223, -6, 8.99264], + "to": [25.01777, 22, 8.99264], + "rotation": {"angle": 22.5, "axis": "y", "origin": [9.01041, 8, 9]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + }, + { + "from": [9.00305, -6, -6.99264], + "to": [9.00305, 22, 25.00736], + "rotation": {"angle": 22.5, "axis": "y", "origin": [9.01041, 8, 9]}, + "faces": { + "east": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "west": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves4.json b/assets/minecraft/models/block/leaves4.json new file mode 100644 index 0000000..b65cb64 --- /dev/null +++ b/assets/minecraft/models/block/leaves4.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north", "tintindex": 0}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west", "tintindex": 0}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up", "tintindex": 0}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "from": [8.00305, -6, -8.00736], + "to": [8.00305, 22, 23.99264], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.01041, 8, 8]}, + "faces": { + "east": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "west": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + }, + { + "from": [-7.98223, -6, 8.00736], + "to": [24.01777, 22, 8.00736], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.01041, 8, 8]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all", "tintindex": 0} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves_notint1.json b/assets/minecraft/models/block/leaves_notint1.json new file mode 100644 index 0000000..7ee7e85 --- /dev/null +++ b/assets/minecraft/models/block/leaves_notint1.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north"}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south"}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down"} + } + }, + { + "from": [-7.98959, -6, 7.98959], + "to": [24.01041, 22, 7.98959], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8.01041, 8, 7.98959]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + }, + { + "from": [-6.5, -6, 3], + "to": [25.5, 22, 3], + "rotation": {"angle": -45, "axis": "y", "origin": [1, 0, 3]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves_notint2.json b/assets/minecraft/models/block/leaves_notint2.json new file mode 100644 index 0000000..981e72f --- /dev/null +++ b/assets/minecraft/models/block/leaves_notint2.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north"}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south"}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down"} + } + }, + { + "from": [-5.5, -6, 15], + "to": [26.5, 22, 15], + "rotation": {"angle": 45, "axis": "y", "origin": [2, 0, 15]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + }, + { + "from": [-7.98959, -6, 8.01041], + "to": [24.01041, 22, 8.01041], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.01041, 8, 8.01041]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves_notint3.json b/assets/minecraft/models/block/leaves_notint3.json new file mode 100644 index 0000000..112500f --- /dev/null +++ b/assets/minecraft/models/block/leaves_notint3.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north"}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south"}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down"} + } + }, + { + "from": [-6.98223, -6, 8.99264], + "to": [25.01777, 22, 8.99264], + "rotation": {"angle": 22.5, "axis": "y", "origin": [9.01041, 8, 9]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + }, + { + "from": [9.00305, -6, -6.99264], + "to": [9.00305, 22, 25.00736], + "rotation": {"angle": 22.5, "axis": "y", "origin": [9.01041, 8, 9]}, + "faces": { + "east": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "west": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + } + ] +} \ No newline at end of file diff --git a/assets/minecraft/models/block/leaves_notint4.json b/assets/minecraft/models/block/leaves_notint4.json new file mode 100644 index 0000000..be8d0d5 --- /dev/null +++ b/assets/minecraft/models/block/leaves_notint4.json @@ -0,0 +1,40 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [32, 32], + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "north"}, + "east": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "east"}, + "south": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "south"}, + "west": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "west"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "up"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#all", "cullface": "down"} + } + }, + { + "from": [8.00305, -6, -8.00736], + "to": [8.00305, 22, 23.99264], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.01041, 8, 8]}, + "faces": { + "east": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "west": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + }, + { + "from": [-7.98223, -6, 8.00736], + "to": [24.01777, 22, 8.00736], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.01041, 8, 8]}, + "faces": { + "north": {"uv": [0, 1, 16, 15], "texture": "#all"}, + "south": {"uv": [0, 1, 16, 15], "texture": "#all"} + } + } + ] +} \ No newline at end of file diff --git a/gen-pack.py b/gen-pack.py new file mode 100644 index 0000000..232a546 --- /dev/null +++ b/gen-pack.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""This script can automatically generate blockstate and block model files, as well as textures for the Better Leaves Lite resourcepack.""" + +import argparse +import json +import os +import zipfile +from PIL import Image + +def autoGen(notint_overrides): + print("Generating assets...") + for root, dirs, files in os.walk("./input"): + for infile in files: + if infile.endswith(".png") and (len(root.split("/")) > 3): + namespace = root.split("/")[3] + block_id = infile.replace(".png", "") + print(namespace+":"+block_id) + + # Generate textures + outfolder = root.replace("assets", "").replace("input", "assets") + os.makedirs(outfolder, exist_ok=True) + outfile = os.path.splitext(os.path.join(outfolder, infile))[0] + ".png" + if infile != outfile: + try: + # First, let's open the regular texture + vanilla = Image.open(os.path.join(root, infile)) + width, height = vanilla.size + # Second, let's generate a transparent texture that's twice the size + transparent = Image.new("RGBA", [int(2 * s) for s in vanilla.size], (255, 255, 255, 0)) + out = transparent.copy() + + # Now we paste the regular texture in a 3x3 grid, centered in the middle + for x in range(-1, 2): + for y in range(-1, 2): + out.paste(vanilla, (int(width / 2 + width * x), int(height / 2 + height * y))) + + # As the last step, we apply our custom mask to round the edges and smoothen things out + mask = Image.open('input/mask.png').convert('L').resize(out.size) + out = Image.composite(out, transparent, mask) + + # Finally, we save the texture to the assets folder + out.save(outfile, vanilla.format) + except IOError: + print("Error while generating texture for '%s'" % infile) + + # Generate blockstates & models + + # Check if the block appears in the notint overrides + if (namespace+":"+block_id) in notint_overrides: + generateBlockstateAndModel(namespace, block_id, True) + generateItemModel(namespace, block_id) + print ("-> No tint") + else: + generateBlockstateAndModel(namespace, block_id, False) + +def generateBlockstateAndModel(mod_namespace, block_name, notint): + + # Create structure for blockstate file + block_state_file = f"assets/{mod_namespace}/blockstates/{block_name}.json" + block_state_data = { + "variants": { + "": [] + } + } + # Add four rotations for each of the four individual leaf models + for i in range(1, 5): + block_state_data["variants"][""] += { "model": f"{mod_namespace}:block/{block_name}{i}" }, { "model": f"{mod_namespace}:block/{block_name}{i}", "y": 90 }, { "model": f"{mod_namespace}:block/{block_name}{i}", "y": 180 }, { "model": f"{mod_namespace}:block/{block_name}{i}", "y": 270 }, + + # Create blockstates folder if it doesn't exist already + if not os.path.exists("assets/{}/blockstates/".format(mod_namespace)): + os.makedirs("assets/{}/blockstates/".format(mod_namespace)) + + # Write blockstate file + with open(block_state_file, "w") as f: + json.dump(block_state_data, f, indent=4) + + + # Create models folder if it doesn't exist already + if not os.path.exists("assets/{}/models/block/".format(mod_namespace)): + os.makedirs("assets/{}/models/block/".format(mod_namespace)) + + base_model = "leaves" + if (notint): + base_model = "leaves_notint" + # Create the four individual leaf models + for i in range(1, 5): + # Create structure for block model file + block_model_file = f"assets/{mod_namespace}/models/block/{block_name}{i}.json" + block_model_data = { + "parent": f"block/{base_model}{i}", + "textures": { + "all": f"{mod_namespace}:block/{block_name}" + } + } + with open(block_model_file, "w") as f: + json.dump(block_model_data, f, indent=4) + +def generateItemModel(mod_namespace, block_name): + # Create models folder if it doesn't exist already + if not os.path.exists("assets/{}/models/item/".format(mod_namespace)): + os.makedirs("assets/{}/models/item/".format(mod_namespace)) + + item_model_file = f"assets/{mod_namespace}/models/item/{block_name}.json" + item_model_data = { + "parent": f"{mod_namespace}:block/{block_name}1" + } + with open(item_model_file, "w") as f: + json.dump(item_model_data, f, indent=4) + +# See https://stackoverflow.com/a/1855118 +def zipdir(path, ziph): + # ziph is zipfile handle + for root, dirs, files in os.walk(path): + for file in files: + ziph.write(os.path.join(root, file), + os.path.relpath(os.path.join(root, file), + os.path.join(path, '..'))) + + + +# This is the main entry point, executed when the script is run +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='This script can automatically generate files for the Better Leaves Lite resourcepack.', + epilog='Feel free to ask for help at http://discord.midnightdust.eu/') + + parser.add_argument('version', type=str) + args = parser.parse_args() + + print(args) + print() + + # Loads overrides from the json file + f = open('./input/overrides.json') + data = json.load(f) + f.close() + + autoGen(data['noTint']); + + with zipfile.ZipFile('Better-Leaves-Lite-'+args.version+".zip", 'w', zipfile.ZIP_DEFLATED) as zipf: + zipdir('assets/', zipf) + zipf.write('pack.mcmeta') + zipf.write('pack.png') + zipf.write('LICENSE') + zipf.write('README.md') \ No newline at end of file diff --git a/input/assets/minecraft/textures/block/acacia_leaves.png b/input/assets/minecraft/textures/block/acacia_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..81c370267c6bcff3f458d612ea4ef72c0838e5e3 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW1=3r$Zk;!8UPn6!y`$V?4+yP$4jwDX+0RgEoEo!=yQOx7^*+j}vS zi~sj_SEY&9wY9(O4pLRWl)TZs{pDphslJtqU$Zax&KrC-kn;%8W(H4JKbLh*2~7ah C{8C~7 literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/azalea_leaves.png b/input/assets/minecraft/textures/block/azalea_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..83c96ec13141621ae355fd5c61c89ac253938612 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=0nRbaNUE12T22eAJRA zivI@+F_r}R1v5B2yO9Qx_jGX#skp^^?4W3i0uSo}{bdYH(F_xG6%@r9CjHC4bb3$Y zyGT=mi!at$6&)(-zf|9nwCRRElf2~evIoM9ax1j0;-8DFKK^gE#`#E=#h-OY-Q)y< z^Nvq`u~ BND=@5 literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/birch_leaves.png b/input/assets/minecraft/textures/block/birch_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..b29f8c01e47ce5db20fcb7f226b920ea9b057ed1 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=8DhZl5u8Mn`*lL2ki$ z+YS?;5MxP@UoeBivm0qZPO7JiV@Sm<(UTVi4;k>d9BeOTH3(5q({$*JJuq>_|5*)x zW4&CbOXsfj5Yy35DGZXHFMDm{W8uXc)?H$)dm!P{tcJO1X{@8>FVdQ&MBb@0M;)_h5!Hn literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/cherry_leaves.png b/input/assets/minecraft/textures/block/cherry_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..0d66833153ea2dfb27cc47204953a0c8ec6d10e3 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=3${z5jFi`S+c7-Y-A< zZQ+$itM-4McJ}q8gU@QWzRX(rC~Q*8Ox@ykwS+PSp6>j&Kn;u~L4Lsu4$p3+0Xb7W zT^vIyZY3wYc$iRN_F%@r1DYBS59FM=a^S(j6*r5HIk+}Du2|vmtS@~sck_a2iw;bj zHb+@OkWtM2U^UO2u354??Ja5s1sq%@W~)|f8WH1m zLIJ$OlS8MdE>>V}eyVbHt=AgHGd#y8uUXXNlKJTr|U XGe^by2S=+G(18q|u6{1-oD!M<>6mk$ literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/dark_oak_leaves.png b/input/assets/minecraft/textures/block/dark_oak_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..99ee5c25911ac36c0e69f1341254ee33267eaba6 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=8DhZl5u8Ms0O%L2kjj zT5m?65MxP@UoeBivm0qZPKKw8V@Sm<)`mvjBMKZ0{ErwstQjuFA2`OClk$J2-IR=; zldb{lc_b(Nn&Ihw?VB`DIh*yu*=w@YPdr;Uaq`yPSEq>Q$FI82?>6_v_Qe~Ey=rY* wdHx=h?z|e(w&v~^sTtOt(ihjx75K}%XeZClx!DTRKsy;cUHx3vIVCg!0Gr24O8@`> literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/flowering_azalea_leaves.png b/input/assets/minecraft/textures/block/flowering_azalea_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6f6ea6bc8ef171076dd72cd0433206e7d0c107 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=1I)AMZ*!S1?I8r@?Su zKu18Pj+KvE%wH~lpd4dKkY6x^!?PP{Ku(>fi(^Q|E#6~}e9a01tQY2I%&isfe=twP zY5S5%FHKi8KNeft`1*CU?UGrwS*pqx?k~@%5((XLe)5Bs?!RwYZtwMubz?Z}#%p#+ z{7jj&Qk?RUy44BxGme@cwW?IV=(0gYdY5&hmc80r$EeFi1Yb_JK*H0#gCvW(~MA|)g9|`W#*!evU3NZkcwNp#}0}%D+sV2(4VmTmj(mNdqvLj8%r5d zHvSKLG>1)movwQQW3%G3nX_lO3CyisB)L%9?Q%=9mfQ2g9?={ffo%HLUO&#By8K9X z%@qZn=epPDa-`RO4A*#gMx*ja%Z#Zn0>dKQ*X(4x?X_fv)t=RHwJZKJ&f*f!+05P} Q4|D{Br>mdKI;Vst0OqJu0RR91 literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/oak_leaves.png b/input/assets/minecraft/textures/block/oak_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..0f1793d68df14a8551ca59d4c428bba24acb9c50 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=2hB?3^)kMtNy@MoPxX z_!Ut=A;yv*zhDN3XE)M-oJ>y_$B>F!tPPBUhZT4j>@}G#l`t_$WH2)3^w#@Y2bnzU z?^bB%TWPR0`b6itxAF#6%Y&r0M2CH1+q^@*ygK6d78#=tpK{&%`zGdZDKIIk7J2Bk vM2=BeYFd9l>f1%(NAJwsA-H_%9@qcZjCg%!CBB;qw3NZq)z4*}Q$iB}U8P5f literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/pale_oak_leaves.png b/input/assets/minecraft/textures/block/pale_oak_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6fbfa90d4878662354d2fbe4ef82b206261040 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW&CE*&G8ZhH)7;Sz5gTsn zU@OLIVg(dpDhcun{?G7qyMY&wSK;a67*cVI^`N0xvw{HYf%neU0(=|ZwAG1TVs?_B zfAa78Ns=u(d3PQj*?!!h|G*E$YueYux8+<^W()gxdfl=^0@shGb$3507O?zcx{}Ls zN92+XoF7(l+3tPdlW=z)iyrr5TYiu1u+uvdWpb8<% Qfo@>%boFyt=akR{0PBEJ4*&oF literal 0 HcmV?d00001 diff --git a/input/assets/minecraft/textures/block/spruce_leaves.png b/input/assets/minecraft/textures/block/spruce_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..a243dac85c0f3eff5460aa9ecec03d1a2879a413 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ1=6!-&6+V|Mpsu?XlSUv zzrT}{Q$<2kC{Tj2B*-tA!Qt7BG$1F})5S5Q;+AO7M&82)JO?y5KggKaImB9dYs`tQ zRpgiW@Za7f&O(5tQ&2y6()^X{f9lCq)#W$xtmJzB@I;wr$E;hNx#4@|dlZ_PeU`3T zxaQ>{j{9}1G(&Fgz0M&w?;=O;^?8eK+;r*v`LecUz5R<10=3!&-S~fvE^jK+aNm~mrl0hQKIK}~mNvEtprwV(v>_Y|4>V>~Y_5aAJ`S3M`?CQHA}6jh?T!Xiuhy!yszwVo$;+?+MXSRJ3?ncTs>2Aq ziO?B93~y^HF93i@kvm9i28fqn2Eh}|pq*f51GXTZwFtP2((K`J8!Eu#$1v+*Y}}qA zh7%+h^nc!e7RjGA!#)E{1j&G}{?mvBk%&ZMQIT3Cu~rQy_dfPax;@A4JMPo>@HZ6Qcr&3WQlAu|z7%1`fOPp;7|AP>_`+6oSzw z!8jt6XBCuVwW7jDNU>r`k#70A*CiFxcYZXy@sq2SdRM4JDjP9!RB_3;hsG->OvJ0I z4Mr1TvDVF)X|vCo+w|zX`Oe1{P;T1eZDtmQ+19p5w0-H*&#YLvYW14V=hwfmVdION zUfSIC%Qw2Wz4=zp+rN5$*X|GYe7N`5`wtxa{T~kf@lS_8J$mf3<0n2pdFtHxFD_jC z$EC~v{PNnru77jm=D+*Cy#;weo{3M4*Y zD)Q}}PUTj9#&-M8K4dF@Uq8~-iA*{xyM3n<>Em}!`uY~U#0E3QrQ^XM<&I^spcqtN z98%c@;PZMf1N2lE@aFEn1OIN6SO^Tu)DqAs0_o|c=anfsQ(pq{9uZ(-NlKX_@7FgV zH-NHZnGy;UlkI*%_v?>?ahLe|Js418f+SBaGpJZ%WUyC|6A(X6kgI|Rk}FtpW!*1dtoTcJ&w=Qs$H$#;-FPMUR^M0W9{#N9 zfU@Lh&kjS)=%0z(Mm%+N*5)di6X||?k>E^u{>KhFEa;1@j|$IJpp8G>cGfJo-Ba)L z|8}Q(!A}ky_P_tqh8IVEFzl;>(BWcv#{`urYbDP#uA`7YEdQBfwz16(HknQs4(05T zl(?qh9RV49q)(=nT%0zNhA4!CG_)EDG_ z=W3=#gCw<>W>FXIW&CEv*T3mipp4tBm|x}4I)WCunXxSm(Q}v9H&II$Qzo}!>J(W` zlmGxenkCVwuf-oGqGkn$O8^^oYZNHw!Y(!|oZw_;34~}ASL5J#Ru^U3bc!i5v?k>C z5RKLuaR_i{Ry4D0kkDu%k%&5?R|i5~4Q4W#G+LcTr&9qBRk+>Hl2MgETmd0s7*;w= zg_t1A1pFw(Bwc}4)~rx~aWs*iFX(V2;r-#b3P2A{lniPxwN~TvY0@LYY+V}wi6@jX zBHYv-q&1CnIM5oR=(;xA&sL;ExT$1(ur<`e(Q#86x`p-u*D#nB8!#n2!zLr31YX7$ znPH^X(ftSNUSOZimOwVpLE8zTuJ3ujRf-{XS zT8o)HCKX;qQ!3o0B~>mD?ot``x+<56G|`4?V;Yp*A7)8EMMEe6u4Vv^Tkp|Vn+yh( z(dBllaJ>On8SyGiMdFm!RAtcW^agDj#GDWVs*-F;&k91hAr!6CS7R8dqCL1rg;O4n z%2bURRfZ~qL61|IR42Gu^G6CeB;~pB@S7HJW?Gso@;b9ycH^)(0MA z;HjudJ{IHRfy95zPkd2+%qdWGXp%wcJ0#bTT!T_zP|icuH6+)d6d08AP<8!aa>-IJ zRi z%+@(sOTY(D;|O;=q}^zQVVhBSJeO zk^G&_E9O=TtxWY3CS~EohhNn^NvvLSdbQWS>dL-$ef{6|6mK7u_r>vOUBUj=wUWw> zcw}B>Vb?~Z@HwqFx4h@mNYATpc3sY1KW4ICbz}EYkQ`#KtG8~SzOdte&x%Bw literal 0 HcmV?d00001 diff --git a/input/overrides.json b/input/overrides.json new file mode 100644 index 0000000..6dc2d2e --- /dev/null +++ b/input/overrides.json @@ -0,0 +1,6 @@ +{ + "noTint": [ + "minecraft:azalea_leaves", + "minecraft:flowering_azalea_leaves" + ] +} \ No newline at end of file diff --git a/leaves.bbmodel b/leaves.bbmodel new file mode 100644 index 0000000..5de9d39 --- /dev/null +++ b/leaves.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"java_block","box_uv":false},"name":"leaves","parent":"block/block","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[0,0,0],"to":[16,16,16],"autouv":0,"color":2,"origin":[0,0,0],"faces":{"north":{"uv":[8,8,24,24],"tint":0,"cullface":"north","texture":0},"east":{"uv":[8,8,24,24],"tint":0,"cullface":"east","texture":0},"south":{"uv":[8,8,24,24],"tint":0,"cullface":"south","texture":0},"west":{"uv":[8,8,24,24],"tint":0,"cullface":"west","texture":0},"up":{"uv":[8,8,24,24],"tint":0,"cullface":"up","texture":0},"down":{"uv":[8,8,24,24],"tint":0,"cullface":"down","texture":0}},"type":"cube","uuid":"0677d295-59fc-3179-85fb-172d66f519c0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-5.5,-6,14],"to":[26.5,22,14],"autouv":0,"color":4,"rotation":[0,45,0],"origin":[2,0,14],"faces":{"north":{"uv":[0,2,32,30],"tint":0,"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,2,32,30],"tint":0,"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"b54ae4f7-8bc2-fc49-57d2-cc620245963f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-5.5,-6,2],"to":[26.5,22,2],"autouv":0,"color":4,"rotation":[0,-45,0],"origin":[2,0,2],"faces":{"north":{"uv":[0,2,32,30],"tint":0,"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,2,32,30],"tint":0,"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"c1a53dc9-7942-a72f-b289-5ad6c45f762a"}],"outliner":["0677d295-59fc-3179-85fb-172d66f519c0","b54ae4f7-8bc2-fc49-57d2-cc620245963f","c1a53dc9-7942-a72f-b289-5ad6c45f762a"],"textures":[{"path":"","name":"#all","folder":"","namespace":"","id":"all","group":"","width":16,"height":16,"uv_width":32,"uv_height":32,"particle":true,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"3d387c5e-c9eb-ff67-154e-060ff81133ae","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAHtJREFUOE/dUzEOwCAI1IUfOPH/nykLvsCFBpsmDDQRupUFFo47OKqISEnGGKNUBdACAMpaK5SJ6AZg5nCzDptznjNAxC3UDgsxaK1tACv3rww8rXri4x1429aTHV/BTrJNKQZvYI9jXR98ZhD5iZATvUfbTuy9ixbZuAARBIdMI/Rl8wAAAABJRU5ErkJggg=="},{"path":"/home/martin/Dokumente/GitHub/BetterLeavesLite/assets/minecraft/textures/block/oak_leaves.png","name":"oak_leaves.png","folder":"block","namespace":"minecraft","id":"1","group":"","width":32,"height":32,"uv_width":32,"uv_height":32,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"898d09b0-bc9e-012e-77bc-08939e1b0a64","relative_path":"../../textures/block/oak_leaves.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAlFJREFUWEe1V8tpAzEU1FZgUsKSFOBLGjABn31LAYZsA8E1mDSwgRSQm8+G4EoStoTgCjaMYMTsi7Raee1cgm3Ne0/zfqPKFf4126bfPG9c99N5ZPPSVLvXXV8/1K777tz+bV+VmCw67B1um54OFncLB8cIon1vw/f4fPw69uunddZ+9gCc0TgMI4D2ow0OcevVeuXgDOdwhgFOCSIbAIycjid3/j17u3CuDpCK+r72ATAVNgjgU6mJBsDI6Rw0M9/KBr7jWaYGaSEjMbytj38BKAg30xum2NC0AIMbI+gY3tZFNADrFCA45/f4T5pBO25FivUccRavQYymQOmGYdJHA7YjNAgWJVMXw+O3EACMLR+X4WYxuplvDYwMoEhL8GTQBwCDaCf2dIpunQN2BlyCB2OBAe3hGF2aazKQmgFT8WDBB8Aq1hbRIUKGdBYoS4fPw2A+aHsqwxaPOhkUIeuAhWPTo7MeQXEAMfBL8H606oTD59iMV+e2QOfgPQNj+cVQYZ/rJuSQ4TbkGVsfOXxgQG+t0xA3t7nTeaAjWLuI0zCHDwxwn+t6ZZVz8tHZmB4oxYcVGtvnOpK10KbqgSl4v0Jz+3yuHhjDewam7PO5eiCFH+wCUJvb53P1gMUPJiHZGNvnMXVUogcsPnRByT6fqwcUH1KAYizd51fVA5z73NO31AO69AbLiCv51npAlXVSkln5dU09kGTg1nog9jbIPkxUrs3RA0UPE2VC16t2ifbzmB6wD5HswyQGYIuW6oEpL+VsCmxAVnDG9EDu1vr7H2D/VKRfkhR8AAAAAElFTkSuQmCC"}]} \ No newline at end of file diff --git a/pack.mcmeta b/pack.mcmeta new file mode 100644 index 0000000..1654b65 --- /dev/null +++ b/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "pack_format": 15, + "supported_formats": [15, 99], + "description": "§2Version 0.1 §aby Motschen §e©Motschen 2024 | MIT Licence" + } +} diff --git a/pack.png b/pack.png new file mode 100644 index 0000000000000000000000000000000000000000..d6485f940014d3d82e5c46b2c14dec68dd406009 GIT binary patch literal 7262 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 sOY!#qYvI-3TK}?0`p@uZcs3CEZ?;wq{;