Snow & ice

This commit is contained in:
paulevsGitch 2020-12-11 16:16:52 +03:00
parent 929d758788
commit 0ddc5e44eb
11 changed files with 194 additions and 2 deletions

View file

@ -0,0 +1,46 @@
package ru.betterend.blocks;
import java.util.Random;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import ru.betterend.blocks.basis.BlockBase;
import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndParticles;
import ru.betterend.util.BlocksHelper;
public class BlockAncientEmeraldIce extends BlockBase {
public BlockAncientEmeraldIce() {
super(FabricBlockSettings.copyOf(Blocks.BLUE_ICE).ticksRandomly());
}
@Override
public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
Direction dir = BlocksHelper.randomDirection(random);
pos = pos.offset(dir);
state = world.getBlockState(pos);
if (state.isOf(Blocks.WATER)) {
world.setBlockState(pos, EndBlocks.EMERALD_ICE.getDefaultState());
makeParticles(world, pos, random);
}
else if (state.isOf(EndBlocks.EMERALD_ICE)) {
world.setBlockState(pos, EndBlocks.DENSE_EMERALD_ICE.getDefaultState());
makeParticles(world, pos, random);
}
}
private void makeParticles(ServerWorld world, BlockPos pos, Random random) {
for (int i = 0; i < 20; i++) {
int side = random.nextInt(3);
double x = (side == 0 ? random.nextDouble() : random.nextBoolean() ? 0 : 1) + pos.getX();
double y = (side == 1 ? random.nextDouble() : random.nextBoolean() ? 0 : 1) + pos.getY();
double z = (side == 2 ? random.nextDouble() : random.nextBoolean() ? 0 : 1) + pos.getZ();
world.addParticle(EndParticles.SNOWFLAKE, x, y, z, 0, 0, 0);
}
}
}

View file

@ -0,0 +1,18 @@
package ru.betterend.blocks;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Blocks;
import ru.betterend.blocks.basis.BlockBase;
import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
public class BlockDenseEmeraldIce extends BlockBase implements IRenderTypeable {
public BlockDenseEmeraldIce() {
super(FabricBlockSettings.copyOf(Blocks.PACKED_ICE));
}
@Override
public ERenderLayer getRenderLayer() {
return ERenderLayer.TRANSLUCENT;
}
}

View file

@ -0,0 +1,11 @@
package ru.betterend.blocks;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Blocks;
import ru.betterend.blocks.basis.BlockBase;
public class BlockDenseSnow extends BlockBase {
public BlockDenseSnow() {
super(FabricBlockSettings.copyOf(Blocks.SNOW));
}
}

View file

@ -0,0 +1,98 @@
package ru.betterend.blocks;
import java.io.Reader;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import org.jetbrains.annotations.Nullable;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.Material;
import net.minecraft.block.TransparentBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.LightType;
import net.minecraft.world.World;
import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.Patterns;
public class BlockEmeraldIce extends TransparentBlock implements IRenderTypeable, BlockPatterned {
public BlockEmeraldIce() {
super(FabricBlockSettings.copyOf(Blocks.ICE));
}
@Override
public ERenderLayer getRenderLayer() {
return ERenderLayer.TRANSLUCENT;
}
@Override
public void afterBreak(World world, PlayerEntity player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) {
super.afterBreak(world, player, pos, state, blockEntity, stack);
if (EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, stack) == 0) {
if (world.getDimension().isUltrawarm()) {
world.removeBlock(pos, false);
return;
}
Material material = world.getBlockState(pos.down()).getMaterial();
if (material.blocksMovement() || material.isLiquid()) {
world.setBlockState(pos, Blocks.WATER.getDefaultState());
}
}
}
@Override
public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
if (world.getLightLevel(LightType.BLOCK, pos) > 11 - state.getOpacity(world, pos)) {
this.melt(state, world, pos);
}
}
protected void melt(BlockState state, World world, BlockPos pos) {
if (world.getDimension().isUltrawarm()) {
world.removeBlock(pos, false);
}
else {
world.setBlockState(pos, Blocks.WATER.getDefaultState());
world.updateNeighbor(pos, Blocks.WATER, pos);
}
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
@Override
public String getStatesPattern(Reader data) {
String block = Registry.BLOCK.getId(this).getPath();
return Patterns.createJson(data, block, block);
}
@Override
public String getModelPattern(String block) {
Identifier blockId = Registry.BLOCK.getId(this);
return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block);
}
@Override
public Identifier statePatternId() {
return Patterns.STATE_SIMPLE;
}
}

