From 34800a80c312b466e4461190fa1af165360c26f5 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 4 Dec 2020 17:10:39 +0300 Subject: [PATCH] Fixes, particle behavior --- .../blocks/BlockHydrothermalVent.java | 21 ------------ .../entities/BlockEntityHydrothermalVent.java | 22 ++++++------ .../entities/render/PedestalItemRenderer.java | 2 -- .../ru/betterend/particle/ParticleGeyser.java | 34 ++++++++++++++++--- .../betterend/particle/ParticleSulphur.java | 2 +- .../java/ru/betterend/registry/EndBlocks.java | 2 +- .../world/features/terrain/GeyserFeature.java | 10 ++---- .../terrain/SulphuricCaveFeature.java | 3 +- 8 files changed, 49 insertions(+), 47 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/BlockHydrothermalVent.java b/src/main/java/ru/betterend/blocks/BlockHydrothermalVent.java index 8c267d17..a638d0fd 100644 --- a/src/main/java/ru/betterend/blocks/BlockHydrothermalVent.java +++ b/src/main/java/ru/betterend/blocks/BlockHydrothermalVent.java @@ -1,9 +1,5 @@ package ru.betterend.blocks; -import java.util.Random; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.block.Block; @@ -19,7 +15,6 @@ import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.fluid.Fluids; import net.minecraft.item.ItemPlacementContext; -import net.minecraft.particle.ParticleTypes; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; import net.minecraft.state.property.BooleanProperty; @@ -28,13 +23,11 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; -import net.minecraft.world.World; import net.minecraft.world.WorldAccess; import net.minecraft.world.WorldView; import ru.betterend.blocks.basis.BlockBaseNotFull; import ru.betterend.blocks.entities.BlockEntityHydrothermalVent; import ru.betterend.registry.EndBlocks; -import ru.betterend.registry.EndParticles; public class BlockHydrothermalVent extends BlockBaseNotFull implements BlockEntityProvider, FluidFillable, Waterloggable { public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED; @@ -96,20 +89,6 @@ public class BlockHydrothermalVent extends BlockBaseNotFull implements BlockEnti public FluidState getFluidState(BlockState state) { return (Boolean) state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : super.getFluidState(state); } - - @Environment(EnvType.CLIENT) - public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { - super.randomDisplayTick(state, world, pos, random); - double x = pos.getX() + random.nextDouble(); - double y = pos.getY() + 0.9 + random.nextDouble() * 0.3; - double z = pos.getZ() + random.nextDouble(); - if (state.get(WATERLOGGED)) { - world.addParticle(EndParticles.GEYSER_PARTICLE, x, y, z, 0, 0, 0); - } - else { - world.addParticle(ParticleTypes.BUBBLE, x, y, z, 0, 0, 0); - } - } @Override public BlockEntity createBlockEntity(BlockView world) { diff --git a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java index c3fe022a..b2210495 100644 --- a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java +++ b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java @@ -16,16 +16,18 @@ public class BlockEntityHydrothermalVent extends BlockEntity implements Tickable @Override public void tick() { - double x = pos.getX() + world.random.nextDouble(); - double y = pos.getY() + 0.9 + world.random.nextDouble() * 0.3; - double z = pos.getZ() + world.random.nextDouble(); - BlockState state = getCachedState(); - if (state.isOf(EndBlocks.HYDROTHERMAL_VENT)) { - if (getCachedState().get(BlockHydrothermalVent.WATERLOGGED)) { - world.addParticle(EndParticles.GEYSER_PARTICLE, x, y, z, 0, 0, 0); - } - else { - world.addParticle(ParticleTypes.BUBBLE, x, y, z, 0, 0, 0); + if (world.random.nextInt(32) == 0) { + double x = pos.getX() + world.random.nextDouble(); + double y = pos.getY() + 0.9 + world.random.nextDouble() * 0.3; + double z = pos.getZ() + world.random.nextDouble(); + BlockState state = getCachedState(); + if (state.isOf(EndBlocks.HYDROTHERMAL_VENT)) { + if (getCachedState().get(BlockHydrothermalVent.WATERLOGGED)) { + world.addParticle(EndParticles.GEYSER_PARTICLE, x, y, z, 0, 0, 0); + } + else { + world.addParticle(ParticleTypes.BUBBLE, x, y, z, 0, 0, 0); + } } } } diff --git a/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java index 5c3bbe50..e65761ca 100644 --- a/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java @@ -2,7 +2,6 @@ package ru.betterend.blocks.entities.render; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; - import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.VertexConsumerProvider; @@ -16,7 +15,6 @@ import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.math.MathHelper; - import ru.betterend.blocks.EternalPedestal; import ru.betterend.blocks.basis.BlockPedestal; import ru.betterend.blocks.entities.PedestalBlockEntity; diff --git a/src/main/java/ru/betterend/particle/ParticleGeyser.java b/src/main/java/ru/betterend/particle/ParticleGeyser.java index fe5f650f..32b41a50 100644 --- a/src/main/java/ru/betterend/particle/ParticleGeyser.java +++ b/src/main/java/ru/betterend/particle/ParticleGeyser.java @@ -9,23 +9,49 @@ import net.minecraft.client.particle.SpriteBillboardParticle; import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.world.ClientWorld; import net.minecraft.particle.DefaultParticleType; +import net.minecraft.util.math.BlockPos.Mutable; import ru.betterend.util.MHelper; @Environment(EnvType.CLIENT) public class ParticleGeyser extends SpriteBillboardParticle { + private Mutable mut = new Mutable(); + private boolean changeDir = false; + private boolean check = true; + protected ParticleGeyser(ClientWorld world, double x, double y, double z, double vx, double vy, double vz, SpriteProvider sprites) { super(world, x, y, z, vx, vy, vz); setSprite(sprites); - this.maxAge = MHelper.randRange(600, 1200, random); + this.maxAge = MHelper.randRange(400, 800, random); this.scale = MHelper.randRange(0.5F, 1.0F, random); + this.velocityX = vx; + this.velocityZ = vz; + this.prevPosY = y - 0.125; } @Override public void tick() { - if (this.age >= this.maxAge + 40) { - this.setColorAlpha((this.maxAge - this.age) / 40F); + + if (this.prevPosY == this.y || this.age > this.maxAge) { + this.markDead(); + } + else { + if (this.age >= this.maxAge - 200) { + this.setColorAlpha((this.maxAge - this.age) / 200F); + } + + this.scale += 0.005F; + this.velocityY = 0.125; + + if (changeDir) { + changeDir = false; + this.velocityX += MHelper.randRange(-0.2, 0.2, random); + this.velocityZ += MHelper.randRange(-0.2, 0.2, random); + } + else if (check) { + changeDir = world.getBlockState(mut).getFluidState().isEmpty(); + check = !changeDir; + } } - this.velocityY = 0.125; super.tick(); } diff --git a/src/main/java/ru/betterend/particle/ParticleSulphur.java b/src/main/java/ru/betterend/particle/ParticleSulphur.java index fdc5e005..a188cb08 100644 --- a/src/main/java/ru/betterend/particle/ParticleSulphur.java +++ b/src/main/java/ru/betterend/particle/ParticleSulphur.java @@ -58,7 +58,7 @@ public class ParticleSulphur extends SpriteBillboardParticle { if (this.age <= 40) { this.setColorAlpha(this.age / 40F); } - else if (this.age >= this.maxAge + 40) { + else if (this.age >= this.maxAge - 40) { this.setColorAlpha((this.maxAge - this.age) / 40F); } diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 738ceaad..cd88b3fb 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -28,6 +28,7 @@ import ru.betterend.blocks.BlockEndLotusSeed; import ru.betterend.blocks.BlockEndLotusStem; import ru.betterend.blocks.BlockEndstoneDust; import ru.betterend.blocks.BlockGlowingMoss; +import ru.betterend.blocks.BlockHydrothermalVent; import ru.betterend.blocks.BlockLacugroveSapling; import ru.betterend.blocks.BlockMossyGlowshroomCap; import ru.betterend.blocks.BlockMossyGlowshroomHymenophore; @@ -39,7 +40,6 @@ import ru.betterend.blocks.BlockPythadendronSapling; import ru.betterend.blocks.BlockShadowBerry; import ru.betterend.blocks.BlockShadowGrass; import ru.betterend.blocks.BlockSulphurCrystal; -import ru.betterend.blocks.BlockHydrothermalVent; import ru.betterend.blocks.BlockTenaneaFlowers; import ru.betterend.blocks.BlockTenaneaSapling; import ru.betterend.blocks.BlockTerrain; diff --git a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java index 247a5bde..7b46cc8d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -5,7 +5,6 @@ import java.util.function.Function; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.block.LeavesBlock; import net.minecraft.block.Material; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.BlockPos; @@ -148,8 +147,8 @@ public class GeyserFeature extends DefaultFeature { mut.setY(mut.getY() + 1); } - for (int i = 0; i < 50; i++) { - mut.set(pos).add(random.nextGaussian() * 4, -halfHeight - 10, random.nextGaussian() * 4); + for (int i = 0; i < 150; i++) { + mut.set(pos).move(MHelper.floor(random.nextGaussian() * 4 + 0.5), -halfHeight - 10, MHelper.floor(random.nextGaussian() * 4 + 0.5)); int dist = MHelper.floor(6 - MHelper.length(mut.getX() - pos.getX(), mut.getZ() - pos.getZ())) + random.nextInt(2); BlockState state = world.getBlockState(mut); while (state.isOf(Blocks.WATER)) { @@ -177,10 +176,7 @@ public class GeyserFeature extends DefaultFeature { }; REPLACE2 = (state) -> { - if (state.isIn(EndTags.GEN_TERRAIN)) { - return true; - } - if (state.getBlock() instanceof LeavesBlock) { + if (state.isIn(EndTags.GEN_TERRAIN) || state.isOf(EndBlocks.HYDROTHERMAL_VENT) || state.isOf(EndBlocks.SULPHUR_CRYSTAL)) { return true; } if (state.getMaterial().equals(Material.PLANT)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index 75f46b19..282af535 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -9,8 +9,8 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos.Mutable; +import net.minecraft.util.math.Direction; import net.minecraft.world.Heightmap; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; @@ -103,6 +103,7 @@ public class SulphuricCaveFeature extends DefaultFeature { private boolean isReplaceable(BlockState state) { return state.isIn(EndTags.GEN_TERRAIN) + || state.isOf(EndBlocks.HYDROTHERMAL_VENT) || state.isOf(EndBlocks.SULPHUR_CRYSTAL) || state.getMaterial().isReplaceable() || state.getMaterial().equals(Material.PLANT)