From d17c66048269d1f34a3e11cbc9324ca3904f890a Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 14 Oct 2020 23:03:47 +0300 Subject: [PATCH] Tree leaves --- .../features/PythadendronTreeFeature.java | 42 +++++++++++++++--- .../blockstates/pythadendron_log.json | 15 ++----- .../models/block/pythadendron_log.json | 42 +++++------------- .../models/block/pythadendron_log_2.json | 34 -------------- .../textures/block/pythadendron_log_side.png | Bin 1639 -> 2274 bytes .../textures/block/pythadendron_log_top.png | Bin 2136 -> 2407 bytes 6 files changed, 50 insertions(+), 83 deletions(-) delete mode 100644 src/main/resources/assets/betterend/models/block/pythadendron_log_2.json diff --git a/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java b/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java index e443fc3a..e813febc 100644 --- a/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java @@ -5,17 +5,23 @@ import java.util.Random; import java.util.function.Function; import net.minecraft.block.BlockState; +import net.minecraft.block.LeavesBlock; import net.minecraft.block.Material; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.BlockRegistry; import ru.betterend.registry.BlockTagRegistry; import ru.betterend.util.MHelper; import ru.betterend.util.SplineHelper; import ru.betterend.util.sdf.SDF; +import ru.betterend.util.sdf.operator.SDFDisplacement; +import ru.betterend.util.sdf.operator.SDFScale3D; +import ru.betterend.util.sdf.operator.SDFTranslate; +import ru.betterend.util.sdf.primitive.SDFSphere; public class PythadendronTreeFeature extends DefaultFeature { private static final Function REPLACE; @@ -29,7 +35,8 @@ public class PythadendronTreeFeature extends DefaultFeature { SplineHelper.offsetParts(spline, random, 0.7F, 0, 0.7F); Vector3f last = spline.get(spline.size() - 1); - branch(last.getX(), last.getY(), last.getZ(), size * 1.5F, MHelper.randRange(0, MHelper.PI2, random), random, 3, world, pos); + int depth = 3;//MHelper.floor((size - 10F) * 3F / 10F + 1F); + branch(last.getX(), last.getY(), last.getZ(), size * 1.5F, MHelper.randRange(0, MHelper.PI2, random), random, depth, world, pos); SDF function = SplineHelper.buildSDF(spline, 1.5F, 0.8F, (bpos) -> { return BlockRegistry.PYTHADENDRON.bark.getDefaultState(); @@ -57,21 +64,46 @@ public class PythadendronTreeFeature extends DefaultFeature { SplineHelper.offsetParts(spline, random, 0.3F, 0, 0.3F); Vector3f pos1 = spline.get(spline.size() - 1); - SplineHelper.fillSpline(spline, world, BlockRegistry.PYTHADENDRON.bark.getDefaultState(), pos, REPLACE); + boolean s1 = SplineHelper.fillSpline(spline, world, BlockRegistry.PYTHADENDRON.bark.getDefaultState(), pos, REPLACE); spline = SplineHelper.makeSpline(x, y, z, x2, y, z2, 5); SplineHelper.powerOffset(spline, size * MHelper.randRange(1.0F, 2.0F, random), 4); SplineHelper.offsetParts(spline, random, 0.3F, 0, 0.3F); Vector3f pos2 = spline.get(spline.size() - 1); - SplineHelper.fillSpline(spline, world, BlockRegistry.PYTHADENDRON.bark.getDefaultState(), pos, REPLACE); + boolean s2 = SplineHelper.fillSpline(spline, world, BlockRegistry.PYTHADENDRON.bark.getDefaultState(), pos, REPLACE); + + OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt()); + if (depth == 1) { + if (s1) { + SDF sphere = new SDFSphere().setRadius(MHelper.randRange(4.5F, 6.5F, random)).setBlock(BlockRegistry.PYTHADENDRON_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1)); + sphere = new SDFScale3D().setScale(1, 0.4F, 1).setSource(sphere); + //sphere = new SDFTranslate().setTranslate(pos1.getX() + pos.getX(), pos1.getY() + pos.getY(), pos1.getZ() + pos.getZ()).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere); + sphere.setReplaceFunction(REPLACE); + sphere.fillRecursive(world, new BlockPos(pos1.getX() + pos.getX(), pos1.getY() + pos.getY() + 1, pos1.getZ() + pos.getZ())); + } + if (s2) { + SDF sphere = new SDFSphere().setRadius(MHelper.randRange(4.5F, 6.5F, random)).setBlock(BlockRegistry.PYTHADENDRON_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1)); + sphere = new SDFScale3D().setScale(1, 0.4F, 1).setSource(sphere); + //sphere = new SDFTranslate().setTranslate(pos2.getX() + pos.getX(), pos2.getY() + pos.getY(), pos2.getZ() + pos.getZ()).setSource(sphere); + sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere); + sphere.setReplaceFunction(REPLACE); + sphere.fillRecursive(world, new BlockPos(pos2.getX() + pos.getX(), pos2.getY() + pos.getY() + 1, pos2.getZ() + pos.getZ())); + } + } float size1 = size * MHelper.randRange(0.75F, 0.95F, random); float size2 = size * MHelper.randRange(0.75F, 0.95F, random); float angle1 = angle + (float) Math.PI * 0.5F + MHelper.randRange(-0.1F, 0.1F, random); float angle2 = angle + (float) Math.PI * 0.5F + MHelper.randRange(-0.1F, 0.1F, random); - branch(pos1.getX(), pos1.getY(), pos1.getZ(), size1, angle1, random, depth - 1, world, pos); - branch(pos2.getX(), pos2.getY(), pos2.getZ(), size2, angle2, random, depth - 1, world, pos); + + if (s1) { + branch(pos1.getX(), pos1.getY(), pos1.getZ(), size1, angle1, random, depth - 1, world, pos); + } + if (s2) { + branch(pos2.getX(), pos2.getY(), pos2.getZ(), size2, angle2, random, depth - 1, world, pos); + } } static { diff --git a/src/main/resources/assets/betterend/blockstates/pythadendron_log.json b/src/main/resources/assets/betterend/blockstates/pythadendron_log.json index b3bf4cae..81d6781b 100644 --- a/src/main/resources/assets/betterend/blockstates/pythadendron_log.json +++ b/src/main/resources/assets/betterend/blockstates/pythadendron_log.json @@ -1,16 +1,7 @@ { "variants": { - "axis=x": [ - { "model": "betterend:block/pythadendron_log", "x": 90, "y": 90 }, - { "model": "betterend:block/pythadendron_log_2", "x": 90, "y": 90 } - ], - "axis=y": [ - { "model": "betterend:block/pythadendron_log" }, - { "model": "betterend:block/pythadendron_log_2" } - ], - "axis=z": [ - { "model": "betterend:block/pythadendron_log", "x": 90 }, - { "model": "betterend:block/pythadendron_log_2", "x": 90 } - ] + "axis=x": { "model": "betterend:block/pythadendron_log", "x": 90, "y": 90 }, + "axis=y": { "model": "betterend:block/pythadendron_log" }, + "axis=z": { "model": "betterend:block/pythadendron_log", "x": 90 } } } diff --git a/src/main/resources/assets/betterend/models/block/pythadendron_log.json b/src/main/resources/assets/betterend/models/block/pythadendron_log.json index 4c1a7e26..487b3a10 100644 --- a/src/main/resources/assets/betterend/models/block/pythadendron_log.json +++ b/src/main/resources/assets/betterend/models/block/pythadendron_log.json @@ -1,34 +1,12 @@ { - "parent": "block/cube", - "textures": { - "top": "betterend:block/pythadendron_log_top", - "side": "betterend:block/pythadendron_log_side_1", - "glow": "betterend:block/pythadendron_log_side_glow_1", - "particle": "#side" - }, - "elements": [ - { - "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { - "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "east" } - } - } - ] + "parent": "block/cube", + "textures": { + "down": "betterend:block/pythadendron_log_top", + "east": "betterend:block/pythadendron_log_side", + "north": "betterend:block/pythadendron_log_side", + "particle": "betterend:block/pythadendron_log_side", + "south": "betterend:block/pythadendron_log_side", + "up": "betterend:block/pythadendron_log_top", + "west": "betterend:block/pythadendron_log_side" + } } diff --git a/src/main/resources/assets/betterend/models/block/pythadendron_log_2.json b/src/main/resources/assets/betterend/models/block/pythadendron_log_2.json deleted file mode 100644 index 68a619d4..00000000 --- a/src/main/resources/assets/betterend/models/block/pythadendron_log_2.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "top": "betterend:block/pythadendron_log_top", - "side": "betterend:block/pythadendron_log_side_2", - "glow": "betterend:block/pythadendron_log_side_glow_2", - "particle": "#side" - }, - "elements": [ - { - "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { - "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#glow", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/textures/block/pythadendron_log_side.png b/src/main/resources/assets/betterend/textures/block/pythadendron_log_side.png index cf0f76a958de5556962dc78e7d21e738274fef00..ee222e5a937622a479c241ae757d6d51ec6384a1 100644 GIT binary patch delta 1228 zcmaFP^GI-l1rzJVjaI&llQ%QwPHtz^nXJH6!(|d;WMpLwL>7~mF)1T+FEc3$AY`=- zjI9g|CQC8P)F+yo8JZ+nn&=vs7@Fvs8k-pDCMBk%=$fP@CZ`%DCMBC0Co3sb6)6D zr07~&8ky@FC7P!uCmW|ETbdfeO!F_wOwXLWoLSt;B+<;o+`zy{*DS?6RoBqWBuzId z)iPB#*)qi>*)T2D!pO)}Ng*ZKDlNY#H?hQ4DKj@QJypLTFMaYO<~v=^7SmX%nQ zXQbxYDj69V8R!}U5h6$?Pi1kgFG@+X%E?rKC{0W*$;<~TE>0{fEalo zF;R6=w7;;UL|b`!T6%ifw;Oq}w}ZH+Om?#LY`QL`Z{RgSV*M4D#Z5hCHEZH<&EYh7Uxl2azv$|B*Xb9J-J6s-N zC46x&Up|NOqu=}1?i62>*CVPq#llcut?h8z5{;Hqzm^{PFaF`igU?ZW&9h0qKkiGnDrMH36F+Xm zzn_}*^7(vyyL0R1>$F8apWfMOrK$6_jy3L#uEOl&qLHmC8_Zp;H6G33^kb38zS5wg zR?gBVb>`ZPb((A+xA+`gCpWcRQc!SK)_1n=erB9OwrfpGQbaRjE=J$US^Fyc3d=ET z_0#3;aRDbeo_zTG>GZ^P?QErg-QIrwcDw%e-pOL0yRJSu{`KbUyZ$CJjV+sWllopR zOVW-0z1scf9L+b^T%O-Lm$Wr5sf*#>jaa>D{=A7x_inqtGxx|!wsm~|8b+IWq%9Vy z9*hXxV$7EBw)0?a@YflO9-ce0z;ABLMb4j1ZV4MRj>$R*H67h>u`W-bPRdK6V`|~= zW`{%DtLoKMRBG>48DIK(!gP}8ew+PP#CY)`52bin ziMzMrPf!2XROr2j`HlC~rgbwmeeSRQgR`%I7Z%Dao-UVgMuQRYY>%eqsF*FwD$ z#P^(^_4vb*gSt%`CZ|k;E+{SIS~zRT$yZ!|1fKOesjl08QZB;I;_f8prKZ=UO&0h~ z6IoEa=WB?z(W1lKAH^T{zHTkoklJymKYR1zzrjA+3=hhO#mAk$V}3PaZQ$JanUbgd eZYjMp|5LB@?Kg82+dd%%AnQ>xqv}t1|$Br>mdKI;Vst04gT#E&u=k diff --git a/src/main/resources/assets/betterend/textures/block/pythadendron_log_top.png b/src/main/resources/assets/betterend/textures/block/pythadendron_log_top.png index c381194969de97bd0210a9b8e10dffa611902612..9f28f48453695f6f965eff0074977d5ba660b478 100644 GIT binary patch delta 802 zcmca1@LXtu1ryuPjaI!(TqYq#MpnkgRtA=nFES}3bN?{~sF<4>SSDLq8t5jbq+04G znwXgACK_3$>L#0*m?o#CS)`gIB~313zNl5DaGOTj0#Mq#uP+a0#R$^72k(y_#WMp7u zplb+3NKUV3wHJgcO3p~kOHWO)Rnnilmo={b0>eQ81_mY(PZ!4!jq|FL{3l;>5IAZ) z^W=mUd%;Fgu9)erI!`xDi~I5*{KJdy-?p&329#?q5KEcv;Gw`$pZLq*>gCJtzrKDq zac`_oyK1|i6j)3U%uiCX$egun-R}GE zxmyn<)_+*~zxrSBS$Xxy9pAyYya8Wo>=C> zKcj4`Z|M<@r9tXXuSBIU&G}{GDs+8Oc-VQZt&0r{T~210KB{lz`f)_&_{;0RJy;c% z*4&j`ak^V>ipIxUd+X>2Y$f_r8kBsTtQ0-Wj=rC!{QF-bk1)%fM#ZY_x3@M;TVM0) zf{A)5!-3sV`Z-k!DP0b3W)EHnTy2u#HOQ+p6Kb&Kms%CI^0R>YPmPC*8N1e)tv29O zWXfq{lbu^475nwmqgw^_)Aw8|+ufQesAsYDf}2Xy&LGPbZ1w85>9^CCtD&3EFI{t5turTlcUs;bj?eB}7TextwvROV7x?&P zzqRQz?sLmdKI;Vst0N7qs AQ~&?~ delta 638 zcmV-^0)hSK64(%sI06OTu{wV&6o$3Z>b9~hY^8BBjzeKO zNJYU64J{NY8EOh>;0YkZFuXxvCXpYO+y9^c z?21V|H4NkZz2n25FK>mzrfKTBUa!}-ZJU<)YVzUe_nUN;R8?hvnkHGX8{K(2J;<`m z_x++Ms1AalX$>GD1ZSS-RFnEL`z}5{{Cb}KxL#gMDL0!96_#a@<5HHT=XtQXu1iW; zYCnE#{T07%d*d`u2Wk*_LEr|y?JGxFhUM8F5v#G3s}|XU)XC|QEb;7>btHh{(wuFw zIEoR#x~UgYqChX6?C%XyL~0MTr;1{_L%hW#z`N%*|OraMhjkgk%e zNLcHlSPX;V=ZkOp9pq5* zIwUR^m-+?DQZKnJ<-({8DJzL$hf7gv(d=<8)=(pqSy4$fJ>8;7>2DHx^y~kF6FOm6 zgzGt8w>Q^8ak*$<+wo0bXfwoie~;+l{_&?jZ@X^-43Ee{cenQrq8BIU?}%&lb-60C Y|JS2lyyora$p8QV07*qoM6N<$f;k*4GXMYp