package de.maxgb.minecraft.second_screen.info_listener; 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.User; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.potion.PotionEffect; import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.chunk.Chunk; import org.json.JSONArray; import org.json.JSONObject; import java.util.Collection; /** * Listener which listens to player information like health or position * @author Max * */ public class PlayerInfoListener extends StandardListener { @SuppressWarnings("unused") private final String TAG = "PlayerInfoListener"; public PlayerInfoListener(User user) { super(user); everyTick = Configs.player_info_update_time; } @Override public String update() { JSONObject response = new JSONObject(); EntityPlayerMP player = user.getPlayer(server); if (player == null) { response.put("success", 0).put("error", "User " + user.username + " not online"); } else { int x = MathHelper.floor_double(player.posX); int y = MathHelper.floor_double(player.posY); int z = MathHelper.floor_double(player.posZ); response.put("health", player.getHealth()); response.put("foodlevel", player.getFoodStats().getFoodLevel()); response.put("eplevel", player.experienceLevel); response.put("posx", Integer.valueOf(x)); response.put("posy", Integer.valueOf(y)); response.put("posz", Integer.valueOf(z)); response.put("posxc", Integer.valueOf(x & 15)); response.put("poszc", Integer.valueOf(z & 15)); response.put("ping", player.ping); //Get direction, @see GUIIngame EnumFacing enumfacing = player.getHorizontalFacing(); response.put("direction", enumfacing.getName()); if (player.worldObj != null && player.worldObj.isBlockLoaded(player.getPosition())) { Chunk chunk = player.worldObj.getChunkFromBlockCoords(player.getPosition()); response.put("lc", (chunk.getTopFilledSegment()+15)); response.put("biome", chunk.getBiome(player.getPosition(), player.worldObj.getWorldChunkManager()).biomeName); response.put("light", chunk.getLightSubtracted(player.getPosition(), 0) + " (" + chunk.getLightFor(EnumSkyBlock.SKY, player.getPosition()) + " sky, " + chunk.getLightFor(EnumSkyBlock.BLOCK, player.getPosition()) + " block)"); } JSONArray potions = new JSONArray(); Collection<PotionEffect> pot = player.getActivePotionEffects(); for (PotionEffect i : pot) { JSONArray p = new JSONArray(); p.put(StatCollector.translateToLocal(i.getEffectName())); p.put(i.getDuration() / 20); potions.put(p); } response.put("potions", potions); response.put("success", 1); } return PROTOKOLL.S_PLAYERINFO_LISTENER + "-" + response.toString(); } }