package de.maxgb.minecraft.second_screen.info_listener;
import java.util.HashMap;
import net.minecraft.world.WorldServer;
import net.minecraft.world.storage.WorldInfo;
import org.json.JSONObject;
import de.maxgb.minecraft.second_screen.Configs;
import de.maxgb.minecraft.second_screen.StandardListener;
import de.maxgb.minecraft.second_screen.shared.PROTOKOLL;
import de.maxgb.minecraft.second_screen.util.Logger;
import de.maxgb.minecraft.second_screen.util.User;
import de.maxgb.minecraft.second_screen.world_observer.ObservedBlock;
/**
* Listens to world related informations like world time, also adds informations from all observed blocks
* @author Max
*
*/
public class WorldInfoListener extends StandardListener {
/**
* MinecraftTime Gets a string with only needed elements. Max time is weeks
*
* @param timeInTicks
* @return Time in string format
*/
public static String parseTime(int timeInTicks) {
String time = "";
// int weeks = timeInTicks / (168000);
int remainder = timeInTicks % (168000);
// int days = remainder / 24000;
remainder = timeInTicks % 24000;
int hours = remainder / 1000;
remainder = timeInTicks % 1000;
int minutes = remainder / 17;
// Not interesting
// if (weeks != 0) {
// time += weeks + " weeks ";
// }
//
// if (days != 0) {
// time += (days < 10 ? "0" : "") + days + " days ";
// }
if (hours != 0) {
time += (hours < 10 ? "0" : "") + hours + " h ";
}
if (minutes != 0) {
time += (minutes < 10 ? "0" : "") + minutes + " min ";
}
return time;
}
HashMap<Integer, WorldServer> worlds;
private final String TAG = "WorldInfoListener";
public WorldInfoListener(User user) {
super(user);
everyTick = Configs.world_info_update_time;
worlds = new HashMap<Integer, WorldServer>();
for (WorldServer s : server.worldServers) {
worlds.put(s.provider.getDimensionId(), s);
}
Logger.i(TAG, "Worlds: " + worlds.toString());
}
@Override
public String update() {
JSONObject info = new JSONObject();
// General Overworldinfo
JSONObject ow = new JSONObject();
for (WorldServer w : server.worldServers) {
if (w.provider.getDimensionId() == 0) {
WorldInfo i = w.getWorldInfo();
ow.put("name", i.getWorldName());
ow.put("time", parseTime((int) i.getWorldTime() + 6000));
ow.put("rain", i.isRaining());
ow.put("timetillrain", parseTime(i.getRainTime()));
break;
}
}
info.put("overworld", ow);
// Observing Info
ObservedBlock.addObservingInfo(info, worlds, user.username);
// TestMessage
// return PROTOKOLL.WORLD_INFO_LISTENER + "-" +
// "{\"overworld\":{\"time\":\"17 h 31 min \",\"name\":\"New World\",\"timetillrain\":\"09 h 01 min \",\"rain\":false},\"th_node\":[{\"aspects\":{\"Perditio\":11,\"Ordo\":12,\"Ignis\":17},\"label\":\"nod\"},{\"aspects\":{\"Ignis\":9},\"label\":\"node\"},{\"aspects\":{\"Terra\":22,\"Ignis\":31},\"label\":\"nodes\"},{\"aspects\":{\"Ignis\":9},\"label\":\"node\"}],\"redstone\":[[\"label\",true,false],[\"lever\",true,true]]}";
return PROTOKOLL.WORLD_INFO_LISTENER + "-" + info.toString();
}
}