Ведро....

1,057
50
234
Создал жидкость, сегодня попробовал сделать ведро.
Сделал, все хорошо, кроме одного момента:

При ПКМ моего ведра, крашит клиент:

Код:
[22:03:29] [Client thread/FATAL]: Unreported exception thrown!
java.lang.NullPointerException
 at net.minecraft.world.chunk.storage.ExtendedBlockStorage.func_150818_a(SourceFile:57) ~[apz.class:?]
 at net.minecraft.world.chunk.Chunk.func_150807_a(Chunk.java:595) ~[apx.class:?]
 at net.minecraft.world.World.func_147465_d(World.java:451) ~[ahb.class:?]
 at net.minecraft.item.ItemBucket.func_77875_a(ItemBucket.java:203) ~[abo.class:?]
 at net.minecraft.item.ItemBucket.func_77659_a(ItemBucket.java:138) ~[abo.class:?]
 at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:146) ~[add.class:?]
 at net.minecraft.client.multiplayer.PlayerControllerMP.func_78769_a(PlayerControllerMP.java:377) ~[bje.class:?]
 at net.minecraft.client.Minecraft.func_147121_ag(Minecraft.java:1464) ~[bao.class:?]
 at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1942) ~[bao.class:?]
 at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:962) ~[bao.class:?]
 at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:887) [bao.class:?]
 at net.minecraft.client.main.Main.main(SourceFile:148) [Main.class:?]
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_72]
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_72]
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_72]
 at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_72]
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?]
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?]
[22:03:29] [Client thread/INFO]: [net.minecraft.client.Minecraft:func_71377_b:349]: ---- Minecraft Crash Report ----
// My bad.

Time: 04.04.15 22:03
Description: Unexpected error

java.lang.NullPointerException: Unexpected error
 at net.minecraft.world.chunk.storage.ExtendedBlockStorage.func_150818_a(SourceFile:57)
 at net.minecraft.world.chunk.Chunk.func_150807_a(Chunk.java:595)
 at net.minecraft.world.World.func_147465_d(World.java:451)
 at net.minecraft.item.ItemBucket.func_77875_a(ItemBucket.java:203)
 at net.minecraft.item.ItemBucket.func_77659_a(ItemBucket.java:138)
 at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:146)
 at net.minecraft.client.multiplayer.PlayerControllerMP.func_78769_a(PlayerControllerMP.java:377)
 at net.minecraft.client.Minecraft.func_147121_ag(Minecraft.java:1464)
 at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1942)
 at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:962)
 at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:887)
 at net.minecraft.client.main.Main.main(SourceFile:148)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
 at net.minecraft.world.chunk.storage.ExtendedBlockStorage.func_150818_a(SourceFile:57)
 at net.minecraft.world.chunk.Chunk.func_150807_a(Chunk.java:595)
 at net.minecraft.world.World.func_147465_d(World.java:451)
 at net.minecraft.item.ItemBucket.func_77875_a(ItemBucket.java:203)
 at net.minecraft.item.ItemBucket.func_77659_a(ItemBucket.java:138)
 at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:146)
 at net.minecraft.client.multiplayer.PlayerControllerMP.func_78769_a(PlayerControllerMP.java:377)
 at net.minecraft.client.Minecraft.func_147121_ag(Minecraft.java:1464)
 
Ведро:

Код:
package blessentumble.moons.titan.items;

import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import blessentumble.BlesseAddon;
import blessentumble.CreativeTabsBlesse;
import blessentumble.core.fluids.FluidsAddon;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBucket;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.FillBucketEvent;

public class BucketMethane extends ItemBucket
{


 public BucketMethane(Block block)
 {
 super(block);
 this.setContainerItem(Items.bucket);
 this.setUnlocalizedName("bucketMethane");
 this.setTextureName(BlesseAddon.ASSET_PREFIX + ":" + "bucket_methane");
 }


 @Override
 @SideOnly(Side.CLIENT)
 public CreativeTabs getCreativeTab()
 {
 return CreativeTabsBlesse.BlesseItemsTab;
 }


}

Жидкость Register
Код:
package blessentumble.core.fluids;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import blessentumble.core.handler.BucketHandler;
import blessentumble.core.items.ItemsAddon;
import blessentumble.moons.titan.blocks.TitanMethan;
import cpw.mods.fml.common.registry.GameRegistry;

public class FluidsAddon {
 
 //public static Fluid Methan = new Fluid("methane");
 public static Block MethanTitan;
 
