Jump to content

How do i register a munition-entity, using my existing registration procedure?


Drachenbauer

Recommended Posts

Hello

 

Actual i register my entities like this:

RegistryEvent in the main-class:

        @SubscribeEvent
        public static void registerEntities(final RegistryEvent.Register<EntityType<?>> event)
        {
            event.getRegistry().registerAll(AngryBirdsEntities.RED,
                                            AngryBirdsEntities.CHUCK,
                                            AngryBirdsEntities.BLUES,
                                            AngryBirdsEntities.BOMB,
                                            AngryBirdsEntities.MATHILDA,
                                            AngryBirdsEntities.TERENCE,
                                            AngryBirdsEntities.SILVER,
                                            AngryBirdsEntities.BUBBLES,
                                            AngryBirdsEntities.HAL,
                                            AngryBirdsEntities.STELLA,
                                            AngryBirdsEntities.POPPY,
                                            AngryBirdsEntities.WILLOW,
                                            AngryBirdsEntities.DAHLIA,
                                            AngryBirdsEntities.LUCA,
                                            AngryBirdsEntities.ICE_BIRD);
        }

Prepared entities in the entity-list-class:

    public static EntityType<?> RED = EntityType.Builder.create(RedEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".red").setRegistryName("red");
    public static EntityType<?> CHUCK = EntityType.Builder.create(ChuckEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".chuck").setRegistryName("chuck");
    public static EntityType<?> BLUES = EntityType.Builder.create(BluesEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".blues").setRegistryName("blues");
    public static EntityType<?> BOMB = EntityType.Builder.create(BombEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".bomb").setRegistryName("bomb");
    public static EntityType<?> MATHILDA = EntityType.Builder.create(MathildaEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".mathilda").setRegistryName("mathilda");
    public static EntityType<?> TERENCE = EntityType.Builder.create(TerenceEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".terence").setRegistryName("terence");
    public static EntityType<?> SILVER = EntityType.Builder.create(SilverEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".silver").setRegistryName("silver");
    public static EntityType<?> BUBBLES = EntityType.Builder.create(BubblesEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".bubbles").setRegistryName("bubbles");
    public static EntityType<?> HAL = EntityType.Builder.create(HalEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".hal").setRegistryName("hal");
    public static EntityType<?> STELLA = EntityType.Builder.create(StellaEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".stella").setRegistryName("stella");
    public static EntityType<?> POPPY = EntityType.Builder.create(PoppyEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".poppy").setRegistryName("poppy");
    public static EntityType<?> WILLOW = EntityType.Builder.create(WillowEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".willow").setRegistryName("willow");
    public static EntityType<?> DAHLIA = EntityType.Builder.create(DahliaEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".dahlia").setRegistryName("dahlia");
    public static EntityType<?> LUCA = EntityType.Builder.create(LucaEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".luca").setRegistryName("luca");
    public static EntityType<?> ICE_BIRD = EntityType.Builder.create(IceBirdEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".ice_bird").setRegistryName("ice_bird");

How do i register a munition-entity (based on the arrow-entity) in a way, that i can put it into the RegistryEvent in the main-class, as well as the living entities?

Edited by Drachenbauer
Link to comment
Share on other sites

Do not use static initializers.

Initialize and register your registries (in your case, the EntityTypes) in the according registry events.

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Link to comment
Share on other sites

I got the way with static initializers from a tutorial of Harry Talks.

My living entities work this way.

 

I made my own abstract entity class for my own munition, because i want no commections between the arrows and my munition.

I don´t know how else i can  make it impossible to use my munition with the bow and normal arrows with my slingshot.

Edited by Drachenbauer
Link to comment
Share on other sites

Even if static fields are working for you, the experts will still tell you not to because they can fail in unpredictable and strange ways that can be hard to troubleshoot.   It’s not really that hard to implement.  

 

Extending ArrowEntity won't have an impact on launching your munitions, because ArrowItem is a separate Class, just use a generic Item, not one based on ArrowItem.

 

There are a lot of behaviors in AbstractArrowEntity that would be difficult to implement in a custom entity.  If you can find a way to extend ArrowEntity, you might get past the custom spawn packet problem i've run into.  

Edited by PhilipChonacky
correction
Link to comment
Share on other sites

