Как прописать рендер для EntityThrowable, чтобы отображался блок, а не предмет?

Версия Minecraft
1.12.2
117
7
Как сделать так, чтобы EntityThrowable отображался не как летящий айтем, а как летящий блок. Пытался написать свой EntityThrowable, объединенный с EntityFallingBlock и сделать рендер по аналогии с EntityThrowable из туториала, но игра крашится при вызове этого ентити. Понял, что проблема не в ентити, а в моем неумении создавать рендер для разных типов ентити. Вот краш-лог и код из рендера:

Код:
---- Minecraft Crash Report ----
// Uh... Did I do that?

Time: 11/24/18 5:40 PM
Description: Rendering entity in world

java.lang.ClassCastException: ru.mark0wka.left4zombies.entity.EntityBlock cannot be cast to net.minecraft.entity.item.EntityFallingBlock
    at net.minecraft.client.renderer.entity.RenderFallingBlock.doRender(RenderFallingBlock.java:20)
    at net.minecraft.client.renderer.entity.RenderManager.renderEntity(RenderManager.java:390)
    at net.minecraft.client.renderer.entity.RenderManager.renderEntityStatic(RenderManager.java:374)
    at net.minecraft.client.renderer.RenderGlobal.renderEntities(RenderGlobal.java:655)
    at net.minecraft.client.renderer.EntityRenderer.renderWorldPass(EntityRenderer.java:1398)
    at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1312)
    at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1115)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1207)
    at net.minecraft.client.Minecraft.run(Minecraft.java:441)
    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:25)


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

-- Head --
Thread: Client thread
Stacktrace:
    at net.minecraft.client.renderer.entity.RenderFallingBlock.doRender(RenderFallingBlock.java:20)

-- Entity being rendered --
Details:
    Entity Type: l4z:stone (ru.mark0wka.left4zombies.entity.EntityBlock)
    Entity ID: 103195
    Entity Name: entity.l4z:stone.name
    Entity's Exact location: -73.98, 19.90, -508.34
    Entity's Block location: World: (-74,19,-509), Chunk: (at 6,1,3 in -5,-32; contains blocks -80,0,-512 to -65,255,-497), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1)
    Entity's Momentum: 0.00, 0.00, 0.00
    Entity's Passengers: []
    Entity's Vehicle: ~~ERROR~~ NullPointerException: null

-- Renderer details --
Details:
    Assigned renderer: net.minecraft.client.renderer.entity.RenderFallingBlock@7aaa6200
    Location: 0.00,0.00,0.00 - World: (0,0,0), Chunk: (at 0,0,0 in 0,0; contains blocks 0,0,0 to 15,255,15), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
    Rotation: 0.0
    Delta: 0.56000644
Stacktrace:
    at net.minecraft.client.renderer.entity.RenderManager.renderEntity(RenderManager.java:390)
    at net.minecraft.client.renderer.entity.RenderManager.renderEntityStatic(RenderManager.java:374)
    at net.minecraft.client.renderer.RenderGlobal.renderEntities(RenderGlobal.java:655)
    at net.minecraft.client.renderer.EntityRenderer.renderWorldPass(EntityRenderer.java:1398)
    at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1312)

