/*package com.jaquadro.minecraft.storagedrawers.integration;
import com.jaquadro.minecraft.chameleon.integration.IntegrationModule;
import com.jaquadro.minecraft.storagedrawers.api.StorageDrawersApi;
import com.jaquadro.minecraft.storagedrawers.api.event.DrawerPopulatedEvent;
import com.jaquadro.minecraft.storagedrawers.api.registry.IWailaTooltipHandler;
import com.jaquadro.minecraft.storagedrawers.api.render.IRenderLabel;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.renderer.VertexBuffer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import org.lwjgl.opengl.GL11;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.IEssentiaContainerItem;
import thaumcraft.api.aspects.AspectList;
public class Thaumcraft extends IntegrationModule
{
private Item[] aspectItems;
@Override
public String getModID () {
return "Thaumcraft";
}
@Override
public void init () throws Throwable {
MinecraftForge.EVENT_BUS.register(this);
aspectItems = new Item[] {
GameRegistry.findItem(getModID(), "phial"),
GameRegistry.findItem(getModID(), "wispy_essence"),
GameRegistry.findItem(getModID(), "crystal_essence"),
GameRegistry.findItem(getModID(), "jar"),
GameRegistry.findItem(getModID(), "label"),
};
StorageDrawersApi.instance().renderRegistry().registerPreLabelRenderHandler(new LabelRenderHandler());
StorageDrawersApi.instance().wailaRegistry().registerTooltipHandler(new WailaTooltipHandler());
}
@Override
public void postInit () {
}
@SubscribeEvent
public void onDrawerPopulated (DrawerPopulatedEvent event) {
IDrawer drawer = event.drawer;
if (drawer.isEmpty()) {
drawer.setExtendedData("aspect", null);
return;
}
ItemStack protoStack = drawer.getStoredItemPrototype();
for (Item item : aspectItems) {
if (item == protoStack.getItem()) {
setDrawerAspect(drawer, protoStack);
return;
}
}
}
private void setDrawerAspect (IDrawer drawer, ItemStack itemStack) {
// Check for labeled jars first
NBTTagCompound compound = itemStack.getTagCompound();
if (compound != null) {
if (compound.hasKey("AspectFilter")) {
String aspectFilter = compound.getString("AspectFilter");
Aspect aspect = Aspect.getAspect(aspectFilter);
if (aspect != null) {
drawer.setExtendedData("aspect", aspect);
return;
}
}
}
// Otherwise, see if the item contains essentia
if(itemStack.getItem() instanceof IEssentiaContainerItem) {
IEssentiaContainerItem container = (IEssentiaContainerItem)itemStack.getItem();
AspectList aspects = container.getAspects(itemStack);
if (!(aspects == null || aspects.size() == 0)) {
drawer.setExtendedData("aspect", aspects.getAspects()[0]);
}
}
}
private class WailaTooltipHandler implements IWailaTooltipHandler {
@Override
public String transformItemName (IDrawer drawer, String defaultName) {
Object aspectObj = drawer.getExtendedData("aspect");
if (!(aspectObj instanceof Aspect))
return defaultName;
Aspect aspect = (Aspect)aspectObj;
EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
//if (!ThaumcraftApiHelper.hasDiscoveredAspect(player.getDisplayName(), aspect))
// return defaultName + " (???)";
return defaultName + " (" + aspect.getName() + ")";
}
}
private class LabelRenderHandler implements IRenderLabel {
@Override
public void render (TileEntity tileEntity, IDrawerGroup drawerGroup, int slot, float brightness, float partialTickTime) {
IDrawer drawer = drawerGroup.getDrawer(slot);
if (drawer == null)
return;
Object aspectObj = drawer.getExtendedData("aspect");
if (!(aspectObj instanceof Aspect))
return;
EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
BlockPos blockPos = tileEntity.getPos().add(.5, .5, .5);
double distance = Math.sqrt(blockPos.distanceSq(player.getPosition()));
if (distance > 10)
return;
Aspect aspect = (Aspect)aspectObj;
//if (!ThaumcraftApiHelper.hasDiscoveredAspect(player.getDisplayName(), aspect))
// return;
int x = -4;
int y = -4;
int w = 8;
int h = 8;
if (drawerGroup.getDrawerCount() == 2) {
x = -16;
y = 0;
w = 16;
h = 16;
}
float alpha = 1;
if (distance > 3)
alpha = 1f - (float)((distance - 3) / 7);
int color = aspect.getColor();
float r = (color >> 16 & 255);
float g = (color >> 8 & 255);
float b = (color & 255);
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.disableLighting();
GlStateManager.enableBlend();
GlStateManager.enableAlpha();
GlStateManager.enablePolygonOffset();
GlStateManager.doPolygonOffset(-1, -1);
ResourceLocation aspectResource = aspect.getImage();
Minecraft.getMinecraft().renderEngine.bindTexture(aspectResource);
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer worldRenderer = tessellator.getBuffer();
renderQuad(worldRenderer, x, y, w, h, (int)(r), (int)(g), (int)(b), (int)(alpha * 255));
GlStateManager.disablePolygonOffset();
GlStateManager.disableAlpha();
GlStateManager.disableBlend();
GlStateManager.enableLighting();
}
}
private void renderQuad (VertexBuffer tessellator, int x, int y, int w, int h, int r, int g, int b, int a)
{
tessellator.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
tessellator.pos(x + 0, y + 0, 0).tex(0, 0).color(r, g, b, a).endVertex();
tessellator.pos(x + 0, y + h, 0).tex(0, 1).color(r, g, b, a).endVertex();
tessellator.pos(x + w, y + h, 0).tex(1, 1).color(r, g, b, a).endVertex();
tessellator.pos(x + w, y + 0, 0).tex(1, 0).color(r, g, b, a).endVertex();
Tessellator.getInstance().draw();
}
}
*/