From 0ddc5e44eb7df5c7d325fbb2d42f21aa9c59de69 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 11 Dec 2020 16:16:52 +0300 Subject: [PATCH] Snow & ice --- .../blocks/BlockAncientEmeraldIce.java | 46 ++++++++ .../blocks/BlockDenseEmeraldIce.java | 18 ++++ .../ru/betterend/blocks/BlockDenseSnow.java | 11 ++ .../ru/betterend/blocks/BlockEmeraldIce.java | 98 ++++++++++++++++++ .../java/ru/betterend/registry/EndBlocks.java | 9 ++ .../assets/betterend/lang/en_us.json | 7 +- .../assets/betterend/lang/ru_ru.json | 7 +- .../textures/block/ancient_emerald_ice.png | Bin 0 -> 270 bytes .../textures/block/dense_emerald_ice.png | Bin 0 -> 271 bytes .../betterend/textures/block/dense_snow.png | Bin 0 -> 256 bytes .../betterend/textures/block/emerald_ice.png | Bin 0 -> 432 bytes 11 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/BlockAncientEmeraldIce.java create mode 100644 src/main/java/ru/betterend/blocks/BlockDenseEmeraldIce.java create mode 100644 src/main/java/ru/betterend/blocks/BlockDenseSnow.java create mode 100644 src/main/java/ru/betterend/blocks/BlockEmeraldIce.java create mode 100644 src/main/resources/assets/betterend/textures/block/ancient_emerald_ice.png create mode 100644 src/main/resources/assets/betterend/textures/block/dense_emerald_ice.png create mode 100644 src/main/resources/assets/betterend/textures/block/dense_snow.png create mode 100644 src/main/resources/assets/betterend/textures/block/emerald_ice.png diff --git a/src/main/java/ru/betterend/blocks/BlockAncientEmeraldIce.java b/src/main/java/ru/betterend/blocks/BlockAncientEmeraldIce.java new file mode 100644 index 00000000..66d5d876 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockAncientEmeraldIce.java @@ -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); + } + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockDenseEmeraldIce.java b/src/main/java/ru/betterend/blocks/BlockDenseEmeraldIce.java new file mode 100644 index 00000000..f2232a99 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockDenseEmeraldIce.java @@ -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; + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockDenseSnow.java b/src/main/java/ru/betterend/blocks/BlockDenseSnow.java new file mode 100644 index 00000000..57163f3b --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockDenseSnow.java @@ -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)); + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockEmeraldIce.java b/src/main/java/ru/betterend/blocks/BlockEmeraldIce.java new file mode 100644 index 00000000..3e67efbd --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BlockEmeraldIce.java @@ -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 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; + } +} diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 493c7bb9..ed2b6445 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -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()); diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 65fc19f6..6ef9b512 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -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" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index b8811bc3..0f96a6c0 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -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": "Изумрудный лёд" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/ancient_emerald_ice.png b/src/main/resources/assets/betterend/textures/block/ancient_emerald_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..10436c4f5c8304561f647b9544990baaaa15423e GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFgTe~DWM4f3;$1g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/dense_emerald_ice.png b/src/main/resources/assets/betterend/textures/block/dense_emerald_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..4883ebd01a5eecaf240668264ce2f826d64fb557 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF||bCCD20S~ieDbq>0hDm!JrgCOg|DU<)Nin+s`=bAO+eMC>ZFe)@ zVg4*t`hA}I!pZ%e`}AH*Hl028)M{0vyt&#NgZuL%CC;DM3#k`i?OUv|WQowH&^A6L gDc9#h8B@%U%g^{MAp5K21;`T&p00i_>zopr02*{r-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/dense_snow.png b/src/main/resources/assets/betterend/textures/block/dense_snow.png new file mode 100644 index 0000000000000000000000000000000000000000..3e134d2584558b220df492cda4c673295a00be69 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF%oDcf>xo5gIHXXH@u`{i-m#4sxXIiEF41WHpydOp1RrP|L N=jrO_vd$@?2>_C7O!fc( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/emerald_ice.png b/src/main/resources/assets/betterend/textures/block/emerald_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cd9ebab2951258105e30f44d3177e394dc9596 GIT binary patch literal 432 zcmV;h0Z;ykP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0YynfK~y+TWs$*3 z12Ggu(@>}~c2!Yup}3td?l-jmQ2G__-3WrNYG?~x_|8jiNMSWqZIV>Hr&n>F?Bo zG=6>w!^1j5x0{2UOP8}X;1C=3QKvSbTnVTuSBnm?=&Y$$Y_H?4lm%xI@1{OPskm|h zqNX`g*tvlf$Jck?aJ#=hHLNOw$>D8S`=|brhX`El>Yl(#9ob~y>0fdOq+8QR2C=7U zohzvfhz>Iq7;y9G_XB29=Zc^eb{P`A*lf&fvZy15$fXI^Gnh{8ep_iScdSh3TBOiT zMS=yHGYw#=AzF<4_iv3TT#x)!KTx aoWnnXtpR4!exVfr0000