[GC3 API] Подскажите, кто чем может...

Версия Minecraft
1.7.10
5,149
49
899
Народ,! Привет. Хочу все сделать марсианское дерево, однако оно упорно не хочет сажаться на марсианский камень
(именно его я указал в
Код:
   protected boolean canPlaceBlockOn(Block block)
    {
        return block == Blocks.grass || block == Blocks.dirt || block == Blocks.farmland || block == MarsBlocks.marsBlock;
    }
) 
ну так вот. Для верности и чистоты экскремента эксперимента я решил скопипастить ванильный BlockBush и его имплементацию IPlantable. Ну прям все один в один. Но однако вот этот метод с функцией
в моем новом BlockBush'е 
Код:
   public boolean canBlockStay(World world, int x, int y, int z)
    {
        return  world.getBlock(x, y - 1, z).canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this);
    }
никоим образом не хочет принимать новый IPlantable , ругается и опять тянет ручки к старому ванильному IPlantable. Однако я затестил, эксперимент прошел. просто, если ошибку не исправлять, то краш при попытке вырастить дерево.
 
canBlockStay, на сколько я помню, метод из самого блокбуша...
У IPlantable там совсем другие...
Что-то типа кенСустентПлант...
Точно не помню... Глянь в нём самом.


Хотя, ты его и используешь...
Однако, что у тебя прописано в нём самом?
 
Даже проблем не возникало с этим. У меня были проблемы с саженцем... Чтобы твой блок принимал саженец, а в последствии и дерево это нужно писать в твоем марсианском блоке(странно, что камне).
Код:
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
 Block plant = plantable.getPlant(world, x, y + 1, z);
 return (plant == PlanetsBlocks.PlanetsTreeSapling//саженец
 }
 
RonyC написал(а):
Даже проблем не возникало с этим. У меня были проблемы с саженцем... Чтобы твой блок принимал саженец, а в последствии и дерево это нужно писать в твоем марсианском блоке(странно, что камне).
Код:
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
 Block plant = plantable.getPlant(world, x, y + 1, z);
 return (plant == PlanetsBlocks.PlanetsTreeSapling//саженец
 }
Блок то не его, а автора GC3.
 
RonyC написал(а):
Даже проблем не возникало с этим. У меня были проблемы с саженцем... Чтобы твой блок принимал саженец, а в последствии и дерево это нужно писать в твоем марсианском блоке(странно, что камне).
Код:
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
 Block plant = plantable.getPlant(world, x, y + 1, z);
 return (plant == PlanetsBlocks.PlanetsTreeSapling//саженец
 }
На камне для теста.


Liahim написал(а):
На камне кое-что растёт и в ваниле...
Марсианский камень. Думаешь, я про грибы забыл...? Уж я то - точно бы не забыл!  :)


BlesseNtumble написал(а):
RonyC написал(а):
Даже проблем не возникало с этим. У меня были проблемы с саженцем... Чтобы твой блок принимал саженец, а в последствии и дерево это нужно писать в твоем марсианском блоке(странно, что камне).
Код:
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
 Block plant = plantable.getPlant(world, x, y + 1, z);
 return (plant == PlanetsBlocks.PlanetsTreeSapling//саженец
 }
Блок то не его, а автора GC3.

А может, если есть открытые исходники, которые редактировать можно. Может их взять? И там, прямо в блок поверхности Марса впихнуть...


RonyC написал(а):
Даже проблем не возникало с этим. У меня были проблемы с саженцем... Чтобы твой блок принимал саженец, а в последствии и дерево это нужно писать в твоем марсианском блоке(странно, что камне).
Код:
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
 Block plant = plantable.getPlant(world, x, y + 1, z);
 return (plant == PlanetsBlocks.PlanetsTreeSapling//саженец
 }

Можно конеш, и Block.java свой создать. :) Но чет походу чересчур будет.
 
Думаю разберешься
Код:
package jimmy.tutorial.block;

import java.util.List;
import java.util.Random;

