Jump to content

Recommended Posts

Posted

if (false) return;

There are two possible places for this, which are you referring to?

Here

                if (ChatListener.isAFK = false) {
	    ChatListener.isAFK = true;
	    icommandsender.addChatMessage(new ChatComponentText("You are now AFK!"));
	    return;
                }

If this doesn't work it is not being called.

I use that and it only comes up with the "Hello" message, not the "You are now AFK!".

  • Replies 50
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted

 

- Why are you still on 1.8? Update.

I'm more familiar with 1.8 and my goal is to create a special mod which is based around Hypixel, which supports 1.8. 1.9 and 1.10 is new territory for me.

10/10 IGN will never update again!

 

EDIT: I felt like adding some humor to this thead... So I did.

Posted

if (false) return;

There are two possible places for this, which are you referring to?

Here

                if (ChatListener.isAFK = false) {
	    ChatListener.isAFK = true;
	    icommandsender.addChatMessage(new ChatComponentText("You are now AFK!"));
	    return;
                }

If this doesn't work it is not being called.

I use that and it only comes up with the "Hello" message, not the "You are now AFK!".

Then it is never making it into the if statement, or it can't send the message try removing the help message.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted

if (false) return;

There are two possible places for this, which are you referring to?

Here

                if (ChatListener.isAFK = false) {
	    ChatListener.isAFK = true;
	    icommandsender.addChatMessage(new ChatComponentText("You are now AFK!"));
	    return;
                }

If this doesn't work it is not being called.

I use that and it only comes up with the "Hello" message, not the "You are now AFK!".

Then it is never making it into the if statement, or it can't send the message try removing the help message.

Removed the help message and this time it came up with nothing.  I don't really understand how the code you sent me is going to work, what if isAfk = true? Then it does nothing and doesn't set it to false so it just doesn't work.

 

Was I supposed to use two of those if statements? <-- Will try

 

Edit: Having two statements returned "No longer afk" constantly. I feel like it isn't setting the variable to true.

Posted

In your MainMod class in the @Mod annotation set clientSideOnly = true not sure if that will fix it, but you should do that anyways.

Didn't help, but if I set the isAfk variable to true beforehand the /r function works, upon doing it again it says "No longer afk" constantly and doesnt work.

Posted

@EventHandler

    public void preInit(FMLPreInitializationEvent event)

    {

        // Stub Method

    MinecraftForge.EVENT_BUS.register(new ChatListener());

   

    }

What do you mean by "// Stub Method"?

 

@EventHandler

    public void postInit(FMLPostInitializationEvent event)

    {

        // Stub Method

    }

Why is this here? It does precisely nothing.

 

public static boolean isAFK = false;
Pretty ugly to just have it in a global variable somewhere, but I suppose this will work.

 

@Override

public int compareTo(Object o) {

// TODO Auto-generated method stub

return 0;

}

Why is this still here? How many times do I need to say this?

Also why do all your methods still have the stupid comment from Eclipse inside them?!

 

if (ChatListener.isAFK = false)
This is not how you check a boolean variable. This if statement will never run. = means assign, not compare. You want ==. Please learn basic Java.

 

@Override

public boolean isUsernameIndex(String[] arg0, int arg1) {

// TODO Auto-generated method stub

return false;

}}

Same as above, why is this still here?

 

1. It's something generated automatically by eclipse.

 

2.It may do in the future, all of the tutorials I have seen recommend keeping those for the future.

 

3. Anyway I could make it neater? It was a post I saw on stack overflow.

 

4. I thought anything that returns false or 0 was important, but anything which returned null wasn't.

 

5. I'm sorry, it was a mistake I won't make again.

 

6. 4

 

And how do I add a reason to it? Another global string called reason which I modify in the SampleCommand class?

Posted

It's something generated automatically by eclipse.
And why is it still there?

 

It may do in the future, all of the tutorials I have seen recommend keeping those for the future.

...

 

Anyway I could make it neater? It was a post I saw on stack overflow.
Well, static state is always bad, because it hurts maintainability, etc. Ideally you'd want this in like a capability on the player, but that is overkill for now.

 

