diff --git a/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java b/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java index c767b249a..fb855a4cb 100644 --- a/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java +++ b/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java @@ -31,7 +31,6 @@ import net.minecraft.util.FoodStats; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.GuiIngameForge; import net.minecraftforge.client.event.*; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingDamageEvent; import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/MixinGuiScreen.java b/src/main/java/me/zeroeightsix/kami/mixin/client/MixinGuiScreen.java index 5782a3d89..515ebf071 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/MixinGuiScreen.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/MixinGuiScreen.java @@ -1,6 +1,7 @@ package me.zeroeightsix.kami.mixin.client; import me.zeroeightsix.kami.module.modules.render.CleanGUI; +import me.zeroeightsix.kami.module.modules.render.MapPreview; import me.zeroeightsix.kami.module.modules.render.ShulkerPreview; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -8,10 +9,14 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemMap; import net.minecraft.item.ItemShulkerBox; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.MapData; +import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -19,6 +24,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import static me.zeroeightsix.kami.KamiMod.MODULE_MANAGER; +import static org.lwjgl.opengl.GL11.glDepthRange; /** * Created by 086 on 24/12/2017. @@ -29,6 +35,7 @@ public class MixinGuiScreen { @Shadow public Minecraft mc; RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + private static final ResourceLocation RES_MAP_BACKGROUND = new ResourceLocation("textures/map/map_background.png"); @Inject(method = "renderToolTip", at = @At("HEAD"), cancellable = true) public void renderToolTip(ItemStack stack, int x, int y, CallbackInfo info) { @@ -92,6 +99,47 @@ public class MixinGuiScreen { GlStateManager.enableRescaleNormal(); } } + } else if (MODULE_MANAGER.isModuleEnabled(MapPreview.class) && stack.getItem() instanceof ItemMap) { + MapData mapData = MapPreview.getMapData(stack); + if (mapData == null) return; + info.cancel(); + + MapPreview mp = MODULE_MANAGER.getModuleT(MapPreview.class); + int xl = x + 6; + int yl = y + 6; + + GL11.glPushMatrix(); + GlStateManager.color(1f, 1f, 1f); // this dumbass shit is needed for some fucking reason???? thanks tiger for figuring this one out + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + GlStateManager.translate(xl, yl, 0.0); + GlStateManager.scale(mp.getScale().getValue() / 5.0, mp.getScale().getValue() / 5.0, 0.0); + RenderHelper.enableGUIStandardItemLighting(); // needed to make lighting work inside non inventory containers + mc.getTextureManager().bindTexture(RES_MAP_BACKGROUND); + + /* taken from mc code, draw the maps frame */ + if (mp.getFrame().getValue()) { + glDepthRange(0, 0.01); // fix drawing under other layers, just draw over everything + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-7.0D, 135.0D, 0.0D).tex(0.0D, 1.0D).endVertex(); + bufferbuilder.pos(135.0D, 135.0D, 0.0D).tex(1.0D, 1.0D).endVertex(); + bufferbuilder.pos(135.0D, -7.0D, 0.0D).tex(1.0D, 0.0D).endVertex(); + bufferbuilder.pos(-7.0D, -7.0D, 0.0D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + glDepthRange(0, 1.0); // undo changes to rendering order + } + + /* Draw the map */ + GlStateManager.disableDepth(); // needed to keep it on top of the frame + glDepthRange(0, 0.01); + mc.entityRenderer.getMapItemRenderer().renderMap(mapData, !mp.getFrame().getValue()); + glDepthRange(0, 1.0); + GlStateManager.enableDepth(); // originally enabled + + RenderHelper.disableStandardItemLighting(); // originally disabled + GL11.glPopMatrix(); } } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/MapPreview.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/MapPreview.kt new file mode 100644 index 000000000..f59f82c0c --- /dev/null +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/MapPreview.kt @@ -0,0 +1,32 @@ +package me.zeroeightsix.kami.module.modules.render + +import me.zeroeightsix.kami.module.Module +import me.zeroeightsix.kami.setting.Setting +import me.zeroeightsix.kami.setting.Settings +import net.minecraft.item.ItemMap +import net.minecraft.item.ItemStack +import net.minecraft.world.World +import net.minecraft.world.storage.MapData + + +/** + * Created by fred41 on 27/05/2020. + * Greatly updated by dominikaaaa on 01/06/20, fixed loads of bugs + * @see me.zeroeightsix.kami.mixin.client.MixinGuiScreen + */ +@Module.Info( + name = "MapPreview", + category = Module.Category.RENDER, + description = "Previews maps when hovering over them" +) +class MapPreview : Module() { + val frame: Setting = register(Settings.b("Show Frame", true)) + val scale: Setting = register(Settings.doubleBuilder("Size").withRange(0.0, 10.0).withValue(5.0).build()) + + companion object MapPreview { + @JvmStatic + fun getMapData(itemStack: ItemStack): MapData? { + return (itemStack.getItem() as ItemMap).getMapData(itemStack, mc.world as World) + } + } +} \ No newline at end of file