mirror of https://github.com/kami-blue/client
[cleanup] Mixins package (#1824)
This commit is contained in:
parent
3b7b5bf36d
commit
b23e73968d
|
@ -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.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 <E> int drawnChatLinesSize(List<E> 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 <E> int chatLinesSize(List<E> list) {
|
||||
return getModifiedSize(list);
|
||||
return ExtraChatHistory.getModifiedSize(list);
|
||||
}
|
||||
|
||||
public <E> int getModifiedSize(List<E> list) {
|
||||
if (ExtraChatHistory.INSTANCE.isEnabled()) {
|
||||
return list.size() - ExtraChatHistory.INSTANCE.getMaxMessages().getValue() - 100;
|
||||
} else {
|
||||
return list.size();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 <E> List<E> subList(List<E> 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)
|
||||
|
|
|
@ -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<ItemStack> 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.
|
||||
* <p>
|
||||
* 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_);
|
||||
|
|
|
@ -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<Integer> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,8 +51,8 @@ abstract class MixinRender<T extends Entity> {
|
|||
|
||||
@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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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[]{};
|
||||
}
|
||||
|
|
|
@ -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 <E> getModifiedSize(list: List<E>): Int {
|
||||
return if (isEnabled) {
|
||||
list.size - maxMessages.value - 100
|
||||
} else {
|
||||
list.size
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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 <E> subList(list: List<E>, fromIndex: Int, toIndex: Int): List<E> {
|
||||
return list.subList(fromIndex, if (isEnabled) tabSize.value.coerceAtMost(list.size) else toIndex)
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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() {
|
||||
|
|
|
@ -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<Class<*>>().apply {
|
||||
settingMap.forEach {
|
||||
|
|
|
@ -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<ItemStack>, 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()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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.")
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package me.zeroeightsix.kami.util.math
|
||||
|
||||
class Vec3f(val x: Float, val y: Float, val z: Float)
|
Loading…
Reference in New Issue