Жидкость

Жидкость

Версия(и) Minecraft
1.12.2
Иногда появляется нужда в создании жидкости. Мы рассмотрим как это сделать.
Основа
Java:
public class FluidOil extends Fluid
{
    public FluidOil(String fluidName, ResourceLocation still, ResourceLocation flowing)
    {
        super(fluidName, still, flowing);
    }
}
Java:
public class BlockOilFluid extends BlockFluidClassic
{
    public BlockOilFluid(Fluid fluid)
    {
        super(fluid, Material.WATER);
        setRegistryName("oil");
    }
}
Разберем:
FluidOil - Собственно сама жидкость.
BlockOilFluid - Блок жидкости. Если нам надо установить жидкость в мир, то нам надо ставить именно его.
Регистрация
Создадим класс FluidRegister
Java:
public class FluidRegister
{
    public static final FluidOil OIL = (FluidOil) new FluidOil("oil",
            new ResourceLocation(Tut.MOD_ID, "fluid/oil_still"),
            new ResourceLocation(Tut.MOD_ID, "fluid/oil_flow"))
            .setDensity(1100)
            .setGaseous(false)
            .setLuminosity(5)
            .setViscosity(900)
            .setTemperature(300)
            .setUnlocalizedName("oil");

    public static void register()
    {
        registerFluid(OIL);
    }
    public static void registerFluid(Fluid fluid)
    {
        FluidRegistry.registerFluid(fluid);
        FluidRegistry.addBucketForFluid(fluid);
    }
}
Разберем:
OIL - Объект жидкости.
"oil" - Имя жидкости.
new ResourceLocation(Tut.MOD_ID, "fluid/oil_still") - Путь до текстуры жидкости в стоячем состоянии.
new ResourceLocation(Tut.MOD_ID, "fluid/oil_flow") - Путь до текстуры жидкости в текущем состоянии.
setDensity - Плотность. Влияет на скорость движения сущностей. По умолчанию 1000.
setGaseous - Если true то течет вверх. По умолчанию false.
setLuminosity - Уровень светимости. По умолчанию 0.
setViscosity - Влияет на скорость течения. Больше значение меньше скорость. По умолчанию 1000.
setTemperature - Температура. По умолчанию 300.
setUnlocalizedName - Ключ локализации.
setColor - Цвет.
Все значения по умолчанию повторяют соответственные у воды.
Все что выше можно вызывать в конструкторе жидкости.
register() - Метод регистрации, вызываемый из прокси.
RegisterFluid(Fluid fluid) - Регистация жидкости(чтоб не повторять код)

Теперь осталось добавить FluidRegister.register() в preinit перед регистрацией блоков, иначе будет NPE. Теперь надо зарегистрировать блок жидкости в BlocksRegister. Не забудем добавить зарегистрировать рендер в registerRender:
Java:
public class BlocksRegister
{
    public static Block BEST_STONE = new BlockBestStone("best_stone"),
                        OIL_BLOCK = new BlockOilFluid(FluidRegister.OIL);

    public static void register()
    {
        setRegister(BEST_STONE);
        setRegister(OIL_BLOCK);
    }

    @SideOnly(Side.CLIENT)
    public static void registerRender()
    {
        setRender(BEST_STONE);
        setRender(OIL_BLOCK);
    }

    private static void setRegister(Block block)
    {
        ForgeRegistries.BLOCKS.register(block);
        ForgeRegistries.ITEMS.register(new ItemBlock(block).setRegistryName(block.getRegistryName()));
    }

    @SideOnly(Side.CLIENT)
    private static void setRender(Block block)
    {
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), "inventory"));
    }
}
Запускаем игру и наслаждаемся! Но увы черно-розовыми квадратами...... Давайте Это исправим! Создадим oil.json в blockstates. Заполним подобным образом:
Java:
{
    "forge_marker": 1,
    "defaults": {
        "textures": {
            "particle": "tut:fluid/oil_flow",
            "all": "tut:fluid/oil_flow"
        },
        "model": "forge:fluid",
         "custom": { "fluid": "juise" },
         "uvlock": false
    },
    "variants": {
        "normal": [{

        }],
        "inventory": [{

        }],
        "level": {
            "0": { },
            "1": { },
            "2": { },
            "3": { },
            "4": { },
            "5": { },
            "6": { },
            "7": { },
            "8": { },
            "9": { },
            "10": { },
            "11": { },
            "12": { },
            "13": { },
            "14": { },
            "15": { }
        }
    }
}
Осталось положить текстуру в assets/tut/textures/fluid и наконец насладиться результатом.
1591445123660.png

Ведерко

Чтоб добавить ведерко(сразу всем жидкостям) добавьте в главный класс мода static { FluidRegistry.enableUniversalBucket(); }.
Автор
WildTan
Просмотры
250
Первый выпуск
Обновление
Оценка
4.00 звёзд 2 оценок

Другие ресурсы пользователя WildTan

Последние рецензии

Полезное руководство, учитывая, что на данную версию, про создание жидкости толком ничего нет.
Полезно и просто, но суховато, оформление получше.
WildTan
WildTan
"оформление получше" чем у предыдущий моих или надо получше?
Сверху