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



×
×
  • Create New...

Important Information

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