Jump to content

[Solved] [1.16.4] How to spawn an entity?


Kragast

Recommended Posts

I need to spawn an entity in the world, but i can't found any information how to do this in 1.16.4. I tryed with a pig, but i couldn't :((
Tell me, please, how to do that

 

 

@SubscribeEvent
	public static void onKeyPress(InputEvent.KeyInputEvent event) {
		int key = event.getKey();
		int action = event.getAction();
		if ((key == 93) && (action == 1)) {
			System.out.print("KEY IS DOWN!\n");
			PlayerEntity player = Minecraft.getInstance().player;
			World world = player.getEntityWorld();
			world.setBlockState(player.getPosition().add(0, -1, 0), Block.getStateById(1))
			
			// spawn a mob here
			
		}
	}

 

Edited by Kragast
Link to comment
Share on other sites

World#addEntity is what you are searching for..though keep in mind you spawn entities on server side, not client. Also, for the future, when you are trying to do something like that (spawning entity), which vanilla has lot of example to look at, i suggest looking into vanilla code to see if you can find the way yourself. For example, in this case, a good point to start searching would have been spawn eggs, because, as you may know very well, they add entities to the world

Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port

Link to comment
Share on other sites

You can't such things on client (spawning entities), you need a packet to process the action on server.

 

Quote

Block.getStateById(1)

So does block adding/removing, you need to do that on server, also don't use numerical id to get blocks, items..etc.

You can check how vanilla egg, snowball like items creates projectile entities when right clicked.

Edited by poopoodice
Link to comment
Share on other sites

5 minutes ago, Beethoven92 said:

World#addEntity is what you are searching for..though keep in mind you spawn entities on server side, not client. Also, for the future, when you are trying to do something like that (spawning entity), which vanilla has lot of example to look at, i suggest looking into vanilla code to see if you can find the way yourself. For example, in this case, a good point to start searching would have been spawn eggs, because, as you may know very well, they add entities to the world

I've copied vanilla code and then my minecraft crashed :D

How can I summon entity in specific coordinates? I could change this later, but addEntity returns boolean, not Entity.

Edited by Kragast
Link to comment
Share on other sites

If you're making a mod that changes camera position, why do you need to add an entity?

23 minutes ago, Kragast said:

world.setBlockState(player.getPosition().add(0, -1, 0), Block.getStateById(1))

You can't do this on client.

Edited by Danebi
Link to comment
Share on other sites

10 minutes ago, Danebi said:

If you're making a mod that changes camera position, why do you need to add an entity?

You can't do this on client.

Because I want to setRenderViewEntity to my dummy entity.

 

When I place the block in my world, it works.

@Mod.EventBusSubscriber(modid = FreeCam.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ModClientEvents {

	@SubscribeEvent
	public static void onKeyPress(InputEvent.KeyInputEvent event) {}

}

 

Link to comment
Share on other sites

29 minutes ago, Kragast said:

When I place the block in my world, it works.

It "works" temporarily, and just for you. The block appears to be there (only in your client) but it actually doesn't exist for the server world. Example..creating an explosion on the client side makes blocks disappear visually, but in fact they are still there and you can still collide with them, just unload/reload the chunk or exit/re enter the world, and you will see that everything is back in its original place like nothing ever happened (and in fact this is the point)..try it youself if you don't believe me

Edited by Beethoven92

Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port

Link to comment
Share on other sites

27 minutes ago, Beethoven92 said:

It "works" temporarily, and just for you. The block appears to be there (only in your client) but it actually doesn't exist for the server world. Example..creating an explosion on the client side makes blocks disappear visually, but in fact they are still there and you can still collide with them, just unload/reload the chunk or exit/re enter the world, and you will see that everything is back in its original place like nothing ever happened (and in fact this is the point)..try it youself if you don't believe me

Yes, it is so.
Now I don't understand, how then I can connect Client-Side-Keyboard-Input with server interactions. Should I send packages?

Link to comment
Share on other sites

2 hours ago, poopoodice said:

You can't such things on client (spawning entities), you need a packet to process the action on server.

 

So does block adding/removing, you need to do that on server, also don't use numerical id to get blocks, items..etc.

You can check how vanilla egg, snowball like items creates projectile entities when right clicked.

 

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

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

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