From b23e73968dd9637054b8cd0e0524e763f22e431a Mon Sep 17 00:00:00 2001 From: liv Date: Fri, 8 Jan 2021 14:58:18 -0500 Subject: [PATCH] [cleanup] Mixins package (#1824) --- .../kami/mixin/client/MixinMinecraft.java | 13 +- .../mixin/client/gui/MixinGuiContainer.java | 21 +-- .../mixin/client/gui/MixinGuiIngameForge.java | 18 +-- .../mixin/client/gui/MixinGuiNewChat.java | 11 +- .../client/gui/MixinGuiPlayerTabOverlay.java | 2 +- .../kami/mixin/client/gui/MixinGuiScreen.java | 131 ++--------------- .../client/player/MixinEntityPlayerSP.java | 8 +- .../client/render/MixinEntityRenderer.java | 10 +- .../client/render/MixinFontRenderer.java | 67 +-------- .../client/render/MixinItemRenderer.java | 29 ++-- .../client/render/MixinLayerArmorBase.java | 10 +- .../client/render/MixinMapItemRenderer.java | 18 +-- .../kami/mixin/client/render/MixinRender.java | 4 +- .../client/render/MixinRenderGlobal.java | 6 +- .../render/MixinTileEntitySignRenderer.java | 7 +- .../module/modules/chat/ExtraChatHistory.kt | 10 ++ .../kami/module/modules/chat/KamiMoji.kt | 77 +++++++++- .../module/modules/player/ChestStealer.kt | 24 ++++ .../kami/module/modules/player/Freecam.kt | 25 +++- .../kami/module/modules/render/AntiFog.kt | 13 +- .../kami/module/modules/render/ArmorHide.kt | 37 +++-- .../kami/module/modules/render/ExtraTab.kt | 5 + .../kami/module/modules/render/ItemModel.kt | 39 ++++- .../kami/module/modules/render/MapPreview.kt | 24 +++- .../kami/module/modules/render/NoRender.kt | 21 +++ .../module/modules/render/ShulkerPreview.kt | 134 +++++++++++++++++- .../java/me/zeroeightsix/kami/util/Wrapper.kt | 14 ++ .../me/zeroeightsix/kami/util/math/Vec3f.kt | 3 + 28 files changed, 448 insertions(+), 333 deletions(-) create mode 100644 src/main/java/me/zeroeightsix/kami/util/math/Vec3f.kt diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/MixinMinecraft.java b/src/main/java/me/zeroeightsix/kami/mixin/client/MixinMinecraft.java index 33350bb38..1ba38c123 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/MixinMinecraft.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/MixinMinecraft.java @@ -72,12 +72,12 @@ public class MixinMinecraft { @Inject(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;displayCrashReport(Lnet/minecraft/crash/CrashReport;)V", shift = At.Shift.BEFORE)) public void displayCrashReport(CallbackInfo info) { - save(); + Wrapper.saveAndShutdown(); } @Inject(method = "shutdown", at = @At("HEAD")) public void shutdown(CallbackInfo info) { - save(); + Wrapper.saveAndShutdown(); } @Inject(method = "init", at = @At("TAIL")) @@ -87,14 +87,5 @@ public class MixinMinecraft { } } - private void save() { - if (!KamiMod.isReady()) return; - - ShutdownEvent.INSTANCE.post(); - System.out.println("Shutting down: saving KAMI configuration"); - ConfigUtils.INSTANCE.saveAll(); - System.out.println("Configuration saved."); - } - } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiContainer.java b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiContainer.java index c25313901..21d7ed0bf 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiContainer.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiContainer.java @@ -26,7 +26,7 @@ public class MixinGuiContainer extends GuiScreen { public void initGui(CallbackInfo ci) { if (ChestStealer.INSTANCE.isValidGui()) { this.buttonList.add(stealButton); - updateButton(); + ChestStealer.updateButton(stealButton, this.guiLeft, this.xSize, this.guiTop); } } @@ -41,24 +41,7 @@ public class MixinGuiContainer extends GuiScreen { @Inject(method = "updateScreen", at = @At("HEAD")) public void updateScreen(CallbackInfo ci) { - updateButton(); + ChestStealer.updateButton(stealButton, this.guiLeft, this.xSize, this.guiTop); } - private void updateButton() { - if (ChestStealer.INSTANCE.isEnabled() && ChestStealer.INSTANCE.isContainerOpen()) { - String str = ""; - if (ChestStealer.INSTANCE.getStealing()) { - str = "Stop"; - } else { - str = "Steal"; - } - stealButton.x = this.guiLeft + this.xSize + 2; - stealButton.y = this.guiTop + 2; - stealButton.enabled = ChestStealer.INSTANCE.canSteal(); - stealButton.visible = true; - stealButton.displayString = str; - } else { - stealButton.visible = false; - } - } } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiIngameForge.java b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiIngameForge.java index 2ab8a1635..e7d15ce32 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiIngameForge.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiIngameForge.java @@ -12,31 +12,21 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; public class MixinGuiIngameForge { @ModifyVariable(method = "renderAir", at = @At(value = "STORE", ordinal = 0)) private EntityPlayer renderAir$getRenderViewEntity(EntityPlayer renderViewEntity) { - return gerRenderViewEntity(renderViewEntity); + return Freecam.getRenderViewEntity(renderViewEntity); } @ModifyVariable(method = "renderHealth", at = @At(value = "STORE", ordinal = 0)) private EntityPlayer renderHealth$getRenderViewEntity(EntityPlayer renderViewEntity) { - return gerRenderViewEntity(renderViewEntity); + return Freecam.getRenderViewEntity(renderViewEntity); } @ModifyVariable(method = "renderFood", at = @At(value = "STORE", ordinal = 0)) private EntityPlayer renderFood$getRenderViewEntity(EntityPlayer renderViewEntity) { - return gerRenderViewEntity(renderViewEntity); + return Freecam.getRenderViewEntity(renderViewEntity); } @ModifyVariable(method = "renderHealthMount", at = @At(value = "STORE", ordinal = 0)) private EntityPlayer renderHealthMount$getRenderViewEntity(EntityPlayer renderViewEntity) { - return gerRenderViewEntity(renderViewEntity); - } - - private EntityPlayer gerRenderViewEntity(EntityPlayer renderViewEntity) { - EntityPlayer player = Wrapper.getPlayer(); - - if (Freecam.INSTANCE.isEnabled() && player != null) { - return player; - } else { - return renderViewEntity; - } + return Freecam.getRenderViewEntity(renderViewEntity); } } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiNewChat.java b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiNewChat.java index db4277f5d..80782328b 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiNewChat.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiNewChat.java @@ -32,19 +32,12 @@ public abstract class MixinGuiNewChat { @Redirect(method = "setChatLine", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I", ordinal = 0, remap = false)) public int drawnChatLinesSize(List list) { - return getModifiedSize(list); + return ExtraChatHistory.getModifiedSize(list); } @Redirect(method = "setChatLine", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I", ordinal = 2, remap = false)) public int chatLinesSize(List list) { - return getModifiedSize(list); + return ExtraChatHistory.getModifiedSize(list); } - public int getModifiedSize(List list) { - if (ExtraChatHistory.INSTANCE.isEnabled()) { - return list.size() - ExtraChatHistory.INSTANCE.getMaxMessages().getValue() - 100; - } else { - return list.size(); - } - } } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiPlayerTabOverlay.java b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiPlayerTabOverlay.java index 5e5ee7ceb..4f3061585 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiPlayerTabOverlay.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiPlayerTabOverlay.java @@ -21,7 +21,7 @@ public class MixinGuiPlayerTabOverlay { @Redirect(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Ljava/util/List;subList(II)Ljava/util/List;", remap = false)) public List subList(List list, int fromIndex, int toIndex) { - return list.subList(fromIndex, ExtraTab.INSTANCE.isEnabled() ? Math.min(ExtraTab.INSTANCE.getTabSize().getValue(), list.size()) : toIndex); + return ExtraTab.INSTANCE.subList(list, fromIndex, toIndex); } @Inject(method = "getPlayerName", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiScreen.java b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiScreen.java index 63afdde70..94b0e73a4 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiScreen.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/gui/MixinGuiScreen.java @@ -3,17 +3,15 @@ package me.zeroeightsix.kami.mixin.client.gui; 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 me.zeroeightsix.kami.util.Wrapper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; 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.client.renderer.RenderItem; 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.world.storage.MapData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -24,140 +22,29 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(GuiScreen.class) public class MixinGuiScreen { - @Shadow public Minecraft mc; - RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - @Inject(method = "renderToolTip", at = @At("HEAD"), cancellable = true) public void renderToolTip(ItemStack stack, int x, int y, CallbackInfo info) { if (ShulkerPreview.INSTANCE.isEnabled() && stack.getItem() instanceof ItemShulkerBox) { - NBTTagCompound tagCompound = stack.getTagCompound(); - if (tagCompound != null && tagCompound.hasKey("BlockEntityTag", 10)) { - NBTTagCompound blockEntityTag = tagCompound.getCompoundTag("BlockEntityTag"); - if (blockEntityTag.hasKey("Items", 9)) { - // We'll take over! - info.cancel(); + NBTTagCompound tagCompound = ShulkerPreview.getShulkerData(stack); - NonNullList nonnulllist = NonNullList.withSize(27, ItemStack.EMPTY); - ItemStackHelper.loadAllItems(blockEntityTag, nonnulllist); - - GlStateManager.enableBlend(); - GlStateManager.disableRescaleNormal(); - RenderHelper.disableStandardItemLighting(); - GlStateManager.disableLighting(); - GlStateManager.disableDepth(); - - - int width = Math.max(144, fontRenderer.getStringWidth(stack.getDisplayName()) + 3); //9*16 - - int x1 = x + 12; - int y1 = y - 12; - int height = 48 + 9; //3*16 - - this.itemRender.zLevel = 300.0F; - this.drawGradientRectP(x1 - 3, y1 - 4, x1 + width + 3, y1 - 3, -267386864, -267386864); - this.drawGradientRectP(x1 - 3, y1 + height + 3, x1 + width + 3, y1 + height + 4, -267386864, -267386864); - this.drawGradientRectP(x1 - 3, y1 - 3, x1 + width + 3, y1 + height + 3, -267386864, -267386864); - this.drawGradientRectP(x1 - 4, y1 - 3, x1 - 3, y1 + height + 3, -267386864, -267386864); - this.drawGradientRectP(x1 + width + 3, y1 - 3, x1 + width + 4, y1 + height + 3, -267386864, -267386864); - this.drawGradientRectP(x1 - 3, y1 - 3 + 1, x1 - 3 + 1, y1 + height + 3 - 1, 1347420415, 1344798847); - this.drawGradientRectP(x1 + width + 2, y1 - 3 + 1, x1 + width + 3, y1 + height + 3 - 1, 1347420415, 1344798847); - this.drawGradientRectP(x1 - 3, y1 - 3, x1 + width + 3, y1 - 3 + 1, 1347420415, 1347420415); - this.drawGradientRectP(x1 - 3, y1 + height + 2, x1 + width + 3, y1 + height + 3, 1344798847, 1344798847); - - fontRenderer.drawString(stack.getDisplayName(), x + 12, y - 12, 0xffffff); - - GlStateManager.enableBlend(); - GlStateManager.enableAlpha(); - GlStateManager.enableTexture2D(); - GlStateManager.enableLighting(); - GlStateManager.enableDepth(); - RenderHelper.enableGUIStandardItemLighting(); - for (int i = 0; i < nonnulllist.size(); i++) { - int iX = x + (i % 9) * 16 + 11; - int iY = y + (i / 9) * 16 - 11 + 8; - ItemStack itemStack = nonnulllist.get(i); - - itemRender.renderItemAndEffectIntoGUI(itemStack, iX, iY); - itemRender.renderItemOverlayIntoGUI(this.fontRenderer, itemStack, iX, iY, null); - } - RenderHelper.disableStandardItemLighting(); - this.itemRender.zLevel = 0.0F; - - GlStateManager.enableLighting(); - GlStateManager.enableDepth(); - RenderHelper.enableStandardItemLighting(); - GlStateManager.enableRescaleNormal(); - } + if (tagCompound != null) { + info.cancel(); + ShulkerPreview.renderShulkerAndItems(stack, x, y, tagCompound); } } else if (MapPreview.INSTANCE.isEnabled() && stack.getItem() instanceof ItemMap) { MapData mapData = MapPreview.getMapData(stack); if (mapData != null) { info.cancel(); - int translatedX = x + 6; - int translatedY = y + 6; - double scale = MapPreview.INSTANCE.getScale().getValue() / 5.0; - - GlStateManager.pushMatrix(); - GlStateManager.color(1f, 1f, 1f); - RenderHelper.enableGUIStandardItemLighting(); - GlStateManager.disableDepth(); - - GlStateManager.translate(translatedX, translatedY, 0.0); - GlStateManager.scale(scale, scale, 0.0); - - MapPreview.drawMap(stack, mapData); - - GlStateManager.enableDepth(); - RenderHelper.disableStandardItemLighting(); - GlStateManager.popMatrix(); + MapPreview.drawMap(stack, mapData, x, y); } } } - /** - * @author cookiedragon234 - * see https://github.com/kami-blue/client/pull/293 for discussion - * authors words: - * Also @l1ving you should be more careful with merging commits, especially from people who are new to coding. Stuff like this is obviously stolen, and can get your repository DMCA'd. - *

- * as shown be the rest of his discussion, he was fine with it - * I even aknowledged when it was added, after cookies approval, that it was pasted from backdoored. - */ - @Inject(method = "Lnet/minecraft/client/gui/GuiScreen;drawWorldBackground(I)V", at = @At("HEAD"), cancellable = true) + @Inject(method = "drawWorldBackground(I)V", at = @At("HEAD"), cancellable = true) private void drawWorldBackgroundWrapper(final int tint, final CallbackInfo ci) { - if (this.mc.world != null && CleanGUI.INSTANCE.isEnabled() && (CleanGUI.INSTANCE.getInventoryGlobal().getValue())) { + if (Wrapper.getWorld() != null && CleanGUI.INSTANCE.isEnabled() && (CleanGUI.INSTANCE.getInventoryGlobal().getValue())) { ci.cancel(); } } - - private void drawGradientRectP(int left, int top, int right, int bottom, int startColor, int endColor) { - float f = (float) (startColor >> 24 & 255) / 255.0F; - float f1 = (float) (startColor >> 16 & 255) / 255.0F; - float f2 = (float) (startColor >> 8 & 255) / 255.0F; - float f3 = (float) (startColor & 255) / 255.0F; - float f4 = (float) (endColor >> 24 & 255) / 255.0F; - float f5 = (float) (endColor >> 16 & 255) / 255.0F; - float f6 = (float) (endColor >> 8 & 255) / 255.0F; - float f7 = (float) (endColor & 255) / 255.0F; - GlStateManager.disableTexture2D(); - GlStateManager.enableBlend(); - GlStateManager.disableAlpha(); - GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); - GlStateManager.shadeModel(7425); - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); - bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); - bufferbuilder.pos(right, top, 300).color(f1, f2, f3, f).endVertex(); - bufferbuilder.pos(left, top, 300).color(f1, f2, f3, f).endVertex(); - bufferbuilder.pos(left, bottom, 300).color(f5, f6, f7, f4).endVertex(); - bufferbuilder.pos(right, bottom, 300).color(f5, f6, f7, f4).endVertex(); - tessellator.draw(); - GlStateManager.shadeModel(7424); - GlStateManager.disableBlend(); - GlStateManager.enableAlpha(); - GlStateManager.enableTexture2D(); - } - } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/player/MixinEntityPlayerSP.java b/src/main/java/me/zeroeightsix/kami/mixin/client/player/MixinEntityPlayerSP.java index afbfdd4e0..4bd1e5447 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/player/MixinEntityPlayerSP.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/player/MixinEntityPlayerSP.java @@ -70,11 +70,9 @@ public abstract class MixinEntityPlayerSP extends EntityPlayer { @Inject(method = "displayGUIChest", at = @At("HEAD"), cancellable = true) public void onDisplayGUIChest(IInventory chestInventory, CallbackInfo ci) { if (BeaconSelector.INSTANCE.isEnabled()) { - if (chestInventory instanceof IInteractionObject) { - if ("minecraft:beacon".equals(((IInteractionObject) chestInventory).getGuiID())) { - Minecraft.getMinecraft().displayGuiScreen(new KamiGuiBeacon(this.inventory, chestInventory)); - ci.cancel(); - } + if (chestInventory instanceof IInteractionObject && "minecraft:beacon".equals(((IInteractionObject) chestInventory).getGuiID())) { + Minecraft.getMinecraft().displayGuiScreen(new KamiGuiBeacon(this.inventory, chestInventory)); + ci.cancel(); } } } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java index bc516c114..69046c26d 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinEntityRenderer.java @@ -58,20 +58,14 @@ public class MixinEntityRenderer { @Inject(method = "setupFog", at = @At(value = "HEAD"), cancellable = true) public void setupFog(int startCoords, float partialTicks, CallbackInfo callbackInfo) { - if (Wrapper.getPlayer() != null - && Wrapper.getPlayer().ticksExisted > 20 - && AntiFog.INSTANCE.isEnabled() - && AntiFog.INSTANCE.getMode().getValue() == AntiFog.VisionMode.NO_FOG) { + if (AntiFog.INSTANCE.getShouldNoFog()) { callbackInfo.cancel(); } } @Redirect(method = "setupFog", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ActiveRenderInfo;getBlockStateAtEntityViewpoint(Lnet/minecraft/world/World;Lnet/minecraft/entity/Entity;F)Lnet/minecraft/block/state/IBlockState;")) public IBlockState getBlockStateAtEntityViewpoint(World worldIn, Entity entityIn, float p_186703_2_) { - if (Wrapper.getPlayer() != null - && Wrapper.getPlayer().ticksExisted > 20 - && AntiFog.INSTANCE.isEnabled() - && AntiFog.INSTANCE.getMode().getValue() == AntiFog.VisionMode.AIR) { + if (AntiFog.INSTANCE.getShouldAir()) { return Blocks.AIR.getDefaultState(); } else { return ActiveRenderInfo.getBlockStateAtEntityViewpoint(worldIn, entityIn, p_186703_2_); diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinFontRenderer.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinFontRenderer.java index 2724346de..0baa56b71 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinFontRenderer.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinFontRenderer.java @@ -5,16 +5,9 @@ package me.zeroeightsix.kami.mixin.client.render; -import me.zeroeightsix.kami.manager.managers.KamiMojiManager; import me.zeroeightsix.kami.module.modules.chat.KamiMoji; -import me.zeroeightsix.kami.util.Wrapper; -import me.zeroeightsix.kami.util.graphics.GlStateUtils; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -22,10 +15,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.Arrays; - -import static org.lwjgl.opengl.GL11.*; - /** * Updated by Xiaro on 10/08/20 */ @@ -41,8 +30,6 @@ public abstract class MixinFontRenderer { @Shadow public float blue; @Shadow protected abstract void renderStringAtPos(String text, boolean shadow); - @Shadow public abstract int getStringWidth(String s); - @Shadow public abstract int getCharWidth(char character); /** * @author Tiger @@ -50,21 +37,9 @@ public abstract class MixinFontRenderer { @Redirect(method = "renderString", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/FontRenderer;renderStringAtPos(Ljava/lang/String;Z)V")) private void renderStringAtPos(FontRenderer fontRenderer, String text, boolean shadow) { if (KamiMoji.INSTANCE.isEnabled() && text.contains(":")) { - int size = FONT_HEIGHT; - - for (String possible : text.split(":")) { - if (KamiMojiManager.INSTANCE.isEmoji(possible)) { - String emojiText = ":" + possible + ":"; - if (!shadow) { - int index = text.indexOf(emojiText); - if (index == -1) continue; - int x = getStringWidth(text.substring(0, index)) + FONT_HEIGHT / 4; - drawEmoji(KamiMojiManager.INSTANCE.getEmoji(possible), posX + x, posY, size, alpha); - } - text = text.replaceFirst(emojiText, getReplacement()); - } - } + text = KamiMoji.getText(text, FONT_HEIGHT, shadow, posX, posY, alpha); } + GlStateManager.color(red, blue, green, alpha); // Big Mojang meme :monkey: renderStringAtPos(text, shadow); } @@ -75,43 +50,7 @@ public abstract class MixinFontRenderer { @Inject(method = "getStringWidth", at = @At("TAIL"), cancellable = true) public void getStringWidth(String text, CallbackInfoReturnable cir) { if (cir.getReturnValue() != 0 && KamiMoji.INSTANCE.isEnabled() && text.contains(":")) { - int reducedWidth = cir.getReturnValue(); - for (String possible : text.split(":")) { - if (KamiMojiManager.INSTANCE.isEmoji(possible)) { - String emojiText = ":" + possible + ":"; - int emojiTextWidth = emojiText.chars().map(i -> getCharWidth((char) i)).sum(); - reducedWidth -= emojiTextWidth; - text = text.replaceFirst(emojiText, getReplacement()); - } - } - cir.setReturnValue(reducedWidth); + cir.setReturnValue(KamiMoji.getStringWidth(cir.getReturnValue(), text, FONT_HEIGHT)); } } - - /* This is created because vanilla one doesn't take double position input */ - private void drawEmoji(ResourceLocation emojiTexture, double x, double y, float size, float alpha) { - if (emojiTexture == null) return; - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); - - Wrapper.getMinecraft().getTextureManager().bindTexture(emojiTexture); - GlStateManager.color(1f, 1f, 1f, alpha); - GlStateManager.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); - bufferbuilder.pos(x, (y + size), 0.0).tex(0.0, 1.0).endVertex(); - bufferbuilder.pos(x + size, y + size, 0.0).tex(1.0, 1.0).endVertex(); - bufferbuilder.pos(x + size, y, 0.0).tex(1.0, 0.0).endVertex(); - bufferbuilder.pos(x, y, 0.0).tex(0.0, 0.0).endVertex(); - tessellator.draw(); - - GlStateUtils.resetTexParam(); - } - - private String getReplacement() { - int emojiWidth = (int) Math.ceil((float) FONT_HEIGHT / (float) getCharWidth(' ')); - char[] spaces = new char[emojiWidth]; - Arrays.fill(spaces, ' '); - return new String(spaces); - } } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinItemRenderer.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinItemRenderer.java index e4d6fceb4..aab01a808 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinItemRenderer.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinItemRenderer.java @@ -2,6 +2,7 @@ package me.zeroeightsix.kami.mixin.client.render; import me.zeroeightsix.kami.module.modules.player.Freecam; import me.zeroeightsix.kami.module.modules.render.ItemModel; +import me.zeroeightsix.kami.util.math.Vec3f; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.ItemRenderer; @@ -25,28 +26,24 @@ public class MixinItemRenderer { @Inject(method = "renderItemInFirstPerson(Lnet/minecraft/client/entity/AbstractClientPlayer;FFLnet/minecraft/util/EnumHand;FLnet/minecraft/item/ItemStack;F)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;pushMatrix()V", shift = At.Shift.AFTER)) private void transformSideFirstPerson$pushMatrix(AbstractClientPlayer player, float partialTicks, float pitch, EnumHand hand, float swingProgress, ItemStack stack, float equippedProgress, CallbackInfo ci) { if (ItemModel.INSTANCE.isEnabled()) { - if (!ItemModel.INSTANCE.getModifyHand() && stack.isEmpty()) return; - - EnumHandSide enumhandside = hand == EnumHand.MAIN_HAND ? player.getPrimaryHand() : player.getPrimaryHand().opposite(); - float sideMultiplier = enumhandside == EnumHandSide.RIGHT ? 1.0f : -1.0f; - - GlStateManager.translate(ItemModel.INSTANCE.getPosX() * sideMultiplier, ItemModel.INSTANCE.getPosY(), ItemModel.INSTANCE.getPosZ()); + Vec3f vec = ItemModel.getTranslation(stack, hand, player); + if (vec != null) { + GlStateManager.translate(vec.getX(), vec.getY(), vec.getZ()); + } } } @Inject(method = "renderItemInFirstPerson(Lnet/minecraft/client/entity/AbstractClientPlayer;FFLnet/minecraft/util/EnumHand;FLnet/minecraft/item/ItemStack;F)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItemSide(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;Z)V")) private void transformSideFirstPerson$renderItemSide(AbstractClientPlayer player, float partialTicks, float pitch, EnumHand hand, float swingProgress, ItemStack stack, float equippedProgress, CallbackInfo ci) { if (ItemModel.INSTANCE.isEnabled()) { - if (!ItemModel.INSTANCE.getModifyHand() && stack.isEmpty()) return; - - EnumHandSide enumhandside = hand == EnumHand.MAIN_HAND ? player.getPrimaryHand() : player.getPrimaryHand().opposite(); - float sideMultiplier = enumhandside == EnumHandSide.RIGHT ? 1.0f : -1.0f; - float scale = ItemModel.INSTANCE.getScale(); - - GlStateManager.rotate(ItemModel.INSTANCE.getRotateX(), 1.0f, 0.0f, 0.0f); - GlStateManager.rotate(ItemModel.INSTANCE.getRotateY() * sideMultiplier, 0.0f, 1.0f, 0.0f); - GlStateManager.rotate(ItemModel.INSTANCE.getRotateZ() * sideMultiplier, 0.0f, 0.0f, 1.0f); - GlStateManager.scale(scale, scale, scale); + Vec3f vec = ItemModel.getRotation(stack, hand, player); + if (vec != null) { + float scale = ItemModel.INSTANCE.getScale(); + GlStateManager.rotate(vec.getX(), 1.0f, 0.0f, 0.0f); + GlStateManager.rotate(vec.getY(), 0.0f, 1.0f, 0.0f); + GlStateManager.rotate(vec.getZ(), 0.0f, 0.0f, 1.0f); + GlStateManager.scale(scale, scale, scale); + } } } } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinLayerArmorBase.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinLayerArmorBase.java index 628aa2f3b..7cc1e76ee 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinLayerArmorBase.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinLayerArmorBase.java @@ -28,14 +28,8 @@ public abstract class MixinLayerArmorBase { @Inject(method = "renderArmorLayer", at = @At("HEAD"), cancellable = true) public void renderArmorLayerPre(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, EntityEquipmentSlot slotIn, CallbackInfo ci) { - if (ArmorHide.INSTANCE.isEnabled()) { - if ((ArmorHide.INSTANCE.getPlayer().getValue()) && entityLivingBaseIn instanceof EntityPlayer) { - if (ArmorHide.shouldHidePiece(slotIn)) ci.cancel(); - } else if ((ArmorHide.INSTANCE.getArmourStand().getValue()) && entityLivingBaseIn instanceof EntityArmorStand) { - if (ArmorHide.shouldHidePiece(slotIn)) ci.cancel(); - } else if ((ArmorHide.INSTANCE.getMobs().getValue()) && entityLivingBaseIn instanceof EntityMob) { - if (ArmorHide.shouldHidePiece(slotIn)) ci.cancel(); - } + if (ArmorHide.INSTANCE.isEnabled() && ArmorHide.shouldHide(slotIn, entityLivingBaseIn)) { + ci.cancel(); } if (!ci.isCancelled()) { diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinMapItemRenderer.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinMapItemRenderer.java index 5f74532cd..11b955e01 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinMapItemRenderer.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinMapItemRenderer.java @@ -15,29 +15,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import static org.lwjgl.opengl.GL11.GL_QUADS; -/** - * Idea from littlebroto1 - */ @Mixin(MapItemRenderer.class) public class MixinMapItemRenderer { - - private final ResourceLocation kamiMap = new ResourceLocation("kamiblue/kamimap.png"); - @Inject(method = "renderMap", at = @At(value = "HEAD"), cancellable = true) public void renderMap(MapData mapdataIn, boolean noOverlayRendering, CallbackInfo ci) { if (NoRender.INSTANCE.isEnabled() && NoRender.INSTANCE.getMap().getValue()) { ci.cancel(); - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); - Wrapper.getMinecraft().getTextureManager().bindTexture(kamiMap); - - bufferbuilder.begin(GL_QUADS, DefaultVertexFormats.POSITION_TEX); - bufferbuilder.pos(0.0D, 128.0D, -0.009999999776482582D).tex(0.0D, 1.0D).endVertex(); - bufferbuilder.pos(128.0D, 128.0D, -0.009999999776482582D).tex(1.0D, 1.0D).endVertex(); - bufferbuilder.pos(128.0D, 0.0D, -0.009999999776482582D).tex(1.0D, 0.0D).endVertex(); - bufferbuilder.pos(0.0D, 0.0D, -0.009999999776482582D).tex(0.0D, 0.0D).endVertex(); - - tessellator.draw(); + NoRender.INSTANCE.renderFakeMap(); } } } diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRender.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRender.java index e90075bd3..1596ae3b1 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRender.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRender.java @@ -51,8 +51,8 @@ abstract class MixinRender { @Inject(method = "renderLivingLabel", at = @At("RETURN")) protected void renderNamePost(T entityIn, String str, double x, double y, double z, int maxDistance, CallbackInfo ci) { - if (ESP.INSTANCE.isEnabled() && ESP.INSTANCE.getDrawingOutline()) { - if (ESP.INSTANCE.getFrameBuffer() != null) ESP.INSTANCE.getFrameBuffer().bindFramebuffer(false); + if (ESP.INSTANCE.isEnabled() && ESP.INSTANCE.getDrawingOutline() && ESP.INSTANCE.getFrameBuffer() != null) { + ESP.INSTANCE.getFrameBuffer().bindFramebuffer(false); } if (colorLock) { diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderGlobal.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderGlobal.java index e16ec72b8..b821f5b96 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderGlobal.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinRenderGlobal.java @@ -44,11 +44,9 @@ public abstract class MixinRenderGlobal { // Can't use @ModifyVariable here because it crashes outside of a dev env with Optifine @Redirect(method = "setupTerrain", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;getRenderChunkOffset(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/client/renderer/chunk/RenderChunk;Lnet/minecraft/util/EnumFacing;)Lnet/minecraft/client/renderer/chunk/RenderChunk;")) - public RenderChunk test(RenderGlobal renderGlobal, BlockPos playerPos, RenderChunk renderChunkBase, EnumFacing facing) { + public RenderChunk renderChunkOffset(RenderGlobal renderGlobal, BlockPos playerPos, RenderChunk renderChunkBase, EnumFacing facing) { if (Freecam.INSTANCE.isEnabled()) { - playerPos = new BlockPos(MathHelper.floor(mc.player.posX / 16.0D) * 16, - MathHelper.floor(mc.player.posY / 16.0D) * 16, - MathHelper.floor(mc.player.posZ / 16.0D) * 16); + playerPos = Freecam.getRenderChunkOffset(); } // Can't use a @Shadow of getRenderChunkOffset because it crashes outside of a dev env with Optifine diff --git a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinTileEntitySignRenderer.java b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinTileEntitySignRenderer.java index 5a58fa22f..38bee6dbd 100644 --- a/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinTileEntitySignRenderer.java +++ b/src/main/java/me/zeroeightsix/kami/mixin/client/render/MixinTileEntitySignRenderer.java @@ -2,6 +2,7 @@ package me.zeroeightsix.kami.mixin.client.render; import me.zeroeightsix.kami.module.modules.render.NoRender; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiEditSign; import net.minecraft.client.renderer.tileentity.TileEntitySignRenderer; import net.minecraft.tileentity.TileEntitySign; @@ -21,9 +22,9 @@ public class MixinTileEntitySignRenderer { @Redirect(method = "render", at = @At(value = "FIELD", target = "Lnet/minecraft/tileentity/TileEntitySign;signText:[Lnet/minecraft/util/text/ITextComponent;", opcode = Opcodes.GETFIELD)) public ITextComponent[] getRenderViewEntity(TileEntitySign sign) { if (NoRender.INSTANCE.isEnabled() && NoRender.INSTANCE.getSignText().getValue()) { - if (mc.currentScreen instanceof GuiEditSign) { - if (getTileSign((GuiEditSign) mc.currentScreen).equals(sign)) - return sign.signText; + GuiScreen screen = mc.currentScreen; + if (screen instanceof GuiEditSign && getTileSign((GuiEditSign) screen).equals(sign)) { + return sign.signText; } return new ITextComponent[]{}; } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/chat/ExtraChatHistory.kt b/src/main/java/me/zeroeightsix/kami/module/modules/chat/ExtraChatHistory.kt index 68785cd76..f4d6cce97 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/chat/ExtraChatHistory.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/chat/ExtraChatHistory.kt @@ -1,6 +1,7 @@ package me.zeroeightsix.kami.module.modules.chat import me.zeroeightsix.kami.module.Module +import me.zeroeightsix.kami.module.modules.chat.ExtraChatHistory.maxMessages import me.zeroeightsix.kami.setting.ModuleConfig.setting object ExtraChatHistory : Module( @@ -10,4 +11,13 @@ object ExtraChatHistory : Module( showOnArray = false ) { val maxMessages = setting("MaxMessage", 1000, 100..5000, 100) + + @JvmStatic + fun getModifiedSize(list: List): Int { + return if (isEnabled) { + list.size - maxMessages.value - 100 + } else { + list.size + } + } } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/chat/KamiMoji.kt b/src/main/java/me/zeroeightsix/kami/module/modules/chat/KamiMoji.kt index 831be4785..c609ff8fc 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/chat/KamiMoji.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/chat/KamiMoji.kt @@ -1,9 +1,84 @@ package me.zeroeightsix.kami.module.modules.chat +import me.zeroeightsix.kami.manager.managers.KamiMojiManager.getEmoji +import me.zeroeightsix.kami.manager.managers.KamiMojiManager.isEmoji import me.zeroeightsix.kami.module.Module +import me.zeroeightsix.kami.util.graphics.GlStateUtils.resetTexParam +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.vertex.DefaultVertexFormats +import net.minecraft.util.ResourceLocation +import org.kamiblue.commons.extension.ceilToInt +import org.lwjgl.opengl.GL11 +import java.util.* object KamiMoji : Module( name = "KamiMoji", description = "Add emojis to chat using KamiMoji, courtesy of the EmojiAPI.", category = Category.CHAT -) +) { + @JvmStatic + fun getText(inputText: String, fontHeight: Int, shadow: Boolean, posX: Float, posY: Float, alpha: Float): String { + var text = inputText + + for (possible in text.split(":").toTypedArray()) { + if (isEmoji(possible)) { + val emojiText = ":$possible:" + if (!shadow) { + val index = text.indexOf(emojiText) + if (index == -1) continue + + val x = mc.fontRenderer.getStringWidth(text.substring(0, index)) + fontHeight / 4 + drawEmoji(getEmoji(possible), (posX + x).toDouble(), posY.toDouble(), fontHeight.toFloat(), alpha) + } + + text = text.replaceFirst(emojiText.toRegex(), getReplacement(fontHeight)) + } + } + + return text + } + + @JvmStatic + fun getStringWidth(inputWidth: Int, inputText: String, fontHeight: Int): Int { + var text = inputText + var reducedWidth = inputWidth + + for (possible in text.split(":")) { + if (isEmoji(possible)) { + val emojiText = ":$possible:" + val emojiTextWidth = emojiText.sumBy { mc.fontRenderer.getCharWidth(it) } + reducedWidth -= emojiTextWidth + text = text.replaceFirst(emojiText, getReplacement(fontHeight)) + } + } + + return reducedWidth + } + + private fun getReplacement(fontHeight: Int): String { + val emojiWidth = (fontHeight / mc.fontRenderer.getCharWidth(' ').toDouble()).ceilToInt() + val spaces = CharArray(emojiWidth) { ' ' } + return String(spaces) + } + + /* This is created because vanilla one doesn't take double position input */ + private fun drawEmoji(emojiTexture: ResourceLocation?, x: Double, y: Double, size: Float, alpha: Float) { + if (emojiTexture == null) return + val tessellator = Tessellator.getInstance() + val bufBuilder = tessellator.buffer + + mc.textureManager.bindTexture(emojiTexture) + GlStateManager.color(1f, 1f, 1f, alpha) + GlStateManager.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR) + + bufBuilder.begin(7, DefaultVertexFormats.POSITION_TEX) + bufBuilder.pos(x, y + size, 0.0).tex(0.0, 1.0).endVertex() + bufBuilder.pos(x + size, y + size, 0.0).tex(1.0, 1.0).endVertex() + bufBuilder.pos(x + size, y, 0.0).tex(1.0, 0.0).endVertex() + bufBuilder.pos(x, y, 0.0).tex(0.0, 0.0).endVertex() + tessellator.draw() + + resetTexParam() + } +} diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/player/ChestStealer.kt b/src/main/java/me/zeroeightsix/kami/module/modules/player/ChestStealer.kt index 76d17aa9c..b05d3cd39 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/player/ChestStealer.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/player/ChestStealer.kt @@ -1,11 +1,16 @@ package me.zeroeightsix.kami.module.modules.player +import me.zeroeightsix.kami.gui.mc.KamiGuiStealButton +import me.zeroeightsix.kami.mixin.client.gui.MixinGuiContainer import me.zeroeightsix.kami.module.Module +import me.zeroeightsix.kami.module.modules.player.ChestStealer.canSteal +import me.zeroeightsix.kami.module.modules.player.ChestStealer.stealing import me.zeroeightsix.kami.setting.ModuleConfig.setting import me.zeroeightsix.kami.util.InventoryUtils import me.zeroeightsix.kami.util.InventoryUtils.getEmptySlotContainer import me.zeroeightsix.kami.util.TickTimer import me.zeroeightsix.kami.util.threads.safeListener +import net.minecraft.client.gui.GuiButton import net.minecraft.client.gui.GuiEnchantment import net.minecraft.client.gui.GuiMerchant import net.minecraft.client.gui.GuiRepair @@ -63,6 +68,25 @@ object ChestStealer : Module( && mc.currentScreen !is GuiInventory } + @JvmStatic + fun updateButton(button: GuiButton, left: Int, size: Int, top: Int) { + if (isEnabled && isContainerOpen()) { + val str = if (stealing) { + "Stop" + } else { + "Steal" + } + + button.x = left + size + 2 + button.y = top + 2 + button.enabled = canSteal() + button.visible = true + button.displayString = str + } else { + button.visible = false + } + } + private fun steal(slot: Int?): Boolean { if (slot == null) return false val size = getContainerSlotSize() diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt b/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt index f1d1584d4..74441dda7 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt @@ -19,20 +19,19 @@ import net.minecraft.entity.player.EntityPlayer import net.minecraft.network.play.client.CPacketUseEntity import net.minecraft.util.MovementInput import net.minecraft.util.MovementInputFromOptions +import net.minecraft.util.math.BlockPos import net.minecraft.util.math.RayTraceResult import net.minecraft.util.math.Vec3d import net.minecraftforge.client.event.InputUpdateEvent import net.minecraftforge.fml.common.gameevent.InputEvent import net.minecraftforge.fml.common.gameevent.TickEvent +import org.kamiblue.commons.extension.floorToInt import org.kamiblue.commons.extension.toRadian import org.kamiblue.commons.interfaces.DisplayEnum import org.kamiblue.event.listener.listener import org.lwjgl.input.Keyboard import org.lwjgl.input.Mouse -import kotlin.math.abs -import kotlin.math.cos -import kotlin.math.min -import kotlin.math.sin +import kotlin.math.* object Freecam : Module( name = "Freecam", @@ -126,6 +125,24 @@ object Freecam : Module( } } + @JvmStatic + val renderChunkOffset + get() = BlockPos( + (mc.player.posX / 16).floorToInt() * 16, + (mc.player.posY / 16).floorToInt() * 16, + (mc.player.posZ / 16).floorToInt() * 16 + ) + + @JvmStatic + fun getRenderViewEntity(renderViewEntity: EntityPlayer): EntityPlayer { + val player = mc.player + return if (isEnabled && player != null) { + player + } else { + renderViewEntity + } + } + private fun resetMovementInput(movementInput: MovementInput?) { if (movementInput !is MovementInputFromOptions) return movementInput.apply { diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/AntiFog.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/AntiFog.kt index 30effeda2..0d04fd07c 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/AntiFog.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/AntiFog.kt @@ -2,6 +2,7 @@ package me.zeroeightsix.kami.module.modules.render import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting +import me.zeroeightsix.kami.util.Wrapper.player /** * Created by 086 on 9/04/2018. @@ -11,9 +12,17 @@ object AntiFog : Module( description = "Disables or reduces fog", category = Category.RENDER ) { - val mode = setting("Mode", VisionMode.NO_FOG) + private val mode by setting("Mode", VisionMode.NO_FOG) - enum class VisionMode { + private enum class VisionMode { NO_FOG, AIR } + + val shouldNoFog get() = isActive() && mode == VisionMode.NO_FOG + + val shouldAir get() = isActive() && mode == VisionMode.AIR + + override fun isActive(): Boolean { + return isEnabled && mc.player != null && mc.player.ticksExisted > 20 + } } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/ArmorHide.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/ArmorHide.kt index 213cc4f02..7bb230796 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/ArmorHide.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/ArmorHide.kt @@ -2,6 +2,10 @@ package me.zeroeightsix.kami.module.modules.render import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting +import net.minecraft.entity.EntityLivingBase +import net.minecraft.entity.item.EntityArmorStand +import net.minecraft.entity.monster.EntityMob +import net.minecraft.entity.player.EntityPlayer import net.minecraft.inventory.EntityEquipmentSlot object ArmorHide : Module( @@ -10,19 +14,28 @@ object ArmorHide : Module( description = "Hides the armor on selected entities", showOnArray = false ) { - val player = setting("Players", false) - val armourStand = setting("ArmourStands", true) - val mobs = setting("Mobs", true) - private val helmet = setting("Helmet", false) - private val chestplate = setting("Chestplate", false) - private val leggings = setting("Leggings", false) - private val boots = setting("Boots", false) + private val player by setting("Players", false) + private val armorStands by setting("ArmourStands", true) + private val mobs by setting("Mobs", true) + private val helmet by setting("Helmet", false) + private val chestplate by setting("Chestplate", false) + private val leggings by setting("Leggings", false) + private val boots by setting("Boots", false) @JvmStatic - fun shouldHidePiece(slotIn: EntityEquipmentSlot): Boolean { - return helmet.value && slotIn == EntityEquipmentSlot.HEAD - || chestplate.value && slotIn == EntityEquipmentSlot.CHEST - || leggings.value && slotIn == EntityEquipmentSlot.LEGS - || boots.value && slotIn == EntityEquipmentSlot.FEET + fun shouldHide(slotIn: EntityEquipmentSlot, entity: EntityLivingBase): Boolean { + return when(entity) { + is EntityPlayer -> player && shouldHidePiece(slotIn) + is EntityArmorStand -> armorStands && shouldHidePiece(slotIn) + is EntityMob -> mobs && shouldHidePiece(slotIn) + else -> false + } + } + + private fun shouldHidePiece(slotIn: EntityEquipmentSlot): Boolean { + return helmet && slotIn == EntityEquipmentSlot.HEAD + || chestplate && slotIn == EntityEquipmentSlot.CHEST + || leggings && slotIn == EntityEquipmentSlot.LEGS + || boots && slotIn == EntityEquipmentSlot.FEET } } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/ExtraTab.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/ExtraTab.kt index 6efb4bbef..6c9509dd4 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/ExtraTab.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/ExtraTab.kt @@ -1,6 +1,7 @@ package me.zeroeightsix.kami.module.modules.render import me.zeroeightsix.kami.module.Module +import me.zeroeightsix.kami.module.modules.render.ExtraTab.tabSize import me.zeroeightsix.kami.setting.ModuleConfig.setting object ExtraTab : Module( @@ -9,4 +10,8 @@ object ExtraTab : Module( category = Category.RENDER ) { val tabSize = setting("MaxPlayers", 265, 80..400, 5) + + fun subList(list: List, fromIndex: Int, toIndex: Int): List { + return list.subList(fromIndex, if (isEnabled) tabSize.value.coerceAtMost(list.size) else toIndex) + } } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/ItemModel.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/ItemModel.kt index a69c02b3a..e858da4d9 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/ItemModel.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/ItemModel.kt @@ -2,18 +2,43 @@ package me.zeroeightsix.kami.module.modules.render import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting +import me.zeroeightsix.kami.util.math.Vec3f +import net.minecraft.client.entity.AbstractClientPlayer +import net.minecraft.item.ItemStack +import net.minecraft.util.EnumHand +import net.minecraft.util.EnumHandSide object ItemModel : Module( name = "ItemModel", description = "Modify hand item rendering in first person", category = Category.RENDER ) { - val posX by setting("PosX", 0.0f, -5.0f..5.0f, 0.025f) - val posY by setting("PosY", 0.0f, -5.0f..5.0f, 0.025f) - val posZ by setting("PosZ", 0.0f, -5.0f..5.0f, 0.025f) - val rotateX by setting("RotateX", 0.0f, -180.0f..180.0f, 1.0f) - val rotateY by setting("RotateY", 0.0f, -180.0f..180.0f, 1.0f) - val rotateZ by setting("RotateZ", 0.0f, -180.0f..180.0f, 1.0f) + private val posX by setting("PosX", 0.0f, -5.0f..5.0f, 0.025f) + private val posY by setting("PosY", 0.0f, -5.0f..5.0f, 0.025f) + private val posZ by setting("PosZ", 0.0f, -5.0f..5.0f, 0.025f) + private val rotateX by setting("RotateX", 0.0f, -180.0f..180.0f, 1.0f) + private val rotateY by setting("RotateY", 0.0f, -180.0f..180.0f, 1.0f) + private val rotateZ by setting("RotateZ", 0.0f, -180.0f..180.0f, 1.0f) val scale by setting("Scale", 1.0f, 0.1f..3.0f, 0.025f) - val modifyHand by setting("ModifyHand", false) + private val modifyHand by setting("ModifyHand", false) + + @JvmStatic + fun getTranslation(stack: ItemStack, hand: EnumHand, player: AbstractClientPlayer): Vec3f? { + if (!modifyHand && stack.isEmpty) return null + + val enumHandSide: EnumHandSide = if (hand == EnumHand.MAIN_HAND) player.primaryHand else player.primaryHand.opposite() + val sideMultiplier = if (enumHandSide == EnumHandSide.RIGHT) 1.0f else -1.0f + + return Vec3f(posX * sideMultiplier, posY, posZ) + } + + @JvmStatic + fun getRotation(stack: ItemStack, hand: EnumHand, player: AbstractClientPlayer): Vec3f? { + if (!modifyHand && stack.isEmpty) return null + + val enumHandSide: EnumHandSide = if (hand == EnumHand.MAIN_HAND) player.primaryHand else player.primaryHand.opposite() + val sideMultiplier = if (enumHandSide == EnumHandSide.RIGHT) 1.0f else -1.0f + + return Vec3f(rotateX, rotateY * sideMultiplier, rotateZ * sideMultiplier) + } } \ No newline at end of file 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 index 187c20c82..05c319a8c 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/MapPreview.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/MapPreview.kt @@ -11,6 +11,8 @@ import me.zeroeightsix.kami.util.graphics.VertexHelper import me.zeroeightsix.kami.util.graphics.font.FontRenderAdapter.getFontHeight import me.zeroeightsix.kami.util.graphics.font.FontRenderAdapter.getStringWidth import me.zeroeightsix.kami.util.math.Vec2d +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.RenderHelper import net.minecraft.client.renderer.Tessellator import net.minecraft.client.renderer.vertex.DefaultVertexFormats import net.minecraft.item.ItemMap @@ -29,8 +31,8 @@ object MapPreview : Module( ) { private val mapBackground = ResourceLocation("textures/map/map_background.png") - private val showName = setting("ShowName", false) - private val frame = setting("ShowFrame", false) + private val showName = setting("ShowName", true) + private val frame = setting("ShowFrame", true) val scale = setting("Scale", 5.0, 0.0..10.0, 0.1) @JvmStatic @@ -39,10 +41,26 @@ object MapPreview : Module( } @JvmStatic - fun drawMap(stack: ItemStack, mapData: MapData) { + fun drawMap(stack: ItemStack, mapData: MapData, originalX: Int, originalY: Int) { + val x = originalX + 6.0 + val y = originalY + 6.0 + val scale = scale.value / 5.0 + + GlStateManager.pushMatrix() + GlStateManager.color(1f, 1f, 1f) + RenderHelper.enableGUIStandardItemLighting() + GlStateManager.disableDepth() + + GlStateManager.translate(x, y, 0.0) + GlStateManager.scale(scale, scale, 0.0) + drawMapFrame() mc.entityRenderer.mapItemRenderer.renderMap(mapData, false) drawMapName(stack) + + GlStateManager.enableDepth() + RenderHelper.disableStandardItemLighting() + GlStateManager.popMatrix() } private fun drawMapFrame() { diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.kt index 3fef2197f..0ee850165 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.kt @@ -6,19 +6,24 @@ import me.zeroeightsix.kami.event.events.PacketEvent import me.zeroeightsix.kami.event.events.RenderEntityEvent import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting +import me.zeroeightsix.kami.util.Wrapper.minecraft import me.zeroeightsix.kami.util.threads.safeListener import net.minecraft.block.BlockSnow import net.minecraft.client.entity.EntityOtherPlayerMP +import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.vertex.DefaultVertexFormats import net.minecraft.entity.item.* import net.minecraft.entity.monster.EntityMob import net.minecraft.entity.passive.IAnimals import net.minecraft.init.Blocks import net.minecraft.network.play.server.* import net.minecraft.tileentity.* +import net.minecraft.util.ResourceLocation import net.minecraft.util.math.BlockPos import net.minecraftforge.fml.common.gameevent.TickEvent import net.minecraftforge.registries.GameData import org.kamiblue.event.listener.listener +import org.lwjgl.opengl.GL11 object NoRender : Module( name = "NoRender", @@ -61,6 +66,8 @@ object NoRender : Module( OTHER, ENTITIES } + private val kamiMap = ResourceLocation("kamiblue/kamimap.png") + private val settingMap = mapOf( player to EntityOtherPlayerMP::class.java, xp to EntityXPOrb::class.java, @@ -148,6 +155,20 @@ object NoRender : Module( } } + fun renderFakeMap() { + val tessellator = Tessellator.getInstance() + val bufBuilder = tessellator.buffer + minecraft.textureManager.bindTexture(kamiMap) + + bufBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX) + bufBuilder.pos(0.0, 128.0, -0.009999999776482582).tex(0.0, 1.0).endVertex() + bufBuilder.pos(128.0, 128.0, -0.009999999776482582).tex(1.0, 1.0).endVertex() + bufBuilder.pos(128.0, 0.0, -0.009999999776482582).tex(1.0, 0.0).endVertex() + bufBuilder.pos(0.0, 0.0, -0.009999999776482582).tex(0.0, 0.0).endVertex() + + tessellator.draw() + } + private fun updateList() { entityList = HashSet>().apply { settingMap.forEach { diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/ShulkerPreview.kt b/src/main/java/me/zeroeightsix/kami/module/modules/render/ShulkerPreview.kt index 80027e874..c5e17ed05 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/ShulkerPreview.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/ShulkerPreview.kt @@ -2,6 +2,16 @@ package me.zeroeightsix.kami.module.modules.render import me.zeroeightsix.kami.mixin.client.gui.MixinGuiScreen import me.zeroeightsix.kami.module.Module +import me.zeroeightsix.kami.util.color.ColorConverter +import me.zeroeightsix.kami.util.color.ColorHolder +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.* +import net.minecraft.client.renderer.vertex.DefaultVertexFormats +import net.minecraft.inventory.ItemStackHelper +import net.minecraft.item.ItemShulkerBox +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NBTTagCompound +import net.minecraft.util.NonNullList /** * @see MixinGuiScreen.renderToolTip @@ -10,4 +20,126 @@ object ShulkerPreview : Module( name = "ShulkerPreview", category = Category.RENDER, description = "Previews shulkers in the game GUI" -) +) { + + private val itemRenderer = Minecraft.getMinecraft().renderItem + private val fontRenderer = Minecraft.getMinecraft().fontRenderer + + @JvmStatic + fun renderShulkerAndItems(stack: ItemStack, originalX: Int, originalY: Int, tagCompound: NBTTagCompound) { + + val shulkerInventory = NonNullList.withSize(27, ItemStack.EMPTY) + ItemStackHelper.loadAllItems(tagCompound, shulkerInventory) + + GlStateManager.enableBlend() + GlStateManager.disableRescaleNormal() + RenderHelper.disableStandardItemLighting() + GlStateManager.disableLighting() + GlStateManager.disableDepth() + + renderShulker(stack, originalX, originalY) + + GlStateManager.enableBlend() + GlStateManager.enableAlpha() + GlStateManager.enableTexture2D() + GlStateManager.enableLighting() + GlStateManager.enableDepth() + RenderHelper.enableGUIStandardItemLighting() + + renderShulkerItems(shulkerInventory, originalX, originalY) + + RenderHelper.disableStandardItemLighting() + itemRenderer.zLevel = 0.0f + + GlStateManager.enableLighting() + GlStateManager.enableDepth() + RenderHelper.enableStandardItemLighting() + GlStateManager.enableRescaleNormal() + } + + @JvmStatic + fun getShulkerData(stack: ItemStack): NBTTagCompound? { + val tagCompound = if (stack.item is ItemShulkerBox) stack.tagCompound else return null + + if (tagCompound != null && tagCompound.hasKey("BlockEntityTag", 10)) { + val blockEntityTag = tagCompound.getCompoundTag("BlockEntityTag") + if (blockEntityTag.hasKey("Items", 9)) { + return blockEntityTag + } + } + + return null + } + + private fun renderShulker(stack: ItemStack, originalX: Int, originalY: Int) { + val width = 144.coerceAtLeast(fontRenderer.getStringWidth(stack.displayName) + 3) // 9 * 16 + + val x = originalX + 12 + val y = originalY - 12 + val height = 48 + 9 // 3 * 16 + + itemRenderer.zLevel = 300.0f + // Magic numbers taken from Minecraft code + drawGradientRect(x - 3, y - 4, x + width + 3, y - 3, -267386864, -267386864) + drawGradientRect(x - 3, y + height + 3, x + width + 3, y + height + 4, -267386864, -267386864) + drawGradientRect(x - 3, y - 3, x + width + 3, y + height + 3, -267386864, -267386864) + drawGradientRect(x - 4, y - 3, x - 3, y + height + 3, -267386864, -267386864) + drawGradientRect(x + width + 3, y - 3, x + width + 4, y + height + 3, -267386864, -267386864) + drawGradientRect(x - 3, y - 3 + 1, x - 3 + 1, y + height + 3 - 1, 1347420415, 1344798847) + drawGradientRect(x + width + 2, y - 3 + 1, x + width + 3, y + height + 3 - 1, 1347420415, 1344798847) + drawGradientRect(x - 3, y - 3, x + width + 3, y - 3 + 1, 1347420415, 1347420415) + drawGradientRect(x - 3, y + height + 2, x + width + 3, y + height + 3, 1344798847, 1344798847) + + fontRenderer.drawString(stack.displayName, x, y, 0xffffff) + } + + private fun renderShulkerItems(shulkerInventory: NonNullList, originalX: Int, originalY: Int) { + for (i in 0 until shulkerInventory.size) { + val x = originalX + i % 9 * 16 + 11 + val y = originalY + i / 9 * 16 - 11 + 8 + val itemStack: ItemStack = shulkerInventory[i] + itemRenderer.renderItemAndEffectIntoGUI(itemStack, x, y) + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, itemStack, x, y, null) + } + } + + private fun drawGradientRect(left: Int, top: Int, right: Int, bottom: Int, startColor: Int, endColor: Int) { + GlStateManager.disableTexture2D() + GlStateManager.enableBlend() + GlStateManager.disableAlpha() + GlStateManager.tryBlendFuncSeparate( + GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, + GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ZERO + ) + GlStateManager.shadeModel(7425) + + val tessellator = Tessellator.getInstance() + val bufBuilder = tessellator.buffer + + bufBuilder.begin(7, DefaultVertexFormats.POSITION_COLOR) + bufBuilder.colorVertex(right, top, startColor) + bufBuilder.colorVertex(left, top, startColor) + bufBuilder.colorVertex(left, bottom, endColor) + bufBuilder.colorVertex(right, bottom, endColor) + tessellator.draw() + + GlStateManager.shadeModel(7424) + GlStateManager.disableBlend() + GlStateManager.enableAlpha() + GlStateManager.enableTexture2D() + } + + private fun BufferBuilder.colorVertex(x: Int, y: Int, color: Int) { + this.pos(x.toDouble(), y.toDouble(), 300.0) + .color( + (color shr 16 and 255) / 255f, + (color shr 8 and 255) / 255f, + (color and 255) / 255f, + (color shr 24 and 255) / 255f + ) + .endVertex() + } + +} diff --git a/src/main/java/me/zeroeightsix/kami/util/Wrapper.kt b/src/main/java/me/zeroeightsix/kami/util/Wrapper.kt index 2459e5fdb..478335574 100644 --- a/src/main/java/me/zeroeightsix/kami/util/Wrapper.kt +++ b/src/main/java/me/zeroeightsix/kami/util/Wrapper.kt @@ -1,5 +1,8 @@ package me.zeroeightsix.kami.util +import me.zeroeightsix.kami.KamiMod +import me.zeroeightsix.kami.event.events.ShutdownEvent +import me.zeroeightsix.kami.util.ConfigUtils.saveAll import net.minecraft.client.Minecraft import net.minecraft.client.entity.EntityPlayerSP import net.minecraft.client.multiplayer.WorldClient @@ -16,4 +19,15 @@ object Wrapper { @JvmStatic val world: WorldClient? get() = minecraft.world + + @JvmStatic + fun saveAndShutdown() { + if (!KamiMod.isReady()) return + + ShutdownEvent.post() + + println("Shutting down: saving KAMI configuration") + saveAll() + println("Configuration saved.") + } } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/util/math/Vec3f.kt b/src/main/java/me/zeroeightsix/kami/util/math/Vec3f.kt new file mode 100644 index 000000000..4d6a53ea8 --- /dev/null +++ b/src/main/java/me/zeroeightsix/kami/util/math/Vec3f.kt @@ -0,0 +1,3 @@ +package me.zeroeightsix.kami.util.math + +class Vec3f(val x: Float, val y: Float, val z: Float) \ No newline at end of file