Problem with longs (Java/Bukkit)

Any help topics that don't fit in the current categories can go here.
Post Reply
User avatar
offluffy
Posts: 65
Joined: Tue Mar 20, 2012 7:04 am

Problem with longs (Java/Bukkit)

Post by offluffy »

I've decided to implement temp banning. And because the Unix timestamp is easier to use for calculations, I'm using that, and apparently it's best to use the "long" datatype in Java or you'll get some sort of 2038 problem. But having said that, I'm having a problem, and I'm about completely lost on how to fix it. Firstly, here's the code:
if (plugin.bans.getBoolean("User." + niceName + ".tempban")){
	long uT = System.currentTimeMillis() / 1000L;
	long bT = plugin.bans.getLong("User." + niceName + ".tempban.bantime");
	long dur = plugin.bans.getLong("User." + niceName + ".tempban.duration");
	if ((uT - bT) > dur){
		plugin.log.info("User: " + playerName.getName() + " >> Temp-ban duration has expired, unbanning.");
		List<String> tbList = plugin.banned.getStringList("Users");
		tbList.remove(niceName);
		plugin.banned.set("Users", tbList);
		try{
			plugin.banned.save(plugin.bannedFile);
		}catch (IOException e){
			e.printStackTrace();
		}
		plugin.log.info(playerName.getName() + " logged in from " + ip);
		event.setResult(Result.ALLOWED);
		return;
	}
	else{
		//float length = (dur - (uT - bT)) / 60;
		event.setKickMessage("You are temporarily banned. Check back later.");
		event.setResult(Result.KICK_OTHER);
		plugin.log.info (playerName.getName() + " tried logging in while temp banned.");
		return;
	}
}
This code for some reason returns a memory section message for the KickMessage rather than what is specified. So maybe my math is just jacked up or I'm handling the long datatype improperly. Thought I'd ask @.@ Thanks in advance!
User avatar
jacek
Site Admin
Posts: 3262
Joined: Thu May 05, 2011 1:45 pm
Location: UK
Contact:

Re: Problem with longs (Java/Bukkit)

Post by jacek »

It looks okay to me at first glance. Are you sure you are always dividing the time by 1000 ?

What is the message you are getting ? :?
Image
User avatar
offluffy
Posts: 65
Joined: Tue Mar 20, 2012 7:04 am

Re: Problem with longs (Java/Bukkit)

Post by offluffy »

Made a bit of a dumb mistake XD I don't have a tempban node in my bans file yet @.@ I stared at the code for yours trying to figure out what dafuq was wrong with it T.T But I'll give ya the message, fix that problem, and see if it helps.

Message on kick:
Disconnected by Server
MemorySection[path='User.someone', root='YamlConfiguration']
^^^^ The test user being kicked is "someone" btw.
User avatar
offluffy
Posts: 65
Joined: Tue Mar 20, 2012 7:04 am

Re: Problem with longs (Java/Bukkit)

Post by offluffy »

Well, I was right XD But it turns out there were a few spots where the node in the yml file just didn't exist or I had it nested under a node that didn't exist @.@ I really gotta stop working on this while I'm half asleep T.T Thanks anyways XD
User avatar
jacek
Site Admin
Posts: 3262
Joined: Thu May 05, 2011 1:45 pm
Location: UK
Contact:

Re: Problem with longs (Java/Bukkit)

Post by jacek »

Oh right ! That looks a bit like a getConfigSection().toString() to me.

You should really make sure a default gets used for everything if the config file is broken, I have found that people love to delete stuff from the .yml files for some reason.
Image
User avatar
offluffy
Posts: 65
Joined: Tue Mar 20, 2012 7:04 am

Re: Problem with longs (Java/Bukkit)

Post by offluffy »

oh, so just check if a certain node exists than set it to something if not? I'll try to work something like that in O.o I did have a problem with my plugin breaking if there are no users saved in users.yml, so I had to insert a placeholder user and IP address so it didn't spit out console errors every time someone joined. @.@
User avatar
jacek
Site Admin
Posts: 3262
Joined: Thu May 05, 2011 1:45 pm
Location: UK
Contact:

Re: Problem with longs (Java/Bukkit)

Post by jacek »

I think you can specify a default value
String something = config.getString("path.to.the.string", "a fallback value");
you could with the old config system anyway.
offluffy wrote:I did have a problem with my plugin breaking if there are no users saved in users.yml, so I had to insert a placeholder user and IP address so it didn't spit out console errors every time someone joined. @.@
What was the error ? You probably needed to catch the case where there were no users and stop checking.
Image
User avatar
offluffy
Posts: 65
Joined: Tue Mar 20, 2012 7:04 am

Re: Problem with longs (Java/Bukkit)

Post by offluffy »

Oh yes, I've used that a few times before. Here's the error I was getting:
2012-03-29 08:15:49 [SEVERE] Could not pass event PlayerLoginEvent to Blip
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:303)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:459)
at net.minecraft.server.ServerConfigurationManager.attemptLogin(ServerConfigurationManager.java:226)
at net.minecraft.server.NetLoginHandler.b(NetLoginHandler.java:102)
at net.minecraft.server.NetLoginHandler.a(NetLoginHandler.java:94)
at net.minecraft.server.Packet1Login.handle(SourceFile:68)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
at net.minecraft.server.NetLoginHandler.a(NetLoginHandler.java:48)
at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:61)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:554)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:452)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:490)
Caused by: java.lang.NullPointerException at me.offluffy.blip.LoginListener.onPlayerLogin(LoginListener.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301)
... 12 more
It was popping out an error because the plugin was trying to fetch the Configuration Section from a node, and if that node was empty, it would error out and stop executing the code. And as a temp fix, I decided to add a temporary node under it so it wouldn't completely stop the plugin from working. Come to think of it, I don't exactly know how to fix that. Because I usually fetch the configuration section and check to see what's in it. And it can't if it's empty. Got a way around that? I'd rather not just add a fake node on every run XD
User avatar
jacek
Site Admin
Posts: 3262
Joined: Thu May 05, 2011 1:45 pm
Location: UK
Contact:

Re: Problem with longs (Java/Bukkit)

Post by jacek »

The key bit is this
Caused by: java.lang.NullPointerException at
me.offluffy.blip.LoginListener.onPlayerLogin(LoginListener.java:37)
There is an unexpected null on line 37, so see what is on line 37 and think about what could be null. It will probably be the result of getConfigSection(). you can just check it against null to see
ConfigSection thingy = config.getConfigSection(playerName);

if (thingy == null){
    // add a default and return.
}

// down here we know that thingy is not null.
Image
User avatar
offluffy
Posts: 65
Joined: Tue Mar 20, 2012 7:04 am

Re: Problem with longs (Java/Bukkit)

Post by offluffy »

I'll give that a shot then XD Later when I'm awake enough to comprehend stuff. I know it was the Conf. Section that was null, just didn't think to check for ==null before, thanks @.@
Post Reply