Do not follow Harry Talks tutorials; they are terrible in that they promotes bad coding practices and outdated/deprecated methods.

Static initializers will cause problems, and you cannot control when they are initialized.

 

Creating your own entity does not do anything in preventing your slingshot from using arrows.

You should override ItemBow#isArrow and return true if the given ItemStack contains your arrow item.

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Link to comment
Share on other sites

my slingshot does not extend the bow.

I used the code from the bow, and where the bow uses ArrowItem, i replaced this with my own munition-item class.

And inside the munition-item-class I have got a connection to my own munition-entity-class, that extends AbstractArrowEntity.

 

Where do i find better video tutorials for 1.14.3?

Is this better:

Jorrit Tyberghein modding tutorials

Edited by Drachenbauer
Link to comment
Share on other sites

If your slingshot act like a bow, it shall extends the bow.

There is no point in copying everything again.

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Link to comment
Share on other sites

but how do i separate the munitions then to make it unable to use arrows?

 

About Static initializers for entities:

The EntityTypes - class in the minecraft-source also has such static fields (with all capital entity-names) for all entities.

Here is a sample for one of theese lines:

public static final EntityType<ArrowEntity> ARROW = register("arrow", EntityType.Builder.<ArrowEntity>create(ArrowEntity::new, EntityClassification.MISC).size(0.5F, 0.5F));
Edited by Drachenbauer
Link to comment
Share on other sites

If you say, tha way, Harry Talks registers entities, is not good, then i need a tutorial-video, that shows it a better way.

 

Tutorial-videos work the best for me to make stuff in a mod working.

And Harry Talks was the only one, i found so far, who shows registering entities in 1.14.3

Edited by Drachenbauer
Link to comment
Share on other sites

10 hours ago, Drachenbauer said:

Tutorial-videos work the best for me to make stuff in a mod working.

@EventBusSubscriber(bus=Bus.MOD, modid="modid")
public class EntityTypes {
  @ObjectHolder("modid:red")
  public static final EntityType RED = null;
  
  @SubscribeEvent
  public static void registerEntities(Register<EntityType<?>> event) {
    event.getRegistry().registerAll(
    	EntityType.Builder.create(RedEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".red").setRegistryName("red")
    );
  }
}

That's more or less what it should look like.

Edited by Animefan8888

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

I have lot´s of different birds.

Should i give each one such an objectholder with their names?

 

I connected ti the modid-string in my Reference-Class, where you say "modid" i think, so it keeps working, if i think about changing the modid later in the reference-class.

 

your empty Entitytype-thing gives me a raw type warning.should i better add "<?>" behind "EntityType"?

Edited by Drachenbauer
Link to comment
Share on other sites

6 minutes ago, Drachenbauer said:

your empty Entitytype-thing gives me a raw type warning.should i better add "<?>" behind "EntityType"?

Yes though unless the underline is red it doesn't matter.

8 minutes ago, Drachenbauer said:

Should i give each one such an objectholder with their names? 

You only need to add the ObjectHolder/Field if you need to access the field.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

The entity-classes of my birds want an EntityType named in theri constructor.

So i think, i need theese fields for all of them to put theese all-capitals-names into the constructors..

 

in my main-class i have this:

@SubscribeEvent
        public static void registerEntities(final RegistryEvent.Register<EntityType<?>> event)
        {
            event.getRegistry().registerAll(AngryBirdsEntities.RED,
                                            AngryBirdsEntities.CHUCK,
                                            AngryBirdsEntities.BLUES,
                                            AngryBirdsEntities.BOMB,
                                            AngryBirdsEntities.MATHILDA,
                                            AngryBirdsEntities.TERENCE,
                                            AngryBirdsEntities.SILVER,
                                            AngryBirdsEntities.BUBBLES,
                                            AngryBirdsEntities.HAL,
                                            AngryBirdsEntities.STELLA,
                                            AngryBirdsEntities.POPPY,
                                            AngryBirdsEntities.WILLOW,
                                            AngryBirdsEntities.DAHLIA,
                                            AngryBirdsEntities.LUCA,
                                            AngryBirdsEntities.ICE_BIRD);
        }

Can i delete this, if i change all my birds to how you make it?

 

And in the headline of your method, i think, it should be "Register<EntityType<?>> event" instead of "Register<EntityTypes> event".

 

