diff --git a/src/main/java/biomesoplenty/ClientProxy.java b/src/main/java/biomesoplenty/ClientProxy.java index ab9b6c9a6..34ba1380a 100644 --- a/src/main/java/biomesoplenty/ClientProxy.java +++ b/src/main/java/biomesoplenty/ClientProxy.java @@ -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()); diff --git a/src/main/java/biomesoplenty/client/render/RenderUtils.java b/src/main/java/biomesoplenty/client/render/RenderUtils.java new file mode 100644 index 000000000..83a9f9e33 --- /dev/null +++ b/src/main/java/biomesoplenty/client/render/RenderUtils.java @@ -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"); + } +} diff --git a/src/main/java/biomesoplenty/client/render/blocks/BambooRenderer.java b/src/main/java/biomesoplenty/client/render/blocks/BambooRenderer.java index 246a6b5af..8b32a5109 100644 --- a/src/main/java/biomesoplenty/client/render/blocks/BambooRenderer.java +++ b/src/main/java/biomesoplenty/client/render/blocks/BambooRenderer.java @@ -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; diff --git a/src/main/java/biomesoplenty/client/render/blocks/FoliageRenderer.java b/src/main/java/biomesoplenty/client/render/blocks/FoliageRenderer.java index 046306c01..f57d3bd6e 100644 --- a/src/main/java/biomesoplenty/client/render/blocks/FoliageRenderer.java +++ b/src/main/java/biomesoplenty/client/render/blocks/FoliageRenderer.java @@ -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; diff --git a/src/main/java/biomesoplenty/client/render/blocks/GraveRenderer.java b/src/main/java/biomesoplenty/client/render/blocks/GraveRenderer.java index 7fc7d8ea8..5888a8fc2 100644 --- a/src/main/java/biomesoplenty/client/render/blocks/GraveRenderer.java +++ b/src/main/java/biomesoplenty/client/render/blocks/GraveRenderer.java @@ -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; diff --git a/src/main/java/biomesoplenty/client/render/blocks/PlantsRenderer.java b/src/main/java/biomesoplenty/client/render/blocks/PlantsRenderer.java index f9a4add39..b736e544a 100644 --- a/src/main/java/biomesoplenty/client/render/blocks/PlantsRenderer.java +++ b/src/main/java/biomesoplenty/client/render/blocks/PlantsRenderer.java @@ -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; diff --git a/src/main/java/biomesoplenty/client/render/blocks/RenderUtils.java b/src/main/java/biomesoplenty/client/render/blocks/RenderUtils.java deleted file mode 100644 index 9bda13ef4..000000000 --- a/src/main/java/biomesoplenty/client/render/blocks/RenderUtils.java +++ /dev/null @@ -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); - } -} diff --git a/src/main/java/biomesoplenty/client/render/blocks/SmallBlockRenderer.java b/src/main/java/biomesoplenty/client/render/blocks/SmallBlockRenderer.java index 131014d14..4f524915c 100644 --- a/src/main/java/biomesoplenty/client/render/blocks/SmallBlockRenderer.java +++ b/src/main/java/biomesoplenty/client/render/blocks/SmallBlockRenderer.java @@ -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; diff --git a/src/main/java/biomesoplenty/client/render/items/BiomeFinderRenderer.java b/src/main/java/biomesoplenty/client/render/items/BiomeFinderRenderer.java new file mode 100644 index 000000000..77c0ec893 --- /dev/null +++ b/src/main/java/biomesoplenty/client/render/items/BiomeFinderRenderer.java @@ -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; + } + } +} diff --git a/src/main/java/biomesoplenty/common/blocks/BlockBOPFlower.java b/src/main/java/biomesoplenty/common/blocks/BlockBOPFlower.java index 87e0e43ee..a0b18e90e 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockBOPFlower.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockBOPFlower.java @@ -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; diff --git a/src/main/java/biomesoplenty/common/blocks/BlockBOPFoliage.java b/src/main/java/biomesoplenty/common/blocks/BlockBOPFoliage.java index 625eefb99..23653222b 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockBOPFoliage.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockBOPFoliage.java @@ -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; diff --git a/src/main/java/biomesoplenty/common/blocks/BlockBOPPlant.java b/src/main/java/biomesoplenty/common/blocks/BlockBOPPlant.java index fdc596a12..3d787ff26 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockBOPPlant.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockBOPPlant.java @@ -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; diff --git a/src/main/java/biomesoplenty/common/blocks/BlockBamboo.java b/src/main/java/biomesoplenty/common/blocks/BlockBamboo.java index 0c8a0ae43..b8621d03e 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockBamboo.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockBamboo.java @@ -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 { diff --git a/src/main/java/biomesoplenty/common/blocks/BlockBones.java b/src/main/java/biomesoplenty/common/blocks/BlockBones.java index 5c25ebd76..1f845fdbd 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockBones.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockBones.java @@ -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 { diff --git a/src/main/java/biomesoplenty/common/blocks/BlockGrave.java b/src/main/java/biomesoplenty/common/blocks/BlockGrave.java index bb1b38d2d..11a4d88c9 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockGrave.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockGrave.java @@ -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 { diff --git a/src/main/java/biomesoplenty/common/core/BOPCrafting.java b/src/main/java/biomesoplenty/common/core/BOPCrafting.java index b892d1d83..5f0f99e03 100644 --- a/src/main/java/biomesoplenty/common/core/BOPCrafting.java +++ b/src/main/java/biomesoplenty/common/core/BOPCrafting.java @@ -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}); diff --git a/src/main/java/biomesoplenty/common/core/BOPVanillaCompat.java b/src/main/java/biomesoplenty/common/core/BOPVanillaCompat.java index e348bb7af..8c76861cd 100644 --- a/src/main/java/biomesoplenty/common/core/BOPVanillaCompat.java +++ b/src/main/java/biomesoplenty/common/core/BOPVanillaCompat.java @@ -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)); diff --git a/src/main/java/biomesoplenty/common/eventhandler/network/ConnectionEventHandler.java b/src/main/java/biomesoplenty/common/eventhandler/network/ConnectionEventHandler.java index 3aa061a20..0cc67ab7f 100644 --- a/src/main/java/biomesoplenty/common/eventhandler/network/ConnectionEventHandler.java +++ b/src/main/java/biomesoplenty/common/eventhandler/network/ConnectionEventHandler.java @@ -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); - } } } diff --git a/src/main/java/biomesoplenty/common/items/ItemBOPBiomeEssence.java b/src/main/java/biomesoplenty/common/items/ItemBOPBiomeEssence.java index 8794aac7d..6e9740a3e 100644 --- a/src/main/java/biomesoplenty/common/items/ItemBOPBiomeEssence.java +++ b/src/main/java/biomesoplenty/common/items/ItemBOPBiomeEssence.java @@ -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) { diff --git a/src/main/java/biomesoplenty/common/items/ItemBiomeFinder.java b/src/main/java/biomesoplenty/common/items/ItemBiomeFinder.java index 7c9136157..e656df8bb 100644 --- a/src/main/java/biomesoplenty/common/items/ItemBiomeFinder.java +++ b/src/main/java/biomesoplenty/common/items/ItemBiomeFinder.java @@ -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"); + } + } + } + } + } } diff --git a/src/main/java/biomesoplenty/common/network/packet/PacketBiomePosition.java b/src/main/java/biomesoplenty/common/network/packet/PacketBiomePosition.java index ecb74fdd4..80c6c44d3 100644 --- a/src/main/java/biomesoplenty/common/network/packet/PacketBiomePosition.java +++ b/src/main/java/biomesoplenty/common/network/packet/PacketBiomePosition.java @@ -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 diff --git a/src/main/java/biomesoplenty/common/recipes/BiomeEssenceRecipe.java b/src/main/java/biomesoplenty/common/recipes/BiomeEssenceRecipe.java new file mode 100644 index 000000000..35c547a35 --- /dev/null +++ b/src/main/java/biomesoplenty/common/recipes/BiomeEssenceRecipe.java @@ -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; + } +} diff --git a/src/main/resources/assets/biomesoplenty/textures/items/biomeradar.png b/src/main/resources/assets/biomesoplenty/textures/items/biomeradar.png new file mode 100644 index 000000000..09f73c8ce Binary files /dev/null and b/src/main/resources/assets/biomesoplenty/textures/items/biomeradar.png differ