View file

@ -10,6 +10,7 @@ import ru.betterend.BetterEnd;
import ru.betterend.blocks.AeterniumBlock;
import ru.betterend.blocks.AuroraCrystalBlock;
import ru.betterend.blocks.BlockAmber;
import ru.betterend.blocks.BlockAncientEmeraldIce;
import ru.betterend.blocks.BlockBlueVine;
import ru.betterend.blocks.BlockBlueVineLantern;
import ru.betterend.blocks.BlockBlueVineSeed;
@ -19,7 +20,10 @@ import ru.betterend.blocks.BlockBulbVine;
import ru.betterend.blocks.BlockBulbVineSeed;
import ru.betterend.blocks.BlockCharnia;
import ru.betterend.blocks.BlockChorusGrass;
import ru.betterend.blocks.BlockDenseEmeraldIce;
import ru.betterend.blocks.BlockDenseSnow;
import ru.betterend.blocks.BlockDragonTreeSapling;
import ru.betterend.blocks.BlockEmeraldIce;
import ru.betterend.blocks.BlockEndLily;
import ru.betterend.blocks.BlockEndLilySeed;
import ru.betterend.blocks.BlockEndLotusFlower;
@ -127,6 +131,11 @@ public class EndBlocks {
public static final Block HYDROTHERMAL_VENT = registerBlock("hydrothermal_vent", new BlockHydrothermalVent());
public static final Block DENSE_SNOW = registerBlock("dense_snow", new BlockDenseSnow());
public static final Block EMERALD_ICE = registerBlock("emerald_ice", new BlockEmeraldIce());
public static final Block DENSE_EMERALD_ICE = registerBlock("dense_emerald_ice", new BlockDenseEmeraldIce());
public static final Block ANCIENT_EMERALD_ICE = registerBlock("ancient_emerald_ice", new BlockAncientEmeraldIce());
// Wooden Materials And Trees //
public static final Block MOSSY_GLOWSHROOM_SAPLING = registerBlock("mossy_glowshroom_sapling", new BlockMossyGlowshroomSapling());
public static final Block MOSSY_GLOWSHROOM_CAP = registerBlock("mossy_glowshroom_cap", new BlockMossyGlowshroomCap());

View file

@ -463,5 +463,10 @@
"block.betterend.glowing_pillar_roots": "Glowing Pillar Roots",
"block.betterend.glowing_pillar_seed": "Glowing Pillar Seed",
"biome.betterend.ice_starfield": "Ice Starfield"
"biome.betterend.ice_starfield": "Ice Starfield",
"block.betterend.ancient_emerald_ice": "Ancient Emerald Ice",
"block.betterend.dense_emerald_ice": "Dense Emerald Ice",
"block.betterend.dense_snow": "Dense Snow",
"block.betterend.emerald_ice": "Emerald Ice"
}

View file

@ -465,5 +465,10 @@
"block.betterend.glowing_pillar_roots": "Корни светящейся колонны",
"block.betterend.glowing_pillar_seed": "Семя светящейся колонны",
"biome.betterend.ice_starfield": "Поле ледяных звёзд"
"biome.betterend.ice_starfield": "Поле ледяных звёзд",
"block.betterend.ancient_emerald_ice": "Древний изумрудный лёд",
"block.betterend.dense_emerald_ice": "Плотный изумрудный лёд",
"block.betterend.dense_snow": "Плотный снег",
"block.betterend.emerald_ice": "Изумрудный лёд"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B