Jump to content

Recommended Posts

Posted

This is probably a bit odd of me to ask, but how would I change the display name of a player after the login to single player has completed? I try posting the NameFormat event to the EVENT_BUS but it always returns false. It doesn't post... Is there a proper way to do that? Any help is much appreciated because i've been researching and testing this for months.

Posted

This is probably a bit odd of me to ask, but how would I change the display name of a player after the login to single player has completed? I try posting the NameFormat event to the EVENT_BUS but it always returns false. It doesn't post... Is there a proper way to do that? Any help is much appreciated because i've been researching and testing this for months.

Posted

public void onNameFormat(NameFormat event)
{
	event.setDisplayname("something");
}

Call this to re-cache name. (It will call event for name).

EntityPlayer#refreshDisplayName()

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted

public void onNameFormat(NameFormat event)
{
	event.setDisplayname("something");
}

Call this to re-cache name. (It will call event for name).

EntityPlayer#refreshDisplayName()

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted

1. Wtf with your registering? Use MinecraftForge.EVENT_BUS only.

2. Is event called?

3. Does it reach you logging message?

4. Since you want client only mod (it seems) - use clientSideOnly = true in @Mod.

5. @SideOnly doesn't need to be everywhere when yo uare making Client side mod (read point 4). Also - you can apply it to classes, so no need to mark all methods in class.

6. I'd move registering events to preInit (i think it has no effect, I don't remember).

7. PlayerLoggedInEvent is server ONLY (server thread) event, it won't be called when e.g loggin onto dedicated server (but it will be called on SP - integrated one).

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted

1. Wtf with your registering? Use MinecraftForge.EVENT_BUS only.

2. Is event called?

3. Does it reach you logging message?

4. Since you want client only mod (it seems) - use clientSideOnly = true in @Mod.

5. @SideOnly doesn't need to be everywhere when yo uare making Client side mod (read point 4). Also - you can apply it to classes, so no need to mark all methods in class.

6. I'd move registering events to preInit (i think it has no effect, I don't remember).

7. PlayerLoggedInEvent is server ONLY (server thread) event, it won't be called when e.g loggin onto dedicated server (but it will be called on SP - integrated one).

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted

1. idk... just idk.. old tuts

2. player#refreshDisplayName is being called.. thats why I added the check for null passed parentscreens to prevent crashing

3. Yes, it logs that it changed the username yet nothing happens

4. Fixed

5. Fixed

 

I was just playing with different things to the playerloggedinevent isn't being used but thanx

 

Hopefully this info helps. Here is the log:

 

  Reveal hidden contents

 

Posted

1. idk... just idk.. old tuts

2. player#refreshDisplayName is being called.. thats why I added the check for null passed parentscreens to prevent crashing

3. Yes, it logs that it changed the username yet nothing happens

4. Fixed

5. Fixed

 

I was just playing with different things to the playerloggedinevent isn't being used but thanx

 

Hopefully this info helps. Here is the log:

 

  Reveal hidden contents

 

Posted

Going through all classes:

 

1. public static CommonProxy proxy;

Is not needed when mod is one-sided.

 

2. PlayerEvent.PlayerLoggedInEvent

Is server ONLY and should NOT be used in client only mods.

Doing so will result in:

* Firing on SP (intergrated server/lan)

* NOT firing on MP (dedicated server/lan)

 

General rule is to write either common or sided mods/code - never do both (in different words: mods should be universal, for client mods - acting same on both SP and MP, unless ofc - there is some special design in play).

 

3. Now big question:

* You say that prints (logs) are reached and they print expected name (I assume).

* Then you say it doesn't work.

 

Question is - HOW do you know it doesn't work?

 

My guess it does and you are checking it by typing in chat - which, spoiler alert - will not work as you would want it to.

 

When chat message is written in chat (client) and then sent - server receives it and converts it to "[playerWhoSentIt] + chatMessageReceived" which is then (in this format) sent to all other clients.

 

Logically - if you change the name on CLIENT only, the server one stays intact resulting in "playerWhoSentIt" being non-changed server one.

 

What you are doing there (event you do) only sets display name of client players, which gives you proper return when asking directly using that method. So for example - it will be correct when rendering name tag (should be). But anything that goes through server will most likely not.

 

As to how to deal with chat messages - use chat events to replace string with your own - ClientChatReceivedEvent.

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted

Oh yeah.. those i've been using because I started with a template for my other universal mod. As for the loggedInEvent.. yeah i'm going to remove that. It's just there...

 

yes it was logging that it changed but when I'd try putting in chat messages it wouldn't change that part. At one time I thought it was but maybe I was dreaming... That makes sense though. I will have to use the chat listeners then.

Posted

Well, this is purely Java question and Regex is something I didn't use in a long time, so wait for sm1 else to show up (you probably messed up matcher/pattern).

 

Point of interest (this is totally random/unnecessary response):

 

  Reveal hidden contents

 

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted

1. Read the javadoc for Matcher#find:

Attempts to find the next subsequence of the input sequence that matches the pattern. 

This method starts at the beginning of this matcher's region, or, if a previous invocation of the method was successful and the matcher has not since been reset, at the first character not matched by the previous match. 

If the match succeeds then more information can be obtained via the start, end, and group methods. 

So it gives next match, and since it does not have two match, the second find gives false.

2. Instead of Matcher#group(int), Matcher#group() will be fine.

3. It's better to store the pattern in a field. (It is common use of a Pattern)

EDIT) 4. Prefix/Suffix of the regex /.../g is generally not needed.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

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.