Jump to content

Recommended Posts

Posted

A year ago, in another thread, D7 posted this not quite compilation-ready suggestion:

 

Basically instead of having a field of type EntityPlayer in your class you have a WeakReference<EntityPlayer> and a UUID like this:

private final WeakReference<EntityPlayer> ownerEntity = new WeakReference<EntityPlayer>();
private UUID ownerID;

public void setOwner(EntityPlayer owner) {
    this.ownerID = owner.getUniqueID();
    this.ownerEntity.set(owner);
}

public EntityPlayer getOwnerEntity() {
    EntityPlayer owner = ownerEntity.get();
    if (owner == null || owner.isDead) {
        owner = lookupOwner();
    }
    return owner;
}

public UUID getOwnerID() {
    return ownerID;
}

private EntityPlayer lookupOwner() {
    if (ownerID == null) {
        return null;
    }
    List<EntityPlayerMP> allPlayers = MinecraftServer.getServer().getConfigurationManager().playerEntityList;
    for (EntityPlayerMP player : allPlayers) {
        if (player.getUniqueID().equals(ownerID)) {
            ownerEntity.set(player);
            return player;
        }
    }
    return player;
}

And then whenever you need the player, use getOwnerEntity. It will return null if the player is not online. And save the UUID to NBT of course.

 

This smacks of a reusable interface (e.g. "IWeakOwnerID"). Does such an interface exist in Forge that my class could implement? Or am I imagining things; should I copy-paste and tailor the example to suit the mod I am about to make?

 

If the answer is "not yet", then I'll make the attempt to first generalize an interface and then implement it. In that case, would anyone be interested in seeing the interface's code if I succeed?

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Posted

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Weak Reference itself is a generic, but the example of code using it looks like an opportunity to code something reusable.

 

I learned something about interfaces. I've coded classes implementing them, but I've never designed one. I am now bummed that I can't put instance methods into one. This leaves me wishing that Java would allow multiple inheritance.

 

Alas, the code to manage a weak reference to a player/owner must either be replicated where used or else embodied in a class. I'm going to set it aside until my mod (a pressure plate that only triggers when stepped on by the player who placed it) is ready. Then I'll have a better idea how and where it might fit. Maybe then I'll try to design something that can be reused.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

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.