Пытаюсь посадить семя и потом краш.

Версия Minecraft
1.7.10
23
0
Всем привет помогите мне понять что я не так делаю. Я знаю как мою проблему исправить чтобы когда я садил семя и не вылетало но при этом с растения ничего не выпадает. Мне нужно зарегистрировать предмет и блок растения так чтобы я смог посадить это растение и выпадало то что мне нужно.
Вот главный класс:
Код:
package assets.farmthings;


import assets.farmthings.block.WorldGeneratorCrystal;
import assets.farmthings.crops.BlockCropMod;
import assets.farmthings.init.ModTabs;
import assets.farmthings.item.ItemEssence;
import assets.farmthings.item.ItemSeed;
import assets.farmthings.item.ItemTab;
import assets.farmthings.item.MyItems;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;

@Mod(modid = farmthings.MODID, name = farmthings.MODNAME, version = farmthings.VERSION)
public class farmthings {
 
 public static final String MODID = "farmthings";
 public static final String MODNAME = "Farm Things";
 public static final String VERSION = "0.0.1";
 
 public static WorldGeneratorCrystal blockgenerator = new WorldGeneratorCrystal();
 public static Item tabItem;
 
 @Instance(MODID)
 public static farmthings instance;
 
 //Seeds
 public static ItemSeed seedIron;
 public static ItemSeed seedGold;
 
 //Essence
 public static ItemEssence essenceIron;
 public static ItemEssence essenceGold;
 
 //Crops
 public static Block cropIron;
 public static Block cropGold;
 
 
 //Blocks
 public static Block CrystalOreBlue;
 public static Block CrystalOreYellowRed;
 
 //Items
 public static MyItems CrystalBlue;
 public static MyItems PowdercrystalBlue;
 public static MyItems CrystalYellowRed;
 public static MyItems PowdercrystalYellowRed;
 
 @EventHandler
 public void preInit(FMLPreInitializationEvent preEvent){
 ModTabs.load();

 }
 
 @EventHandler
 public void init(FMLInitializationEvent event){
 }
 
 @EventHandler
 public void postInit(FMLPostInitializationEvent event) {
 
 GameRegistry.registerWorldGenerator(blockgenerator, 0);
 
 // Filling Seeds:
 seedIron = new ItemSeed("Iron", cropIron);
 seedGold = new ItemSeed("Gold", cropGold);
 
 // Registering Seeds:
 if(seedIron != null) RegistrationHelper.registerItem(seedIron);
 if(seedGold != null) RegistrationHelper.registerItem(seedGold);
 
 // Filling Essences:
 essenceIron = new ItemEssence("Iron");
 essenceGold = new ItemEssence("Gold");
 
 // Registering Essences:
 if(essenceIron != null) RegistrationHelper.registerItem(essenceIron);
 if(essenceGold != null) RegistrationHelper.registerItem(essenceGold);
 
 // Filling Crops:
 cropIron = new BlockCropMod("Iron", seedIron, essenceIron);
 cropGold = new BlockCropMod("Gold", seedGold, essenceGold);
 
 // Registering Crops:
 if(cropIron != null) RegistrationHelper.registerBlock(cropIron);
 if(cropGold !=null) RegistrationHelper.registerBlock(cropGold);
 
 //Items
 CrystalBlue = new MyItems("CrystalBlue");
 PowdercrystalBlue = new MyItems("PowdercrystalBlue");
 CrystalYellowRed = new MyItems("CrystalYellowRed");
 PowdercrystalYellowRed = new MyItems("PowdercrystalYellowRed");
 
 //Register Items
 if(CrystalBlue != null) RegistrationHelper.registerItem(CrystalBlue);
 if(PowdercrystalBlue != null) RegistrationHelper.registerItem(PowdercrystalBlue);
 if(CrystalYellowRed != null) RegistrationHelper.registerItem(CrystalYellowRed);
 if(PowdercrystalYellowRed != null) RegistrationHelper.registerItem(PowdercrystalYellowRed);
 
 //Blocks
 CrystalOreBlue= new assets.farmthings.block.CrystalOreBlue("CrystalBlue", Material.rock ,farmthings.PowdercrystalBlue, 2, 4, 0);
 CrystalOreYellowRed= new assets.farmthings.block.CrystalOreYellowRed("CrystalYellowRed", Material.rock, farmthings.PowdercrystalYellowRed, 2, 4, 0);
 
 //RegisterBlocks
 if(CrystalOreBlue !=null) RegistrationHelper.registerBlock(CrystalOreBlue);
 if(CrystalOreYellowRed !=null) RegistrationHelper.registerBlock(CrystalOreYellowRed);
 
 //Machine
 
 //RegisterMachine
 
 Recipes.registerRecipes();
 tabItem = new ItemTab();
 if(tabItem != null) RegistrationHelper.registerItem(tabItem);
 }
 }
 
