Merge and fix
146
src/main/java/ru/betterend/blocks/basis/BlockStoneLantern.java
Normal file
|
@ -0,0 +1,146 @@
|
|||
package ru.betterend.blocks.basis;
|
||||
|
||||
import java.io.Reader;
|
||||
|
||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.ShapeContext;
|
||||
import net.minecraft.block.Waterloggable;
|
||||
import net.minecraft.client.color.block.BlockColorProvider;
|
||||
import net.minecraft.client.color.item.ItemColorProvider;
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.item.ItemPlacementContext;
|
||||
import net.minecraft.state.StateManager;
|
||||
import net.minecraft.state.property.BooleanProperty;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.blocks.AuroraCrystalBlock;
|
||||
import ru.betterend.interfaces.IColorProvider;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
import ru.betterend.util.MHelper;
|
||||
|
||||
public class BlockStoneLantern extends BlockBaseNotFull implements IColorProvider, Waterloggable {
|
||||
public static final BooleanProperty IS_FLOOR = BooleanProperty.of("is_floor");
|
||||
public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
|
||||
|
||||
private static final VoxelShape SHAPE_CEIL = Block.createCuboidShape(3, 1, 3, 13, 16, 13);
|
||||
private static final VoxelShape SHAPE_FLOOR = Block.createCuboidShape(3, 0, 3, 13, 15, 13);
|
||||
private static final Vec3i[] COLORS = AuroraCrystalBlock.COLORS;
|
||||
|
||||
public BlockStoneLantern(Block source) {
|
||||
super(FabricBlockSettings.copyOf(source).luminance(15));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendProperties(StateManager.Builder<Block, BlockState> stateManager) {
|
||||
stateManager.add(IS_FLOOR, WATERLOGGED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
||||
WorldView worldView = ctx.getWorld();
|
||||
BlockPos blockPos = ctx.getBlockPos();
|
||||
Direction dir = ctx.getSide();
|
||||
if (dir == Direction.DOWN) {
|
||||
if (sideCoversSmallSquare(worldView, blockPos.up(), Direction.DOWN)) {
|
||||
boolean water = worldView.getFluidState(blockPos).getFluid() == Fluids.WATER;
|
||||
return getDefaultState().with(IS_FLOOR, false).with(WATERLOGGED, water);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (sideCoversSmallSquare(worldView, blockPos.down(), Direction.UP)) {
|
||||
boolean water = worldView.getFluidState(blockPos).getFluid() == Fluids.WATER;
|
||||
return getDefaultState().with(IS_FLOOR, true).with(WATERLOGGED, water);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockColorProvider getProvider() {
|
||||
return (state, world, pos, tintIndex) -> {
|
||||
long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ();
|
||||
double delta = i * 0.1;
|
||||
int index = MHelper.floor(delta);
|
||||
int index2 = (index + 1) & 3;
|
||||
delta -= index;
|
||||
index &= 3;
|
||||
|
||||
Vec3i color1 = COLORS[index];
|
||||
Vec3i color2 = COLORS[index2];
|
||||
|
||||
int r = MHelper.floor(MathHelper.lerp(delta, color1.getX(), color2.getX()));
|
||||
int g = MHelper.floor(MathHelper.lerp(delta, color1.getY(), color2.getY()));
|
||||
int b = MHelper.floor(MathHelper.lerp(delta, color1.getZ(), color2.getZ()));
|
||||
|
||||
return MHelper.color(r, g, b);
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemColorProvider getItemProvider() {
|
||||
return (stack, tintIndex) -> {
|
||||
return MHelper.color(COLORS[3].getX(), COLORS[3].getY(), COLORS[3].getZ());
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) {
|
||||
return state.get(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) {
|
||||
if (state.get(IS_FLOOR)) {
|
||||
return sideCoversSmallSquare(world, pos.down(), Direction.UP);
|
||||
}
|
||||
else {
|
||||
return sideCoversSmallSquare(world, pos.up(), Direction.DOWN);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
|
||||
Boolean water = state.get(WATERLOGGED);
|
||||
if (water) {
|
||||
world.getFluidTickScheduler().schedule(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
|
||||
}
|
||||
if (!canPlaceAt(state, world, pos)) {
|
||||
return water ? Blocks.WATER.getDefaultState() : Blocks.AIR.getDefaultState();
|
||||
}
|
||||
else {
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier statePatternId() {
|
||||
return Patterned.STATE_STONE_LANTERN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModelPattern(String block) {
|
||||
Identifier blockId = Registry.BLOCK.getId(this);
|
||||
if (block.contains("ceil")) {
|
||||
return Patterned.createJson(Patterned.BLOCK_STONE_LANTERN_CEIL, blockId, blockId.getPath());
|
||||
}
|
||||
return Patterned.createJson(Patterned.BLOCK_STONE_LANTERN_FLOOR, blockId, blockId.getPath());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStatesPattern(Reader data) {
|
||||
Identifier blockId = Registry.BLOCK.getId(this);
|
||||
return Patterned.createJson(data, blockId, blockId.getPath());
|
||||
}
|
||||
}
|
139
src/main/java/ru/betterend/entity/EntityShadowWalker.java
Normal file
|
@ -0,0 +1,139 @@
|
|||
package ru.betterend.entity;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.ai.goal.FollowTargetGoal;
|
||||
import net.minecraft.entity.ai.goal.LookAroundGoal;
|
||||
import net.minecraft.entity.ai.goal.LookAtEntityGoal;
|
||||
import net.minecraft.entity.ai.goal.MeleeAttackGoal;
|
||||
import net.minecraft.entity.ai.goal.WanderAroundFarGoal;
|
||||
import net.minecraft.entity.attribute.DefaultAttributeContainer;
|
||||
import net.minecraft.entity.attribute.EntityAttributes;
|
||||
import net.minecraft.entity.damage.DamageSource;
|
||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||
import net.minecraft.entity.effect.StatusEffects;
|
||||
import net.minecraft.entity.mob.HostileEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.particle.ParticleTypes;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import ru.betterend.registry.EndSounds;
|
||||
import ru.betterend.util.MHelper;
|
||||
|
||||
public class EntityShadowWalker extends HostileEntity {
|
||||
public EntityShadowWalker(EntityType<EntityShadowWalker> entityType, World world) {
|
||||
super(entityType, world);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initGoals() {
|
||||
this.goalSelector.add(2, new AttackGoal(this, 1.0D, false));
|
||||
this.goalSelector.add(7, new WanderAroundFarGoal(this, 1.0D));
|
||||
this.goalSelector.add(8, new LookAtEntityGoal(this, PlayerEntity.class, 8.0F));
|
||||
this.goalSelector.add(8, new LookAroundGoal(this));
|
||||
this.targetSelector.add(2, new FollowTargetGoal<PlayerEntity>(this, PlayerEntity.class, true));
|
||||
}
|
||||
|
||||
public static DefaultAttributeContainer.Builder createMobAttributes() {
|
||||
return HostileEntity.createHostileAttributes()
|
||||
.add(EntityAttributes.GENERIC_FOLLOW_RANGE, 35.0)
|
||||
.add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.15)
|
||||
.add(EntityAttributes.GENERIC_ATTACK_DAMAGE, 4.5)
|
||||
.add(EntityAttributes.GENERIC_ARMOR, 2.0)
|
||||
.add(EntityAttributes.ZOMBIE_SPAWN_REINFORCEMENTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
world.addParticle(ParticleTypes.ASH,
|
||||
getX() + random.nextGaussian() * 0.2,
|
||||
getY() + random.nextGaussian() * 0.5 + 1,
|
||||
getZ() + random.nextGaussian() * 0.2,
|
||||
0, 0, 0);
|
||||
world.addParticle(ParticleTypes.SMOKE,
|
||||
getX() + random.nextGaussian() * 0.2,
|
||||
getY() + random.nextGaussian() * 0.5 + 1,
|
||||
getZ() + random.nextGaussian() * 0.2,
|
||||
0, 0, 0);
|
||||
world.addParticle(ParticleTypes.ENTITY_EFFECT,
|
||||
getX() + random.nextGaussian() * 0.2,
|
||||
getY() + random.nextGaussian() * 0.5 + 1,
|
||||
getZ() + random.nextGaussian() * 0.2,
|
||||
0, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
return EndSounds.ENTITY_SHADOW_WALKER;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource source) {
|
||||
return EndSounds.ENTITY_SHADOW_WALKER_DAMAGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
return EndSounds.ENTITY_SHADOW_WALKER_DEATH;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void playStepSound(BlockPos pos, BlockState state) {}
|
||||
|
||||
@Override
|
||||
protected float getSoundVolume() {
|
||||
return MHelper.randRange(0.4F, 0.6F, random);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getSoundPitch() {
|
||||
return MHelper.randRange(0.75F, 1.25F, random);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean tryAttack(Entity target) {
|
||||
boolean attack = super.tryAttack(target);
|
||||
if (attack && target instanceof LivingEntity) {
|
||||
LivingEntity living = (LivingEntity) target;
|
||||
if (!(living.hasStatusEffect(StatusEffects.BLINDNESS))) {
|
||||
living.addStatusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, 60));
|
||||
}
|
||||
}
|
||||
return attack;
|
||||
}
|
||||
|
||||
private final class AttackGoal extends MeleeAttackGoal {
|
||||
private final EntityShadowWalker walker;
|
||||
private int ticks;
|
||||
|
||||
public AttackGoal(EntityShadowWalker walker, double speed, boolean pauseWhenMobIdle) {
|
||||
super(walker, speed, pauseWhenMobIdle);
|
||||
this.walker = walker;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
super.start();
|
||||
this.ticks = 0;
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
super.stop();
|
||||
this.walker.setAttacking(false);
|
||||
}
|
||||
|
||||
public void tick() {
|
||||
super.tick();
|
||||
++this.ticks;
|
||||
if (this.ticks >= 5 && this.method_28348() < this.method_28349() / 2) {
|
||||
this.walker.setAttacking(true);
|
||||
}
|
||||
else {
|
||||
this.walker.setAttacking(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package ru.betterend.entity.render;
|
||||
|
||||
import net.minecraft.client.render.entity.BipedEntityRenderer;
|
||||
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||
import net.minecraft.client.render.entity.model.PlayerEntityModel;
|
||||
import net.minecraft.util.Identifier;
|
||||
import ru.betterend.BetterEnd;
|
||||
import ru.betterend.entity.EntityShadowWalker;
|
||||
|
||||
public class RendererEntityShadowWalker extends BipedEntityRenderer<EntityShadowWalker, PlayerEntityModel<EntityShadowWalker>> {
|
||||
private static final Identifier TEXTURE = BetterEnd.makeID("textures/entity/shadow_walker.png");
|
||||
|
||||
public RendererEntityShadowWalker(EntityRenderDispatcher entityRenderDispatcher) {
|
||||
super(entityRenderDispatcher, new PlayerEntityModel<EntityShadowWalker>(0.0F, false), 0.5F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier getTexture(EntityShadowWalker zombieEntity) {
|
||||
return TEXTURE;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"defaultMap": {
|
||||
"spriteMap": [
|
||||
{
|
||||
"sprite": "betterend:block/aurora_crystal",
|
||||
"material": "betterend:glow_all"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"defaultMap": {
|
||||
"spriteMap": [
|
||||
{
|
||||
"sprite": "betterend:block/aurora_crystal",
|
||||
"material": "betterend:glow_all"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"defaultMap": {
|
||||
"spriteMap": [
|
||||
{
|
||||
"sprite": "betterend:block/aurora_crystal",
|
||||
"material": "betterend:glow_all"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "item/template_spawn_egg"
|
||||
}
|
|
@ -0,0 +1,155 @@
|
|||
{
|
||||
"__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"particle": "betterend:block/%block%_side",
|
||||
"texture": "betterend:block/%block%_side",
|
||||
"top": "betterend:block/%block%_top",
|
||||
"crystal": "betterend:block/aurora_crystal",
|
||||
"bottom": "betterend:block/%block%_bottom"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 1, 4 ],
|
||||
"to": [ 12, 2, 12 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 4, 4, 12, 12 ], "texture": "#bottom" },
|
||||
"north": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 3, 2, 3 ],
|
||||
"to": [ 13, 4, 13 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 3, 3, 13, 13 ], "texture": "#bottom" },
|
||||
"up": { "uv": [ 3, 3, 13, 13 ], "texture": "#top" },
|
||||
"north": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 3, 12, 3 ],
|
||||
"to": [ 13, 14, 13 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 3, 3, 13, 13 ], "texture": "#bottom" },
|
||||
"up": { "uv": [ 3, 3, 13, 13 ], "texture": "#top" },
|
||||
"north": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 14, 4 ],
|
||||
"to": [ 12, 15, 12 ],
|
||||
"faces": {
|
||||
"up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" },
|
||||
"north": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 5, 4 ],
|
||||
"to": [ 6, 11, 6 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 10, 5, 4 ],
|
||||
"to": [ 12, 11, 6 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 5, 10 ],
|
||||
"to": [ 6, 11, 12 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 10, 5, 10 ],
|
||||
"to": [ 12, 11, 12 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 6, 15, 6 ],
|
||||
"to": [ 10, 16, 10 ],
|
||||
"faces": {
|
||||
"up": { "uv": [ 6, 6, 10, 10 ], "texture": "#top" },
|
||||
"north": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 4, 4 ],
|
||||
"to": [ 12, 5, 12 ],
|
||||
"faces": {
|
||||
"up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" },
|
||||
"north": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 11, 4 ],
|
||||
"to": [ 12, 12, 12 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 4, 4, 12, 12 ], "texture": "#bottom" },
|
||||
"north": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box10",
|
||||
"from": [ 6, 5, 6 ],
|
||||
"to": [ 10, 11, 10 ],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": { "uv": [ 6, 5, 10, 11 ], "texture": "#crystal", "tintindex": 0 },
|
||||
"south": { "uv": [ 6, 5, 10, 11 ], "texture": "#crystal", "tintindex": 0 },
|
||||
"west": { "uv": [ 6, 5, 10, 11 ], "texture": "#crystal", "tintindex": 0 },
|
||||
"east": { "uv": [ 6, 5, 10, 11 ], "texture": "#crystal", "tintindex": 0 }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,155 @@
|
|||
{
|
||||
"__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"particle": "betterend:block/%block%_side",
|
||||
"texture": "betterend:block/%block%_side",
|
||||
"top": "betterend:block/%block%_top",
|
||||
"crystal": "betterend:block/aurora_crystal",
|
||||
"bottom": "betterend:block/%block%_bottom"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 0, 4 ],
|
||||
"to": [ 12, 1, 12 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 4, 4, 12, 12 ], "texture": "#bottom", "cullface": "down" },
|
||||
"north": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 15, 12, 16 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 3, 1, 3 ],
|
||||
"to": [ 13, 3, 13 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 3, 3, 13, 13 ], "texture": "#bottom" },
|
||||
"up": { "uv": [ 3, 3, 13, 13 ], "texture": "#top" },
|
||||
"north": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 3, 13, 13, 15 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 3, 11, 3 ],
|
||||
"to": [ 13, 13, 13 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 3, 3, 13, 13 ], "texture": "#bottom" },
|
||||
"up": { "uv": [ 3, 3, 13, 13 ], "texture": "#top" },
|
||||
"north": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 3, 3, 13, 5 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 13, 4 ],
|
||||
"to": [ 12, 14, 12 ],
|
||||
"faces": {
|
||||
"up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" },
|
||||
"north": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 2, 12, 3 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 4, 4 ],
|
||||
"to": [ 6, 10, 6 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 10, 4, 4 ],
|
||||
"to": [ 12, 10, 6 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 4, 10 ],
|
||||
"to": [ 6, 10, 12 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 10, 4, 10 ],
|
||||
"to": [ 12, 10, 12 ],
|
||||
"faces": {
|
||||
"north": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 10, 6, 12, 12 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 6, 6, 12 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 6, 14, 6 ],
|
||||
"to": [ 10, 15, 10 ],
|
||||
"faces": {
|
||||
"up": { "uv": [ 6, 6, 10, 10 ], "texture": "#top" },
|
||||
"north": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 6, 1, 10, 2 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 3, 4 ],
|
||||
"to": [ 12, 4, 12 ],
|
||||
"faces": {
|
||||
"up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top" },
|
||||
"north": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 12, 12, 13 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box1",
|
||||
"from": [ 4, 10, 4 ],
|
||||
"to": [ 12, 11, 12 ],
|
||||
"faces": {
|
||||
"down": { "uv": [ 4, 4, 12, 12 ], "texture": "#bottom" },
|
||||
"north": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" },
|
||||
"south": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" },
|
||||
"west": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" },
|
||||
"east": { "uv": [ 4, 5, 12, 6 ], "texture": "#texture" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"__comment": "Box10",
|
||||
"from": [ 6, 4, 6 ],
|
||||
"to": [ 10, 10, 10 ],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": { "uv": [ 6, 6, 10, 12 ], "texture": "#crystal", "tintindex": 0 },
|
||||
"south": { "uv": [ 6, 6, 10, 12 ], "texture": "#crystal", "tintindex": 0 },
|
||||
"west": { "uv": [ 6, 6, 10, 12 ], "texture": "#crystal", "tintindex": 0 },
|
||||
"east": { "uv": [ 6, 6, 10, 12 ], "texture": "#crystal", "tintindex": 0 }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"variants": {
|
||||
"is_floor=false": { "model": "betterend:pattern/%block%/%block%_ceil" },
|
||||
"is_floor=true": { "model": "betterend:pattern/%block%/%block%_floor" }
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2 KiB |
After Width: | Height: | Size: 2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 3.7 KiB |