343 lines
9.2 KiB
Java
343 lines
9.2 KiB
Java
package net.universe_factory.minecraft.test.generic;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockLeaves;
|
|
import net.minecraft.block.BlockLog;
|
|
import net.minecraft.block.BlockSapling;
|
|
import net.minecraft.block.BlockSlab;
|
|
import net.minecraft.block.BlockStairs;
|
|
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.init.Items;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemSlab;
|
|
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.event.terraingen.TerrainGen;
|
|
import net.minecraftforge.oredict.OreDictionary;
|
|
import net.universe_factory.minecraft.test.Test;
|
|
import cpw.mods.fml.common.registry.GameRegistry;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
public abstract class GenericWood {
|
|
public final Block planks;
|
|
public final Block log;
|
|
public final BlockLeaves leaves;
|
|
public final BlockSapling sapling;
|
|
public final BlockSlab slab;
|
|
public final BlockSlab double_slab;
|
|
public final BlockStairs stairs;
|
|
|
|
protected GenericWood() {
|
|
planks = new Planks();
|
|
log = new Log();
|
|
leaves = new Leaves();
|
|
sapling = new Sapling();
|
|
slab = new Slab(false);
|
|
double_slab = new Slab(true);
|
|
stairs = new Stairs();
|
|
}
|
|
|
|
public void register() {
|
|
GameRegistry.registerBlock(planks, "wood_" + getName().toLowerCase());
|
|
GameRegistry.registerBlock(log, "log_" + getName().toLowerCase());
|
|
GameRegistry.registerBlock(leaves, "leaves_" + getName().toLowerCase());
|
|
GameRegistry.registerBlock(sapling, "sapling_" + getName().toLowerCase());
|
|
|
|
GameRegistry.registerBlock(slab, null, "wooden_slab_" + getName().toLowerCase());
|
|
GameRegistry.registerItem(new ItemSlab(slab, slab, double_slab, false), "wooden_slab_" + getName().toLowerCase());
|
|
|
|
GameRegistry.registerBlock(double_slab, null, "double_wooden_slab_" + getName().toLowerCase());
|
|
GameRegistry.registerItem(new ItemSlab(double_slab, slab, double_slab, true), "double_wooden_slab_" + getName().toLowerCase());
|
|
|
|
GameRegistry.registerBlock(stairs, "stairs_wood_" + getName().toLowerCase());
|
|
|
|
GameRegistry.addRecipe(new ItemStack(planks, 4), "#", '#', log);
|
|
GameRegistry.addRecipe(new ItemStack(slab, 6), "###", '#', planks);
|
|
GameRegistry.addRecipe(new ItemStack(stairs, 4), "# ", "## ", "###", '#', planks);
|
|
|
|
GameRegistry.addSmelting(log, new ItemStack(Items.coal, 1, 1), 0.15f);
|
|
|
|
OreDictionary.registerOre("plankWood", planks);
|
|
OreDictionary.registerOre("logWood", log);
|
|
OreDictionary.registerOre("treeLeaves", leaves);
|
|
OreDictionary.registerOre("treeSapling", sapling);
|
|
|
|
OreDictionary.registerOre("slabWood", slab);
|
|
|
|
OreDictionary.registerOre("stairWood", stairs);
|
|
}
|
|
|
|
private class Planks extends Block {
|
|
public Planks() {
|
|
super(Material.wood);
|
|
|
|
setHardness(2.0f);
|
|
setResistance(5.0f);
|
|
setStepSound(Block.soundTypeWood);
|
|
setBlockName("wood" + getName());
|
|
setCreativeTab(CreativeTabs.tabBlock);
|
|
setHarvestLevel("axe", 0);
|
|
|
|
setBlockTextureName(Test.MODID + ":planks_" + getName().toLowerCase());
|
|
}
|
|
}
|
|
|
|
private class Log extends BlockLog {
|
|
private IIcon sideIcon;
|
|
private IIcon topIcon;
|
|
|
|
public Log() {
|
|
setBlockName("log" + getName());
|
|
setHarvestLevel("axe", 0);
|
|
|
|
setBlockTextureName(Test.MODID + ":log");
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
|
sideIcon = iconRegister.registerIcon(this.getTextureName() + "_" + getName().toLowerCase());
|
|
topIcon = iconRegister.registerIcon(this.getTextureName() + "_" + 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[] { getName() };
|
|
private IIcon icon;
|
|
private IIcon iconOpaque;
|
|
|
|
public Leaves() {
|
|
setBlockName("leaves" + getName());
|
|
|
|
setBlockTextureName(Test.MODID + ":leaves");
|
|
|
|
setGraphicsLevel(true);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
|
icon = iconRegister.registerIcon(this.getTextureName() + "_" + getName().toLowerCase());
|
|
iconOpaque = iconRegister.registerIcon(this.getTextureName() + "_" + 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);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public int getBlockColor() {
|
|
// double d0 = 0.5D;
|
|
// double d1 = 1.0D;
|
|
// return ColorizerFoliage.getFoliageColor(d0, d1);
|
|
return 0xffffff;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public int getRenderColor(int meta) {
|
|
// return ColorizerFoliage.getFoliageColorBasic();
|
|
return 0xffffff;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public int colorMultiplier(IBlockAccess world, int x, int y, int z) {
|
|
// int l = 0;
|
|
// int i1 = 0;
|
|
// int j1 = 0;
|
|
//
|
|
// for (int k1 = -1; k1 <= 1; ++k1) {
|
|
// for (int l1 = -1; l1 <= 1; ++l1) {
|
|
// int i2 = world.getBiomeGenForCoords(x + l1, z +
|
|
// k1).getBiomeFoliageColor(x + l1,
|
|
// y, z + k1);
|
|
// l += (i2 & 16711680) >> 16;
|
|
// i1 += (i2 & 65280) >> 8;
|
|
// j1 += i2 & 255;
|
|
// }
|
|
// }
|
|
//
|
|
// return (l / 9 & 255) << 16 | (i1 / 9 & 255) << 8 | j1
|
|
// / 9 & 255;
|
|
return 0xffffff;
|
|
}
|
|
|
|
@Override
|
|
public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float p, int fortune) {
|
|
if (!world.isRemote) {
|
|
int j1 = this.func_150123_b(meta);
|
|
|
|
if (fortune > 0) {
|
|
j1 -= 2 << fortune;
|
|
|
|
if (j1 < 10) {
|
|
j1 = 10;
|
|
}
|
|
}
|
|
|
|
if (world.rand.nextInt(j1) == 0) {
|
|
Item item = this.getItemDropped(meta, world.rand, fortune);
|
|
this.dropBlockAsItem(world, x, y, z, new ItemStack(item, 1, this.damageDropped(meta)));
|
|
}
|
|
|
|
for (ItemStack drop : GenericWood.this.getDrops(world, x, y, z, meta, fortune))
|
|
this.dropBlockAsItem(world, x, y, z, drop);
|
|
}
|
|
}
|
|
}
|
|
|
|
private class Sapling extends BlockSapling {
|
|
public Sapling() {
|
|
setBlockName("sapling" + getName());
|
|
|
|
setHardness(0.0f);
|
|
setStepSound(soundTypeGrass);
|
|
|
|
setBlockTextureName(Test.MODID + ":sapling_" + 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);
|
|
}
|
|
}
|
|
|
|
private class Slab extends BlockSlab {
|
|
public Slab(boolean doubleSlab) {
|
|
super(doubleSlab, Material.wood);
|
|
|
|
setCreativeTab(CreativeTabs.tabBlock);
|
|
|
|
setHardness(2.0f);
|
|
setResistance(5.0f);
|
|
setStepSound(soundTypeWood);
|
|
setBlockName("woodSlab" + getName());
|
|
|
|
setLightOpacity(doubleSlab ? 255 : 0);
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public IIcon getIcon(int side, int meta) {
|
|
return planks.getIcon(side, 0);
|
|
}
|
|
|
|
@Override
|
|
public Item getItemDropped(int p_149650_1_, Random random, int p_149650_3_) {
|
|
return Item.getItemFromBlock(slab);
|
|
}
|
|
|
|
@Override
|
|
protected ItemStack createStackedBlock(int meta) {
|
|
return new ItemStack(Item.getItemFromBlock(slab), 2, 0);
|
|
}
|
|
|
|
@Override
|
|
public String func_150002_b(int p_150002_1_) {
|
|
return getUnlocalizedName();
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void getSubBlocks(Item item, CreativeTabs creativeTabs, List list) {
|
|
if (!field_150004_a)
|
|
super.getSubBlocks(item, creativeTabs, list);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public Item getItem(World world, int x, int y, int z) {
|
|
return Item.getItemFromBlock(slab);
|
|
}
|
|
}
|
|
|
|
private class Stairs extends BlockStairs {
|
|
public Stairs() {
|
|
super(planks, 0);
|
|
|
|
setBlockName("stairsWood" + getName());
|
|
setLightOpacity(0);
|
|
}
|
|
}
|
|
|
|
public abstract String getName();
|
|
|
|
public abstract int getMinTreeHeight();
|
|
|
|
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int meta, int fortune) {
|
|
return new ArrayList<ItemStack>();
|
|
}
|
|
}
|