Jump to content

[1.10.2] [SOLVED] Get all player username in the server with client command


SteveKunG

Recommended Posts

I have a problem when using /getplayerpos command in the server, it can't get all players name and make game crash.

 

 

 

package stevekung.mods.indicatorutils.command;

 

import java.util.List;

 

import javax.annotation.Nullable;

 

import net.minecraft.command.CommandBase;

import net.minecraft.command.CommandException;

import net.minecraft.command.ICommandSender;

import net.minecraft.command.WrongUsageException;

import net.minecraft.server.MinecraftServer;

import net.minecraft.util.math.BlockPos;

import stevekung.mods.indicatorutils.IndicatorUtils;

import stevekung.mods.indicatorutils.PlayerPositionHandler;

 

public class CommandGetPlayerPosition extends CommandBase

{

    @Override

    public int getRequiredPermissionLevel()

    {

        return 0;

    }

 

    @Override

    public String getCommandUsage(ICommandSender sender)

    {

        return "/" + this.getCommandName();

    }

 

    @Override

    public String getCommandName()

    {

        return "getplayerpos";

    }

 

    @Override

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

    {

        if (args.length < 1)

        {

            throw new WrongUsageException("commands.getplayerpos.fail", new Object[] { this.getCommandUsage(sender) });

        }

        else

        {

            IndicatorUtils.NETWORK.sendToServer(new PlayerPositionHandler(args[0]));

        }

    }

 

    @Override

    public List<String> getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos pos)

    {

        return CommandBase.getListOfStringsMatchingLastWord(args, server.getAllUsernames());

    }

 

    @Override

    public boolean isUsernameIndex(String[] args, int index)

    {

        return index == 0;

    }

}

 

Link to comment
Share on other sites

Always post the crash report and/or FML log (logs/fml-client-latest.log or logs/fml-server-latest.log) when asking for help with a crash.

 

It's not safe to use

MinecraftServer

in a client command, all interaction between the client and server must be handled through packets. Forge's documentation explains sides here and networking here.

 

Why is this even a client command? If you need data from the server and your mod is on the server, use a server command.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

My mod is in client side only. Because I only use in the realm server.

 

Crash report

 

---- Minecraft Crash Report ----

// Uh... Did I do that?

 

Time: 16/11/2559, 14:40 น.

Description: Updating screen events

 

java.lang.NullPointerException: Updating screen events

at stevekung.mods.indicatorutils.command.CommandGetPlayerPosition.getTabCompletionOptions(CommandGetPlayerPosition.java:58)

at net.minecraft.command.CommandHandler.getTabCompletionOptions(CommandHandler.java:195)

at stevekung.mods.indicatorutils.utils.ClientCommandHandlerIU.autoComplete(ClientCommandHandlerIU.java:101)

at net.minecraft.util.TabCompleter.requestCompletions(TabCompleter.java:70)

at net.minecraft.util.TabCompleter.complete(TabCompleter.java:52)

at net.minecraft.client.gui.GuiChat$ChatTabCompleter.complete(GuiChat.java:279)

at net.minecraft.client.gui.GuiChat.keyTyped(GuiChat.java:89)

at net.minecraft.client.gui.GuiScreen.handleKeyboardInput(GuiScreen.java:645)

at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:593)

at net.minecraft.client.Minecraft.runTick(Minecraft.java:1797)

at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1118)

at net.minecraft.client.Minecraft.run(Minecraft.java:406)

at net.minecraft.client.main.Main.main(Main.java:118)

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 net.minecraft.launchwrapper.Launch.launch(Launch.java:135)

at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

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 net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)

at GradleStart.main(GradleStart.java:26)

 

 

A detailed walkthrough of the error, its code path and all known details is as follows:

---------------------------------------------------------------------------------------

 

-- Head --

Thread: Client thread

Stacktrace:

at stevekung.mods.indicatorutils.command.CommandGetPlayerPosition.getTabCompletionOptions(CommandGetPlayerPosition.java:58)

at net.minecraft.command.CommandHandler.getTabCompletionOptions(CommandHandler.java:195)

at stevekung.mods.indicatorutils.utils.ClientCommandHandlerIU.autoComplete(ClientCommandHandlerIU.java:101)

at net.minecraft.util.TabCompleter.requestCompletions(TabCompleter.java:70)

at net.minecraft.util.TabCompleter.complete(TabCompleter.java:52)

at net.minecraft.client.gui.GuiChat$ChatTabCompleter.complete(GuiChat.java:279)

at net.minecraft.client.gui.GuiChat.keyTyped(GuiChat.java:89)

at net.minecraft.client.gui.GuiScreen.handleKeyboardInput(GuiScreen.java:645)

at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:593)

 

-- Affected screen --

Details:

Screen name: net.minecraft.client.gui.GuiChat

 

-- Affected level --

Details:

Level name: MpServer

All players: 2 total; [EntityPlayerSP['Player904'/142324, l='MpServer', x=509.56, y=4.00, z=-1076.48], EntityOtherPlayerMP['Player383'/173, l='MpServer', x=516.40, y=4.00, z=-1080.89]]

Chunk stats: MultiplayerChunkCache: 289, 289

Level seed: 0

Level generator: ID 01 - flat, ver 0. Features enabled: false

Level generator options:

Level spawn location: World: (521,4,-1067), Chunk: (at 9,0,5 in 32,-67; contains blocks 512,0,-1072 to 527,255,-1057), Region: (1,-3; contains chunks 32,-96 to 63,-65, blocks 512,0,-1536 to 1023,255,-1025)

Level time: 33949 game time, 33949 day time

Level dimension: 0

Level storage version: 0x00000 - Unknown?

Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)

Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false

Forced entities: 50 total; [EntityPlayerSP['Player904'/142324, l='MpServer', x=509.56, y=4.00, z=-1076.48], EntitySlime['Slime'/144647, l='MpServer', x=430.38, y=4.00, z=-1151.43], EntitySlime['Slime'/173066, l='MpServer', x=476.46, y=4.92, z=-1128.36], EntityPig['Pig'/24, l='MpServer', x=438.24, y=4.00, z=-1085.67], EntityPig['Pig'/26, l='MpServer', x=437.78, y=4.00, z=-1096.43], EntityPig['Pig'/27, l='MpServer', x=438.08, y=4.00, z=-1084.70], EntitySheep['Sheep'/28, l='MpServer', x=441.78, y=4.00, z=-1080.60], EntityCow['Cow'/29, l='MpServer', x=459.61, y=4.00, z=-1097.50], EntityChicken['Chicken'/30, l='MpServer', x=462.16, y=4.00, z=-1077.77], EntitySheep['Sheep'/31, l='MpServer', x=457.74, y=4.00, z=-1003.82], EntityHorse['Horse'/34, l='MpServer', x=467.16, y=4.00, z=-1089.90], EntitySlime['Slime'/46243, l='MpServer', x=437.92, y=4.12, z=-1141.22], EntitySheep['Sheep'/35, l='MpServer', x=477.29, y=4.00, z=-1077.64], EntityChicken['Chicken'/36, l='MpServer', x=466.15, y=4.00, z=-1079.63], EntityItem['item.item.egg'/37, l='MpServer', x=466.24, y=4.00, z=-1079.62], EntityChicken['Chicken'/38, l='MpServer', x=465.37, y=4.00, z=-1026.11], EntitySlime['Slime'/71462, l='MpServer', x=449.81, y=4.75, z=-1059.12], EntityItem['item.item.egg'/39, l='MpServer', x=465.86, y=4.00, z=-1026.24], EntityChicken['Chicken'/40, l='MpServer', x=472.56, y=4.00, z=-1016.77], EntityItem['item.item.egg'/41, l='MpServer', x=473.06, y=4.00, z=-1016.19], EntitySlime['Slime'/39850, l='MpServer', x=466.46, y=4.17, z=-1120.37], EntityChicken['Chicken'/42, l='MpServer', x=466.80, y=4.00, z=-1006.87], EntityOtherPlayerMP['Player383'/173, l='MpServer', x=516.40, y=4.00, z=-1080.89], EntitySheep['Sheep'/48, l='MpServer', x=487.60, y=4.00, z=-1106.87], EntitySlime['Slime'/151986, l='MpServer', x=523.29, y=4.00, z=-1126.96], EntitySheep['Sheep'/51, l='MpServer', x=496.76, y=4.00, z=-1114.16], EntityCow['Cow'/55, l='MpServer', x=514.43, y=4.00, z=-1131.99], EntitySlime['Slime'/41787, l='MpServer', x=458.82, y=4.80, z=-1135.11], EntitySlime['Slime'/187454, l='MpServer', x=445.50, y=4.00, z=-1052.50], EntitySlime['Slime'/155200, l='MpServer', x=530.52, y=4.00, z=-1128.51], EntityChicken['Chicken'/67, l='MpServer', x=538.22, y=4.00, z=-1139.16], EntityItem['item.item.egg'/68, l='MpServer', x=538.79, y=4.00, z=-1138.96], EntitySlime['Slime'/166086, l='MpServer', x=475.02, y=5.08, z=-1130.33], EntityChicken['Chicken'/69, l='MpServer', x=536.98, y=4.00, z=-1127.98], EntityChicken['Chicken'/70, l='MpServer', x=533.10, y=4.00, z=-1130.03], EntitySlime['Slime'/73030, l='MpServer', x=454.39, y=4.00, z=-1064.97], EntityItem['item.item.egg'/71, l='MpServer', x=533.17, y=4.00, z=-1129.13], EntitySlime['Slime'/166088, l='MpServer', x=477.16, y=4.92, z=-1126.54], EntityChicken['Chicken'/75, l='MpServer', x=558.44, y=4.00, z=-1149.80], EntityCow['Cow'/76, l='MpServer', x=554.75, y=4.00, z=-1153.19], EntityItem['item.item.egg'/182878, l='MpServer', x=537.14, y=4.00, z=-1127.82], EntitySheep['Sheep'/95, l='MpServer', x=575.18, y=4.00, z=-1116.32], EntitySheep['Sheep'/96, l='MpServer', x=568.42, y=4.00, z=-1111.04], EntityChicken['Chicken'/97, l='MpServer', x=563.32, y=4.00, z=-1101.48], EntityChicken['Chicken'/98, l='MpServer', x=571.44, y=4.00, z=-1095.80], EntityItem['item.item.egg'/99, l='MpServer', x=571.77, y=4.00, z=-1095.30], EntityItem['item.item.egg'/100, l='MpServer', x=562.60, y=4.00, z=-1102.18], EntitySlime['Slime'/84968, l='MpServer', x=440.41, y=4.42, z=-1048.33], EntitySlime['Slime'/14316, l='MpServer', x=540.91, y=4.00, z=-1130.91], EntitySlime['Slime'/24047, l='MpServer', x=435.86, y=4.42, z=-1041.54]]

Retry entities: 0 total; []

Server brand: fml,forge

Server type: Non-integrated multiplayer server

Stacktrace:

at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:451)

at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2779)

at net.minecraft.client.Minecraft.run(Minecraft.java:427)

at net.minecraft.client.main.Main.main(Main.java:118)

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 net.minecraft.launchwrapper.Launch.launch(Launch.java:135)

at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

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 net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)

at GradleStart.main(GradleStart.java:26)

 

-- System Details --

Details:

Minecraft Version: 1.10.2

Operating System: Windows 7 (amd64) version 6.1

Java Version: 1.8.0_102, Oracle Corporation

Java VM Version: Java HotSpot 64-Bit Server VM (mixed mode), Oracle Corporation

Memory: 780960168 bytes (744 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)

JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M

IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0

FML: MCP 9.32 Powered by Forge 12.18.2.2118 4 mods loaded, 4 mods active

States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

UCHIJA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar)

UCHIJA FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.10.2-12.18.2.2118.jar)

UCHIJA Forge{12.18.2.2118} [Minecraft Forge] (forgeSrc-1.10.2-12.18.2.2118.jar)

UCHIJA indicatorutils{2.0.0} [indicator Utils] (bin)

Loaded coremods (and transformers):

GL info: ' Vendor: 'Intel' Version: '4.3.0 - Build 10.18.14.4432' Renderer: 'Intel® HD Graphics 4600'

Launched Version: 1.10.2

LWJGL: 2.9.4

OpenGL: Intel® HD Graphics 4600 GL version 4.3.0 - Build 10.18.14.4432, Intel

GL Caps: Using GL 1.3 multitexturing.

Using GL 1.3 texture combiners.

Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.

Shaders are available because OpenGL 2.1 is supported.

VBOs are available because OpenGL 1.5 is supported.

 

Using VBOs: Yes

Is Modded: Definitely; Client brand changed to 'fml,forge'

Type: Client (map_client.txt)

Resource Packs:

Current Language: English (US)

Profiler Position: N/A (disabled)

