From 6c4a1d2eb00d546189dd4716768169a16dbe4507 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 29 Sep 2020 22:18:55 +0300 Subject: [PATCH 1/2] Mushroom improvements --- .../blocks/BlockMossyGlowshroomCap.java | 29 +++++ .../blocks/BlockMossyGlowshroomFur.java | 117 ++++++++++++++++++ .../gui/EndStoneSmelterRecipeBookScreen.java | 6 - .../ru/betterend/registry/BlockRegistry.java | 4 + src/main/java/ru/betterend/util/sdf/SDF.java | 19 ++- .../util/sdf/operator/SDFCoordModify.java | 22 ++++ .../util/sdf/operator/SDFCopyRotate.java | 19 +++ .../util/sdf/operator/SDFFlatWave.java | 8 +- .../features/MossyGlowshroomFeature.java | 100 +++++++++++---- .../blockstates/mossy_glowshroom_cap.json | 71 +++++++++++ .../blockstates/mossy_glowshroom_fur.json | 10 ++ .../betterend/models/block/cube_noshade.json | 22 ++++ .../models/block/mossy_glowshroom_cap.json | 6 + .../mossy_glowshroom_cap_transition.json | 12 ++ .../models/block/mossy_glowshroom_fur.json | 75 +++++++++++ .../block/mossy_glowshroom_hymenophore_1.json | 4 +- .../block/mossy_glowshroom_hymenophore_2.json | 4 +- .../block/mossy_glowshroom_hymenophore_3.json | 4 +- .../block/mossy_glowshroom_hymenophore_4.json | 4 +- .../models/item/mossy_glowshroom_cap.json | 3 + .../models/item/mossy_glowshroom_fur.json | 6 + .../textures/block/mossy_glowshroom_cap.png | Bin 0 -> 2380 bytes .../block/mossy_glowshroom_cap_transition.png | Bin 0 -> 2684 bytes .../textures/block/mossy_glowshroom_fur.png | Bin 0 -> 2009 bytes .../block/mossy_glowshroom_hymenophore_1.png | Bin 2061 -> 2387 bytes .../block/mossy_glowshroom_hymenophore_2.png | Bin 2489 -> 2547 bytes .../block/mossy_glowshroom_hymenophore_3.png | Bin 2278 -> 2624 bytes .../block/mossy_glowshroom_hymenophore_4.png | Bin 2490 -> 2699 bytes 28 files changed, 501 insertions(+), 44 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/BlockMossyGlowshroomCap.java create mode 100644 src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java create mode 100644 src/main/java/ru/betterend/util/sdf/operator/SDFCoordModify.java create mode 100644 src/main/java/ru/betterend/util/sdf/operator/SDFCopyRotate.java create mode 100644 src/main/resources/assets/betterend/blockstates/mossy_glowshroom_cap.json create mode 100644 src/main/resources/assets/betterend/blockstates/mossy_glowshroom_fur.json create mode 100644 src/main/resources/assets/betterend/models/block/cube_noshade.json create mode 100644 src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap.json create mode 100644 src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap_transition.json create mode 100644 src/main/resources/assets/betterend/models/block/mossy_glowshroom_fur.json create mode 100644 src/main/resources/assets/betterend/models/item/mossy_glowshroom_cap.json create mode 100644 src/main/resources/assets/betterend/models/item/mossy_glowshroom_fur.json create mode 100644 src/main/resources/assets/betterend/textures/block/mossy_glowshroom_cap.png create mode 100644 src/main/resources/assets/betterend/textures/block/mossy_glowshroom_cap_transition.png create mode 100644 src/main/resources/assets/betterend/textures/block/mossy_glowshroom_fur.png diff --git a/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomCap.java b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomCap.java new file mode 100644 index 00000000..51273696 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomCap.java @@ -0,0 +1,29 @@ +package ru.betterend.blocks; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import ru.betterend.registry.BlockRegistry; + +public class BlockMossyGlowshroomCap extends Block { + public static final BooleanProperty TRANSITION = BooleanProperty.of("transition"); + + public BlockMossyGlowshroomCap() { + super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).sounds(BlockSoundGroup.WOOD)); + this.setDefaultState(this.stateManager.getDefaultState().with(TRANSITION, false)); + } + + public BlockState getPlacementState(ItemPlacementContext ctx) { + return this.getDefaultState().with(TRANSITION, BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(ctx.getWorld().getBlockState(ctx.getBlockPos().down()))); + } + + protected void appendProperties(StateManager.Builder builder) { + builder.add(TRANSITION); + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java new file mode 100644 index 00000000..e64493fa --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockMossyGlowshroomFur.java @@ -0,0 +1,117 @@ +package ru.betterend.blocks; + +import java.util.EnumMap; +import java.util.List; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.Material; +import net.minecraft.block.ShapeContext; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.ItemPlacementContext; +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.state.StateManager; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; +import ru.betterend.blocks.basis.BlockBaseNotFull; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; + +public class BlockMossyGlowshroomFur extends BlockBaseNotFull implements IRenderTypeable { + private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); + public static final DirectionProperty FACING = Properties.FACING; + + public BlockMossyGlowshroomFur() { + super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) + .breakByTool(FabricToolTags.SHEARS) + .sounds(BlockSoundGroup.WET_GRASS) + .lightLevel(15) + .breakByHand(true) + .noCollision()); + } + + @Override + protected void appendProperties(StateManager.Builder stateManager) { + stateManager.add(FACING); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { + return BOUNDING_SHAPES.get(state.get(FACING)); + } + + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + BlockState blockState = this.getDefaultState(); + WorldView worldView = ctx.getWorld(); + BlockPos blockPos = ctx.getBlockPos(); + Direction[] directions = ctx.getPlacementDirections(); + for (int i = 0; i < directions.length; ++i) { + Direction direction = directions[i]; + Direction direction2 = direction.getOpposite(); + blockState = (BlockState) blockState.with(FACING, direction2); + if (blockState.canPlaceAt(worldView, blockPos)) { + return blockState; + } + } + return null; + } + + @Override + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + Direction direction = (Direction) state.get(FACING); + BlockPos blockPos = pos.offset(direction.getOpposite()); + return sideCoversSmallSquare(world, blockPos, direction); + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + if (!canPlaceAt(state, world, pos)) { + return Blocks.AIR.getDefaultState(); + } + else { + return state; + } + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && tool.getItem().isIn(FabricToolTags.SHEARS) || EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, tool) > 0) { + return Lists.newArrayList(new ItemStack(this)); + } else { + return Lists.newArrayList(); + } + } + + @Override + public ERenderLayer getRenderLayer() { + return ERenderLayer.CUTOUT; + } + + static { + BOUNDING_SHAPES.put(Direction.UP, VoxelShapes.cuboid(0.0, 0.0, 0.0, 1.0, 0.5, 1.0)); + BOUNDING_SHAPES.put(Direction.DOWN, VoxelShapes.cuboid(0.0, 0.5, 0.0, 1.0, 1.0, 1.0)); + BOUNDING_SHAPES.put(Direction.NORTH, VoxelShapes.cuboid(0.0, 0.0, 0.5, 1.0, 1.0, 1.0)); + BOUNDING_SHAPES.put(Direction.SOUTH, VoxelShapes.cuboid(0.0, 0.0, 0.0, 1.0, 1.0, 0.5)); + BOUNDING_SHAPES.put(Direction.WEST, VoxelShapes.cuboid(0.5, 0.0, 0.0, 1.0, 1.0, 1.0)); + BOUNDING_SHAPES.put(Direction.EAST, VoxelShapes.cuboid(0.0, 0.0, 0.0, 0.5, 1.0, 1.0)); + } +} diff --git a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java index 56ccc5b5..b71377da 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java @@ -5,13 +5,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; -import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.recipebook.AbstractFurnaceRecipeBookScreen; import net.minecraft.client.gui.screen.recipebook.BlastFurnaceRecipeBookScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; diff --git a/src/main/java/ru/betterend/registry/BlockRegistry.java b/src/main/java/ru/betterend/registry/BlockRegistry.java index 8c68a9db..6ff2a2d3 100644 --- a/src/main/java/ru/betterend/registry/BlockRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockRegistry.java @@ -8,6 +8,8 @@ import net.minecraft.util.registry.Registry; import ru.betterend.BetterEnd; import ru.betterend.blocks.AeterniumBlock; import ru.betterend.blocks.BlockEndstoneDust; +import ru.betterend.blocks.BlockMossyGlowshroomCap; +import ru.betterend.blocks.BlockMossyGlowshroomFur; import ru.betterend.blocks.BlockMossyGlowshroomHymenophore; import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockTerrain; @@ -24,7 +26,9 @@ public class BlockRegistry { public static final Block END_MOSS = registerBlock("end_moss", new BlockTerrain(MaterialColor.CYAN)); // Wooden Materials // + public static final Block MOSSY_GLOWSHROOM_CAP = registerBlock("mossy_glowshroom_cap", new BlockMossyGlowshroomCap()); public static final Block MOSSY_GLOWSHROOM_HYMENOPHORE = registerBlock("mossy_glowshroom_hymenophore", new BlockMossyGlowshroomHymenophore()); + public static final Block MOSSY_GLOWSHROOM_FUR = registerBlock("mossy_glowshroom_fur", new BlockMossyGlowshroomFur()); public static final WoodenMaterial MOSSY_GLOWSHROOM = new WoodenMaterial("mossy_glowshroom", MaterialColor.GRAY, MaterialColor.WOOD); // Ores // diff --git a/src/main/java/ru/betterend/util/sdf/SDF.java b/src/main/java/ru/betterend/util/sdf/SDF.java index 899c2782..d3dc2bb8 100644 --- a/src/main/java/ru/betterend/util/sdf/SDF.java +++ b/src/main/java/ru/betterend/util/sdf/SDF.java @@ -17,6 +17,9 @@ public abstract class SDF { private Function postProcess = (info) -> { return info.getState(); }; + private Function canReplace = (state) -> { + return state.getMaterial().isReplaceable(); + }; public abstract float getDistance(float x, float y, float z); @@ -27,13 +30,17 @@ public abstract class SDF { return this; } - public void fillRecursive(ServerWorldAccess world, BlockPos start, Function canReplace, int dx, int dy, int dz) { + public SDF setReplaceFunction(Function canReplace) { + this.canReplace = canReplace; + return this; + } + + public Set fillRecursive(ServerWorldAccess world, BlockPos start, int dx, int dy, int dz) { Map mapWorld = Maps.newHashMap(); Set blocks = Sets.newHashSet(); Set ends = Sets.newHashSet(); Set add = Sets.newHashSet(); ends.add(new BlockPos(0, 0, 0)); - boolean process = postProcess != null; boolean run = true; while (run) { @@ -70,9 +77,11 @@ public abstract class SDF { BlockState state = postProcess.apply(info); BlocksHelper.setWithoutUpdate(world, pos, state); }); + + return mapWorld.keySet(); } - public void fillRecursive(ServerWorldAccess world, BlockPos start, Function canReplace) { + public Set fillRecursive(ServerWorldAccess world, BlockPos start) { Map mapWorld = Maps.newHashMap(); Set blocks = Sets.newHashSet(); Set ends = Sets.newHashSet(); @@ -87,7 +96,7 @@ public abstract class SDF { BlockPos wpos = pos.add(start); if (!blocks.contains(pos) && canReplace.apply(world.getBlockState(wpos))) { - if (this.getDistance(pos.getX(), pos.getY(), pos.getZ()) <= 0) { + if (this.getDistance(pos.getX(), pos.getY(), pos.getZ()) < 0) { BlockState state = getBlockState(wpos); PosInfo.create(mapWorld, wpos).setState(state); add.add(pos); @@ -108,5 +117,7 @@ public abstract class SDF { BlockState state = postProcess.apply(info); BlocksHelper.setWithoutUpdate(world, pos, state); }); + + return mapWorld.keySet(); } } diff --git a/src/main/java/ru/betterend/util/sdf/operator/SDFCoordModify.java b/src/main/java/ru/betterend/util/sdf/operator/SDFCoordModify.java new file mode 100644 index 00000000..ea04ace9 --- /dev/null +++ b/src/main/java/ru/betterend/util/sdf/operator/SDFCoordModify.java @@ -0,0 +1,22 @@ +package ru.betterend.util.sdf.operator; + +import java.util.function.Consumer; + +import net.minecraft.client.util.math.Vector3f; + +public class SDFCoordModify extends SDFUnary { + private static final Vector3f POS = new Vector3f(); + private Consumer function; + + public SDFCoordModify setFunction(Consumer function) { + this.function = function; + return this; + } + + @Override + public float getDistance(float x, float y, float z) { + POS.set(x, y, z); + function.accept(POS); + return this.source.getDistance(POS.getX(), POS.getY(), POS.getZ()); + } +} diff --git a/src/main/java/ru/betterend/util/sdf/operator/SDFCopyRotate.java b/src/main/java/ru/betterend/util/sdf/operator/SDFCopyRotate.java new file mode 100644 index 00000000..2c66bb2b --- /dev/null +++ b/src/main/java/ru/betterend/util/sdf/operator/SDFCopyRotate.java @@ -0,0 +1,19 @@ +package ru.betterend.util.sdf.operator; + +import ru.betterend.util.MHelper; + +public class SDFCopyRotate extends SDFUnary { + int count = 1; + + public SDFCopyRotate setCount(int count) { + this.count = count; + return this; + } + + @Override + public float getDistance(float x, float y, float z) { + float px = (float) Math.atan2(x, z); + float pz = MHelper.length(x, z); + return this.source.getDistance(px, y, pz); + } +} diff --git a/src/main/java/ru/betterend/util/sdf/operator/SDFFlatWave.java b/src/main/java/ru/betterend/util/sdf/operator/SDFFlatWave.java index 83d5c540..a94f2c3c 100644 --- a/src/main/java/ru/betterend/util/sdf/operator/SDFFlatWave.java +++ b/src/main/java/ru/betterend/util/sdf/operator/SDFFlatWave.java @@ -3,10 +3,11 @@ package ru.betterend.util.sdf.operator; public class SDFFlatWave extends SDFDisplacement { private int rayCount = 1; private float intensity; + private float angle; public SDFFlatWave() { setFunction((pos) -> { - return (float) Math.cos(Math.atan2(pos.getX(), pos.getZ()) * rayCount) * intensity; + return (float) Math.cos(Math.atan2(pos.getX(), pos.getZ()) * rayCount + angle) * intensity; }); } @@ -15,6 +16,11 @@ public class SDFFlatWave extends SDFDisplacement { return this; } + public SDFFlatWave setAngle(float angle) { + this.angle = angle; + return this; + } + public SDFFlatWave setIntensity(float intensity) { this.intensity = intensity; return this; diff --git a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java b/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java index af8cda1a..0ccfb29c 100644 --- a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java @@ -2,15 +2,19 @@ package ru.betterend.world.features; import java.util.List; import java.util.Random; -import java.util.function.Function; +import java.util.Set; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import ru.betterend.blocks.BlockMossyGlowshroomCap; +import ru.betterend.blocks.BlockMossyGlowshroomFur; +import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.BlockRegistry; import ru.betterend.registry.BlockTagRegistry; import ru.betterend.util.BlocksHelper; @@ -18,16 +22,21 @@ import ru.betterend.util.MHelper; import ru.betterend.util.SplineHelper; import ru.betterend.util.sdf.SDF; import ru.betterend.util.sdf.operator.SDFBinary; +import ru.betterend.util.sdf.operator.SDFCoordModify; +import ru.betterend.util.sdf.operator.SDFFlatWave; +import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSmoothUnion; +import ru.betterend.util.sdf.operator.SDFSubtraction; import ru.betterend.util.sdf.operator.SDFTranslate; import ru.betterend.util.sdf.operator.SDFUnion; import ru.betterend.util.sdf.primitive.SDFCapedCone; import ru.betterend.util.sdf.primitive.SDFSphere; public class MossyGlowshroomFeature extends DefaultFeature { - private static final Function REPLACE; + private static final Vector3f CENTER = new Vector3f(); private static final SDFBinary FUNCTION; private static final SDFTranslate HEAD_POS; + private static final SDFFlatWave ROOTS; @Override public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, DefaultFeatureConfig featureConfig) { @@ -38,7 +47,6 @@ public class MossyGlowshroomFeature extends DefaultFeature { if (!world.getBlockState(blockPos.down()).isIn(BlockTagRegistry.END_GROUND)) { return false; } - //FUNCTION.fillRecursive(world, getTopPos(world, blockPos), REPLACE, 20, 50, 20); float height = MHelper.randRange(10F, 25F, random); int count = MHelper.floor(height / 4); @@ -48,51 +56,93 @@ public class MossyGlowshroomFeature extends DefaultFeature { return BlockRegistry.MOSSY_GLOWSHROOM.log.getDefaultState(); }); Vector3f pos = spline.get(spline.size() - 1); - BlockPos up = blockPos.add(pos.getX(), pos.getY(), pos.getZ()); + CENTER.set(blockPos.getX(), 0, blockPos.getZ()); HEAD_POS.setTranslate(pos.getX(), pos.getY(), pos.getZ()); + ROOTS.setAngle(random.nextFloat() * MHelper.PI2); FUNCTION.setSourceA(sdf); - FUNCTION.fillRecursive(world, blockPos, REPLACE); - BlocksHelper.setWithoutUpdate(world, up, Blocks.DIAMOND_BLOCK.getDefaultState()); + Set blocks = FUNCTION.fillRecursive(world, blockPos); + + for (BlockPos bpos: blocks) { + BlockState state = world.getBlockState(bpos); + if (state.getBlock() == BlockRegistry.MOSSY_GLOWSHROOM_HYMENOPHORE) { + if (world.isAir(bpos.north())) { + BlocksHelper.setWithoutUpdate(world, bpos.north(), BlockRegistry.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockMossyGlowshroomFur.FACING, Direction.NORTH)); + } + if (world.isAir(bpos.east())) { + BlocksHelper.setWithoutUpdate(world, bpos.east(), BlockRegistry.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockMossyGlowshroomFur.FACING, Direction.EAST)); + } + if (world.isAir(bpos.south())) { + BlocksHelper.setWithoutUpdate(world, bpos.south(), BlockRegistry.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockMossyGlowshroomFur.FACING, Direction.SOUTH)); + } + if (world.isAir(bpos.west())) { + BlocksHelper.setWithoutUpdate(world, bpos.west(), BlockRegistry.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockMossyGlowshroomFur.FACING, Direction.WEST)); + } + if (world.getBlockState(bpos.down()).getMaterial().isReplaceable()) { + BlocksHelper.setWithoutUpdate(world, bpos.down(), BlockRegistry.MOSSY_GLOWSHROOM_FUR.getDefaultState().with(BlockMossyGlowshroomFur.FACING, Direction.DOWN)); + } + } + else if (BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(state) && random.nextBoolean() && world.getBlockState(bpos.up()).getBlock() == BlockRegistry.MOSSY_GLOWSHROOM_CAP) { + BlocksHelper.setWithoutUpdate(world, bpos, BlockRegistry.MOSSY_GLOWSHROOM_CAP.getDefaultState().with(BlockMossyGlowshroomCap.TRANSITION, true)); + BlocksHelper.setWithoutUpdate(world, bpos.up(), BlockRegistry.MOSSY_GLOWSHROOM_CAP); + } + } return true; } static { - /*SDFLine stem = new SDFLine(Blocks.GOLD_BLOCK.getDefaultState()).setRadius(2F).setEnd(0, 15, 0); + SDFCapedCone cone1 = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_CAP.getDefaultState()).setHeight(2.5F).setRadius1(1.5F).setRadius2(2.5F); + SDFCapedCone cone2 = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_CAP.getDefaultState()).setHeight(3F).setRadius1(2.5F).setRadius2(13F); + SDF posedCone2 = new SDFTranslate().setTranslate(0, 5, 0).setSource(cone2); + SDF posedCone3 = new SDFTranslate().setTranslate(0, 7F, 0).setSource(cone2); + SDF upCone = new SDFSubtraction().setSourceA(posedCone2).setSourceB(posedCone3); + SDF wave = new SDFFlatWave().setRaysCount(12).setIntensity(1.3F).setSource(upCone); + SDF cones = new SDFSmoothUnion().setRadius(3).setSourceA(cone1).setSourceB(wave); - SDFSphere outerSphere = new SDFSphere(Blocks.REDSTONE_BLOCK.getDefaultState()).setRadius(10); - SDFSphere innerSphere = new SDFSphere(Blocks.DIAMOND_BLOCK.getDefaultState()).setRadius(10); + SDF innerCone = new SDFTranslate().setTranslate(0, 1.25F, 0).setSource(upCone); + innerCone = new SDFScale3D().setScale(1.2F, 1F, 1.2F).setSource(innerCone); + cones = new SDFUnion().setSourceA(cones).setSourceB(innerCone); - SDFTranslate sphereOffset = new SDFTranslate().setTranslate(0, -10F, 0); + SDF glowCone = new SDFCapedCone(BlockRegistry.MOSSY_GLOWSHROOM_HYMENOPHORE.getDefaultState()).setHeight(3F).setRadius1(2F).setRadius2(12.5F); + glowCone = new SDFTranslate().setTranslate(0, 4.25F, 0).setSource(glowCone); + glowCone = new SDFSubtraction().setSourceA(glowCone).setSourceB(posedCone3); - SDFFlatWave wave = new SDFFlatWave().setRaysCount(5).setIntensity(1.2F); - ISDF head = new SDFSubtraction().setSourceA(outerSphere).setSourceB(sphereOffset.setSource(innerSphere)); - head = new SDFScale3D().setScale(1, 0.5F, 1).setSource(head); - head = wave.setSource(head); + cones = new SDFUnion().setSourceA(cones).setSourceB(glowCone); - SDFTranslate headOffset = new SDFTranslate().setTranslate(0, 15, 0); + OpenSimplexNoise noise = new OpenSimplexNoise(1234); + cones = new SDFCoordModify().setFunction((pos) -> { + float dist = MHelper.length(pos.getX(), pos.getZ()); + float y = pos.getY() + (float) noise.eval(pos.getX() * 0.1 + CENTER.getX(), pos.getZ() * 0.1 + CENTER.getZ()) * dist * 0.3F - dist * 0.15F; + pos.set(pos.getX(), y, pos.getZ()); + }).setSource(cones); - FUNCTION = new SDFSmoothUnion().setRadius(5).setSourceA(stem).setSourceB(headOffset.setSource(head));*/ + HEAD_POS = (SDFTranslate) new SDFTranslate().setSource(new SDFTranslate().setTranslate(0, 2.5F, 0).setSource(cones)); - SDFCapedCone cone = new SDFCapedCone(Blocks.GOLD_BLOCK.getDefaultState()).setHeight(10).setRadius1(0).setRadius2(10); - //SDFSphere sphere = new SDFSphere(Blocks.GOLD_BLOCK.getDefaultState()).setRadius(10); - HEAD_POS = (SDFTranslate) new SDFTranslate().setSource(cone); + SDF roots = new SDFSphere(BlockRegistry.MOSSY_GLOWSHROOM.bark.getDefaultState()).setRadius(4F); + roots = new SDFScale3D().setScale(1, 0.7F, 1).setSource(roots); + ROOTS = (SDFFlatWave) new SDFFlatWave().setRaysCount(5).setIntensity(1.5F).setSource(roots); - FUNCTION = new SDFUnion().setSourceB(HEAD_POS); + FUNCTION = new SDFSmoothUnion().setRadius(4).setSourceB(new SDFUnion().setSourceA(HEAD_POS).setSourceB(ROOTS)); FUNCTION.setPostProcess((info) -> { if (BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getState())) { - if (!BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateUp())) { + BlockState up = info.getStateUp(); + if (!BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(up) || !BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateDown())) { return BlockRegistry.MOSSY_GLOWSHROOM.bark.getDefaultState(); } - else if (!BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateDown())) { - return BlockRegistry.MOSSY_GLOWSHROOM.bark.getDefaultState(); + } + else if (info.getState().getBlock() == BlockRegistry.MOSSY_GLOWSHROOM_CAP) { + if (BlockRegistry.MOSSY_GLOWSHROOM.isTreeLog(info.getStateDown())) { + return info.getState().with(BlockMossyGlowshroomCap.TRANSITION, true); } } return info.getState(); }); - REPLACE = (state) -> { + FUNCTION.setReplaceFunction((state) -> { + if (state.getBlock() != Blocks.END_STONE && state.isIn(BlockTagRegistry.END_GROUND)) { + return true; + } return state.getMaterial().isReplaceable(); - }; + }); } } diff --git a/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_cap.json b/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_cap.json new file mode 100644 index 00000000..5a55cb1b --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_cap.json @@ -0,0 +1,71 @@ +{ + "variants": { + "transition=false": [ + { "model": "betterend:block/mossy_glowshroom_cap" }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 90, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 180, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 270, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 90, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 180, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 270, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 90, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 180, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 270, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 90, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 180, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 270, "z": 90 }, + { "model": "betterend:block/mossy_glowshroom_cap", "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 90, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 180, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 270, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 90, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 180, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 270, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 90, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 180, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 270, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 90, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 180, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 270, "z": 180 }, + { "model": "betterend:block/mossy_glowshroom_cap", "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 90, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 180, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "y": 270, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 90, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 180, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 90, "y": 270, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 90, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 180, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 180, "y": 270, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 90, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 180, "z": 270 }, + { "model": "betterend:block/mossy_glowshroom_cap", "x": 270, "y": 270, "z": 270 } + ], + "transition=true": { "model": "betterend:block/mossy_glowshroom_cap_transition" } + } +} diff --git a/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_fur.json b/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_fur.json new file mode 100644 index 00000000..ad5cd9f4 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/mossy_glowshroom_fur.json @@ -0,0 +1,10 @@ +{ + "variants": { + "facing=up": { "model": "betterend:block/mossy_glowshroom_fur" }, + "facing=down": { "model": "betterend:block/mossy_glowshroom_fur", "x": 180 }, + "facing=north": { "model": "betterend:block/mossy_glowshroom_fur", "x": 90 }, + "facing=south": { "model": "betterend:block/mossy_glowshroom_fur", "x": 90, "y": 180 }, + "facing=east": { "model": "betterend:block/mossy_glowshroom_fur", "x": 90, "y": 90 }, + "facing=west": { "model": "betterend:block/mossy_glowshroom_fur", "x": 90, "y": 270 } + } +} diff --git a/src/main/resources/assets/betterend/models/block/cube_noshade.json b/src/main/resources/assets/betterend/models/block/cube_noshade.json new file mode 100644 index 00000000..2f64924d --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/cube_noshade.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap.json new file mode 100644 index 00000000..18e8addd --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "betterend:block/mossy_glowshroom_cap" + } +} diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap_transition.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap_transition.json new file mode 100644 index 00000000..ff91d84a --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_cap_transition.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "betterend:block/mossy_glowshroom_log_side", + "east": "betterend:block/mossy_glowshroom_cap_transition", + "north": "betterend:block/mossy_glowshroom_cap_transition", + "particle": "betterend:block/mossy_glowshroom_cap_transition", + "south": "betterend:block/mossy_glowshroom_cap_transition", + "up": "betterend:block/mossy_glowshroom_cap", + "west": "betterend:block/mossy_glowshroom_cap_transition" + } +} diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_fur.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_fur.json new file mode 100644 index 00000000..3eff83e4 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_fur.json @@ -0,0 +1,75 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/mossy_glowshroom_fur", + "texture": "betterend:block/mossy_glowshroom_fur" + }, + "elements": [ + { + "__comment": "PlaneY1", + "from": [ 0, -0.001, -8 ], + "to": [ 16, 0, 8 ], + "rotation": { "origin": [ 0, 0, 8 ], "axis": "x", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneY1", + "from": [ 0, 0, 8 ], + "to": [ 16, 0.001, 24 ], + "rotation": { "origin": [ 0, 0.000000954, 8 ], "axis": "x", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + }, + { + "__comment": "PlaneY4", + "from": [ 8, -0.001, 0 ], + "to": [ 24, 0, 16 ], + "rotation": { "origin": [ 8, 0, 16 ], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 270 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 270 } + } + }, + { + "__comment": "PlaneY4", + "from": [ -8, 0, 2 ], + "to": [ 8, 0.001, 18 ], + "rotation": { "origin": [ 8, 0, 18 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 90 } + } + }, + { + "__comment": "PlaneX6", + "from": [ 0, 0, -6.5 ], + "to": [ 0.001, 16, 16 ], + "rotation": { "origin": [ 0, 16, 16 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 } + } + }, + { + "__comment": "PlaneX6", + "from": [ -6.5, 0, 15.999 ], + "to": [ 16, 16, 16 ], + "rotation": { "origin": [ 16, 16, 16 ], "axis": "y", "angle": -45 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "rotation": 180 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_1.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_1.json index 3049938f..ff69ee73 100644 --- a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_1.json +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_1.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", + "parent": "betterend:block/cube_noshade", "textures": { - "all": "betterend:block/mossy_glowshroom_hymenophore_1" + "texture": "betterend:block/mossy_glowshroom_hymenophore_1" } } diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_2.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_2.json index 52c99750..d66ec78c 100644 --- a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_2.json +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_2.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", + "parent": "betterend:block/cube_noshade", "textures": { - "all": "betterend:block/mossy_glowshroom_hymenophore_2" + "texture": "betterend:block/mossy_glowshroom_hymenophore_2" } } diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_3.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_3.json index 70623681..cf74621a 100644 --- a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_3.json +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_3.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", + "parent": "betterend:block/cube_noshade", "textures": { - "all": "betterend:block/mossy_glowshroom_hymenophore_3" + "texture": "betterend:block/mossy_glowshroom_hymenophore_3" } } diff --git a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_4.json b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_4.json index a18de4d5..46bae5fa 100644 --- a/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_4.json +++ b/src/main/resources/assets/betterend/models/block/mossy_glowshroom_hymenophore_4.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", + "parent": "betterend:block/cube_noshade", "textures": { - "all": "betterend:block/mossy_glowshroom_hymenophore_4" + "texture": "betterend:block/mossy_glowshroom_hymenophore_4" } } diff --git a/src/main/resources/assets/betterend/models/item/mossy_glowshroom_cap.json b/src/main/resources/assets/betterend/models/item/mossy_glowshroom_cap.json new file mode 100644 index 00000000..19b1a71e --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/mossy_glowshroom_cap.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/mossy_glowshroom_cap" +} diff --git a/src/main/resources/assets/betterend/models/item/mossy_glowshroom_fur.json b/src/main/resources/assets/betterend/models/item/mossy_glowshroom_fur.json new file mode 100644 index 00000000..e7874eed --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/mossy_glowshroom_fur.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "betterend:block/mossy_glowshroom_fur" + } +} diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_cap.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_cap.png new file mode 100644 index 0000000000000000000000000000000000000000..eebc86ac89fa7564f5b09af8248c596981cd33cc GIT binary patch literal 2380 zcmb_eeQeZZ7{4LNw-2$P~9D|9Hn-(aE;bveAMT;aQk~B+Dv`h&yD`A-*j;xtlNUrxinX!fLym-X6 z<1$IMw6wTeShrz@Nm`O5l43}PA&>-NwdyuV61r8GMespOHKTDmYUr4Q2o$5)_Tq?X z+J#s=2di6|Frk2vNf0M#H|4mL64cb3T)f$AN*UKw5;nmY)NKpN(mC09#IOx3V%!Eg z_xKhAD71cm&c={jVzHbF%dScwH!=YkQrZf(#vxe`Eu+~~VO0XrEOfky%atYswqXVh zqbZxHK$bFAS?MIkgB3MIb}-Gq;MOs?mTA{!>^}<&a^<0P;B+17S$U^)Qa*A}LoIO@@gKBX(?x zh2JmN=#~w171sE?IC9$^jcT%>u#&>79HEJ-dLx(t~lytfSDWw~4kamaz3 z=6hlfyXm5YH zP8el4tH;00Uwh+V0#wN>3m-c7mbgAZp5E}ZIf~35>luFSy{>%){AFT{ zKUq4pC$uN;wrJ2$nrZ^z@oQ`(z5^2Pdy;oW2Bt;(OEbCav4Ox*I^>O)%dPkA--o$sBRs#@Pi IvlhMb51aocO8@`> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_cap_transition.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_cap_transition.png new file mode 100644 index 0000000000000000000000000000000000000000..fba06215532f68198c83c23181a1b2f5edd7843d GIT binary patch literal 2684 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 K*)?m)nm+*%*0YrW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_1.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_1.png index cb490ec21d2adedee60a352e46e883cf2c7afdf2..4bdc898600b8de63dafb40c24f374bcd4188a512 100644 GIT binary patch delta 1038 zcmeAbxGXfmf{AVNMyq}%F3S)j11nQgD+80smzflix&N3fR18c_Efdqs4RnpnQ;c;j zQ%x*&lMGUgbS;xjQ-Dsl_-GBZ=GQj!zRl9N*{b<@le4RuW{O_FpIO^uUulgv|$ zk_=4@jgpcKVEW55Qh`Pq85kMp8d&NYfgNsSVP$NrZD4FQc_xc>J=CJ)jKsY3)D&AK zeIELZ;)JwLzv$3yq+TNTgx{`||oeXCxg!sGt1{1Xq(KP=YWkK9`$&dMFSj#D4k?&Q8{E%4y!%Dw!ZPP^v_xPN=zS$*Y6{qlI9aHdNwF>N_< zuUs!pxyt1bkXCa3P4nD&I~FUS4PQEO@fCrutp1)osa{hy_;^gqIN;`;_pWlo@|l~q zWdDeiRA`9r=N=57HRoewG^MCsmZ*3!H->x;Y z>xbM?t@!%I;m*}RTEFZrGu^T`_T}H?U$42tZ%?S1c|_w%ijDfbo3TCtQ^Hz(>iN#! z^qQR1xm9WFwyd>lAA4KZD1|G_t+{NySz}3gvOIg9f!e$R@lBTxP5a?xV_dt>d!^c1 zqh}GTgYr*j&AxYEZQq`n)cAMaHcK~awQgD=u+R7`wplEHH85PJlS3ST-G@yGywo(6RhF@ delta 780 zcmV+n1M~dT5{(d$I06Lou{w_elbiwDW`K~yNu9a7m&Q&AM%=iGaHZ=n=RgMk1cMvYS-U_k*DDN;Zt6Agoe_yHz< zijO`R6HSPT@x>5P3#D4MOd5t@2*EPQ5NIhav~<4HahI2qGpx1O+G`(p#scQK4^Nq& z|NN47z3ySVJ@}flZNi*-u^nW#B;!PP_&s!b4z&1GNE2;u8fIUzRf`KUN5$MDq zKsa*X^qjA&^*g^Q!O-E)+2%{vc0E&C=$H=AO=*g{pr?}i0YMNnVALpCdppFU!UCYY zDYs{EKrk3efG3nR4E0g0cdo7`ytvF+EzDw0gN}sb@3S{-wsH`}JX0y~T7O2)TF5sS z0#EIg)!R$Umu=Nj@!7_j+KrXf#-_VkEI#FOAA%;QGYHjW**QLLuev@q;i9MovJ3!( z(gNT>*Rc#bQR9gqs7fS?&~}GIFy|ps4joYmC_|eZ!tyo2iZwHYj^)3_+zH4 zqci2(+?ZQ*RN1z^dO=Ys8qm@i8Fdn=koQ+tYnx!n*D(WKCqR}VLx1y3>Ak=_OYx?h z$|rqv2UPhu^3OBbajylXc0j?7u_39nxZQ5|&o8k=lI9x2^M4#S>sOp^`e}5uu;mUF z#chxgngOPsX3rU=Y&ZZ92KrezqQ??=)T1$qGdlE4w>8{aTUfeUQQ>oW)O6YhaxxG^ zni5NV9Ddu~-^+^z^kK=N_@lwcydWT(BLsheXtfkI-~Kz|RHHH1q_?%HNh~kLSDZ#R zcmP@m9A^-at;UmhHDs#~jEob3?;hyGX#_yy%%%g-l;{brK*)cQmsDL{IYWa00000< KMNUMnLSTX~Wo149 diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_2.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_2.png index 20a15d29a699e1931374ac9b64236a3f7440784c..53ebac28c4c9a73a7e39177fcc774ed4d698e784 100644 GIT binary patch delta 903 zcmdlf{8@N{1rxjBMyq}%F3S)j11nQgD-+|%mzflix&N3fRMN~$k`hzR%ydnSQw?>K zEKE#w6VuErbd%B&EzAtkOp=n!Qa492PhuiUHCSteg_lp{$%tyNcWby_Ct(Eb2x!`XEW5kOG7SQKpZ_ zyvg&~9O{4m>||tMV9M}xaSYKoFB^2zFE~&n_IHWgySEd}N}7T^v;)^TD7yLnVYa`_ zKK~D6tpQ)4Bab4ZcIL`dJ(0ZQ-nXmIf0H?P+3Q-DyPx}E^}I$ zsjR3xmCU|WhWCBsjL0REJC=1`k$h_s-=NrfrY-Sczu}K-C64xoUl-RMNh)vGXWzhHbL;StXY+3tSvL32 z-x=nZ->_8ZXY!4h#r3lpSG{I&_`zH9OQN(gJ^EUflE~r`fr}=pe+tq#ehF{{8ZjMr zJk_H1j&ir7jKk(X_?o%fwQpa45Pf?zf%uo&sBe5Jt_4{?c@Z#J#uSbdG!3M-}Bvjo!;bt zt*e!PR!p5H7x=efI#-75soTlntSOw;T(=*c*1KcpzkAIi&guncdzM{Uv-#fQrNYx! zJNeGw*=gQleay8vTi-=T|H}an9{u>v&B9^ABJPb@ty1kZxyd)4*4I}gPu}CG`^xy` z!NitN%Qo@#KXGB3sPRmxL;T3}^+xsc7Ef3xF4{NQ^jOLfbK#EL+j633d|9w>*&O!O z3!JWt9JhMft6p;Lpp#f{ZP+vEaGew0yQ}|{^r|_F1dEt?2(Ufh6MFIcB=eFlJ0&Ku zdWl~6arV(osT#(LJsdMqc5gUdV}8|F@zV1p^Nb(naJ=r`k-5>l;eX~FEj_bKg})dW Q7&sX`UHx3vIVCg!0GkGU*Z=?k delta 864 zcmew?yi<6B1ryuCjaL0kljksTOpa&entYo{63%90Hc&}Uv@kbHwlvi>wlGfCO*Awy z(X~jkwA4*9PBJnvu}rp1Gcej5#XO0LD3y~PSj#52vB^v}Vz;fo7yok-0|V1OPZ!4! zjq|cWk^aGsB6h~*x>K%QN>Fg<2z)HY5fR|v+9fjatjl2~#eWRK^6dyZbh8HLZTPKI_GY2gge;w`$+s z$NBd|1aks|^@7eOkC3+?>AGBcRW_6NY2M!LUnAyZeRSb4 zF%@#nSbbVG;?sqxMHMZgBCHG?OMf0{OkAL2wfwpKmi24biQdf?S|i31IL}@4kON!S z1r-UO!$)>a4BYU^OnYjBMCTMvj>j3-rq-{^Z$5U@U(sCsw57vGfum-9!G`ANFJC%Sfv?mzYJ-wWSY_HFxiVV*?BM|RsV?Jqsa3|3^*pZp15FBT%~StI%tpO@<)aIQWq{u zvX%<1tatu@zHi#@rn6ZL0Xvthxcc(W?AU}(m9wU;>GiwUUDw^YH+q5Q@rnEQecWb! zR%0t`mYJbhftsZ@OTqs2(_59@bQ;5zrG8u3#9XN9_PV5|!Eu)1^1t_8YR!s&R%|@d ze$agG-n)BL7U`vLe$>ZTGr9bA{+e^TF?#y(AAf8qsbUq0U*(!Sudv=bd2vWs)14i? zZxk5izS%!wW&B^z@?iDEH`@*^n_b^_XUpdG?8~KD=5C(x-7$QzdPL&{rUw>*4yL;E iT)G(DV+%5-aQv}9UKbME!Nb7K00f?{elF{r5}E+ZVSgn6 diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_3.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_3.png index 28c7d2eb66ad6782e5a93658f2ea9feaabd0681f..f5245fd4607ecefdd7ae700221a0c7cdd46bbce6 100644 GIT binary patch delta 1019 zcmaDRctB)=1rvMiMyq}%F3S)j11nQgD-+Ynmzflix&N4yRFVuVO%07xjdWAZQ!R9p zQ%p>C6Dd6kQ;>flnvKH1CWaO9R7iZ)b zSh?gUm*%GCl{n@lrxusw7Zuwn*c7FtSve)9Ls>bQc8MwZNvT#T`N^3nRtT+WiKa#= z78Xgm#;IwRx=D#9iMmM!iD|k#>KY~+nH!{-TbLV~8z5;18w7EcKEe$c&Yygq)uH}C zjO!c*2Bu6;7sn6{QPzWZgQUtO4m`a7d(&>6`zKDUVB9$CVoFr9ug~)M<$D|BJlC%Z zzwlUYOD2Dmu<^_@DhqkMn!6skH?VFy@TvZ{&8N#7|9%qhWm{~y@chlrY@3U}rM1JC z7;N`Dzwc+%`d!y{ZjrCQa6dZ3P-Xh|bJpK0=GMoZ=6Zdp_Vp{%ms@lG%+Ix-ka_6k zPRk|o#`722|3CI_Sqp3A=}Ed9_p9$*6{0O-9uavpjs3ZU>*k_c=`u6fBDGk#LSMS> zu#DDza(YwflaJd>qMxy5l{6UEholf2ADjQ;-{VVmca3k?Yvjl6Jb6N>ovlLij*w{m4*Te`d%Ndaoh{$? z*~9Ms^w-mvS1EqBj_!N&s;?s9qfGG%<1&7e_^GoQXGa&^+Hx``q*Hm1$kJJIwX64T z(_PMU{LHas=7w*-mu*lNkG0OdbxwKbi(BRQv)8puKcwHK6?bCu^H1;DrSH%DetiDA znCn|*cG~Q;(M+%NSbL&<&Yg4hGkkLlrshP7xh-p$FQ|LH)XdO-qv~$cJmoZJJH8$N zU);Jb=Dy{ARC05--T8eJ4(@yzUhOh{nbS6f=+#EjpPvNy-J4NysV;YQsa9#Ec4A*t zV@;%q@{Grq=Tu~UoKzARBv&^}pa0{fJ7sTPrst%1q_MF?{$pRzsDJ*r*y5!O3|tHh Mp00i_>zopr03%|r^Z)<= delta 779 zcmV+m1N8jB6y_0-I06OHu{w_elUD^2liLCrlUD^2lLiAClN<#mvql4O0+WUY9Fu+r zJ%4F$@ACiv0=r2>K~yNu9a33K)KL^a_x{(>SsKMqR3s|eP_)rx-`z${ zvJOlTgye2$-bm@HMv0zIRY054h0WguL0I1azfARr9}vs<}*dvsyxOn+@P zbyZZ2jCov@SKXtdx}qRVNoV#!pY(Y3SiHXB_S*7FeRYjobo!#BYIAXkM<+_;AnV6! zX>!&f%rJ~FXj(jh-cTG2BM&%2Dd1BSDgz}9keKpWuwb(m-D_M8te$_+&f9GVpc@$l zE7PhzT44~`TIdIej#D7SnBp^tk0%II^3Q}R~ZrtNV3Lb!%WGhfZRjCLBRBhwScypy=ZFV8$U+-vZ4}YIlcK6UB zJBcg7@CH*cQWSL5p(tAMxQ93A%&}B@CqymgCCCsU1hWGOc3VeFYh?TFEsJ z0&UstZNBb|&i$sjCYDGB=N9j}TyjYf=EK}updxYGou~>u~b&l($L_U7}t(te}>$JjW?xyJKhUNvd6{? z0xbXz6Yhbo9-m<4tmY8txPi{T9wP9eq0s?{6X~>g5?yej@DJYMRALi0VQ&Bc002ov JPDHLkV1k_QYGMEY diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_4.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_hymenophore_4.png index be7189e7e15d8198d5fc277bc0a38936ca71c504..fe225c56f938b37a25efea3a2dc1ea2577e34d41 100644 GIT binary patch delta 1088 zcmdlb+$}o6f{Fd)Myq}%PRkG@11nQgE7QrBn3Rxsf0>k3l1z*Z%+icfb(0b;%ylhO zOpJAtj4e!bQ%qA6%~OpGjS`KGH@h&eU?NK8WCvDpBnu4Kis}n8@=NlIGx7_pT=J7k zb5rw59P^S>i%as0itQ9^ic-?7oD$Qatei}{#FYG`RI8Ny0o~ z{cVz{n`DrfrfZavWR{q0Y;0nfl7?wmMQ(v!3eZt$CW%HSiH2sniKZ6Dx)!M>DY{9? z7N)v}$wuY|DdraDhUNxHy4At1f_PCM;USE$m^`1&p+3mNPKSYkDZ|snF+@X@^|MK&R)9s^7ww7JrSGhD?Haq^-_xmr`tM9q@VEK0wsXP9hwdeR^91;o)k;}eP<@?YKAP`)nOMm{ju<8rXXkMJ2%!MXP);+I}@Dd=Jt_gf&Jmr zUVEG5J(HvD?=P-%*mp!h(bqGmA*ao!f#X1ekJaXbBB4eT&RsY+)3#E>y?)2Vy-WFc zKN#(>Jjd|M`A>izJJ0?LKaZ!@*4r$QGTLjZ|L9fNq^jpE(=vbZ_V+PM z>(`xT<#Oe6H9GfaLKNrT-%q0E>vm?=ZaJnUZW~vl`?q-Yl~N-k|BaTjP4kk}nC-p> zeq2(T;aw{BdQ;3XnXMg3u5o#S@w2#odd%`RlKfQS&e!KN|Lud+otd{kua7u8(T|7Y t(-W5BnwgV&bZ1W1^*na?{3m-(bk342=?v%nTBZbdyspQgw}! zObm1r4b07TlhTrnQ!NdRjM9t^HoGvdU?NK8WCvDxM&ro_Y(V->hiKNwMdx8H8!v=4HXm!*y&>;BlJi<;nDm@?)DPG zz8#$(yA>CSaYaoHJ}k(i7{O=BH06?$_xrmyW#gY8PI=~AcfFeV=&t!Z`xM^KEB_>W z@psgpKc6)3Z$DR8ag4d?`Blq(_4BqH#hkjn&ICBv0TjR{Ci%0dUp1Tn1}~2vX-W~vg>&U73mw~FDdEeJ>$3Q z_ij$rqY7SX!RhhqGftjm_gZf`_xSyEfeCEQx7RiumWzw93Xblb#i}qXCrspuaaKKN zN71~cJStW%WiKax-1Y1B>(kn$S53VxzU)4?YVFabZC$G#2If0I4LyINW8Er_;L9_e zFSv^NFA$s5nE0gGL4!4BRhQqD3xU`AP1m1%>NX=$!ZG2?pTlMs^Q@Wfo>;M?_}HWw z^MY749yS~a5!q}od+Uq3$G2WdO>Io@WIo5L$W_m_={bX_2rGZn<12h@7ry4)XUSqq zQVA+4eO12swCy|D!;?51&UA^cSeVIUVcm5k(0Af>$Hy%>HIkddV-~%-$Efvb@{V2d zcb-VOaW(gSQBzp3@$CA?XQ!U~db4#({o=h_b$=w!5<0`Aa5MLy{g5 zY%re$Mq|}VSi9iOYOlsw-+cDzMi|Rejn#oi%q;aH;u2=+!dYo z+qw9x&BQzNqxW3D;J~`MX=a4gWX8S?x&bS7#7*x0GBHVUNq%vyL$$)<(}L~nl^?w( zH!hG5ndbL<@4nMdpRWGgU4GY`uQu4i_h6p$_C-0bUcCHe@gb~RHDOb1+Ql399sLs@ z``%1E{*znfccqJG)s^oOvP#;14BADJp5C>4%ai7meJK<6mdKI;Vst05y7rdjJ3c From 8b8901a2a99de8efd2d2ec866e7df8d11814dc9f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 29 Sep 2020 22:25:48 +0300 Subject: [PATCH 2/2] Mushroom size & lang --- .../ru/betterend/world/features/MossyGlowshroomFeature.java | 3 ++- src/main/resources/assets/betterend/lang/en_us.json | 2 ++ src/main/resources/assets/betterend/lang/ru_ru.json | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java b/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java index 0ccfb29c..4939cb1e 100644 --- a/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/MossyGlowshroomFeature.java @@ -24,6 +24,7 @@ import ru.betterend.util.sdf.SDF; import ru.betterend.util.sdf.operator.SDFBinary; import ru.betterend.util.sdf.operator.SDFCoordModify; import ru.betterend.util.sdf.operator.SDFFlatWave; +import ru.betterend.util.sdf.operator.SDFScale; import ru.betterend.util.sdf.operator.SDFScale3D; import ru.betterend.util.sdf.operator.SDFSmoothUnion; import ru.betterend.util.sdf.operator.SDFSubtraction; @@ -60,7 +61,7 @@ public class MossyGlowshroomFeature extends DefaultFeature { HEAD_POS.setTranslate(pos.getX(), pos.getY(), pos.getZ()); ROOTS.setAngle(random.nextFloat() * MHelper.PI2); FUNCTION.setSourceA(sdf); - Set blocks = FUNCTION.fillRecursive(world, blockPos); + Set blocks = new SDFScale().setScale(MHelper.randRange(0.5F, 1F, random)).setSource(FUNCTION).fillRecursive(world, blockPos); for (BlockPos bpos: blocks) { BlockState state = world.getBlockState(bpos); diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index dde27ac4..7ff6b9f3 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -14,6 +14,8 @@ "item.betterend.terminite_ingot": "Terminite Ingot", "item.betterend.aeternium_ingot": "Aeternium Ingot", + "block.betterend.mossy_glowshroom_cap": "Mossy Glowshroom Cap", + "block.betterend.mossy_glowshroom_fur": "Mossy Glowshroom Fur", "block.betterend.mossy_glowshroom_hymenophore": "Mossy Glowshroom Hymenophore", "block.betterend.mossy_glowshroom_bark": "Mossy Glowshroom Bark", "block.betterend.mossy_glowshroom_barrel": "Mossy Glowshroom Barrel", diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index 20f7e604..1f24edde 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -14,6 +14,8 @@ "item.betterend.terminite_ingot": "Терминитовый слиток", "item.betterend.aeternium_ingot": "Этериевый слиток", + "block.betterend.mossy_glowshroom_cap": "Шляпка мшистого светогриба", + "block.betterend.mossy_glowshroom_fur": "Волоски мшистого светогриба", "block.betterend.mossy_glowshroom_hymenophore": "Гименофор мшистого светогриба", "block.betterend.mossy_glowshroom_bark": "Кора мшистого светогриба", "block.betterend.mossy_glowshroom_barrel": "Бочка из мшистого светогриба",