It seams like you forgot to tell me something.

I cannot spwn them with a spawn-egg now.

 

This i how i actually made my SpawnEggs:

    public static void registerEntitySpawnEggs(final RegistryEvent.Register<Item>event)
    {
        event.getRegistry().registerAll(AngryBirdsItems.red_egg = registerEntitySpawnEgg(RED, 0xdf0000, 0xdfbf9f, "red_egg"),
                                        AngryBirdsItems.chuck_egg = registerEntitySpawnEgg(CHUCK, 0xffff00, 0xffffff, "chuck_egg"),
                                        AngryBirdsItems.blues_egg = registerEntitySpawnEgg(BLUES, 0x007fff, 0xff0000, "blues_egg"),
                                        AngryBirdsItems.bomb_egg = registerEntitySpawnEgg(BOMB, 0x3f3f3f, 0x7f7f7f, "bomb_egg"),
                                        AngryBirdsItems.mathilda_egg = registerEntitySpawnEgg(MATHILDA, 0xffffff, 0xffbfbf, "mathilda_egg"),
                                        AngryBirdsItems.terence_egg = registerEntitySpawnEgg(TERENCE, 0xbf002f, 0xbf9f7f, "terence_egg"),
                                        AngryBirdsItems.silver_egg = registerEntitySpawnEgg(SILVER, 0xbfbfbf, 0xffffff, "silver_egg"),
                                        AngryBirdsItems.bubbles_egg = registerEntitySpawnEgg(BUBBLES, 0xff7f00, 0x000000, "bubbles_egg"),
                                        AngryBirdsItems.hal_egg = registerEntitySpawnEgg(HAL, 0x00bf00, 0xffffff, "hal_egg"),
                                        AngryBirdsItems.stella_egg = registerEntitySpawnEgg(STELLA, 0xffadb7, 0xffd7dc, "stella_egg"),
                                        AngryBirdsItems.poppy_egg = registerEntitySpawnEgg(POPPY, 0xffff3f, 0xffffbf, "poppy_egg"),
                                        AngryBirdsItems.willow_egg = registerEntitySpawnEgg(WILLOW, 0x3f9fff, 0x7fbfff, "willow_egg"),
                                        AngryBirdsItems.dahlia_egg = registerEntitySpawnEgg(DAHLIA, 0xbf7f3f, 0xffdfbf, "dahlia_egg"),
                                        AngryBirdsItems.luca_egg = registerEntitySpawnEgg(LUCA, 0x7fbfff, 0xffffbf, "luca_egg"),
                                        AngryBirdsItems.ice_bird_egg = registerEntitySpawnEgg(ICE_BIRD, 0x7fbfff, 0x007fff, "ice_bird_egg"));	    
    }
    
    public static Item registerEntitySpawnEgg(EntityType<?> type, int color1, int color2, String name)
    {
        SpawnEggItem item = new SpawnEggItem(type, color1, color2, new Item.Properties().group(AngryBirds.ANGRY_BIRDS));
        item.setRegistryName(name);
        return item;
    }

 

If i try to use a spawn egg, i get this:

Spoiler

[23:13:29.614] [Server thread/FATAL] [minecraft/ThreadTaskExecutor]: Error executing task on Server
java.lang.NullPointerException: null
    at net.minecraft.item.SpawnEggItem.onItemUse(SourceFile:82) ~[?:?] {}
    at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:599) ~[?:?] {}
    at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:162) ~[?:?] {}
    at net.minecraft.server.management.PlayerInteractionManager.func_219441_a(PlayerInteractionManager.java:357) ~[?:?] {}
    at net.minecraft.network.play.ServerPlayNetHandler.processTryUseItemOnBlock(ServerPlayNetHandler.java:876) ~[?:?] {}
    at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.processPacket(SourceFile:36) ~[?:?] {}
    at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.processPacket(SourceFile:10) ~[?:?] {}
    at net.minecraft.network.PacketThreadUtil.func_210405_a(SourceFile:15) ~[?:?] {}
    at net.minecraft.util.concurrent.TickDelayedTask.run(SourceFile:18) ~[?:?] {}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.run(SourceFile:135) [?:?] {pl:accesstransformer:B}
    at net.minecraft.util.concurrent.RecursiveEventLoop.run(SourceFile:23) [?:?] {}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.driveOne(SourceFile:114) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.func_213205_aW(MinecraftServer.java:683) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.driveOne(MinecraftServer.java:677) [?:?] {pl:accesstransformer:B}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.drainTasks(SourceFile:99) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.runScheduledTasks(MinecraftServer.java:662) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:613) [?:?] {pl:accesstransformer:B}
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_221] {}