CPU: 4x Intel® Core i5-4570 CPU @ 3.20GHz

 

 

What should I do? Write the packet and send it to the server?

Link to comment
Share on other sites

My mod is in client side only. Because I only use in the realm server.

What does the

PlayerPositionHandler

packet do if your mod isn't on the server?

 

java.lang.NullPointerException: Updating screen events

at stevekung.mods.indicatorutils.command.CommandGetPlayerPosition.getTabCompletionOptions(CommandGetPlayerPosition.java:58)

at net.minecraft.command.CommandHandler.getTabCompletionOptions(CommandHandler.java:195)

at stevekung.mods.indicatorutils.utils.ClientCommandHandlerIU.autoComplete(ClientCommandHandlerIU.java:101)

at net.minecraft.util.TabCompleter.requestCompletions(TabCompleter.java:70)

at net.minecraft.util.TabCompleter.complete(TabCompleter.java:52)

You can't use

MinecraftServer

in a client command. The

MinecraftServer

argument of

ICommand#getTabCompletionOptions

will be

null

for client commands if there's no integrated server running.

 

What should I do? Write the packet and send it to the server?

If your mod isn't on the server, you can't create your own packets; you can only send vanilla ones.

 

On the client, you can use

NetHandlerPlayClient#getPlayerInfoMap

to get a list of players currently on the server. Use

Minecraft#getConnection

to get the

NetHandlerPlayClient

instance, but make sure it's not

null

before you try to use it.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Thank you! It work perfectly on the server.  By the way I looking at GuiPlayerTabOverlay#renderPlayerlist how getPlayerInfoMap works.

 

 

    @Override

    public List<String> getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos pos)

    {

        NetHandlerPlayClient connection = Minecraft.getMinecraft().thePlayer.connection;

        List<NetworkPlayerInfo> playerInfo = new ArrayList(connection.getPlayerInfoMap());

        List<String> playerList = Lists.<String>newArrayList();

 

        for (int i = 0; i < playerInfo.size(); ++i)

        {

            if (i < playerInfo.size())

            {

                playerList.add(playerInfo.get(i).getGameProfile().getName());

            }

        }

        return CommandBase.getListOfStringsMatchingLastWord(args, playerList);

    }

 

 

And PlayerPositionHandler only work on LAN world. I'm not sure why.

 

 

 

package stevekung.mods.indicatorutils;

 

import io.netty.buffer.ByteBuf;

import net.minecraft.client.resources.I18n;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.entity.player.EntityPlayerMP;

import net.minecraft.network.NetHandlerPlayServer;

import net.minecraft.util.math.BlockPos;

import net.minecraft.util.text.TextComponentTranslation;

import net.minecraft.world.WorldServer;

import net.minecraftforge.fml.common.FMLCommonHandler;

import net.minecraftforge.fml.common.network.ByteBufUtils;

import net.minecraftforge.fml.common.network.simpleimpl.IMessage;

import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;

import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;

import stevekung.mods.indicatorutils.command.CommandGetPlayerPosition;

import stevekung.mods.indicatorutils.utils.JsonMessageUtils;

 

public class PlayerPositionHandler implements IMessage

{

    private String playerName;

 

    public PlayerPositionHandler() {}

 

    public PlayerPositionHandler(String playerName)

    {

        this.playerName = playerName;

    }

 

    @Override

    public void fromBytes(ByteBuf buf)

    {

        this.playerName = ByteBufUtils.readUTF8String(buf);

    }

 

    @Override

    public void toBytes(ByteBuf buf)

    {

        ByteBufUtils.writeUTF8String(buf, this.playerName);

    }

 

    private static EntityPlayerMP getPlayerByUsername(NetHandlerPlayServer server, String playerName)

    {

        for (WorldServer worldServer : FMLCommonHandler.instance().getMinecraftServerInstance().worldServers)

        {

            for (EntityPlayer player : worldServer.playerEntities)

            {

                if (server.playerEntity.getName().equalsIgnoreCase(playerName))

                {

                    return server.playerEntity;

                }

            }

        }

        return null;

    }

 

    public static class PositionMessageHandler implements IMessageHandler<PlayerPositionHandler, IMessage>

    {

        @Override

        public IMessage onMessage(PlayerPositionHandler message, MessageContext ctx)

        {

            EntityPlayerMP playerMP = PlayerPositionHandler.getPlayerByUsername(ctx.getServerHandler(), message.playerName);

 

            if (playerMP != null)

            {

                BlockPos pos = playerMP.getPosition();

                CommandGetPlayerPosition.setMessage(new TextComponentTranslation("commands.getplayerpos.success", new Object[] { playerMP.getName(), pos.getX(), pos.getY(), pos.getZ(), playerMP.worldObj.provider.getDimensionType().getName() }));

            }

            else

            {

                CommandGetPlayerPosition.setMessage(JsonMessageUtils.json("\"text\":\"" + I18n.format("commands.getplayerpos.playernull", message.playerName) + "\",\"color\":\"red\""));

            }

            return null;

        }

    }

}

 

Link to comment
Share on other sites

And PlayerPositionHandler only work on LAN world. I'm not sure why.

 

 

 

package stevekung.mods.indicatorutils;

 

import io.netty.buffer.ByteBuf;

import net.minecraft.client.resources.I18n;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.entity.player.EntityPlayerMP;

import net.minecraft.network.NetHandlerPlayServer;

import net.minecraft.util.math.BlockPos;

import net.minecraft.util.text.TextComponentTranslation;

import net.minecraft.world.WorldServer;

import net.minecraftforge.fml.common.FMLCommonHandler;

import net.minecraftforge.fml.common.network.ByteBufUtils;

import net.minecraftforge.fml.common.network.simpleimpl.IMessage;

import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;

import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;

import stevekung.mods.indicatorutils.command.CommandGetPlayerPosition;

import stevekung.mods.indicatorutils.utils.JsonMessageUtils;

 

public class PlayerPositionHandler implements IMessage

{

    private String playerName;

 

    public PlayerPositionHandler() {}

 

    public PlayerPositionHandler(String playerName)

    {

        this.playerName = playerName;

    }

 

    @Override

    public void fromBytes(ByteBuf buf)

    {

        this.playerName = ByteBufUtils.readUTF8String(buf);

    }

 

    @Override

    public void toBytes(ByteBuf buf)

    {

        ByteBufUtils.writeUTF8String(buf, this.playerName);

    }

 

    private static EntityPlayerMP getPlayerByUsername(NetHandlerPlayServer server, String playerName)

    {

        for (WorldServer worldServer : FMLCommonHandler.instance().getMinecraftServerInstance().worldServers)

        {

            for (EntityPlayer player : worldServer.playerEntities)

            {

                if (server.playerEntity.getName().equalsIgnoreCase(playerName))

                {

                    return server.playerEntity;

                }

            }

        }

        return null;

    }

 

    public static class PositionMessageHandler implements IMessageHandler<PlayerPositionHandler, IMessage>

    {

        @Override

        public IMessage onMessage(PlayerPositionHandler message, MessageContext ctx)

        {

            EntityPlayerMP playerMP = PlayerPositionHandler.getPlayerByUsername(ctx.getServerHandler(), message.playerName);

 

            if (playerMP != null)

            {

                BlockPos pos = playerMP.getPosition();

                CommandGetPlayerPosition.setMessage(new TextComponentTranslation("commands.getplayerpos.success", new Object[] { playerMP.getName(), pos.getX(), pos.getY(), pos.getZ(), playerMP.worldObj.provider.getDimensionType().getName() }));

            }

            else

            {

                CommandGetPlayerPosition.setMessage(JsonMessageUtils.json("\"text\":\"" + I18n.format("commands.getplayerpos.playernull", message.playerName) + "\",\"color\":\"red\""));

            }

            return null;

        }

    }

}

 

 

Like I said, you can't use your own packets if your mod isn't on the server. When you use the integrated server (for single player/LAN), the server has the same mods as the host client (because it's being run by the host client). When you use the dedicated server, the server has its own set of mods (or none at all).

 

PositionMessageHandler

is reaching across logical sides by setting a field in

CommandGetPlayerPosition

(a class only used by the client) from the server; this is incorrect and will break in a multiplayer session (even if it's LAN).

 

It's also doing this from the server's network thread instead of the server's main thread, which will cause even more problems. Your

IMessageHandler

must schedule a task to run on the main thread before it can safely interact with normal Minecraft classes, Forge's documentation explains this here.

 

You're also using the client-only

I18n

class from a server-side

IMessageHandler

, which would crash the dedicated server.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

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



×
×
  • Create New...

Important Information

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