This commit is contained in:
zeroeightsix 2018-10-14 12:02:59 +02:00
parent abb4d793bf
commit a663ee842e
13 changed files with 106 additions and 84 deletions

View File

@ -45,13 +45,13 @@ public class MixinEntityRenderer {
@Inject(method = "setupFog", at = @At(value = "HEAD"), cancellable = true)
public void setupFog(int startCoords, float partialTicks, CallbackInfo callbackInfo) {
if (AntiFog.enabled() && AntiFog.mode == AntiFog.VisionMode.NOFOG)
if (AntiFog.enabled() && AntiFog.mode.getValue() == AntiFog.VisionMode.NOFOG)
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 (AntiFog.enabled() && AntiFog.mode == AntiFog.VisionMode.AIR) return Blocks.AIR.defaultBlockState;
if (AntiFog.enabled() && AntiFog.mode.getValue() == AntiFog.VisionMode.AIR) return Blocks.AIR.defaultBlockState;
return ActiveRenderInfo.getBlockStateAtEntityViewpoint(worldIn, entityIn, p_186703_2_);
}

View File

@ -188,6 +188,12 @@ public class Module {
}
}
protected void registerAll(Setting... settings) {
for (Setting setting : settings) {
register(setting);
}
}
protected <T> Setting<T> register(Setting<T> setting) {
return SettingBuilder.register(setting, "modules." + name);
}

View File

@ -1,7 +1,8 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* Created by 086 on 9/04/2018.
@ -9,11 +10,12 @@ import me.zeroeightsix.kami.setting.ISetting;
@Module.Info(name = "AntiFog", description = "Disables or reduces fog", category = Module.Category.RENDER)
public class AntiFog extends Module {
@ISetting(name = "Mode") public static VisionMode mode = VisionMode.NOFOG;
public static Setting<VisionMode> mode = Settings.e("Mode", VisionMode.NOFOG);
private static AntiFog INSTANCE = new AntiFog();
public AntiFog() {
INSTANCE = this;
register(mode);
}
public static boolean enabled() {

View File

@ -1,7 +1,8 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.ColourHolder;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
@ -18,7 +19,7 @@ public class ArmorHUD extends Module {
private static RenderItem itemRender = Minecraft.getMinecraft()
.getRenderItem();
@ISetting(name = "Damage") private boolean damage = false;
private Setting<Boolean> damage = register(Settings.b("Damage", false));
@Override
public void onRender() {
@ -27,11 +28,11 @@ public class ArmorHUD extends Module {
ScaledResolution resolution = new ScaledResolution(mc);
int i = resolution.getScaledWidth() / 2;
int iteration = 0;
int y = resolution.getScaledHeight()-55;
for (ItemStack is : mc.player.inventory.armorInventory){
int y = resolution.getScaledHeight() - 55;
for (ItemStack is : mc.player.inventory.armorInventory) {
iteration++;
if (is.isEmpty()) continue;
int x = i - 90 + (9-iteration) * 20 + 2;
int x = i - 90 + (9 - iteration) * 20 + 2;
GlStateManager.enableDepth();
itemRender.zLevel = 200F;
@ -44,13 +45,13 @@ public class ArmorHUD extends Module {
GlStateManager.disableDepth();
String s = is.getCount() > 1 ? is.getCount() + "" : "";
mc.fontRenderer.drawStringWithShadow(s, x + 19 - 2 - mc.fontRenderer.getStringWidth(s), y+9, 0xffffff);
mc.fontRenderer.drawStringWithShadow(s, x + 19 - 2 - mc.fontRenderer.getStringWidth(s), y + 9, 0xffffff);
if (damage){
if (damage.getValue()) {
float green = ((float) is.getMaxDamage() - (float) is.getItemDamage()) / (float) is.getMaxDamage();
float red = 1-green;
int dmg = 100 - (int) (red*100);
mc.fontRenderer.drawStringWithShadow(dmg + "", x+8 - mc.fontRenderer.getStringWidth(dmg + "")/2, y-11, ColourHolder.toHex((int) (red*255), (int) (green*255), 0));
float red = 1 - green;
int dmg = 100 - (int) (red * 100);
mc.fontRenderer.drawStringWithShadow(dmg + "", x + 8 - mc.fontRenderer.getStringWidth(dmg + "") / 2, y - 11, ColourHolder.toHex((int) (red * 255), (int) (green * 255), 0));
}
}

View File

@ -1,7 +1,8 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.EntityUtil;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
@ -12,12 +13,16 @@ import net.minecraft.entity.player.EntityPlayer;
@Module.Info(name = "Chams", category = Module.Category.RENDER, description = "See entities through walls")
public class Chams extends Module {
@ISetting(name = "Players") private static boolean players = true;
@ISetting(name = "Animals") private static boolean animals = false;
@ISetting(name = "Mobs") private static boolean mobs = false;
private static Setting<Boolean> players = Settings.b("Players", true);
private static Setting<Boolean> animals = Settings.b("Animals", false);
private static Setting<Boolean> mobs = Settings.b("Mobs", false);
public Chams() {
registerAll(players, animals, mobs);
}
public static boolean renderChams(Entity entity) {
return (entity instanceof EntityPlayer ? players : (EntityUtil.isPassive(entity) ? animals : mobs));
return (entity instanceof EntityPlayer ? players.getValue() : (EntityUtil.isPassive(entity) ? animals.getValue() : mobs.getValue()));
}
}

View File

@ -5,7 +5,8 @@ import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.ChunkEvent;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.world.chunk.Chunk;
import org.lwjgl.opengl.GL11;
@ -19,8 +20,8 @@ import static org.lwjgl.opengl.GL11.*;
@Module.Info(name = "ChunkFinder", description = "Highlights newly generated chunks", category = Module.Category.RENDER)
public class ChunkFinder extends Module {
@ISetting(name = "Y Offset", integer = true) private int yOffset = 0;
@ISetting(name = "Relative") private boolean relative = true;
private Setting<Integer> yOffset = register(Settings.i("Y Offset", 0));
private Setting<Boolean> relative = register(Settings.b("Relative", true));
static ArrayList<Chunk> chunks = new ArrayList<>();
@ -68,11 +69,11 @@ public class ChunkFinder extends Module {
}
double x = mc.getRenderManager().renderPosX;
double y = relative ? 0 : -mc.getRenderManager().renderPosY;
double y = relative.getValue() ? 0 : -mc.getRenderManager().renderPosY;
double z = mc.getRenderManager().renderPosZ;
GL11.glTranslated(-x, y+yOffset, -z);
GL11.glTranslated(-x, y + yOffset.getValue(), -z);
GL11.glCallList(list);
GL11.glTranslated(x, -(y+yOffset), z);
GL11.glTranslated(x, -(y + yOffset.getValue()), z);
}
@EventHandler

View File

@ -2,7 +2,8 @@ package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.EntityUtil;
import me.zeroeightsix.kami.util.Wrapper;
import net.minecraft.client.renderer.GlStateManager;
@ -19,11 +20,10 @@ import static org.lwjgl.opengl.GL11.*;
@Module.Info(name = "ESP", category = Module.Category.RENDER)
public class ESP extends Module {
@ISetting(name = "Mode")
private ESPMode mode = ESPMode.RECTANGLE;
@ISetting(name = "Players") private boolean players = true;
@ISetting(name = "Animals") private boolean animals = false;
@ISetting(name = "Mobs") private boolean mobs = false;
private Setting<ESPMode> mode = register(Settings.e("Mode", ESPMode.RECTANGLE));
private Setting<Boolean> players = register(Settings.b("Players", true));
private Setting<Boolean> animals = register(Settings.b("Animals", false));
private Setting<Boolean> mobs = register(Settings.b("Mobs", false));
public enum ESPMode {
RECTANGLE
@ -32,7 +32,7 @@ public class ESP extends Module {
@Override
public void onWorldRender(RenderEvent event) {
if (Wrapper.getMinecraft().getRenderManager().options == null) return;
switch (mode) {
switch (mode.getValue()) {
case RECTANGLE:
boolean isThirdPersonFrontal = Wrapper.getMinecraft().getRenderManager().options.thirdPersonView == 2;
float viewerYaw = Wrapper.getMinecraft().getRenderManager().playerViewY;
@ -42,7 +42,7 @@ public class ESP extends Module {
.filter(entity -> mc.player != entity)
.map(entity -> (EntityLivingBase) entity)
.filter(entityLivingBase -> !entityLivingBase.isDead)
.filter(entity -> (players && entity instanceof EntityPlayer) || (EntityUtil.isPassive(entity) ? animals : mobs))
.filter(entity -> (players.getValue() && entity instanceof EntityPlayer) || (EntityUtil.isPassive(entity) ? animals.getValue() : mobs.getValue()))
.forEach(e -> {
GlStateManager.pushMatrix();
Vec3d pos = EntityUtil.getInterpolatedPos(e, event.getPartialTicks());

View File

@ -2,7 +2,8 @@ package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.Friends;
import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.scoreboard.ScorePlayerTeam;
@ -13,7 +14,7 @@ import net.minecraft.scoreboard.ScorePlayerTeam;
@Module.Info(name = "ExtraTab", description = "Expands the player tab menu", category = Module.Category.RENDER)
public class ExtraTab extends Module {
@ISetting(name = "Players", min = 1, integer = true) public int tabSize = 80;
private Setting<Integer> tabSize = register(Settings.integerBuilder("Players").withMinimum(1).withValue(80).build());
public static ExtraTab INSTANCE;

View File

@ -2,7 +2,8 @@ package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.EntityUtil;
import me.zeroeightsix.kami.util.GeometryMasks;
import me.zeroeightsix.kami.util.KamiTessellator;
@ -21,9 +22,9 @@ import org.lwjgl.opengl.GL11;
@Module.Info(name = "EyeFinder", description = "Draw lines from entity's heads to where they are looking", category = Module.Category.RENDER)
public class EyeFinder extends Module {
@ISetting(name = "Players") private boolean players = true;
@ISetting(name = "Mobs") private boolean mobs = false;
@ISetting(name = "Animals") private boolean animals = false;
private Setting<Boolean> players = register(Settings.b("Players", true));
private Setting<Boolean> mobs = register(Settings.b("Mobs", false));
private Setting<Boolean> animals = register(Settings.b("Animals", false));
@Override
public void onWorldRender(RenderEvent event) {
@ -32,7 +33,7 @@ public class EyeFinder extends Module {
.filter(entity -> mc.player != entity)
.map(entity -> (EntityLivingBase) entity)
.filter(entityLivingBase -> !entityLivingBase.isDead)
.filter(entity -> (players && entity instanceof EntityPlayer) || (EntityUtil.isPassive(entity) ? animals : mobs))
.filter(entity -> (players.getValue() && entity instanceof EntityPlayer) || (EntityUtil.isPassive(entity) ? animals.getValue() : mobs.getValue()))
.forEach(this::drawLine);
}

View File

@ -3,7 +3,8 @@ package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.EntityUtil;
import me.zeroeightsix.kami.util.Friends;
import net.minecraft.client.Minecraft;
@ -32,11 +33,11 @@ import static org.lwjgl.opengl.GL11.*;
@Module.Info(name = "Nametags", description = "Draws descriptive nametags above entities", category = Module.Category.RENDER)
public class Nametags extends Module {
@ISetting(name = "Players") private boolean players = true;
@ISetting(name = "Animals") private boolean animals = false;
@ISetting(name = "Mobs") private boolean mobs = false;
@ISetting(name = "Range") private double range = 200;
@ISetting(name = "Health") private boolean health = true;
private Setting<Boolean> players = register(Settings.b("Players", true));
private Setting<Boolean> animals = register(Settings.b("Animals", false));
private Setting<Boolean> mobs = register(Settings.b("Mobs", false));
private Setting<Double> range = register(Settings.d("Range", 200));
private Setting<Boolean> health = register(Settings.b("Health", true));
RenderItem itemRenderer = mc.getRenderItem();
@ -50,8 +51,8 @@ public class Nametags extends Module {
Minecraft.getMinecraft().world.loadedEntityList.stream()
.filter(EntityUtil::isLiving)
.filter(entity -> !EntityUtil.isFakeLocalPlayer(entity))
.filter(entity -> (entity instanceof EntityPlayer ? players && mc.player!=entity : (EntityUtil.isPassive(entity) ? animals : mobs)))
.filter(entity -> mc.player.getDistance(entity)<range)
.filter(entity -> (entity instanceof EntityPlayer ? players.getValue() && mc.player != entity : (EntityUtil.isPassive(entity) ? animals.getValue() : mobs.getValue())))
.filter(entity -> mc.player.getDistance(entity) < range.getValue())
.sorted(Comparator.comparing(entity -> -mc.player.getDistance(entity)))
.forEach(this::drawNametag);
GlStateManager.disableTexture2D();
@ -66,24 +67,24 @@ public class Nametags extends Module {
Vec3d interp = EntityUtil.getInterpolatedRenderPos(entityIn, mc.getRenderPartialTicks());
float yAdd = entityIn.height + 0.5F - (entityIn.isSneaking() ? 0.25F : 0.0F);
double x = interp.x;
double y = interp.y+yAdd;
double y = interp.y + yAdd;
double z = interp.z;
float viewerYaw = mc.getRenderManager().playerViewY;
float viewerPitch = mc.getRenderManager().playerViewX;
boolean isThirdPersonFrontal = mc.getRenderManager().options.thirdPersonView == 2;
GlStateManager.translate(x,y,z);
GlStateManager.translate(x, y, z);
GlStateManager.rotate(-viewerYaw, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate((float)(isThirdPersonFrontal ? -1 : 1) * viewerPitch, 1.0F, 0.0F, 0.0F);
GlStateManager.rotate((float) (isThirdPersonFrontal ? -1 : 1) * viewerPitch, 1.0F, 0.0F, 0.0F);
float f = mc.player.getDistance(entityIn);
float m = f/8f;
GlStateManager.scale(m,m,m);
float m = f / 8f;
GlStateManager.scale(m, m, m);
FontRenderer fontRendererIn = mc.fontRenderer;
GlStateManager.scale(-0.025F, -0.025F, 0.025F);
String str = entityIn.getName() + (health ? " " + Command.SECTIONSIGN() + "c" + Math.round(((EntityLivingBase) entityIn).getHealth()+(entityIn instanceof EntityPlayer ? ((EntityPlayer) entityIn).getAbsorptionAmount() : 0)) : "");
String str = entityIn.getName() + (health.getValue() ? " " + Command.SECTIONSIGN() + "c" + Math.round(((EntityLivingBase) entityIn).getHealth() + (entityIn instanceof EntityPlayer ? ((EntityPlayer) entityIn).getAbsorptionAmount() : 0)) : "");
int i = fontRendererIn.getStringWidth(str) / 2;
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
@ -92,7 +93,7 @@ public class Nametags extends Module {
BufferBuilder bufferbuilder = tessellator.getBuffer();
glTranslatef(0,-20,0);
glTranslatef(0, -20, 0);
bufferbuilder.begin(GL_QUADS, DefaultVertexFormats.POSITION_COLOR);
bufferbuilder.pos(-i - 1, 8, 0.0D).color(0.0F, 0.0F, 0.0F, 0.5F).endVertex();
bufferbuilder.pos(-i - 1, 19, 0.0D).color(0.0F, 0.0F, 0.0F, 0.5F).endVertex();
@ -110,38 +111,41 @@ public class Nametags extends Module {
GlStateManager.enableTexture2D();
GlStateManager.glNormal3f(0.0F, 1.0F, 0.0F);
fontRendererIn.drawString(str, -i,10, entityIn instanceof EntityPlayer ? Friends.isFriend(entityIn.getName()) ? 0x11ee11 : 0xffffff : 0xffffff);
fontRendererIn.drawString(str, -i, 10, entityIn instanceof EntityPlayer ? Friends.isFriend(entityIn.getName()) ? 0x11ee11 : 0xffffff : 0xffffff);
GlStateManager.glNormal3f(0.0F, 0.0F, 0.0F);
glTranslatef(0,20,0);
glTranslatef(0, 20, 0);
GlStateManager.scale(-40, -40, 40);
ArrayList<ItemStack> equipment = new ArrayList<>();
entityIn.getHeldEquipment().forEach(itemStack -> {
if (itemStack!=null) equipment.add(itemStack);
if (itemStack != null) equipment.add(itemStack);
});
ArrayList<ItemStack> armour = new ArrayList<>();
entityIn.getArmorInventoryList().forEach(itemStack -> {
if (itemStack!=null) armour.add(itemStack);
if (itemStack != null) armour.add(itemStack);
});
Collections.reverse(armour);
equipment.addAll(armour);
if (equipment.size() == 0) { GlStateManager.popMatrix(); return; }
if (equipment.size() == 0) {
GlStateManager.popMatrix();
return;
}
Collection<ItemStack> a = equipment.stream().filter(itemStack -> !itemStack.isEmpty()).collect(Collectors.toList());
GlStateManager.translate(((a.size()-1)/2f)*.5f,.6,0);
GlStateManager.translate(((a.size() - 1) / 2f) * .5f, .6, 0);
a.forEach(itemStack -> {
GlStateManager.pushAttrib();
RenderHelper.enableStandardItemLighting();
GlStateManager.scale(.5,.5,0);
GlStateManager.scale(.5, .5, 0);
GlStateManager.disableLighting();
this.itemRenderer.zLevel = -5;
this.itemRenderer.renderItem(itemStack, itemStack.getItem()== Items.SHIELD ? ItemCameraTransforms.TransformType.FIXED : ItemCameraTransforms.TransformType.NONE);
this.itemRenderer.renderItem(itemStack, itemStack.getItem() == Items.SHIELD ? ItemCameraTransforms.TransformType.FIXED : ItemCameraTransforms.TransformType.NONE);
this.itemRenderer.zLevel = 0;
GlStateManager.scale(2,2,0);
GlStateManager.scale(2, 2, 0);
GlStateManager.popAttrib();
GlStateManager.translate(-.5f,0,0);
GlStateManager.translate(-.5f, 0, 0);
});
GlStateManager.popMatrix();

View File

@ -5,7 +5,8 @@ import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.ChunkEvent;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.block.BlockPortal;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.chunk.Chunk;
@ -19,15 +20,14 @@ import java.util.ArrayList;
@Module.Info(name = "PortalTracers", category = Module.Category.RENDER)
public class PortalTracers extends Module {
@ISetting(name = "Range") private int range = 5000;
private Setting<Integer> range = register(Settings.i("Range", 5000));
private ArrayList<BlockPos> portals = new ArrayList<>();
@EventHandler
private Listener<ChunkEvent> loadListener = new Listener<>(event -> {
Chunk chunk = event.getChunk();
// Remove already registered portals from this chunk, allowing removed portals to vanish from tracers and no duplicates to be made
portals.removeIf(blockPos -> blockPos.getX()/16 == chunk.x && blockPos.getZ()/16 == chunk.z);
portals.removeIf(blockPos -> blockPos.getX() / 16 == chunk.x && blockPos.getZ() / 16 == chunk.z);
for (ExtendedBlockStorage storage : chunk.getBlockStorageArray()) {
if (storage != null) {
@ -39,7 +39,7 @@ public class PortalTracers extends Module {
int py = storage.yBase + y;
int pz = chunk.z * 16 + z;
portals.add(new BlockPos(px, py, pz));
y+=6;
y += 6;
}
}
}
@ -51,7 +51,7 @@ public class PortalTracers extends Module {
@Override
public void onWorldRender(RenderEvent event) {
portals.stream().filter(blockPos -> mc.player.getDistance(blockPos.x,blockPos.y,blockPos.z)<=range)
.forEach(blockPos -> Tracers.drawLine(blockPos.x-mc.getRenderManager().renderPosX, blockPos.y-mc.getRenderManager().renderPosY, blockPos.z-mc.getRenderManager().renderPosZ, 0,0.6f, 0.3f, 0.8f,1));
portals.stream().filter(blockPos -> mc.player.getDistance(blockPos.x, blockPos.y, blockPos.z) <= range.getValue())
.forEach(blockPos -> Tracers.drawLine(blockPos.x - mc.getRenderManager().renderPosX, blockPos.y - mc.getRenderManager().renderPosY, blockPos.z - mc.getRenderManager().renderPosZ, 0, 0.6f, 0.3f, 0.8f, 1));
}
}

View File

@ -4,8 +4,8 @@ import me.zeroeightsix.kami.module.Module;
/**
* Created by 086 on 24/12/2017.
* @see me.zeroeightsix.kami.mixin.client.MixinGuiScreen
*/
@Module.Info(name = "ShulkerPreview", category = Module.Category.RENDER)
public class ShulkerPreview extends Module {
// this just has to exist. see MixinGuiScreen
}

View File

@ -2,7 +2,8 @@ package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.ColourUtils;
import me.zeroeightsix.kami.util.EntityUtil;
import me.zeroeightsix.kami.util.Friends;
@ -20,12 +21,12 @@ import org.lwjgl.opengl.GL11;
@Module.Info(name = "Tracers", description = "Draws lines to other living entities", category = Module.Category.RENDER)
public class Tracers extends Module {
@ISetting(name = "Players") private boolean players = true;
@ISetting(name = "Friends") private boolean friends = true;
@ISetting(name = "Animals") private boolean animals = false;
@ISetting(name = "Mobs") private boolean mobs = false;
@ISetting(name = "Range") private double range = 200;
@ISetting(name = "Opacity", min = 0, max = 1) private float opacity = 1f;
private Setting<Boolean> players = register(Settings.b("Players", true));
private Setting<Boolean> friends = register(Settings.b("Friends", true));
private Setting<Boolean> animals = register(Settings.b("Animals", false));
private Setting<Boolean> mobs = register(Settings.b("Mobs", false));
private Setting<Double> range = register(Settings.d("Range", 200));
private Setting<Float> opacity = register(Settings.floatBuilder("Opacity").withRange(0f, 1f).withValue(1f));
HueCycler cycler = new HueCycler(3600);
@ -35,18 +36,18 @@ public class Tracers extends Module {
Minecraft.getMinecraft().world.loadedEntityList.stream()
.filter(EntityUtil::isLiving)
.filter(entity -> !EntityUtil.isFakeLocalPlayer(entity))
.filter(entity -> (entity instanceof EntityPlayer ? players && mc.player!=entity : (EntityUtil.isPassive(entity) ? animals : mobs)))
.filter(entity -> mc.player.getDistance(entity)<range)
.filter(entity -> (entity instanceof EntityPlayer ? players.getValue() && mc.player!=entity : (EntityUtil.isPassive(entity) ? animals.getValue() : mobs.getValue())))
.filter(entity -> mc.player.getDistance(entity)<range.getValue())
.forEach(entity -> {
int colour = getColour(entity);
if (colour == ColourUtils.Colors.RAINBOW) {
if (!friends) return;
if (!friends.getValue()) return;
colour = cycler.current();
}
final float r = ((colour >>> 16) & 0xFF)/255f;
final float g = ((colour >>> 8) & 0xFF)/255f;
final float b = (colour & 0xFF)/255f;
drawLineToEntity(entity, r, g, b, opacity);
drawLineToEntity(entity, r, g, b, opacity.getValue());
});
GlStateManager.popMatrix();
}