-- Affected level --
Details:
    Level name: MpServer
    All players: 1 total; [EntityPlayerSP['Player344'/115, l='MpServer', x=-73.98, y=19.90, z=-508.34]]
    Chunk stats: MultiplayerChunkCache: 625, 625
    Level seed: 0
    Level generator: ID 01 - flat, ver 0. Features enabled: false
    Level generator options:
    Level spawn location: World: (6,4,-437), Chunk: (at 6,0,11 in 0,-28; contains blocks 0,0,-448 to 15,255,-433), Region: (0,-1; contains chunks 0,-32 to 31,-1, blocks 0,0,-512 to 511,255,-1)
    Level time: 413129 game time, 7081 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: 56 total; [EntitySlime['Слизень'/8192, l='MpServer', x=-124.60, y=4.00, z=-578.01], EntitySlime['Слизень'/16, l='MpServer', x=-146.16, y=4.00, z=-581.90], EntitySlime['Слизень'/17, l='MpServer', x=-153.84, y=4.00, z=-583.78], EntitySlime['Слизень'/18, l='MpServer', x=-152.57, y=4.00, z=-581.55], EntitySlime['Слизень'/19, l='MpServer', x=-137.13, y=4.00, z=-575.21], EntitySlime['Слизень'/20, l='MpServer', x=-145.00, y=4.00, z=-549.70], EntitySlime['Слизень'/21, l='MpServer', x=-129.44, y=4.00, z=-543.29], EntitySlime['Слизень'/22, l='MpServer', x=-130.84, y=4.00, z=-538.87], EntitySlime['Слизень'/23, l='MpServer', x=-124.31, y=4.42, z=-450.40], EntityBlock['entity.l4z:stone.name'/103195, l='MpServer', x=-73.98, y=19.90, z=-508.34], EntitySlime['Слизень'/27, l='MpServer', x=-122.38, y=4.14, z=-578.07], EntitySlime['Слизень'/28, l='MpServer', x=-134.23, y=4.28, z=-568.85], EntitySlime['Слизень'/29, l='MpServer', x=-111.18, y=4.00, z=-555.27], EntitySlime['Слизень'/30, l='MpServer', x=-109.56, y=5.17, z=-562.07], EntitySlime['Слизень'/31, l='MpServer', x=-129.98, y=2.00, z=-490.55], EntitySlime['Слизень'/34, l='MpServer', x=-110.14, y=4.00, z=-577.58], EntitySlime['Слизень'/35, l='MpServer', x=-91.97, y=5.10, z=-569.92], EntitySlime['Слизень'/36, l='MpServer', x=-99.89, y=4.00, z=-561.43], EntitySlime['Слизень'/38, l='MpServer', x=-95.85, y=4.17, z=-517.39], EntitySlime['Слизень'/39, l='MpServer', x=-102.79, y=2.10, z=-458.29], EntitySlime['Слизень'/46121, l='MpServer', x=-114.13, y=4.14, z=-578.66], EntitySlime['Слизень'/75819, l='MpServer', x=-138.23, y=4.27, z=-557.43], EntitySlime['Слизень'/45, l='MpServer', x=-84.69, y=4.92, z=-579.14], EntitySlime['Слизень'/52, l='MpServer', x=-73.39, y=4.00, z=-587.09], EntitySlime['Слизень'/53, l='MpServer', x=-68.06, y=4.04, z=-553.31], EntitySlime['Слизень'/54, l='MpServer', x=-67.19, y=4.76, z=-555.14], EntitySlime['Слизень'/55, l='MpServer', x=-57.28, y=4.76, z=-559.61], EntitySlime['Слизень'/56, l='MpServer', x=-71.95, y=4.00, z=-541.47], EntitySlime['Слизень'/57, l='MpServer', x=-65.05, y=4.72, z=-464.77], EntitySlime['Слизень'/58, l='MpServer', x=-84.79, y=4.92, z=-458.29], EntitySlime['Слизень'/62, l='MpServer', x=-34.25, y=4.55, z=-562.44], EntitySlime['Слизень'/63, l='MpServer', x=-68.65, y=4.00, z=-456.00], EntityCow['Корова'/65, l='MpServer', x=-30.78, y=4.00, z=-449.57], EntitySlime['Слизень'/66, l='MpServer', x=-63.85, y=4.27, z=-457.98], EntityPlayerSP['Player344'/115, l='MpServer', x=-73.98, y=19.90, z=-508.34], EntitySlime['Слизень'/66114, l='MpServer', x=-119.05, y=5.25, z=-504.36], EntityXPOrb['Сфера опыта'/69, l='MpServer', x=-22.22, y=4.00, z=-626.61], EntityXPOrb['Сфера опыта'/70, l='MpServer', x=-26.97, y=4.00, z=-627.50], EntityXPOrb['Сфера опыта'/71, l='MpServer', x=-24.96, y=4.00, z=-638.55], EntityXPOrb['Сфера опыта'/72, l='MpServer', x=-23.10, y=4.00, z=-638.67], EntityXPOrb['Сфера опыта'/73, l='MpServer', x=-25.01, y=4.00, z=-632.88], EntityXPOrb['Сфера опыта'/74, l='MpServer', x=-26.43, y=4.00, z=-634.07], EntityXPOrb['Сфера опыта'/75, l='MpServer', x=-31.79, y=4.00, z=-633.40], EntityXPOrb['Сфера опыта'/76, l='MpServer', x=-27.71, y=4.00, z=-632.41], EntityChicken['Курица'/80, l='MpServer', x=-29.92, y=4.00, z=-534.90], EntityXPOrb['Сфера опыта'/83, l='MpServer', x=-10.91, y=4.00, z=-632.83], EntityXPOrb['Сфера опыта'/84, l='MpServer', x=-14.64, y=4.00, z=-631.77], EntityChicken['Курица'/86, l='MpServer', x=-13.22, y=4.00, z=-464.54], EntityPig['Свинья'/87, l='MpServer', x=-5.21, y=4.00, z=-466.60], EntitySlime['Слизень'/40031, l='MpServer', x=-104.19, y=5.25, z=-563.94], EntityXPOrb['Сфера опыта'/116, l='MpServer', x=-17.93, y=4.00, z=-640.69], EntitySlime['Слизень'/47220, l='MpServer', x=-134.43, y=5.17, z=-547.32], EntityXPOrb['Сфера опыта'/117, l='MpServer', x=-20.71, y=4.00, z=-642.74], EntityXPOrb['Сфера опыта'/118, l='MpServer', x=-21.00, y=4.00, z=-641.56], EntityXPOrb['Сфера опыта'/119, l='MpServer', x=-24.85, y=4.00, z=-646.45], EntityXPOrb['Сфера опыта'/120, l='MpServer', x=-23.44, y=4.00, z=-642.57]]
    Retry entities: 0 total; []
    Server brand: fml,forge
    Server type: Integrated singleplayer server
