Skip to content

Commit

Permalink
feat: add tooltip scaling
Browse files Browse the repository at this point in the history
* fixes #10
* fixes #11
  • Loading branch information
UltimatChamp committed Feb 1, 2025
1 parent 4b7368a commit c7b2f28
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import dev.ultimatchamp.enhancedtooltips.kaleido.render.tooltip.api.TooltipComparatorProvider;
import dev.ultimatchamp.enhancedtooltips.kaleido.render.tooltip.api.TooltipComponentAPI;
import dev.ultimatchamp.enhancedtooltips.kaleido.render.tooltip.api.TooltipDrawerProvider;
import dev.ultimatchamp.enhancedtooltips.util.EnhancedTooltipsTextVisitor;
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.tooltip.OrderedTextTooltipComponent;
import net.minecraft.client.gui.tooltip.TooltipComponent;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.EntityBucketItem;
Expand Down Expand Up @@ -41,7 +43,19 @@ public void onInitializeClient() {
list.add(new ColorBorderComponent(0xff000000 | color));
}

if (!MinecraftClient.getInstance().options.advancedItemTooltips) list.add(new DurabilityTooltipComponent(stack));
if (MinecraftClient.getInstance().options.advancedItemTooltips) {
for (TooltipComponent component : list) {
if (component instanceof OrderedTextTooltipComponent orderedTextTooltipComponent) {
if (EnhancedTooltipsTextVisitor.get(orderedTextTooltipComponent.text).getString().contains((stack.getMaxDamage() - stack.getDamage()) + " / " + stack.getMaxDamage())) {
list.remove(component);
break;
}
}
}
list.add(list.size() - 3, new DurabilityTooltipComponent(stack));
} else {
list.add(new DurabilityTooltipComponent(stack));
}
});

TooltipDrawerProvider.setTooltipDrawerProvider(new EnhancedTooltipsDrawer());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.ultimatchamp.enhancedtooltips;