 public static Fluid gsFluidMethane;
 

 public static void initialize() {
 
 String nameMethane = "methane";
 gsFluidMethane = new Fluid(nameMethane).setViscosity(1500);
 FluidRegistry.registerFluid(gsFluidMethane);
 gsFluidMethane = FluidRegistry.getFluid(nameMethane);
 
 
 
 
 
 
 MethanTitan = new TitanMethan(gsFluidMethane, Material.water);
 GameRegistry.registerBlock(MethanTitan, "methane");//Регистрация блока жидкости.
 
 }
}
Жидкость - Блок
Код:
package blessentumble.moons.titan.blocks;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fluids.BlockFluidClassic;
import net.minecraftforge.fluids.Fluid;
import blessentumble.BlesseAddon;
import blessentumble.CreativeTabsBlesse;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class TitanMethan extends BlockFluidClassic
{

    
     @SideOnly(Side.CLIENT)
     protected IIcon stillIcon;
     @SideOnly(Side.CLIENT)
     protected IIcon flowingIcon;
     
     public TitanMethan(Fluid fluid, Material material) {
             super(fluid, material);
     }
     
     @SideOnly(Side.CLIENT)
     @Override
     public CreativeTabs getCreativeTabToDisplayOn()
     {
         return CreativeTabsBlesse.BlesseBlocksTab;
     }
     
     @Override
     public IIcon getIcon(int side, int meta) {
             return (side == 0 || side == 1)? stillIcon : flowingIcon;
     }
     
     @SideOnly(Side.CLIENT)
     @Override
     public void registerBlockIcons(IIconRegister register) {
             stillIcon = register.registerIcon(BlesseAddon.ASSET_PREFIX + ":" + "methanstill");
             flowingIcon = register.registerIcon(BlesseAddon.ASSET_PREFIX + ":" + "methanflowing");
     }
     
     @Override
     public boolean canDisplace(IBlockAccess world, int x, int y, int z) {
             if (world.getBlock(x,  y,  z).getMaterial().isLiquid()) return false;
             return super.canDisplace(world, x, y, z);
     }
     
     @Override
     public boolean displaceIfPossible(World world, int x, int y, int z) {
             if (world.getBlock(x,  y,  z).getMaterial().isLiquid()) return false;
             return super.displaceIfPossible(world, x, y, z);
     }
}
Главный класс - init
Код:
 BucketHandler.INSTANCE.buckets.put(FluidsAddon.MethanTitan, ItemsAddon.BucketMethane);
 MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE);

Handler
Код:
package blessentumble.core.handler;

import java.util.HashMap;
import java.util.Map;

import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.player.FillBucketEvent;

public class BucketHandler {

 public static BucketHandler INSTANCE = new BucketHandler();
 public Map<Block, Item> buckets = new HashMap<Block, Item>();

 private BucketHandler() {
 }

 @SubscribeEvent
 public void onBucketFill(FillBucketEvent event) {

 ItemStack result = fillCustomBucket(event.world, event.target);

 if (result == null)
 return;

 event.result = result;
 event.setResult(Result.ALLOW);
 }

 private ItemStack fillCustomBucket(World world, MovingObjectPosition pos) {

 Block block = world.getBlock(pos.blockX, pos.blockY, pos.blockZ);

 Item bucket = buckets.get(block);
 if (bucket != null && world.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ) == 0) {
 world.setBlockToAir(pos.blockX, pos.blockY, pos.blockZ);
 return new ItemStack(bucket);
 } else
 return null;

 }
}
 
Item bucket = buckets.get(block);
  if (bucket != null....

а это разве не проверяет на нулл блок?
 
if (!p_77659_3_.canPlayerEdit(i, j, k, movingobjectposition.sideHit, p_77659_1_))
{
return p_77659_1_;
}

и

else
{
if (!p_77875_1_.isRemote && flag && !material.isLiquid())
{
p_77875_1_.func_147480_a(p_77875_2_, p_77875_3_, p_77875_4_, true);
}

p_77875_1_.setBlock(p_77875_2_, p_77875_3_, p_77875_4_, this.isFull, 0, 3);
}
 
Непонимаю....

Глянул как реализованы ведра в других модах, так у меня почти так-же.
Хандлер вообще не используется.

А почему критует при ПКМ кастомным ведром не могу понять...
 
А он у тебя extends Item или extends ВанильноеВедро?
Лучше сделай второй вариант, только переопредели метод OnRightClick
 
Назад
Сверху