Hello, I have been trying to get achievements to work but I just can't seem to get them to trigger.
I have registered them and they are showing up in the achievement page I have created and registered, so my suspicion is that the problem lies in my event handler.
My event handler class looks like this:
public class AchievementEventHandler
{
@Mod.EventHandler
public void onEditorOpened(AchievementEvent.EditorOpenedEvent event)
{
event.player.addStat(CompilerMod.achievementOpenEditor, 1);
}
@Mod.EventHandler
public void onEditorSaved(AchievementEvent.EditorSavedEvent event)
{
event.player.addStat(CompilerMod.achievementSaveFirst, 1);
//If compiler errors
event.player.addStat(CompilerMod.achievementError, 1);
}
@Mod.EventHandler
public void onRobotChat(AchievementEvent.RobotChatEvent event)
{
event.player.addStat(CompilerMod.achievementRobotChat, 1);
}
@Mod.EventHandler
public void onRobotBroadcast(AchievementEvent.RobotBroadcastEvent event)
{
event.player.addStat(CompilerMod.achievementBroadcastMessage, 1);
//If channel has listeners
event.player.addStat(CompilerMod.achievementCoodination, 1);
}
@Mod.EventHandler
public void onRobotAction(AchievementEvent.RobotActionEvent event)
{
if(event.robotAction.equals("explode"))
event.player.addStat(CompilerMod.achievementRobotExplode, 1);
if(event.robotAction.equals("attack"))
event.player.addStat(CompilerMod.achievementRobotAttackOther, 1);
}
@Mod.EventHandler
public void onRobotPlaceBlock(AchievementEvent.RobotPlaceBlockEvent event)
{
//Check how blocks are placed
event.player.addStat(CompilerMod.achievementBuildHouse, 1);
}
}
And the events are set up as follows:
public class AchievementEvent extends Event
{
public final EntityPlayer player;
private AchievementEvent(EntityPlayer player){ this.player = player; }
public static class EditorOpenedEvent extends AchievementEvent
{
public EditorOpenedEvent(EntityPlayer player)
{
super(player);
}
}
public static class EditorSavedEvent extends AchievementEvent
{
public EditorSavedEvent(EntityPlayer player)
{
super(player);
}
}
public static class RobotChatEvent extends AchievementEvent
{
public String chatMessage;
public RobotChatEvent(EntityPlayer owner, String chatMessage)
{
super(owner);
this.chatMessage = chatMessage;
}
}
public static class RobotBroadcastEvent extends AchievementEvent
{
public String message;
public String channel;
public RobotBroadcastEvent(EntityPlayer owner, String message, String channel)
{
super(owner);
this.message = message;
this.channel = channel;
}
}
public static class RobotActionEvent extends AchievementEvent
{
//This could be changed to an enum
public String robotAction;
public RobotActionEvent(EntityPlayer owner, String robotAction)
{
super(owner);
this.robotAction = robotAction;
}
}
public static class RobotPlaceBlockEvent extends AchievementEvent
{
//This could be changed to an enum
public Block block;
public RobotPlaceBlockEvent(EntityPlayer owner, Block block)
{
super(owner);
this.block = block;
}
}
}
But when I attempt to raise an event, nothing happens.
Here is an example of a trigger I tried to set up:
public GuiProgramEditor()
{
super();
//TEMP ACHIEVEMENT TEST
MinecraftForge.EVENT_BUS.post(new AchievementEvent.EditorOpenedEvent(Minecraft.getMinecraft().player));
}
Which is located in a GUI constructor.
And finally, the registrations
@Mod.EventHandler
public void init(FMLInitializationEvent event)
{
Proxy.registerModels();
achievementOpenEditor = new Achievement("", "Opened editor", 0, 0, Items.BOOK, null);
achievementSaveFirst = new Achievement("", "Saved first script", 2, 0, Items.ITEM_FRAME, achievementOpenEditor);
achievementRobotChat = new Achievement("", "First words", 2, 2, Items.GHAST_TEAR, achievementSaveFirst);
achievementRobotExplode = new Achievement("", "Boom", 4,4, Items.TNT_MINECART, achievementSaveFirst).setSpecial();
achievementRobotAttackOther = new Achievement("", "Ouch", 2,4, Items.DIAMOND_SWORD, achievementSaveFirst);
achievementBroadcastMessage = new Achievement("", "Robot phone home", 3, 0, Items.WRITABLE_BOOK, achievementSaveFirst);
achievementCoodination = new Achievement("", "Hello? This is home", 3, 2, Items.WRITTEN_BOOK, achievementBroadcastMessage);
achievementBuildHouse = new Achievement("", "Nice house", 4,4, Items.COMMAND_BLOCK_MINECART, achievementSaveFirst);
achievementError = new Achievement("", "ERROR", 5,5, Items.BOOK, achievementSaveFirst).setSpecial();
educodeAchievementPage = new AchievementPage("EduCode",
achievementOpenEditor,
achievementSaveFirst,
achievementRobotChat,
achievementRobotExplode,
achievementRobotAttackOther,
achievementBroadcastMessage,
achievementCoodination,
achievementBuildHouse,
achievementError);
AchievementPage.registerAchievementPage(educodeAchievementPage);
}
Can someone point out to me what I am doing wrong? I have followed countless tutorials about the achievement system, but none of them seem to touch the subject of custom events.
And as a last note, where do I need to put my en_US.lang file, because none of the directories I've tried yet has worked for me
Thanks in advance
EDIT:
This is on Forge 13.20.0.2228 for Minecraft 1.11.2