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

So in my mod I have a method being called. This method takes the instance of EntityPlayer and also a class (which extends my other class) and adds it to a hashmap.

 

Then, in a method which is executed every tick, it determines whether the instance of the player is in the hashmap, and if it is, gets the class from the hashmap and executed the handlePlayer(EntityPlayer, Minecraft) from it. From there the handlePlayer method will handle certain custom capabilities which the player can do.

 

I have an in-game command which I execute that is supposed to call the method which puts the player and class into the hashmap. I put several println(')'s into several places into the code to determine where the code is faulting. I ultimately determined the code faults on the method that detects the player in the hashmap and executes handlePlayer. I determined the onTickInGame method is in fact working, it's just the getting of the class from the hashmap and the execution of the handlePlayer method which is not.

heu, not to be a dick but HashMap have been working for years, can we see your code you probably just forgot something :)

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

  • Author

Yea I probably did.

 

package tk.cephlab.supernatural;

import java.util.HashMap;
import java.util.logging.Level;

import org.lwjgl.input.Keyboard;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;

/**
* Custom Player Handler Class
* 
* This class is used for registering any custom handles for the player who
* currently is supernatural.
* 
* TL;DR: Pretty much it adds the features of a supernatural to the player when
* they are supernatural.
* 
* @author XCephrusX
*
*/
public class SupernaturalPlayerHandler
{
public HashMap<SupernaturalPlayerHandler, String> superMap = new HashMap<SupernaturalPlayerHandler, String>();
public HashMap<EntityPlayer, SupernaturalPlayerHandler> playerToSupernatural = new HashMap<EntityPlayer, SupernaturalPlayerHandler>();
public static SupernaturalPlayerHandler playerHandler;

public static final SupernaturalPlayerHandlerVampire supernaturalVampire = new SupernaturalPlayerHandlerVampire();

public SupernaturalPlayerHandler(String name)
{
	this.superMap.put(this, name);
	playerHandler = this;
}

/**
 * DO NOT USE THIS CONSTRUCTOR! IT IS ONLY USED FOR INITIALIZATION!
 */
public SupernaturalPlayerHandler()
{
	playerHandler = this;
}

public static SupernaturalPlayerHandler instance()
{
	if(playerHandler != null)
	{
		return playerHandler;
	}
	else return null;
}

/**
 * 
 * Converts specified player into supernatural handler specified.
 * Requires EntityPlayer class, and SupernaturalPlayerHandler.
 * 
 * @param player
 * @param playerHandler
 */
public void convertPlayerToSupernatural(EntityPlayer player, SupernaturalPlayerHandler playerHandler)
{
	player.addChatMessage("Conversion invoked");
	if(!this.playerToSupernatural.containsKey(player))
	{
		this.playerToSupernatural.put(player, playerHandler);
		player.addChatMessage("Player should be converted.");
	}
	else
	{
		System.out.println(Level.FINER + "Player is already supernatural, cannot add new supernatural tag to this player.");
	}
}

public boolean getIsPlayerSupernatural(EntityPlayer player)
{
	return this.playerToSupernatural.containsKey(player);
}

public boolean getIsPlayerSupernatural(EntityPlayer player, SupernaturalPlayerHandler handler)
{
	if(this.playerToSupernatural.containsKey(player))
	{
		if(this.playerToSupernatural.get(player) == handler)
		{
			return true;
		}
	}
	return false;
}

public void onTick(Minecraft minecraft)
{
	EntityPlayer player = minecraft.thePlayer;

	if(this.playerToSupernatural.get(player) !=null)
	{
		this.playerToSupernatural.get(player).handlePlayer(player, minecraft);
	}
}

public void handlePlayer(EntityPlayer player, Minecraft minecraft)
{
	if(Keyboard.isKeyDown(Keyboard.KEY_ADD) && this.getIsPlayerSupernatural(player))
	{
		player.addChatMessage(player.username + " is a " + this.superMap.get(this.playerToSupernatural.get(player)) + ".");
	}
	else if(Keyboard.isKeyDown(Keyboard.KEY_ADD) && !this.getIsPlayerSupernatural(player))
	{
		player.addChatMessage(player.username + "is a human.");
	}
}

public static void initializePlayerHandler()
{
	SupernaturalPlayerHandler init = new SupernaturalPlayerHandler();
}
}

Man, you couldn't use a Map<EntityPlayer,String> directly ?

You are holding SupernaturalPlayerHandler objects all over the place...

 

By the way, containsKey(obj) is known to behave differently depending on equals(obj) and hashcode implementations in the object.

Considering you are dealing with player objects, using get and handling null cases would be easier.

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.