WIP: eternal portals
This commit is contained in:
parent
3d63ddc08e
commit
a2eaba0d55
58 changed files with 742 additions and 61 deletions
|
@ -19,9 +19,9 @@ import net.minecraft.loot.context.LootContextParameters;
|
|||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IColorProvider;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.registry.EndItems;
|
||||
import ru.betterend.util.MHelper;
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ import net.minecraft.world.BlockView;
|
|||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.blocks.BlockProperties.TripleShape;
|
||||
import ru.betterend.blocks.basis.BlockBaseNotFull;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
||||
public class BlockEndLotusLeaf extends BlockBaseNotFull implements IRenderTypeable {
|
||||
|
|
|
@ -27,8 +27,8 @@ import net.minecraft.world.BlockView;
|
|||
import net.minecraft.world.WorldAccess;
|
||||
import ru.betterend.blocks.BlockProperties.TripleShape;
|
||||
import ru.betterend.blocks.basis.BlockBase;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
||||
public class BlockEndLotusStem extends BlockBase implements Waterloggable, IRenderTypeable {
|
||||
|
|
|
@ -23,8 +23,8 @@ import net.minecraft.world.World;
|
|||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.dimension.DimensionType;
|
||||
import net.minecraft.world.gen.feature.ConfiguredFeatures;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.interfaces.TeleportingEntity;
|
||||
import ru.betterend.registry.EndParticles;
|
||||
import ru.betterend.registry.EndTags;
|
||||
|
|
|
@ -5,20 +5,29 @@ import java.util.List;
|
|||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockEntityProvider;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.loot.context.LootContext;
|
||||
import net.minecraft.state.StateManager;
|
||||
import net.minecraft.state.property.BooleanProperty;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.explosion.Explosion;
|
||||
import ru.betterend.blocks.basis.BlockSlab;
|
||||
import ru.betterend.registry.EndBlocks;
|
||||
|
||||
public class EternalPedestal extends BlockSlab {
|
||||
import ru.betterend.blocks.basis.BlockSlab;
|
||||
import ru.betterend.blocks.entities.EternalPedestalBlockEntity;
|
||||
import ru.betterend.registry.EndBlocks;
|
||||
import ru.betterend.registry.EndItems;
|
||||
|
||||
public class EternalPedestal extends BlockSlab implements BlockEntityProvider {
|
||||
public static final BooleanProperty ACTIVATED = BooleanProperty.of("active");
|
||||
public static final BooleanProperty HAS_ITEM = BooleanProperty.of("has_item");
|
||||
|
||||
|
@ -27,6 +36,39 @@ public class EternalPedestal extends BlockSlab {
|
|||
this.setDefaultState(stateManager.getDefaultState().with(ACTIVATED, false).with(HAS_ITEM, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
|
||||
if (world.isClient) return ActionResult.CONSUME;
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
if (blockEntity instanceof EternalPedestalBlockEntity && state.isOf(this)) {
|
||||
EternalPedestalBlockEntity pedestal = (EternalPedestalBlockEntity) blockEntity;
|
||||
if (pedestal.isEmpty()) {
|
||||
ItemStack itemStack = player.getStackInHand(hand);
|
||||
if (itemStack.isEmpty()) return ActionResult.CONSUME;
|
||||
if (itemStack.getItem().equals(EndItems.ETERNAL_CRYSTAL)) {
|
||||
world.setBlockState(pos, state.with(ACTIVATED, true).with(HAS_ITEM, true));
|
||||
} else {
|
||||
world.setBlockState(pos, state.with(HAS_ITEM, true));
|
||||
}
|
||||
pedestal.setStack(0, itemStack.split(1));
|
||||
return ActionResult.SUCCESS;
|
||||
} else {
|
||||
ItemStack itemStack = pedestal.getStack(0);
|
||||
if (player.giveItemStack(itemStack)) {
|
||||
if (state.get(ACTIVATED)) {
|
||||
world.setBlockState(pos, state.with(ACTIVATED, false).with(HAS_ITEM, false));
|
||||
} else {
|
||||
world.setBlockState(pos, state.with(HAS_ITEM, false));
|
||||
}
|
||||
pedestal.removeStack(0);
|
||||
return ActionResult.SUCCESS;
|
||||
}
|
||||
return ActionResult.FAIL;
|
||||
}
|
||||
}
|
||||
return ActionResult.PASS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) {
|
||||
return 0.0F;
|
||||
|
@ -52,4 +94,9 @@ public class EternalPedestal extends BlockSlab {
|
|||
super.appendProperties(stateManager);
|
||||
stateManager.add(ACTIVATED, HAS_ITEM);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntity createBlockEntity(BlockView world) {
|
||||
return new EternalPedestalBlockEntity();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.loot.context.LootContext;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
|
||||
public class BlockDoor extends DoorBlock implements IRenderTypeable, Patterned {
|
||||
|
|
|
@ -34,8 +34,8 @@ import net.minecraft.world.BlockView;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.registry.EndTags;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
||||
|
|
|
@ -22,8 +22,8 @@ import net.minecraft.world.World;
|
|||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import net.minecraft.world.gen.feature.Feature;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
import ru.betterend.registry.EndTags;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
|
|
@ -31,8 +31,8 @@ import net.minecraft.util.shape.VoxelShapes;
|
|||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.util.MHelper;
|
||||
|
||||
public class BlockGlowingFur extends BlockBaseNotFull implements IRenderTypeable {
|
||||
|
|
|
@ -25,8 +25,8 @@ import net.minecraft.util.shape.VoxelShape;
|
|||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
||||
|
|
|
@ -30,8 +30,8 @@ import net.minecraft.world.BlockView;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.registry.EndTags;
|
||||
|
||||
public class BlockPlant extends BlockBaseNotFull implements IRenderTypeable, Fertilizable {
|
||||
|
|
|
@ -8,8 +8,8 @@ import net.minecraft.block.MaterialColor;
|
|||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
|
||||
public class BlockSimpleLeaves extends BlockBaseNotFull implements IRenderTypeable {
|
||||
|
|
|
@ -13,8 +13,8 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.loot.context.LootContext;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
|
||||
public class BlockTrapdoor extends TrapdoorBlock implements IRenderTypeable, Patterned {
|
||||
|
|
|
@ -34,8 +34,8 @@ import net.minecraft.world.BlockView;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.registry.EndBlocks;
|
||||
import ru.betterend.registry.EndTags;
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@ import net.minecraft.world.BlockView;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.registry.EndTags;
|
||||
|
||||
public class BlockUpDownPlant extends BlockBaseNotFull implements IRenderTypeable {
|
||||
|
|
|
@ -33,8 +33,8 @@ import net.minecraft.world.WorldAccess;
|
|||
import net.minecraft.world.WorldView;
|
||||
import ru.betterend.blocks.BlockProperties;
|
||||
import ru.betterend.blocks.BlockProperties.TripleShape;
|
||||
import ru.betterend.client.ERenderLayer;
|
||||
import ru.betterend.client.IRenderTypeable;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
||||
public class BlockVine extends BlockBaseNotFull implements IRenderTypeable, Fertilizable {
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
package ru.betterend.blocks.entities;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.inventory.Inventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket;
|
||||
import net.minecraft.util.Tickable;
|
||||
import ru.betterend.registry.EndBlockEntities;
|
||||
|
||||
public class EternalPedestalBlockEntity extends BlockEntity implements Inventory, Tickable {
|
||||
private ItemStack activeItem = ItemStack.EMPTY;
|
||||
|
||||
private int age;
|
||||
|
||||
public EternalPedestalBlockEntity() {
|
||||
super(EndBlockEntities.ETERNAL_PEDESTAL);
|
||||
}
|
||||
|
||||
public int getAge() {
|
||||
return this.age;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
this.activeItem = ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return this.activeItem.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStack(int slot) {
|
||||
return this.activeItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack removeStack(int slot, int amount) {
|
||||
return this.removeStack(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack removeStack(int slot) {
|
||||
return this.activeItem = ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStack(int slot, ItemStack stack) {
|
||||
this.activeItem = stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlayerUse(PlayerEntity player) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityUpdateS2CPacket toUpdatePacket() {
|
||||
return new BlockEntityUpdateS2CPacket(pos, 32, this.toInitialChunkDataTag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundTag toInitialChunkDataTag() {
|
||||
return this.toTag(new CompoundTag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromTag(BlockState state, CompoundTag tag) {
|
||||
super.fromTag(state, tag);
|
||||
if (tag.contains("active_item")) {
|
||||
CompoundTag itemTag = tag.getCompound("active_item");
|
||||
this.activeItem = ItemStack.fromTag(itemTag);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundTag toTag(CompoundTag tag) {
|
||||
tag.put("active_item", activeItem.toTag(new CompoundTag()));
|
||||
return super.toTag(tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
if (!isEmpty()) {
|
||||
this.age++;
|
||||
if (age > 10000) {
|
||||
this.age = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package ru.betterend.blocks.entities.render;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.enums.SlabType;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
|
||||
import net.minecraft.client.render.model.json.ModelTransformation;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.DyeColor;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
||||
import ru.betterend.blocks.EternalPedestal;
|
||||
import ru.betterend.blocks.entities.EternalPedestalBlockEntity;
|
||||
import ru.betterend.client.render.BeamRenderer;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class EternalPedestalItemRenderer extends BlockEntityRenderer<EternalPedestalBlockEntity> {
|
||||
private static final Identifier BEAM_TEXTURE = new Identifier("textures/entity/end_gateway_beam.png");
|
||||
|
||||
public EternalPedestalItemRenderer(BlockEntityRenderDispatcher dispatcher) {
|
||||
super(dispatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(EternalPedestalBlockEntity entity, float tickDelta, MatrixStack matrices,
|
||||
VertexConsumerProvider vertexConsumers, int light, int overlay) {
|
||||
|
||||
if (entity.isEmpty()) return;
|
||||
|
||||
BlockState state = entity.getWorld().getBlockState(entity.getPos());
|
||||
SlabType type = state.get(EternalPedestal.TYPE);
|
||||
|
||||
ItemStack activeItem = entity.getStack(0);
|
||||
matrices.push();
|
||||
if (type.equals(SlabType.DOUBLE)) {
|
||||
matrices.translate(0.5, 1.5, 0.5);
|
||||
} else {
|
||||
matrices.translate(0.5, 1.0, 0.5);
|
||||
}
|
||||
float altitude = MathHelper.sin((entity.getAge() + tickDelta) / 10.0F) * 0.1F;
|
||||
float rotation = (entity.getAge() + tickDelta) / 25.0F + 6.0F;
|
||||
matrices.translate(0.0D, altitude, 0.0D);
|
||||
matrices.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion(rotation));
|
||||
MinecraftClient minecraft = MinecraftClient.getInstance();
|
||||
minecraft.getItemRenderer().renderItem(activeItem, ModelTransformation.Mode.GROUND, light, overlay, matrices, vertexConsumers);
|
||||
float[] colors = DyeColor.MAGENTA.getColorComponents();
|
||||
int y = entity.getPos().getY();
|
||||
VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getBeaconBeam(BEAM_TEXTURE, true));
|
||||
BeamRenderer.renderLightBeam(matrices, vertexConsumer, tickDelta, -y, 1024 - y, colors, 0.25F, 0.15F, 0.2F);
|
||||
matrices.pop();
|
||||
}
|
||||
}
|
|
@ -4,6 +4,8 @@ import net.fabricmc.api.ClientModInitializer;
|
|||
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
import ru.betterend.interfaces.IRenderTypeable;
|
||||
import ru.betterend.registry.EndBlockEntityRenders;
|
||||
import ru.betterend.registry.EndEntitiesRenders;
|
||||
import ru.betterend.registry.EndParticles;
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
package ru.betterend.client;
|
||||
|
||||
public interface IRenderTypeable
|
||||
{
|
||||
public ERenderLayer getRenderLayer();
|
||||
}
|
62
src/main/java/ru/betterend/client/render/BeamRenderer.java
Normal file
62
src/main/java/ru/betterend/client/render/BeamRenderer.java
Normal file
|
@ -0,0 +1,62 @@
|
|||
package ru.betterend.client.render;
|
||||
|
||||
import net.minecraft.client.render.OverlayTexture;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Matrix3f;
|
||||
import net.minecraft.util.math.Matrix4f;
|
||||
|
||||
public class BeamRenderer {
|
||||
public static void renderLightBeam(MatrixStack matrixStack, VertexConsumer vertexConsumer, float tick, int minY, int maxY, float[] colors, float alpha, float h, float k) {
|
||||
int m = minY + maxY;
|
||||
|
||||
float o = maxY < 0 ? tick : -tick;
|
||||
float p = MathHelper.fractionalPart(o * 0.2F - (float) MathHelper.floor(o * 0.1F));
|
||||
float red = colors[0];
|
||||
float green = colors[1];
|
||||
float blue = colors[2];
|
||||
|
||||
matrixStack.push();
|
||||
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(tick * 2.25F - 45.0F));
|
||||
float af = 0.0F;
|
||||
float ai = 0.0F;
|
||||
float aj = -h;
|
||||
float aa = -h;
|
||||
float ap = -1.0F + p;
|
||||
float aq = (float) maxY * (0.5F / h) + ap;
|
||||
|
||||
renderBeam(matrixStack, vertexConsumer, red, green, blue, alpha, minY, m, 0.0F, h, h, 0.0F, aj, 0.0F, 0.0F, aa, 0.0F, 1.0F, aq, ap);
|
||||
matrixStack.pop();
|
||||
|
||||
af = -k;
|
||||
float ag = -k;
|
||||
ai = -k;
|
||||
aj = -k;
|
||||
ap = -1.0F + p;
|
||||
aq = (float) maxY + ap;
|
||||
renderBeam(matrixStack, vertexConsumer, red, green, blue, alpha, minY, m, af, ag, k, ai, aj, k, k, k, 0.0F, 1.0F, aq, ap);
|
||||
}
|
||||
|
||||
private static void renderBeam(MatrixStack matrixStack, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, int j, int k, float l, float m, float n, float o, float p, float q, float r, float s, float t, float u, float v, float w) {
|
||||
MatrixStack.Entry entry = matrixStack.peek();
|
||||
Matrix4f matrix4f = entry.getModel();
|
||||
Matrix3f matrix3f = entry.getNormal();
|
||||
renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, l, m, n, o, t, u, v, w);
|
||||
renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, r, s, p, q, t, u, v, w);
|
||||
renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, n, o, r, s, t, u, v, w);
|
||||
renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, p, q, l, m, t, u, v, w);
|
||||
}
|
||||
|
||||
private static void renderBeam(Matrix4f matrix4f, Matrix3f matrix3f, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, int j, int k, float l, float m, float n, float o, float p, float q, float r, float s) {
|
||||
addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, k, l, m, q, r);
|
||||
addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, l, m, q, s);
|
||||
addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, n, o, p, s);
|
||||
addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, k, n, o, p, r);
|
||||
}
|
||||
|
||||
private static void addVertex(Matrix4f matrix4f, Matrix3f matrix3f, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, float y, float x, float l, float m, float n) {
|
||||
vertexConsumer.vertex(matrix4f, x, y, l).color(red, green, blue, alpha).texture(m, n).overlay(OverlayTexture.DEFAULT_UV).light(15728880).normal(matrix3f, 0.0F, 1.0F, 0.0F).next();
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package ru.betterend.client;
|
||||
package ru.betterend.client.render;
|
||||
|
||||
public enum ERenderLayer {
|
||||
CUTOUT,
|
|
@ -0,0 +1,8 @@
|
|||
package ru.betterend.interfaces;
|
||||
|
||||
import ru.betterend.client.render.ERenderLayer;
|
||||
|
||||
public interface IRenderTypeable
|
||||
{
|
||||
public ERenderLayer getRenderLayer();
|
||||
}
|
|
@ -1,17 +1,15 @@
|
|||
package ru.betterend.item;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.decoration.EndCrystalEntity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemUsageContext;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import ru.betterend.blocks.EternalPedestal;
|
||||
|
||||
import ru.betterend.blocks.RunedFlavolite;
|
||||
import ru.betterend.registry.EndItems;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
import ru.betterend.util.PortalFrameHelper;
|
||||
|
||||
public class EternalCrystal extends Item {
|
||||
|
@ -27,16 +25,10 @@ public class EternalCrystal extends Item {
|
|||
if (world instanceof ServerWorld) {
|
||||
if (usedBlock.getBlock() instanceof RunedFlavolite && !usedBlock.get(RunedFlavolite.ACTIVATED)) {
|
||||
if (PortalFrameHelper.checkPortalFrame((ServerWorld) world, usedPos, usedBlock.getBlock())) {
|
||||
return ActionResult.PASS;
|
||||
return ActionResult.SUCCESS;
|
||||
}
|
||||
} else if (usedBlock.getBlock() instanceof EternalPedestal && !usedBlock.get(EternalPedestal.HAS_ITEM)) {
|
||||
BlockPos upPos = usedPos.up();
|
||||
EndCrystalEntity endCrystalEntity = new EndCrystalEntity(world, upPos.getX() + 0.5D, upPos.getY(), upPos.getZ() + 0.5D);
|
||||
endCrystalEntity.setShowBottom(false);
|
||||
world.spawnEntity(endCrystalEntity);
|
||||
BlocksHelper.setWithoutUpdate(world, usedPos, usedBlock.with(EternalPedestal.HAS_ITEM, true).with(EternalPedestal.ACTIVATED, true));
|
||||
}
|
||||
}
|
||||
return ActionResult.FAIL;
|
||||
return ActionResult.PASS;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import net.minecraft.network.packet.s2c.play.SignEditorOpenS2CPacket;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.thread.ThreadExecutor;
|
||||
import ru.betterend.blocks.entities.ESignBlockEntity;
|
||||
import ru.betterend.blocks.entities.EternalPedestalBlockEntity;
|
||||
import ru.betterend.client.gui.BlockSignEditScreen;
|
||||
|
||||
@Mixin(ClientPlayNetworkHandler.class)
|
||||
|
@ -45,7 +46,7 @@ public class ClientPlayNetworkHandlerMixin
|
|||
(ThreadExecutor<?>) client);
|
||||
BlockPos blockPos = packet.getPos();
|
||||
BlockEntity blockEntity = this.client.world.getBlockEntity(blockPos);
|
||||
if (blockEntity instanceof ESignBlockEntity) {
|
||||
if (blockEntity instanceof ESignBlockEntity || blockEntity instanceof EternalPedestalBlockEntity) {
|
||||
blockEntity.fromTag(this.client.world.getBlockState(blockPos), packet.getCompoundTag());
|
||||
info.cancel();
|
||||
}
|
||||
|
|
|
@ -18,10 +18,13 @@ import ru.betterend.blocks.entities.EBarrelBlockEntity;
|
|||
import ru.betterend.blocks.entities.EChestBlockEntity;
|
||||
import ru.betterend.blocks.entities.ESignBlockEntity;
|
||||
import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity;
|
||||
import ru.betterend.blocks.entities.EternalPedestalBlockEntity;
|
||||
|
||||
public class EndBlockEntities {
|
||||
public final static BlockEntityType<EndStoneSmelterBlockEntity> END_STONE_SMELTER = registerBlockEntity(EndStoneSmelter.ID,
|
||||
BlockEntityType.Builder.create(EndStoneSmelterBlockEntity::new, EndBlocks.END_STONE_SMELTER));
|
||||
public final static BlockEntityType<EternalPedestalBlockEntity> ETERNAL_PEDESTAL = registerBlockEntity("eternal_pedestal",
|
||||
BlockEntityType.Builder.create(EternalPedestalBlockEntity::new, EndBlocks.ETERNAL_PEDESTAL));
|
||||
public static final BlockEntityType<EChestBlockEntity> CHEST = registerBlockEntity("chest",
|
||||
BlockEntityType.Builder.create(EChestBlockEntity::new, getChests()));
|
||||
public static final BlockEntityType<EBarrelBlockEntity> BARREL = registerBlockEntity("barrel",
|
||||
|
|
|
@ -5,11 +5,13 @@ import net.fabricmc.api.Environment;
|
|||
import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry;
|
||||
import ru.betterend.blocks.entities.render.EChestBlockEntityRenderer;
|
||||
import ru.betterend.blocks.entities.render.ESignBlockEntityRenderer;
|
||||
import ru.betterend.blocks.entities.render.EternalPedestalItemRenderer;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class EndBlockEntityRenders {
|
||||
@Environment(EnvType.CLIENT)
|
||||
public static void register() {
|
||||
BlockEntityRendererRegistry.INSTANCE.register(EndBlockEntities.CHEST, EChestBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.INSTANCE.register(EndBlockEntities.SIGN, ESignBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.INSTANCE.register(EndBlockEntities.ETERNAL_PEDESTAL, EternalPedestalItemRenderer::new);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,198 @@
|
|||
{
|
||||
"variants": {
|
||||
"type=bottom,active=false": [
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_1",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_2",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_3",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_4",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_5",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_6",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_7",
|
||||
"uvlock": true
|
||||
}
|
||||
],
|
||||
"type=bottom,active=true": [
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_1",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_2",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_3",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_4",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_5",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_6",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_7",
|
||||
"uvlock": true
|
||||
}
|
||||
],
|
||||
"type=top,active=false": [
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_1",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_2",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_3",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_4",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_5",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_6",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_7",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
}
|
||||
],
|
||||
"type=top,active=true": [
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_1",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_2",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_3",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_4",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_5",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_6",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_active_7",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
}
|
||||
],
|
||||
"type=double,active=false": [
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_1",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_2",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_3",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_4",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_5",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_6",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_7",
|
||||
"uvlock": true
|
||||
}
|
||||
],
|
||||
"type=double,active=true": [
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_active_1",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_active_2",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_active_3",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_active_4",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_active_5",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_active_6",
|
||||
"uvlock": true
|
||||
},
|
||||
{
|
||||
"model": "betterend:block/eternal_pedestal_double_active_7",
|
||||
"uvlock": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_1",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_1"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_2",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_3",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_3"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_4",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_4"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_5",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_5"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_6",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_6"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_7",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_7"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_active_1",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_active_1"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_active_2",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_active_2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_active_3",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_active_3"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_active_4",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_active_4"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_active_5",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_active_5"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_active_6",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_active_6"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"top": "betterend:block/flavolite_runed_active_7",
|
||||
"side": "betterend:block/flavolite_tiles",
|
||||
"bottom": "betterend:block/flavolite_runed_active_7"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_1",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_2",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_3",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_4",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_5",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_6",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_7",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_active_1",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_active_2",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_active_3",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_active_4",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_active_5",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_active_6",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/flavolite_runed_active_7",
|
||||
"side": "betterend:block/flavolite_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/eternal_pedestal_1"
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "betterend:block/flavolite"
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue