- Версия(и) 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
и наконец насладиться результатом.Ведерко
Чтоб добавить ведерко(сразу всем жидкостям) добавьте в главный класс мода
static { FluidRegistry.enableUniversalBucket(); }
.