FluidContainerRegistry или же свое ведро для жижи

Doc

Золотая лига
Сообщения
2,343
Лучшие ответы
126
Симпатии
302
#1
Версия Minecraft
1.12.2
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
В одной теме говорилось, как сделать свое ведро для жижи..
Создаёшь ведро жидкости унаследованное от ItemBucket, в конструктор пишешь "setContainerItem(Items.bucket);", потом регаешь FluidContainerRegistry.registerFluidContainer(new FluidStack(жидкость, FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(твоё_ведро), new ItemStack(пустое_ведро)); потом пишешь, BucketHandler.INSTANCE.bucket.put(блок_твоей_жидкости, твоё_ведро); потом пишешь MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); Ну вроде всё, дальше регаешь рендер для своего ведра.
Но, вот есть проблема, что FluidContainerRegistry нету в 1.12.
После поиска по исходникам, его замены я не нашел.
Что нужно юзать?
 

Liahim

Золотая лига
Сообщения
3,284
Лучшие ответы
40
Симпатии
214
#2
Там есть универсальное ведро от форджа...
В главном класса включаешь его static { FluidRegistry.enableUniversalBucket(); }
Ну и при регистрации жидкости пишешь FluidRegistry.addBucketForFluid(жидкость);
 

Doc

Золотая лига
Сообщения
2,343
Лучшие ответы
126
Симпатии
302
#3

Liahim

Золотая лига
Сообщения
3,284
Лучшие ответы
40
Симпатии
214
#4
С кастомным сложнее...
Глянь исходники BOP-а... Там они как-то это делают, но у меня не получилось.
 

BlesseNtumble

Железная лига
Сообщения
881
Лучшие ответы
41
Симпатии
114
#5
Костылями через FillBucketEvent делается.
Вот кусок из GC
Java:
 if (GCBlocks.fuel != null && !FluidRegistry.getBucketFluids().contains(fluidFuel))
        {
            FluidRegistry.addBucketForFluid(GCFluids.fluidFuel);  //Create a Universal Bucket AS WELL AS our type, this is needed to pull fuel out of other mods tanks
            GCItems.bucketFuel = new ItemBucketGC(GCBlocks.fuel, fluidFuel);
            GCItems.bucketFuel.setUnlocalizedName("bucket_fuel");
            GCItems.registerItem(GCItems.bucketFuel);
            EventHandlerGC.bucketList.put(GCBlocks.fuel, GCItems.bucketFuel);
        }
EventHandlerGC
Java:
public static Map<Block, Item> bucketList = new HashMap<Block, Item>(4, 1F);

private ItemStack fillBucket(World world, RayTraceResult position)
    {
        IBlockState state = world.getBlockState(position.getBlockPos());
        Block block = state.getBlock();

        Item bucket = bucketList.get(block);

        if (bucket != null && block.getMetaFromState(state) == 0)
        {
            world.setBlockToAir(position.getBlockPos());
            return new ItemStack(bucket);
        }

        return null;
    }

    @SubscribeEvent
    public void onBucketFill(FillBucketEvent event)
    {
        if (event.getEmptyBucket() == null || !(event.getEmptyBucket().getItem() instanceof ItemBucket))
        {
            return;
        }
        RayTraceResult pos = event.getTarget();
        if (pos == null)
        {
            return;
        }

        ItemStack ret = fillBucket(event.getWorld(), pos);

        if (ret == null)
        {
            return;
        }

        event.setFilledBucket(ret);
        event.setResult(Result.ALLOW);
    }
 

Doc

Золотая лига
Сообщения
2,343
Лучшие ответы
126
Симпатии
302
#6
Т.Е. В место нормального, уже готового класса они предлагают делать велосипеды? Умно со стороны Forge..
 

BlesseNtumble

Железная лига
Сообщения
881
Лучшие ответы
41
Симпатии
114
#7
Ну.. Forge сделали универсальные ведра, с одной стороны да, умно....
 
Сверху