2018-10-13 20:35:18 +02:00
|
|
|
package de.ellpeck.naturesaura.events;
|
|
|
|
|
2019-01-27 13:57:34 +01:00
|
|
|
import de.ellpeck.naturesaura.Helper;
|
2018-12-04 13:38:46 +01:00
|
|
|
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;
|
2018-11-12 01:29:33 +01:00
|
|
|
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
|
2020-01-26 01:41:49 +01:00
|
|
|
import de.ellpeck.naturesaura.items.ItemAuraCache;
|
|
|
|
import de.ellpeck.naturesaura.items.ItemRangeVisualizer;
|
2020-01-26 19:26:50 +01:00
|
|
|
import de.ellpeck.naturesaura.items.ModItems;
|
2020-01-22 23:21:52 +01:00
|
|
|
import de.ellpeck.naturesaura.packet.PacketAuraChunk;
|
2021-12-15 16:24:53 +01:00
|
|
|
import net.minecraft.ChatFormatting;
|
2018-10-13 20:35:18 +02:00
|
|
|
import net.minecraft.client.Minecraft;
|
2021-12-15 16:24:53 +01:00
|
|
|
import net.minecraft.client.renderer.BiomeColors;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
|
|
import net.minecraft.resources.ResourceLocation;
|
|
|
|
import net.minecraft.util.Mth;
|
2019-02-09 21:55:40 +01:00
|
|
|
import net.minecraft.util.Tuple;
|
2021-12-15 16:24:53 +01:00
|
|
|
import net.minecraft.world.item.ItemStack;
|
|
|
|
import net.minecraft.world.item.Items;
|
|
|
|
import net.minecraft.world.level.block.*;
|
|
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
|
|
import net.minecraft.world.level.levelgen.Heightmap;
|
2020-01-21 21:04:44 +01:00
|
|
|
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;
|
2021-12-04 15:40:09 +01:00
|
|
|
import net.minecraftforge.client.event.RenderLevelLastEvent;
|
2019-01-28 17:12:50 +01:00
|
|
|
import net.minecraftforge.common.IPlantable;
|
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;
|
2018-10-21 12:51:13 +02:00
|
|
|
import org.apache.commons.lang3.mutable.MutableInt;
|
2018-10-13 20:35:18 +02:00
|
|
|
|
2019-01-29 16:01:10 +01:00
|
|
|
import java.text.NumberFormat;
|
2020-12-07 01:06:22 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.HashMap;
|
|
|
|
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");
|
2020-02-07 15:22:30 +01:00
|
|
|
public static final List<PacketAuraChunk> PENDING_AURA_CHUNKS = new ArrayList<>();
|
2019-02-25 17:15:39 +01:00
|
|
|
private static final ItemStack ITEM_FRAME = new ItemStack(Items.ITEM_FRAME);
|
2020-02-21 18:15:37 +01:00
|
|
|
private static final ItemStack DISPENSER = new ItemStack(Blocks.DISPENSER);
|
2019-02-09 21:55:40 +01:00
|
|
|
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-18 19:08:15 +02:00
|
|
|
|
2018-10-13 20:35:18 +02:00
|
|
|
@SubscribeEvent
|
|
|
|
public void onDebugRender(RenderGameOverlayEvent.Text event) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var mc = Minecraft.getInstance();
|
2021-12-15 16:24:53 +01:00
|
|
|
if (mc.options.renderDebug && ModConfig.instance.debugText.get()) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var prefix = ChatFormatting.GREEN + "[" + NaturesAura.MOD_NAME + "]" + ChatFormatting.RESET + " ";
|
2018-10-13 20:35:18 +02:00
|
|
|
List<String> left = event.getLeft();
|
2020-01-21 21:04:44 +01:00
|
|
|
if (mc.player.isCreative()) {
|
2020-12-04 14:15:34 +01:00
|
|
|
left.add("");
|
2021-12-15 16:30:22 +01:00
|
|
|
var amount = new MutableInt(IAuraChunk.DEFAULT_AURA);
|
|
|
|
var spots = new MutableInt();
|
|
|
|
var chunks = new MutableInt();
|
2021-12-15 16:24:53 +01:00
|
|
|
IAuraChunk.getSpotsInArea(mc.level, mc.player.blockPosition(), 35, (blockPos, drainSpot) -> {
|
2018-10-26 20:25:21 +02:00
|
|
|
spots.increment();
|
2018-12-02 01:36:41 +01:00
|
|
|
amount.add(drainSpot);
|
2018-12-04 13:38:46 +01:00
|
|
|
});
|
2021-12-15 16:24:53 +01:00
|
|
|
Helper.getAuraChunksWithSpotsInArea(mc.level, mc.player.blockPosition(), 35, c -> chunks.increment());
|
2021-12-15 16:30:22 +01:00
|
|
|
var format = NumberFormat.getInstance();
|
2021-01-30 16:43:46 +01:00
|
|
|
left.add(prefix + "A: " + format.format(amount.intValue()) + " (S: " + spots.intValue() + ", C: " + chunks.intValue() + ")");
|
2021-12-04 15:40:09 +01:00
|
|
|
left.add(prefix + "AT: " + IAuraType.forLevel(mc.level).getName());
|
2018-10-26 20:25:21 +02:00
|
|
|
}
|
2018-10-13 20:35:18 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2020-01-21 21:04:44 +01:00
|
|
|
public void onClientTick(TickEvent.ClientTickEvent event) {
|
2020-01-22 23:21:52 +01:00
|
|
|
if (event.phase != TickEvent.Phase.END) {
|
2019-02-09 21:55:40 +01:00
|
|
|
heldCache = ItemStack.EMPTY;
|
|
|
|
heldEye = ItemStack.EMPTY;
|
|
|
|
heldOcular = ItemStack.EMPTY;
|
|
|
|
|
2021-12-15 16:30:22 +01:00
|
|
|
var mc = Minecraft.getInstance();
|
2021-12-04 15:40:09 +01:00
|
|
|
if (mc.level == null) {
|
2020-01-26 01:41:49 +01:00
|
|
|
ItemRangeVisualizer.clear();
|
2020-01-22 23:21:52 +01:00
|
|
|
PENDING_AURA_CHUNKS.clear();
|
|
|
|
} else {
|
2021-12-04 15:40:09 +01:00
|
|
|
PENDING_AURA_CHUNKS.removeIf(next -> next.tryHandle(mc.level));
|
2020-01-22 23:21:52 +01:00
|
|
|
|
2021-12-15 16:24:53 +01:00
|
|
|
if (!mc.isPaused()) {
|
2021-12-04 15:40:09 +01:00
|
|
|
if (mc.level.getGameTime() % 20 == 0) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var amount = Mth.floor(190 * ModConfig.instance.excessParticleAmount.get());
|
|
|
|
for (var i = 0; i < amount; i++) {
|
|
|
|
var x = Mth.floor(mc.player.getX()) + mc.level.random.nextInt(64) - 32;
|
|
|
|
var z = Mth.floor(mc.player.getZ()) + mc.level.random.nextInt(64) - 32;
|
|
|
|
var pos = new BlockPos(x, mc.level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z) - 1, z);
|
|
|
|
var state = mc.level.getBlockState(pos);
|
|
|
|
var block = state.getBlock();
|
2021-12-15 16:24:53 +01:00
|
|
|
if (block instanceof BonemealableBlock || block instanceof IPlantable || block instanceof LeavesBlock || block instanceof MyceliumBlock) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var excess = IAuraChunk.triangulateAuraInArea(mc.level, pos, 45) - IAuraChunk.DEFAULT_AURA;
|
2020-01-22 23:21:52 +01:00
|
|
|
if (excess > 0) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var chance = Math.max(10, 50 - excess / 25000);
|
2021-12-15 16:24:53 +01:00
|
|
|
if (mc.level.random.nextInt(chance) <= 0)
|
2020-01-22 23:21:52 +01:00
|
|
|
NaturesAuraAPI.instance().spawnMagicParticle(
|
2021-12-15 16:24:53 +01:00
|
|
|
pos.getX() + mc.level.random.nextFloat(),
|
2020-01-22 23:21:52 +01:00
|
|
|
pos.getY() + 0.5F,
|
2021-12-15 16:24:53 +01:00
|
|
|
pos.getZ() + mc.level.random.nextFloat(),
|
|
|
|
mc.level.random.nextGaussian() * 0.01F,
|
|
|
|
mc.level.random.nextFloat() * 0.025F,
|
|
|
|
mc.level.random.nextGaussian() * 0.01F,
|
|
|
|
block instanceof MyceliumBlock ? 0x875ca1 : BiomeColors.getAverageGrassColor(mc.level, pos),
|
|
|
|
Math.min(2F, 1F + mc.level.random.nextFloat() * (excess / 30000F)),
|
|
|
|
Math.min(300, 100 + mc.level.random.nextInt(excess / 3000 + 1)),
|
2020-01-22 23:21:52 +01:00
|
|
|
0F, false, true);
|
|
|
|
}
|
2019-01-28 17:12:50 +01:00
|
|
|
}
|
2019-01-28 16:56:22 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-12-04 15:40:09 +01:00
|
|
|
if (Helper.isHoldingItem(mc.player, ModItems.RANGE_VISUALIZER) && mc.level.getGameTime() % 5 == 0) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var inst = NaturesAuraAPI.instance();
|
2020-01-22 23:21:52 +01:00
|
|
|
inst.setParticleSpawnRange(512);
|
|
|
|
inst.setParticleDepth(false);
|
2021-12-15 16:30:22 +01:00
|
|
|
for (var pos : ItemRangeVisualizer.VISUALIZED_RAILS.get(mc.level.dimension().location())) {
|
2020-01-22 23:21:52 +01:00
|
|
|
NaturesAuraAPI.instance().spawnMagicParticle(
|
2021-12-15 16:24:53 +01:00
|
|
|
pos.getX() + mc.level.random.nextFloat(),
|
|
|
|
pos.getY() + mc.level.random.nextFloat(),
|
|
|
|
pos.getZ() + mc.level.random.nextFloat(),
|
|
|
|
0F, 0F, 0F, 0xe0faff, mc.level.random.nextFloat() * 5 + 1, 100, 0F, false, true);
|
2020-01-22 23:21:52 +01:00
|
|
|
}
|
|
|
|
inst.setParticleDepth(true);
|
|
|
|
inst.setParticleSpawnRange(32);
|
2019-03-20 20:51:24 +01:00
|
|
|
}
|
|
|
|
|
2020-01-26 19:26:50 +01:00
|
|
|
heldCache = Helper.getEquippedItem(s -> s.getItem() instanceof ItemAuraCache, mc.player);
|
|
|
|
heldEye = Helper.getEquippedItem(s -> s.getItem() == ModItems.EYE, mc.player);
|
|
|
|
heldOcular = Helper.getEquippedItem(s -> s.getItem() == ModItems.EYE_IMPROVED, mc.player);
|
2019-03-20 20:51:24 +01:00
|
|
|
|
2021-12-04 15:40:09 +01:00
|
|
|
if (!heldOcular.isEmpty() && mc.level.getGameTime() % 20 == 0) {
|
2020-01-22 23:21:52 +01:00
|
|
|
SHOWING_EFFECTS.clear();
|
2021-12-15 16:24:53 +01:00
|
|
|
Helper.getAuraChunksWithSpotsInArea(mc.level, mc.player.blockPosition(), 100,
|
2020-01-22 23:21:52 +01:00
|
|
|
chunk -> chunk.getActiveEffectIcons(mc.player, SHOWING_EFFECTS));
|
|
|
|
}
|
2019-03-20 20:51:24 +01:00
|
|
|
}
|
2019-01-28 15:43:21 +01:00
|
|
|
}
|
2018-10-13 20:35:18 +02:00
|
|
|
}
|
|
|
|
}
|
2018-10-14 17:46:00 +02:00
|
|
|
|
2018-12-04 13:38:46 +01:00
|
|
|
@SubscribeEvent
|
2021-12-04 15:40:09 +01:00
|
|
|
public void onLevelRender(RenderLevelLastEvent event) {
|
2021-12-15 16:24:53 +01:00
|
|
|
// TODO GL-based in-world rendering
|
|
|
|
/* Minecraft mc = Minecraft.getInstance();
|
2020-01-30 20:35:25 +01:00
|
|
|
|
2020-01-29 14:32:32 +01:00
|
|
|
RenderSystem.pushMatrix();
|
2020-09-22 03:17:02 +02:00
|
|
|
RenderSystem.multMatrix(event.getMatrixStack().getLast().getMatrix());
|
2020-01-29 14:32:32 +01:00
|
|
|
|
|
|
|
ActiveRenderInfo info = mc.gameRenderer.getActiveRenderInfo();
|
2020-09-22 03:17:02 +02:00
|
|
|
Vector3d view = info.getProjectedView();
|
2020-01-29 14:32:32 +01:00
|
|
|
GL11.glTranslated(-view.getX(), -view.getY(), -view.getZ());
|
2019-01-27 13:57:34 +01:00
|
|
|
|
2021-12-04 15:40:09 +01:00
|
|
|
if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.instance.debugLevel.get()) {
|
2019-01-27 13:57:34 +01:00
|
|
|
Map<BlockPos, Integer> spots = new HashMap<>();
|
2018-12-04 13:38:46 +01:00
|
|
|
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);
|
2021-12-04 15:40:09 +01:00
|
|
|
IAuraChunk.getSpotsInArea(mc.level, mc.player.getPosition(), 64, (pos, spot) -> {
|
2018-12-04 13:38:46 +01:00
|
|
|
spots.put(pos, spot);
|
|
|
|
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.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);
|
2018-12-04 13:38:46 +01:00
|
|
|
});
|
|
|
|
GL11.glEnd();
|
|
|
|
GL11.glPopAttrib();
|
|
|
|
|
|
|
|
float scale = 0.03F;
|
2019-01-29 16:01:10 +01:00
|
|
|
NumberFormat format = NumberFormat.getInstance();
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.scalef(scale, scale, scale);
|
2018-12-04 13:38:46 +01:00
|
|
|
for (Map.Entry<BlockPos, Integer> spot : spots.entrySet()) {
|
|
|
|
BlockPos pos = spot.getKey();
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.pushMatrix();
|
2020-01-29 18:18:41 +01:00
|
|
|
RenderSystem.translated((pos.getX() + 0.1) / scale, (pos.getY() + 1.001) / scale, (pos.getZ() + 0.1) / scale);
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.rotatef(90F, 1F, 0F, 0F);
|
|
|
|
RenderSystem.scalef(0.65F, 0.65F, 0.65F);
|
2020-09-28 17:32:13 +02:00
|
|
|
mc.fontRenderer.drawString(new MatrixStack(), format.format(spot.getValue()), 0, 0, 0);
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.popMatrix();
|
2018-12-04 13:38:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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)) {
|
2021-12-04 15:40:09 +01:00
|
|
|
RegistryKey<Level> dim = mc.level.func_234923_W_();
|
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);
|
2020-09-22 15:38:58 +02:00
|
|
|
for (BlockPos pos : ItemRangeVisualizer.VISUALIZED_BLOCKS.get(dim.func_240901_a_())) {
|
2021-12-04 15:40:09 +01:00
|
|
|
if (!mc.level.isBlockLoaded(pos))
|
2019-03-20 20:51:24 +01:00
|
|
|
continue;
|
2021-12-04 15:40:09 +01:00
|
|
|
BlockState state = mc.level.getBlockState(pos);
|
2019-03-20 20:51:24 +01:00
|
|
|
Block block = state.getBlock();
|
|
|
|
if (!(block instanceof IVisualizable))
|
|
|
|
continue;
|
2021-12-04 15:40:09 +01:00
|
|
|
this.renderVisualize((IVisualizable) block, mc.level, pos);
|
2019-03-20 20:51:24 +01:00
|
|
|
}
|
2020-09-22 15:38:58 +02:00
|
|
|
for (Entity entity : ItemRangeVisualizer.VISUALIZED_ENTITIES.get(dim.func_240901_a_())) {
|
2020-01-21 21:04:44 +01:00
|
|
|
if (!entity.isAlive() || !(entity instanceof IVisualizable))
|
2019-03-20 20:51:24 +01:00
|
|
|
continue;
|
2021-12-04 15:40:09 +01:00
|
|
|
this.renderVisualize((IVisualizable) entity, mc.level, 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
|
|
|
}
|
|
|
|
|
2021-12-15 16:24:53 +01:00
|
|
|
GL11.glPopMatrix();*/
|
2018-12-04 13:38:46 +01:00
|
|
|
}
|
|
|
|
|
2021-12-15 16:24:53 +01:00
|
|
|
/* private void renderVisualize(IVisualizable visualize, Level
|
2021-12-04 15:40:09 +01:00
|
|
|
level, BlockPos pos) {
|
2021-12-15 14:26:42 +01:00
|
|
|
AABB box = visualize.getVisualizationBounds(level, pos);
|
2019-01-28 15:43:21 +01:00
|
|
|
if (box == null)
|
|
|
|
return;
|
|
|
|
box = box.grow(0.05F);
|
2021-12-04 15:40:09 +01:00
|
|
|
int color = visualize.getVisualizationColor(level, pos);
|
2020-01-29 18:18:41 +01:00
|
|
|
RenderSystem.color4f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 0.5F);
|
2019-01-28 15:43:21 +01:00
|
|
|
Helper.renderWeirdBox(box.minX, box.minY, box.minZ, box.maxX - box.minX, box.maxY - box.minY, box.maxZ - box.minZ);
|
2021-12-15 16:24:53 +01:00
|
|
|
}*/
|
2019-01-28 15:43:21 +01:00
|
|
|
|
2018-10-14 17:46:00 +02:00
|
|
|
@SubscribeEvent
|
|
|
|
public void onOverlayRender(RenderGameOverlayEvent.Post event) {
|
2021-12-15 16:24:53 +01:00
|
|
|
// TODO raw rendering bleh, should be easy enough to convert to PoseStack stuff
|
|
|
|
/*Minecraft mc = Minecraft.getInstance();
|
|
|
|
PoseStack stack = event.getMatrixStack();
|
2018-10-20 21:19:08 +02:00
|
|
|
if (event.getType() == ElementType.ALL) {
|
2021-12-15 16:24:53 +01:00
|
|
|
var res = event.getWindow();
|
2018-10-14 17:46:00 +02:00
|
|
|
if (mc.player != null) {
|
2019-02-09 21:55:40 +01:00
|
|
|
if (!heldCache.isEmpty()) {
|
2020-01-21 21:04:44 +01:00
|
|
|
IAuraContainer container = heldCache.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null);
|
2021-12-04 19:17:21 +01:00
|
|
|
int width = Mth.ceil(container.getStoredAura() / (float) container.getMaxAura() * 80);
|
2020-03-11 23:32:37 +01:00
|
|
|
|
|
|
|
int conf = ModConfig.instance.cacheBarLocation.get();
|
2021-12-15 16:24:53 +01:00
|
|
|
int x = res.getGuiScaledWidth() / 2 + (conf == 0 ? -173 - (mc.player.getOffhandItem().isEmpty() ? 0 : 29) : 93);
|
|
|
|
int y = res.getScreenHeight() - 8;
|
2018-11-02 21:10:53 +01:00
|
|
|
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.pushMatrix();
|
2018-11-02 21:10:53 +01:00
|
|
|
|
|
|
|
int color = container.getAuraColor();
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.color4f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 1);
|
2018-11-02 21:10:53 +01:00
|
|
|
mc.getTextureManager().bindTexture(OVERLAYS);
|
|
|
|
if (width < 80)
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, x + width, y, width, 0, 80 - width, 6, 256, 256);
|
2018-11-02 21:10:53 +01:00
|
|
|
if (width > 0)
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, x, y, 0, 6, width, 6, 256, 256);
|
2018-11-02 21:10:53 +01:00
|
|
|
|
|
|
|
float scale = 0.75F;
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.scalef(scale, scale, scale);
|
2020-09-22 03:17:02 +02:00
|
|
|
String s = heldCache.getDisplayName().getString();
|
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, s, conf == 1 ? x / scale : (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color);
|
2018-11-02 21:10:53 +01:00
|
|
|
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.color4f(1F, 1F, 1F, 1);
|
|
|
|
RenderSystem.popMatrix();
|
2018-11-02 21:10:53 +01:00
|
|
|
}
|
2018-10-20 21:19:08 +02:00
|
|
|
|
2019-02-09 21:55:40 +01:00
|
|
|
if (!heldEye.isEmpty() || !heldOcular.isEmpty()) {
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.pushMatrix();
|
2018-11-02 21:10:53 +01:00
|
|
|
mc.getTextureManager().bindTexture(OVERLAYS);
|
|
|
|
|
2020-01-24 17:05:41 +01:00
|
|
|
int conf = ModConfig.instance.auraBarLocation.get();
|
2019-10-20 22:30:49 +02:00
|
|
|
if (!mc.gameSettings.showDebugInfo && (conf != 2 || !(mc.currentScreen instanceof ChatScreen))) {
|
2021-12-04 15:40:09 +01:00
|
|
|
int color = IAuraType.forLevel(mc.level).getColor();
|
2020-02-26 11:07:53 +01:00
|
|
|
RenderSystem.color4f((color >> 16 & 0xFF) / 255F, (color >> 8 & 0xFF) / 255F, (color & 0xFF) / 255F, 1);
|
2018-12-02 18:33:04 +01:00
|
|
|
|
2021-12-04 15:40:09 +01:00
|
|
|
int totalAmount = IAuraChunk.triangulateAuraInArea(mc.level, mc.player.getPosition(), 35);
|
2018-12-05 11:21:08 +01:00
|
|
|
float totalPercentage = totalAmount / (IAuraChunk.DEFAULT_AURA * 2F);
|
2019-02-05 11:49:14 +01:00
|
|
|
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;
|
2019-02-09 21:55:40 +01:00
|
|
|
int startY = conf < 2 ? 10 : (!heldOcular.isEmpty() && (totalPercentage > 1F || totalPercentage < 0) ? -26 : 0) + res.getScaledHeight() - 60;
|
2019-02-05 11:49:14 +01:00
|
|
|
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;
|
2018-12-02 18:33:04 +01:00
|
|
|
|
2021-12-04 19:17:21 +01:00
|
|
|
int tHeight = Mth.ceil(Mth.clamp(totalPercentage, 0F, 1F) * 50);
|
2019-02-09 21:55:40 +01:00
|
|
|
int y = !heldOcular.isEmpty() && totalPercentage > 1F ? startY + 26 : startY;
|
2018-11-04 12:43:22 +01:00
|
|
|
if (tHeight < 50)
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, startX, y, 6, 12, 6, 50 - tHeight, 256, 256);
|
2018-11-04 12:43:22 +01:00
|
|
|
if (tHeight > 0)
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, startX, y + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256);
|
2018-12-25 19:38:25 +01:00
|
|
|
|
2019-02-09 21:55:40 +01:00
|
|
|
if (!heldOcular.isEmpty()) {
|
2021-12-04 19:17:21 +01:00
|
|
|
int topHeight = Mth.ceil(Mth.clamp((totalPercentage - 1F) * 2F, 0F, 1F) * 25);
|
2018-12-26 12:10:41 +01:00
|
|
|
if (topHeight > 0) {
|
|
|
|
if (topHeight < 25)
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, startX, startY, 18, 12, 6, 25 - topHeight, 256, 256);
|
|
|
|
AbstractGui.blit(stack, startX, startY + 25 - topHeight, 12, 12 + 25 - topHeight, 6, topHeight, 256, 256);
|
2018-12-26 12:10:41 +01:00
|
|
|
}
|
2021-12-04 19:17:21 +01:00
|
|
|
int bottomHeight = Mth.floor(Mth.clamp((totalPercentage + 1F) * 2F - 1F, 0F, 1F) * 25);
|
2018-12-26 12:10:41 +01:00
|
|
|
if (bottomHeight < 25) {
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, startX, startY + 51, 18, 12, 6, 25 - bottomHeight, 256, 256);
|
2018-12-26 12:10:41 +01:00
|
|
|
if (bottomHeight > 0)
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, startX, startY + 51 + 25 - bottomHeight, 12, 12 + 25 - bottomHeight, 6, bottomHeight, 256, 256);
|
2018-12-26 12:10:41 +01:00
|
|
|
}
|
2018-12-25 19:38:25 +01:00
|
|
|
}
|
2018-11-04 12:43:22 +01:00
|
|
|
|
2019-02-09 21:55:40 +01:00
|
|
|
if (totalPercentage > (heldOcular.isEmpty() ? 1F : 1.5F))
|
2020-09-22 03:17:02 +02:00
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, "+", startX + plusOffX, startY - 0.5F, color);
|
2019-02-09 21:55:40 +01:00
|
|
|
if (totalPercentage < (heldOcular.isEmpty() ? 0F : -0.5F))
|
2020-09-22 03:17:02 +02:00
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, "-", startX + plusOffX, startY - 0.5F + (heldOcular.isEmpty() ? 44 : 70), color);
|
2018-11-04 12:43:22 +01:00
|
|
|
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.pushMatrix();
|
|
|
|
RenderSystem.scalef(textScale, textScale, textScale);
|
2020-09-22 03:17:02 +02:00
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, text, textX / textScale, textY / textScale, color);
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.popMatrix();
|
2019-02-09 21:55:40 +01:00
|
|
|
|
|
|
|
if (!heldOcular.isEmpty()) {
|
|
|
|
float scale = 0.75F;
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.pushMatrix();
|
|
|
|
RenderSystem.scalef(scale, scale, scale);
|
2019-02-10 17:15:05 +01:00
|
|
|
int stackX = conf % 2 == 0 ? 10 : res.getScaledWidth() - 22;
|
|
|
|
int stackY = conf < 2 ? 15 : res.getScaledHeight() - 55;
|
2019-02-09 21:55:40 +01:00
|
|
|
for (Tuple<ItemStack, Boolean> effect : SHOWING_EFFECTS.values()) {
|
2019-02-10 17:15:05 +01:00
|
|
|
int theX = (int) (stackX / scale);
|
2019-02-09 21:55:40 +01:00
|
|
|
int theY = (int) (stackY / scale);
|
2020-09-22 03:17:02 +02:00
|
|
|
ItemStack itemStack = effect.getA();
|
|
|
|
Helper.renderItemInGui(itemStack, theX, theY, 1F);
|
2020-01-21 21:04:44 +01:00
|
|
|
if (effect.getB()) {
|
|
|
|
GlStateManager.disableDepthTest();
|
2019-02-09 21:55:40 +01:00
|
|
|
mc.getTextureManager().bindTexture(OVERLAYS);
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, theX, theY, 240, 0, 16, 16, 256, 256);
|
2020-01-21 21:04:44 +01:00
|
|
|
GlStateManager.enableDepthTest();
|
2019-02-09 21:55:40 +01:00
|
|
|
}
|
|
|
|
stackY += 8;
|
|
|
|
}
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.popMatrix();
|
2019-02-09 21:55:40 +01:00
|
|
|
}
|
2018-11-04 12:43:22 +01:00
|
|
|
}
|
2018-11-02 21:10:53 +01:00
|
|
|
|
2020-01-21 21:04:44 +01:00
|
|
|
if (mc.objectMouseOver instanceof BlockRayTraceResult) {
|
|
|
|
BlockPos pos = ((BlockRayTraceResult) mc.objectMouseOver).getPos();
|
2018-11-02 21:10:53 +01:00
|
|
|
if (pos != null) {
|
2021-12-04 15:40:09 +01:00
|
|
|
BlockEntity tile = mc.level.getBlockEntity(pos);
|
2020-01-21 21:04:44 +01:00
|
|
|
IAuraContainer container;
|
2020-02-21 18:15:37 +01:00
|
|
|
int x = res.getScaledWidth() / 2;
|
|
|
|
int y = res.getScaledHeight() / 2;
|
2020-01-21 21:04:44 +01:00
|
|
|
if (tile != null && (container = tile.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null)) != null) {
|
2021-12-04 15:40:09 +01:00
|
|
|
BlockState state = mc.level.getBlockState(pos);
|
|
|
|
ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.level, pos, mc.player);
|
2020-09-22 15:38:58 +02:00
|
|
|
this.drawContainerInfo(stack, container.getStoredAura(), container.getMaxAura(), container.getAuraColor(),
|
2020-09-22 03:17:02 +02:00
|
|
|
mc, res, 35, blockStack.getDisplayName().getString(), null);
|
2018-11-02 21:10:53 +01:00
|
|
|
|
2021-12-04 15:40:09 +01:00
|
|
|
if (tile instanceof BlockEntityNatureAltar) {
|
|
|
|
ItemStack tileStack = ((BlockEntityNatureAltar) tile).getItemHandler().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) {
|
2020-09-22 15:38:58 +02:00
|
|
|
this.drawContainerInfo(stack, stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(),
|
2020-09-22 03:17:02 +02:00
|
|
|
mc, res, 55, tileStack.getDisplayName().getString(), null);
|
2020-01-21 21:04:44 +01:00
|
|
|
}
|
2018-11-02 21:10:53 +01:00
|
|
|
}
|
|
|
|
}
|
2021-12-04 15:40:09 +01:00
|
|
|
} else if (tile instanceof BlockEntityRFConverter) {
|
|
|
|
EnergyStorage storage = ((BlockEntityRFConverter) tile).storage;
|
2020-09-22 15:38:58 +02:00
|
|
|
this.drawContainerInfo(stack, storage.getEnergyStored(), storage.getMaxEnergyStored(), 0xcc4916,
|
2021-01-11 23:39:19 +01:00
|
|
|
mc, res, 35, I18n.format("block.naturesaura.rf_converter"),
|
2019-01-26 00:34:05 +01:00
|
|
|
storage.getEnergyStored() + " / " + storage.getMaxEnergyStored() + " RF");
|
2021-12-04 15:40:09 +01:00
|
|
|
} else if (tile instanceof BlockEntityGratedChute) {
|
|
|
|
BlockEntityGratedChute chute = (BlockEntityGratedChute) tile;
|
2020-10-19 21:26:32 +02:00
|
|
|
ItemStack itemStack = chute.getItemHandler().getStackInSlot(0);
|
2019-01-30 16:03:41 +01:00
|
|
|
|
2020-09-22 03:17:02 +02:00
|
|
|
if (itemStack.isEmpty())
|
|
|
|
mc.fontRenderer.drawStringWithShadow(stack,
|
2019-01-30 16:03:41 +01:00
|
|
|
TextFormatting.GRAY.toString() + TextFormatting.ITALIC + I18n.format("info.naturesaura.empty"),
|
2020-01-21 21:04:44 +01:00
|
|
|
x + 5, y - 11, 0xFFFFFF);
|
2019-01-30 16:03:41 +01:00
|
|
|
else
|
2020-09-22 03:17:02 +02:00
|
|
|
Helper.renderItemInGui(itemStack, x + 2, y - 18, 1F);
|
2019-02-25 17:15:39 +01:00
|
|
|
|
|
|
|
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();
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, x - 18, y - 18, u, 0, 16, 16, 256, 256);
|
2020-01-21 21:04:44 +01:00
|
|
|
GlStateManager.enableDepthTest();
|
2021-12-04 15:40:09 +01:00
|
|
|
} else if (tile instanceof BlockEntityItemDistributor) {
|
|
|
|
BlockEntityItemDistributor distributor = (BlockEntityItemDistributor) tile;
|
2020-02-21 18:15:37 +01:00
|
|
|
Helper.renderItemInGui(DISPENSER, x - 24, y - 24, 1F);
|
|
|
|
mc.getTextureManager().bindTexture(OVERLAYS);
|
|
|
|
int u = !distributor.isRandomMode ? 240 : 224;
|
|
|
|
GlStateManager.disableDepthTest();
|
2020-09-22 03:17:02 +02:00
|
|
|
AbstractGui.blit(stack, x - 18, y - 18, u, 0, 16, 16, 256, 256);
|
2020-02-21 18:15:37 +01:00
|
|
|
GlStateManager.enableDepthTest();
|
2021-12-04 15:40:09 +01:00
|
|
|
} else if (tile instanceof BlockEntityAuraTimer) {
|
|
|
|
BlockEntityAuraTimer timer = (BlockEntityAuraTimer) tile;
|
2020-10-19 21:26:32 +02:00
|
|
|
ItemStack itemStack = timer.getItemHandler().getStackInSlot(0);
|
2020-09-22 03:17:02 +02:00
|
|
|
if (!itemStack.isEmpty()) {
|
|
|
|
Helper.renderItemInGui(itemStack, x - 20, y - 20, 1);
|
2020-09-22 15:38:58 +02:00
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, TextFormatting.GRAY + this.createTimeString(timer.getTotalTime()), x + 5, y - 11, 0xFFFFFF);
|
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, TextFormatting.GRAY + I18n.format("info.naturesaura.remaining", this.createTimeString(timer.getTimeLeft())), x + 5, y + 3, 0xFFFFFF);
|
2020-05-05 19:43:27 +02:00
|
|
|
}
|
2018-11-02 21:10:53 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-10-20 21:19:08 +02:00
|
|
|
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.color4f(1F, 1F, 1F, 1);
|
|
|
|
RenderSystem.popMatrix();
|
2018-10-14 17:46:00 +02:00
|
|
|
}
|
|
|
|
}
|
2021-12-15 16:24:53 +01:00
|
|
|
}*/
|
2018-10-14 17:46:00 +02:00
|
|
|
}
|
2018-10-20 21:19:08 +02:00
|
|
|
|
2020-05-05 19:43:27 +02:00
|
|
|
private String createTimeString(int totalTicks) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var ticks = totalTicks % 20;
|
|
|
|
var seconds = totalTicks / 20 % 60;
|
|
|
|
var minutes = totalTicks / 20 / 60 % 60;
|
|
|
|
var hours = totalTicks / 20 / 60 / 60;
|
2020-05-05 19:43:27 +02:00
|
|
|
return String.format("%02d:%02d:%02d.%02d", hours, minutes, seconds, ticks);
|
|
|
|
}
|
|
|
|
|
2021-12-15 16:24:53 +01:00
|
|
|
/* private void drawContainerInfo(PoseStack stack, int stored, int max, int color, Minecraft mc, MainWindow res, int yOffset, String name, String textBelow) {
|
2020-01-28 18:08:56 +01:00
|
|
|
RenderSystem.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;
|
2021-12-04 19:17:21 +01:00
|
|
|
int width = Mth.ceil(stored / (float) max * 80);
|
2018-10-20 21:19:08 +02:00
|
|
|
|
|
|
|
mc.getTextureManager().bindTexture(OVERLAYS);
|
|
|
|
if (width < 80)
|
2020-09-22 15:38:58 +02:00
|
|
|
AbstractGui.blit(stack, x + width, y, width, 0, 80 - width, 6, 256, 256);
|
2018-10-20 21:19:08 +02:00
|
|
|
if (width > 0)
|
2020-09-22 15:38:58 +02:00
|
|
|
AbstractGui.blit(stack, x, y, 0, 6, width, 6, 256, 256);
|
2018-10-20 21:19:08 +02:00
|
|
|
|
2020-09-22 15:38:58 +02:00
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, name, x + 40 - mc.fontRenderer.getStringWidth(name) / 2F, y - 9, color);
|
2019-01-26 00:34:05 +01:00
|
|
|
|
|
|
|
if (textBelow != null)
|
2020-09-22 15:38:58 +02:00
|
|
|
mc.fontRenderer.drawStringWithShadow(stack, textBelow, x + 40 - mc.fontRenderer.getStringWidth(textBelow) / 2F, y + 7, color);
|
2021-12-15 16:24:53 +01:00
|
|
|
}*/
|
2018-10-13 20:35:18 +02:00
|
|
|
}
|