Динамит

Версия Minecraft
1.12.2
API
Forge
48
4
19
Класс блока:
public class TutTNT extends BlockTNT {
    public TutTNT(String name) {
        this.setRegistryName(name);
        this.setDefaultState(this.blockState.getBaseState().withProperty(EXPLODE, Boolean.valueOf(false)));
        this.setCreativeTab(CreativeTabs.REDSTONE);

    }
}
далее регистрируем с помощью
public static BlockTNT TUT_TNT = new TutTNT("tut_tnt");


ну и результат 1621009736291.pngесли поставить редстоун - бабахнет. Удачи
 

VeniVidiVici

Санта Барбарис
327
15
198
у блока отсутствует текстура
Об этом есть тут: Создание блока - MC Modding Учебник

при активации подставляется текстура
При активации Block заменяется на Entity, подробнее можно посмотреть в методах самого BlockTNT. Если нужен свой формат, нужен будет и свой EntityTNT
 
46
1
2
Я прописал explode в blockstates и текстура появилась.
При активации Block заменяется на Entity, подробнее можно посмотреть в методах самого BlockTNT. Если нужен свой формат, нужен будет и свой EntityTNT
А как создать этот EntityTNT?
 
48
4
19
@neverlessy Спасибо, действительно работает, но теперь у блока отсутствует текстура и при активации подставляется текстура обычного динамита ( Как исправить, что бы была моя текстура?
текстура должна называться регистрационным именем
tut_tnt.png в папке textures/blocks
если не ошибаюсь, при активации он превращается в Entity и использует ту же текстуру динамита.
Создаешь класс, наследуешь EntityTnt и ставишь свое регистрационное имя. Профит
(Поправьте если не прав, теория, не хочу сейчас идею расчехлять)

+ должна быть модель с указанием текстуры и blockstate
 

VeniVidiVici

Санта Барбарис
327
15
198
Я уже все перепробовал, но у меня стандартная текстура, а сам динамит полностью работает
Повторяя всех комментаторов выше..
Тебе нужен свой net.minecraft.entity.item.EntityTNTPrimed
Для которого будет создан и зареган свой рендер net.minecraft.client.renderer.entity.RenderTNTPrimed,
где в методе public void doRender() будет this.blockRenderer.renderBlockAsItem(Blocks.tnt.. (строки 58 и 67) заменён блок на твой, например this.blockRenderer.renderBlockAsItem(MyBlocks.MyTnt...
 
46
1
2
Для которого будет создан и зареган свой рендер net.minecraft.client.renderer.entity.RenderTNTPrimed,
где в методе public void doRender() будет this.blockRenderer.renderBlockAsItem(Blocks.tnt.. (строки 58 и 67) заменён блок на твой, например this.blockRenderer.renderBlockAsItem(MyBlocks.MyTnt...
В net.minecraft.client.renderer.entity.RenderTNTPrimed нет this.blockRenderer.renderBlockAsItem
 

VeniVidiVici

Санта Барбарис
327
15
198
46
1
2
@VeniVidiVici Все равно не работает
Зарегал тут:
Java:
public class RenderHandler {
    public static void registerEntityRenders(){
        RenderingRegistry.registerEntityRenderingHandler(EntityMyTNTPrimed.class, RenderMyTNTPrimed::new);
    }
}
Java:
@EventHandler
public void init(FMLInitializationEvent event)
{
    // some example code
    logger.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
    ItemsRegister.registerRender();
    BlocksRegister.registerBlocksRender();
    RenderHandler.registerEntityRenders();
}
Сам рендер:
Java:
@SideOnly(Side.CLIENT)
public class RenderMyTNTPrimed extends Render<EntityMyTNTPrimed>
{
    public RenderMyTNTPrimed(RenderManager renderManagerIn)
    {
        super(renderManagerIn);
        this.shadowSize = 0.5F;
    }

    public void doRender(EntityMyTNTPrimed entity, double x, double y, double z, float entityYaw, float partialTicks)
    {
        BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
        GlStateManager.pushMatrix();
        GlStateManager.translate((float)x, (float)y + 0.5F, (float)z);

        if ((float)entity.getFuse() - partialTicks + 1.0F < 10.0F)
        {
            float f = 1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 10.0F;
            f = MathHelper.clamp(f, 0.0F, 1.0F);
            f = f * f;
            f = f * f;
            float f1 = 1.0F + f * 0.3F;
            GlStateManager.scale(f1, f1, f1);
        }

        float f2 = (1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 100.0F) * 0.8F;
        this.bindEntityTexture(entity);
        GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
        GlStateManager.translate(-0.5F, -0.5F, 0.5F);
        blockrendererdispatcher.renderBlockBrightness(BlocksRegister.my_tnt.getDefaultState(), entity.getBrightness());
        GlStateManager.translate(0.0F, 0.0F, 1.0F);

        if (this.renderOutlines)
        {
            GlStateManager.enableColorMaterial();
            GlStateManager.enableOutlineMode(this.getTeamColor(entity));
            blockrendererdispatcher.renderBlockBrightness(BlocksRegister.my_tnt.getDefaultState(), 1.0F);
            GlStateManager.disableOutlineMode();
            GlStateManager.disableColorMaterial();
        }
        else if (entity.getFuse() / 5 % 2 == 0)
        {
            GlStateManager.disableTexture2D();
            GlStateManager.disableLighting();
            GlStateManager.enableBlend();
            GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.DST_ALPHA);
            GlStateManager.color(1.0F, 1.0F, 1.0F, f2);
            GlStateManager.doPolygonOffset(-3.0F, -3.0F);
            GlStateManager.enablePolygonOffset();
            blockrendererdispatcher.renderBlockBrightness(BlocksRegister.my_tnt.getDefaultState(), 1.0F);
            GlStateManager.doPolygonOffset(0.0F, 0.0F);
            GlStateManager.disablePolygonOffset();
            GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            GlStateManager.disableBlend();
            GlStateManager.enableLighting();
            GlStateManager.enableTexture2D();
        }

        GlStateManager.popMatrix();
        super.doRender(entity, x, y, z, entityYaw, partialTicks);
    }


    protected ResourceLocation getEntityTexture(EntityMyTNTPrimed entity)
    {
        return TextureMap.LOCATION_BLOCKS_TEXTURE;
    }
}
 
Сверху