Jump to content

[1.10.2] Getting Player Entity from Capability for Update Message


Recommended Posts

Posted

So I picked up modding a few days ago and thanks to the modding tutorials by _bedrock_miner_, shadowfacts.net and jabelar and thank to diesieben07's and Choonster's amazing effort to answer questions in this forum, I already came quite far. However now I'm stuck.

 

I started out with a simple currency mod, for which I added a "Money" Capability, implementing "IMoney" and a "UpdateMoneyMessage" Message.

 

Code here: http://pastebin.com/hu7w6kVi
 

So as you can see, whenever I call "addMoney" or "setMoney", I also want to call "onMoneyUpdate", so I can dispatch a "UpdateMoneyMessage" to the player, to inform him about the change. However from the "Money" class, I have no access to the parent Entity owning this capability. How should I solve this problem?. (see line 20 in the paste for the part where I'm stuck).

Posted

Store the player in a field of the Money class.

  • Like 1

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Okay, straight forward enough. Wasn't quite sure if this was considered "good practice".

 

In any case, how would I go about "injecting" the owning Entity into the capability then. AFAIK, the "Money" Capability is instantiated by "getDefaultInstance" in the capability provider, however this method takes no arguments. Is it even possible for the capability to have a non-default constructor?

 

The only solution that comes to my mind right now is to inject the owning Entity after construction of the Capability instance in the "onAttachCapabilitiesEvent" handler.

 

More code: http://pastebin.com/JiGSiAZT

Posted (edited)

Now I am even more confused.

 

Ok, let me just go over things, so you guys can make sure I understand this stuff correctly.

 

So I have the interface IMoney with an implementation Money, which I want to be the default implementation. I also have aMoneyProvider and a MoneyStorage (lets leave that one aside for the moment) and a event handler running in the CommonProxy domain. In the event handler, I have a static ResourceLocation, indicating the default implementation of the money capability. I pass this resource to the addCapability function in the onAttachCapabilitiesEvent handler, together with a new instance of MoneyProvider. So far so good.

 

Now if I understand correctly, an instance of Capability<Money> is instantiated by the capability framework using the passed ResourceLocation and injected into theCapabilityInject@ annoated field MONEY_CAPABILITY. The MoneyProvider then uses this injected Capability<Money> object to get a reference to a new instance of the default implementation Money (as specified in the original ResourceLocation) and uses this one as instance here:

    private IMoney instance = MONEY_CAPABILITY.getDefaultInstance();

. So ultimately the Money instance is constructed by the Capability<Money> object, so I have no access to the constructor call of Money.

 

All correct so far? So how would I pass the owning Entity to Money? And could you possibly elaborate the purpose of the Provider class? is it used used to link everything together?

Edited by Xaser
typos
Posted

Awesome, got it, thank you. so the entity has to pass through the provider to the actual capability.

 

This would still leave the question whether this can be achieved with a defaultImplementation at all, however for my needs I am fine with not using defaultImplementation. Thanks!

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.