23
0
Код Семя:
Код:
package assets.farmthings.item;

import assets.farmthings.farmthings;
import assets.farmthings.init.ModTabs;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.common.IPlantable;

public class ItemSeed extends Item {

 String itemType;
 Block crop;
 
 public ItemSeed(String name, Block crop) {
 itemType = "seed";
 this.crop = crop;
 setMaxStackSize(64);
 setCreativeTab(ModTabs.tabFarmThings);
 setUnlocalizedName("mSeed" + name);
 setTextureName("farmthings:mSeed" + name);
 }
 
 public boolean onItemUse(ItemStack par1Stack, EntityPlayer par2Player, World par3World, int x, int y, int z,
 int par7Side, float par8HitX, float par9HitY, float par10HitZ){
 
 if(par7Side != 1 || par3World.getBlock(x, y, z) == Blocks.air || par3World.getBlock(x, y, z) == null || par3World.getBlock(x, y, z) != Blocks.farmland || !par3World.isAirBlock(x,  y + 1, z)) return false;
 else if(itemType == "seed"){
 if(par3World.isRemote){
 par3World.playSound(x, y + 1, z, Block.soundTypeGrass.getBreakSound(), 1, 0.75F, true);
 return true;
 }
 int meta = par1Stack.getItemDamage();
 par3World.setBlock(x, y + 1, z, crop, (meta % 4), 2);
 par1Stack.stackSize--;
 return true;
 }
 return false;
 }
}

Код Растения:
Код:
package assets.farmthings.crops;

import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;

import java.util.Random;

import assets.farmthings.farmthings;
import assets.farmthings.item.ItemSeed;
import assets.farmthings.item.ItemEssence;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockCropMod extends BlockCrops{
 
 @SideOnly(Side.CLIENT)
 private IIcon iconArray[];
 
 private String CropName;
 private ItemSeed CropSeed;
 private ItemEssence CropEssence;
 
 
 public BlockCropMod(String Crop_Name, ItemSeed Crop_Seed, ItemEssence Crop_Essence)
 {
 super();
 CropName = Crop_Name;
 CropSeed = Crop_Seed;
 CropEssence = Crop_Essence;
 
 setBlockName("mCrop" + CropName);
 }

 public int getRenderType(){
 return 1;
 }
 
 @SideOnly(Side.CLIENT)
 public IIcon getIcon(int side, int meta){
 if (meta < 7){
 if (meta == 6){
 meta = 5;
 }
 return this.iconArray[(meta >> 1)];
 }
 return this.iconArray[3];
 }

 protected Item getSeed()
 { 
 return CropSeed;
 }
 
 protected Item getCrop(){
 return CropEssence;
 }

 public int damageDropped(int i){
 return 0;
 }
 
 @SideOnly(Side.CLIENT)
 public void registerBlockIcons(IIconRegister iconReg){
 this.iconArray = new IIcon[4];
 for (int i = 0; i < this.iconArray.length; i++){
 System.out.println(i);
 this.iconArray[i] = iconReg.registerIcon("farmthings:mCrop" + CropName + "_" + i);
 }
 }
}

Краш:
Код:
---- Minecraft Crash Report ----
// My bad.

Time: 26.09.16 11:57
Description: Ticking memory connection

java.lang.NullPointerException: Ticking memory connection
 at net.minecraft.world.chunk.storage.ExtendedBlockStorage.func_150818_a(ExtendedBlockStorage.java:86)
 at net.minecraft.world.chunk.Chunk.func_150807_a(Chunk.java:653)
 at net.minecraft.world.World.setBlock(World.java:519)
 at assets.farmthings.item.ItemSeed.onItemUse(ItemSeed.java:39)
 at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:507)
 at net.minecraft.item.ItemStack.tryPlaceItemIntoWorld(ItemStack.java:142)
 at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:422)
 at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)
 at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)
 at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
 at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
 at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
 at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
 at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
 at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
 at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)


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(ExtendedBlockStorage.java:86)
 at net.minecraft.world.chunk.Chunk.func_150807_a(Chunk.java:653)
 at net.minecraft.world.World.setBlock(World.java:519)
 at assets.farmthings.item.ItemSeed.onItemUse(ItemSeed.java:39)
 at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:507)
 at net.minecraft.item.ItemStack.tryPlaceItemIntoWorld(ItemStack.java:142)
 at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:422)
 at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)
 at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)
 at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

