Spires enhancements, pink moss
This commit is contained in:
parent
e08d33e577
commit
1f697db60b
18 changed files with 220 additions and 13 deletions
|
@ -74,6 +74,7 @@ public class EndBlocks {
|
||||||
public static final Block CAVE_MOSS = registerBlock("cave_moss", new BlockTerrain(MaterialColor.PURPLE));
|
public static final Block CAVE_MOSS = registerBlock("cave_moss", new BlockTerrain(MaterialColor.PURPLE));
|
||||||
public static final Block CRYSTAL_MOSS = registerBlock("crystal_moss", new BlockTerrain(MaterialColor.PINK));
|
public static final Block CRYSTAL_MOSS = registerBlock("crystal_moss", new BlockTerrain(MaterialColor.PINK));
|
||||||
public static final Block SHADOW_GRASS = registerBlock("shadow_grass", new BlockShadowGrass());
|
public static final Block SHADOW_GRASS = registerBlock("shadow_grass", new BlockShadowGrass());
|
||||||
|
public static final Block PINK_MOSS = registerBlock("pink_moss", new BlockTerrain(MaterialColor.PINK));
|
||||||
public static final Block AMBER_GRASS = registerBlock("amber_grass", new BlockTerrain(MaterialColor.ORANGE));
|
public static final Block AMBER_GRASS = registerBlock("amber_grass", new BlockTerrain(MaterialColor.ORANGE));
|
||||||
|
|
||||||
// Roads //
|
// Roads //
|
||||||
|
@ -83,6 +84,7 @@ public class EndBlocks {
|
||||||
public static final Block CAVE_MOSS_PATH = registerBlock("cave_moss_path", new BlockPath(CAVE_MOSS));
|
public static final Block CAVE_MOSS_PATH = registerBlock("cave_moss_path", new BlockPath(CAVE_MOSS));
|
||||||
public static final Block CRYSTAL_MOSS_PATH = registerBlock("crystal_moss_path", new BlockPath(CRYSTAL_MOSS));
|
public static final Block CRYSTAL_MOSS_PATH = registerBlock("crystal_moss_path", new BlockPath(CRYSTAL_MOSS));
|
||||||
public static final Block SHADOW_GRASS_PATH = registerBlock("shadow_grass_path", new BlockPath(SHADOW_GRASS));
|
public static final Block SHADOW_GRASS_PATH = registerBlock("shadow_grass_path", new BlockPath(SHADOW_GRASS));
|
||||||
|
public static final Block PINK_MOSS_PATH = registerBlock("pink_moss_path", new BlockPath(PINK_MOSS));
|
||||||
public static final Block AMBER_GRASS_PATH = registerBlock("amber_grass_path", new BlockPath(AMBER_GRASS));
|
public static final Block AMBER_GRASS_PATH = registerBlock("amber_grass_path", new BlockPath(AMBER_GRASS));
|
||||||
|
|
||||||
// Rocks //
|
// Rocks //
|
||||||
|
|
|
@ -17,14 +17,15 @@ import ru.betterend.world.features.EndFeature;
|
||||||
import ru.betterend.world.features.EndLilyFeature;
|
import ru.betterend.world.features.EndLilyFeature;
|
||||||
import ru.betterend.world.features.EndLotusFeature;
|
import ru.betterend.world.features.EndLotusFeature;
|
||||||
import ru.betterend.world.features.EndLotusLeafFeature;
|
import ru.betterend.world.features.EndLotusLeafFeature;
|
||||||
import ru.betterend.world.features.FloatingSpireFeature;
|
|
||||||
import ru.betterend.world.features.SinglePlantFeature;
|
import ru.betterend.world.features.SinglePlantFeature;
|
||||||
import ru.betterend.world.features.UnderwaterPlantFeature;
|
import ru.betterend.world.features.UnderwaterPlantFeature;
|
||||||
import ru.betterend.world.features.VineFeature;
|
import ru.betterend.world.features.VineFeature;
|
||||||
import ru.betterend.world.features.WallPlantFeature;
|
import ru.betterend.world.features.WallPlantFeature;
|
||||||
import ru.betterend.world.features.WallPlantOnLogFeature;
|
import ru.betterend.world.features.WallPlantOnLogFeature;
|
||||||
import ru.betterend.world.features.bushes.BushFeature;
|
import ru.betterend.world.features.bushes.BushFeature;
|
||||||
|
import ru.betterend.world.features.bushes.TenaneaBushFeature;
|
||||||
import ru.betterend.world.features.terrain.EndLakeFeature;
|
import ru.betterend.world.features.terrain.EndLakeFeature;
|
||||||
|
import ru.betterend.world.features.terrain.FloatingSpireFeature;
|
||||||
import ru.betterend.world.features.terrain.RoundCaveFeature;
|
import ru.betterend.world.features.terrain.RoundCaveFeature;
|
||||||
import ru.betterend.world.features.terrain.SpireFeature;
|
import ru.betterend.world.features.terrain.SpireFeature;
|
||||||
import ru.betterend.world.features.trees.DragonTreeFeature;
|
import ru.betterend.world.features.trees.DragonTreeFeature;
|
||||||
|
@ -44,6 +45,7 @@ public class EndFeatures {
|
||||||
// Bushes //
|
// Bushes //
|
||||||
public static final EndFeature PYTHADENDRON_BUSH = new EndFeature("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.bark), 4);
|
public static final EndFeature PYTHADENDRON_BUSH = new EndFeature("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.bark), 4);
|
||||||
public static final EndFeature DRAGON_TREE_BUSH = new EndFeature("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.bark), 15);
|
public static final EndFeature DRAGON_TREE_BUSH = new EndFeature("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.bark), 15);
|
||||||
|
public static final EndFeature TENANEA_BUSH = new EndFeature("tenanea_bush", new TenaneaBushFeature(), 10);
|
||||||
|
|
||||||
// Plants //
|
// Plants //
|
||||||
public static final EndFeature UMBRELLA_MOSS = new EndFeature("umbrella_moss", new DoublePlantFeature(EndBlocks.UMBRELLA_MOSS, EndBlocks.UMBRELLA_MOSS_TALL, 5), 5);
|
public static final EndFeature UMBRELLA_MOSS = new EndFeature("umbrella_moss", new DoublePlantFeature(EndBlocks.UMBRELLA_MOSS, EndBlocks.UMBRELLA_MOSS_TALL, 5), 5);
|
||||||
|
|
|
@ -10,10 +10,11 @@ public class BlossomingSpires extends EndBiome {
|
||||||
.setFogColor(241, 146, 229)
|
.setFogColor(241, 146, 229)
|
||||||
.setFogDensity(2.0F)
|
.setFogDensity(2.0F)
|
||||||
.setPlantsColor(122, 45, 122)
|
.setPlantsColor(122, 45, 122)
|
||||||
.setSurface(EndBlocks.END_MOSS)
|
.setSurface(EndBlocks.PINK_MOSS)
|
||||||
.addFeature(EndFeatures.SPIRE)
|
.addFeature(EndFeatures.SPIRE)
|
||||||
.addFeature(EndFeatures.FLOATING_SPIRE)
|
.addFeature(EndFeatures.FLOATING_SPIRE)
|
||||||
.addFeature(EndFeatures.TENANEA)
|
.addFeature(EndFeatures.TENANEA)
|
||||||
|
.addFeature(EndFeatures.TENANEA_BUSH)
|
||||||
.addMobSpawn(EntityType.ENDERMAN, 50, 1, 4));
|
.addMobSpawn(EntityType.ENDERMAN, 50, 1, 4));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,9 @@ import ru.betterend.blocks.complex.StoneMaterial;
|
||||||
import ru.betterend.world.features.terrain.OreLayerFeature;
|
import ru.betterend.world.features.terrain.OreLayerFeature;
|
||||||
|
|
||||||
public class EndFeature {
|
public class EndFeature {
|
||||||
protected Feature<?> feature;
|
private Feature<?> feature;
|
||||||
protected ConfiguredFeature<?, ?> featureConfigured;
|
private ConfiguredFeature<?, ?> featureConfigured;
|
||||||
protected GenerationStep.Feature featureStep;
|
private GenerationStep.Feature featureStep;
|
||||||
|
|
||||||
protected EndFeature() {}
|
protected EndFeature() {}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
package ru.betterend.world.features.bushes;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.LeavesBlock;
|
||||||
|
import net.minecraft.block.Material;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.BlockPos.Mutable;
|
||||||
|
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.BlockProperties;
|
||||||
|
import ru.betterend.blocks.BlockProperties.TripleShape;
|
||||||
|
import ru.betterend.noise.OpenSimplexNoise;
|
||||||
|
import ru.betterend.registry.EndBlocks;
|
||||||
|
import ru.betterend.registry.EndTags;
|
||||||
|
import ru.betterend.util.BlocksHelper;
|
||||||
|
import ru.betterend.util.MHelper;
|
||||||
|
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.SDFSubtraction;
|
||||||
|
import ru.betterend.util.sdf.operator.SDFTranslate;
|
||||||
|
import ru.betterend.util.sdf.primitive.SDFSphere;
|
||||||
|
import ru.betterend.world.features.DefaultFeature;
|
||||||
|
|
||||||
|
public class TenaneaBushFeature extends DefaultFeature {
|
||||||
|
private static final Function<BlockState, Boolean> REPLACE;
|
||||||
|
|
||||||
|
public TenaneaBushFeature() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
|
||||||
|
if (!world.getBlockState(pos.down()).getBlock().isIn(EndTags.END_GROUND)) return false;
|
||||||
|
|
||||||
|
float radius = MHelper.randRange(1.8F, 3.5F, random);
|
||||||
|
OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt());
|
||||||
|
BlockState leaves = EndBlocks.TENANEA_LEAVES.getDefaultState();
|
||||||
|
SDF sphere = new SDFSphere().setRadius(radius).setBlock(leaves);
|
||||||
|
sphere = new SDFScale3D().setScale(1, 0.75F, 1).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 = new SDFDisplacement().setFunction((vec) -> { return MHelper.randRange(-2F, 2F, random); }).setSource(sphere);
|
||||||
|
sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere));
|
||||||
|
sphere.setReplaceFunction(REPLACE);
|
||||||
|
List<BlockPos> support = Lists.newArrayList();
|
||||||
|
sphere.setPostProcess((info) -> {
|
||||||
|
if (info.getState().getBlock() instanceof LeavesBlock) {
|
||||||
|
int distance = info.getPos().getManhattanDistance(pos);
|
||||||
|
if (distance < 7) {
|
||||||
|
if (random.nextBoolean() && info.getStateDown().isAir()) {
|
||||||
|
BlockPos d = info.getPos().down();
|
||||||
|
support.add(d);
|
||||||
|
}
|
||||||
|
return info.getState().with(LeavesBlock.DISTANCE, distance);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return AIR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return info.getState();
|
||||||
|
});
|
||||||
|
sphere.fillRecursive(world, pos);
|
||||||
|
BlockState stem = EndBlocks.TENANEA.bark.getDefaultState();
|
||||||
|
BlocksHelper.setWithoutUpdate(world, pos, stem);
|
||||||
|
for (Direction d: Direction.values()) {
|
||||||
|
BlockPos p = pos.offset(d);
|
||||||
|
if (world.isAir(p)) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, p, leaves.with(LeavesBlock.DISTANCE, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Mutable mut = new Mutable();
|
||||||
|
BlockState top = EndBlocks.TENANEA_FLOWERS.getDefaultState().with(BlockProperties.TRIPLE_SHAPE, TripleShape.TOP);
|
||||||
|
BlockState middle = EndBlocks.TENANEA_FLOWERS.getDefaultState().with(BlockProperties.TRIPLE_SHAPE, TripleShape.MIDDLE);
|
||||||
|
BlockState bottom = EndBlocks.TENANEA_FLOWERS.getDefaultState().with(BlockProperties.TRIPLE_SHAPE, TripleShape.BOTTOM);
|
||||||
|
support.forEach((bpos) -> {
|
||||||
|
int count = MHelper.randRange(3, 8, random);
|
||||||
|
mut.set(bpos);
|
||||||
|
if (world.getBlockState(mut.up()).isOf(EndBlocks.TENANEA_LEAVES)) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, mut, top);
|
||||||
|
for (int i = 1; i < count; i++) {
|
||||||
|
mut.setY(mut.getY() - 1);
|
||||||
|
if (world.isAir(mut.down())) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, mut, middle);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BlocksHelper.setWithoutUpdate(world, mut, bottom);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
REPLACE = (state) -> {
|
||||||
|
if (state.getMaterial().equals(Material.PLANT)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return state.getMaterial().isReplaceable();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,19 +1,21 @@
|
||||||
package ru.betterend.world.features;
|
package ru.betterend.world.features.terrain;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.StructureWorldAccess;
|
import net.minecraft.world.StructureWorldAccess;
|
||||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||||
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
||||||
import ru.betterend.noise.OpenSimplexNoise;
|
import ru.betterend.noise.OpenSimplexNoise;
|
||||||
import ru.betterend.registry.EndBlocks;
|
import ru.betterend.registry.EndFeatures;
|
||||||
import ru.betterend.util.MHelper;
|
import ru.betterend.util.MHelper;
|
||||||
import ru.betterend.util.sdf.SDF;
|
import ru.betterend.util.sdf.SDF;
|
||||||
import ru.betterend.util.sdf.operator.SDFDisplacement;
|
import ru.betterend.util.sdf.operator.SDFDisplacement;
|
||||||
import ru.betterend.util.sdf.primitive.SDFSphere;
|
import ru.betterend.util.sdf.primitive.SDFSphere;
|
||||||
import ru.betterend.world.features.terrain.SpireFeature;
|
|
||||||
|
|
||||||
public class FloatingSpireFeature extends SpireFeature {
|
public class FloatingSpireFeature extends SpireFeature {
|
||||||
@Override
|
@Override
|
||||||
|
@ -39,10 +41,22 @@ public class FloatingSpireFeature extends SpireFeature {
|
||||||
return (float) (Math.abs(noise.eval(vec.getX() * 0.1, vec.getY() * 0.1, vec.getZ() * 0.1)) * 3F + Math.abs(noise.eval(vec.getX() * 0.3, vec.getY() * 0.3 + 100, vec.getZ() * 0.3)) * 1.3F);
|
return (float) (Math.abs(noise.eval(vec.getX() * 0.1, vec.getY() * 0.1, vec.getZ() * 0.1)) * 3F + Math.abs(noise.eval(vec.getX() * 0.3, vec.getY() * 0.3 + 100, vec.getZ() * 0.3)) * 1.3F);
|
||||||
}).setSource(sdf);
|
}).setSource(sdf);
|
||||||
final BlockPos center = pos;
|
final BlockPos center = pos;
|
||||||
|
List<BlockPos> support = Lists.newArrayList();
|
||||||
sdf.setReplaceFunction(REPLACE).setPostProcess((info) -> {
|
sdf.setReplaceFunction(REPLACE).setPostProcess((info) -> {
|
||||||
return info.getStateUp().isAir() ? EndBlocks.END_MOSS.getDefaultState() : info.getState();
|
if (info.getStateUp().isAir()) {
|
||||||
|
if (random.nextInt(16) == 0) {
|
||||||
|
support.add(info.getPos().up());
|
||||||
|
}
|
||||||
|
return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceConfig().getTopMaterial();
|
||||||
|
}
|
||||||
|
return info.getState();
|
||||||
});
|
});
|
||||||
sdf.fillRecursive(world, center);
|
sdf.fillRecursive(world, center);
|
||||||
|
|
||||||
|
support.forEach((bpos) -> {
|
||||||
|
EndFeatures.TENANEA_BUSH.getFeature().generate(world, chunkGenerator, random, bpos, null);
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,8 +1,11 @@
|
||||||
package ru.betterend.world.features.terrain;
|
package ru.betterend.world.features.terrain;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.LeavesBlock;
|
import net.minecraft.block.LeavesBlock;
|
||||||
|
@ -12,7 +15,7 @@ import net.minecraft.world.StructureWorldAccess;
|
||||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||||
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
||||||
import ru.betterend.noise.OpenSimplexNoise;
|
import ru.betterend.noise.OpenSimplexNoise;
|
||||||
import ru.betterend.registry.EndBlocks;
|
import ru.betterend.registry.EndFeatures;
|
||||||
import ru.betterend.registry.EndTags;
|
import ru.betterend.registry.EndTags;
|
||||||
import ru.betterend.util.MHelper;
|
import ru.betterend.util.MHelper;
|
||||||
import ru.betterend.util.sdf.SDF;
|
import ru.betterend.util.sdf.SDF;
|
||||||
|
@ -40,10 +43,22 @@ public class SpireFeature extends DefaultFeature {
|
||||||
return (float) (Math.abs(noise.eval(vec.getX() * 0.1, vec.getY() * 0.1, vec.getZ() * 0.1)) * 3F + Math.abs(noise.eval(vec.getX() * 0.3, vec.getY() * 0.3 + 100, vec.getZ() * 0.3)) * 1.3F);
|
return (float) (Math.abs(noise.eval(vec.getX() * 0.1, vec.getY() * 0.1, vec.getZ() * 0.1)) * 3F + Math.abs(noise.eval(vec.getX() * 0.3, vec.getY() * 0.3 + 100, vec.getZ() * 0.3)) * 1.3F);
|
||||||
}).setSource(sdf);
|
}).setSource(sdf);
|
||||||
final BlockPos center = pos;
|
final BlockPos center = pos;
|
||||||
|
List<BlockPos> support = Lists.newArrayList();
|
||||||
sdf.setReplaceFunction(REPLACE).setPostProcess((info) -> {
|
sdf.setReplaceFunction(REPLACE).setPostProcess((info) -> {
|
||||||
return info.getStateUp().isAir() ? EndBlocks.END_MOSS.getDefaultState() : info.getState();
|
if (info.getStateUp().isAir()) {
|
||||||
|
if (random.nextInt(16) == 0) {
|
||||||
|
support.add(info.getPos().up());
|
||||||
|
}
|
||||||
|
return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceConfig().getTopMaterial();
|
||||||
|
}
|
||||||
|
return info.getState();
|
||||||
});
|
});
|
||||||
sdf.fillRecursive(world, center);
|
sdf.fillRecursive(world, center);
|
||||||
|
|
||||||
|
support.forEach((bpos) -> {
|
||||||
|
EndFeatures.TENANEA_BUSH.getFeature().generate(world, chunkGenerator, random, bpos, null);
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": [
|
||||||
|
{
|
||||||
|
"model": "betterend:block/pink_moss"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "betterend:block/pink_moss",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "betterend:block/pink_moss",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "betterend:block/pink_moss",
|
||||||
|
"y": 270
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": [
|
||||||
|
{ "model": "betterend:block/pink_moss_path" },
|
||||||
|
{ "model": "betterend:block/pink_moss_path", "y": 90 },
|
||||||
|
{ "model": "betterend:block/pink_moss_path", "y": 180 },
|
||||||
|
{ "model": "betterend:block/pink_moss_path", "y": 270 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -333,5 +333,8 @@
|
||||||
"item.betterend.amber_gem": "Amber Gem",
|
"item.betterend.amber_gem": "Amber Gem",
|
||||||
"item.betterend.raw_amber": "Raw Amber",
|
"item.betterend.raw_amber": "Raw Amber",
|
||||||
"block.betterend.tenanea_flowers": "Tenanea Flowers",
|
"block.betterend.tenanea_flowers": "Tenanea Flowers",
|
||||||
"block.betterend.tenanea_outer_leaves": "Tenanea Outer Leaves"
|
"block.betterend.tenanea_outer_leaves": "Tenanea Outer Leaves",
|
||||||
|
|
||||||
|
"block.betterend.pink_moss": "Pink Moss",
|
||||||
|
"block.betterend.pink_moss_path": "Pink Moss Path"
|
||||||
}
|
}
|
|
@ -335,5 +335,8 @@
|
||||||
"item.betterend.amber_gem": "Огранённый янтарь",
|
"item.betterend.amber_gem": "Огранённый янтарь",
|
||||||
"item.betterend.raw_amber": "Необработанный янтарь",
|
"item.betterend.raw_amber": "Необработанный янтарь",
|
||||||
"block.betterend.tenanea_flowers": "Цветы тенанеи",
|
"block.betterend.tenanea_flowers": "Цветы тенанеи",
|
||||||
"block.betterend.tenanea_outer_leaves": "Внешние листья тенанеи"
|
"block.betterend.tenanea_outer_leaves": "Внешние листья тенанеи",
|
||||||
|
|
||||||
|
"block.betterend.pink_moss": "Розовый мох",
|
||||||
|
"block.betterend.pink_moss_path": "Тропа из розового мха"
|
||||||
}
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"parent": "block/cube",
|
||||||
|
"textures": {
|
||||||
|
"down": "block/end_stone",
|
||||||
|
"east": "betterend:block/pink_moss_side",
|
||||||
|
"north": "betterend:block/pink_moss_side",
|
||||||
|
"particle": "betterend:block/pink_moss_side",
|
||||||
|
"south": "betterend:block/pink_moss_side",
|
||||||
|
"up": "betterend:block/pink_moss_top",
|
||||||
|
"west": "betterend:block/pink_moss_side"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ "parent": "betterend:block/path",
|
||||||
|
"textures": {
|
||||||
|
"top": "betterend:block/pink_moss_path_top",
|
||||||
|
"side": "betterend:block/pink_moss_side",
|
||||||
|
"bottom": "block/end_stone"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "betterend:block/pink_moss"
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "betterend:block/pink_moss_path"
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
Loading…
Add table
Add a link
Reference in a new issue