Синхронизация рендера игроков

Версия Minecraft
1.7.10
1,007
36
206
Сделал всё, что хотел, но тут неприятный баг. Модель рендерится не на том игроке
Java:
@SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void changePlayerRender(RenderPlayerEvent.Pre event) {   
       
        if(((EntityPlayer) event.entity).getEntityAttribute(MODID.MODEL).getAttributeValue() == 1 && ((EntityPlayer) event.entity).isSneaking()){
        event.setCanceled(true);
            GL11.glPushMatrix();
            GL11.glTranslatef(0.0F, -2.28F, 0.0F);  
            GL11.glScalef(0.1F, 0.1F, 0.1F);
            GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
            Minecraft.getMinecraft().renderEngine.bindTexture(texture2);
            GL11.glDisable(GL11.GL_LIGHTING);
            model.render(null, 0, 0, 0, 0, 0, 0.625F);
            GL11.glEnable(GL11.GL_LIGHTING);
            GL11.glPopMatrix();  
        }
        if(((EntityPlayer) event.entity).getEntityAttribute(MODID.MODEL).getAttributeValue() == 1 && !((EntityPlayer) event.entity).isSneaking()){
            GL11.glPushMatrix();
       
        GL11.glTranslatef(0.0F, -1.5F, 0.0F);  
        GL11.glScalef(0.08F, 0.08F, 0.08F);
        GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
        GL11.glRotated(interpolate(((EntityPlayer) event.entity).prevRenderYawOffset, ((EntityPlayer) event.entity).renderYawOffset, event.partialRenderTick), 0, 1, 0);
        Minecraft.getMinecraft().renderEngine.bindTexture(texture2);
        GL11.glDisable(GL11.GL_LIGHTING);
        if (color != -1) {
            float red = (float)(color >> 16 & 255) / 255F;
            float blue = (float)(color >> 8 & 255) / 255F;
            float green = (float)(color & 255) / 255F;
            GL11.glColor3f(red, blue, green);
        }
        model.render(null, 0, 0, 0, 0, 0, 0.625F);
        GL11.glEnable(GL11.GL_LIGHTING);
        GL11.glPopMatrix();
        }
    }      
    public static double interpolate(double last, double now, float partialTicks) {
        return last + (now - last) * partialTicks;
    }
1522855840023-png.1760
Справа хост, слева клиент. И такое происходит только когда игрок слева видит игрока справа(попадает экран). Какие есть варианты, чтобы закрепить этот куст только за нужным игроком?
 
