Jump to content

[1.10.2] Command lag spike problem


SteveKunG

Recommended Posts

My mod has added command for checking mojang status. But when execute the command it make lag spike in game.

 

Command :

 

package stevekung.mods.indicatorutils.command;

 

import net.minecraft.client.Minecraft;

import net.minecraft.command.CommandBase;

import net.minecraft.command.CommandException;

import net.minecraft.command.ICommandSender;

import net.minecraft.server.MinecraftServer;

import stevekung.mods.indicatorutils.utils.JsonMessageUtils;

import stevekung.mods.indicatorutils.utils.MojangStatusChecker;

import stevekung.mods.indicatorutils.utils.MojangStatusChecker.ServerStatus;

 

public class CommandMojangStatusCheck extends CommandBase

{

    @Override

    public int getRequiredPermissionLevel()

    {

        return 0;

    }

 

    @Override

    public String getCommandUsage(ICommandSender sender)

    {

        return "/" + this.getCommandName();

    }

 

    @Override

    public String getCommandName()

    {

        return "mojangstatus";

    }

 

    @Override

    public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException

    {

        for (MojangStatusChecker statusChecker : MojangStatusChecker.values())

        {

            String service = statusChecker.getName();

            ServerStatus status = statusChecker.getStatus();

            Minecraft.getMinecraft().thePlayer.addChatMessage(JsonMessageUtils.json("\"text\":\"" + service + ": \",\"extra\":[{\"text\":\"" + status.getStatus() + "\",\"color\":\"" + status.getColor() + "\"}]"));

        }

    }

}

 

 

Mojang Status Checker :

Original code from : https://bukkit.org/threads/resource-check-if-a-mojang-server-is-online-offline.226634/

 

package stevekung.mods.indicatorutils.utils;

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.URL;

 

import com.google.gson.JsonElement;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

 

import net.minecraft.util.text.TextFormatting;

 

public enum MojangStatusChecker

{

    MAIN_WEBSITE("Main Website", "minecraft.net"),

    SESSION_SERVER("Minecraft Session Server", "session.minecraft.net"),

    ACCOUNTS("Accounts Service", "account.mojang.com"),

    AUTHENTICATION("Authentication Service", "auth.mojang.com"),

    SKINS_SERVER("Skins Server", "skins.minecraft.net"),

    AUTHENTICATION_SERVER("Authentication Server", "authserver.mojang.com"),

    MOJANG_SESSION_SERVER("Mojang Session Server", "sessionserver.mojang.com"),

    MOJANG_API("Mojang API Service", "api.mojang.com"),

    TEXTURES("Textures Service", "textures.minecraft.net"),

    MOJANG_MAIN_WEBSITE("Mojang Main Website", "mojang.com");

 

    private String name;

    private String serviceURL;

 

    private MojangStatusChecker(String name, String serviceURL)

    {

        this.name = name;

        this.serviceURL = serviceURL;

    }

 

    public String getName()

    {

        return this.name;

    }

 

    public ServerStatus getStatus()

    {

        try

        {

            URL url = new URL("http://status.mojang.com/check?service=" + this.serviceURL);

            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));

            JsonObject jsonObject = (JsonObject) new JsonParser().parse(bufferedReader);

            JsonElement status = jsonObject.get(this.serviceURL);

            return ServerStatus.get(status.getAsString());

        }

        catch (IOException e)

        {

            return ServerStatus.UNKNOWN;

        }

    }

 

    public enum ServerStatus

    {

        ONLINE("Online", TextFormatting.GREEN.getFriendlyName()),

        UNSTABLE("Unstable", TextFormatting.YELLOW.getFriendlyName()),

        OFFLINE("Offline", TextFormatting.DARK_RED.getFriendlyName()),

        UNKNOWN("Unknown", TextFormatting.RED.getFriendlyName());

 

        private String status;

        private String color;

 

        ServerStatus(String status, String color)

        {

            this.status = status;

            this.color = color;

        }

 

        public String getStatus()

        {

            return this.status;

        }

 

        public String getColor()

        {

            return this.color;

        }

 

        public static ServerStatus get(String status)

        {

            if (status.equals("green"))

            {

                return ServerStatus.ONLINE;

            }

            else if (status.equals("yellow"))

            {

                return ServerStatus.UNSTABLE;

            }

            else if (status.equals("red"))

            {

                return ServerStatus.OFFLINE;

            }

            else

            {

                return ServerStatus.UNKNOWN;

            }

        }

    }

}

 

Link to comment
Share on other sites

OK. I have learn something about thread. And my FPS get stable.

Thanks!

 

Here is my simple thread code.

 

/*******************************************************************************

* Copyright 2016 Wasinthorn Suksri/SteveKunG - Indicator Utils

*

* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.

* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.

******************************************************************************/

 

package stevekung.mods.indicatorutils.utils;

 

import net.minecraft.client.Minecraft;

import net.minecraftforge.fml.client.FMLClientHandler;

import net.minecraftforge.fml.relauncher.Side;

import stevekung.mods.indicatorutils.utils.MojangStatusChecker.ServerStatus;

 

public class ThreadMojangStatusCheck extends Thread

{

    private boolean startup;

 

    public ThreadMojangStatusCheck(boolean startup)

    {

        super("Mojang Status Check Thread");

        this.startup = startup;

    }

 

    @Override

    public void run()

    {

        if (FMLClientHandler.instance().getSide() == Side.CLIENT)

        {

            if (this.startup)

            {

                for (MojangStatusChecker statusChecker : MojangStatusChecker.values())

                {

                    String service = statusChecker.getName();

                    ServerStatus status = statusChecker.getStatus();

                    IULog.info(statusChecker.getName() + status.getStatus());

                }

            }

            else

            {

                for (MojangStatusChecker statusChecker : MojangStatusChecker.values())

                {

                    String service = statusChecker.getName();

                    ServerStatus status = statusChecker.getStatus();

                    Minecraft.getMinecraft().thePlayer.addChatMessage(JsonMessageUtils.json("\"text\":\"" + service + ": \",\"extra\":[{\"text\":\"" + status.getStatus() + "\",\"color\":\"" + status.getColor() + "\"}]"));

                }

            }

        }

    }

}

 

Link to comment
Share on other sites

OK. I have learn something about thread. And my FPS get stable.

Thanks!

 

Here is my simple thread code.

 

/*******************************************************************************

* Copyright 2016 Wasinthorn Suksri/SteveKunG - Indicator Utils

*

* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.

* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.

******************************************************************************/

 

package stevekung.mods.indicatorutils.utils;

 

import net.minecraft.client.Minecraft;

import net.minecraftforge.fml.client.FMLClientHandler;

import net.minecraftforge.fml.relauncher.Side;

import stevekung.mods.indicatorutils.utils.MojangStatusChecker.ServerStatus;

 

public class ThreadMojangStatusCheck extends Thread

{

    private boolean startup;

 

    public ThreadMojangStatusCheck(boolean startup)

    {

        super("Mojang Status Check Thread");

        this.startup = startup;

    }

 

    @Override

    public void run()

    {

        if (FMLClientHandler.instance().getSide() == Side.CLIENT)

        {

            if (this.startup)

            {

                for (MojangStatusChecker statusChecker : MojangStatusChecker.values())

                {

                    String service = statusChecker.getName();

                    ServerStatus status = statusChecker.getStatus();

                    IULog.info(statusChecker.getName() + status.getStatus());

                }

            }

            else

            {

                for (MojangStatusChecker statusChecker : MojangStatusChecker.values())

                {

                    String service = statusChecker.getName();

                    ServerStatus status = statusChecker.getStatus();

                    Minecraft.getMinecraft().thePlayer.addChatMessage(JsonMessageUtils.json("\"text\":\"" + service + ": \",\"extra\":[{\"text\":\"" + status.getStatus() + "\",\"color\":\"" + status.getColor() + "\"}]"));

                }

            }

        }

    }

}

 

 

You shloud change this line:

Minecraft.getMinecraft().thePlayer.addChatMessage(JsonMessageUtils.json("\"text\":\"" + service + ": \",\"extra\":[{\"text\":\"" + status.getStatus() + "\",\"color\":\"" + status.getColor() + "\"}]"));

