From c32a624f92eb096d1b439d2c6b415c717118cc4b Mon Sep 17 00:00:00 2001 From: Cheeserolls Date: Sun, 3 May 2015 23:40:18 +0100 Subject: [PATCH] Add biome essence and biome block --- .../biomesoplenty/api/biome/BOPBiome.java | 6 ++ .../biomesoplenty/api/block/BOPBlocks.java | 1 + .../java/biomesoplenty/api/item/BOPItems.java | 1 + .../common/block/BlockBiomeBlock.java | 99 +++++++++++++----- .../biomesoplenty/common/init/ModBlocks.java | 1 + .../biomesoplenty/common/init/ModItems.java | 1 + .../common/item/ItemBiomeEssence.java | 52 +++++---- .../blockstates/biome_block.json | 5 + .../models/block/biome_block.json | 6 ++ .../models/item/biome_block.json | 10 ++ .../models/item/biome_essence.json | 18 ++++ .../textures/blocks/biome_block.png | Bin 0 -> 811 bytes .../textures/items/biome_essence.png | Bin 0 -> 339 bytes 13 files changed, 145 insertions(+), 55 deletions(-) create mode 100644 src/main/resources/assets/biomesoplenty/blockstates/biome_block.json create mode 100644 src/main/resources/assets/biomesoplenty/models/block/biome_block.json create mode 100644 src/main/resources/assets/biomesoplenty/models/item/biome_block.json create mode 100644 src/main/resources/assets/biomesoplenty/models/item/biome_essence.json create mode 100644 src/main/resources/assets/biomesoplenty/textures/blocks/biome_block.png create mode 100644 src/main/resources/assets/biomesoplenty/textures/items/biome_essence.png diff --git a/src/main/java/biomesoplenty/api/biome/BOPBiome.java b/src/main/java/biomesoplenty/api/biome/BOPBiome.java index b2901027b..7442e30a0 100644 --- a/src/main/java/biomesoplenty/api/biome/BOPBiome.java +++ b/src/main/java/biomesoplenty/api/biome/BOPBiome.java @@ -69,4 +69,10 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome { this.weightMap.clear(); } + + // whether or not a biome essence item corresponding to this biome should be able to drop from biome blocks + public boolean hasBiomeEssence() + { + return true; + } } diff --git a/src/main/java/biomesoplenty/api/block/BOPBlocks.java b/src/main/java/biomesoplenty/api/block/BOPBlocks.java index 92d4305e2..19be24f6c 100644 --- a/src/main/java/biomesoplenty/api/block/BOPBlocks.java +++ b/src/main/java/biomesoplenty/api/block/BOPBlocks.java @@ -24,6 +24,7 @@ public class BOPBlocks public static Block hive; public static Block mushroom; public static Block stone; + public static Block biome_block; public static Block log_0; public static Block log_1; diff --git a/src/main/java/biomesoplenty/api/item/BOPItems.java b/src/main/java/biomesoplenty/api/item/BOPItems.java index 93f8b4450..bc02e4866 100644 --- a/src/main/java/biomesoplenty/api/item/BOPItems.java +++ b/src/main/java/biomesoplenty/api/item/BOPItems.java @@ -97,6 +97,7 @@ public class BOPItems public static Item amethyst_scythe; public static Item biome_finder; + public static Item biome_essence; public static Item enderporter; public static Item jar_empty; public static Item jar_filled; diff --git a/src/main/java/biomesoplenty/common/block/BlockBiomeBlock.java b/src/main/java/biomesoplenty/common/block/BlockBiomeBlock.java index 32906f9ab..5b947f08a 100644 --- a/src/main/java/biomesoplenty/common/block/BlockBiomeBlock.java +++ b/src/main/java/biomesoplenty/common/block/BlockBiomeBlock.java @@ -5,11 +5,15 @@ * * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. ******************************************************************************/ -/* + package biomesoplenty.common.block; -import biomesoplenty.api.biome.BOPBiomes; -import biomesoplenty.api.block.BOPBlock; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import biomesoplenty.api.biome.BOPBiome; import biomesoplenty.api.item.BOPItems; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -17,42 +21,83 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; -public class BlockBiomeBlock extends BOPBlock -{ +public class BlockBiomeBlock extends BlockBOPGeneric +{ + public BlockBiomeBlock() { super(Material.glass); this.setHardness(0.6F); this.setStepSound(Block.soundTypeGlass); } - // TODO: don't understand this method at all. - @Override - public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + // list of biomes which have an associated essence (possible drops when this block is broken) + private static List biomesWithEssence; + + // generate the list of biomes which have an associated essence + public List getBiomesWithEssence() { - if (!worldIn.isRemote && !worldIn.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe + if (biomesWithEssence != null) {return biomesWithEssence;} + + biomesWithEssence = new ArrayList(); + + List vanillaBiomesToExclude = Arrays.asList( + new BiomeGenBase[] { + BiomeGenBase.sky, + BiomeGenBase.hell, + BiomeGenBase.beach, + BiomeGenBase.coldBeach, + BiomeGenBase.stoneBeach, + BiomeGenBase.ocean, + BiomeGenBase.frozenOcean, + BiomeGenBase.deepOcean, + BiomeGenBase.river, + BiomeGenBase.frozenRiver + } + ); + + for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) { - for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) + if (biome == null) {continue;} + if (biome instanceof BOPBiome) { - if (biome == null) {continue;} - - // TODO: add the other biomes - // TODO: add areBiomesEqual function for comparing these - if ( biome.biomeID == BOPBiomes.alps.biomeID ) - { - if (worldIn.rand.nextInt(75) == 0) - { - ItemStack biome_essence = new ItemStack(BOPItems.biome_essence); - biome_essence.setTagCompound(new NBTTagCompound()); - biome_essence.getTagCompound().setInteger("biomeID", biome.biomeID); - spawnAsEntity(worldIn, pos, biome_essence); - } - } + if (((BOPBiome)biome).hasBiomeEssence()) {biomesWithEssence.add(biome);} + } + else + { + if (!vanillaBiomesToExclude.contains(biome)) {biomesWithEssence.add(biome);} } } - } + + return biomesWithEssence; + } -} -*/ \ No newline at end of file + // drops biome essence items for random biomes + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + List ret = new ArrayList(); + Random rand = world instanceof World ? ((World)world).rand : RANDOM; + + List biomes = this.getBiomesWithEssence(); + int numToDrop = rand.nextInt(fortune + 2) + 1; + int numChoices = biomes.size(); + BiomeGenBase biome; + + for (int i = 0; i < numToDrop; i++) + { + biome = biomes.get(rand.nextInt(numChoices)); + ItemStack biome_essence = new ItemStack(BOPItems.biome_essence); + biome_essence.setTagCompound(new NBTTagCompound()); + biome_essence.getTagCompound().setInteger("biomeID", biome.biomeID); + ret.add(biome_essence); + } + + return ret; + } + + +} \ No newline at end of file diff --git a/src/main/java/biomesoplenty/common/init/ModBlocks.java b/src/main/java/biomesoplenty/common/init/ModBlocks.java index ba43b4815..f3d8760bf 100644 --- a/src/main/java/biomesoplenty/common/init/ModBlocks.java +++ b/src/main/java/biomesoplenty/common/init/ModBlocks.java @@ -66,6 +66,7 @@ public class ModBlocks stone_formations = registerBlock( new BlockStoneFormations(), "stone_formations" ); fruit_block = registerBlock( new BlockFruit(), "fruit_block" /*, creativeTab(null) */); // TODO: once the mechanism for farming fruit is established: remove creative tab crystal = registerBlock( new BlockCrystal(), "crystal" ); + biome_block = registerBlock( new BlockBiomeBlock(), "biome_block" ); // generics ash_stone = registerBlock( new BlockBOPGeneric(), "ash_stone" ); diff --git a/src/main/java/biomesoplenty/common/init/ModItems.java b/src/main/java/biomesoplenty/common/init/ModItems.java index cfeecd733..bb76a59b1 100644 --- a/src/main/java/biomesoplenty/common/init/ModItems.java +++ b/src/main/java/biomesoplenty/common/init/ModItems.java @@ -174,6 +174,7 @@ public class ModItems biome_finder = registerItem(new ItemBiomeFinder(), "biome_finder"); + biome_essence = registerItem(new ItemBiomeEssence(), "biome_essence"); enderporter = registerItem(new ItemEnderporter(), "enderporter"); jar_empty = registerItem(new ItemJarEmpty(), "jar_empty"); jar_filled = registerItem(new ItemJarFilled(), "jar_filled"); diff --git a/src/main/java/biomesoplenty/common/item/ItemBiomeEssence.java b/src/main/java/biomesoplenty/common/item/ItemBiomeEssence.java index 343f39ba7..c6b6d6f17 100644 --- a/src/main/java/biomesoplenty/common/item/ItemBiomeEssence.java +++ b/src/main/java/biomesoplenty/common/item/ItemBiomeEssence.java @@ -17,7 +17,6 @@ import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -// TODO: This is probably all kinds of wrong public class ItemBiomeEssence extends Item { public ItemBiomeEssence() {} @@ -28,49 +27,46 @@ public class ItemBiomeEssence extends Item return true; } - // TODO: wtf? + // TODO: really? this looks well dodgy. @Override public ItemStack getContainerItem(ItemStack itemStack) { return itemStack; - } + } + public BiomeGenBase getBiome(ItemStack itemStack) + { + if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("biomeID")) + { + int biomeId = itemStack.getTagCompound().getInteger("biomeID"); + try + { + return BiomeGenBase.getBiomeGenArray()[biomeId]; + } + catch (Exception e) + { + return null; + } + } + return null; + } @Override public void addInformation(ItemStack itemStack, EntityPlayer player, List infoList, boolean advancedItemTooltips) { - if (itemStack.hasTagCompound()) + BiomeGenBase biome = this.getBiome(itemStack); + if (biome != null) { - if (itemStack.getTagCompound().hasKey("biomeID")) - { - BiomeGenBase biome = BiomeGenBase.getBiomeGenArray()[itemStack.getTagCompound().getInteger("biomeID")]; - - if (biome != null) - { - infoList.add(biome.biomeName); - } - } + infoList.add(biome.biomeName); } } @Override @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack itemStack, int par2) + public int getColorFromItemStack(ItemStack itemStack, int tintIndex) { - if (itemStack.hasTagCompound()) - { - if (itemStack.getTagCompound().hasKey("biomeID")) - { - BiomeGenBase biome = BiomeGenBase.getBiomeGenArray()[itemStack.getTagCompound().getInteger("biomeID")]; - - if (biome != null) - { - return biome.color; - } - } - } - - return 16777215; + BiomeGenBase biome = this.getBiome(itemStack); + return biome == null ? 0xFFFFFF : biome.color; } @Override diff --git a/src/main/resources/assets/biomesoplenty/blockstates/biome_block.json b/src/main/resources/assets/biomesoplenty/blockstates/biome_block.json new file mode 100644 index 000000000..449578d21 --- /dev/null +++ b/src/main/resources/assets/biomesoplenty/blockstates/biome_block.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "biomesoplenty:biome_block" } + } +} diff --git a/src/main/resources/assets/biomesoplenty/models/block/biome_block.json b/src/main/resources/assets/biomesoplenty/models/block/biome_block.json new file mode 100644 index 000000000..6e362d4c0 --- /dev/null +++ b/src/main/resources/assets/biomesoplenty/models/block/biome_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "biomesoplenty:blocks/biome_block" + } +} diff --git a/src/main/resources/assets/biomesoplenty/models/item/biome_block.json b/src/main/resources/assets/biomesoplenty/models/item/biome_block.json new file mode 100644 index 000000000..f6398169d --- /dev/null +++ b/src/main/resources/assets/biomesoplenty/models/item/biome_block.json @@ -0,0 +1,10 @@ +{ + "parent": "biomesoplenty:block/biome_block", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/src/main/resources/assets/biomesoplenty/models/item/biome_essence.json b/src/main/resources/assets/biomesoplenty/models/item/biome_essence.json new file mode 100644 index 000000000..f23a86173 --- /dev/null +++ b/src/main/resources/assets/biomesoplenty/models/item/biome_essence.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "biomesoplenty:items/biome_essence" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/biomesoplenty/textures/blocks/biome_block.png b/src/main/resources/assets/biomesoplenty/textures/blocks/biome_block.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c02777c1e07a3fdf9bd1db77f7301d9fd0ccd4 GIT binary patch literal 811 zcmV+`1JwM9P)N2bPDNB8 zb~7$DE-^7j^FlWO00O5;L_t(IPc4#*Pf}qR#?Qak`WsqntxauO)G8*Hf(j*|96`Cr zO$?46Zl1&KfS?JAXbK9F5DvV6tCSLI6U;@=$+mCbzT5M?&-;5{qF6RxwEX9-U?TPo zqj+d8e_i;${&&@GuVWn5-M5Fteoj+sGViU=m$}h=UjOAPfKx26W!mPw9C1z-ShjhPp6w94WOMg;OrUEEU}#8;xZm`9Z-)80f~GU;4}@yyud4 z(~2ifb-#K@pdNlfve96vYNv$oR<1heW3}x3n6bsIE>_W4g6%7sbw7 zN(bceXBf_8rjQ{~IddSzW-AJ1dT-ij6Rd6I-*ZcCjw&<5o?%$sN-6>O^m36G{qh^MJw=XiC2mCzBHB~MOH^#q!455C#8-Z9OL z%&6<*3kLy$?CjX$R&RtWpdc{7RA{UHl`bZQxKO2|Zbq-~Lp9Mjyd`vjmh7P&yIaVJ0nTb=(OSmO2oy- zPc$x&1$15jQkjn`*hpy3*zhPi439t%)G@;Y3hY}Riww+xESi@<)u1bstqe1WoUp!a pSUknJzTU+)8X5r~FfAUM{{reQ9mU6U4a@)l002ovPDHLkV1mpfXqNy0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/biomesoplenty/textures/items/biome_essence.png b/src/main/resources/assets/biomesoplenty/textures/items/biome_essence.png new file mode 100644 index 0000000000000000000000000000000000000000..0075e1bc13bf26ff3cf146afbf74d67f780085d7 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dh+K$tP>S|=w^P^!c=q9iy!t)x7$D3u`~F*C13&(AePq0Cs%RL{`R{j-xfP}O-) z7sn6_|D_W)a!J9`3@F+&R!)FD$EUqv(z|` z_m&^D=zCW0$=1-6D3K94ZTEp{|8thFcD;*bY}oj|`quZk*GiXe%ROtL!NSJa`;>9n g5AJ0@<^|L;bh`feeNx8g3(#u}p00i_>zopr06PGIdH?_b literal 0 HcmV?d00001