I thought anything that returns false or 0 was important, but anything which returned null wasn't.
What... that is not how Java works.

 

And how do I add a reason to it? Another global string called reason which I modify in the SampleCommand class?

I guess you could do that, yes.

But as you can see this is already getting kinda messy ;)

 

Would this segment of code work?

 

if (args.length == 1){
		ChatListener.reason = args[0].toString();
		ChatListener.isAFK = true;

Posted

Not sure why the

toString

call is there, but yes, that would set the two fields...

The reason isn't working for some reason.

 

New Code:

 

Main:

 

package com.testmod;

import com.testmod.SampleCommand;

import net.minecraftforge.client.ClientCommandHandler;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;

@Mod(modid="testmod", name="Test Mod", version="1.0", clientSideOnly = true)

public class TutorialMain
{

    // The instance of your mod that Forge uses, in my case tutorial.
    @Instance("testmod")
    public static TutorialMain instance;
    

    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
        // Stub Method
    	MinecraftForge.EVENT_BUS.register(new ChatListener());
    	
    }

    @EventHandler
    public void init(FMLInitializationEvent event)
    {
    	ClientCommandHandler.instance.registerCommand(new SampleCommand());
    	
    	

    }

    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
        // Stub Method
    }
    

   

}

 

SampleCommand:

 

package com.testmod;

import java.util.ArrayList;
import java.util.List;
import eu.copybara.barra.util.*;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;

public class SampleCommand extends CommandBase {

@Override
public boolean canCommandSenderUse(ICommandSender icommandsender) {
	// TODO Auto-generated method stub
	return true;
}
@Override
public void execute(ICommandSender icommandsender, String[] args) throws CommandException {
	// TODO Auto-generated method stub
	if (ChatListener.isAFK == false) {
	    ChatListener.isAFK = true;
	    icommandsender.addChatMessage(new ChatComponentText("You are now AFK!"));
	    return;
    }
	if (ChatListener.isAFK == true) {
	    ChatListener.isAFK = false;
	    icommandsender.addChatMessage(new ChatComponentText("You are no longer AFK!"));
	    return;
    }
	if (args.length == 1){
		ChatListener.reason = args[0].toString();
		ChatListener.isAFK = true;
	}

}
@Override
public String getCommandUsage(ICommandSender icommandsender) {
	// TODO Auto-generated method stub
	return "afk <reason>";
}

@Override
public String getName() {
	// TODO Auto-generated method stub
	return "afk";
}
@Override
public boolean isUsernameIndex(String[] arg0, int arg1) {
	// TODO Auto-generated method stub
	return false;
}}

 

 

 

ChatListener:

 

package com.testmod;

import net.minecraft.client.Minecraft;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class ChatListener {
public static boolean isAFK = false;
public static String reason = "";

@SubscribeEvent
public void onChat(ClientChatReceivedEvent event) {
	String message = event.message.getUnformattedText();
	if (message.contains("From") && isAFK) {
		Minecraft.getMinecraft().thePlayer.sendChatMessage("/r I am currently AFK. Reason: " + ChatListener.reason);
	}




	}
}



 

If I do /afk <reason> it just comes up with whatever I had it preset to in the code, which in this case is "".

Posted

If I do /afk <reason> it just comes up with whatever I had it preset to in the code, which in this case is "".

Because args.length is equal to the number of arguments aka "Hello my name is Anime" is 5 not 1.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted

if (status == true)
do stuff;
if (status == false)
do otherStuff;

 

*triggered*

 

if (status)
do stuff;
else
do otherStuff;

 

^ Hint: 2nd is better?

 

As to "args problem" - build your string with StringBuilder or just with:

String res = "";
for (String s : strings)
res += s + " ";

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

Posted

if (status == true)
do stuff;
if (status == false)
do otherStuff;

 

*triggered*

 

if (status)
do stuff;
else
do otherStuff;

 

^ Hint: 2nd is better?

 

As to "args problem" - build your string with StringBuilder or just with:

String res = "";
for (String s : strings)
res += s + " ";