import dev.ultimatchamp.enhancedtooltips.component.TooltipBackgroundComponent;
import dev.ultimatchamp.enhancedtooltips.config.EnhancedTooltipsConfig;
import dev.ultimatchamp.enhancedtooltips.kaleido.render.tooltip.api.TooltipDrawerProvider;
import dev.ultimatchamp.enhancedtooltips.util.EnhancedTooltipsTextVisitor;
import net.minecraft.client.MinecraftClient;
Expand Down Expand Up @@ -42,12 +43,14 @@ public void drawTooltip(DrawContext context, TextRenderer textRenderer, List<Too
MatrixStack matrices = context.getMatrices();
List<TooltipPage> pageList = new ArrayList<>();

float scale = EnhancedTooltipsConfig.load().scaleFactor;

int pageWidth = 0;
int maxWidth = getMaxWidth();
int maxWidth = (int) (getMaxWidth() / scale);
int totalWidth = 0;

int pageHeight = -2;
int maxHeight = getMaxHeight();
int maxHeight = (int) (getMaxHeight() / scale);

int spacing = components.size() > 1 ? 4 : 0;
pageHeight += spacing;
Expand Down Expand Up @@ -94,7 +97,8 @@ public void drawTooltip(DrawContext context, TextRenderer textRenderer, List<Too
totalWidth += page.width;
}

Vector2ic vector2ic = positioner.getPosition(context.getScaledWindowWidth(), context.getScaledWindowHeight(), x, y, totalWidth, pageList.get(0).height);
int scaledOffset = ((int) (12 * EnhancedTooltipsConfig.load().scaleFactor)) - 12;
Vector2ic vector2ic = positioner.getPosition(context.getScaledWindowWidth(), context.getScaledWindowHeight(), x + scaledOffset, y - scaledOffset, (int) (totalWidth * scale), (int) (pageList.get(0).height * scale));
int n = vector2ic.x();
int o = vector2ic.y();

Expand All @@ -106,27 +110,32 @@ public void drawTooltip(DrawContext context, TextRenderer textRenderer, List<Too

matrices.push();

matrices.scale(scale, scale, scale);

for (TooltipPage p : pageList) {
if (pageList.get(0) == p) p.x = (int) (p.x / scale);
p.y = (int) (p.y / scale);

if (backgroundComponent == null) {
//? if >1.21.1 {
context.draw(vertexConsumerProvider -> TooltipBackgroundRenderer.render(context, p.x, p.y, p.width, p.height, 400, Identifier.ofVanilla("tooltip/background")));
context.draw(vertexConsumerProvider -> TooltipBackgroundRenderer.render(context, p.x, p.y, p.width, p.height, (int) (400 / scale), Identifier.ofVanilla("tooltip/background")));
} else {
context.draw(vertexConsumerProvider -> {
//?} else {
/* context.draw(() -> TooltipBackgroundRenderer.render(context, p.x, p.y, p.width, p.height, 400/^? if >1.21.1 {^/, Identifier.ofVanilla("tooltip/background")/^?}^/));
/* context.draw(() -> TooltipBackgroundRenderer.render(context, p.x, p.y, p.width, p.height, 400));
} else {
context.draw(() -> {
*///?}
try {
backgroundComponent.render(context, p.x, p.y, p.width, p.height, 400, pageList.indexOf(p));
backgroundComponent.render(context, p.x, p.y, p.width, p.height, (int) (400 / scale), pageList.indexOf(p));
} catch (Exception e) {
EnhancedTooltips.LOGGER.error("[{}]", EnhancedTooltips.MOD_ID, e);
}
});
}
}

matrices.translate(0.0f, 0.0f, 400.0f);
matrices.translate(0.0f, 0.0f, 400.0f / scale);

for (TooltipPage p : pageList) {
int cx = p.x;
Expand All @@ -135,7 +144,7 @@ public void drawTooltip(DrawContext context, TextRenderer textRenderer, List<Too
for (TooltipComponent component : p.components) {
try {
component.drawText(textRenderer, cx, cy, matrices.peek().getPositionMatrix(), context.vertexConsumers);
component.drawItems(textRenderer, cx, cy, /*? if >1.21.1 {*/pageWidth, pageHeight,/*?}*/ context);
component.drawItems(textRenderer, cx, cy, /*? if >1.21.1 {*/p.width, p.height,/*?}*/ context);
cy += component.getHeight(/*? if >1.21.1 {*/textRenderer/*?}*/);

if (p == pageList.get(0) && component == p.components.get(0) && components.size() > 1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public class EnhancedTooltipsConfig {
@Comment("-> General\n(default: true)")
public boolean rarityTooltip = true;

@Comment("(default: 1.0)")
public float scaleFactor = 1f;

//? if >1.20.6 {
@Comment("(default: true)")
public boolean itemBadges = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dev.isxander.yacl3.api.*;
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder;
import dev.isxander.yacl3.gui.controllers.cycling.EnumController;
import dev.isxander.yacl3.gui.controllers.slider.FloatSliderController;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;

Expand All @@ -28,6 +29,18 @@ public static Screen createConfigScreen(Screen parent) {
)
.controller(TickBoxControllerBuilder::create)
.build())
.option(Option.<Float>createBuilder()
.name(Text.translatable("enhancedtooltips.config.scaleFactor"))
.description(OptionDescription.createBuilder()
.text(Text.translatable("enhancedtooltips.config.scaleFactor.desc"))
.build())
.binding(
1f,
() -> config.scaleFactor,
(value) -> config.scaleFactor = value
)
.customController(opt -> new FloatSliderController(opt, 0.25f, 2f, 0.05f, value -> Text.literal(String.format("%." + 0 /* decimal places */ + "f%%", value * 100.0F))))
.build())
//? if >1.20.6 {
.option(Option.<Boolean>createBuilder()
.name(Text.translatable("enhancedtooltips.config.itemBadges"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,19 @@
import dev.ultimatchamp.enhancedtooltips.kaleido.render.tooltip.api.TooltipComponentAPI;
import dev.ultimatchamp.enhancedtooltips.kaleido.render.tooltip.api.TooltipDrawerProvider;
import dev.ultimatchamp.enhancedtooltips.kaleido.render.tooltip.impl.TooltipItemStackCache;
import dev.ultimatchamp.enhancedtooltips.util.EnhancedTooltipsTextVisitor;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.tooltip.HoveredTooltipPositioner;
import net.minecraft.client.gui.tooltip.OrderedTextTooltipComponent;
import net.minecraft.client.gui.tooltip.TooltipComponent;
import net.minecraft.client.gui.tooltip.TooltipPositioner;
import net.minecraft.item.ItemStack;
import net.minecraft.text.OrderedText;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand All @@ -41,7 +39,7 @@ private void injectDrawTooltip(TextRenderer textRenderer, List<TooltipComponent>

Optional<TooltipComponent> markComponent = mutableComponents.stream()
.filter(component -> component instanceof OrderedTextTooltipComponent)
.filter(component -> EnhancedTooltips.MARK_KEY.equals(getContent(((OrderedTextTooltipComponent) component).text)))
.filter(component -> EnhancedTooltips.MARK_KEY.equals(EnhancedTooltipsTextVisitor.get(((OrderedTextTooltipComponent) component).text).getString()))
.findFirst();

if (markComponent.isPresent()) {
Expand All @@ -59,28 +57,4 @@ private void injectDrawTooltip(TextRenderer textRenderer, List<TooltipComponent>
}
}
}

@Unique
private String getContent(OrderedText text) {
if (text == null) {
return null;
}

try {
Field[] fields = text.getClass().getDeclaredFields();
for (Field field : fields) {
if (!field.canAccess(text)) {
field.setAccessible(true);
}

if (field.get(text) instanceof String content) {
return content;
}
}
} catch (IllegalAccessException e) {
EnhancedTooltips.LOGGER.error("{}", EnhancedTooltips.MOD_ID, e);
}

return null;
}
}
2 changes: 2 additions & 0 deletions src/main/resources/assets/enhancedtooltips/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
"enhancedtooltips.title": "EnhancedTooltips Config",
"enhancedtooltips.config.rarityTooltip": "Rarity Tooltip",
"enhancedtooltips.config.rarityTooltip.desc": "Shows the rarity of an item in its tooltip.",
"enhancedtooltips.config.scaleFactor": "Tooltip Scale Factor",
"enhancedtooltips.config.scaleFactor.desc": "Adjusts the size of tooltips. A scale of 100% displays the tooltip at its default size.",
"enhancedtooltips.config.itemBadges": "Item Badges",
"enhancedtooltips.config.itemBadges.desc": "Shows the category of an item in a badge on its tooltip.",
"enhancedtooltips.config.borderColor": "Tooltip Border Color",
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/assets/enhancedtooltips/lang/tr_tr.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
"enhancedtooltips.title": "EnhancedTooltips Konfigürasyonu",
"enhancedtooltips.config.rarityTooltip": "Nadirlik Alet İpucu",
"enhancedtooltips.config.rarityTooltip.desc": "Bir eşyanın nadirliğini alet ipucunda gösterir.",
"enhancedtooltips.config.scaleFactor": "Tooltip Scale Factor",
"enhancedtooltips.config.scaleFactor.desc": "Adjusts the size of tooltips. A scale of 100% displays the tooltip at its default size.",
"enhancedtooltips.config.itemBadges": "Eşya Rozetleri",
"enhancedtooltips.config.itemBadges.desc": "Eşyanın kategorisini alet ipucunda rozet olarak gösterir.",
"enhancedtooltips.config.borderColor": "Alet İpucu Çerçeve Rengi",
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/assets/enhancedtooltips/lang/zh_cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
"enhancedtooltips.title": "EnhancedTooltips Config",
"enhancedtooltips.config.rarityTooltip": "Rarity Tooltip",
"enhancedtooltips.config.rarityTooltip.desc": "Shows the rarity of an item in its tooltip.",
"enhancedtooltips.config.scaleFactor": "Tooltip Scale Factor",
"enhancedtooltips.config.scaleFactor.desc": "Adjusts the size of tooltips. A scale of 100% displays the tooltip at its default size.",
"enhancedtooltips.config.itemBadges": "Item Badges",
"enhancedtooltips.config.itemBadges.desc": "Shows the category of an item in a badge on its tooltip.",
"enhancedtooltips.config.borderColor": "Tooltip Border Color",
Expand Down

0 comments on commit c7b2f28

Please sign in to comment.