Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hey all,

 

Im having some issues in regards to spawning mobs using the data available ingame.

 

My issue is that I have been using:

 

Entity entity = EntityList.createEntityByName(this.getEntityNameToSpawn(), this.getSpawnerWorld());

 

To spawn mobs, im killing said mobs and storing their info in an item and passing the name of the mob to it, the issue is not all mobs return an entity when passing the name thats available ingame. As an example I know all the Twilight Forest mobs require "TwlightForest." in front of what "mobentity.getEntityName()" will return. So I get "Wild Boar" ingame, but it wants "TwilightForest.Wild Boar". I dont want to write internal rules for each custom mod that has its own mobs, id rather this was kept as dynamic as possible.

 

Ive tried creating from IDs, from NBT, nothing I do seems to work.

 

The only thing I can think might lead me to a solution is to use mobentity.getClass() in some way but my brain refuses to come up with the solution.

 

EntityList doesnt seem to have the required method I need.

 

Can someone here come up with a way of achieving this, or point out my stupidity (its probably this, its been a long night...)

  • Author

yep it returns "Wild Boar"as well. Another example is thaumcraft, Wisps work fine as ingame the name is "wisp" and they are I assume registered as "Wisp", however ingame "Angry Zombie" does not equal "Brainy Zombie" as its registered.

  • Author

EntityRegistry doesnt give me any methods that seems useful in this regard. Looked in .instance() as well, the only thing that looks like a possibility is:

 

EntityRegistry.instance().lookupModSpawn

 

but theres 2 versions of it,  that I cant bend my head around what they need, ill look into these, but any other help is appreciated.

 

Thanks for your help so far, I hate getting stuck on things like this, you would think there would be something on the mob to track back...

Hi

 

I have to admit I'm a bit confused now about how you're using this.

I had assumed:

(1) when you hit a mob with your item, it copies the "name" (or other unique identifier) of the mob into the item.\

(2) later, when you "use" the item, it spawns the mob again using the "name".

 

If that's the case, I don't really understand why you couldn't use the "name" that you get from EntityList to create the mob again (using EntityList).

 

Likewise, lookupModSpawn(mobEntity, someDummyBoolean) will give you an EntityRegistration for that entity, which should give you all the info you need to spawn it?

 

Perhaps if you show us how you're trying to spawn your entity?

 

-TGG

  • Author

ok, some detail required.

 

Entities in game drop a custom xp orb type entity when killed, this entity holds the unique identifier which is written on death of the entity (using a forge living death event to write to NBT of the orb entity, ive tried entityID,and enitityName). When you collect these orbs they "fill" an item on your hotbar and transfer the identifier to it, you then (once the item is full) right click it on a block (a custom mob spawner) the mob spawner uses pretty similar code to vanilla to spawn the entity.

 

The key part is the transfer of the identifier to the mob spawning block:

 

spawner.getSpawnerLogic().setMobName(mobtospawn);

 

This sets a String in the mob spawners logic, that is returned in getEntityNameToSpawn() below.

 

So if I were to kill a Thaumcraft "Angry Zombie" thats what would be passed to the setMobName. The spawner block then uses the code i put above:

 

Entity entity = EntityList.createEntityByName(this.getEntityNameToSpawn(), this.getSpawnerWorld());

 

to create the entity and spawn it (once I have the entity here the rest of my code is fine), Everything works perfectly if the mob name and the registration name are the same. I even have 2 custom mob entities (zombie and skeleton with burn in sun disabled) that I can call by passing their entity name, they work fine as their name is also the name I used when registering them.

 

Im looking for a sure fire way of getting the right entity whether its vanilla or custom mobs.

 

So it seems I have 2 options, either I change what im passing as the identifier or I change how I lookup the mob entity. Im pretty sure this is gonna be a really simple thing in the end, I just cannot find the 1 piece of info im missing.

Hi

 

OK, so if I understand correctly, the problem is that the unique identifier you're reading (in the living death event) doesn't match the unique identifier you need for your mob spawner.

 

Just to be 100% clear -

in living death you have used

string myUniqueName = EntityList.getEntityString(livingDeathEvent.source);

 

and in your spawner you have tried

Entity entity = EntityList.createEntityByName(myUniqueName, this.getSpawnerWorld());

 

But the names don't match-?

 

I don't understand that at all, EntityList should map those symmetrically as far as I can tell.

 

-TGG

  • Author

God Dammit, that was my problem, Why the hell didnt I think to use the same bloody method at both ends. I was using mobentity.getEntityName() on the death, which is OBVIOUSLY not the same as the one in EntityList, I said it would end up being something stupidly simple, hate being right when I say that.

 

Thank you muchly and apologies for wasting your time on something that should have been entirely straight forward. Its almost 3am here think I need some sleep.

 

Oh and if it wasnt obvious its working beautifully.

 

*goes to bed mumbling about how daft he is*

Don't sweat it, I once wasted days trying to debug a very similar problem, glad I could help shorten it a bit :-)

 

3am coding is awesome, I've done some of my most incredible coding between 12am - 6 am, nothing quite like getting "into the zone" :-)

 

-TGG

 

 

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.