How do I incorporate that bottom thing?

 

I've got to this stage:

 

		String res = ""; {

		for (String s : args) {
		res += s + " ";
		}}

Posted

As to "args problem" - build your string with StringBuilder or just with

Simpler imho:

Joiner.on("").join(strings);

 

Or some Java 8 magic:

Stream.of(strings).join(Collectors.joining());

 

How do I incorporate that bottom thing? It says "strings cannot be resolved to a variable".

Jesus... you are not supposed to just copy the code. You are supposed to understand it and adapt it to your situation.

 

I understand now, just threw me off with the Strings thing, didn't realise I needed to replace it with args. I would have written it for(String s: (strings)), that would have made more sense to me because it was in brackets.

 

Either way I understand now, still don't know how to incorporate it. Be nice if you could just send me a corrected version.

Posted

Correct version? The version Ernio posted was fine.

You dump the array of strings into one String. It's really not hard. If you do not understand basic programming like this you need to stop modding and learn programming first.

Why is it so difficult to convey things to you -_-. I meant the corrected version of MY code. I have no idea how to put that into my code. It would save a lot of time if I could just have it fixed and then try to understand from that.

Posted

You currently have it. Instead of setting your message variable to args[0] set it to res.

I've done so and it doesn't even come with any reason at all. That was my initial problem, none of the arguments actually came up.

Posted

Correct version? The version Ernio posted was fine.

You dump the array of strings into one String. It's really not hard. If you do not understand basic programming like this you need to stop modding and learn programming first.

Why is it so difficult to convey things to you -_-. I meant the corrected version of MY code. I have no idea how to put that into my code. It would save a lot of time if I could just have it fixed and then try to understand from that.

 

No one is going to provide you code that you can copy and paste. You have top actually know what you're doing.

 

You apparently missed the "this is not Java school" on the board description. Good news: that info is also in my sig.

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

Correct version? The version Ernio posted was fine.

You dump the array of strings into one String. It's really not hard. If you do not understand basic programming like this you need to stop modding and learn programming first.

Why is it so difficult to convey things to you -_-. I meant the corrected version of MY code. I have no idea how to put that into my code. It would save a lot of time if I could just have it fixed and then try to understand from that.

 

No one is going to provide you code that you can copy and paste. You have top actually know what you're doing.

 

You apparently missed the "this is not Java school" on the board description. Good news: that info is also in my sig.

 

Helpful comment is helpful.

 

The majority of stuff said in this post could be on the first page.

 

I've had an issue getting the arguments to work at all.

Posted

I've had an issue getting the arguments to work at all.

Could you explain a little more?

 

This is my command's execute method:

 

public void execute(ICommandSender icommandsender, String[] args) throws CommandException {
	// TODO Auto-generated method stub
	if (ChatListener.isAFK == false) {
	    ChatListener.isAFK = true;
	    icommandsender.addChatMessage(new ChatComponentText("You are now AFK!"));
	    return;
    }
	if (ChatListener.isAFK == true) {
	    ChatListener.isAFK = false;
	    icommandsender.addChatMessage(new ChatComponentText("You are no longer AFK!"));
	    return;
    }
	 ChatListener.reason = Joiner.on(" ").join(args);

 

This is my chatlistener class:

 

public void onChat(ClientChatReceivedEvent event) {
	String message = event.message.getUnformattedText();
	if (message.contains("From") && isAFK) {
		Minecraft.getMinecraft().thePlayer.sendChatMessage("/r I am currently AFK. Reason: " + ChatListener.reason);
	}

Upon doing /afk this is a test, it replies "I am currently AFK. Reason: "

 

If I change Reason manually in the code it sets it to that.

Posted

Try removing the space in the Joiner.on(" ")

Nope...

Try removing the space in the Joiner.on(" ")

Didn't work.

Because it was correct. Read Guava docs.

 

I already gave you solution in my 1st post.

DO YOUR STATEMENTS LIKE I SHOWED AND DON'T USE "return"... (Joiner is never reached)

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

Guest
This topic is now closed to further replies.

Announcements




×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.