Posted December 4, 20213 yr The entity creates a pillar of blocks. It appears to work fine; the blocks are getting placed. But the entity is not rendering. It should be displaying interpolated movement upwards. Instead, the blocks just appear (so the entity is invisible). public void tick() { LogManager.getLogger().info("ticks: " + ticks++ + " current " + blockPosition() + " old " + oldPos); if(blockPosition().equals(endBlockPos)){ if(releaseJutsuOnce != null){ releaseJutsuOnce.execute(); } remove(); return; } if(blockPosition().equals(oldPos.above())){ oldPos = blockPosition(); level.setBlockAndUpdate(blockPosition(), blockState); } setDeltaMovement(0, 0.1, 0); move(MoverType.SELF, getDeltaMovement()); } Renderer (copied from falling block): public class MudWallBlockEntityRenderer extends EntityRenderer<MudWallBlockEntity> { public MudWallBlockEntityRenderer(EntityRendererManager entityRendererManager) { super(entityRendererManager); this.shadowRadius = 0.5F; } @Override public void render(MudWallBlockEntity entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) { BlockState blockstate = entity.getBlockState(); if (blockstate.getRenderShape() == BlockRenderType.MODEL) { World world = entity.getCommandSenderWorld(); if (blockstate != world.getBlockState(entity.blockPosition()) && blockstate.getRenderShape() != BlockRenderType.INVISIBLE) { matrixStack.pushPose(); BlockPos blockpos = new BlockPos(entity.getX(), entity.getBoundingBox().maxY, entity.getZ()); matrixStack.translate(-0.5D, 0.0D, -0.5D); BlockRendererDispatcher blockrendererdispatcher = Minecraft.getInstance().getBlockRenderer(); for (net.minecraft.client.renderer.RenderType type : net.minecraft.client.renderer.RenderType.chunkBufferLayers()) { if (RenderTypeLookup.canRenderInLayer(blockstate, type)) { net.minecraftforge.client.ForgeHooksClient.setRenderLayer(type); blockrendererdispatcher.getModelRenderer().tesselateBlock(world, blockrendererdispatcher.getBlockModel(blockstate), blockstate, blockpos, matrixStack, buffer.getBuffer(type), false, new Random(), blockstate.getSeed(entity.getStartingBlockPos()), OverlayTexture.NO_OVERLAY); } } net.minecraftforge.client.ForgeHooksClient.setRenderLayer(null); matrixStack.popPose(); super.render(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight); } } } @Override public ResourceLocation getTextureLocation(MudWallBlockEntity pEntity) { return AtlasTexture.LOCATION_BLOCKS; } } Registration: RenderingRegistry.registerEntityRenderingHandler(ModEntities.MUD_WALL_BLOCK_ENTITY.get(), MudWallBlockEntityRenderer::new);
December 4, 20213 yr Author 2 minutes ago, diesieben07 said: Show the whole entity class. public class MudWallBlockEntity extends Entity { private static final BlockState blockState = ModBlocks.TEMPORARY_DIRT_BLOCK.get().defaultBlockState(); private int height; private OneTimeRunnable finishJutsuOnce; private BlockPos startingBlockPos; private BlockPos endBlockPos; private BlockPos oldPos; private int ticks; public MudWallBlockEntity(EntityType<? extends MudWallBlockEntity> entityType, World level) { super(entityType, level); } @OnlyIn(Dist.CLIENT) public MudWallBlockEntity(EntityType<? extends MudWallBlockEntity> entityType, World level, BlockPos position, int height, OneTimeRunnable releaseJutsu) { super(entityType, level); this.startingBlockPos = position; this.endBlockPos = new BlockPos(startingBlockPos.getX(), height, startingBlockPos.getZ()); this.oldPos = position; this.height = height; this.finishJutsuOnce = releaseJutsu; this.setPos(position.getX(), position.getY(), position.getZ()); this.ticks = 0; } @Override protected void defineSynchedData() { } @Override protected void readAdditionalSaveData(@Nonnull CompoundNBT pCompound) { startingBlockPos = new BlockPos(pCompound.getInt("StartX"), pCompound.getInt("StartY"),pCompound.getInt("StartZ")); endBlockPos = new BlockPos(startingBlockPos.getX(), pCompound.getInt("Height"), startingBlockPos.getZ()); oldPos = new BlockPos(startingBlockPos.getX(), pCompound.getInt("CurrentHeight"), startingBlockPos.getZ()); } @Override protected void addAdditionalSaveData(@Nonnull CompoundNBT pCompound) { pCompound.putInt("StartX", startingBlockPos.getX()); pCompound.putInt("StartY", startingBlockPos.getY()); pCompound.putInt("StartZ", startingBlockPos.getZ()); pCompound.putInt("Height", height); pCompound.putInt("CurrentHeight", oldPos.getY()); } @Nonnull @Override public IPacket<?> getAddEntityPacket() { return new SSpawnObjectPacket(this, Block.getId(this.getBlockState())); } @Override public void tick() { LogManager.getLogger().info("ticks: " + ticks++ + " current " + blockPosition() + " old " + oldPos); if(blockPosition().equals(endBlockPos)){ if(finishJutsuOnce != null){ finishJutsuOnce.execute(); } remove(); return; } if(blockPosition().equals(oldPos.above())){ oldPos = blockPosition(); level.setBlockAndUpdate(blockPosition(), blockState); } setDeltaMovement(0, 0.1, 0); move(MoverType.SELF, getDeltaMovement()); } public BlockState getBlockState() { return blockState; } public BlockPos getStartingBlockPos() { return startingBlockPos; } @Override public boolean canBeCollidedWith() { return false; } @Override protected boolean canAddPassenger(Entity pPassenger) { return false; } @Override public boolean canChangeDimensions() { return false; } }
December 4, 20213 yr Author 2 minutes ago, diesieben07 said: Do not use @OnlyIn. SSpawnObjectPacket only works for vanilla entities. You must use NetworkHooks.getEntitySpawningPacket. I am using onlyIn to remind myself where this is executed. It doesn't create any issues, does it?
December 4, 20213 yr Author 1 minute ago, matthew123 said: I am using onlyIn to remind myself where this is executed. It doesn't create any issues, does it? Also, the usage there is wrong. It is from when I used it on the client only (which you pointed out was incorrect).
December 4, 20213 yr Author 4 minutes ago, diesieben07 said: This is not at all the correct usage for @OnlyIn. Yes, @OnlyIn does cause issues. Do not use it. I will create my own annotation for marking things. It is better than using a comment. It would be interesting if I could somehow intercept method calls for methods annotated with it, and check the side. I am not sure If I can do that with my limited java expertise.
December 4, 20213 yr Author Blocks overlapping the entity are making it invisible. What do I do to prevent this?
December 5, 20213 yr 9 hours ago, matthew123 said: Blocks overlapping the entity are making it invisible. What do I do to prevent this? use debugger to check the conditions you are using before you render your Entity
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.