Hi there!
I try to explain my Problem in short words:
I'm playing around with KeyBindings. I took an old Item an added an "onUpdate(bla bla)". I also created the KeyHandler to get the Information if the specific Key is pressed. While playing around, I made the Key working as an toggle. This toggle should switch between Survival and Creative. Long story short: If I press the key with the item in my hand, the toggle works as it should. I can see this, cause I have a player.addChatMessage() in the onUpdate, too. The problem now is, that the gamemode doesn't change everytime I press the key (the ChatMessage appears!). I think it changes every 5 to 100 time I press the key.
If someone please could watch the code and tell me what the fault is
Thanks alot!
Tankwart
The part in the IconFile:
boolean gameTypeCreative = false;
boolean gameTypeSurvival = true;
public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5)
{
EntityPlayer player = (EntityPlayer)par3Entity;
if(KeyBindingHandler.keyPressed & par1ItemStack==player.getHeldItem())
{
if(gameTypeSurvival==true) {
player.setGameType(EnumGameType.CREATIVE);
player.addChatMessage("Creative an! gTC=" + gameTypeCreative + " / gTS=" + gameTypeSurvival);
gameTypeSurvival = false;
gameTypeCreative = true;
} else {
player.setGameType(EnumGameType.SURVIVAL);
player.addChatMessage("Survival an! gTC=" + gameTypeCreative + " / gTS=" + gameTypeSurvival);
gameTypeSurvival = true;
gameTypeCreative = false;
}
}
}
And the KeyBindingHandler:
package ...
public class KeyBindingHandler extends KeyHandler // implements ITickHandler
{
private EnumSet tickTypes = EnumSet.of(TickType.CLIENT); // With PLAYER it's the same issue.
public static boolean keyPressed = false;
public static boolean keyReleased = true;
public KeyBindingHandler(KeyBinding[] keyBindings, boolean[] repeatings)
{
super(keyBindings, repeatings);
}
@Override
public String getLabel()
{
return "CustomKey";
}
@Override
public void keyDown(EnumSet<TickType> types, KeyBinding kb, boolean tickEnd, boolean isRepeat)
{
if (keyReleased==true) {
keyPressed = true;
//System.out.println("pressed");
}
else {
keyPressed=false;
}
keyReleased = false;
}
@Override
public void keyUp(EnumSet<TickType> types, KeyBinding kb, boolean tickEnd)
{
if (keyReleased==false){
keyPressed = false;
keyReleased = true;
//System.out.println("released");
}
}
@Override
public EnumSet<TickType> ticks()
{
return tickTypes;
}
}