import jimmy.tutorial.world.gen.WorldGenEffectTree;
import jimmy.tutorial.world.gen.WorldGenForestBigTree;
import jimmy.tutorial.world.gen.WorldGenForestTrees;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSapling;
import net.minecraft.block.IGrowable;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockModLightSapling extends BlockSapling implements IGrowable
{
 private static String[] saplings;
 private IIcon[] textures;
 private static final int TYPES = 1;

 private static WorldGenerator tree;
 private static WorldGenerator treeBig;
 private static WorldGenerator effectTree;

 public BlockModLightSapling(String blockname, String textureName)
 {
 // Set tree size.
 treeBig = new WorldGenForestBigTree(true, 10, 1, 5);
 tree = new WorldGenForestTrees(true);
 effectTree = new WorldGenEffectTree(true);
 this.setHardness(0.0F);
 this.setStepSound(Block.soundTypeGrass);
 this.setCreativeTab(CreativeTabs.tabBlock);
 this.setBlockName(blockname);
 this.setBlockTextureName(textureName);
 saplings = new String[] { textureName + "_Sapling" };
 }

 @Override
 @SideOnly(Side.CLIENT)
 public void registerBlockIcons(IIconRegister iconRegister)
 {
 textures = new IIcon[saplings.length];
 for (int i = 0; i < saplings.length; ++i)
 {
 textures[i] = iconRegister.registerIcon("tutorial:" + saplings[i]);
 }
 }

 @Override
 @SideOnly(Side.CLIENT)
 public IIcon getIcon(int side, int meta)
 {
 if (meta < 0 || meta >= saplings.length)
 {
 meta = 0;
 }
 return textures[meta];
 }

 @Override
 @SuppressWarnings({ "unchecked", "rawtypes" })
 public void getSubBlocks(Item block, CreativeTabs creativeTabs, List list)
 {
 for (int i = 0; i < saplings.length; ++i)
 {
 list.add(new ItemStack(block, 1, i));
 }
 }

 public boolean isValidPosition(World world, int x, int y, int z, int metadata)
 {
 Block block = world.getBlock(x, y - 1, z);
 switch (metadata)
 {
 default:
 return block == Blockss.lightForestGrass || block == Blockss.lightForestDirt || block.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this);
 }
 }

 @Override
 public boolean canPlaceBlockOnSide(World world, int x, int y, int z, int side)
 {
 return isValidPosition(world, x, y, z, -1);
 }

 @Override
 public boolean canBlockStay(World world, int x, int y, int z)
 {
 Block soil = world.getBlock(x, y - 1, z);

 if (world.getBlockMetadata(x, y, z) != 7)
 return (world.getFullBlockLightValue(x, y, z) >= 8 || world.canBlockSeeTheSky(x, y, z)) &&
 (soil != null && soil.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this));
 else
 return (world.getFullBlockLightValue(x, y, z) >= 8 || world.canBlockSeeTheSky(x, y, z)) &&
 (soil != null && soil.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this));
 }

 @Override
 public void updateTick(World world, int x, int y, int z, Random random)
 {
 if (world.isRemote)
 return;

 if (world.getBlockLightValue(x, y + 1, z) >= 9 && random.nextInt(7) == 0)
 {
 this.func_149878_d(world, x, y, z, random);
 }
 }

 @Override
 public void func_149878_d(World world, int x, int y, int z, Random random)
 {
 int meta = world.getBlockMetadata(x, y, z) & TYPES;
 Object obj = null;
 int rnd = random.nextInt(10);

 if (obj == null) {
 if (rnd < 5) {
 obj = tree;
 }
 if (rnd >= 5) {
 obj = treeBig;
 }
 if (rnd == 12) {
 obj = effectTree;
 }
 }
 if (obj != null)
 {
 world.setBlockToAir(x, y, z);

 if (!((WorldGenerator) obj).generate(world, random, x, y, z))
 {
 world.setBlock(x, y, z, this, meta, 2);
 }
 }
 }

 @Override
 public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
 if (world.getBlock(x, y, z) == Blockss.lightForestDirt) {
 return true;
 }
 if (world.getBlock(x, y, z) == Blockss.lightForestGrass) {
 return true;
 }
 else {
 return false;
 }
 }

 @Override
 public void onPlantGrow(World world, int x, int y, int z, int sourceX, int sourceY, int sourceZ) {
 if (this == Blockss.lightForestDirt || this == Blockss.lightForestGrass)
 {
 world.setBlock(x, y, z, Blockss.lightForestDirt, 0, 2);
 }
 }
}
 