Решение
Вот пример кода с рендером крыльев за спиной у всех игроков:
Java:
public static void render(RenderWorldLastEvent e) {
        if (!AlfheimConfig.enableWingsNonAlfheim && Minecraft.getMinecraft().theWorld.provider.dimensionId != AlfheimConfig.dimensionIDAlfheim) return;
        EntityPlayer thePlayer = Minecraft.getMinecraft().thePlayer;
        List<EntityPlayer> list = Minecraft.getMinecraft().theWorld.playerEntities;
        for (EntityPlayer player : list) {
            if (EnumRace.getRace(player) == EnumRace.HUMAN || (thePlayer.equals(player) && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0)) continue;
            
            glPushMatrix();
            glDisable(GL_CULL_FACE);
            glEnable(GL_BLEND)...
1,976
68
220
Ты не перемещаешь ей к нужному игроку.
Я так понял, оно может быть сразу на нескольких, так что сделай итерацию по списку игроков из theWorld'а и рендерь при условии не первого лица и несоответствия thePlayer текущему итерируемому.
 
1,976
68
220
Вот пример кода с рендером крыльев за спиной у всех игроков:
Java:
public static void render(RenderWorldLastEvent e) {
        if (!AlfheimConfig.enableWingsNonAlfheim && Minecraft.getMinecraft().theWorld.provider.dimensionId != AlfheimConfig.dimensionIDAlfheim) return;
        EntityPlayer thePlayer = Minecraft.getMinecraft().thePlayer;
        List<EntityPlayer> list = Minecraft.getMinecraft().theWorld.playerEntities;
        for (EntityPlayer player : list) {
            if (EnumRace.getRace(player) == EnumRace.HUMAN || (thePlayer.equals(player) && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0)) continue;
            
            glPushMatrix();
            glDisable(GL_CULL_FACE);
            glEnable(GL_BLEND);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
            glDisable(GL_LIGHTING);
            
            glDepthMask(false);
            glDisable(GL_ALPHA_TEST);
            
            OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
            glColor4d(1, 1, 1, Math.min(0.75 + (float) Math.cos((double) (player.ticksExisted + e.partialTicks) * 0.3) * 0.2, 1));
            
            if (!player.equals(thePlayer)) {
                ASJUtilities.interpolatedTranslation(player, e.partialTicks);
                ASJUtilities.interpolatedTranslationReverse(thePlayer, e.partialTicks);
                glTranslated(0, 1.5 + Minecraft.getMinecraft().thePlayer.eyeHeight, 0);
            }
            
            if (player.isRiding() && player.ridingEntity instanceof EntityHorse) {
                glRotated(-ASJUtilities.interpolate(player.prevRotationYaw, player.rotationYaw, e.partialTicks), 0, 1, 0);
            } else {
                glRotated(-ASJUtilities.interpolate(player.prevRenderYawOffset, player.renderYawOffset, e.partialTicks), 0, 1, 0);
            }
            glRotated(180, 1, 0, 0);
            if (player.isSneaking()) {
                glRotated(28.64789, 1, 0, 0);
                glTranslated(0, 0, -0.1);
            }
            
            // Icon
            glPushMatrix();
            glTranslated(-0.25, 0.25, 0.15);
            double si = 0.5;
            glScaled(si, si, si);
            drawRect(Tessellator.instance, getPlayerIconTexture(player));
            glPopMatrix();
            
            player.sendPlayerAbilities();
            boolean flying = player.capabilities.isFlying;
            float ry = 20F + (float) ((Math.sin((double) (player.ticksExisted + e.partialTicks) * (flying ? 0.4F : 0.2F)) + 0.5F) * (flying ? 30F : 5F));
    
            // Wing left
            glPushMatrix();
            glTranslated(0.25, 0.1, 0.15);
            double swr = 1.5;
            glScaled(swr, swr, swr);
            glRotated(10, 0, 0, 1);
            glRotated(-ry, 0, 1, 0);
            drawRect(Tessellator.instance, getPlayerWingTexture(player));
            glPopMatrix();
            
            // Wing right
            glPushMatrix();
            glTranslated(-0.25, 0.1, 0.15);
            double swl = 1.5;
            glScaled(-swl, swl, swl);
            glRotated(10, 0, 0, 1);
            glRotated(-ry, 0, 1, 0);
            drawRect(Tessellator.instance, getPlayerWingTexture(player));
            glPopMatrix();
    
            glColor4d(1, 1, 1, 1);
            glEnable(GL_ALPHA_TEST);
            glDepthMask(true);

            glDisable(GL_BLEND);
            glEnable(GL_CULL_FACE);
            glPopMatrix();
            
            if (Minecraft.getMinecraft().theWorld.getTotalWorldTime() % 10 == 0) {
                double x = player.posX - 0.25;
                double y = player.posY - 0.5 + (thePlayer.equals(player) ? 0 : 1.5);
                double z = player.posZ - 0.25;
                Botania.proxy.sparkleFX(player.worldObj, x + Math.random() * player.width * 2.0, y + Math.random() * 0.8, z + Math.random() * player.width * 2.0, 1, 1, 1, 2F * (float) Math.random(), 20);
            }
        }
    }
    
    private static void drawRect(Tessellator tes, ResourceLocation texture) {
        Minecraft.getMinecraft().renderEngine.bindTexture(texture);
        tes.startDrawingQuads();
        tes.addVertexWithUV(0, 0, 0, 1, 0);
        tes.addVertexWithUV(0, 1, 0, 1, 1);
        tes.addVertexWithUV(1, 1, 0, 0, 1);
        tes.addVertexWithUV(1, 0, 0, 0, 0);
        tes.draw();
    }
Просто удали проверку расы и замени отрисовку крыльев на своё
 
Сверху