It shows no class of my mod.

So i don´t know, what exactly i have to change to fix this eror.

Edited by Drachenbauer
Link to comment
Share on other sites

2 minutes ago, Drachenbauer said:

Can i delete this, if i change all my birds to how you make it?

Yes

 

2 minutes ago, Drachenbauer said:

And in the headline of your method, i think, it should be "Register<EntityType<?>> event" instead of "Register<EntityTypes> event".

If that makes your IDE happy then yes.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

40 minutes ago, Drachenbauer said:

It seams like you forgot to tell me something.

I cannot spwn them with a spawn-egg now.

 

This i how i actually made my SpawnEggs:


    public static void registerEntitySpawnEggs(final RegistryEvent.Register<Item>event)
    {
        event.getRegistry().registerAll(AngryBirdsItems.red_egg = registerEntitySpawnEgg(RED, 0xdf0000, 0xdfbf9f, "red_egg"),
                                        AngryBirdsItems.chuck_egg = registerEntitySpawnEgg(CHUCK, 0xffff00, 0xffffff, "chuck_egg"),
                                        AngryBirdsItems.blues_egg = registerEntitySpawnEgg(BLUES, 0x007fff, 0xff0000, "blues_egg"),
                                        AngryBirdsItems.bomb_egg = registerEntitySpawnEgg(BOMB, 0x3f3f3f, 0x7f7f7f, "bomb_egg"),
                                        AngryBirdsItems.mathilda_egg = registerEntitySpawnEgg(MATHILDA, 0xffffff, 0xffbfbf, "mathilda_egg"),
                                        AngryBirdsItems.terence_egg = registerEntitySpawnEgg(TERENCE, 0xbf002f, 0xbf9f7f, "terence_egg"),
                                        AngryBirdsItems.silver_egg = registerEntitySpawnEgg(SILVER, 0xbfbfbf, 0xffffff, "silver_egg"),
                                        AngryBirdsItems.bubbles_egg = registerEntitySpawnEgg(BUBBLES, 0xff7f00, 0x000000, "bubbles_egg"),
                                        AngryBirdsItems.hal_egg = registerEntitySpawnEgg(HAL, 0x00bf00, 0xffffff, "hal_egg"),
                                        AngryBirdsItems.stella_egg = registerEntitySpawnEgg(STELLA, 0xffadb7, 0xffd7dc, "stella_egg"),
                                        AngryBirdsItems.poppy_egg = registerEntitySpawnEgg(POPPY, 0xffff3f, 0xffffbf, "poppy_egg"),
                                        AngryBirdsItems.willow_egg = registerEntitySpawnEgg(WILLOW, 0x3f9fff, 0x7fbfff, "willow_egg"),
                                        AngryBirdsItems.dahlia_egg = registerEntitySpawnEgg(DAHLIA, 0xbf7f3f, 0xffdfbf, "dahlia_egg"),
                                        AngryBirdsItems.luca_egg = registerEntitySpawnEgg(LUCA, 0x7fbfff, 0xffffbf, "luca_egg"),
                                        AngryBirdsItems.ice_bird_egg = registerEntitySpawnEgg(ICE_BIRD, 0x7fbfff, 0x007fff, "ice_bird_egg"));	    
    }
    
    public static Item registerEntitySpawnEgg(EntityType<?> type, int color1, int color2, String name)
    {
        SpawnEggItem item = new SpawnEggItem(type, color1, color2, new Item.Properties().group(AngryBirds.ANGRY_BIRDS));
        item.setRegistryName(name);
        return item;
    }

 

If i try to use a spawn egg, i get this:

  Reveal hidden contents