RonyC написал(а):
Думаю разберешься
Код:
package jimmy.tutorial.block;

import java.util.List;
import java.util.Random;

import jimmy.tutorial.world.gen.WorldGenEffectTree;
import jimmy.tutorial.world.gen.WorldGenForestBigTree;
import jimmy.tutorial.world.gen.WorldGenForestTrees;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSapling;
import net.minecraft.block.IGrowable;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockModLightSapling extends BlockSapling implements IGrowable
{
 private static String[] saplings;
 private IIcon[] textures;
 private static final int TYPES = 1;

 private static WorldGenerator tree;
 private static WorldGenerator treeBig;
 private static WorldGenerator effectTree;

 public BlockModLightSapling(String blockname, String textureName)
 {
 // Set tree size.
 treeBig = new WorldGenForestBigTree(true, 10, 1, 5);
 tree = new WorldGenForestTrees(true);
 effectTree = new WorldGenEffectTree(true);
 this.setHardness(0.0F);
 this.setStepSound(Block.soundTypeGrass);
 this.setCreativeTab(CreativeTabs.tabBlock);
 this.setBlockName(blockname);
 this.setBlockTextureName(textureName);
 saplings = new String[] { textureName + "_Sapling" };
 }

 @Override
 @SideOnly(Side.CLIENT)
 public void registerBlockIcons(IIconRegister iconRegister)
 {
 textures = new IIcon[saplings.length];
 for (int i = 0; i < saplings.length; ++i)
 {
 textures[i] = iconRegister.registerIcon("tutorial:" + saplings[i]);
 }
 }

 @Override
 @SideOnly(Side.CLIENT)
 public IIcon getIcon(int side, int meta)
 {
 if (meta < 0 || meta >= saplings.length)
 {
 meta = 0;
 }
 return textures[meta];
 }

 @Override
 @SuppressWarnings({ "unchecked", "rawtypes" })
 public void getSubBlocks(Item block, CreativeTabs creativeTabs, List list)
 {
 for (int i = 0; i < saplings.length; ++i)
 {
 list.add(new ItemStack(block, 1, i));
 }
 }

 public boolean isValidPosition(World world, int x, int y, int z, int metadata)
 {
 Block block = world.getBlock(x, y - 1, z);
 switch (metadata)
 {
 default:
 return block == Blockss.lightForestGrass || block == Blockss.lightForestDirt || block.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this);
 }
 }

 @Override
 public boolean canPlaceBlockOnSide(World world, int x, int y, int z, int side)
 {
 return isValidPosition(world, x, y, z, -1);
 }

 @Override
 public boolean canBlockStay(World world, int x, int y, int z)
 {
 Block soil = world.getBlock(x, y - 1, z);

 if (world.getBlockMetadata(x, y, z) != 7)
 return (world.getFullBlockLightValue(x, y, z) >= 8 || world.canBlockSeeTheSky(x, y, z)) &&
 (soil != null && soil.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this));
 else
 return (world.getFullBlockLightValue(x, y, z) >= 8 || world.canBlockSeeTheSky(x, y, z)) &&
 (soil != null && soil.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this));
 }

 @Override
 public void updateTick(World world, int x, int y, int z, Random random)
 {
 if (world.isRemote)
 return;

 if (world.getBlockLightValue(x, y + 1, z) >= 9 && random.nextInt(7) == 0)
 {
 this.func_149878_d(world, x, y, z, random);
 }
 }

 @Override
 public void func_149878_d(World world, int x, int y, int z, Random random)
 {
 int meta = world.getBlockMetadata(x, y, z) & TYPES;
 Object obj = null;
 int rnd = random.nextInt(10);

 if (obj == null) {
 if (rnd < 5) {
 obj = tree;
 }
 if (rnd >= 5) {
 obj = treeBig;
 }
 if (rnd == 12) {
 obj = effectTree;
 }
 }
 if (obj != null)
 {
 world.setBlockToAir(x, y, z);

 if (!((WorldGenerator) obj).generate(world, random, x, y, z))
 {
 world.setBlock(x, y, z, this, meta, 2);
 }
 }
 }

 @Override
 public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
 if (world.getBlock(x, y, z) == Blockss.lightForestDirt) {
 return true;
 }
 if (world.getBlock(x, y, z) == Blockss.lightForestGrass) {
 return true;
 }
 else {
 return false;
 }
 }

 @Override
 public void onPlantGrow(World world, int x, int y, int z, int sourceX, int sourceY, int sourceZ) {
 if (this == Blockss.lightForestDirt || this == Blockss.lightForestGrass)
 {
 world.setBlock(x, y, z, Blockss.lightForestDirt, 0, 2);
 }
 }
}
Спасибо. А это что еще за светодерево? Крадешь идеи, да? :D


