Overlay и метедата (1.7.10)

4,167
68
693
Решил вынести вопрос в отдельную тему, так как ответа пока и не нашёл.
Задачи две:
1. Создать аналог обычного блока травы, чтобы верхняя грань красилась в цвет биома (с этим я разобрался, можно просто брать верхнюю грань с блока травы), а боковые использовали мои текстуры и через Overlay окрашивали верхнюю часть грани в тот же цвет биома. Т.е. обычная трава, но с кастомной текстурой земли.

Пока что Overlay нифига не фурычит, и грань окрашивается целиком.
Есть ли способ это исправить?

2. Задать зависимость работы Overlay от метадаты. Например, если мета = 1 - грань выглядит как трава и красится, если мета = 0 - грань просто берёт кастомную текстуру.

Может кто подскажет нужный метод?

Код выкладывать не буду, так как пока он идентичен коду травяного блока, только с моими текстурами.

Очень help!
 
Так, всем спасибо за ответы )))
Порыл инет и понял, что нужно таки писать свой рендер для блока земли.

Начал делать по забугорному тутору, но! игра вылетает на моменте создания клиент прокси.

Вот краш:
Код:
---- Minecraft Crash Report ----
// I let you down. Sorry 

Time: 04.07.15 11:01
Description: There was a severe problem during mod loading that has caused the game to fail

cpw.mods.fml.common.LoaderException: java.lang.ClassNotFoundException: ru.liahim.saltmod.client.SaltClientProxy
    at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:76)
    at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
    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 com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
    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 com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
    at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:522)
    at net.minecraft.client.Minecraft.run(Minecraft.java:931)
    at net.minecraft.client.main.Main.main(Main.java:164)
    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 net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
    at GradleStart.main(Unknown Source)
Caused by: java.lang.ClassNotFoundException: ru.liahim.saltmod.client.SaltClientProxy
    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at cpw.mods.fml.common.ModClassLoader.loadClass(ModClassLoader.java:58)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
    ... 35 more
Caused by: java.lang.NullPointerException
    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:182)
    ... 41 more


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

-- System Details --
Details:
    Minecraft Version: 1.7.10
    Operating System: Windows 7 (amd64) version 6.1
    Java Version: 1.8.0_40, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 687388160 bytes (655 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML: MCP v9.05 FML v7.10.85.1291 Minecraft Forge 10.13.2.1291 4 mods loaded, 4 mods active
    mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed
    FML{7.10.85.1291} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.2.1291.jar) Unloaded->Constructed
    Forge{10.13.2.1291} [Minecraft Forge] (forgeSrc-1.7.10-10.13.2.1291.jar) Unloaded->Constructed
    SaltMod{1.0.0} [Salt Mod] (bin) Unloaded->Errored

Может кто подскажет, в чём может быть беда?

Помню как-то давно тоже пытался создать проксю и та же фигня случалась.
 
Народ!
Прокся заработала! Рендер не идёт ни в какую, поэтому пока занялся метадатой.

Нашёл способ задать зависимость окраски блока от меты:
Код:
    @SideOnly(Side.CLIENT)
    public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
    {
        int i = 0;
        int j = 0;
        int k = 0;

        for (int l = -1; l <= 1; l++)
        {
            for (int i1 = -1; i1 <= 1; i1++)
            {
                int j1 = par1IBlockAccess.getBiomeGenForCoords(par2 + i1, par4 + l).getBiomeGrassColor(par2 + i1, par3, par4 + l);
                i += (j1 & 0xff0000) >> 16;
                j += (j1 & 0xff00) >> 8;
                k += j1 & 0xff;
            }
        }

        return par1IBlockAccess.getBlockMetadata(par2, par3, par4) > 6 ? (i / 9 & 0xff) << 16 | (j / 9 & 0xff) << 8 | k / 9 & 0xff : super.colorMultiplier(par1IBlockAccess, par2, par3, par4);

    }

Теперь вопрос: а как сделать так, чтобы красилась только верхняя часть блока? Сейчас при дате <= 6 он не красится, а при > 6 - красится целиком.
 
При этом, если использовать метод colorMultiplier без изменений, то есть тупо скопированный с травы:
Код:
return (i / 9 & 0xff) << 16 | (j / 9 & 0xff) << 8 | k / 9 & 0xff;
и верхнюю грань блока тоже взять с травы, то всё работает как надо: красится только верхняя часть блока, остальные при этом чисто мои.
НО! Если добавить:
Код:
return par1IBlockAccess.getBlockMetadata(par2, par3, par4) > 6 ? (i / 9 & 0xff) << 16 | (j / 9 & 0xff) << 8 | k / 9 & 0xff : super.colorMultiplier(par1IBlockAccess, par2, par3, par4);
Блок начинает красится целиком.

Нород! Хелп! Не могу понять в чём беда.
 
Назад
Сверху