NaturesAura/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java

467 lines
25 KiB
Java
Raw Normal View History

2018-10-13 20:35:18 +02:00
package de.ellpeck.naturesaura.events;
2020-01-21 21:04:44 +01:00
import com.mojang.blaze3d.platform.GlStateManager;
2019-01-27 13:57:34 +01:00
import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.ModConfig;
2018-10-13 20:35:18 +02:00
import de.ellpeck.naturesaura.NaturesAura;
2018-11-12 22:04:40 +01:00
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
2018-11-11 13:26:19 +01:00
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.container.IAuraContainer;
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.api.render.IVisualizable;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityGratedChute;
2018-10-20 21:19:08 +02:00
import de.ellpeck.naturesaura.blocks.tiles.TileEntityNatureAltar;
2019-01-26 00:34:05 +01:00
import de.ellpeck.naturesaura.blocks.tiles.TileEntityRFConverter;
2018-10-19 14:35:25 +02:00
import de.ellpeck.naturesaura.compat.Compat;
2019-11-04 19:08:49 +01:00
import de.ellpeck.naturesaura.items.AuraCache;
2018-10-14 17:46:00 +02:00
import de.ellpeck.naturesaura.items.ModItems;
2020-01-21 21:04:44 +01:00
import de.ellpeck.naturesaura.items.RangeVisualizer;
2018-10-13 20:35:18 +02:00
import de.ellpeck.naturesaura.particles.ParticleHandler;
2019-01-27 13:57:34 +01:00
import net.minecraft.block.Block;
2019-10-20 22:30:49 +02:00
import net.minecraft.block.BlockState;
2020-01-21 21:04:44 +01:00
import net.minecraft.block.IGrowable;
import net.minecraft.block.LeavesBlock;
import net.minecraft.client.MainWindow;
2018-10-13 20:35:18 +02:00
import net.minecraft.client.Minecraft;
2019-10-20 22:30:49 +02:00
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.Entity;
2018-10-14 17:46:00 +02:00
import net.minecraft.item.ItemStack;
2020-01-21 21:04:44 +01:00
import net.minecraft.item.Items;
2018-10-14 17:46:00 +02:00
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple;
2019-01-27 13:57:34 +01:00
import net.minecraft.util.math.AxisAlignedBB;
2018-10-14 17:46:00 +02:00
import net.minecraft.util.math.BlockPos;
2020-01-21 21:04:44 +01:00
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
2018-10-13 20:35:18 +02:00
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
2019-10-20 22:30:49 +02:00
import net.minecraft.world.biome.BiomeColors;
2020-01-21 21:04:44 +01:00
import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.Heightmap;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
2018-10-13 20:35:18 +02:00
import net.minecraftforge.client.event.RenderGameOverlayEvent;
2018-10-14 17:46:00 +02:00
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
2018-10-13 20:35:18 +02:00
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.common.IPlantable;
2019-01-26 00:34:05 +01:00
import net.minecraftforge.energy.EnergyStorage;
2020-01-21 21:04:44 +01:00
import net.minecraftforge.event.TickEvent;
2019-10-20 22:30:49 +02:00
import net.minecraftforge.eventbus.api.SubscribeEvent;
import org.apache.commons.lang3.mutable.MutableInt;
import org.lwjgl.opengl.GL11;
2018-10-13 20:35:18 +02:00
2019-01-29 16:01:10 +01:00
import java.text.NumberFormat;
import java.util.HashMap;
2018-10-13 20:35:18 +02:00
import java.util.List;
import java.util.Map;
2018-10-13 20:35:18 +02:00
2019-10-20 22:30:49 +02:00
@OnlyIn(Dist.CLIENT)
2018-10-13 20:35:18 +02:00
public class ClientEvents {
2018-10-20 21:19:08 +02:00
public static final ResourceLocation OVERLAYS = new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/overlays.png");
2019-03-01 20:51:43 +01:00
public static final ResourceLocation BOOK_GUI = new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/book.png");
private static final ItemStack ITEM_FRAME = new ItemStack(Items.ITEM_FRAME);
private static final Map<ResourceLocation, Tuple<ItemStack, Boolean>> SHOWING_EFFECTS = new HashMap<>();
private static ItemStack heldCache = ItemStack.EMPTY;
private static ItemStack heldEye = ItemStack.EMPTY;
private static ItemStack heldOcular = ItemStack.EMPTY;
2018-10-13 20:35:18 +02:00
@SubscribeEvent
public void onDebugRender(RenderGameOverlayEvent.Text event) {
2020-01-21 21:04:44 +01:00
Minecraft mc = Minecraft.getInstance();
if (mc.gameSettings.showDebugInfo && ModConfig.client.debugText) {
2018-10-13 20:35:18 +02:00
String prefix = TextFormatting.GREEN + "[" + NaturesAura.MOD_NAME + "]" + TextFormatting.RESET + " ";
List<String> left = event.getLeft();
left.add("");
2019-02-19 17:23:03 +01:00
int depth = ParticleHandler.getParticleAmount(true);
int noDepth = ParticleHandler.getParticleAmount(false);
left.add(prefix + "P: " + (depth + noDepth) + " (D: " + depth + " nD: " + noDepth + ")");
2020-01-21 21:04:44 +01:00
if (mc.player.isCreative()) {
2018-11-11 13:26:19 +01:00
MutableInt amount = new MutableInt(IAuraChunk.DEFAULT_AURA);
MutableInt spots = new MutableInt();
IAuraChunk.getSpotsInArea(mc.world, mc.player.getPosition(), 35, (blockPos, drainSpot) -> {
spots.increment();
amount.add(drainSpot);
});
2019-01-29 16:01:10 +01:00
NumberFormat format = NumberFormat.getInstance();
2019-02-19 17:23:03 +01:00
left.add(prefix + "A: " + format.format(amount.intValue()) + " (S: " + spots.intValue() + ")");
left.add(prefix + "AT: " + IAuraType.forWorld(mc.world).getName());
}
2018-10-13 20:35:18 +02:00
}
}
@SubscribeEvent
public void onRenderLast(RenderWorldLastEvent event) {
2020-01-21 21:04:44 +01:00
Minecraft mc = Minecraft.getInstance();
2018-10-13 20:35:18 +02:00
ParticleHandler.renderParticles(event.getPartialTicks());
}
@SubscribeEvent
2020-01-21 21:04:44 +01:00
public void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
heldCache = ItemStack.EMPTY;
heldEye = ItemStack.EMPTY;
heldOcular = ItemStack.EMPTY;
2020-01-21 21:04:44 +01:00
Minecraft mc = Minecraft.getInstance();
if (mc.world == null) {
ParticleHandler.clearParticles();
2019-11-04 19:08:49 +01:00
RangeVisualizer.clear();
} else if (!mc.isGamePaused()) {
2020-01-21 21:04:44 +01:00
if (mc.world.getGameTime() % 20 == 0) {
int amount = MathHelper.floor(190 * ModConfig.client.excessParticleAmount);
for (int i = 0; i < amount; i++) {
int x = MathHelper.floor(mc.player.posX) + mc.world.rand.nextInt(64) - 32;
int z = MathHelper.floor(mc.player.posZ) + mc.world.rand.nextInt(64) - 32;
2020-01-21 21:04:44 +01:00
BlockPos pos = new BlockPos(x, mc.world.getHeight(Heightmap.Type.WORLD_SURFACE, x, z) - 1, z);
2019-10-20 22:30:49 +02:00
BlockState state = mc.world.getBlockState(pos);
Block block = state.getBlock();
2020-01-21 21:04:44 +01:00
if (block instanceof IGrowable || block instanceof IPlantable || block instanceof LeavesBlock) {
int excess = IAuraChunk.triangulateAuraInArea(mc.world, pos, 45) - IAuraChunk.DEFAULT_AURA;
if (excess > 0) {
int chance = Math.max(10, 50 - excess / 25000);
if (mc.world.rand.nextInt(chance) <= 0)
NaturesAuraAPI.instance().spawnMagicParticle(
pos.getX() + mc.world.rand.nextFloat(),
pos.getY() + 0.5F,
pos.getZ() + mc.world.rand.nextFloat(),
mc.world.rand.nextGaussian() * 0.01F,
mc.world.rand.nextFloat() * 0.025F,
mc.world.rand.nextGaussian() * 0.01F,
2020-01-21 21:04:44 +01:00
BiomeColors.getFoliageColor(mc.world, pos),
Math.min(2F, 1F + mc.world.rand.nextFloat() * (excess / 30000F)),
Math.min(300, 100 + mc.world.rand.nextInt(excess / 3000 + 1)),
0F, false, true);
}
}
}
}
2020-01-21 21:04:44 +01:00
if (Helper.isHoldingItem(mc.player, ModItems.RANGE_VISUALIZER) && mc.world.getGameTime() % 5 == 0) {
2019-03-20 20:51:24 +01:00
NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance();
inst.setParticleSpawnRange(512);
inst.setParticleDepth(false);
2020-01-21 21:04:44 +01:00
for (BlockPos pos : RangeVisualizer.VISUALIZED_RAILS.get(mc.world.getDimension().getType())) {
2019-03-20 20:51:24 +01:00
NaturesAuraAPI.instance().spawnMagicParticle(
pos.getX() + mc.world.rand.nextFloat(),
pos.getY() + mc.world.rand.nextFloat(),
pos.getZ() + mc.world.rand.nextFloat(),
0F, 0F, 0F, 0xe0faff, mc.world.rand.nextFloat() * 5 + 1, 100, 0F, false, true);
}
inst.setParticleDepth(true);
inst.setParticleSpawnRange(32);
}
ParticleHandler.updateParticles();
2019-03-20 20:51:24 +01:00
if (Compat.baubles) {
2020-01-21 21:04:44 +01:00
// TODO baubles
/*IItemHandler baubles = BaublesApi.getBaublesHandler(mc.player);
2019-03-20 20:51:24 +01:00
for (int i = 0; i < baubles.getSlots(); i++) {
ItemStack slot = baubles.getStackInSlot(i);
if (!slot.isEmpty()) {
2019-11-04 19:08:49 +01:00
if (slot.getItem() instanceof AuraCache)
heldCache = slot;
2019-03-20 20:51:24 +01:00
else if (slot.getItem() == ModItems.EYE)
heldEye = slot;
else if (slot.getItem() == ModItems.EYE_IMPROVED)
heldOcular = slot;
}
2020-01-21 21:04:44 +01:00
}*/
2019-03-20 20:51:24 +01:00
}
2019-03-20 20:51:24 +01:00
for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
ItemStack slot = mc.player.inventory.getStackInSlot(i);
if (!slot.isEmpty()) {
2019-11-04 19:08:49 +01:00
if (slot.getItem() instanceof AuraCache)
2019-03-20 20:51:24 +01:00
heldCache = slot;
else if (slot.getItem() == ModItems.EYE && i <= 8)
heldEye = slot;
else if (slot.getItem() == ModItems.EYE_IMPROVED)
heldOcular = slot;
}
}
2019-03-20 20:51:24 +01:00
2020-01-21 21:04:44 +01:00
if (!heldOcular.isEmpty() && mc.world.getGameTime() % 20 == 0) {
2019-03-20 20:51:24 +01:00
SHOWING_EFFECTS.clear();
Helper.getAuraChunksInArea(mc.world, mc.player.getPosition(), 100,
chunk -> chunk.getActiveEffectIcons(mc.player, SHOWING_EFFECTS));
}
}
2018-10-13 20:35:18 +02:00
}
}
2018-10-14 17:46:00 +02:00
@SubscribeEvent
public void onWorldRender(RenderWorldLastEvent event) {
2020-01-21 21:04:44 +01:00
Minecraft mc = Minecraft.getInstance();
2019-01-27 13:57:34 +01:00
GL11.glPushMatrix();
float partial = event.getPartialTicks();
GL11.glTranslated(
-mc.player.prevPosX - (mc.player.posX - mc.player.prevPosX) * partial,
-mc.player.prevPosY - (mc.player.posY - mc.player.prevPosY) * partial,
-mc.player.prevPosZ - (mc.player.posZ - mc.player.prevPosZ) * partial);
2020-01-21 21:04:44 +01:00
if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.client.debugWorld) {
2019-01-27 13:57:34 +01:00
Map<BlockPos, Integer> spots = new HashMap<>();
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBegin(GL11.GL_QUADS);
IAuraChunk.getSpotsInArea(mc.world, mc.player.getPosition(), 64, (pos, spot) -> {
spots.put(pos, spot);
2020-01-21 21:04:44 +01:00
GlStateManager.color4f(spot > 0 ? 0F : 1F, spot > 0 ? 1F : 0F, 0F, 0.35F);
2019-01-27 13:57:34 +01:00
Helper.renderWeirdBox(pos.getX(), pos.getY(), pos.getZ(), 1, 1, 1);
});
GL11.glEnd();
GL11.glPopAttrib();
float scale = 0.03F;
2019-01-29 16:01:10 +01:00
NumberFormat format = NumberFormat.getInstance();
2020-01-21 21:04:44 +01:00
GlStateManager.scalef(scale, scale, scale);
for (Map.Entry<BlockPos, Integer> spot : spots.entrySet()) {
BlockPos pos = spot.getKey();
GlStateManager.pushMatrix();
2020-01-21 21:04:44 +01:00
GlStateManager.translated((pos.getX() + 0.1) / scale, (pos.getY() + 1) / scale, (pos.getZ() + 0.1) / scale);
GlStateManager.rotatef(90F, 1F, 0F, 0F);
GlStateManager.scalef(0.65F, 0.65F, 0.65F);
2019-01-29 16:01:10 +01:00
mc.fontRenderer.drawString(format.format(spot.getValue()), 0, 0, 0);
GlStateManager.popMatrix();
}
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glPopMatrix();
}
2019-01-27 13:57:34 +01:00
2019-03-20 20:51:24 +01:00
if (Helper.isHoldingItem(mc.player, ModItems.RANGE_VISUALIZER)) {
2020-01-21 21:04:44 +01:00
DimensionType dim = mc.world.getDimension().getType();
2019-03-20 20:51:24 +01:00
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBegin(GL11.GL_QUADS);
2019-11-04 19:08:49 +01:00
for (BlockPos pos : RangeVisualizer.VISUALIZED_BLOCKS.get(dim)) {
2019-03-20 20:51:24 +01:00
if (!mc.world.isBlockLoaded(pos))
continue;
2019-10-20 22:30:49 +02:00
BlockState state = mc.world.getBlockState(pos);
2019-03-20 20:51:24 +01:00
Block block = state.getBlock();
if (!(block instanceof IVisualizable))
continue;
this.renderVisualize((IVisualizable) block, mc.world, pos);
}
2019-11-04 19:08:49 +01:00
for (Entity entity : RangeVisualizer.VISUALIZED_ENTITIES.get(dim)) {
2020-01-21 21:04:44 +01:00
if (!entity.isAlive() || !(entity instanceof IVisualizable))
2019-03-20 20:51:24 +01:00
continue;
this.renderVisualize((IVisualizable) entity, mc.world, entity.getPosition());
2019-01-27 13:57:34 +01:00
}
2019-03-20 20:51:24 +01:00
GL11.glEnd();
GL11.glPopAttrib();
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();
2019-01-27 13:57:34 +01:00
}
GL11.glPopMatrix();
}
private void renderVisualize(IVisualizable visualize, World world, BlockPos pos) {
AxisAlignedBB box = visualize.getVisualizationBounds(world, pos);
if (box == null)
return;
box = box.grow(0.05F);
int color = visualize.getVisualizationColor(world, pos);
2020-01-21 21:04:44 +01:00
GlStateManager.color4f(((color >> 16) & 255) / 255F, ((color >> 8) & 255) / 255F, (color & 255) / 255F, 0.5F);
Helper.renderWeirdBox(box.minX, box.minY, box.minZ, box.maxX - box.minX, box.maxY - box.minY, box.maxZ - box.minZ);
}
2018-10-14 17:46:00 +02:00
@SubscribeEvent
public void onOverlayRender(RenderGameOverlayEvent.Post event) {
2020-01-21 21:04:44 +01:00
Minecraft mc = Minecraft.getInstance();
2018-10-20 21:19:08 +02:00
if (event.getType() == ElementType.ALL) {
2020-01-21 21:04:44 +01:00
MainWindow res = event.getWindow();
2018-10-14 17:46:00 +02:00
if (mc.player != null) {
if (!heldCache.isEmpty()) {
2020-01-21 21:04:44 +01:00
IAuraContainer container = heldCache.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null);
int width = MathHelper.ceil(container.getStoredAura() / (float) container.getMaxAura() * 80);
int x = res.getScaledWidth() / 2 - 173 - (mc.player.getHeldItemOffhand().isEmpty() ? 0 : 29);
int y = res.getScaledHeight() - 8;
GlStateManager.pushMatrix();
int color = container.getAuraColor();
2020-01-21 21:04:44 +01:00
GlStateManager.color3f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F);
mc.getTextureManager().bindTexture(OVERLAYS);
if (width < 80)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(x + width, y, width, 0, 80 - width, 6, 256, 256);
if (width > 0)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(x, y, 0, 6, width, 6, 256, 256);
float scale = 0.75F;
2020-01-21 21:04:44 +01:00
GlStateManager.scalef(scale, scale, scale);
String s = heldCache.getDisplayName().getFormattedText();
mc.fontRenderer.drawString(s, (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color);
2020-01-21 21:04:44 +01:00
GlStateManager.color3f(1F, 1F, 1F);
GlStateManager.popMatrix();
}
2018-10-20 21:19:08 +02:00
if (!heldEye.isEmpty() || !heldOcular.isEmpty()) {
GlStateManager.pushMatrix();
mc.getTextureManager().bindTexture(OVERLAYS);
int conf = ModConfig.client.auraBarLocation;
2019-10-20 22:30:49 +02:00
if (!mc.gameSettings.showDebugInfo && (conf != 2 || !(mc.currentScreen instanceof ChatScreen))) {
2020-01-21 21:04:44 +01:00
GlStateManager.color3f(83 / 255F, 160 / 255F, 8 / 255F);
int totalAmount = IAuraChunk.triangulateAuraInArea(mc.world, mc.player.getPosition(), 35);
float totalPercentage = totalAmount / (IAuraChunk.DEFAULT_AURA * 2F);
String text = I18n.format("info." + NaturesAura.MOD_ID + ".aura_in_area");
float textScale = 0.75F;
int startX = conf % 2 == 0 ? 3 : res.getScaledWidth() - 3 - 6;
int startY = conf < 2 ? 10 : (!heldOcular.isEmpty() && (totalPercentage > 1F || totalPercentage < 0) ? -26 : 0) + res.getScaledHeight() - 60;
float plusOffX = conf % 2 == 0 ? 7 : -1 - 6;
float textX = conf % 2 == 0 ? 3 : res.getScaledWidth() - 3 - mc.fontRenderer.getStringWidth(text) * textScale;
float textY = conf < 2 ? 3 : res.getScaledHeight() - 3 - 6;
int tHeight = MathHelper.ceil(MathHelper.clamp(totalPercentage, 0F, 1F) * 50);
int y = !heldOcular.isEmpty() && totalPercentage > 1F ? startY + 26 : startY;
if (tHeight < 50)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(startX, y, 6, 12, 6, 50 - tHeight, 256, 256);
if (tHeight > 0)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(startX, y + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256);
2018-12-25 19:38:25 +01:00
if (!heldOcular.isEmpty()) {
2020-01-21 21:04:44 +01:00
GlStateManager.color3f(160 / 255F, 83 / 255F, 8 / 255F);
2018-12-25 19:38:25 +01:00
int topHeight = MathHelper.ceil(MathHelper.clamp((totalPercentage - 1F) * 2F, 0F, 1F) * 25);
if (topHeight > 0) {
if (topHeight < 25)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(startX, startY, 18, 12, 6, 25 - topHeight, 256, 256);
AbstractGui.blit(startX, startY + 25 - topHeight, 12, 12 + 25 - topHeight, 6, topHeight, 256, 256);
}
int bottomHeight = MathHelper.floor(MathHelper.clamp((totalPercentage + 1F) * 2F - 1F, 0F, 1F) * 25);
if (bottomHeight < 25) {
2020-01-21 21:04:44 +01:00
AbstractGui.blit(startX, startY + 51, 18, 12, 6, 25 - bottomHeight, 256, 256);
if (bottomHeight > 0)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(startX, startY + 51 + 25 - bottomHeight, 12, 12 + 25 - bottomHeight, 6, bottomHeight, 256, 256);
}
2018-12-25 19:38:25 +01:00
}
int color = heldOcular.isEmpty() ? 0x53a008 : 0xa05308;
if (totalPercentage > (heldOcular.isEmpty() ? 1F : 1.5F))
2020-01-21 21:04:44 +01:00
mc.fontRenderer.drawString("+", startX + plusOffX, startY - 0.5F, color);
if (totalPercentage < (heldOcular.isEmpty() ? 0F : -0.5F))
2020-01-21 21:04:44 +01:00
mc.fontRenderer.drawString("-", startX + plusOffX, startY - 0.5F + (heldOcular.isEmpty() ? 44 : 70), color);
GlStateManager.pushMatrix();
2020-01-21 21:04:44 +01:00
GlStateManager.scalef(textScale, textScale, textScale);
mc.fontRenderer.drawString(text, textX / textScale, textY / textScale, 0x53a008);
GlStateManager.popMatrix();
if (!heldOcular.isEmpty()) {
float scale = 0.75F;
GlStateManager.pushMatrix();
2020-01-21 21:04:44 +01:00
GlStateManager.scalef(scale, scale, scale);
int stackX = conf % 2 == 0 ? 10 : res.getScaledWidth() - 22;
int stackY = conf < 2 ? 15 : res.getScaledHeight() - 55;
for (Tuple<ItemStack, Boolean> effect : SHOWING_EFFECTS.values()) {
int theX = (int) (stackX / scale);
int theY = (int) (stackY / scale);
2020-01-21 21:04:44 +01:00
ItemStack stack = effect.getA();
Helper.renderItemInGui(stack, theX, theY, 1F);
2020-01-21 21:04:44 +01:00
if (effect.getB()) {
GlStateManager.disableDepthTest();
mc.getTextureManager().bindTexture(OVERLAYS);
2020-01-21 21:04:44 +01:00
AbstractGui.blit(theX, theY, 240, 0, 16, 16, 256, 256);
GlStateManager.enableDepthTest();
}
stackY += 8;
}
GlStateManager.popMatrix();
}
}
2020-01-21 21:04:44 +01:00
if (mc.objectMouseOver instanceof BlockRayTraceResult) {
BlockPos pos = ((BlockRayTraceResult) mc.objectMouseOver).getPos();
if (pos != null) {
TileEntity tile = mc.world.getTileEntity(pos);
2020-01-21 21:04:44 +01:00
IAuraContainer container;
if (tile != null && (container = tile.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null)) != null) {
2019-10-20 22:30:49 +02:00
BlockState state = mc.world.getBlockState(pos);
ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.world, pos, mc.player);
2019-01-26 00:34:05 +01:00
this.drawContainerInfo(container.getStoredAura(), container.getMaxAura(), container.getAuraColor(),
2020-01-21 21:04:44 +01:00
mc, res, 35, blockStack.getDisplayName().toString(), null);
if (tile instanceof TileEntityNatureAltar) {
ItemStack tileStack = ((TileEntityNatureAltar) tile).getItemHandler(null).getStackInSlot(0);
2020-01-21 21:04:44 +01:00
if (!tileStack.isEmpty()) {
IAuraContainer stackCont = tileStack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null);
if (stackCont != null) {
this.drawContainerInfo(stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(),
mc, res, 55, tileStack.getDisplayName().toString(), null);
}
}
}
2019-01-26 00:34:05 +01:00
} else if (tile instanceof TileEntityRFConverter) {
EnergyStorage storage = ((TileEntityRFConverter) tile).storage;
this.drawContainerInfo(storage.getEnergyStored(), storage.getMaxEnergyStored(), 0xcc4916,
mc, res, 35, I18n.format("tile.naturesaura.rf_converter.name"),
storage.getEnergyStored() + " / " + storage.getMaxEnergyStored() + " RF");
} else if (tile instanceof TileEntityGratedChute) {
TileEntityGratedChute chute = (TileEntityGratedChute) tile;
ItemStack stack = chute.getItemHandler(null).getStackInSlot(0);
int x = res.getScaledWidth() / 2;
int y = res.getScaledHeight() / 2;
if (stack.isEmpty())
mc.fontRenderer.drawString(
TextFormatting.GRAY.toString() + TextFormatting.ITALIC + I18n.format("info.naturesaura.empty"),
2020-01-21 21:04:44 +01:00
x + 5, y - 11, 0xFFFFFF);
else
Helper.renderItemInGui(stack, x + 2, y - 18, 1F);
Helper.renderItemInGui(ITEM_FRAME, x - 24, y - 24, 1F);
mc.getTextureManager().bindTexture(OVERLAYS);
int u = chute.isBlacklist ? 240 : 224;
2020-01-21 21:04:44 +01:00
GlStateManager.disableDepthTest();
AbstractGui.blit(x - 18, y - 18, u, 0, 16, 16, 256, 256);
GlStateManager.enableDepthTest();
}
}
}
2018-10-20 21:19:08 +02:00
2020-01-21 21:04:44 +01:00
GlStateManager.color3f(1F, 1F, 1F);
GlStateManager.popMatrix();
2018-10-14 17:46:00 +02:00
}
}
}
}
2018-10-20 21:19:08 +02:00
2020-01-21 21:04:44 +01:00
private void drawContainerInfo(int stored, int max, int color, Minecraft mc, MainWindow res, int yOffset, String name, String textBelow) {
GlStateManager.color3f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F);
2018-10-20 21:19:08 +02:00
int x = res.getScaledWidth() / 2 - 40;
int y = res.getScaledHeight() / 2 + yOffset;
2019-01-26 00:34:05 +01:00
int width = MathHelper.ceil(stored / (float) max * 80);
2018-10-20 21:19:08 +02:00
mc.getTextureManager().bindTexture(OVERLAYS);
if (width < 80)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(x + width, y, width, 0, 80 - width, 6, 256, 256);
2018-10-20 21:19:08 +02:00
if (width > 0)
2020-01-21 21:04:44 +01:00
AbstractGui.blit(x, y, 0, 6, width, 6, 256, 256);
2018-10-20 21:19:08 +02:00
2020-01-21 21:04:44 +01:00
mc.fontRenderer.drawString(name, x + 40 - mc.fontRenderer.getStringWidth(name) / 2F, y - 9, color);
2019-01-26 00:34:05 +01:00
if (textBelow != null)
2020-01-21 21:04:44 +01:00
mc.fontRenderer.drawString(textBelow, x + 40 - mc.fontRenderer.getStringWidth(textBelow) / 2F, y + 7, color);
2018-10-20 21:19:08 +02:00
}
2018-10-13 20:35:18 +02:00
}