Stacktrace:
    at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:461)
    at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2886)
    at net.minecraft.client.Minecraft.run(Minecraft.java:462)
    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:25)

Код:
public class RenderEntityBlock implements IRenderFactory
{

    public final Block block;

    public RenderEntityBlock(Block block)
    {
        this.block = block;
    }

    @Override
    public Render createRenderFor(RenderManager manager)
    {
        return new RenderFallingBlock(manager);
    }
}
 
917
22
332
  • Вот мой тутуриал про то, как создать предмет... Если тебе нужен небольшой блок, то может сработать Item#getItemFromBlock когда ты передаёшь в констуктор RenderFactory item (Сам не проверял).
  • Если тебе нужен блок в натуральную величину, то стоит написать свой рендер falling block, ибо с ванильным какие-то проблемы есть, уже не момню что, но раньше сталкивался.
  • Однако, мне кажется тебе вовсе не обязательно писать свой рендер... Не проще призывать обычный falling block (ванильный) и настраивать его как тебе угодно? Там вроде бы есть всё что нужно, и летать такой блок может в любом направлении. Только вокруг своего центра не вращается.
 
117
7
Написал рендер для ентити. Скопировал RenderFallingBlock и подправил там значения. Но игра все равно крашится. Еще не понял как зарегистрировать рендер в ClientProxy. Вот что в прокси получилось прописать:
Код:
public void preInit(FMLPreInitializationEvent event)
    {
        super.preInit(event);
        RenderingRegistry.registerEntityRenderingHandler(EntityBlock.class, new RenderEntityBlock(null));
    }

---- Minecraft Crash Report ----
// Don't be sad, have a hug! <3

Time: 11/26/18 11:16 PM
Description: Post-rendering entity in world

java.lang.NullPointerException: Post-rendering entity in world
at net.minecraft.client.renderer.entity.Render.doRenderShadowAndFire(Render.java:332)
at net.minecraft.client.renderer.entity.RenderManager.renderEntity(RenderManager.java:401)
at net.minecraft.client.renderer.entity.RenderManager.renderEntityStatic(RenderManager.java:374)
at net.minecraft.client.renderer.RenderGlobal.renderEntities(RenderGlobal.java:655)
at net.minecraft.client.renderer.EntityRenderer.renderWorldPass(EntityRenderer.java:1398)
at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1312)
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1115)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1207)
at net.minecraft.client.Minecraft.run(Minecraft.java:441)
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:25)
 
Сверху