Пару вопросов про ведра и жидкости.

1,057
50
234
Добрый день. Снова я и снова с вопросами.

Вопрос 1) У меня имеется 2 жидкости и 2 новых ведра с этими жидкостями (ItemBucket).
Проблема следующая:
m1M68_viSUQ.jpg


При наборе жидкости в пустое ведро происходит то, что на скрине.
Жидкости и блоки жидкостей зарегистрированы так:
Код:
public class GSFluids {
 
 public static Fluid Methane;
 public static Fluid UnknowWater;
 //--------------------------------------
 
 public static Block BlockMethane;
 public static Block BlockUnknowWater;
 

 public static void initialize() {
 
 if (!FluidRegistry.isFluidRegistered("methane"))
        {
 Methane = new Fluid("methane").setDensity(400).setViscosity(1500);
            FluidRegistry.registerFluid(Methane);
        }
        else
        {
            GCLog.info("Galaxy Space methane is not default, issues may occur.");
        }
 
 if (!FluidRegistry.isFluidRegistered("unknowwater"))
        {
 UnknowWater = new Fluid("unknowwater").setDensity(400).setViscosity(3000);
            FluidRegistry.registerFluid(UnknowWater);
        }
        else
        {
            GCLog.info("Galaxy Space UnknowWater is not default, issues may occur.");
        }

 Methane = FluidRegistry.getFluid("methane");
 UnknowWater = FluidRegistry.getFluid("unknowwater");

        if (Methane.getBlock() == null)
        {
         BlockMethane = new TitanBlockMethane(Methane, Material.water).setBlockName("Methane");
            ((TitanBlockMethane) BlockMethane).setQuantaPerBlock(6);
            GameRegistry.registerBlock(BlockMethane, ItemBlockDesc.class, BlockMethane.getUnlocalizedName());
            Methane.setBlock(BlockMethane);
        }
        else
        {
         BlockMethane = Methane.getBlock();
        }

        if (UnknowWater.getBlock() == null)
        {
         BlockUnknowWater = new BarnardaCBlockUnknowWater(UnknowWater, Material.water).setBlockName("UnknowWater");
            ((BarnardaCBlockUnknowWater) BlockUnknowWater).setQuantaPerBlock(6);
            GameRegistry.registerBlock(BlockUnknowWater, ItemBlockDesc.class, BlockUnknowWater.getUnlocalizedName());
            UnknowWater.setBlock(BlockUnknowWater);
        }
        else
        {
         BlockUnknowWater = UnknowWater.getBlock();
        }
        
        if (BlockMethane != null)
        {
            GSItems.MethaneBucket = new ItemMethaneBucket(BlockMethane);
            FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluidStack("methane", FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(GSItems.MethaneBucket, 1, 0), new ItemStack(Items.bucket));
        }
        
        if (BlockUnknowWater != null)
        {
            BRItems.UnknowWaterBucket = new ItemUnknowWaterBucket(BlockUnknowWater);
            FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluidStack("unknowwater", FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(BRItems.UnknowWaterBucket, 1, 0), new ItemStack(Items.bucket));
        }


 }
 
}
Эвент, который регистрируется в главном файле мода:
Код:
    @SubscribeEvent
    public void onBucketFill(FillBucketEvent event)
    {
        World world = event.world;
        MovingObjectPosition pos = event.target;
        Block block = world.getBlock(pos.blockX, pos.blockY, pos.blockZ);
        int meta = world.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ);

        if (block == GSFluids.BlockMethane && meta == 0)
        {
            world.setBlockToAir(pos.blockX, pos.blockY, pos.blockZ);
            event.result = new ItemStack(GSItems.MethaneBucket, 1, 0);
            event.setResult(Result.ALLOW);
        }
        
        if (block == GSFluids.BlockUnknowWater && meta == 0)
        {
            world.setBlockToAir(pos.blockX, pos.blockY, pos.blockZ);
            event.result = new ItemStack(BRItems.UnknowWaterBucket, 1, 0);
            event.setResult(Result.ALLOW);
        }

    }
Главный файл мода:
Код:
@EventHandler
public void preInit(FMLPreInitializationEvent event) 
{
//code
GSFluids.initialize();
//code
}
Причем данная байда не у всех, я не смог воспроизвести эту ошибку у себя. Однако игроки пишут о ее наличии. А на серверах при наборе в ведро выкидывает с ошибкой (если надо, скину лог).

И Вопрос 2) У меня есть измерение с провайдером WorldProviderVenus. Как и где запретить разлитие жидкостей из ванильного ведра? (Как в аду, но там проверка прописана в самом ведре).


UPD. Еще вопрос, как в своем измерении отрендерить свой дождь? (Свою текстуру дождя или цвет)
 
1. Гайд по жидкостям: тык
2. Разлитие не запрещено, по ПКМ ведро воды просто спаунит партиклы пара и даёт пустое ведро. Тебе же нужно просто удалять воду в эвентах - world.setAir или как-то так :D
3. Про дождь... не уверен, что хоть кто-то, кроме тебя делал новый вид погоды... так что мало кто знает, но посмотри в погоде, 'авдруг'...
 
Подниму вопросы.
Жидкости сделаны по подобию GalactiCraft (кроме ведер)
Запрещать то лучше где? в WorldTick?

Ну и как отрендерить свой дождь?
 
Дождь - частицы. А как рендерить частицы над игроком всем известно.
 
Dragon2488 написал(а):
А event.setResult(Result.DENY) прибывал?
Код:
@SubscribeEvent
    public void onInteract(PlayerInteractEvent event)
    {
 Minecraft minecraft = Minecraft.getMinecraft();
 MovingObjectPosition mop = block(event.entityPlayer, 1.0F, 5.0D, true);
 if (event.world.provider instanceof WorldProviderVenus && event.action == event.action.RIGHT_CLICK_BLOCK)
 {
 ItemStack itemStack = event.entityPlayer.getCurrentEquippedItem();
 if(itemStack != null){
     Item item = itemStack.getItem();
     if(Block.getBlockFromItem(item).getMaterial() == Material.wood){
      
      event.world.playSoundEffect((double)((float)mop.blockX + 0.5F), (double)((float)mop.blockY + 0.5F), (double)((float)mop.blockZ + 0.5F), "random.fizz", 0.5F, 2.6F + (event.world.rand.nextFloat() - event.world.rand.nextFloat()) * 0.8F);
 for (int l = 0; l < 8; ++l)
 {
 event.world.spawnParticle("largesmoke", (double)minecraft.objectMouseOver.blockX + Math.random(), (double)minecraft.objectMouseOver.blockY + Math.random(), (double)minecraft.objectMouseOver.blockZ + Math.random(), 0.0D, 0.0D, 0.0D);
 }
 
 event.world.setBlock(mop.blockX, mop.blockY + 1, mop.blockZ, Blocks.fire);
 event.setCanceled(true);
     }
    if(item == Items.water_bucket)
                {
                    event.entityPlayer.addChatComponentMessage(new ChatComponentText(EnumColor.RED + "Block use bucket."));
                    event.setResult(Result.DENY);
                    event.setCanceled(true);
                }
    
 }
 }
    }
Не помогает....
al5bmhngp7ve.png
 
Назад
Сверху