Mostly finished the biome finder, just rendering stuff now

This commit is contained in:
Adubbz 2014-01-28 23:17:08 +11:00
parent 24b2ee3335
commit 247b77c512
23 changed files with 439 additions and 107 deletions

View File

@ -9,16 +9,17 @@ import net.minecraft.client.particle.EntityBreakingFX;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.entity.RenderSnowball;
import net.minecraft.util.MathHelper;
import net.minecraftforge.client.MinecraftForgeClient;
import biomesoplenty.api.BOPItemHelper;
import biomesoplenty.client.particles.EntityDandelionFX;
import biomesoplenty.client.particles.EntityMagicTreeFX;
import biomesoplenty.client.particles.EntityPixieTrailFX;
import biomesoplenty.client.particles.EntitySteamFX;
import biomesoplenty.client.render.RenderUtils;
import biomesoplenty.client.render.blocks.BambooRenderer;
import biomesoplenty.client.render.blocks.FoliageRenderer;
import biomesoplenty.client.render.blocks.GraveRenderer;
import biomesoplenty.client.render.blocks.PlantsRenderer;
import biomesoplenty.client.render.blocks.RenderUtils;
import biomesoplenty.client.render.blocks.SmallBlockRenderer;
import biomesoplenty.client.render.entities.RenderBird;
import biomesoplenty.client.render.entities.RenderGlob;
@ -28,6 +29,7 @@ import biomesoplenty.client.render.entities.RenderPixie;
import biomesoplenty.client.render.entities.RenderRosester;
import biomesoplenty.client.render.entities.RenderWasp;
import biomesoplenty.client.render.entities.projectiles.RenderDart;
import biomesoplenty.client.render.items.BiomeFinderRenderer;
import biomesoplenty.common.configuration.BOPConfigurationIDs;
import biomesoplenty.common.entities.EntityBird;
import biomesoplenty.common.entities.EntityGlob;
@ -91,6 +93,8 @@ public class ClientProxy extends CommonProxy
{
RenderingRegistry.registerEntityRenderingHandler(EntityPixie.class, new RenderPixie());
}
MinecraftForgeClient.registerItemRenderer(BOPItemHelper.get("biomeFinder"), new BiomeFinderRenderer());
RenderingRegistry.registerBlockHandler(new FoliageRenderer());
RenderingRegistry.registerBlockHandler(new PlantsRenderer());

View File

@ -0,0 +1,111 @@
package biomesoplenty.client.render;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
public class RenderUtils
{
public static int foliageModel = -1;
public static int plantsModel = -1;
public static int bonesModel = -1;
public static int graveModel = -1;
public static int bambooModel = -1;
public static void renderStandardInvBlock(RenderBlocks renderblocks, Block block, int meta)
{
Tessellator tessellator = Tessellator.instance;
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1F, 0.0F);
//TODO: renderFaceYNeg getIcon()
renderblocks.func_147768_a(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(0, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 1.0F, 0.0F);
//TODO: renderFaceYPos getIcon()
renderblocks.func_147806_b(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(1, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, -1F);
//TODO: renderFaceZNeg getIcon()
renderblocks.func_147761_c(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(2, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, 1.0F);
//TODO: renderFaceZPos getIcon()
renderblocks.func_147734_d(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(3, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(-1F, 0.0F, 0.0F);
//TODO: renderFaceXNeg getIcon()
renderblocks.func_147798_e(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(4, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(1.0F, 0.0F, 0.0F);
//TODO: renderFaceXPos getIcon()
renderblocks.func_147764_f(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(5, meta));
tessellator.draw();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
}
public static void renderIcon(IIcon icon, double size, double z, float nx, float ny, float nz)
{
renderIcon(icon, 0.0D, 0.0D, size, size, z, nx, ny, nz);
}
public static void renderIcon(IIcon icon, double xStart, double yStart, double xEnd, double yEnd, double z, float nx, float ny, float nz)
{
if (icon == null) icon = getMissingIcon(TextureMap.locationItemsTexture);
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.setNormal(nx, ny, nz);
if (nz > 0.0F)
{
tessellator.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV());
tessellator.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV());
tessellator.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV());
tessellator.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV());
}
else
{
tessellator.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV());
tessellator.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV());
tessellator.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV());
tessellator.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV());
}
tessellator.draw();
}
public static void renderIcon(int indexX, int indexY, float minU, float maxU, float minV, float maxV, double z)
{
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, -1.0F);
//0.5000098 0.5156152 0.71876955 0.74998045
tessellator.addVertexWithUV(0D, 16D, z, minU, maxV);
tessellator.addVertexWithUV(16D, 16D, z, maxU, maxV);
tessellator.addVertexWithUV(16D, 0D, z, maxU, minV);
tessellator.addVertexWithUV(0D, 0D, z, minU, minV);
tessellator.draw();
}
public static IIcon getMissingIcon(ResourceLocation textureSheet)
{
return ((TextureMap)Minecraft.getMinecraft().getTextureManager().getTexture(textureSheet)).getAtlasSprite("missingno");
}
}

