Изменение уровня солнечного света в биоме

Версия Minecraft
1.12.2
API
Forge
395
34
90
Дратути

Решил я сделать так чтобы в биоме было всегда темно как ночью, нашел метод
getSunBrightness:
    @SideOnly(Side.CLIENT)
    public float getSunBrightness(float partialTicks)
    {
        return this.provider.getSunBrightness(partialTicks);
    }
как видно метод клиентский, сделал туда трансформер.
visitCode:
        @Override
        public void visitCode() {
            super.visitCode();

            mv.visitMethodInsn(Opcodes.INVOKESTATIC, HANDLER_PATH, "isClientPlayerInTaintBiome", "()Z", false);

            Label continueLabel = new Label();
            mv.visitJumpInsn(Opcodes.IFEQ, continueLabel);

            mv.visitLdcInsn(0.0f);
            mv.visitInsn(Opcodes.FRETURN);

            mv.visitLabel(continueLabel);
        }
Как подобает клиентскому методу сделал клиентскую проверку.
Проверка:
    public static boolean isClientPlayerInTaintBiome() { // не бейти меня это тестовый вариант!
        if (Minecraft.getMinecraft().player != null && Minecraft.getMinecraft().world != null) {
            EntityPlayerSP player = Minecraft.getMinecraft().player;
            World world = Minecraft.getMinecraft().world;
//            return world.getBiome(player.getPosition()).equals(InitBiome.TAINT);
            return world.getBiome(player.getPosition()).equals(Biomes.BEACH);
        } else {
            return false;
        }
    }
Работает! но каким-то магическим образом когда я стою (в данном случае на пляже) везде начинают спавнится ночные мобы, и зомби скелеты и т.д не горят
я конечно понимаю что все это привязано к уровню освещенности. Но это клиентский метод! магия какаято...
Почему так? Как быть? ((

Можно конечно в методе decorate() покрывать небо над биомом блоком по типу air который не пропускает свет но это помойму костыль.
 
Последнее редактирование:
Решение
getSunBrightness клиентский, освещение, которое он возвращает, всё равно участвует в вычислениях, которые могут косвенно влиять на сервер, я не знаю что можно поделать, но попробуй сделать свой кастомный обработчик спавна мобов и запихни его в свой биом.
getSunBrightness клиентский, освещение, которое он возвращает, всё равно участвует в вычислениях, которые могут косвенно влиять на сервер, я не знаю что можно поделать, но попробуй сделать свой кастомный обработчик спавна мобов и запихни его в свой биом.
 
Надо было трансформерить метод
Метод:
    @SideOnly(Side.CLIENT)
    public float getSunBrightnessBody(float partialTicks)
    {
        float f = this.getCelestialAngle(partialTicks);
        float f1 = 1.0F - (MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.2F);
        f1 = MathHelper.clamp(f1, 0.0F, 1.0F);
        f1 = 1.0F - f1;
        f1 = (float)((double)f1 * (1.0D - (double)(this.getRainStrength(partialTicks) * 5.0F) / 16.0D));
        f1 = (float)((double)f1 * (1.0D - (double)(this.getThunderStrength(partialTicks) * 5.0F) / 16.0D));
        return f1 * 0.8F + 0.2F;
    }
вроде работает нормально
 
Назад
Сверху