[1.5.2][Forge] Смена ника игроку

Статус
В этой теме нельзя размещать новые ответы.
Всем привет, мне нужна ваша помощь.
Я хочу сделать что бы игрок смог сменить себе игровое имя, прямо в игре.
При этом username игрока не изменяется(Чисто клиентская система).

Так же я использую RenderPlayerAPI, помогите в моей проблеме, а то уже 3 день мучаюсь...
 
Чтобы в табе отображался другой ник?
 
kWiki74RUS написал(а):
Всем привет, мне нужна ваша помощь.
Я хочу сделать что бы игрок смог сменить себе игровое имя, прямо в игре.
При этом username игрока не изменяется(Чисто клиентская система).

Так же я использую RenderPlayerAPI, помогите в моей проблеме, а то уже 3 день мучаюсь...
Довольно сложно и мутерно, делай лучше сайт и на нем пусть ники и меняют, а то будешь делать, да и кинешь, была подобная хрень, забросил после первого дня, то каждую секунду предлагало сменить, то меняло на фиг пойми че
 
Код:
    public void afterPassSpecialRender(EntityLivingBase var1, double var2, double var4, double var6) 
    {
        this.renderName((EntityLivingBase)var1, var2, var4, var6);
    }


    protected void renderName(EntityLivingBase entity, double d, double d1, double d2)
    {

        this.renderPlayer.NAME_TAG_RANGE = 0;
        this.renderPlayer.NAME_TAG_RANGE_SNEAK = 0;
        if (Minecraft.isGuiEnabled() && entity != RenderManager.instance.livingPlayer)
        {
            float f2 = entity.getDistanceToEntity(RenderManager.instance.livingPlayer);
            float f3 = entity.isSneaking() ? 0.0F : 4.0F;

            if (f2 < f3)
            {
                String s = entity.getEntityName();
                if(entity instanceof EntityPlayer)
                {
                    EntityPlayer player = (EntityPlayer) entity;
                    ExtendedPlayer props = ExtendedPlayer.get(player);
                    if(props.nickname != null && props.nickname.length() >= 3)
                        s = props.nickname;
                }
                if (entity.isPlayerSleeping())
                {
                    this.afterRenderLivingLabel(entity, s, d, d1 - 1.5D, d2, 64);
                }
                else
                {
                    this.afterRenderLivingLabel(entity, s, d, d1, d2, 64);
                }
            }
        }
    }
    public void afterRenderLivingLabel(EntityLivingBase par1EntityLivingBase, String par2Str, double par3, double par5, double par7, int par9)
    {
        double d3 = par1EntityLivingBase.getDistanceSqToEntity(RenderManager.instance.livingPlayer);

        if (d3 <= (double)(par9 * par9))
        {
            FontRenderer fontrenderer = RenderManager.instance.getFontRenderer();
            float f = 1.6F;
            float f1 = 0.016666668F * f;
            GL11.glPushMatrix();
            GL11.glTranslatef((float)par3 + 0.0F, (float)par5 + par1EntityLivingBase.height + 0.5F, (float)par7);
            GL11.glNormal3f(0.0F, 1.0F, 0.0F);
            GL11.glRotatef(-RenderManager.instance.playerViewY, 0.0F, 1.0F, 0.0F);
            GL11.glRotatef(RenderManager.instance.playerViewX, 1.0F, 0.0F, 0.0F);
            GL11.glScalef(-f1, -f1, f1);
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glDepthMask(false);
            GL11.glDisable(GL11.GL_DEPTH_TEST);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            Tessellator tessellator = Tessellator.instance;
            byte b0 = 0;
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            tessellator.startDrawingQuads();
            int j = fontrenderer.getStringWidth(par2Str) / 2;
            tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F);
            tessellator.addVertex((double)(-j - 1), (double)(-1 + b0), 0.0D);
            tessellator.addVertex((double)(-j - 1), (double)(8 + b0), 0.0D);
            tessellator.addVertex((double)(j + 1), (double)(8 + b0), 0.0D);
            tessellator.addVertex((double)(j + 1), (double)(-1 + b0), 0.0D);
            tessellator.draw();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, 553648127);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            GL11.glDepthMask(true);
            fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, -1);
            GL11.glEnable(GL11.GL_LIGHTING);
            GL11.glDisable(GL11.GL_BLEND);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            GL11.glPopMatrix();
        }
    }

Пихать в класс наследующий RenderPlayerBase (он из апи)

Поясню это:
Код:
            if(entity instanceof EntityPlayer)
            {
                EntityPlayer player = (EntityPlayer) entity;
                ExtendedPlayer props = ExtendedPlayer.get(player);
                if(props.nickname != null && props.nickname.length() >= 3)
                    s = props.nickname;
            }

Код:
ExtendedPlayer props = ExtendedPlayer.get(player);
Это IExtendedEntityProperties, где лежат кастомные ники. Получайте свои так-же или по-другому. Тут уж как вам нравится.

Код:
if(props.nickname != null && props.nickname.length() >= 3)
Тут чекаем что кастомный ник не нулл и кол-во символов больше или равно 3. Иначе рисуем юзернейм.
[merge_posts_bbcode]Добавлено: 22.07.2015 18:36:30[/merge_posts_bbcode]

Тестилось на 1.6.4 - работает. Не думаю что разница большая.
 
MrCreppo, спасибо. Сейчас попробую :)
[merge_posts_bbcode]Добавлено: 23.07.2015 02:31:31[/merge_posts_bbcode]

[font=Verdana, Helvetica, Arial, sans-serif]MrCreppo, спасибо большое. Все вышло :3[/font]
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху