diff --git a/java/net/universe_factory/minecraft/test/Test.java b/java/net/universe_factory/minecraft/test/Test.java index 432bce9..759ffd8 100644 --- a/java/net/universe_factory/minecraft/test/Test.java +++ b/java/net/universe_factory/minecraft/test/Test.java @@ -10,7 +10,7 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; import net.universe_factory.minecraft.test.blocks.*; -import net.universe_factory.minecraft.test.recipes.RecipesWoodTest; +import net.universe_factory.minecraft.test.generic.GenericWood; @Mod(modid = Test.MODID, version = Test.VERSION) @@ -18,15 +18,22 @@ public class Test { public static final String MODID = "neoraider_test"; public static final String VERSION = "1"; - public static final Block blockWoodTest = new BlockWoodTest(); + public static final GenericWood cherry = new GenericWood(new GenericWood.Info() { + @Override + public String getName() { + return "Cherry"; + } + + @Override + public int getMinTreeHeight() { + return 4; + }}); @Instance(value = MODID) public static Test instance; @EventHandler public void init(FMLInitializationEvent event) { - GameRegistry.registerBlock(blockWoodTest, "blockWoodTest"); - - + cherry.register(); } } diff --git a/java/net/universe_factory/minecraft/test/blocks/BlockWoodTest.java b/java/net/universe_factory/minecraft/test/blocks/BlockWoodTest.java deleted file mode 100644 index 223837a..0000000 --- a/java/net/universe_factory/minecraft/test/blocks/BlockWoodTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.universe_factory.minecraft.test.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.universe_factory.minecraft.test.Test; - -public class BlockWoodTest extends Block { - public BlockWoodTest() { - super(Material.wood); - - setHardness(2.0f); - setResistance(5.0f); - setStepSound(Block.soundTypeWood); - setBlockName("woodTest"); - setCreativeTab(CreativeTabs.tabBlock); - setHarvestLevel("axe", 0); - - setBlockTextureName(Test.MODID + ":planks_test"); - } -} diff --git a/java/net/universe_factory/minecraft/test/generic/GenericWood.java b/java/net/universe_factory/minecraft/test/generic/GenericWood.java new file mode 100644 index 0000000..201425d --- /dev/null +++ b/java/net/universe_factory/minecraft/test/generic/GenericWood.java @@ -0,0 +1,188 @@ +package net.universe_factory.minecraft.test.generic; + +import java.util.List; +import java.util.Random; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLog; +import net.minecraft.block.BlockSapling; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenBigTree; +import net.minecraft.world.gen.feature.WorldGenTrees; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.event.terraingen.TerrainGen; +import net.universe_factory.minecraft.test.Test; + +public class GenericWood { + public final Info info; + + public final Block planks; + public final Block log; + public final BlockLeaves leaves; + public final BlockSapling sapling; + + public GenericWood(Info info) { + this.info = info; + + planks = new Planks(); + log = new Log(); + leaves = new Leaves(); + sapling = new Sapling(); + } + + public void register() { + GameRegistry.registerBlock(planks, "blockWood" + info.getName()); + GameRegistry.registerBlock(log, "blockLog" + info.getName()); + GameRegistry.registerBlock(leaves, "blockLeaves" + info.getName()); + GameRegistry.registerBlock(sapling, "blockSapling" + info.getName()); + + GameRegistry.addRecipe(new ItemStack(planks, 4, 0), "#", '#', log); + } + + private class Planks extends Block { + public Planks() { + super(Material.wood); + + setHardness(2.0f); + setResistance(5.0f); + setStepSound(Block.soundTypeWood); + setBlockName("wood" + info.getName()); + setCreativeTab(CreativeTabs.tabBlock); + setHarvestLevel("axe", 0); + + setBlockTextureName(Test.MODID + ":planks_" + info.getName().toLowerCase()); + } + } + + private class Log extends BlockLog { + private IIcon sideIcon; + private IIcon topIcon; + + public Log() { + setBlockName("log" + info.getName()); + setHarvestLevel("axe", 0); + + setBlockTextureName(Test.MODID + ":log"); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + sideIcon = iconRegister.registerIcon(this.getTextureName() + "_" + info.getName().toLowerCase()); + topIcon = iconRegister.registerIcon(this.getTextureName() + "_" + info.getName().toLowerCase() + "_top"); + } + + @Override + @SideOnly(Side.CLIENT) + protected IIcon getSideIcon(int meta) { + return sideIcon; + } + + @Override + @SideOnly(Side.CLIENT) + protected IIcon getTopIcon(int meta) { + return topIcon; + } + } + + private class Leaves extends BlockLeaves { + private String[] nameArray = new String[] { info.getName() }; + private IIcon icon; + private IIcon iconOpaque; + + public Leaves() { + setBlockName("leaves" + info.getName()); + + setBlockTextureName(Test.MODID + ":leaves"); + + setGraphicsLevel(true); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + icon = iconRegister.registerIcon(this.getTextureName() + "_" + info.getName().toLowerCase()); + iconOpaque = iconRegister.registerIcon(this.getTextureName() + "_" + info.getName().toLowerCase() + "_opaque"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return (field_150127_b == 0) ? icon : iconOpaque; + } + + @Override + public String[] func_150125_e() { + return nameArray; + } + + @Override + public int quantityDropped(Random random) { + return random.nextInt(20) == 0 ? 1 : 0; + } + + @Override + public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { + return Item.getItemFromBlock(sapling); + } + } + + private class Sapling extends BlockSapling { + public Sapling() { + setBlockName("sapling" + info.getName()); + + setHardness(0.0f); + setStepSound(soundTypeGrass); + + setBlockTextureName(Test.MODID + ":sapling_" + info.getName().toLowerCase()); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon(this.getTextureName()); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tabs, List list) { + list.add(new ItemStack(item, 1, 0)); + } + + /** Grows the tree */ + @Override + public void func_149878_d(World world, int x, int y, int z, Random random) { + if (!TerrainGen.saplingGrowTree(world, random, x, y, z)) + return; + + WorldGenerator generator = new WorldGenGenericTrees(true, GenericWood.this); + + world.setBlock(x, y, z, Blocks.air, 0, 4); + + if (!generator.generate(world, random, x, y, z)) + world.setBlock(x, y, z, this, 0, 4); + } + } + + public static abstract class Info { + public abstract String getName(); + public abstract int getMinTreeHeight(); + } +} diff --git a/java/net/universe_factory/minecraft/test/generic/WorldGenGenericTrees.java b/java/net/universe_factory/minecraft/test/generic/WorldGenGenericTrees.java new file mode 100644 index 0000000..678bc38 --- /dev/null +++ b/java/net/universe_factory/minecraft/test/generic/WorldGenGenericTrees.java @@ -0,0 +1,115 @@ +package net.universe_factory.minecraft.test.generic; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockSapling; +import net.minecraft.init.Blocks; +import net.minecraft.util.Direction; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenAbstractTree; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.ForgeDirection; + +public class WorldGenGenericTrees extends WorldGenAbstractTree { + private final GenericWood genericWood; + + public WorldGenGenericTrees(boolean b, GenericWood genericWood) { + super(b); + + this.genericWood = genericWood; + } + + @Override + public boolean generate(World world, Random random, int x, int y, int z) { + int height = random.nextInt(3) + genericWood.info.getMinTreeHeight(); + boolean flag = true; + + if (y >= 1 && y + height + 1 <= 256) { + byte b0; + int k1; + Block block; + + for (int i1 = y; i1 <= y + 1 + height; ++i1) { + b0 = 1; + + if (i1 == y) { + b0 = 0; + } + + if (i1 >= y + 1 + height - 2) { + b0 = 2; + } + + for (int j1 = x - b0; j1 <= x + b0 && flag; ++j1) { + for (k1 = z - b0; k1 <= z + b0 && flag; ++k1) { + if (i1 >= 0 && i1 < 256) { + block = world.getBlock(j1, i1, k1); + + if (!this.isReplaceable(world, j1, i1, k1)) { + flag = false; + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block2 = world.getBlock(x, y - 1, z); + + boolean isSoil = block2.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, genericWood.sapling); + if (isSoil && y < 256 - height - 1) { + block2.onPlantGrow(world, x, y - 1, z, x, y, z); + b0 = 3; + byte b1 = 0; + int l1; + int i2; + int j2; + int i3; + + for (k1 = y - b0 + height; k1 <= y + height; ++k1) { + i3 = k1 - (y + height); + l1 = b1 + 1 - i3 / 2; + + for (i2 = x - l1; i2 <= x + l1; ++i2) { + j2 = i2 - x; + + for (int k2 = z - l1; k2 <= z + l1; ++k2) { + int l2 = k2 - z; + + if (Math.abs(j2) != l1 || Math.abs(l2) != l1 || random.nextInt(2) != 0 && i3 != 0) { + Block block1 = world.getBlock(i2, k1, k2); + + if (block1.isAir(world, i2, k1, k2) || block1.isLeaves(world, i2, k1, k2)) { + this.setBlockAndNotifyAdequately(world, i2, k1, k2, genericWood.leaves, 0); + } + } + } + } + } + + for (k1 = 0; k1 < height; ++k1) { + block = world.getBlock(x, y + k1, z); + + if (block.isAir(world, x, y + k1, z) || block.isLeaves(world, x, y + k1, z)) { + this.setBlockAndNotifyAdequately(world, x, y + k1, z, genericWood.log, 0); + + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } + +} diff --git a/resources/assets/neoraider_test/lang/en_US.lang b/resources/assets/neoraider_test/lang/en_US.lang index f511665..f5f5c0e 100644 --- a/resources/assets/neoraider_test/lang/en_US.lang +++ b/resources/assets/neoraider_test/lang/en_US.lang @@ -1 +1,4 @@ -tile.woodTest.name=Test Wood +tile.woodCherry.name=Cherry Tree Wood Planks +tile.logCherry.name=Cherry Tree Wood +tile.leavesCherry.name=Cherry Tree Leaves +tile.saplingCherry.name=Cherry Tree Sapling \ No newline at end of file