From 0a8e73d9d98ad691ab0a0d3f25836719f80073d9 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 2 Nov 2020 01:42:47 +0300 Subject: [PATCH] Bookshelves --- .../blocks/basis/BlockBookshelf.java | 61 +++++++++ .../blocks/{ => basis}/BlockOre.java | 116 +++++++++--------- .../blocks/complex/WoodenMaterial.java | 3 + .../ru/betterend/interfaces/Patterned.java | 1 + .../java/ru/betterend/registry/EndBlocks.java | 2 +- .../betterend/patterns/block/bookshelf.json | 7 ++ .../textures/block/lacugrove_door_bottom.png | Bin 0 -> 2474 bytes .../textures/block/lacugrove_door_side.png | Bin 0 -> 1721 bytes .../textures/block/lacugrove_door_top.png | Bin 0 -> 2050 bytes .../textures/block/lacugrove_trapdoor.png | Bin 0 -> 2082 bytes .../block/mossy_glowshroom_bookshelf.png | Bin 0 -> 691 bytes .../entity/chest/dragon_tree_chest.png | Bin 0 -> 2969 bytes .../entity/chest/dragon_tree_chest_left.png | Bin 0 -> 2571 bytes .../entity/chest/dragon_tree_chest_right.png | Bin 0 -> 2739 bytes .../textures/item/lacugrove_door.png | Bin 0 -> 2187 bytes 15 files changed, 131 insertions(+), 59 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/basis/BlockBookshelf.java rename src/main/java/ru/betterend/blocks/{ => basis}/BlockOre.java (95%) create mode 100644 src/main/resources/assets/betterend/patterns/block/bookshelf.json create mode 100644 src/main/resources/assets/betterend/textures/block/lacugrove_door_bottom.png create mode 100644 src/main/resources/assets/betterend/textures/block/lacugrove_door_side.png create mode 100644 src/main/resources/assets/betterend/textures/block/lacugrove_door_top.png create mode 100644 src/main/resources/assets/betterend/textures/block/lacugrove_trapdoor.png create mode 100644 src/main/resources/assets/betterend/textures/block/mossy_glowshroom_bookshelf.png create mode 100644 src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest.png create mode 100644 src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_left.png create mode 100644 src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_right.png create mode 100644 src/main/resources/assets/betterend/textures/item/lacugrove_door.png diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBookshelf.java b/src/main/java/ru/betterend/blocks/basis/BlockBookshelf.java new file mode 100644 index 00000000..75bbf5e0 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockBookshelf.java @@ -0,0 +1,61 @@ +package ru.betterend.blocks.basis; + +import java.io.Reader; +import java.util.Collections; +import java.util.List; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import ru.betterend.BetterEnd; +import ru.betterend.interfaces.Patterned; + +public class BlockBookshelf extends BlockBase { + public BlockBookshelf(Block source) { + super(FabricBlockSettings.copyOf(source)); + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && tool.isEffectiveOn(state)) { + int silk = EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, tool); + if (silk > 0) { + return Collections.singletonList(new ItemStack(this)); + } + } + return Collections.singletonList(new ItemStack(Items.BOOK, 3)); + } + + @Override + public Identifier statePatternId() { + return Patterned.BLOCK_STATES_PATTERN; + } + + @Override + public String getModelPattern(String block) { + Identifier blockId = Registry.BLOCK.getId(this); + String name = getName(blockId); + return Patterned.createJson(Patterned.BOOKSHELF, BetterEnd.makeID(name), blockId.getPath()); + } + + @Override + public String getStatesPattern(Reader data) { + Identifier blockId = Registry.BLOCK.getId(this); + String name = getName(blockId); + return Patterned.createJson(data, BetterEnd.makeID(name), blockId.getPath()); + } + + private String getName(Identifier blockId) { + String name = blockId.getPath(); + return name.replace("_bookshelf", ""); + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockOre.java b/src/main/java/ru/betterend/blocks/basis/BlockOre.java similarity index 95% rename from src/main/java/ru/betterend/blocks/BlockOre.java rename to src/main/java/ru/betterend/blocks/basis/BlockOre.java index 2d5e02fe..5156fec6 100644 --- a/src/main/java/ru/betterend/blocks/BlockOre.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockOre.java @@ -1,58 +1,58 @@ -package ru.betterend.blocks; - -import java.util.List; - -import com.google.common.collect.Lists; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.MaterialColor; -import net.minecraft.block.OreBlock; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.loot.context.LootContext; -import net.minecraft.loot.context.LootContextParameters; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.util.math.MathHelper; -import ru.betterend.util.MHelper; - -public class BlockOre extends OreBlock { - private final Item dropItem; - private final int minCount; - private final int maxCount; - - public BlockOre(Item drop, int minCount, int maxCount) { - super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND) - .hardness(3F) - .resistance(9F) - .requiresTool() - .sounds(BlockSoundGroup.STONE)); - this.dropItem = drop; - this.minCount = minCount; - this.maxCount = maxCount; - } - - @Override - public List getDroppedStacks(BlockState state, LootContext.Builder builder) { - ItemStack tool = builder.get(LootContextParameters.TOOL); - if (tool != null && tool.isEffectiveOn(state)) { - int count = 0; - int fortune = EnchantmentHelper.getLevel(Enchantments.FORTUNE, tool); - if (fortune > 0) { - int min = MathHelper.clamp(minCount + fortune, minCount, maxCount); - int max = maxCount + (fortune / Enchantments.FORTUNE.getMaxLevel()); - if (min == max) { - return Lists.newArrayList(new ItemStack(dropItem, max)); - } - count = MHelper.randRange(min, max, MHelper.RANDOM); - } else { - count = MHelper.randRange(minCount, maxCount, MHelper.RANDOM); - } - return Lists.newArrayList(new ItemStack(dropItem, count)); - } - return Lists.newArrayList(); - } -} +package ru.betterend.blocks.basis; + +import java.util.List; + +import com.google.common.collect.Lists; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.block.MaterialColor; +import net.minecraft.block.OreBlock; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.math.MathHelper; +import ru.betterend.util.MHelper; + +public class BlockOre extends OreBlock { + private final Item dropItem; + private final int minCount; + private final int maxCount; + + public BlockOre(Item drop, int minCount, int maxCount) { + super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND) + .hardness(3F) + .resistance(9F) + .requiresTool() + .sounds(BlockSoundGroup.STONE)); + this.dropItem = drop; + this.minCount = minCount; + this.maxCount = maxCount; + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && tool.isEffectiveOn(state)) { + int count = 0; + int fortune = EnchantmentHelper.getLevel(Enchantments.FORTUNE, tool); + if (fortune > 0) { + int min = MathHelper.clamp(minCount + fortune, minCount, maxCount); + int max = maxCount + (fortune / Enchantments.FORTUNE.getMaxLevel()); + if (min == max) { + return Lists.newArrayList(new ItemStack(dropItem, max)); + } + count = MHelper.randRange(min, max, MHelper.RANDOM); + } else { + count = MHelper.randRange(minCount, maxCount, MHelper.RANDOM); + } + return Lists.newArrayList(new ItemStack(dropItem, count)); + } + return Lists.newArrayList(); + } +} diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index e00c0c86..bc56ef92 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -12,6 +12,7 @@ import ru.betterend.blocks.basis.BlockBark; import ru.betterend.blocks.basis.BlockBarkStripable; import ru.betterend.blocks.basis.BlockBarrel; import ru.betterend.blocks.basis.BlockBase; +import ru.betterend.blocks.basis.BlockBookshelf; import ru.betterend.blocks.basis.BlockChest; import ru.betterend.blocks.basis.BlockCraftingTable; import ru.betterend.blocks.basis.BlockDoor; @@ -54,6 +55,7 @@ public class WoodenMaterial { public final Block chest; public final Block barrel; + public final Block shelf; public WoodenMaterial(String name, MaterialColor woodColor, MaterialColor planksColor) { FabricBlockSettings materialPlanks = FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(planksColor); @@ -80,6 +82,7 @@ public class WoodenMaterial { chest = EndBlocks.registerBlock(name + "_chest", new BlockChest(planks)); barrel = EndBlocks.registerBlock(name + "_barrel", new BlockBarrel(planks)); + shelf = EndBlocks.registerBlock(name + "_bookshelf", new BlockBookshelf(planks)); // Recipes // GridRecipe.make(name + "_planks", planks).setOutputCount(4).setList("#").addMaterial('#', log, bark, log_stripped, bark_stripped).setGroup("end_planks").build(); diff --git a/src/main/java/ru/betterend/interfaces/Patterned.java b/src/main/java/ru/betterend/interfaces/Patterned.java index 493e12c3..035343df 100644 --- a/src/main/java/ru/betterend/interfaces/Patterned.java +++ b/src/main/java/ru/betterend/interfaces/Patterned.java @@ -69,6 +69,7 @@ public interface Patterned { public final static Identifier PEDESTAL_MODEL_TOP = BetterEnd.makeID("patterns/block/pattern_pedestal_top.json"); public final static Identifier PEDESTAL_MODEL_BOTTOM = BetterEnd.makeID("patterns/block/pattern_pedestal_bottom.json"); public final static Identifier PEDESTAL_MODEL_PILLAR = BetterEnd.makeID("patterns/block/pattern_pedestal_pillar.json"); + public final static Identifier BOOKSHELF = BetterEnd.makeID("patterns/block/bookshelf.json"); //Models Item public final static Identifier WALL_ITEM_MODEL = BetterEnd.makeID("patterns/item/pattern_wall.json"); diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 93502967..33dcb32f 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -28,7 +28,6 @@ import ru.betterend.blocks.BlockLacugroveSapling; import ru.betterend.blocks.BlockMossyGlowshroomCap; import ru.betterend.blocks.BlockMossyGlowshroomHymenophore; import ru.betterend.blocks.BlockMossyGlowshroomSapling; -import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockPath; import ru.betterend.blocks.BlockPythadendronSapling; import ru.betterend.blocks.BlockShadowGrass; @@ -46,6 +45,7 @@ import ru.betterend.blocks.RunedFlavolite; import ru.betterend.blocks.TerminiteBlock; import ru.betterend.blocks.basis.BlockGlowingFur; import ru.betterend.blocks.basis.BlockLeaves; +import ru.betterend.blocks.basis.BlockOre; import ru.betterend.blocks.basis.BlockSimpleLeaves; import ru.betterend.blocks.basis.BlockVine; import ru.betterend.blocks.complex.StoneMaterial; diff --git a/src/main/resources/assets/betterend/patterns/block/bookshelf.json b/src/main/resources/assets/betterend/patterns/block/bookshelf.json new file mode 100644 index 00000000..2cbd99e7 --- /dev/null +++ b/src/main/resources/assets/betterend/patterns/block/bookshelf.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "betterend:block/%parent%_planks", + "side": "betterend:block/%parent%_bookshelf" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/lacugrove_door_bottom.png b/src/main/resources/assets/betterend/textures/block/lacugrove_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba5518f90bd41eb04fa5583226c35f24714a892 GIT binary patch literal 2474 zcmbVO3vd%v6b;IBXe+|d!qnKY>lTD+H~Y(XA(YY-8f;2wQ>2KNm))0iCD~new`qa` zwgst9(Gf*~QAct3iGzFu)Q%zyQ-`X6f?%ak1xCluh@w)#@7pvDh=7cl+3efwednBe z?|JX#(aMU+gEPz-CX;Efx6D(8?n8}hP#XHq`{^%$Zs|%{t!6T1W*OH2)2iokOs2G> zqJM@y!&lDna>N1zIRGuOh=QU`rg23v1@LpAjs;*yl-&54_FXt83U2%!n~(A-C9qyB zo2SC+c@=(s-W=W~;6>xHaWM`7M4%3^SR^cIT+EFpa5*$KekO4&5u(p=>TUDk{=wgsX~ye@=Qu{p(i(9 zuj>j&l8udxmPXbht09thxm+a0kPJhh2ttcXI*1XHmfw%yff}!hiZ03$W*~xq+@QO0 zq_i)Eh?0Vpv}Bo3!N?d;NZLXfDJ230J{6}lsNn>;z>_cxBT&*c6icUKm3mp1wR-s~ z(5ct|AV8({`BEHL)DnrLC^Wq^iqc3Hr{IXESZ}iy3*p+Ae0=1 z#qn1b4WM8HC}{$+PC!sDYmf*CMlozWTA_fp1sP@>X{;3lf%T30V99IqCmhU`iH4qd zQbjeKo6>_NOv?e@Sd4C*H(Uq>Jo&SDg>GF}U6S(~>mdTYhBf=xH94p^0u>gAP-m~l z{p3~k%Tg4omt>#-6`*Yps+t=Qs&WJaiV_xiV5Cb%B_X-Hq>6~?GIr6-SLM+_^x9Rr zK2P_he_56Oy(<4_m6A>1>wy%4=o}$&BcFte`Yb?R?vBK}OLph}aJ1zc!_--W9#W?j zln}Iv&Z2yBLdaygA@21Q`<+W`s_&bcRh;c^AKQNHnH{aup4^+$b5q%qQ_KTB^MBd5 z>+6m39p)mwh8k6hEqihHsFB06?r!hN+je3sG(RsygP}97-fk_l^i$i>cKGyQ~{O$+!yf$|3_&rod#k$M_2-@ur zR5zq$uUq)Sh+R`FGS{7M-u+wMIV$IZISsVmOblqICR#>CckWm@uyopsRU5Danow)M zf64t5HZJN&-|2tJm$zfH(r|$ZO0!DJAL!niS(Ev7*`e(Cs)CPC^ybGF3|g91m_Pc< zef!LoS#PzTKN9&a9NqH9)`2~}!&@KP9c^z}{K?oU=e%cf%%e|^d3e;KjME>*+XpP! zD!+4n(6KF(qaU}t|5>bS(guIkW7hrIdlnzC$%{BR_ zXD%F>B{y{!Z=boiBmLy`l`EDn{okT^C3*2KH#zcHz&sbfm@zR(bB#a{hJzNn+CYv|eaONJciDJa=_Lati7 ztm=00Ge5iY#}$D+R8vR#rqa&bY2~)A^aZ#5IU)DG^+&(W=hHu^ee>3bmY*+bEtr0) zZNbm49xO_$d;Fu}e=HPgryOTn3yaO8UpdZIJePa!a0e&f(j!Y>?FyxPcZ9XyUkJ6( a=j-xLKjClt@R(}+oAQ=ccs5O(-TXJ`Dr}|z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/lacugrove_door_side.png b/src/main/resources/assets/betterend/textures/block/lacugrove_door_side.png new file mode 100644 index 0000000000000000000000000000000000000000..94319f9ba7851edf2c1f590b7da80f6f0ae32dd8 GIT binary patch literal 1721 zcmbVNTWB0r7@n#rHX)KWN~NHlOaxQg*}3f{Gh`FCyV2d~rb{xlDOl*)nX|jo?97?W zoV^92wqntTsHyd#5}z#AzDS`KL5YGwU!;{<1r;AeM3E|1lnPR+XZA8_OT2YpX3m-Y z&i8-+b)U;kKHS^ArJG@x-b^|*Mc;k?efur+`QlP3N?#kC^d664diwo)9rMca-3-&U zWNI^HCi|$WV=Dv=oJXO$`8UqseuV6!03)r)WI+%~HHpjErG}|Gxv3(XRWr6npsk}!D$Y{3 zL#An{;d}%NNDOmERDoPX4l7(kHkQ0<}fy*1Rz!?#p z_9PS|1xXs={qCR?ptWkz@~b3k*>BdYnl^nsjkbzuG#BUr%`#P??zdl@)&06d2HXB@ z-gJIiw6zkVr2kNiEtrQ3qy}A-DAHX1mwM+rF=)BM-{@sCQrFCt4xA1ve;G_kx(Vhi zvgvSj=@jj|GO>Y9;B%Q&LL2&c@o=L5An1DrZA_du--+%0%af;(!Jk(!7nXWj&6dt?(Ev4op?%2SD($zeL1*zk9Geihr0I+ z{9Xpy$ODJ+>Hfvvl3f>`yiE6(E?zjlZR3OA?t1=-6T9lmxy|dZjGb%vcbXHLfOp<{IOj9nrN61%LDEyvq{XPwE;jYX)QK1+%Qof#1G;EGmC_?Hu z+X88UC5vJNr;=ucBB1m*T@bBMBqn=YG*bd3qzE`T-iQtyXh#u_HKOyi7Q*661I1is zl^a;A=Gd6362`!y$w^3}hk^u7Akm1&S;~u)$B24)DR`D&<0#^VNF_!zMRtfRu;d_V zf*T-Or4D0M8WKq`C{;SbKx$?nB%w;ci3D7w#t0Qf=qR-T@qbY0&CS}WT+=MSFZg6c zizUfL;dn(wg|b4e6xgHqrGyd*-bDu{Iz3z8rf z3x7i${P__FFtrv-(8m*FaXN!8L@B)-%J3)TiD=PQ=>m8z5QQ=~1JcW3m=k3+E-K9p zXi0F}1feugsGLB^NLrd)7(Eg{pW|7fLY(@L4KUFXFrp+u5|~N_t7cPaDYb^uBuppN z6hZi)7J=pLm5)J5n_Oc9rO`bCgq0GD}(L4jpCL;=ED>;s(00Z=TJ;`7RYLy)$?HU6{8;a~0O8~9LPUKuL-0UhfF%Vg5@Gd3|A?g04*#i?OY)5)D=;wB z2c|S&wX{LaU_h;>F~Xp+V@0f*z*sEbFB>%YpHWwph|#&yQbuG|?pU5CU~ch=xPZMYRaE#}gcPnM2vDO}O{QvHZ4M6CML z##O%`v}QbesUDpk0_XYCal{KXFj~J?~jO7#9}STwr?kn zo$EMq_oOvFFZ59~wI}vu^|Xq^=FLN|ZF^zr`s2#e$lUNP zNpJqVqcOaEcfsIieFI}|Fy)6F9f|ZtPxprNt;_TFP`0l_M(#gZd3KtvDP(R+bc?0m zTt8{2>8;Z(nYAwu{F&^i<{Colrqs{=_P~~9QAd04b#+{+KkJy0RiZf@mA>r6FB_Y; z?>I9w@5|WydD`v03uF1wO}&$k@0b6j&FOPYyHX36{{`?<*m(c| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/lacugrove_trapdoor.png b/src/main/resources/assets/betterend/textures/block/lacugrove_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9bcfead7e1dc7a6753d6da3f144024561bf124 GIT binary patch literal 2082 zcmbVN3ry5z96vWv&=|--9mKebpDql10C1Xz1tBQWHHh^0DM?==V&n)0Cx&dESZ znMz7w3OS_K$}knGl`E1UIf|(fRE=P`6vYTsMc`T}aKONtleQ9*4C4c~z>^Lx5k;Or z5VzYcbK^43S&U#>trkJ$h+HlO2&qu+5J`{JA&dz!7#M+avb@N04#>+$S~!=egMm`N z3wAz4>ktBA0s%ujB#&S+)a#NDNK+vk?{eCF#%T&+Y>b_8hyuW3AuM0QiJVZv{S9^K z^K%A3XicV&jhAY%+e0Pai$Jpr{{e z;%L@d{sL5P206y$1g3Zn3aW-CMe<+4G(}iBr=0{ovv#tWL3l?o422>|WNN^33S1f7 zZ{R4GH@U(6^#9zS=VU>1k+xUn0Zs7K!ytyaa2kxDbSN7rnJiCDTuc_00rb<`Du}-Brmh?t69Rxdi9hC zR1`3CLV6%ynGz)BZ9g4MdFzg$;lOM5mGk4Lb(b)J^dE}R4-+`6=q8I75NJnd$-MDm(C+n_gV+U*6V(inYI zrS2kLpPXE8WvX^1UK^-9^+~n&rv3IDt{fly!Et)dwpkr9GtRTU4K-hGh6}4>Z_>YYUv*v4WpKP%`>rj^|*wau%hGi-S`Y_?5f;o^R~!!xp-l1 zw3y6~8a#ApWzx)V7LUv;T7DtNShmv=bu}idcleyX-(KI+7dEeJWIs}57`61ErWKpI zy=v|C1rI-eu$LIU&e|S{JwDQ$Nw2|o?EdhBxtfF(mKd$Oze{y0ITPscgLV+L237PMWKk*raoZ2D3GF>VofkTAJ;)+o@ddolB|*iOYX? z+kRY*|zpKhN`7m&+xt-lJ zaYA!X?Wyops}(D+tvAMxeti1qiC<2?H~x0#x(&s7s)64bw~hO#y2W;`JHG7@YjBp` zsQvgpmUlRPYeH>5ex>27tyx@G?Au=))M(plH2N=v(N*jT3D_cJnaNrSE1{Ydrr!Hm(#uAZjh(!TOzC-#>vNZ&Ab?$S$-26g?A V)~KFPbin%;&(6#>>`$M)@GrPl@1_6% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_bookshelf.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_bookshelf.png new file mode 100644 index 0000000000000000000000000000000000000000..bf9cbe9cb6102b57d07bb5ca2798cf3c1f7ed9d7 GIT binary patch literal 691 zcmV;k0!;mhP)W1KH%#wN|L)K=9rg9w5ZEoxz#Hj>n)lnR2jEnFA{ZQT?Dxwjx_VXGDq zxQHMy$d!yd3l&CZtjSR(XMAtQ`{unCSKm<5fy=%8&-eMCt0=S6E>#NxL6qhQ|B72F z{}<=`GCBb1R}uth4oZuP)i6H9c6J%)e?YBV#K^ycyCdjSE$I{v$yoD?06e_d?*({s z{VUlGhslNW5NLyP(MzPOp)k)ESJ><`0Z95{ED7N`PYf>->6(R|4C(nPUXDtt_d~lf?i462~$UTV0P@Uc1)MjR=PEHa|bswP$U~a*H!nPN*WjIAR)s1_i z9bJva@ZY&dKnS>X*>lRwUBEO=I{Utm+>DW4%ac3My*_h|jL7gP8bf!Bzy9Lh<9SEE zKki5A5`v`9NA6&(W8dB**7LYsm*fx+xgRfV@M+(`A8Dm6@fm>d`e`nO+K Z`~jsJ5#Qkr?+yR}002ovPDHLkV1h0}Mu-3a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest.png b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest.png new file mode 100644 index 0000000000000000000000000000000000000000..747344968bd0f68a4e1068d6c7e6a665e5731ac4 GIT binary patch literal 2969 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 P00000NkvXXu0mjfXd3AN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_left.png b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_left.png new file mode 100644 index 0000000000000000000000000000000000000000..44281cb9130fcfc98dffee0e1fe21ada467c3c1b GIT binary patch literal 2571 zcmV+m3iS1fP)#fu=wBC9O&0tWnG$u7_1*9eeJ7KUL*jxEa)$>B`j z>UOfIo*9x7nc;{I2xNW|n7;jex=vS}Yb$^+zW74E{PIfx^|!zNg-sAa)_aQe?$zxz zLF45Bch=uNb9oB*1bCBAB8CAVdd1?^{e! zVzgPE1MsmYhJdn{)aqkG@*DF-5`%A1_7db>irXFr;N;}w-o)3l7g<|MQK({dJW8Zc z1yLd?B|!3@2p=7NN(A=nBRbb22xU=H+Iq!zzNfS`&iAwZ_s84by55fFubKAxR>oK!~1@JV$#U(Z=uj z)zPO6Vc=kL1i;?(2|vDh!LyT3#=GbDyo5^4Gwrs`pil-u@X-;Yqntdv8QfX{2m2=okYc2?*%mnOh%sQW9N6R4G!AjV z2gm90C(MR#`0Uy5@WJK5Imh1g2>?wyUoDHLho?aHA^p&BzIerK_~w^!gWF)y&Cp6y zXv5$;3cYrPB0|$&W^W*gDEW8RoRM_m$2TtkC<{wn?r}DIwVM9R-?P~(hA;r&LXYze ziG+S&Be=B!Qi>!3N-L5Cg3k||Wa<7uNGsnhfYFAaHA*QeQz0Vx?YC=#xE%Bnm8n1y z&NpbSAI}Wv+#FDJZZRHFC{%V+lE&}{K$ib3x(lkQ@bm0DK%tf4-)CO~P$)xDlxU?1 zVIUzW6p4hSK$3*5f1x;F8+`ukkE`ujb4G2aRAr9n2G?T>16q+npfFj?`TR8^j{W+0 zb?v+P<{DoYnwTPu|NimB0YOBx)&OJ33(I|x9KSF3uVNS+RaM@4&41%gO8YqC0HyTm zVXyAr#Pwss-rkhU%S-CIe#iOs;IAGRNt9(t+qMMB@o>&4@8*HfbUi)jKnfT!83?2la#7dx3aNJr*#kvS!wtak%$%JUiy|V=x1dB+~W^qJD!(9}rU5 zn4eQ?PZxi9Jdxn(;U_rX15lcp)5E=08LKQxq6A`!W6?yAC>U*t!1>}O02h)M$+Dz& z(fqWYDI_EbD21fR>Cva~c4+Y4*ghQ&4#xHGf}=7O2h*pkm|p9G5Iu!1Fxui`&)NJX zqGT1#6>2SBD~-`5DaGvG1R@bpIViS8MM#e*6rQ)QH_qoJM@$T%#nysClO!N%oiQY( zQ7NL7CZ(`agh(Qhm^H6+F7Q~g!ROEZuyH=GxL((LdT^QxCA?iv2+`&Gzp-QY)+t^wGuV+7PoX-OwiCKFF8k#=4zG95n2G>()i&h1tsYof|LY_r2=IT<@ zUB1UKZ^zaOsBOJ@K2JVxw85*KHXEInM`=r(hd73@Aq7%Oh-5FGm)96;Jn-~~_fWvg z^Ka4G@YBV202JC_ifWAgdlCtSW+o9uPF~t!Mm1G5!{zGOyvqTV8tsTe5mS!z1VKhS z)42t0nqieRHv=vG#ymORgg$q63{`5~$I%BVTf;D!0^Ol6-%pV#evI>3c~ zRTArb%iyoy&m;IaLp^b+&f1clCBJODRR)4;W*vWqF%$V~q4($#vewc-WFy zsZRlU>qCeT9i}J=(GgN$nc|A%9)X?qv~7b<$7rpwMR_M*M2IOc+4r<eu8N&!1ge-}CmZLmdkCqE^R3q6zZ zQJZ0o4Fk5Q?j`>=Y^{LfC(kzS?*nwhf|qCiBJwjLFsYt!diV*oo!-gsUG59E=>;Ni zI6Yy%J_e=lCI98$zj;^%988W@;V*68U&jA8`}>06SFSHVSZ${`-{*qK9ek0L`;hhc zk<{pFYdgJ{{M)d#0|670GXp2&?=+B|Zb-v!WXl+61JNbD{TjE$B4AHUZFLOO& zL-~cieVG6Adcb~_U1RU&#OTKy;C8-Gj={AY9*;Jlp8=Y|EjE(B+yIby zkS_>l^Owxq^IOO99^VKZOEGGE>3XhW?S?W6tr`5Va%U`+)a5Vq`002ovPDHLkV1oYU@H+qi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_right.png b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_right.png new file mode 100644 index 0000000000000000000000000000000000000000..baae95e47e4b9771b7f5ee4b9935bc848a3bff5d GIT binary patch literal 2739 zcmV;k3QYBhP)OIBs&smjXyvqV+-`s=Utn{U1WkbnBeKX4bc zA*%Nd5I~oA*Z;HOUilwFy4p8uSDma|7SfIB@s1>o%L zjFXd-do`-S+w;F*tVIw+1Xaa~C21;OkF{?sMfc-rjVf4EGx8HEKN{NXLrdjH^r59s zJ%XSpmGM-z;;K8l@7QmJTMhcV@4n;PZ@;~>psLbzGn7n9iXa$c5fNgFC^{GfK*^v6 zUCMT0PRao*mRWO-s#5zg0N2e0Q3K9+P$g?7X{0kA%%hGU_vM#g4j0qu^v;4J!m}r@ z=r39-SCdj=JUT?gAR-tkgI%AmAqG-Ti1duALtae3VC2V4#!vX`Pe1VLy z0Gi1;5>k(|9@R|NgkaF63p8tsckGm|pOI2Pq!`PH#fZhbnvgm|>agNa6jd$$pfvQT z*x3Lg!s*jr(f`y^`w`yOIsI?W+Fs9iKK&Kb$#X28$@mFS*7)ixKbyYT zDF5d-|FWyf8?mzia?UjE0#&6C9XW#)gNOxSwzwo~8s0Zz$(qVnt~1xo6;?dc@pH~E ze;lU&>i7KeN4nSz^0ljPTt5~bPTWxg*C^Gkuqm9W&KC(sShk(Jc21- zf5GtOKOSW5>W%*&3lH)ESIs$1zrY}1q^xr>pm{B*T`mhsIIAd!ddS86jHaLSZuSNM zD-LTbj2L3<$jhmp$q3+WO-g~4D|jqC$OoJpea6eDUocx-GV){Uszh{M-{PzTBjgyd z&SAuIIX`DQdB$b;Up$|Fj`Ugr>mKI=X5-(@2xLevPkE>r&$=RIFc>{6|p#5p=69$LhMk@AVSWOr_T)Dd*<_^ zgcV!XZVpR%zfryzDswp5V68hqlO?I8$!18BR{GxTf2qGF6sW50Z8}vr933+m9Wgoh zG#6;Q1*5toDKYi5VL{LTq6*KaukfZO=Ztst@ZL8070#~yxRU`sKlvTCA2X^ZbfG~+ z$SD(Ix3T}2damZ@z{S=!ovLDtrRlF}`^Cn5ybBF6^(CW2Fm*{(x~>5)h#2PWCG+<3 zR(aq?j(=ao7(rXQzAax{b!cx>|JFFN=CVs|Gl2IFQ_qGQ2Q@%MHIvrYn9Xa=7`%7* zx+T*BAj|z^RAofUQc9F{S>(%dNdWzh7N{&6u*VlH^ZAeB_^xk>sYj}J z#BRc*eu9Xhu10s3@AI2oRo;l54N#zXTT#0SFQ$`$#;R;Z(n!h)Z!1{x0Y~G)KK(d< z$E1G3+w;E+sk4Z1G5_0*?eb$n#END5#BNe#XFMnrPPqiCee9`S&C&ST5YroDi78-> zUCZa&LAFaR2*VdPVzJf^6dD+mT&OmYNafMIF{XmDSvKAfwLS{hDnbW6VFs_a{nZ5+>md^wH>Gk(KpZ~qkPOi?yB-eJSZJ*+6Ck4_+I&Z?P`oMTsK$boN&g|hn~s{RvgZH zz%2Lr_(4(Qh&fX49!6}$gM2_?ekSCkch2X#*rBRa)&qhy4#ALe0)dckZiUXcjsG7D z5Ap%C<~{%U_K!H@vBu$+z97VQna3M0H6cLd4v48QT%i*#uip_;Pig}Oi!l~!J%+*@ z=|HM4OJd^4nm9UqoPn?KARqAA)8Fy*@C6sw?>Ra+zQOHPzDA4?`ktz)vDOXT|DRre z&#RNa=ZANH#u-maiOSV@UzcbxMXV`Rz??J2Sd0jZZVtrT6}u-M>>vo%T4E}Lb+$x}zo>0cRSBsl zrj9=K%-TyTTT%HDU1*p!=R;AWiwz-scyA?}a{>c7Ct`{iQ&Q`wk(k4f?}ylvH7{d? z$K?ed<^$Rb=H1l>K43GSu;K&8hr)Gx!KgY!_%xq)Qg4<2#Vmmk0+WdaGEkV9niZ`T zFs4k`oHMmw1u_ZMB0C;rp~N_eYM{gbK2(8Rz48URDPMXJ+;!8cbMBM4`{z)~V(anx z$Ln+Z^~m3k5`#jEwS7>QCb+M@Y^TH=Bl{W7_~D>~vlTJ*%RpppD>B7H`*F)+F-P(- zwXcUm4#2JQt9?APTaAD0UM=--%XmXK9;8_HU;IpFblCImVlyk`0Ir+&cv~~74gsO< z=0qY+T&eq^WR1imbfMvRT;lpJ%<;COiPz;2gB#r{uQ`)6-OAD3h7fzwvf5M*VMLtq zG~MR@MIpqN(JlFdQ-#l-{T(4De*5wtmbW+8=YP8V8|SmX0+*=5$&=4H8lP}7eR=2l zeis_fuK#@}1N`>I?{7q$M+e6MThA9Px)~SOXDsp$w;4d``j(^d$q>J9tItE>^wM&0 zG4=GJWxkkkba4E$^6O^-cEx(mF_g;}Z0x`3uj%?ZW^@ZD2<2eXC`>pSKN}uws?T37 z-WPJy7VjN%q)$Cp&BgyqeZLJ01o^B@99FtPw||xeYo_82K?N$4~hFP4Y2EoN+s! z^}CoQJ*XylSEjmMe(}}T_i_Ir^`x9QI1K#vn>U-|fDi(9bU~9ZZr0ia)O@J51pv1! zaI5EIxv;j(h8o>kmjOkM5{<#^7|kUbx*V{k_!1REEVUX!{-`!6MPIwrcaJ^x*kg}9 t_Sj>OJ@(jRk3II-V~;)d*kcdi{{U`4nP^#(h_3(u002ovPDHLkV1i}hWfK4Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/lacugrove_door.png b/src/main/resources/assets/betterend/textures/item/lacugrove_door.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d9d42e5e64116e6511e8c2f4a3a1e8ba5c3d4c GIT binary patch literal 2187 zcmbVOYitx%7@Z1MC{_qmQ&H@6APow$^W4XbU9j!ew!kixZg?0Hy?f{G?xZ^pW~SXO zDhcukNcsa3q9ObMYki=i5epF|MZg55LJ4Y>n1BL7W0Z%65EH0(cDGBxg2YW`=g!V| z&pF@soqO-DZ;mvSmP{@o2%@y9F|+{RC%D&`V*Fk4=ODnhv1a2En;^zba<3v{%hqy& zC>~Iwi=D;cc``IK4^WI4@?5h$Kxk9X&G#tZD8n=Ni zyuOJ5mo^+OaEz!$(+U)}Q{Rr$$QNY9Xgk_rB4z=yjW!FS`gSaHs+)}|*I5WSh7~o8 z)KH_Eha{7Ab#7w<W%A$V;E66OH3k@5J z8t=Fzl#k*bbE3=&H-%!?D8K>#8LU7#Zde+?Ijb5-AjZ@a6j`XGTxX;V3ln2?LRLjM zEH~-419XU*LO}|r?NL=ljtdGDI3J*6Uaz0#Vq%Pr#Su&U6<Z`S38%TX)UkV-+k=N$u%FG zw#!c)6z}O?r8Rt|tvZP6Dmhv*|;{?J-Fi1>h8o6+|xAed};~(NfD^~LiD19^;YAEZgob%DXn)f4nMs>A*)9~{T0~b@|+=|d! z0}EmE8~45quU%EIPTO~8%8t6!!`i&6J=2d&?E1X(uO~I|^(1j}>Dg06Yi|qjoHe1g zKjk~O>&lY73s)tZM_vEzk=2>9qy1lecCzu8``F)0Qu8afefL6H*Yr6buB-g1;`D|G z``#VbQ*3R1bLH_%K{m_hIGye71%G$&GyR@P|zCZZoxlgvHTcl%` iOU_QL>bbu3%Gh-qH?6OlvD@SRU1+M0gm%_G|MEXeq3kRG literal 0 HcmV?d00001