From ee60f73e531206aee4eedf333b659d2349968db6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 10 Dec 2020 14:09:59 +0300 Subject: [PATCH] Tree fixes --- .../blocks/BlockHelixTreeLeaves.java | 42 +++++++++++++- .../java/ru/betterend/util/SplineHelper.java | 4 +- .../features/trees/HelixTreeFeature.java | 52 +++++++++++++++--- .../blockstates/helix_tree_leaves.json | 5 ++ .../models/block/helix_tree_leaves.json | 6 ++ .../models/item/helix_tree_leaves.json | 3 + .../betterend/textures/block/amber_ore.png | Bin 393 -> 680 bytes .../textures/block/helix_tree_leaves.png | Bin 215 -> 1589 bytes .../betterend/textures/item/amber_gem.png | Bin 298 -> 407 bytes .../betterend/textures/item/raw_amber.png | Bin 405 -> 372 bytes 10 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 src/main/resources/assets/betterend/blockstates/helix_tree_leaves.json create mode 100644 src/main/resources/assets/betterend/models/block/helix_tree_leaves.json create mode 100644 src/main/resources/assets/betterend/models/item/helix_tree_leaves.json diff --git a/src/main/java/ru/betterend/blocks/BlockHelixTreeLeaves.java b/src/main/java/ru/betterend/blocks/BlockHelixTreeLeaves.java index ad39aa5a..7e78f511 100644 --- a/src/main/java/ru/betterend/blocks/BlockHelixTreeLeaves.java +++ b/src/main/java/ru/betterend/blocks/BlockHelixTreeLeaves.java @@ -4,16 +4,27 @@ 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.block.Material; import net.minecraft.block.MaterialColor; +import net.minecraft.client.color.block.BlockColorProvider; +import net.minecraft.client.color.item.ItemColorProvider; +import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.IntProperty; +import net.minecraft.util.math.MathHelper; import ru.betterend.blocks.basis.BlockBase; +import ru.betterend.interfaces.IColorProvider; import ru.betterend.registry.EndBlocks; +import ru.betterend.util.MHelper; -public class BlockHelixTreeLeaves extends BlockBase { +public class BlockHelixTreeLeaves extends BlockBase implements IColorProvider { + public static final IntProperty COLOR = IntProperty.of("color", 0, 7); + public BlockHelixTreeLeaves() { super(FabricBlockSettings.of(Material.LEAVES) .strength(0.2F) @@ -25,4 +36,33 @@ public class BlockHelixTreeLeaves extends BlockBase { public List getDroppedStacks(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(EndBlocks.HELIX_TREE_SAPLING)); } + + @Override + protected void appendProperties(StateManager.Builder stateManager) { + stateManager.add(COLOR); + } + + @Override + public BlockColorProvider getProvider() { + return (state, world, pos, tintIndex) -> { + return MHelper.color(237, getGreen(state.get(COLOR)), 20); + }; + } + + @Override + public ItemColorProvider getItemProvider() { + return (stack, tintIndex) -> { + return MHelper.color(237, getGreen(4), 20); + }; + } + + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + return this.getDefaultState().with(COLOR, MHelper.randRange(3, 5, ctx.getWorld().getRandom())); + } + + private int getGreen(int color) { + float delta = color / 7F; + return (int) MathHelper.lerp(delta, 35, 102); + } } diff --git a/src/main/java/ru/betterend/util/SplineHelper.java b/src/main/java/ru/betterend/util/SplineHelper.java index 1bda0f28..75fc23ce 100644 --- a/src/main/java/ru/betterend/util/SplineHelper.java +++ b/src/main/java/ru/betterend/util/SplineHelper.java @@ -169,7 +169,7 @@ public class SplineHelper { BlocksHelper.setWithoutUpdate(world, bPos, state); bPos.setY(bPos.getY() - 1); bState = world.getBlockState(bPos); - if (down && bState.equals(state) || replace.apply(bState)) { + if (down && replace.apply(bState)) { BlocksHelper.setWithoutUpdate(world, bPos, state); } } @@ -183,7 +183,7 @@ public class SplineHelper { BlocksHelper.setWithoutUpdate(world, bPos, state); bPos.setY(bPos.getY() - 1); bState = world.getBlockState(bPos); - if (down && bState.equals(state) || replace.apply(bState)) { + if (down && replace.apply(bState)) { BlocksHelper.setWithoutUpdate(world, bPos, state); } } diff --git a/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java index 16d95cc4..d9107a38 100644 --- a/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java @@ -4,13 +4,16 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; +import net.minecraft.block.BlockState; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockPos.Mutable; import net.minecraft.util.math.Box; import net.minecraft.util.math.MathHelper; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import ru.betterend.blocks.BlockHelixTreeLeaves; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndTags; import ru.betterend.util.BlocksHelper; @@ -76,7 +79,7 @@ public class HelixTreeFeature extends DefaultFeature { float radius = 1 - i * 0.05F; radius = radius * radius * 2 - 1; radius *= radius; - radius = (1 - radius) * 10F * scale; + radius = (1 - radius) * 8F * scale; dx = (float) Math.sin(i * 0.45F + angle) * radius; dz = (float) Math.cos(i * 0.45F + angle) * radius; spline.add(new Vector3f(dx, i * scale * 1.75F, dz)); @@ -85,37 +88,68 @@ public class HelixTreeFeature extends DefaultFeature { Vector3f start = new Vector3f(); Vector3f end = new Vector3f(); lastPoint = spline.get(0); + BlockState leaf = EndBlocks.HELIX_TREE_LEAVES.getDefaultState(); for (int i = 1; i < spline.size(); i++) { Vector3f point = spline.get(i); int minY = MHelper.floor(lastPoint.getY()); int maxY = MHelper.floor(point.getY()); float div = point.getY() - lastPoint.getY(); - for (float py = minY; py <= maxY; py += 0.2F) { + for (float py = minY; py <= maxY; py += 0.1F) { start.set(0, py, 0); float delta = (float) (py - minY) / div; float px = MathHelper.lerp(delta, lastPoint.getX(), point.getX()); float pz = MathHelper.lerp(delta, lastPoint.getZ(), point.getZ()); end.set(px, py, pz); - SplineHelper.fillLineForce(start, end, world, EndBlocks.HELIX_TREE_LEAVES.getDefaultState(), leafStart, (state) -> { - return state.getMaterial().isReplaceable(); - }); + fillLine(start, end, world, leaf, leafStart, i / 2 - 1); } lastPoint = point; } - leafStart = leafStart.add(0, lastPoint.getY() + 1, 0); + leaf = leaf.with(BlockHelixTreeLeaves.COLOR, 7); + leafStart = leafStart.add(0, lastPoint.getY(), 0); if (world.getBlockState(leafStart).isAir()) { - BlocksHelper.setWithoutUpdate(world, leafStart, EndBlocks.HELIX_TREE_LEAVES); + BlocksHelper.setWithoutUpdate(world, leafStart, leaf); leafStart = leafStart.up(); if (world.getBlockState(leafStart).isAir()) { - BlocksHelper.setWithoutUpdate(world, leafStart, EndBlocks.HELIX_TREE_LEAVES); + BlocksHelper.setWithoutUpdate(world, leafStart, leaf); leafStart = leafStart.up(); if (world.getBlockState(leafStart).isAir()) { - BlocksHelper.setWithoutUpdate(world, leafStart, EndBlocks.HELIX_TREE_LEAVES); + BlocksHelper.setWithoutUpdate(world, leafStart, leaf); } } } return true; } + + private void fillLine(Vector3f start, Vector3f end, StructureWorldAccess world, BlockState state, BlockPos pos, int offset) { + float dx = end.getX() - start.getX(); + float dy = end.getY() - start.getY(); + float dz = end.getZ() - start.getZ(); + float max = MHelper.max(Math.abs(dx), Math.abs(dy), Math.abs(dz)); + int count = MHelper.floor(max + 1); + dx /= max; + dy /= max; + dz /= max; + float x = start.getX(); + float y = start.getY(); + float z = start.getZ(); + + Mutable bPos = new Mutable(); + for (int i = 0; i < count; i++) { + int color = MHelper.floor((float) i / (float) count * 7F + 0.5F) + offset; + color = MathHelper.clamp(color, 0, 7); + bPos.set(x + pos.getX(), y + pos.getY(), z + pos.getZ()); + if (world.getBlockState(bPos).getMaterial().isReplaceable()) { + BlocksHelper.setWithoutUpdate(world, bPos, state.with(BlockHelixTreeLeaves.COLOR, color)); + } + x += dx; + y += dy; + z += dz; + } + bPos.set(end.getX() + pos.getX(), end.getY() + pos.getY(), end.getZ() + pos.getZ()); + if (world.getBlockState(bPos).getMaterial().isReplaceable()) { + BlocksHelper.setWithoutUpdate(world, bPos, state.with(BlockHelixTreeLeaves.COLOR, 7)); + } + } } diff --git a/src/main/resources/assets/betterend/blockstates/helix_tree_leaves.json b/src/main/resources/assets/betterend/blockstates/helix_tree_leaves.json new file mode 100644 index 00000000..8addd4bf --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/helix_tree_leaves.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "betterend:block/helix_tree_leaves" } + } +} diff --git a/src/main/resources/assets/betterend/models/block/helix_tree_leaves.json b/src/main/resources/assets/betterend/models/block/helix_tree_leaves.json new file mode 100644 index 00000000..741d59cf --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/helix_tree_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/tint_cube_noshade", + "textures": { + "texture": "betterend:block/helix_tree_leaves" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/helix_tree_leaves.json b/src/main/resources/assets/betterend/models/item/helix_tree_leaves.json new file mode 100644 index 00000000..009cbb90 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/helix_tree_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/helix_tree_leaves" +} diff --git a/src/main/resources/assets/betterend/textures/block/amber_ore.png b/src/main/resources/assets/betterend/textures/block/amber_ore.png index d8ef77f98e23c9c3aee1ea45e017370c5c349e8e..41ba1c69f28353f8b3e317f61186613847ca535f 100644 GIT binary patch delta 657 zcmV;C0&e|@1E>X%BYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!vFvd!vV){sAK>D0zFAYK~y+TJ(5dk6Hyd~?~G}fpo>)FV`xoZ1R5%~i?&v5MJy#q zn?N^_T9IH8x(MRRt>993l7$GmkglX6G{sU%ii=tcBDP3~Sbyn5`al_M7BLehqvLmb zA(!Fi+;h(T|Ns0q+Q#0LT`CG80>^?Zg8iK>6&F?th9QhlfTY>jyt!H+*7DynwQiN7 zMuwQ3e$Nx_oxYmN=P%uk1_Ar_ z52u~8kf=g9Vtr5Rj+`Cn`_p>9QV}}c70W&yk6*ZS4)(Vn$|qt&Na7kAxYL>N%(~t1 zjq5-M8v{O&>YL4$t_jQurEE2{;gg)KnM{>k4NVCkoqsZ;;2=C?*|}M9?Y86?B((BD zi)nQ709x6}ZEh9tP67&np77W>h2oCw<(C(qz9D(}_O+AoVdbaxyF8oe8JW1{I~-A< zyYG{|A_dw<<8dJ};w{Tx{b^EqQ}Ud6l`3_8>>;tyI^ zasu7k(|^+-@!9W|=*A^!RK%GYx(S<(Q|L>7oTU{QHRb123NUWcicx%$`B0K{iJxLo z{{LuIU=RXE=2xMrATWxDIukOrPs@*6x}wzZer_a2E3vYL0e)t)Dsy#mv_3Y7emOKI r@OEfWs8W5YsCGKAOI4+HhWHP3G8+G0kBeFW015yANkvXXu0mjfPK-SP delta 367 zcmV-#0g(Qv1&ITYBYy!P3;xTD-nJi3E15l(nB zaT_)TZzk@7*edbhH}g70W73&acfES=Rn@rO{btfxoxx8QPa;d}(_4d(4Z7uUg9&jYX?*rhm(;&_18*&QHC49g=R` ztcgVwAf37Nqm%wmMd-okXhM^d&rt(=+5C~1_=A{1exoVH6tTU0=pD|BZx=u{z=0ZuZ$SC zt?qiew-GFfjA%4H$*81tuG=fYZ8oK_2TMzh?qP*2Y-Ve`nenfowev+?l$fLpsL-qk zK$wyug4lric^>YmD;*}}G%sD!ab-}UjYy>Gc4E`SNV91sYY59K{sT6DKjf6|DjEO) N002ovPDHLkV1mqBw|D>m diff --git a/src/main/resources/assets/betterend/textures/block/helix_tree_leaves.png b/src/main/resources/assets/betterend/textures/block/helix_tree_leaves.png index 843a652e6db497fe4de0a305e356971f512177f5..50e459a2ba7b406a46e7dfc604b610b84fccdbd7 100644 GIT binary patch literal 1589 zcmbVMZD`zN9M7t5UEQ%8TZ^tJA;r1T4fO5oBM2gp%VzR;4tk@v2mjwXsmAcM+00Ja1o7~8Z)_k=oqmKM9=xR$ zCY?#?c~M4s2q>8vX`D-SlY< zyW=M8FvbNY!-ZJSq!v(-eVkdfDlOrP%)koNq2bsV%lTOBB}ww(ccs;JA8k9MHLOv` zw!5P3Lc@ei9@?mC$#ArWB@T5JGgaguTSfn1hkxx`V~S}D0tZ)S(*QTX%n{+%6oq18?c~A-wTB88mSFvT&ceQJ(%8_qf$uCRNyd@>qUf zUk|q+Gx-(4>M@oDwr^&JP)^znV-(L2oJcP5SD#e+x9ptwQ=YmRz#)0K@k*H>%5^=}#e zx^&{{-uO4aJodwd6Z4mw6HB$*E1AZ^`pc!co@?KRQfH^#C+7JJ8?Rn`edm|EK5V*| zUTDtE{~Fx7WlouSE;sv8|0XhU{n0l*`SE>qE%4c*p56Avcc<1O17`wbM>N34lNh>oR`ChaxASL57a1lKz7AL(Jw)kU103|9?O74?NPQH=m8W0V<(6_KvgzL z)ulI$NK_xqHh?!lW(cx14DUVQfT1o1Mm5uWsN_4NK3C^vV>IYZe~r~<+M2e-(N#6f p!#1jxf19qCy#9Q?xGJc>_XBq3AERZ;d5-`9002ovPDHLkV1hq^R!sl^ diff --git a/src/main/resources/assets/betterend/textures/item/amber_gem.png b/src/main/resources/assets/betterend/textures/item/amber_gem.png index 96191a20d4c63ea1e9ec1fb013e51aa93c2cd07a..5a7e023f1ca694616aaad32c184d69f57030fde5 100644 GIT binary patch delta 380 zcmV-?0fYXk0+$1jB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pGEJ;K`R5(v#{Qv(y10{e7N|OyJHUO&^&Zcr>_1BJ_jEvQfzCd{p zfMUS+RWc0McEA6xo375l^!x@?6arpd|IKh>F9U;TvN$7W*nbnKD4G{wnqlCdqy`v+ zG(W%1#$e&hz_5Mp%m1x%JWv%#27sK6tQiDAu6VQWGL**vH{>7RSGcoTpftm_D#1{D$%n0HPTJO^cGyH$+4Z$EbNDL$g z^acY~17H|t$YmR*|KH*mz!=1a*$kD(pAKM#{7Yg0V`R<5CM38axNIKed4UuR0O|yr Vge8VuW&i*H00>D%PDHLkV1jDff^Yx; diff --git a/src/main/resources/assets/betterend/textures/item/raw_amber.png b/src/main/resources/assets/betterend/textures/item/raw_amber.png index 9e0fbbb16d5ad39923194bf3a2624df98cb022ab..ccb61594a182c6b0cd86558bdc28b5ab73973615 100644 GIT binary patch delta 346 zcmV-g0j2(x1M~urBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!vFvd!vV){sAK>D0SQS&K~y+TWBmXBKLaIz2}+X7=RItqyYv70FDEKLar6u`2YX_07*qoM6N<$g6^P(asU7T delta 379 zcmV->0fhea0+j=hBYy#0NklMVHZWi@7sNcE0ewU^tU?PQfcu8`X=Xtr0L;w(- zM07>)lag-Keq2x{A?RdOPX_4yEi3#X${SFuLxGdI>4eqgX5K|2i3nZZNUiyzA-R8B(OF;KN#P?h=q znBgskXFb?3M0Btq$$~5kE;%KR22-4M3-uWv93p5OVb6j(ut2*EZdmwUk$9apQJILe z1p58Y1sN=OUo=6R46aIiB^jP#cs$ZNcc{P{qASsZs!T@wAiTY{1b;qRe>B)kcYmf% Z@(X1fV@#3G?9l)K002ovPDHLkV1jlvr1Ss)