Разобрался... Да не так. Теперь такая беда. Я для точности скопировал то что ты мне скинул. теперь да, саженец сажается, только вот беда - дерево не растет!
Все переделал под себя, но дерево не растет. А кстати, классный метод, что если с саженцем рядом сажать, он дропается) Мне понравился. Однак проблема актуальна - дерево не растет. Сажается, удобряется костной мукой и если долго удобрять - дропается. Однако на блоке земли\травы вырастает за пару штук муки :/
 
RonyC написал(а):
Это блок-сажанец от JimmyCreeper. Перепиши в свой саженец параметры, которые указаны в коде, должно работать.
 Да, работает, но дерево-то не растет! А на земле растет. Значит ворлдген работает как часы
 
BlesseNtumble написал(а):
Как вариант - сделать свой плантблок, генерить его на Марсе и уже на нем генерить дерево.

Я уже 3 часа мучюсь... Наверно так и сделаю. Даже идея пришла. "Бедная Марсианская Земля"
 
Maxik001 написал(а):
RonyC написал(а):
Это блок-сажанец от JimmyCreeper. Перепиши в свой саженец параметры, которые указаны в коде, должно работать.
 Да, работает, но дерево-то не растет! А на земле растет. Значит ворлдген работает как часы
Как раз-таки если у тебя растет само дерево из саженца, то скорее всего проблема в генерации.
 
RonyC написал(а):
Maxik001 написал(а):
RonyC написал(а):
Это блок-сажанец от JimmyCreeper. Перепиши в свой саженец параметры, которые указаны в коде, должно работать.
 Да, работает, но дерево-то не растет! А на земле растет. Значит ворлдген работает как часы
Как раз-таки если у тебя растет само дерево из саженца, то скорее всего проблема в генерации.
В чем там может быть проблема? Она работает. На блоке земли. А на марсианской земле, несмотря на все увещевания мукой, нет.
 
RonyC написал(а):
Скорее всего что-то с генератором и кодом, которым ты его вызываешь


Хорошо поищи, в интернете все есть


Твой саженец, растет на твоей траве в твоем измерении, все работает?
P.s если прям так уверен... поищу.
 
Liahim написал(а):
Может посмотреть, есть ли в "твоей" генерации проверка на блок земли?

Мысля. Нету. Точнее, не видел  :) .

"Моя" генерация - стыренная и малек переделанная с какого то гайда. Уже не помню откуда. Там нету проверок.
 
Maxik001 написал(а):
RonyC написал(а):
Скорее всего что-то с генератором и кодом, которым ты его вызываешь


Хорошо поищи, в интернете все есть


Твой саженец, растет на твоей траве в твоем измерении, все работает?
P.s если прям так уверен... поищу.



mJUTCfXXLFY.jpg

Все растет)
 
Назад
Сверху