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

Версия 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
Я сам не знаю. Я хотел бы сделать отдельный класс для регистрации и инициализации предметов и блоков. Потом просто писать MySeed.seedIron или MyCrop.cropIron. Но не получается. Но так наверное работать не будет.
 
2,505
81
397
Liahim написал(а):
Слушайте, я наверное тупой, но я не вижу разницы между farmthings.seedIron и просто seedIron, если всё это происходит в главном классе.
В чём различие?

В данном случае, ни в чем.


QYes написал(а):
Я сам не знаю. Я хотел бы сделать отдельный класс для регистрации и инициализации предметов и блоков. Потом просто писать MySeed.seedIron или MyCrop.cropIron. Но не получается. Но так наверное работать не будет.

Будет


А еще, пиши, плз, название классов с большое буквы, а название переменных и методов с маленькой. А то глаза - боль
 
4,045
63
645
Аааааа... hohserg имел ввиду брать это ИЗ блока, а не при регистрации...
Как вариант, можешь при объявлении блока передавать в него не семя, а какую-нибудь любую величину, например boolean. А уже в блоке проверять, если true, то семя берёшь из farmthings.seedIron, если false, то - farmthings.seedGold...
Как-то так.
 
7,099
324
1,510
Ну просто когда ты из семени пытаешься установить блок в мире пиши не seedIron, а Main.seedIron(Main - главный класс). На момент установки семя и блок будут инициализированы, а на момент вызова конструкторов один еще не будет(как у тебя щас)


Такую простую проблему раздули на две страницы :D
 
4,045
63
645
Так, всё это, конечно, хорошо. Только вот он использует один класс для всех растений, и так или иначе придётся задавать условие, какое именно семя использовать...
Может, с передачей boolean я и переборщил, но хотя бы по имени блока проверить придётся.
 
23
0
Dahaka написал(а):
Что за бред вы несете. seedIron абсолютно тоже самое, что и Main.seedIron


Код:
public static ItemSeed seed = new ItemSeed();
public static ItemCrop crop = new ItemCrop();

static {
    seed.crop = crop;
    crop.seed = seed;
}




Что это за код?


hohserg написал(а):
Ну просто когда ты из семени пытаешься установить блок в мире пиши не seedIron, а Main.seedIron(Main - главный класс). На момент установки семя и блок будут инициализированы, а на момент вызова конструкторов один еще не будет(как у тебя щас)


Такую простую проблему раздули на две страницы :D



Не помогло((
 
7,099
324
1,510
"Что это за код?"
блок кода, который выполняется при инициализации класса(не создание экземпляра), попробуй, тоже может заработать.
 
23
0
hohserg написал(а):
"Что это за код?"
блок кода, который выполняется при инициализации класса(не создание экземпляра), попробуй, тоже может заработать.
 Я вообще не пойму куда его записывать. Можешь подсказать?
 
23
0
Dahaka написал(а):
В главном классе


Только тебе придется подправить твои конструкторы ItemSeed и ItemCrop



Ок щас попробую


Dahaka написал(а):
В главном классе


Только тебе придется подправить твои конструкторы для ItemSeed и ItemCrop


А нету ли чего то полегче? Слишком много нужно исправлений(
Очень проблемно менять все что в конструкторах
 
7,099
324
1,510
Вообще-то из-за конструкторов у тебя и проблемы. Ты читал, что я написал в своем первом сообщении(#10) в этой теме?
 
23
0
Вроде так должно быть но я когда хочу посадить что то он не сажает.
Главный класс:
Код:
package assets.farmthings;


import assets.farmthings.block.WorldGeneratorCrystal;
import assets.farmthings.crops.ItemCrop;
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;

public static ItemSeed seed = new ItemSeed(null, crop);
public static ItemCrop crop = new ItemCrop(null, seed);

static {

  seed.crop = crop;
  crop.seed = seed;
  
}

@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", crop);
seedGold = new ItemSeed("Gold", crop);

// 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 ItemCrop("Iron", seed);
cropGold = new ItemCrop("Gold", seed);

// 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);
}
}

ItemSeed:
Код:
package assets.farmthings.item;

import assets.farmthings.farmthings;
import assets.farmthings.crops.ItemCrop;
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;
 public ItemCrop crop;

 public ItemSeed(String name, ItemCrop crop) {
 setMaxStackSize(64);
 setCreativeTab(ModTabs.tabFarmThings);
 setUnlocalizedName("mSeed" + name);
 setTextureName("farmthings:mSeed" + name);
 }
 
 @Override
 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;
 }
}

ItemCrop:
Код:
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 ItemCrop extends BlockCrops{
 
 @SideOnly(Side.CLIENT)
 private IIcon iconArray[];
 
 public ItemSeed seed;

 private String name;
 
 
 public ItemCrop(String name, ItemSeed seed)
 {
 super();
 this.name = name;
 setBlockName("mCrop" + name);
 }

 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 seed;
 }
 
 protected Item getCrop(){
 return seed;
 }

 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" + name + "_" + i);
 }
 }
}
 
Сверху