[23:13:29.614] [Server thread/FATAL] [minecraft/ThreadTaskExecutor]: Error executing task on Server
java.lang.NullPointerException: null
    at net.minecraft.item.SpawnEggItem.onItemUse(SourceFile:82) ~[?:?] {}
    at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:599) ~[?:?] {}
    at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:162) ~[?:?] {}
    at net.minecraft.server.management.PlayerInteractionManager.func_219441_a(PlayerInteractionManager.java:357) ~[?:?] {}
    at net.minecraft.network.play.ServerPlayNetHandler.processTryUseItemOnBlock(ServerPlayNetHandler.java:876) ~[?:?] {}
    at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.processPacket(SourceFile:36) ~[?:?] {}
    at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.processPacket(SourceFile:10) ~[?:?] {}
    at net.minecraft.network.PacketThreadUtil.func_210405_a(SourceFile:15) ~[?:?] {}
    at net.minecraft.util.concurrent.TickDelayedTask.run(SourceFile:18) ~[?:?] {}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.run(SourceFile:135) [?:?] {pl:accesstransformer:B}
    at net.minecraft.util.concurrent.RecursiveEventLoop.run(SourceFile:23) [?:?] {}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.driveOne(SourceFile:114) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.func_213205_aW(MinecraftServer.java:683) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.driveOne(MinecraftServer.java:677) [?:?] {pl:accesstransformer:B}
    at net.minecraft.util.concurrent.ThreadTaskExecutor.drainTasks(SourceFile:99) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.runScheduledTasks(MinecraftServer.java:662) [?:?] {pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:613) [?:?] {pl:accesstransformer:B}
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_221] {}

It shows no class of my mod.

So i don´t know, what exactly i have to change to fix this eror.

And how about this?

Link to comment
Share on other sites

43 minutes ago, Drachenbauer said:

If i try to use a spawn egg, i get this:

That is caused because Items are registered before EntityTypes. This is probably a bug and you'll want to report it here. For now it is probably better to get rid of the ObjectHolders on EntityType fields and initialize them in the Item registry event then register them in the EntityType registry event.

 

