WIP: eternal portals

This commit is contained in:
Aleksey 2020-10-27 17:54:22 +03:00
parent 3d63ddc08e
commit a2eaba0d55
58 changed files with 742 additions and 61 deletions

View file

@ -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;

View file

@ -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 {

View file

@ -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 {

View file

@ -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;

View file

@ -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();
}
}

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -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 {

View file

@ -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;

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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;

View file

@ -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 {

View file

@ -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 {

View file

@ -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;
}
}
}
}

View file

@ -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();
}
}

View file

@ -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;

View file

@ -1,6 +0,0 @@
package ru.betterend.client;
public interface IRenderTypeable
{
public ERenderLayer getRenderLayer();
}

View 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();
}
}

View file

@ -1,4 +1,4 @@
package ru.betterend.client;
package ru.betterend.client.render;
public enum ERenderLayer {
CUTOUT,

View file

@ -0,0 +1,8 @@
package ru.betterend.interfaces;
import ru.betterend.client.render.ERenderLayer;
public interface IRenderTypeable
{
public ERenderLayer getRenderLayer();
}

View file

@ -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;
}
}

View file

@ -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();
}

View file

@ -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",

View file

@ -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);
}
}

View file

@ -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
}
]
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_1",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_2",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_3",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_4",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_5",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_6",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_7",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_active_1",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_active_2",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_active_3",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_active_4",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_active_5",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_active_6",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "betterend:block/flavolite_runed_active_7",
"side": "betterend:block/flavolite_pillar_side"
}
}

View file

@ -0,0 +1,3 @@
{
"parent": "betterend:block/eternal_pedestal_1"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/flavolite"
}