Jump to content

How to create an entity with properties and textures of a block


alimrv

Recommended Posts

Hello everyone!

I recently started learning Minecraft modding and I'm currently trying to figure out how to work with entities . My goal is to move the block the player is looking at three blocks up . Now I've figured how to move the block but I wanted to add some animations to it and I decided to summon an entity and move it upwards and delete it and then summon my block again. But the problem is I can't any way to summon an entity . All the videos on YT are about making custom entities or block entities . And my second question is how can I move it afterwards . Can I apply some kind of force ?

Link to comment
Share on other sites

There are many ways to summon an entity.

Since you want to give it an initial velocity, have a look at GhastShootFireballGoal.

For rendering a block during entity rendering, look at the FallingBlockRenderer, used for things like falling sand or dropping anvils.

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

Link to comment
Share on other sites

On 11/12/2022 at 8:28 PM, warjort said:

There are many ways to summon an entity.

Since you want to give it an initial velocity, have a look at GhastShootFireballGoal.

For rendering a block during entity rendering, look at the FallingBlockRenderer, used for things like falling sand or dropping anvils.

Well , how can I replace my fireball's texture with a grass block . I couldn't figure it out.

 

Edited by alimrv
Link to comment
Share on other sites

On 11/12/2022 at 4:58 PM, warjort said:

For rendering a block during entity rendering, look at the FallingBlockRenderer, used for things like falling sand or dropping anvils.

 

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

Link to comment
Share on other sites

On 11/16/2022 at 11:59 AM, warjort said:

 

package net.alimrv.ridemod.block.custom;

import net.minecraft.client.renderer.entity.FallingBlockRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MoverType;
import net.minecraft.world.entity.item.FallingBlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.NotNull;

public class EntityGrass extends FallingBlockEntity {

    Vec3 vec = Vec3.ZERO;
    BlockPos pos;
    ServerLevel level;
    BlockState state;
    int i;

    public EntityGrass(EntityType<? extends FallingBlockEntity> entityType, ServerLevel level , BlockPos pos , BlockState state, int i) {
        super(entityType, level);

        this.pos = pos;
        this.level = level;
        this.state = state;
        this.i = i;
    }

    @Override
    public void tick()
    {
            setNoGravity(true);

            if(this.time >= 6)
            {
                placeBlock(this.pos,this.level,this.state,this.i);
                this.kill();
            }

            this.setDeltaMovement(this.vec.add(0 , 0.5, 0));

                this.move(MoverType.SELF , this.getDeltaMovement());

                ++this.time;

    }

    //places block after moving the entity
    void placeBlock(BlockPos pos, @NotNull ServerLevel level , BlockState state , int i)
    {
            level.setBlock(pos,state , i);
    }
}

I figured it was better to make a FallingBlockEntity than a fireball. But still I can't figure out how to change the blockState . I looked at FallingBlockRenderer but I don't know how to use it.

Link to comment
Share on other sites

You can't do it like that. If you want to subclass the FallingBlockEntity you need to create your own EntityType.

I am not even sure the FallingBlockEntity is even designed to be subclassed?

There is a "smart constructor" where you can create a FallingBlockEntity from a BlockState see FallingBlockEntity.fall()

and ScaffoldingBlock.tick() for example usage.

 

But I thought you just wanted to render a block when drawing your entity? FallingBlockRenderer is just an example of this.

The basics of what it is doing is this pseudo code:

// Get the BlockState from the FallingBlockEntity
BlockState blockstate = fallingBlockEntity.getBlockState();

-- snip --

// Get the model for that block state and render each render type
var model = this.dispatcher.getBlockModel(blockstate);
for (var renderType : model.getRenderTypes(....))
     this.dispatcher.getModelRenderer().tesselateBlock(...);

You would probably just hard code the blockstate with something like Blocks.GRASS_BLOCK.defaultState() ?

Edited by warjort

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hi, I want to make a client-only mod, everything is ok, but when I use shaders, none of the textures rendered in RenderLevelStageEvent nor the crow entity model are rendered, I want them to be visible, because it's a horror themed mod Here is how i render the crow model in the CrowEntityRenderer<CrowEntity>, by the time i use this method, i know is not the right method but i don't think this is the cause of the problem, the renderType i'm using is entityCutout @Override public void render(CrowEntity p_entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { super.render(p_entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); ClientEventHandler.getClient().crow.renderToBuffer(poseStack, bufferSource.getBuffer(ClientEventHandler.getClient().crow .renderType(TEXTURE)), packedLight, OverlayTexture.NO_OVERLAY, Utils.rgb(255, 255, 255)); } Here renderLevelStage @Override public void renderWorld(RenderLevelStageEvent e) { horrorEvents.draw(e); } Here is how i render every event public void draw(RenderLevelStageEvent e) { for (HorrorEvent event : currentHorrorEvents) { event.tick(e.getPartialTick()); event.draw(e); } } Here is how i render the crow model on the event @Override public void draw(RenderLevelStageEvent e) { if(e.getStage() == RenderLevelStageEvent.Stage.AFTER_ENTITIES) { float arcProgress = getArcProgress(0.25f); int alpha = (int) Mth.lerp(arcProgress, 0, 255); int packedLight = LevelRenderer.getLightColor(Minecraft.getInstance().level, blockPos); VertexConsumer builder = ClientEventHandler.bufferSource.getBuffer(crow); Crow<CreepyBirdHorrorEvent> model = ClientEventHandler .getClient().crow; model.setupAnim(this); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, packedLight, OverlayTexture.NO_OVERLAY, alpha); builder = ClientEventHandler.bufferSource.getBuffer(eyes); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, 15728880, OverlayTexture.NO_OVERLAY, alpha); } } How i render the model public static void renderModelInWorld(Model model, Vector3f pos, Vector3f offset, Camera camera, PoseStack matrix, VertexConsumer builder, int light, int overlay, int alpha) { matrix.pushPose(); Vec3 cameraPos = camera.getPosition(); double finalX = pos.x - cameraPos.x + offset.x; double finalY = pos.y - cameraPos.y + offset.y; double finalZ = pos.z - cameraPos.z + offset.z; matrix.pushPose(); matrix.translate(finalX, finalY, finalZ); matrix.mulPose(Axis.XP.rotationDegrees(180f)); model.renderToBuffer(matrix, builder, light, overlay, Utils .rgba(255, 255, 255, alpha)); matrix.popPose(); matrix.popPose(); } Thanks in advance
    • Here's the link: https://mclo.gs/7L5FibL Here's the link: https://mclo.gs/7L5FibL
    • Also the mod "Connector Extras" modifies Reach-entity-attributes and can cause fatal errors when combined with ValkrienSkies mod. Disable this mod and continue to use Syntra without it.
    • Hi everyone. I was trying modify the vanilla loot of the "short_grass" block, I would like it drops seeds and vegetal fiber (new item of my mod), but I don't found any guide or tutorial on internet. Somebody can help me?
    • On 1.20.1 use ValkrienSkies mod version 2.3.0 Beta 1. I had the same issues as you and it turns out the newer beta versions have tons of unresolved incompatibilities. If you change the version you will not be required to change the versions of eureka or any other additions unless prompted at startup. This will resolve Reach-entity-attributes error sound related error and cowardly errors.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.