View File

@ -1,5 +1,6 @@
package biomesoplenty.client.render.blocks;
import biomesoplenty.client.render.RenderUtils;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.RenderBlocks;

View File

@ -7,6 +7,7 @@ import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import biomesoplenty.api.BOPBlockHelper;
import biomesoplenty.client.render.RenderUtils;
import biomesoplenty.common.blocks.BlockBOPFoliage;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;

View File

@ -1,5 +1,6 @@
package biomesoplenty.client.render.blocks;
import biomesoplenty.client.render.RenderUtils;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.world.IBlockAccess;

View File

@ -7,6 +7,7 @@ import net.minecraft.client.renderer.Tessellator;
import net.minecraft.init.Blocks;
import net.minecraft.world.IBlockAccess;
import biomesoplenty.api.BOPBlockHelper;
import biomesoplenty.client.render.RenderUtils;
import biomesoplenty.common.blocks.BlockBOPPlant;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;

View File

@ -1,61 +0,0 @@
package biomesoplenty.client.render.blocks;
import javax.swing.Icon;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.init.Blocks;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
public class RenderUtils
{
public static int foliageModel = -1;
public static int plantsModel = -1;
public static int bonesModel = -1;
public static int graveModel = -1;
public static int bambooModel = -1;
public static void renderStandardInvBlock(RenderBlocks renderblocks, Block block, int meta)
{
Tessellator tessellator = Tessellator.instance;
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1F, 0.0F);
//TODO: renderFaceYNeg getIcon()
renderblocks.func_147768_a(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(0, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 1.0F, 0.0F);
//TODO: renderFaceYPos getIcon()
renderblocks.func_147806_b(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(1, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, -1F);
//TODO: renderFaceZNeg getIcon()
renderblocks.func_147761_c(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(2, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, 1.0F);
//TODO: renderFaceZPos getIcon()
renderblocks.func_147734_d(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(3, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(-1F, 0.0F, 0.0F);
//TODO: renderFaceXNeg getIcon()
renderblocks.func_147798_e(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(4, meta));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(1.0F, 0.0F, 0.0F);
//TODO: renderFaceXPos getIcon()
renderblocks.func_147764_f(block, 0.0D, 0.0D, 0.0D, block.func_149691_a(5, meta));
tessellator.draw();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
}
}

View File

@ -1,5 +1,6 @@
package biomesoplenty.client.render.blocks;
import biomesoplenty.client.render.RenderUtils;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;

View File

@ -0,0 +1,169 @@
package biomesoplenty.client.render.items;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import biomesoplenty.api.BOPItemHelper;
import biomesoplenty.client.render.RenderUtils;
import biomesoplenty.common.items.ItemBiomeFinder;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BiomeFinderRenderer implements IItemRenderer
{
private int tickCount = 0;
private int loopIndex = 0;
private static ResourceLocation radarLocation = new ResourceLocation("biomesoplenty:textures/items/biomeradarstatic.png");
public double currentAngle;
public double angleDelta;
@Override
@SideOnly(Side.CLIENT)
public boolean handleRenderType(ItemStack item, ItemRenderType type)
{
return (type.equals(IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON)) || (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) || (type.equals(IItemRenderer.ItemRenderType.EQUIPPED)) || (type.equals(IItemRenderer.ItemRenderType.ENTITY));
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
{
return type == IItemRenderer.ItemRenderType.ENTITY;
}
@Override
@SideOnly(Side.CLIENT)
public void renderItem(ItemRenderType type, ItemStack item, Object... data)
{
Tessellator tessellator = Tessellator.instance;
IIcon radarIcon = ((ItemBiomeFinder)BOPItemHelper.get("biomeFinder")).radarIcon;
int index = getIconIndexFacingBiome(item);
GL11.glEnable(3042);
if (type.equals(IItemRenderer.ItemRenderType.ENTITY))
{
GL11.glTranslated(-0.5D, -0.1D, 0.0D);
}
TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager();
texturemanager.bindTexture(texturemanager.getResourceLocation(item.getItemSpriteNumber()));
float f = (float)(0.01D / radarIcon.getIconWidth());
// (originX )
float minU = ((index * 15F) / radarIcon.getIconWidth() + f) / 2;
float maxU = (((index * 15F) + 16F) / radarIcon.getIconWidth() - f) / 2;
float minV = ((0 * 15F) / radarIcon.getIconHeight() + f);
float maxV = (((0 * 15F) + 16F) / radarIcon.getIconHeight() - f);
GL11.glBlendFunc(770, 771);
if (type.equals(IItemRenderer.ItemRenderType.INVENTORY))
{
RenderUtils.renderIcon(index, 0, minU, maxU, minV, maxV, 0.001D);
}
else
{
ItemRenderer.renderItemIn2D(tessellator, maxU, minV, minU, maxV, radarIcon.getIconWidth(), radarIcon.getIconHeight(), 0.0625F);
}
GL11.glDisable(3042);
}
private int getIconIndexFacingBiome(ItemStack itemStack)
{
Minecraft minecraft = Minecraft.getMinecraft();
World world = minecraft.theWorld;
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
NBTTagCompound stackCompound = itemStack != null ? itemStack.getTagCompound() : null;
boolean foundBiome = stackCompound != null ? stackCompound.getBoolean("foundBiome") : false;
NBTTagCompound biomePositionCompound = stackCompound != null ? stackCompound.getCompoundTag("biomePosition") : null;
if (foundBiome)
{
double playerPosX = player.posX;
double playerPosZ = player.posZ;
int biomePosX = biomePositionCompound.getInteger("x");
int biomePosZ = biomePositionCompound.getInteger("z");
double d3 = 0.0D;
if (world != null)
{
double d4 = (double)biomePosX - playerPosX;
double d5 = (double)biomePosZ - playerPosZ;
player.rotationYaw %= 360.0D;
d3 = -((player.rotationYaw - 90.0D) * Math.PI / 180.0D - Math.atan2(d5, d4));
}
double d6;
for (d6 = d3 - this.currentAngle; d6 < -Math.PI; d6 += (Math.PI * 2D))
{
;
}
while (d6 >= Math.PI)
{
d6 -= (Math.PI * 2D);
}
if (d6 < -1.0D)
{
d6 = -1.0D;
}
if (d6 > 1.0D)
{
d6 = 1.0D;
}
this.angleDelta += d6 * 0.1D;
this.angleDelta *= 0.8D;
this.currentAngle += this.angleDelta;
int i;
for (i = (int)((this.currentAngle / (Math.PI * 2D) + 1.0D) * (double)32) % 32; i < 0; i = (i + 32) % 32)
{
;
}
return i;
}
else
{
if (tickCount++ > 3)
{
if (loopIndex++ < 31)
{
tickCount = 0;
}
else
{
loopIndex = 0;
}
}
return loopIndex;
}
}
}

View File

@ -22,7 +22,7 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.api.BOPBlockHelper;
import biomesoplenty.client.render.blocks.RenderUtils;
import biomesoplenty.client.render.RenderUtils;
import biomesoplenty.common.blocks.templates.BOPBlockWorldDecor;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

View File

@ -32,7 +32,7 @@ import net.minecraftforge.common.util.FakePlayer;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.api.BOPBlockHelper;
import biomesoplenty.api.BOPItemHelper;
import biomesoplenty.client.render.blocks.RenderUtils;
import biomesoplenty.client.render.RenderUtils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

View File

@ -27,7 +27,7 @@ import net.minecraftforge.common.IShearable;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.api.BOPBlockHelper;
import biomesoplenty.api.BOPItemHelper;
import biomesoplenty.client.render.blocks.RenderUtils;
import biomesoplenty.client.render.RenderUtils;
import biomesoplenty.common.blocks.templates.BOPBlockWorldDecor;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

View File

@ -13,7 +13,7 @@ import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.client.render.blocks.RenderUtils;
import biomesoplenty.client.render.RenderUtils;
public class BlockBamboo extends Block
{

View File

@ -13,7 +13,7 @@ import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.client.render.blocks.RenderUtils;
import biomesoplenty.client.render.RenderUtils;
public class BlockBones extends Block
{

View File

@ -10,7 +10,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.client.render.blocks.RenderUtils;
import biomesoplenty.client.render.RenderUtils;
public class BlockGrave extends Block
{

View File

@ -1,7 +1,5 @@
package biomesoplenty.common.core;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -19,6 +17,7 @@ import biomesoplenty.api.BOPBlockHelper;
import biomesoplenty.api.BOPItemHelper;
import biomesoplenty.common.configuration.BOPConfigurationMisc;
import biomesoplenty.common.handlers.FurnaceFuelHandler;
import biomesoplenty.common.recipes.BiomeEssenceRecipe;
import cpw.mods.fml.common.registry.GameRegistry;
public class BOPCrafting
@ -265,6 +264,7 @@ public class BOPCrafting
GameRegistry.addRecipe(new ItemStack(BOPItemHelper.get("biomeFinder"), 1, 0), new Object[] {" E ", "ERE", " E ", 'E', new ItemStack(Items.emerald, 1, 0), 'R', new ItemStack(Items.redstone, 1, 0)});
GameRegistry.addRecipe(new BiomeEssenceRecipe());
GameRegistry.addRecipe(new ItemStack(BOPBlockHelper.get("planks"), 1, 10), new Object[] {"##", "##", '#', BOPBlockHelper.get("bamboo")});
GameRegistry.addRecipe(new ItemStack(BOPItemHelper.get("jarEmpty"), 3, 0), new Object[] {"# #", "# #", "###", '#', Blocks.glass});

View File

@ -73,7 +73,7 @@ public class BOPVanillaCompat
ItemStack biomeEssence = new ItemStack(BOPItemHelper.get("biomeEssence"));
biomeEssence.setTagCompound(new NBTTagCompound());
biomeEssence.getTagCompound().setString("biome", biome.biomeName);
biomeEssence.getTagCompound().setInteger("biomeID", biome.biomeID);
desertTemple.addItem(new WeightedRandomChestContent(biomeEssence, 1, 1, 3));
dungeon.addItem(new WeightedRandomChestContent(biomeEssence, 1, 1, 3));

View File

@ -2,8 +2,10 @@ package biomesoplenty.common.eventhandler.network;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.api.BOPItemHelper;
import biomesoplenty.common.network.packet.PacketBiomePosition;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
@ -14,14 +16,5 @@ public class ConnectionEventHandler
@SubscribeEvent
public void onPlayerLoggedIn(PlayerLoggedInEvent event)
{
EntityPlayer player = (EntityPlayer)event.player;
NBTTagCompound biomeToFindCompound = player.getEntityData().getCompoundTag("biomePosition");
boolean foundBiome = player.getEntityData().getBoolean("foundBiome");
if (biomeToFindCompound != null)
{
BiomesOPlenty.packetPipeline.sendTo(new PacketBiomePosition(biomeToFindCompound.getInteger("x"), biomeToFindCompound.getInteger("z"), foundBiome), (EntityPlayerMP)player);
}
}
}

View File

@ -10,6 +10,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.biome.BiomeGenBase;
import biomesoplenty.BiomesOPlenty;
public class ItemBOPBiomeEssence extends Item
@ -19,6 +20,18 @@ public class ItemBOPBiomeEssence extends Item
this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty);
}
@Override
public boolean hasContainerItem(ItemStack itemStack)
{
return true;
}
@Override
public ItemStack getContainerItem(ItemStack itemStack)
{
return itemStack;
}
@Override
public void registerIcons(IIconRegister iconRegister)
{
@ -30,10 +43,18 @@ public class ItemBOPBiomeEssence extends Item
{
if (itemStack.hasTagCompound())
{
if (itemStack.getTagCompound().hasKey("biome")) infoList.add(itemStack.getTagCompound().getString("biome"));
if (itemStack.getTagCompound().hasKey("biomeID"))
{
BiomeGenBase biome = BiomeGenBase.func_150565_n()[itemStack.getTagCompound().getInteger("biomeID")];
if (biome != null)
{
infoList.add(biome.biomeName);
}
}
}
}
@Override
public boolean hasEffect(ItemStack itemStack, int pass)
{

View File

@ -1,27 +1,28 @@
package biomesoplenty.common.items;
import java.util.Arrays;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.WorldChunkManager;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.api.BOPBiomeHelper;
import biomesoplenty.client.textures.TextureBiomeFinder;
import biomesoplenty.common.network.packet.PacketBiomePosition;
public class ItemBiomeFinder extends Item
{
public IIcon radarIcon;
public ItemBiomeFinder()
{
this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty);
@ -32,14 +33,12 @@ public class ItemBiomeFinder extends Item
{
if (!itemStack.hasTagCompound()) itemStack.setTagCompound(new NBTTagCompound());
itemStack.getTagCompound().setInteger("biomeIdToFind", BOPBiomeHelper.getBOPBiome("lavenderFields").biomeID);
int biomeIDToFind = itemStack.getTagCompound().getInteger("biomeIDToFind");
int biomeIdToFind = itemStack.getTagCompound().getInteger("biomeIdToFind");
if (!world.isRemote && !player.getEntityData().getBoolean("foundBiome"))
if (!world.isRemote && !itemStack.getTagCompound().getBoolean("foundBiome"))
{
//TODO: getBiomeGenArray()
BiomeGenBase biomeToFind = BiomeGenBase.func_150565_n()[biomeIdToFind];
BiomeGenBase biomeToFind = BiomeGenBase.func_150565_n()[biomeIDToFind];
if (biomeToFind != null)
{
@ -115,8 +114,8 @@ public class ItemBiomeFinder extends Item
biomeCompound.setInteger("x", biomePosition.field_151329_a);
biomeCompound.setInteger("z", biomePosition.field_151328_c);
player.getEntityData().setTag("biomePosition", biomeCompound);
player.getEntityData().setBoolean("foundBiome", true);
itemStack.getTagCompound().setTag("biomePosition", biomeCompound);
itemStack.getTagCompound().setBoolean("foundBiome", true);
BiomesOPlenty.packetPipeline.sendTo(new PacketBiomePosition(biomePosition.field_151329_a, biomePosition.field_151328_c, true), (EntityPlayerMP)player);
}
@ -131,17 +130,31 @@ public class ItemBiomeFinder extends Item
@Override
public void registerIcons(IIconRegister iconRegister)
{
if (iconRegister instanceof TextureMap)
{
TextureAtlasSprite texture = new TextureBiomeFinder("biomesoplenty:biomefinder");
((TextureMap)iconRegister).setTextureEntry("biomesoplenty:biomefinder", texture);
this.itemIcon = texture;
}
radarIcon = iconRegister.registerIcon("biomesoplenty:biomeradar");
}
/*@Override
public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean advancedItemTooltips)
@Override
public void addInformation(ItemStack itemStack, EntityPlayer player, List infoList, boolean advancedItemTooltips)
{
if (!itemStack.hasTagCompound()) itemStack.setTagCompound(new NBTTagCompound());
}*/
if (itemStack.hasTagCompound())
{
if (itemStack.getTagCompound().hasKey("biomeIDToFind"))
{
BiomeGenBase biome = BiomeGenBase.func_150565_n()[itemStack.getTagCompound().getInteger("biomeIDToFind")];
if (biome != null)
{
infoList.add(biome.biomeName);
if (itemStack.getTagCompound().hasKey("foundBiome"))
{
boolean foundBiome = itemStack.getTagCompound().getBoolean("foundBiome");
if (foundBiome) infoList.add(EnumChatFormatting.RED + "Found biome");
else infoList.add("Right Click to Find Biome");
}
}
}
}
}
}

View File

@ -1,10 +1,11 @@
package biomesoplenty.common.network.packet;
import cpw.mods.fml.common.network.ByteBufUtils;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import biomesoplenty.api.BOPItemHelper;
import biomesoplenty.common.network.AbstractPacket;
public class PacketBiomePosition extends AbstractPacket
@ -45,9 +46,16 @@ public class PacketBiomePosition extends AbstractPacket
biomeCompound.setInteger("x", x);
biomeCompound.setInteger("z", z);
player.getEntityData().setTag("biomePosition", biomeCompound);
player.getEntityData().setBoolean("foundBiome", foundBiome);
ItemStack currentItem = player.getCurrentEquippedItem();
if (currentItem.getItem() == BOPItemHelper.get("biomeFinder"))
{
if (!currentItem.hasTagCompound()) currentItem.setTagCompound(new NBTTagCompound());
currentItem.getTagCompound().setBoolean("foundBiome", foundBiome);
currentItem.getTagCompound().setTag("biomePosition", biomeCompound);
}
}
@Override

View File

@ -0,0 +1,69 @@
package biomesoplenty.common.recipes;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import biomesoplenty.api.BOPItemHelper;
public class BiomeEssenceRecipe implements IRecipe
{
private ItemStack recipeOutput;
@Override
public boolean matches(InventoryCrafting inventoryCrafting, World world)
{
ItemStack biomeRadar = null;
ItemStack biomeEssence = null;
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
ItemStack itemstack = inventoryCrafting.getStackInRowAndColumn(j, i);
if (itemstack != null)
{
if (itemstack.getItem() == BOPItemHelper.get("biomeFinder")) biomeRadar = itemstack.copy();
else if (itemstack.getItem() == BOPItemHelper.get("biomeEssence")) biomeEssence = itemstack.copy();
}
}
}
if (biomeRadar != null && biomeEssence != null)
{
if (!biomeEssence.hasTagCompound() || !biomeEssence.getTagCompound().hasKey("biomeID")) return false;
int biomeID = biomeEssence.getTagCompound().getInteger("biomeID");
if (!biomeRadar.hasTagCompound()) biomeRadar.setTagCompound(new NBTTagCompound());
biomeRadar.getTagCompound().setInteger("biomeIDToFind", biomeID);
biomeRadar.getTagCompound().setBoolean("foundBiome", false);
recipeOutput = biomeRadar;
return true;
}
else return false;
}
@Override
public int getRecipeSize()
{
return 2;
}
@Override
public ItemStack getCraftingResult(InventoryCrafting var1)
{
return recipeOutput.copy();
}
@Override
public ItemStack getRecipeOutput()
{
return recipeOutput;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB