Jump to content

SOLVED [1.19.3] Spawn rockets around player.


chxr

Recommended Posts

I'm having a tiny bit of trouble getting rockets around the player to just... well go off and explode

I don't exactly know if the rendering of the explosion is exclusively client-side or if I'm not understanding the tags correctly

As far as I understand, there is a tag containing all the data for the explosion, then the rest of the tags are added. There is also the FIREWORK_STAR but I don't know if I should take it into account. I've been looking in the Rocket Recipe and and Entity as well as the item but I'm not getting anything clear out of it. I have this code now (which is obviously bad-) Any tips on how to move forward?

 				ItemStack itemstack = new ItemStack(Items.FIREWORK_ROCKET);
                CompoundTag compoundtag = itemstack.getOrCreateTagElement("Fireworks");
                ListTag listtag = new ListTag();

                ItemStack itemstack2 = new ItemStack(Items.FIREWORK_STAR);
                CompoundTag compoundtag1 = itemstack2.getTagElement("Explosion");
                listtag.add(compoundtag1);
                itemstack2.setTag(compoundtag1);

                compoundtag.putByte("Flight", (byte)1);
                compoundtag.put("Explosions", listtag);
                itemstack.setTag(compoundtag);
                itemstack.setTag(compoundtag1);

                // Create and spawn the firework rocket entity
                double x = pos.getX() + (new Random().nextDouble() * 20 - 10);

                double z = pos.getZ() + (new Random().nextDouble()  * 20 - 10);
                BlockPos ypos = new BlockPos(x, 350, z);
                while (ypos.getY() > -64 && world.isEmptyBlock(ypos)) {
                    ypos = ypos.below();
                }
                double y = ypos.above().getY();
                FireworkRocketEntity rocket = new FireworkRocketEntity(world, x, y, z, ItemStack.EMPTY);
                world.addFreshEntity(rocket);

 

Edited by chxr
Link to comment
Share on other sites

Here is my code on doing some similar summoning with data. 

private void spawnPreview(boolean invis) {
	CompoundTag extraNBT = new CompoundTag();
	extraNBT.putBoolean("NoGravity", true);
	extraNBT.putBoolean("Invisible", invis);
	extraNBT.putBoolean("ShowArms", true);
	extraNBT.putBoolean("NoBasePlate", true);
	preview = new ArmorStand(this.minecraft.player.getLevel(), 0, 0, 0);
	preview.load(extraNBT);
}

I modified it slightly to get the right point across, but you need to add data to the summoned entity.

I'm not good at modding, but at least I can read a crash report (well enough). That's something, right?

Link to comment
Share on other sites

22 hours ago, Hipposgrumm said:

Here is my code on doing some similar summoning with data. 

private void spawnPreview(boolean invis) {
	CompoundTag extraNBT = new CompoundTag();
	extraNBT.putBoolean("NoGravity", true);
	extraNBT.putBoolean("Invisible", invis);
	extraNBT.putBoolean("ShowArms", true);
	extraNBT.putBoolean("NoBasePlate", true);
	preview = new ArmorStand(this.minecraft.player.getLevel(), 0, 0, 0);
	preview.load(extraNBT);
}

I modified it slightly to get the right point across, but you need to add data to the summoned entity.

So is it the load what I'm missing? Now the rockets wont spawn hmm. I'll keep trying and report back if I get something

Link to comment
Share on other sites

Ok so in the end it was that I did not understand how the tags on the item and entity worked. I was trying to bulk add all the tags (including item id and stack count) directly to the rocket. but turns out that the fireworks go on the rocket item and the extra lifetime tag goes on the entity, if I understood correctly. So it ends up looking something like this:

		ListTag explosionsList = new ListTag();
                CompoundTag explosionsTag = new CompoundTag();
                explosionsTag.putByte("Type", (byte) 3);
                explosionsTag.putByte("Flicker", (byte) 0);
                explosionsTag.putByte("Trail", (byte) 1);
                explosionsTag.putIntArray("Colors", new int[] {5635925});
                explosionsTag.putIntArray("FadeColors", new int[] {11141120});
				//List of explosion parameters (I just copied from a /summon example to test it)
                explosionsList.add(explosionsTag);
				//There might be multiple customized explosions, so they go in a list

                CompoundTag fireworksTag = new CompoundTag();
                fireworksTag.putInt("Flight", 2);
                fireworksTag.put("Explosions", explosionsList);
                // Flight:2,Explosions:[{Type:3,Flicker:0,Trail:1,Colors:[I;5635925],FadeColors:[I;11141120]}]
				//The whole firework data, including how high up will it go, go in a higher nested tag

				//NOW we create a rocket item stack and add ONLY the fireworks tag to it. The rest of the needed tags will be read for the entity later
                ItemStack fireworkItem = new ItemStack(Items.FIREWORK_ROCKET);
                CompoundTag fireWorkitemTag = fireworkItem.getOrCreateTag();
                fireWorkitemTag.put("Fireworks", fireworksTag);
                // (The full item tag will have the item id and the stack Count) Fireworks:{Flight:2,Explosions:[{Type:3,Flicker:0,Trail:1,Colors:[I;5635925],FadeColors:[I;11141120]}]}              

                // Create and spawn the firework rocket entity
                double x = pos.getX() + (new Random().nextDouble() * 20 - 10);

                double z = pos.getZ() + (new Random().nextDouble()  * 20 - 10);
                BlockPos ypos = new BlockPos(x, 350, z);
                while (ypos.getY() > -64 && world.isEmptyBlock(ypos)) {
                    ypos = ypos.below();
                }
                double y = ypos.above().getY();

				//Here we use the already crated rocket itemstsack to feed the entity: It will read all the tags (Including the needed ID and stackcount from the stack itself) Lastly, we also specify the lifetime of the rocket. This goes directly before the item data.
               FireworkRocketEntity rocket = new FireworkRocketEntity(world, x, y, z, fireworkItem);
                CompoundTag fireworkEntityTag = new CompoundTag();
                fireworkEntityTag.putInt("LifeTime", 40);
                rocket.addAdditionalSaveData(fireworkEntityTag);
                // LifeTime:40,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:3,Flicker:0,Trail:1,Colors:[I;5635925],FadeColors:[I;11141120]}]}}} This is what the full /summon command looks like and how the order of the tags ends up looking like (I think)
                world.addFreshEntity(rocket); //Spawn the rocket entity

 

Edited by chxr
typos
Link to comment
Share on other sites

  • chxr changed the title to SOLVED [1.19.3] Spawn rockets around player.

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.