Skip to content

Commit bed5780

Browse files
committed
show in slot setting in MapPreview
1 parent 1f73e62 commit bed5780

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

src/main/java/com/lambda/mixin/render/DrawContextMixin.java

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,73 @@
1818
package com.lambda.mixin.render;
1919

2020
import com.lambda.module.modules.render.ContainerPreview;
21+
import com.lambda.module.modules.render.MapPreview;
22+
import net.minecraft.client.MinecraftClient;
2123
import net.minecraft.client.font.TextRenderer;
2224
import net.minecraft.client.gui.DrawContext;
23-
import net.minecraft.client.gui.tooltip.TooltipComponent;
24-
import net.minecraft.client.gui.tooltip.TooltipPositioner;
25+
import net.minecraft.client.render.MapRenderState;
26+
import net.minecraft.component.DataComponentTypes;
27+
import net.minecraft.item.FilledMapItem;
2528
import net.minecraft.item.ItemStack;
29+
import net.minecraft.item.Items;
2630
import net.minecraft.item.tooltip.TooltipData;
2731
import net.minecraft.text.Text;
2832
import net.minecraft.util.Identifier;
2933
import org.jetbrains.annotations.Nullable;
34+
import org.joml.Matrix3x2fStack;
35+
import org.spongepowered.asm.mixin.Final;
3036
import org.spongepowered.asm.mixin.Mixin;
37+
import org.spongepowered.asm.mixin.Shadow;
38+
import org.spongepowered.asm.mixin.Unique;
3139
import org.spongepowered.asm.mixin.injection.At;
3240
import org.spongepowered.asm.mixin.injection.Inject;
3341
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
3442

3543
import java.util.List;
3644
import java.util.Optional;
3745

46+
/*
47+
Map slot rendering code
48+
Original source: https://github.com/Crec0/map-in-slot
49+
Copyright (c) 2022 Crec0
50+
Licensed under MIT License
51+
*/
3852
@Mixin(DrawContext.class)
39-
public class DrawContextMixin {
53+
public abstract class DrawContextMixin {
54+
@Shadow
55+
@Final
56+
MinecraftClient client;
57+
58+
@Unique
59+
private final MapRenderState mapRenderState = new MapRenderState();
60+
61+
@Shadow
62+
public abstract Matrix3x2fStack getMatrices();
63+
64+
@Shadow
65+
public abstract void drawMap(MapRenderState mapRenderState);
66+
67+
@Inject(method = "drawStackOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "TAIL"))
68+
private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int i, int j, String string, CallbackInfo ci) {
69+
if (MapPreview.INSTANCE.isDisabled() || !MapPreview.getShowInSlot()) return;
70+
71+
if (!stack.isOf(Items.FILLED_MAP)) return;
72+
73+
var mapId = stack.get(DataComponentTypes.MAP_ID);
74+
var savedData = FilledMapItem.getMapState(mapId, client.world);
75+
76+
if (savedData == null) return;
77+
78+
this.getMatrices().pushMatrix();
79+
this.getMatrices().translate(i, j);
80+
this.getMatrices().scale(0.125F, 0.125F);
81+
82+
client.getMapRenderer().update(mapId, savedData, this.mapRenderState);
83+
this.drawMap(this.mapRenderState);
84+
85+
this.getMatrices().popMatrix();
86+
}
87+
4088
@Inject(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V", at = @At("HEAD"), cancellable = true)
4189
private void onDrawTooltip(TextRenderer textRenderer, List<Text> text, Optional<TooltipData> data, int x, int y, @Nullable Identifier texture, CallbackInfo ci) {
4290
if (!ContainerPreview.INSTANCE.isEnabled()) return;

src/main/kotlin/com/lambda/module/modules/render/MapPreview.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import com.lambda.Lambda.mc
2121
import com.lambda.module.Module
2222
import com.lambda.module.tag.ModuleTag
2323
import net.minecraft.client.font.TextRenderer
24+
import net.minecraft.client.gl.RenderPipelines
2425
import net.minecraft.client.gui.DrawContext
2526
import net.minecraft.client.gui.tooltip.TooltipComponent
2627
import net.minecraft.client.render.MapRenderState
27-
import net.minecraft.client.gl.RenderPipelines
2828
import net.minecraft.component.DataComponentTypes
2929
import net.minecraft.component.type.MapIdComponent
3030
import net.minecraft.item.FilledMapItem
@@ -38,6 +38,8 @@ object MapPreview : Module(
3838
description = "Preview maps in your inventory",
3939
tag = ModuleTag.RENDER,
4040
) {
41+
@JvmStatic val showInSlot by setting("Show In Slot", true, "Shows the map in the slot rather than the basic map icon")
42+
4143
private val background = Identifier.ofVanilla("textures/map/map_background.png")
4244

4345
class MapComponent(val stack: ItemStack) : TooltipData, TooltipComponent {

0 commit comments

Comments
 (0)