public static EntityType<?> RED;
public static void registerSpawnEggs(Register<Item> event) {
  RED = ...
  event.getRegistry().registerAll(
  	new SpawnEggItem(...)
  );
}
public static void registerEntityTypes(Register<EntityType<?>> event) {
  event.getRegistry().registerAll(
  	RED,
    ...
  );

This is obvious psuedocode, but what you should do until that is addressed.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Now my code for this looks like this:

    @SubscribeEvent
    public static void registerEntitySpawnEggs(Register<Item>event)
    {
        RED = EntityType.Builder.create(RedEntity::new, EntityClassification.CREATURE).build(Reference.MOD_ID + ".red").setRegistryName("red");
        
        event.getRegistry().registerAll(AngryBirdsItems.red_egg = registerEntitySpawnEgg(RED, 0xdf0000, 0xdfbf9f, "red_egg"),
                                        AngryBirdsItems.chuck_egg = registerEntitySpawnEgg(CHUCK, 0xffff00, 0xffffff, "chuck_egg"),
                                        AngryBirdsItems.blues_egg = registerEntitySpawnEgg(BLUES, 0x007fff, 0xff0000, "blues_egg"),
                                        AngryBirdsItems.bomb_egg = registerEntitySpawnEgg(BOMB, 0x3f3f3f, 0x7f7f7f, "bomb_egg"),
                                        AngryBirdsItems.mathilda_egg = registerEntitySpawnEgg(MATHILDA, 0xffffff, 0xffbfbf, "mathilda_egg"),
                                        AngryBirdsItems.terence_egg = registerEntitySpawnEgg(TERENCE, 0xbf002f, 0xbf9f7f, "terence_egg"),
                                        AngryBirdsItems.silver_egg = registerEntitySpawnEgg(SILVER, 0xbfbfbf, 0xffffff, "silver_egg"),
                                        AngryBirdsItems.bubbles_egg = registerEntitySpawnEgg(BUBBLES, 0xff7f00, 0x000000, "bubbles_egg"),
                                        AngryBirdsItems.hal_egg = registerEntitySpawnEgg(HAL, 0x00bf00, 0xffffff, "hal_egg"),
                                        AngryBirdsItems.stella_egg = registerEntitySpawnEgg(STELLA, 0xffadb7, 0xffd7dc, "stella_egg"),
                                        AngryBirdsItems.poppy_egg = registerEntitySpawnEgg(POPPY, 0xffff3f, 0xffffbf, "poppy_egg"),
                                        AngryBirdsItems.willow_egg = registerEntitySpawnEgg(WILLOW, 0x3f9fff, 0x7fbfff, "willow_egg"),
                                        AngryBirdsItems.dahlia_egg = registerEntitySpawnEgg(DAHLIA, 0xbf7f3f, 0xffdfbf, "dahlia_egg"),
                                        AngryBirdsItems.luca_egg = registerEntitySpawnEgg(LUCA, 0x7fbfff, 0xffffbf, "luca_egg"),
                                        AngryBirdsItems.ice_bird_egg = registerEntitySpawnEgg(ICE_BIRD, 0x7fbfff, 0x007fff, "ice_bird_egg"));       
    }
    
    @SubscribeEvent
    public static void registerEntities(Register<EntityType<?>> event)
    {
      event.getRegistry().registerAll(RED);
      
      //event.getRegistry().registerAll(EntityType.Builder.<RedShotEntity>create(RedShotEntity::new, EntityClassification.MISC).size(0.5F, 0.5F));
    }
    
    public static Item registerEntitySpawnEgg(EntityType<?> type, int color1, int color2, String name)
    {
        SpawnEggItem item = new SpawnEggItem(type, color1, color2, new Item.Properties().group(AngryBirds.ANGRY_BIRDS));
        item.setRegistryName(name);
        return item;
    }

But it crashes, bevore the red loading bar is full.

I create the entity in the item register method and then register it in the registerEntity-method, like you say.

What did i understand wrong in your last code-template?

It says this errors:

Spoiler

[10:59:31.457] [Client thread/FATAL] [minecraft/Minecraft]: Reported exception thrown!
net.minecraft.crash.ReportedException: Rendering overlay

 

then

 

Caused by: java.lang.RuntimeException: One of more entry values did not copy to the correct id. Check log for details!

 

Each one followed by a stack of locations, wich are not inside my mod...

for the seccond part of the error, i cannot find out, wich entry value it means...

it didn´t write it into the lines below and i also cannot find it in the logs.

Edited by Drachenbauer
Link to comment
Share on other sites

OK crash fixed:

Now i have placed theese registry-events in my main-class, where i already had some of theese events in a sub-class,

So all registry events are located together at one spot..

And now i can spawn this entity again with the egg.

And so i keep my old entity-registering event, because it still needs only the all-capitals-entity-type-names, like i already use them there.

 

Another question:

How can i register my munitions this way?

If i try to make theese lines exactly the same:

RED_SHOT = EntityType.Builder.<RedShotEntity>create(RedShotEntity::new, EntityClassification.MISC).size(0.5F, 0.5F);

It says, that the constructor of my munition mismatches...

But one of it´s three constructors is similar to the ones of the other entities.

Edited by Drachenbauer
Link to comment
Share on other sites

Since i made my SlingshotItem extend the BowItem, it does not load it´s extra item-models for it´s pulling-animation any more.

What must i do to get this to work again?

 

Edit: finally fixed this:

I noticed, that the json for the item-model of the bow has an area "overrides", that leads to the pulling-states.

This was removed in the matching file of my slingshot.

it seams like i deleted it while modifying the file, and didnt notice that.

Now i readded it and the pulling-animation works.

 

Now i think, that my munitions don´t start flying, must be causef by the way, i registered them or by the renderer, i created for them.

For the renderer, i created a renderer-class, that extends EntityRender, like LivingRenderer does, but at the place, there the LivingRenderer has "LivingEntity" in it´s class-header, i used just the basic Entity-class.

Then i copyed all content of the Living-Renderer into my renderer and removed all about living (i think so).

Then the renderers for the different birds extend this one.

AngryBirdsMod Github

Search here for "AbstractBirdShotRenderer" to find my renderer class.

Can anyone pleas check it, if the error is located there?

Edited by Drachenbauer
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

    • 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;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
    • Remove Instant Massive Structures Mod from your server     Add new crash-reports with sites like https://paste.ee/  
    • Update your drivers: https://www.amd.com/en/support/graphics/amd-radeon-r9-series/amd-radeon-r9-200-series/amd-radeon-r9-280x
  • Topics

×
×
  • Create New...

Important Information

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