-- Ticking connection --
Details:
 Connection: net.minecraft.network.NetworkManager@65634365
Stacktrace:
 at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
 at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
 at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
 at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
 at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
 at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

-- System Details --
Details:
 Minecraft Version: 1.7.10
 Operating System: Windows 7 (amd64) version 6.1
 Java Version: 1.8.0_101, Oracle Corporation
 Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
 Memory: 808526344 bytes (771 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
 JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
 AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
 IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
 FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 4 mods loaded, 4 mods active
 States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
 UCHIJAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
 UCHIJAAAA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar) 
 UCHIJAAAA Forge{10.13.4.1558} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar) 
 UCHIJAAAA farmthings{0.0.1} [Farm Things] (bin) 
 GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
 Profiler Position: N/A (disabled)
 Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
 Player Count: 1 / 8; [EntityPlayerMP['Player416'/219, l='Новый мир', x=260,84, y=64,00, z=-241,70]]
 Type: Integrated Server (map_client.txt)
 Is Modded: Definitely; Client brand changed to 'fml,forge'
 
4,046
63
645
Ошибка в строке №39 семени. Что это за строка? Не проигрывание ли звука, часом?
Может, ты пытаешься проиграть серверный звук на клиенте? Не пробовал проверку !world.isRemote вставлять?
И что за itemType такой? Что-то не встречал подобного.
 
23
0
Все же это не проблема со звуком а из за регистрации предметов. Я сначала регистрирую блок растения а потом семя. Читал на форумах сначала регистрируешь семя а потом блок. Но мне нужно блок а потом семя иначе выпадать не будет с растения ни чего.
 
7,099
324
1,510
"серверный звук на клиенте?"
Наоборот, может?:D


Кстати, странная конструкция: у тебя в конструкторе семени и блока должны передаваться друг-другу они сами. Но для этого они уже должны быть инициализированы, а для этого нужно вызвать конструкторы, которые требуют экземпляры друг-друга. Значит, ты создаешь два экземпляра либо семени, либо, блока, а регаешь только один из двух, устанавливаешь тот, который не зареган.

Решение: хранить экземпляры блоков и предметов в виде полей главного класса(или специального для них) и обращаться к ним, экземпляры блоков-итемов не нужно гонять по конструкторам.
 
4,046
63
645
Нет. Я просто перепутал методы...
В 1.10 есть клиентские звуки, которые на сервере вообще не срабатывают. А есть серверные, которые работают даже внутри проверки на сервер и передаются всем окружающим...
Не заменил, что у него уже есть проверка на клиент.
 
7,099
324
1,510
Пардон, перечитал код главного класса, где регаешь - ты ведь просто передаешь в конструктор пустое значение сначала и в переменной внутри класса сохраняешь null. Но решение такое же остается
 
5,018
47
783
QYes написал(а):
Строчка в ItemSeed №39. Мне на эту строчку указывает:
Код:
par3World.setBlock(x, y + 1, z, crop, (meta % 4), 2);
Если честно я сам не знаю что за itemType. Я этот код взял с другого мода.

копипаста рулит!
 
23
0
hohserg написал(а):
"серверный звук на клиенте?"
Наоборот, может?:D


Кстати, странная конструкция: у тебя в конструкторе семени и блока должны передаваться друг-другу они сами. Но для этого они уже должны быть инициализированы, а для этого нужно вызвать конструкторы, которые требуют экземпляры друг-друга. Значит, ты создаешь два экземпляра либо семени, либо, блока, а регаешь только один из двух, устанавливаешь тот, который не зареган.

Решение: хранить экземпляры блоков и предметов в виде полей главного класса(или специального для них) и обращаться к ним, экземпляры блоков-итемов не нужно гонять по конструкторам.



То есть мне создать два класса например MySeeds а другой MyCrops?? И потом там регистрировать предметы и блоки??
 
7,099
324
1,510
Не правильно


Нужно:
public static Block cropIron = new BlockCropMod("Iron", /*seedIron не надо так, брать в блоке из Main.seedIron*/, essenceIron);
Кстати, эссенцию тоже лучше не передавать
 
23
0
То есть так писать и нужно в главном классе или где то в другом?
Код:
public static Block cropIron = new BlockCropMod("Iron", farmthings.seedIron, farmthings.essenceIron);


Вроде получилось семя посадил только вот когда я его уничтожаю то с него ни чего не падает.


Не получается. Наверное я что то не то делаю.
 
Сверху