to

Minecraft.getMinecraft().thePlayer.getServerForPlayer().addScheduledTask(new Runnable()
{
  public void run() {
    Minecraft.getMinecraft().thePlayer.addChatMessage(JsonMessageUtils.json("\"text\":\"" + service + ": \",\"extra\":[{\"text\":\"" + status.getStatus() + "\",\"color\":\"" + status.getColor() + "\"}]"));
  }
});

you cant do this your way because you are on separate thread useful link:http://greyminecraftcoder.blogspot.com.au/2015/01/thread-safety-with-network-messages.html(about networking but it explains threads)

Link to comment
Share on other sites


Why are you generating your
ITextComponent

from JSON? Use the methods on

ITextComponent

to format it if you are generating it from code.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Im having this problem where i open the run.bat file with the following code: "C:\Program Files\Java\jre-1.8\bin\javaw.exe" -Xmx6000M -Xms6000M -jar forge-1.12.2-14.23.5.2860.jar nogui PAUSE This creates all the folders and files that it would normally create (eula.txt, mods, server.properties, etc) but it wont generate a world, the eula has been accepted, but it still does nothing, and it wont say anything on the cmd besides leaving a blank paragraph and the PAUSE code. I dont know what to do, i updated the last version of java 8, i tried many forge versions, including the latest, the recomended and a few others, i restarted my pc various times, nothing. Normal vanilla servers work just fine, its the forge one that doesnt do the thing. Im desperate, i've been trying to create a 1.20.2 server and for some reason every tweak i made for ram usage never worked, it still used 1gb to 3gb max, world not loading correctly, countless ticks behind. try a 1.12.2 server, got nowhere, and the weirdest thing is that i already made some 1.12.2 forge servers on this same pc a few years ago and had no trouble at all. if anybody knows what is happening please leave a comment, i will thank you with all my heart.
    • We've actually started running into a new problem, whilst adding more mods may work, it makes it so that we're unable to connect to our server, even on LAN. Does anyone know what this error message means? We're not getting any helpful output into console either. Edit: found the logs for attempting to connect [21:46:00] [Netty Epoll Client IO #0/WARN]: Your custom tfmg:coking recipe (tfmg:coking/coal_coke) specified a duration. Durations have no impact on this type of recipe. [21:46:00] [Render thread/INFO]: Reloaded entity icon resources! [21:46:00] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/copper_plate recipe (createaddition:rolling/copper_plate) specified a duration. Durations have no impact on this type of recipe. [21:46:00] [Render thread/INFO]: Redirecting net/minecraft/world/level/chunk/LevelChunk$EntityCreationType [21:46:00] [Render thread/INFO]: Redirecting com/possible_triangle/flightlib/api/FlyingPose [21:46:00] [Render thread/INFO]: Redirecting net/minecraft/world/BossEvent$BossBarColor [21:46:00] [Render thread/INFO]: Redirecting fuzs/overflowingbars/client/handler/HealthBarRenderer$HeartType [21:46:00] [Render thread/INFO]: Curios has been initialized with 17 slot(s) after 1 tries [21:46:00] [Render thread/INFO]: Redirecting org/violetmoon/quark/api/event/UsageTickerEvent$Pass [21:46:00] [Render thread/INFO]: Redirecting net/minecraft/world/level/block/SupportType [21:46:00] [Render thread/INFO]: Redirecting com/tom/cpm/shared/MinecraftClientAccess$ServerStatus [21:46:00] [Render thread/INFO]: Redirecting io/socol/betterthirdperson/api/TickPhase [21:46:00] [Render thread/INFO]: Redirecting net/minecraft/world/scores/Team$CollisionRule [21:46:00] [Render thread/INFO]: Redirecting net/blf02/vrapi/client/VRDataGrabber$PlayerType [21:46:00] [Render thread/INFO]: Redirecting com/corosus/watut/PlayerStatus$PlayerChatState [21:46:00] [Render thread/WARN]: Unable to play empty soundEvent: biomemusic:music.game [21:46:01] [Render thread/INFO]: Stopping worker threads [21:46:01] [Render thread/INFO]: Started 6 worker threads [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/electrum_ingot recipe (createaddition:rolling/electrum_ingot) specified a duration. Durations have no impact on this type of recipe. [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom tfmg:casting recipe (tfmg:casting/steel) specified a duration. Durations have no impact on this type of recipe. [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom tfmg:casting recipe (tfmg:casting/steel) has more fluid inputs (1) than supported (0). [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/brass_ingot recipe (createaddition:rolling/brass_ingot) specified a duration. Durations have no impact on this type of recipe. [21:46:01] [Render thread/INFO]: Redirecting net/minecraft/client/gui/components/toasts/Toast$Visibility [21:46:01] [CullThread/INFO]: Redirecting com/logisticscraft/occlusionculling/OcclusionCullingInstance$Relative [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/electrum_plate recipe (createaddition:rolling/electrum_plate) specified a duration. Durations have no impact on this type of recipe. [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/gold_plate recipe (createaddition:rolling/gold_plate) specified a duration. Durations have no impact on this type of recipe. [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/gold_ingot recipe (createaddition:rolling/gold_ingot) specified a duration. Durations have no impact on this type of recipe. [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/iron_plate recipe (createaddition:rolling/iron_plate) specified a duration. Durations have no impact on this type of recipe. [21:46:01] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/iron_ingot recipe (createaddition:rolling/iron_ingot) specified a duration. Durations have no impact on this type of recipe. [21:46:02] [Netty Epoll Client IO #0/WARN]: Your custom tfmg:industrial_blasting recipe (tfmg:industrial_blasting/steel) specified a duration. Durations have no impact on this type of recipe. [21:46:02] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/copper_ingot recipe (createaddition:rolling/copper_ingot) specified a duration. Durations have no impact on this type of recipe. [21:46:02] [Netty Epoll Client IO #0/WARN]: Your custom createaddition:rolling/straw recipe (createaddition:rolling/straw) specified a duration. Durations have no impact on this type of recipe. [21:46:02] [Netty Epoll Client IO #0/INFO]: Redirecting net/minecraft/world/entity/RelativeMovement [21:46:02] [Netty Epoll Client IO #0/INFO]: Redirecting dev/xkmc/l2library/capability/player/PlayerCapToClient$Action [21:46:02] [Render thread/WARN]: Unknown recipe category: cataclysm:weapon_fusion/cataclysm:weapon_infusion/void_assault_shoulder_weapon [21:46:03] [Netty Epoll Client IO #0/WARN]: Packet not registered: ClientboundDisconnectPacket [21:46:03] [Netty Epoll Client IO #0/WARN]: Packet:ClientboundDisconnectPacket [21:46:03] [Netty Epoll Client IO #0/WARN]: Packet data: { "f_132075_": "translation{key='disconnect.genericReason', args=[Internal Exception: io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException: readerIndex(12) + length(8) exceeds writerIndex(13): PooledUnsafeDirectByteBuf(ridx: 12, widx: 13, cap: 13/14)]}" } [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:golden_dart_from_poison [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:holystone_from_poison [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:gravitite_ore_from_poison [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:purple_squash_from_blue_squash [21:46:03] [Render thread/WARN]: Unknown recipe category: cataclysm:weapon_fusion/cataclysm:weapon_infusion/gauntlet_of_bulwark [21:46:03] [Render thread/WARN]: Unknown recipe category: cataclysm:weapon_fusion/cataclysm:weapon_infusion/void_forge [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:quicksoil_from_poison [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:blueberry_from_poison [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:skyroot_poison_bucket_from_poison [21:46:03] [Render thread/WARN]: Unknown recipe category: cataclysm:weapon_fusion/cataclysm:weapon_infusion/ignitium_elytra_chestplate [21:46:03] [Render thread/WARN]: Unknown recipe category: deep_aether:poison_recipe/deep_aether:purple_squash_from_green_squash  
    • I NEED A HACKER TO RECOVER MONEY FROM BINARY TRADING SCAMMED RECOVER BY BRUNOE QUICK HACK// WHATS APP  + 1 705 784 2635
    • Created new worlds and still had problems https://mclo.gs/ZoySn3o
  • Topics

×
×
  • Create New...

Important Information

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