Compare commits

...

7 Commits

Author SHA1 Message Date
Bella 867e93cb34
added step vanilla mode 2020-04-23 12:23:34 -04:00
Bella d7064f13ac
fix missing rename in AntiFog 2020-04-22 18:17:21 -04:00
Bella 9f477d941b
revert commandconfig to java 2020-04-22 18:15:43 -04:00
Bella be8790b412
revert player modules to java 2020-04-22 18:15:25 -04:00
Bella cd201acd65
revert render modules to java 2020-04-22 18:15:03 -04:00
Bella df1cfcfc10
add forgelin to gradle 2020-04-22 18:02:31 -04:00
Bella 8f8d02f063
revert intellij added kotlin from gradle 2020-04-22 18:02:25 -04:00
67 changed files with 1908 additions and 1717 deletions

View File

@ -1,7 +1,6 @@
// forge's stuff
buildscript {
ext.kotlin_version = '1.3.72'
repositories {
jcenter()
maven {
@ -17,12 +16,10 @@ buildscript {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'kotlin'
apply plugin: 'org.spongepowered.mixin'
apply plugin: 'com.github.johnrengelman.shadow'
@ -59,6 +56,10 @@ repositories {
name = "jitpack.io"
url = "https://jitpack.io"
}
maven {
name = "forgelin-repo"
url "http://maven.shadowfacts.net/"
}
mavenCentral()
jcenter()
}
@ -80,7 +81,7 @@ dependencies {
compile 'club.minnced:java-discord-rpc:2.0.2'
compile 'com.github.MrPowerGamerBR:TemmieWebhook:-SNAPSHOT'
compile 'com.github.kevinsawicki:http-request:http-request-6.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compile group: "net.shadowfacts", name: "Forgelin", version: "1.8.4"
}
processResources {
@ -116,7 +117,6 @@ shadowJar {
include(dependency('org.javassist:javassist'))
include(dependency('com.github.MrPowerGamerBR:TemmieWebhook'))
include(dependency('com.github.kevinsawicki:http-request'))
include(dependency('org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version'))
}
exclude 'dummyThing' // can someone explain why this is here
classifier = 'release'
@ -149,13 +149,3 @@ jar {
}
build.dependsOn(shadowJar)
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}

View File

@ -122,7 +122,7 @@ public class KamiMod {
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent event) {
setCustomIcons();
if (MODULE_MANAGER.getModuleT(CommandConfig.class).customTitle.getValue()) {
if (MODULE_MANAGER.getModuleT(CommandConfig.class).windowTitle.getValue()) {
Display.setTitle(MODNAME + " " + KAMI_KANJI + " " + MODVERSMALL);
}
}

View File

@ -0,0 +1,29 @@
package me.zeroeightsix.kami.module.modules.client;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import static me.zeroeightsix.kami.KamiMod.MODULE_MANAGER;
import static me.zeroeightsix.kami.util.MessageSendHelper.sendErrorMessage;
/**
* @author dominikaaaa
*/
@Module.Info(
name = "CommandConfig",
category = Module.Category.CLIENT,
description = "Configures PrefixChat and Alias options",
showOnArray = Module.ShowOnArray.OFF
)
public class CommandConfig extends Module {
public Setting<Boolean> aliasInfo = register(Settings.b("Alias Info", true));
public Setting<Boolean> prefixChat = register(Settings.b("PrefixChat", true));
public Setting<Boolean> windowTitle = register(Settings.b("Window Title", true));
public void onDisable() { sendDisableMessage(this.getClass()); }
private void sendDisableMessage(Class clazz) {
sendErrorMessage("Error: The " + MODULE_MANAGER.getModule(clazz).getName() + " module is only for configuring command options, disabling it doesn't do anything.");
MODULE_MANAGER.getModule(clazz).enable();
}
}

View File

@ -1,34 +0,0 @@
package me.zeroeightsix.kami.module.modules.client
import me.zeroeightsix.kami.KamiMod
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
import me.zeroeightsix.kami.util.MessageSendHelper
/**
* @author dominikaaaa
*/
@Module.Info(
name = "CommandConfig",
category = Module.Category.CLIENT,
description = "Configures PrefixChat and Alias options",
showOnArray = Module.ShowOnArray.OFF
)
class CommandConfig : Module() {
@JvmField
var aliasInfo: Setting<Boolean> = register(Settings.b("Alias Info", true))
@JvmField
var prefixChat: Setting<Boolean> = register(Settings.b("PrefixChat", true))
@JvmField
var customTitle: Setting<Boolean> = register(Settings.b("Window Title", true))
public override fun onDisable() {
sendDisableMessage()
}
private fun sendDisableMessage() {
MessageSendHelper.sendErrorMessage("Error: The " + KamiMod.MODULE_MANAGER.getModule(this.javaClass).name + " module is only for configuring command options, disabling it doesn't do anything.")
KamiMod.MODULE_MANAGER.getModule(this.javaClass).enable()
}
}

View File

@ -1,6 +1,6 @@
package me.zeroeightsix.kami.module.modules.client
package me.zeroeightsix.kami.module.modules.client;
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.module.Module;
/**
* @author dominikaaaa
@ -12,4 +12,5 @@ import me.zeroeightsix.kami.module.Module
category = Module.Category.CLIENT,
showOnArray = Module.ShowOnArray.OFF
)
class Tooltips : Module()
public class Tooltips extends Module {
}

View File

@ -0,0 +1,37 @@
package me.zeroeightsix.kami.module.modules.movement;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* @author dominikaaaa (Mode.VANILLA)
* @author fr1kin (Mode.PACKET)
*
* See Forgehax for Mode.PACKET
* TODO: implement packet mode
* https://github.com/fr1kin/ForgeHax/blob/2011740/src/main/java/com/matt/forgehax/mods/StepMod.java
*/
@Module.Info(
name = "Step",
description = "Changes the vanilla behavior for stepping up blocks",
category = Module.Category.MOVEMENT
)
public class Step extends Module {
private Setting<Mode> mode = register(Settings.e("Mode", Mode.VANILLA));
private Setting<Integer> height = register(Settings.integerBuilder("Height").withMinimum(1).withMaximum(100).withValue(40).withVisibility(v -> mode.getValue().equals(Mode.VANILLA)).build());
private enum Mode { VANILLA, PACKET }
public void onUpdate() {
if (mode.getValue().equals(Mode.VANILLA)) {
if (mc.player.collidedHorizontally
&& mc.player.onGround
&& !mc.player.isOnLadder()
&& !mc.player.isInWater()
&& !mc.player.isInLava()) {
mc.player.motionY = height.getValue() / 100D;
}
}
}
}

View File

@ -0,0 +1,80 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
import net.minecraft.util.FoodStats;
/**
* Created by 086 on 8/04/2018.
* Updated by polymer on 09/03/20
* Updated by dominikaaaa on 20/03/20
* Updated by An-En on 24/03/20
*/
@Module.Info(
name = "AutoEat",
description = "Automatically eat when hungry",
category = Module.Category.PLAYER
)
public class AutoEat extends Module {
private Setting<Integer> foodLevel = register(Settings.integerBuilder("Below Hunger").withValue(15).withMinimum(1).withMaximum(20).build());
private Setting<Integer> healthLevel = register(Settings.integerBuilder("Below Health").withValue(8).withMinimum(1).withMaximum(20).build());
private int lastSlot = -1;
private boolean eating = false;
private boolean isValid(ItemStack stack, int food) {
return (
(passItemCheck(stack.getItem()) && stack.getItem() instanceof ItemFood && (foodLevel.getValue() - food) >= ((ItemFood) stack.getItem()).getHealAmount(stack)) ||
(passItemCheck(stack.getItem()) && stack.getItem() instanceof ItemFood && (healthLevel.getValue() - (mc.player.getHealth() + mc.player.getAbsorptionAmount()) > 0f))
);
}
private boolean passItemCheck(Item item) {
if (item == Items.ROTTEN_FLESH) return false;
if (item == Items.SPIDER_EYE) return false;
if (item == Items.POISONOUS_POTATO) return false;
if (item == Items.FISH && new ItemStack(Items.FISH).getItemDamage() == 3) return false;
return true;
}
@Override
public void onUpdate() {
if (mc.player == null) return;
if (eating && !mc.player.isHandActive()) {
if (lastSlot != -1) {
mc.player.inventory.currentItem = lastSlot;
lastSlot = -1;
}
eating = false;
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.getKeyCode(), false);
return;
}
if (eating) return;
FoodStats stats = mc.player.getFoodStats();
if (isValid(mc.player.getHeldItemOffhand(), stats.getFoodLevel())) {
mc.player.setActiveHand(EnumHand.OFF_HAND);
eating = true;
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.getKeyCode(), true);
mc.playerController.processRightClick(mc.player, mc.world, EnumHand.OFF_HAND);
} else {
for (int i = 0; i < 9; i++) {
if (isValid(mc.player.inventory.getStackInSlot(i), stats.getFoodLevel())) {
lastSlot = mc.player.inventory.currentItem;
mc.player.inventory.currentItem = i;
eating = true;
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.getKeyCode(), true);
mc.playerController.processRightClick(mc.player, mc.world, EnumHand.MAIN_HAND);
return;
}
}
}
}
}

View File

@ -1,71 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.client.settings.KeyBinding
import net.minecraft.init.Items
import net.minecraft.item.Item
import net.minecraft.item.ItemFood
import net.minecraft.item.ItemStack
import net.minecraft.util.EnumHand
/**
* Created by 086 on 8/04/2018.
* Updated by polymer on 09/03/20
* Updated by dominikaaaa on 20/03/20
* Updated by An-En on 24/03/20
*/
@Module.Info(
name = "AutoEat",
description = "Automatically eat when hungry",
category = Module.Category.PLAYER
)
class AutoEat : Module() {
private val foodLevel = register(Settings.integerBuilder("Below Hunger").withValue(15).withMinimum(1).withMaximum(20).build())
private val healthLevel = register(Settings.integerBuilder("Below Health").withValue(8).withMinimum(1).withMaximum(20).build())
private var lastSlot = -1
private var eating = false
private fun isValid(stack: ItemStack, food: Int): Boolean {
return passItemCheck(stack.getItem()) && stack.getItem() is ItemFood && foodLevel.value - food >= (stack.getItem() as ItemFood).getHealAmount(stack) ||
passItemCheck(stack.getItem()) && stack.getItem() is ItemFood && healthLevel.value - (mc.player.health + mc.player.absorptionAmount) > 0f
}
private fun passItemCheck(item: Item): Boolean {
if (item === Items.ROTTEN_FLESH) return false
if (item === Items.SPIDER_EYE) return false
if (item === Items.POISONOUS_POTATO) return false
return !(item === Items.FISH && ItemStack(Items.FISH).getItemDamage() == 3)
}
override fun onUpdate() {
if (mc.player == null) return
if (eating && !mc.player.isHandActive) {
if (lastSlot != -1) {
mc.player.inventory.currentItem = lastSlot
lastSlot = -1
}
eating = false
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.keyCode, false)
return
}
if (eating) return
val stats = mc.player.getFoodStats()
if (isValid(mc.player.heldItemOffhand, stats.foodLevel)) {
mc.player.activeHand = EnumHand.OFF_HAND
eating = true
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.keyCode, true)
mc.playerController.processRightClick(mc.player, mc.world, EnumHand.OFF_HAND)
} else {
for (i in 0..8) {
if (isValid(mc.player.inventory.getStackInSlot(i), stats.foodLevel)) {
lastSlot = mc.player.inventory.currentItem
mc.player.inventory.currentItem = i
eating = true
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.keyCode, true)
mc.playerController.processRightClick(mc.player, mc.world, EnumHand.MAIN_HAND)
return
}
}
}
}
}

View File

@ -0,0 +1,62 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import net.minecraft.client.entity.EntityOtherPlayerMP;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.play.client.CPacketPlayer;
import java.util.LinkedList;
import java.util.Queue;
/**
* Created by 086 on 24/01/2018.
* Edited by Cuhnt on 30/7/2019
*/
@Module.Info(
name = "Blink",
category = Module.Category.PLAYER,
description = "Cancels server side packets"
)
public class Blink extends Module {
Queue<CPacketPlayer> packets = new LinkedList<>();
@EventHandler
public Listener<PacketEvent.Send> listener = new Listener<>(event -> {
if (isEnabled() && event.getPacket() instanceof CPacketPlayer) {
event.cancel();
packets.add((CPacketPlayer) event.getPacket());
}
});
private EntityOtherPlayerMP clonedPlayer;
@Override
protected void onEnable() {
if (mc.player != null) {
clonedPlayer = new EntityOtherPlayerMP(mc.world, mc.getSession().getProfile());
clonedPlayer.copyLocationAndAnglesFrom(mc.player);
clonedPlayer.rotationYawHead = mc.player.rotationYawHead;
mc.world.addEntityToWorld(-100, clonedPlayer);
}
}
@Override
protected void onDisable() {
while (!packets.isEmpty())
mc.player.connection.sendPacket(packets.poll());
EntityPlayer localPlayer = mc.player;
if (localPlayer != null) {
mc.world.removeEntityFromWorld(-100);
clonedPlayer = null;
}
}
@Override
public String getHudInfo() {
return String.valueOf(packets.size());
}
}

View File

@ -1,54 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent
import me.zeroeightsix.kami.module.Module
import net.minecraft.client.entity.EntityOtherPlayerMP
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.network.play.client.CPacketPlayer
import java.util.*
/**
* Created by 086 on 24/01/2018.
* Edited by Cuhnt on 30/7/2019
*/
@Module.Info(
name = "Blink",
category = Module.Category.PLAYER,
description = "Cancels server side packets"
)
class Blink : Module() {
private var packets: Queue<CPacketPlayer> = LinkedList()
@EventHandler
var listener = Listener(EventHook { event: PacketEvent.Send ->
if (isEnabled && event.packet is CPacketPlayer) {
event.cancel()
packets.add(event.packet as CPacketPlayer)
}
})
private var clonedPlayer: EntityOtherPlayerMP? = null
override fun onEnable() {
if (mc.player != null) {
clonedPlayer = EntityOtherPlayerMP(mc.world, mc.getSession().profile)
clonedPlayer!!.copyLocationAndAnglesFrom(mc.player)
clonedPlayer!!.rotationYawHead = mc.player.rotationYawHead
mc.world.addEntityToWorld(-100, clonedPlayer)
}
}
override fun onDisable() {
while (!packets.isEmpty()) mc.player.connection.sendPacket(packets.poll())
val localPlayer: EntityPlayer? = mc.player
if (localPlayer != null) {
mc.world.removeEntityFromWorld(-100)
clonedPlayer = null
}
}
override fun getHudInfo(): String {
return packets.size.toString()
}
}

View File

@ -0,0 +1,48 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.Wrapper;
import net.minecraft.network.play.server.SPacketDisconnect;
import net.minecraft.network.play.server.SPacketRespawn;
import net.minecraft.util.text.TextComponentString;
import java.util.Objects;
import static me.zeroeightsix.kami.util.MessageSendHelper.sendWarningMessage;
/**
* Created by 0x2E | PretendingToCode
*/
@Module.Info(
name = "EndTeleport",
category = Module.Category.PLAYER,
description = "Allows for teleportation when going through end portals"
)
public class EndTeleport extends Module {
private Setting<Boolean> confirmed = register(Settings.b("Confirm", true));
@Override
public void onEnable() {
if (Wrapper.getMinecraft().getCurrentServerData() == null) {
sendWarningMessage(getChatName() + "This module does not work in singleplayer");
disable();
} else if (!confirmed.getValue()) {
sendWarningMessage(getChatName() + "This module will kick you from the server! It is part of the exploit and cannot be avoided");
}
}
@EventHandler
public Listener<PacketEvent.Receive> receiveListener = new Listener<>(event -> {
if (event.getPacket() instanceof SPacketRespawn) {
if (((SPacketRespawn) event.getPacket()).getDimensionID() == 1 && confirmed.getValue()) {
Objects.requireNonNull(Wrapper.getMinecraft().getConnection()).handleDisconnect(new SPacketDisconnect(new TextComponentString("Attempting teleportation exploit")));
disable();
}
}
});
}

View File

@ -1,44 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent.Receive
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import me.zeroeightsix.kami.util.MessageSendHelper
import me.zeroeightsix.kami.util.Wrapper
import net.minecraft.network.play.server.SPacketDisconnect
import net.minecraft.network.play.server.SPacketRespawn
import net.minecraft.util.text.TextComponentString
import java.util.*
/**
* Created by 0x2E | PretendingToCode
*/
@Module.Info(
name = "EndTeleport",
category = Module.Category.PLAYER,
description = "Allows for teleportation when going through end portals"
)
class EndTeleport : Module() {
private val confirmed = register(Settings.b("Confirm", true))
public override fun onEnable() {
if (Wrapper.getMinecraft().getCurrentServerData() == null) {
MessageSendHelper.sendWarningMessage(chatName + "This module does not work in singleplayer")
disable()
} else if (!confirmed.value) {
MessageSendHelper.sendWarningMessage(chatName + "This module will kick you from the server! It is part of the exploit and cannot be avoided")
}
}
@EventHandler
var receiveListener = Listener(EventHook { event: Receive ->
if (event.packet is SPacketRespawn) {
if ((event.packet as SPacketRespawn).dimensionID == 1 && confirmed.value) {
Objects.requireNonNull(Wrapper.getMinecraft().connection)!!.handleDisconnect(SPacketDisconnect(TextComponentString("Attempting teleportation exploit")))
disable()
}
}
})
}

View File

@ -0,0 +1,19 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module;
/**
* @author 086
*/
@Module.Info(
name = "Fastbreak",
category = Module.Category.PLAYER,
description = "Nullifies block hit delay"
)
public class Fastbreak extends Module {
@Override
public void onUpdate() {
mc.playerController.blockHitDelay = 0;
}
}

View File

@ -1,17 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zeroeightsix.kami.module.Module
/**
* @author 086
*/
@Module.Info(
name = "Fastbreak",
category = Module.Category.PLAYER,
description = "Nullifies block hit delay"
)
class Fastbreak : Module() {
override fun onUpdate() {
mc.playerController.blockHitDelay = 0
}
}

View File

@ -0,0 +1,120 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.event.events.PlayerMoveEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.client.entity.EntityOtherPlayerMP;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.play.client.CPacketInput;
import net.minecraft.network.play.client.CPacketPlayer;
import net.minecraft.network.play.client.CPacketUseEntity;
import net.minecraft.network.play.client.CPacketVehicleMove;
import net.minecraftforge.client.event.PlayerSPPushOutOfBlocksEvent;
/**
* Created by 086 on 22/12/2017.
*/
@Module.Info(
name = "Freecam",
category = Module.Category.PLAYER,
description = "Leave your body and trascend into the realm of the gods"
)
public class Freecam extends Module {
private Setting<Integer> speed = register(Settings.i("Speed", 5)); // /100 in practice
private Setting<Boolean> packetCancel = register(Settings.b("Packet Cancel", false));
private double posX, posY, posZ;
private float pitch, yaw;
private EntityOtherPlayerMP clonedPlayer;
private boolean isRidingEntity;
private Entity ridingEntity;
@Override
protected void onEnable() {
if (mc.player != null) {
isRidingEntity = mc.player.getRidingEntity() != null;
if (mc.player.getRidingEntity() == null) {
posX = mc.player.posX;
posY = mc.player.posY;
posZ = mc.player.posZ;
} else {
ridingEntity = mc.player.getRidingEntity();
mc.player.dismountRidingEntity();
}
pitch = mc.player.rotationPitch;
yaw = mc.player.rotationYaw;
clonedPlayer = new EntityOtherPlayerMP(mc.world, mc.getSession().getProfile());
clonedPlayer.copyLocationAndAnglesFrom(mc.player);
clonedPlayer.rotationYawHead = mc.player.rotationYawHead;
mc.world.addEntityToWorld(-100, clonedPlayer);
mc.player.capabilities.isFlying = true;
mc.player.capabilities.setFlySpeed(speed.getValue() / 100f);
mc.player.noClip = true;
// WebringOfTheDamned
// This is needed for some reason, as is the converse in onDisable.
mc.renderChunksMany = false;
mc.renderGlobal.loadRenderers();
}
}
@Override
protected void onDisable() {
EntityPlayer localPlayer = mc.player;
if (localPlayer != null) {
mc.player.setPositionAndRotation(posX, posY, posZ, yaw, pitch);
mc.world.removeEntityFromWorld(-100);
clonedPlayer = null;
posX = posY = posZ = 0.D;
pitch = yaw = 0.f;
mc.player.capabilities.isFlying = false; //getModManager().getMod("ElytraFlight").isEnabled();
mc.player.capabilities.setFlySpeed(0.05f);
mc.player.noClip = false;
mc.player.motionX = mc.player.motionY = mc.player.motionZ = 0.f;
if (isRidingEntity) {
mc.player.startRiding(ridingEntity, true);
}
// WebringOfTheDamned
// This is needed for some reason, as is the converse in onEnable.
mc.renderChunksMany = true;
mc.renderGlobal.loadRenderers();
}
}
@Override
public void onUpdate() {
mc.player.capabilities.isFlying = true;
mc.player.capabilities.setFlySpeed(speed.getValue() / 100f);
mc.player.noClip = true;
mc.player.onGround = false;
mc.player.fallDistance = 0;
}
@EventHandler
private Listener<PlayerMoveEvent> moveListener = new Listener<>(event -> mc.player.noClip = true);
@EventHandler
private Listener<PlayerSPPushOutOfBlocksEvent> pushListener = new Listener<>(event -> event.setCanceled(true));
@EventHandler
private Listener<PacketEvent.Send> sendListener = new Listener<>(event -> {
if (event.getPacket() instanceof CPacketPlayer || event.getPacket() instanceof CPacketInput) {
event.cancel();
}
if (packetCancel.getValue() && (event.getPacket() instanceof CPacketUseEntity || event.getPacket() instanceof CPacketVehicleMove)) {
event.cancel();
}
});
}

View File

@ -1,115 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent
import me.zeroeightsix.kami.event.events.PlayerMoveEvent
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.client.entity.EntityOtherPlayerMP
import net.minecraft.entity.Entity
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.network.play.client.CPacketInput
import net.minecraft.network.play.client.CPacketPlayer
import net.minecraft.network.play.client.CPacketUseEntity
import net.minecraft.network.play.client.CPacketVehicleMove
import net.minecraftforge.client.event.PlayerSPPushOutOfBlocksEvent
/**
* Created by 086 on 22/12/2017.
*/
@Module.Info(
name = "Freecam",
category = Module.Category.PLAYER,
description = "Leave your body and trascend into the realm of the gods"
)
class Freecam : Module() {
private val speed = register(Settings.i("Speed", 5)) // /100 in practice
private val packetCancel = register(Settings.b("Packet Cancel", false))
private var posX = 0.0
private var posY = 0.0
private var posZ = 0.0
private var pitch = 0f
private var yaw = 0f
private var clonedPlayer: EntityOtherPlayerMP? = null
private var isRidingEntity = false
private var ridingEntity: Entity? = null
override fun onEnable() {
if (mc.player != null) {
isRidingEntity = mc.player.getRidingEntity() != null
if (mc.player.getRidingEntity() == null) {
posX = mc.player.posX
posY = mc.player.posY
posZ = mc.player.posZ
} else {
ridingEntity = mc.player.getRidingEntity()
mc.player.dismountRidingEntity()
}
pitch = mc.player.rotationPitch
yaw = mc.player.rotationYaw
clonedPlayer = EntityOtherPlayerMP(mc.world, mc.getSession().profile)
clonedPlayer!!.copyLocationAndAnglesFrom(mc.player)
clonedPlayer!!.rotationYawHead = mc.player.rotationYawHead
mc.world.addEntityToWorld(-100, clonedPlayer)
mc.player.capabilities.isFlying = true
mc.player.capabilities.flySpeed = speed.value / 100f
mc.player.noClip = true
// WebringOfTheDamned
// This is needed for some reason, as is the converse in onDisable.
mc.renderChunksMany = false
mc.renderGlobal.loadRenderers()
}
}
override fun onDisable() {
val localPlayer: EntityPlayer? = mc.player
if (localPlayer != null) {
mc.player.setPositionAndRotation(posX, posY, posZ, yaw, pitch)
mc.world.removeEntityFromWorld(-100)
clonedPlayer = null
posZ = 0.0
posY = posZ
posX = posY
yaw = 0f
pitch = yaw
mc.player.capabilities.isFlying = false //getModManager().getMod("ElytraFlight").isEnabled();
mc.player.capabilities.flySpeed = 0.05f
mc.player.noClip = false
mc.player.motionZ = 0.0
mc.player.motionY = mc.player.motionZ
mc.player.motionX = mc.player.motionY
if (isRidingEntity) {
mc.player.startRiding(ridingEntity, true)
}
// WebringOfTheDamned
// This is needed for some reason, as is the converse in onEnable.
mc.renderChunksMany = true
mc.renderGlobal.loadRenderers()
}
}
override fun onUpdate() {
mc.player.capabilities.isFlying = true
mc.player.capabilities.flySpeed = speed.value / 100f
mc.player.noClip = true
mc.player.onGround = false
mc.player.fallDistance = 0f
}
@EventHandler
private val moveListener = Listener(EventHook { event: PlayerMoveEvent? -> mc.player.noClip = true })
@EventHandler
private val pushListener = Listener(EventHook { event: PlayerSPPushOutOfBlocksEvent -> event.isCanceled = true })
@EventHandler
private val sendListener = Listener(EventHook { event: PacketEvent.Send ->
if (event.packet is CPacketPlayer || event.packet is CPacketInput) {
event.cancel()
}
if (packetCancel.value && (event.packet is CPacketUseEntity || event.packet is CPacketVehicleMove)) {
event.cancel()
}
})
}

View File

@ -1,6 +1,6 @@
package me.zeroeightsix.kami.module.modules.player
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.module.Module;
/**
* @author THEREALWWEFAN231
@ -12,4 +12,5 @@ import me.zeroeightsix.kami.module.Module
category = Module.Category.PLAYER,
description = "Place blocks on liquid!"
)
class LiquidInteract : Module()
public class LiquidInteract extends Module {
}

View File

@ -0,0 +1,32 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* Created by 086 on 8/04/2018.
*/
@Module.Info(
name = "NoEntityTrace",
category = Module.Category.PLAYER,
description = "Blocks entities from stopping you from mining"
)
public class NoEntityTrace extends Module {
private Setting<TraceMode> mode = register(Settings.e("Mode", TraceMode.DYNAMIC));
private static NoEntityTrace INSTANCE;
public NoEntityTrace() {
NoEntityTrace.INSTANCE = this;
}
public static boolean shouldBlock() {
return INSTANCE.isEnabled() && (INSTANCE.mode.getValue() == TraceMode.STATIC || mc.playerController.isHittingBlock);
}
private enum TraceMode {
STATIC, DYNAMIC
}
}

View File

@ -1,32 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
/**
* Created by 086 on 8/04/2018.
*/
@Module.Info(
name = "NoEntityTrace",
category = Module.Category.PLAYER,
description = "Blocks entities from stopping you from mining"
)
class NoEntityTrace : Module() {
private val mode = register(Settings.e<TraceMode>("Mode", TraceMode.DYNAMIC))
private enum class TraceMode {
STATIC, DYNAMIC
}
companion object {
private var INSTANCE: NoEntityTrace? = null
@JvmStatic
fun shouldBlock(): Boolean {
return INSTANCE!!.isEnabled && (INSTANCE!!.mode.value == TraceMode.STATIC || mc.playerController.isHittingBlock)
}
}
init {
INSTANCE = this
}
}

View File

@ -0,0 +1,74 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.EntityUtil;
import net.minecraft.init.Items;
import net.minecraft.network.play.client.CPacketPlayer;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d;
/**
* Created by 086 on 19/11/2017.
* Updated by dominikaaaa on 05/03/20
*/
@Module.Info(
category = Module.Category.PLAYER,
description = "Prevents fall damage", name = "NoFall"
)
public class NoFall extends Module {
private Setting<FallMode> fallMode = register(Settings.e("Mode", FallMode.PACKET));
private Setting<Boolean> pickup = register(Settings.booleanBuilder("Pickup").withValue(true).withVisibility(v -> fallMode.getValue().equals(FallMode.BUCKET)).build());
private Setting<Integer> distance = register(Settings.integerBuilder("Distance").withValue(3).withMinimum(1).withMaximum(10).withVisibility(v -> fallMode.getValue().equals(FallMode.BUCKET)).build());
private Setting<Integer> pickupDelay = register(Settings.integerBuilder("Pickup Delay").withValue(300).withMinimum(100).withMaximum(1000).withVisibility(v -> fallMode.getValue().equals(FallMode.BUCKET) && pickup.getValue()).build());
private long last = 0;
@EventHandler
public Listener<PacketEvent.Send> sendListener = new Listener<>(event -> {
if ((fallMode.getValue().equals(FallMode.PACKET)) && event.getPacket() instanceof CPacketPlayer) {
((CPacketPlayer) event.getPacket()).onGround = true;
}
});
@Override
public void onUpdate() {
if ((fallMode.getValue().equals(FallMode.BUCKET)) && mc.player.fallDistance >= distance.getValue() && !EntityUtil.isAboveWater(mc.player) && System.currentTimeMillis() - last > 100) {
Vec3d posVec = mc.player.getPositionVector();
RayTraceResult result = mc.world.rayTraceBlocks(posVec, posVec.add(0, -5.33f, 0), true, true, false);
if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) {
EnumHand hand = EnumHand.MAIN_HAND;
if (mc.player.getHeldItemOffhand().getItem() == Items.WATER_BUCKET) hand = EnumHand.OFF_HAND;
else if (mc.player.getHeldItemMainhand().getItem() != Items.WATER_BUCKET) {
for (int i = 0; i < 9; i++)
if (mc.player.inventory.getStackInSlot(i).getItem() == Items.WATER_BUCKET) {
mc.player.inventory.currentItem = i;
mc.player.rotationPitch = 90;
last = System.currentTimeMillis();
return;
}
return;
}
mc.player.rotationPitch = 90;
mc.playerController.processRightClick(mc.player, mc.world, hand);
}
if (pickup.getValue()) {
new Thread(() -> {
try { Thread.sleep(pickupDelay.getValue()); } catch (InterruptedException ignored) { }
mc.player.rotationPitch = 90;
mc.rightClickMouse();
}).start();
}
}
}
private enum FallMode {
BUCKET, PACKET
}
}

View File

@ -1,72 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import me.zeroeightsix.kami.util.EntityUtil
import net.minecraft.init.Items
import net.minecraft.network.play.client.CPacketPlayer
import net.minecraft.util.EnumHand
import net.minecraft.util.math.RayTraceResult
/**
* Created by 086 on 19/11/2017.
* Updated by dominikaaaa on 05/03/20
*/
@Module.Info(
name = "NoFall",
category = Module.Category.PLAYER,
description = "Prevents fall damage"
)
class NoFall : Module() {
private val fallMode = register(Settings.e<FallMode>("Mode", FallMode.PACKET))
private val pickup = register(Settings.booleanBuilder("Pickup").withValue(true).withVisibility { v: Boolean? -> fallMode.value == FallMode.BUCKET }.build())
private val distance = register(Settings.integerBuilder("Distance").withValue(3).withMinimum(1).withMaximum(10).withVisibility { v: Int? -> fallMode.value == FallMode.BUCKET }.build())
private val pickupDelay = register(Settings.integerBuilder("Pickup Delay").withValue(300).withMinimum(100).withMaximum(1000).withVisibility { v: Int? -> fallMode.value == FallMode.BUCKET && pickup.value }.build())
private var last: Long = 0
@EventHandler
var sendListener = Listener(EventHook { event: PacketEvent.Send ->
if (fallMode.value == FallMode.PACKET && event.packet is CPacketPlayer) {
(event.packet as CPacketPlayer).onGround = true
}
})
override fun onUpdate() {
if (fallMode.value == FallMode.BUCKET && mc.player.fallDistance >= distance.value && !EntityUtil.isAboveWater(mc.player) && System.currentTimeMillis() - last > 100) {
val posVec = mc.player.positionVector
val result = mc.world.rayTraceBlocks(posVec, posVec.add(0.0, -5.33, 0.0), true, true, false)
if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) {
var hand = EnumHand.MAIN_HAND
if (mc.player.heldItemOffhand.getItem() === Items.WATER_BUCKET) hand = EnumHand.OFF_HAND else if (mc.player.heldItemMainhand.getItem() !== Items.WATER_BUCKET) {
for (i in 0..8) if (mc.player.inventory.getStackInSlot(i).getItem() === Items.WATER_BUCKET) {
mc.player.inventory.currentItem = i
mc.player.rotationPitch = 90f
last = System.currentTimeMillis()
return
}
return
}
mc.player.rotationPitch = 90f
mc.playerController.processRightClick(mc.player, mc.world, hand)
}
if (pickup.value) {
Thread(Runnable {
try {
Thread.sleep(pickupDelay.value.toLong())
} catch (ignored: InterruptedException) {
}
mc.player.rotationPitch = 90f
mc.rightClickMouse()
}).start()
}
}
}
private enum class FallMode {
BUCKET, PACKET
}
}

View File

@ -1,6 +1,6 @@
package me.zeroeightsix.kami.module.modules.player
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.module.Module;
/**
* @author 086
@ -14,4 +14,5 @@ import me.zeroeightsix.kami.module.Module
description = "Suppress network exceptions and prevent getting kicked",
showOnArray = Module.ShowOnArray.OFF
)
class NoPacketKick : Module()
public class NoPacketKick extends Module {
}

View File

@ -0,0 +1,29 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import net.minecraft.network.play.client.CPacketAnimation;
/**
* Created 13 August 2019 by hub
* Updated 14 November 2019 by hub
* Updated by dominikaaaa on 14/12/19
*/
@Module.Info(
name = "NoSwing",
category = Module.Category.PLAYER,
description = "Cancels server and client swinging packets"
)
public class NoSwing extends Module {
@EventHandler
private Listener<PacketEvent.Send> listener = new Listener<>(event -> {
if (event.getPacket() instanceof CPacketAnimation) {
event.cancel();
}
});
}

View File

@ -1,27 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent
import me.zeroeightsix.kami.module.Module
import net.minecraft.network.play.client.CPacketAnimation
/**
* Created 13 August 2019 by hub
* Updated 14 November 2019 by hub
* Updated by dominikaaaa on 14/12/19
*/
@Module.Info(
name = "NoSwing",
category = Module.Category.PLAYER,
description = "Cancels server and client swinging packets"
)
class NoSwing : Module() {
@EventHandler
private val listener = Listener(EventHook { event: PacketEvent.Send ->
if (event.packet is CPacketAnimation) {
event.cancel()
}
})
}

View File

@ -0,0 +1,56 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.network.play.client.*;
/**
* @author dominikaaaa
*/
@Module.Info(
name = "PacketCancel",
description = "Cancels specific packets used for various actions",
category = Module.Category.PLAYER
)
public class PacketCancel extends Module {
private Setting<Boolean> all = register(Settings.b("All", false));
private Setting<Boolean> packetInput = register(Settings.booleanBuilder("CPacketInput").withValue(true).withVisibility(v -> !all.getValue()));
private Setting<Boolean> packetPlayer = register(Settings.booleanBuilder("CPacketPlayer").withValue(true).withVisibility(v -> !all.getValue()));
private Setting<Boolean> packetEntityAction = register(Settings.booleanBuilder("CPacketEntityAction").withValue(true).withVisibility(v -> !all.getValue()));
private Setting<Boolean> packetUseEntity = register(Settings.booleanBuilder("CPacketUseEntity").withValue(true).withVisibility(v -> !all.getValue()));
private Setting<Boolean> packetVehicleMove = register(Settings.booleanBuilder("CPacketVehicleMove").withValue(true).withVisibility(v -> !all.getValue()));
private int numPackets;
@EventHandler
private final Listener<PacketEvent.Send> sendListener = new Listener<>(event -> {
if (
(all.getValue())
||
(packetInput.getValue() && event.getPacket() instanceof CPacketInput)
||
(packetPlayer.getValue() && event.getPacket() instanceof CPacketPlayer)
||
(packetEntityAction.getValue() && event.getPacket() instanceof CPacketEntityAction)
||
(packetUseEntity.getValue() && event.getPacket() instanceof CPacketUseEntity)
||
(packetVehicleMove.getValue() && event.getPacket() instanceof CPacketVehicleMove)
) {
event.cancel();
numPackets++;
}
});
public void onDisable() {
numPackets = 0;
}
@Override
public String getHudInfo() {
return Integer.toString(numPackets);
}
}

View File

@ -1,53 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.network.play.client.*
/**
* @author dominikaaaa
*/
@Module.Info(
name = "PacketCancel",
description = "Cancels specific packets used for various actions",
category = Module.Category.PLAYER
)
class PacketCancel : Module() {
private val all = register(Settings.b("All", false))
private val packetInput = register(Settings.booleanBuilder("CPacketInput").withValue(true).withVisibility { v: Boolean? -> !all.value })
private val packetPlayer = register(Settings.booleanBuilder("CPacketPlayer").withValue(true).withVisibility { v: Boolean? -> !all.value })
private val packetEntityAction = register(Settings.booleanBuilder("CPacketEntityAction").withValue(true).withVisibility { v: Boolean? -> !all.value })
private val packetUseEntity = register(Settings.booleanBuilder("CPacketUseEntity").withValue(true).withVisibility { v: Boolean? -> !all.value })
private val packetVehicleMove = register(Settings.booleanBuilder("CPacketVehicleMove").withValue(true).withVisibility { v: Boolean? -> !all.value })
private var numPackets = 0
@EventHandler
private val sendListener = Listener(EventHook { event: PacketEvent.Send ->
if (all.value
||
packetInput.value && event.packet is CPacketInput
||
packetPlayer.value && event.packet is CPacketPlayer
||
packetEntityAction.value && event.packet is CPacketEntityAction
||
packetUseEntity.value && event.packet is CPacketUseEntity
||
packetVehicleMove.value && event.packet is CPacketVehicleMove) {
event.cancel()
numPackets++
}
})
public override fun onDisable() {
numPackets = 0
}
override fun getHudInfo(): String {
return numPackets.toString()
}
}

View File

@ -0,0 +1,34 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.util.math.MathHelper;
/**
* Created by 086 on 16/12/2017.
*/
@Module.Info(
name = "PitchLock",
category = Module.Category.PLAYER,
description = "Locks your camera pitch"
)
public class PitchLock extends Module {
private Setting<Boolean> auto = register(Settings.b("Auto", true));
private Setting<Float> pitch = register(Settings.f("Pitch", 180));
private Setting<Integer> slice = register(Settings.i("Slice", 8));
@Override
public void onUpdate() {
if (slice.getValue() == 0) return;
if (auto.getValue()) {
int angle = 360 / slice.getValue();
float yaw = mc.player.rotationPitch;
yaw = Math.round(yaw / angle) * angle;
mc.player.rotationPitch = yaw;
if (mc.player.isRiding()) mc.player.getRidingEntity().rotationPitch = yaw;
} else {
mc.player.rotationPitch = MathHelper.clamp(pitch.getValue() - 180, -180, 180);
}
}
}

View File

@ -1,32 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.util.math.MathHelper
import kotlin.math.roundToInt
/**
* Created by 086 on 16/12/2017.
*/
@Module.Info(
name = "PitchLock",
category = Module.Category.PLAYER,
description = "Locks your camera pitch"
)
class PitchLock : Module() {
private val auto = register(Settings.b("Auto", true))
private val pitch = register(Settings.f("Pitch", 180f))
private val slice = register(Settings.i("Slice", 8))
override fun onUpdate() {
if (slice.value == 0) return
if (auto.value) {
val angle = 360 / slice.value
var yaw = mc.player.rotationPitch
yaw = (yaw / angle).roundToInt() * angle.toFloat()
mc.player.rotationPitch = yaw
if (mc.player.isRiding) mc.player.getRidingEntity()!!.rotationPitch = yaw
} else {
mc.player.rotationPitch = MathHelper.clamp(pitch.value - 180, -180f, 180f)
}
}
}

View File

@ -0,0 +1,25 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import net.minecraft.network.play.client.CPacketConfirmTeleport;
/**
* Created by GlowskiBroski on 10/14/2018.
*/
@Module.Info(
name = "PortalGodMode",
category = Module.Category.PLAYER,
description = "Don't take damage in portals"
)
public class PortalGodMode extends Module {
@EventHandler
public Listener<PacketEvent.Send> listener = new Listener<>(event -> {
if (isEnabled() && event.getPacket() instanceof CPacketConfirmTeleport) {
event.cancel();
}
});
}

View File

@ -1,25 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent
import me.zeroeightsix.kami.module.Module
import net.minecraft.network.play.client.CPacketConfirmTeleport
/**
* Created by GlowskiBroski on 10/14/2018.
*/
@Module.Info(
name = "PortalGodMode",
category = Module.Category.PLAYER,
description = "Don't take damage in portals"
)
class PortalGodMode : Module() {
@EventHandler
var listener = Listener(EventHook { event: PacketEvent.Send ->
if (isEnabled && event.packet is CPacketConfirmTeleport) {
event.cancel()
}
})
}

View File

@ -0,0 +1,36 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* Code like this does not have an author, as it is literally one function. It's nothing unique.
* See BowSpam for example. It's just one thing. Anybody can write it the exact same way on accident.
* There is nothing to credit here.
* This message is here because clowns decided to argue with me that they should be credited even though they did not come up with the code.
* Updated by dominikaaaa on 01/03/20
*/
@Module.Info(
name = "Timer",
category = Module.Category.PLAYER,
description = "Changes your client tick speed"
)
public class Timer extends Module {
private Setting<Boolean> slow = register(Settings.b("Slow Mode", false));
private Setting<Float> tickNormal = register(Settings.floatBuilder("Tick N").withMinimum(1f).withMaximum(10f).withValue(2.0f).withVisibility(v -> !slow.getValue()).build());
private Setting<Float> tickSlow = register(Settings.floatBuilder("Tick S").withMinimum(1f).withMaximum(10f).withValue(8f).withVisibility(v -> slow.getValue()).build());
public void onDisable() {
mc.timer.tickLength = 50.0f;
}
public void onUpdate() {
if (!slow.getValue()) {
mc.timer.tickLength = 50.0f / tickNormal.getValue();
}
else {
mc.timer.tickLength = 50.0f / (tickSlow.getValue() / 10.0f);
}
}
}

View File

@ -1,33 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
/**
* Code like this does not have an author, as it is literally one function. It's nothing unique.
* See BowSpam for example. It's just one thing. Anybody can write it the exact same way on accident.
* There is nothing to credit here.
* This message is here because clowns decided to argue with me that they should be credited even though they did not come up with the code.
* Updated by dominikaaaa on 01/03/20
*/
@Module.Info(
name = "Timer",
category = Module.Category.PLAYER,
description = "Changes your client tick speed"
)
class Timer : Module() {
private val slow = register(Settings.b("Slow Mode", false))
private val tickNormal = register(Settings.floatBuilder("Tick N").withMinimum(1f).withMaximum(10f).withValue(2.0f).withVisibility { v: Float? -> !slow.value }.build())
private val tickSlow = register(Settings.floatBuilder("Tick S").withMinimum(1f).withMaximum(10f).withValue(8f).withVisibility { v: Float? -> slow.value }.build())
public override fun onDisable() {
mc.timer.tickLength = 50.0f
}
override fun onUpdate() {
if (!slow.value) {
mc.timer.tickLength = 50.0f / tickNormal.value
} else {
mc.timer.tickLength = 50.0f / (tickSlow.value / 10.0f)
}
}
}

View File

@ -0,0 +1,34 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.util.math.MathHelper;
/**
* Created by 086 on 16/12/2017.
*/
@Module.Info(
name = "YawLock",
category = Module.Category.PLAYER,
description = "Locks your camera yaw"
)
public class YawLock extends Module {
private Setting<Boolean> auto = register(Settings.b("Auto", true));
private Setting<Float> yaw = register(Settings.f("Yaw", 180));
private Setting<Integer> slice = register(Settings.i("Slice", 8));
@Override
public void onUpdate() {
if (slice.getValue() == 0) return;
if (auto.getValue()) {
int angle = 360 / slice.getValue();
float yaw = mc.player.rotationYaw;
yaw = Math.round(yaw / angle) * angle;
mc.player.rotationYaw = yaw;
if (mc.player.isRiding()) mc.player.getRidingEntity().rotationYaw = yaw;
} else {
mc.player.rotationYaw = MathHelper.clamp(yaw.getValue() - 180, -180, 180);
}
}
}

View File

@ -1,32 +0,0 @@
package me.zeroeightsix.kami.module.modules.player
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.util.math.MathHelper
import kotlin.math.roundToInt
/**
* Created by 086 on 16/12/2017.
*/
@Module.Info(
name = "YawLock",
category = Module.Category.PLAYER,
description = "Locks your camera yaw"
)
class YawLock : Module() {
private val auto = register(Settings.b("Auto", true))
private val yaw = register(Settings.f("Yaw", 180f))
private val slice = register(Settings.i("Slice", 8))
override fun onUpdate() {
if (slice.value == 0) return
if (auto.value) {
val angle = 360 / slice.value
var yaw = mc.player.rotationYaw
yaw = (yaw / angle).roundToInt() * angle.toFloat()
mc.player.rotationYaw = yaw
if (mc.player.isRiding) mc.player.getRidingEntity()!!.rotationYaw = yaw
} else {
mc.player.rotationYaw = MathHelper.clamp(yaw.value - 180, -180f, 180f)
}
}
}

View File

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

View File

@ -1,34 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
/**
* Created by 086 on 9/04/2018.
*/
@Module.Info(
name = "AntiFog",
description = "Disables or reduces fog",
category = Module.Category.RENDER
)
class AntiFog : Module() {
enum class VisionMode {
NO_FOG, AIR
}
companion object {
@JvmField
var mode: Setting<VisionMode> = Settings.e("Mode", VisionMode.NO_FOG)
private var INSTANCE = AntiFog()
@JvmStatic
fun enabled(): Boolean {
return INSTANCE.isEnabled
}
}
init {
INSTANCE = this
register(mode)
}
}

View File

@ -0,0 +1,76 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.ColourHolder;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.world.GameType;
/**
* Created by 086 on 24/01/2018.
*/
@Module.Info(
name = "ArmourHUD",
category = Module.Category.RENDER,
showOnArray = Module.ShowOnArray.OFF,
description = "Displays your armour and it's durability on screen"
)
public class ArmourHUD extends Module {
private static RenderItem itemRender = Minecraft.getMinecraft().getRenderItem();
private Setting<Boolean> damage = register(Settings.b("Damage", false));
private NonNullList<ItemStack> getArmour() {
if (mc.playerController.getCurrentGameType().equals(GameType.CREATIVE) || mc.playerController.getCurrentGameType().equals(GameType.SPECTATOR)) {
return NonNullList.withSize(4, ItemStack.EMPTY);
}
else {
return mc.player.inventory.armorInventory;
}
}
@Override
public void onRender() {
GlStateManager.enableTexture2D();
ScaledResolution resolution = new ScaledResolution(mc);
int i = resolution.getScaledWidth() / 2;
int iteration = 0;
int y = resolution.getScaledHeight() - 55 - (mc.player.isInWater() ? 10 : 0);
for (ItemStack is : getArmour()) {
iteration++;
if (is.isEmpty()) continue;
int x = i - 90 + (9 - iteration) * 20 + 2;
GlStateManager.enableDepth();
itemRender.zLevel = 200F;
itemRender.renderItemAndEffectIntoGUI(is, x, y);
itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, is, x, y, "");
itemRender.zLevel = 0F;
GlStateManager.enableTexture2D();
GlStateManager.disableLighting();
GlStateManager.disableDepth();
String s = is.getCount() > 1 ? is.getCount() + "" : "";
mc.fontRenderer.drawStringWithShadow(s, x + 19 - 2 - mc.fontRenderer.getStringWidth(s), y + 9, 0xffffff);
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));
}
}
GlStateManager.enableDepth();
GlStateManager.disableLighting();
}
}

View File

@ -1,65 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import me.zeroeightsix.kami.util.ColourHolder
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.ScaledResolution
import net.minecraft.client.renderer.GlStateManager
import net.minecraft.item.ItemStack
import net.minecraft.util.NonNullList
import net.minecraft.world.GameType
/**
* Created by 086 on 24/01/2018.
*/
@Module.Info(
name = "ArmourHUD",
category = Module.Category.RENDER,
showOnArray = Module.ShowOnArray.OFF,
description = "Displays your armour and it's durability on screen"
)
class ArmourHUD : Module() {
private val damage = register(Settings.b("Damage", false))
private val armour: NonNullList<ItemStack>
get() = if (mc.playerController.getCurrentGameType() == GameType.CREATIVE || mc.playerController.getCurrentGameType() == GameType.SPECTATOR) {
NonNullList.withSize(4, ItemStack.EMPTY)
} else {
mc.player.inventory.armorInventory
}
override fun onRender() {
GlStateManager.enableTexture2D()
val resolution = ScaledResolution(mc)
val i = resolution.scaledWidth / 2
var iteration = 0
val y = resolution.scaledHeight - 55 - if (mc.player.isInWater) 10 else 0
for (`is` in armour) {
iteration++
if (`is`.isEmpty()) continue
val x = i - 90 + (9 - iteration) * 20 + 2
GlStateManager.enableDepth()
itemRender.zLevel = 200f
itemRender.renderItemAndEffectIntoGUI(`is`, x, y)
itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, `is`, x, y, "")
itemRender.zLevel = 0f
GlStateManager.enableTexture2D()
GlStateManager.disableLighting()
GlStateManager.disableDepth()
val s = if (`is`.count > 1) `is`.count.toString() + "" else ""
mc.fontRenderer.drawStringWithShadow(s, x + 19 - 2 - mc.fontRenderer.getStringWidth(s).toFloat(), y + 9.toFloat(), 0xffffff)
if (damage.value) {
val green = (`is`.maxDamage.toFloat() - `is`.getItemDamage().toFloat()) / `is`.maxDamage.toFloat()
val red = 1 - green
val dmg = 100 - (red * 100).toInt()
mc.fontRenderer.drawStringWithShadow(dmg.toString() + "", x + 8 - mc.fontRenderer.getStringWidth(dmg.toString() + "") / 2.toFloat(), y - 11.toFloat(), ColourHolder.toHex((red * 255).toInt(), (green * 255).toInt(), 0))
}
}
GlStateManager.enableDepth()
GlStateManager.disableLighting()
}
companion object {
private val itemRender = Minecraft.getMinecraft().getRenderItem()
}
}

View File

@ -0,0 +1,46 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.inventory.EntityEquipmentSlot;
/**
* Created by TBM on 30/12/2019.
*/
@Module.Info(
name = "ArmourHide",
category = Module.Category.RENDER,
description = "Hides the armour on selected entities",
showOnArray = Module.ShowOnArray.OFF
)
public class ArmourHide extends Module {
public Setting<Boolean> player = register(Settings.b("Players", false));
public Setting<Boolean> armourstand = register(Settings.b("Armour Stands", true));
public Setting<Boolean> mobs = register(Settings.b("Mobs", true));
public Setting<Boolean> helmet = register(Settings.b("Helmet", false));
public Setting<Boolean> chestplate = register(Settings.b("Chestplate", false));
public Setting<Boolean> leggins = register(Settings.b("Leggings", false));
public Setting<Boolean> boots = register(Settings.b("Boots", false));
public static ArmourHide INSTANCE;
public ArmourHide() {
ArmourHide.INSTANCE = this;
}
public static boolean shouldRenderPiece(EntityEquipmentSlot slotIn) {
if (slotIn == EntityEquipmentSlot.HEAD && ArmourHide.INSTANCE.helmet.getValue()) {
return true;
} else if (slotIn == EntityEquipmentSlot.CHEST && ArmourHide.INSTANCE.chestplate.getValue()) {
return true;
} else if (slotIn == EntityEquipmentSlot.LEGS && ArmourHide.INSTANCE.leggins.getValue()) {
return true;
} else if (slotIn == EntityEquipmentSlot.FEET && ArmourHide.INSTANCE.boots.getValue()) {
return true;
} else {
return false;
}
}
}

View File

@ -1,47 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.inventory.EntityEquipmentSlot
/**
* Created by TBM on 30/12/2019.
*/
@Module.Info(
name = "ArmourHide",
category = Module.Category.RENDER,
description = "Hides the armour on selected entities",
showOnArray = Module.ShowOnArray.OFF
)
class ArmourHide : Module() {
@JvmField
var player: Setting<Boolean> = register(Settings.b("Players", false))
@JvmField
var armourstand: Setting<Boolean> = register(Settings.b("Armour Stands", true))
@JvmField
var mobs: Setting<Boolean> = register(Settings.b("Mobs", true))
var helmet: Setting<Boolean> = register(Settings.b("Helmet", false))
var chestplate: Setting<Boolean> = register(Settings.b("Chestplate", false))
var leggings: Setting<Boolean> = register(Settings.b("Leggings", false))
var boots: Setting<Boolean> = register(Settings.b("Boots", false))
companion object {
@JvmField
var INSTANCE: ArmourHide? = null
@JvmStatic
fun shouldRenderPiece(slotIn: EntityEquipmentSlot): Boolean {
return if (slotIn == EntityEquipmentSlot.HEAD && INSTANCE!!.helmet.value) {
true
} else if (slotIn == EntityEquipmentSlot.CHEST && INSTANCE!!.chestplate.value) {
true
} else if (slotIn == EntityEquipmentSlot.LEGS && INSTANCE!!.leggings.value) {
true
} else slotIn == EntityEquipmentSlot.FEET && INSTANCE!!.boots.value
}
}
init {
INSTANCE = this
}
}

View File

@ -0,0 +1,58 @@
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.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.GeometryMasks;
import me.zeroeightsix.kami.util.KamiTessellator;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.entity.projectile.EntityThrowable;
import org.lwjgl.opengl.GL11;
import java.util.List;
import java.util.stream.Collectors;
import static me.zeroeightsix.kami.util.ColourConverter.rgbToInt;
/**
* @author polymer
* Updated by dominikaaaa on 30/03/20
*/
@Module.Info(
name = "BoxESP",
description = "Draws a box around small entities",
category = Module.Category.RENDER
)
public class BoxESP extends Module {
private Setting<Boolean> experience = register(Settings.b("Experience", true));
private Setting<Boolean> arrows = register(Settings.b("Arrows", true));
private Setting<Boolean> throwable = register(Settings.b("Throwable", true));
private Setting<Boolean> items = register(Settings.b("Items", false));
private Setting<Integer> alpha = register(Settings.integerBuilder("Alpha").withMinimum(1).withMaximum(255).withValue(100).build());
private Setting<Integer> red = register(Settings.integerBuilder("Red").withMinimum(1).withMaximum(255).withValue(155).build());
private Setting<Integer> green = register(Settings.integerBuilder("Green").withMinimum(1).withMaximum(255).withValue(144).build());
private Setting<Integer> blue = register(Settings.integerBuilder("Blue").withMinimum(1).withMaximum(255).withValue(255).build());
@Override
public void onWorldRender(RenderEvent event) {
List<Entity> entities = mc.world.loadedEntityList.stream().filter(this::getEntity).collect(Collectors.toList());
for (Entity e: entities) {
KamiTessellator.prepare(GL11.GL_QUADS);
int colour = rgbToInt(red.getValue(), green.getValue(), blue.getValue(), alpha.getValue());
KamiTessellator.drawBoxSmall((float) e.getPositionVector().x - 0.25f, (float) e.getPositionVector().y, (float) e.getPositionVector().z - 0.25f, colour, GeometryMasks.Quad.ALL);
KamiTessellator.release();
}
}
private boolean getEntity(Entity entity) {
if (entity instanceof EntityXPOrb && experience.getValue()) return true;
else if (entity instanceof EntityArrow && arrows.getValue()) return true;
else if (entity instanceof EntityThrowable && throwable.getValue()) return true;
else return entity instanceof EntityItem && items.getValue();
}
}

View File

@ -1,48 +0,0 @@
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.Settings
import me.zeroeightsix.kami.util.ColourConverter
import me.zeroeightsix.kami.util.GeometryMasks
import me.zeroeightsix.kami.util.KamiTessellator
import net.minecraft.entity.Entity
import net.minecraft.entity.item.EntityItem
import net.minecraft.entity.item.EntityXPOrb
import net.minecraft.entity.projectile.EntityArrow
import net.minecraft.entity.projectile.EntityThrowable
import org.lwjgl.opengl.GL11
import java.util.stream.Collectors
/**
* @author polymer
* Updated by dominikaaaa on 30/03/20
*/
@Module.Info(
name = "BoxESP",
description = "Draws a box around small entities",
category = Module.Category.RENDER
)
class BoxESP : Module() {
private val experience = register(Settings.b("Experience", true))
private val arrows = register(Settings.b("Arrows", true))
private val throwable = register(Settings.b("Throwable", true))
private val items = register(Settings.b("Items", false))
private val alpha = register(Settings.integerBuilder("Alpha").withMinimum(1).withMaximum(255).withValue(100).build())
private val red = register(Settings.integerBuilder("Red").withMinimum(1).withMaximum(255).withValue(155).build())
private val green = register(Settings.integerBuilder("Green").withMinimum(1).withMaximum(255).withValue(144).build())
private val blue = register(Settings.integerBuilder("Blue").withMinimum(1).withMaximum(255).withValue(255).build())
override fun onWorldRender(event: RenderEvent) {
val entities = mc.world.loadedEntityList.stream().filter { entity: Entity -> getEntity(entity) }.collect(Collectors.toList())
for (e in entities) {
KamiTessellator.prepare(GL11.GL_QUADS)
val colour = ColourConverter.rgbToInt(red.value, green.value, blue.value, alpha.value)
KamiTessellator.drawBoxSmall(e.positionVector.x.toFloat() - 0.25f, e.positionVector.y.toFloat(), e.positionVector.z.toFloat() - 0.25f, colour, GeometryMasks.Quad.ALL)
KamiTessellator.release()
}
}
private fun getEntity(entity: Entity): Boolean {
return if (entity is EntityXPOrb && experience.value) true else if (entity is EntityArrow && arrows.value) true else if (entity is EntityThrowable && throwable.value) true else entity is EntityItem && items.value
}
}

View File

@ -0,0 +1,32 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.EntityUtil;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
/**
* Created by 086 on 12/12/2017.
*/
@Module.Info(
name = "Chams",
category = Module.Category.RENDER,
description = "See entities through walls"
)
public class Chams extends Module {
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.getValue() : (EntityUtil.isPassive(entity) ? animals.getValue() : mobs.getValue()));
}
}

View File

@ -1,31 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import me.zeroeightsix.kami.util.EntityUtil
import net.minecraft.entity.Entity
import net.minecraft.entity.player.EntityPlayer
/**
* Created by 086 on 12/12/2017.
*/
@Module.Info(
name = "Chams",
category = Module.Category.RENDER,
description = "See entities through walls"
)
class Chams : Module() {
companion object {
private val players = Settings.b("Players", true)
private val animals = Settings.b("Animals", false)
private val mobs = Settings.b("Mobs", false)
@JvmStatic
fun renderChams(entity: Entity?): Boolean {
return if (entity is EntityPlayer) players.value else if (EntityUtil.isPassive(entity)) animals.value else mobs.value
}
}
init {
registerAll(players, animals, mobs)
}
}

View File

@ -0,0 +1,31 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* @author dominikaaaa
* Updated by dominikaaaa on 27/12/19
*/
@Module.Info(
name = "CleanGUI",
category = Module.Category.RENDER,
showOnArray = Module.ShowOnArray.OFF,
description = "Modifies parts of the GUI to be transparent"
)
public class CleanGUI extends Module {
public Setting<Boolean> inventoryGlobal = register(Settings.b("Inventory", true));
public static Setting<Boolean> chatGlobal = Settings.b("Chat", false);
private static CleanGUI INSTANCE = new CleanGUI();
public CleanGUI() {
INSTANCE = this;
register(chatGlobal);
}
public static boolean enabled() {
return INSTANCE.isEnabled();
}
}

View File

@ -1,35 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
/**
* @author dominikaaaa
* Updated by dominikaaaa on 27/12/19
*/
@Module.Info(
name = "CleanGUI",
category = Module.Category.RENDER,
showOnArray = Module.ShowOnArray.OFF,
description = "Modifies parts of the GUI to be transparent"
)
class CleanGUI : Module() {
@JvmField
var inventoryGlobal: Setting<Boolean> = register(Settings.b("Inventory", true))
companion object {
@JvmField
var chatGlobal: Setting<Boolean> = Settings.b("Chat", false)
private var INSTANCE = CleanGUI()
@JvmStatic
fun enabled(): Boolean {
return INSTANCE.isEnabled
}
}
init {
INSTANCE = this
register(chatGlobal)
}
}

View File

@ -0,0 +1,24 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* Created by 086 on 8/04/2018.
*/
@Module.Info(
name = "ExtraTab",
description = "Expands the player tab menu",
category = Module.Category.RENDER
)
public class ExtraTab extends Module {
public Setting<Integer> tabSize = register(Settings.integerBuilder("Players").withMinimum(1).withValue(80).build());
public static ExtraTab INSTANCE;
public ExtraTab() {
ExtraTab.INSTANCE = this;
}
}

View File

@ -1,27 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
/**
* Created by 086 on 8/04/2018.
*/
@Module.Info(
name = "ExtraTab",
description = "Expands the player tab menu",
category = Module.Category.RENDER
)
class ExtraTab : Module() {
@JvmField
var tabSize: Setting<Int> = register(Settings.integerBuilder("Players").withMinimum(1).withValue(80).build())
companion object {
@JvmField
var INSTANCE: ExtraTab? = null
}
init {
INSTANCE = this
}
}

View File

@ -0,0 +1,171 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.module.modules.combat.CrystalAura;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.GeometryMasks;
import me.zeroeightsix.kami.util.KamiTessellator;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import static me.zeroeightsix.kami.KamiMod.MODULE_MANAGER;
import static me.zeroeightsix.kami.module.modules.combat.CrystalAura.getPlayerPos;
/**
* Created 16 November 2019 by hub
* Updated by dominikaaaa on 15/12/19
*/
@Module.Info(
name = "HoleESP",
category = Module.Category.RENDER,
description = "Show safe holes for crystal pvp"
)
public class HoleESP extends Module {
private final BlockPos[] surroundOffset = {
new BlockPos(0, -1, 0), // down
new BlockPos(0, 0, -1), // north
new BlockPos(1, 0, 0), // east
new BlockPos(0, 0, 1), // south
new BlockPos(-1, 0, 0) // west
};
private Setting<Double> renderDistance = register(Settings.d("Render Distance", 8.0d));
private Setting<Integer> a0 = register(Settings.integerBuilder("Transparency").withMinimum(0).withValue(32).withMaximum(255).build());
private Setting<Integer> r1 = register(Settings.integerBuilder("Red (Obby)").withMinimum(0).withValue(208).withMaximum(255).withVisibility(v-> obbySettings()).build());
private Setting<Integer> g1 = register(Settings.integerBuilder("Green (Obby)").withMinimum(0).withValue(144).withMaximum(255).withVisibility(v-> obbySettings()).build());
private Setting<Integer> b1 = register(Settings.integerBuilder("Blue (Obby)").withMinimum(0).withValue(255).withMaximum(255).withVisibility(v-> obbySettings()).build());
private Setting<Integer> r2 = register(Settings.integerBuilder("Red (Bedrock)").withMinimum(0).withValue(144).withMaximum(255).withVisibility(v-> bedrockSettings()).build()); // 208
private Setting<Integer> g2 = register(Settings.integerBuilder("Green (Bedrock)").withMinimum(0).withValue(144).withMaximum(255).withVisibility(v-> bedrockSettings()).build());
private Setting<Integer> b2 = register(Settings.integerBuilder("Blue (Bedrock)").withMinimum(0).withValue(255).withMaximum(255).withVisibility(v-> bedrockSettings()).build());
private Setting<RenderMode> renderModeSetting = register(Settings.e("Render Mode", RenderMode.BLOCK));
private Setting<RenderBlocks> renderBlocksSetting = register(Settings.e("Render", RenderBlocks.BOTH));
private ConcurrentHashMap<BlockPos, Boolean> safeHoles;
private enum RenderMode {
DOWN, BLOCK
}
private enum RenderBlocks {
OBBY, BEDROCK, BOTH
}
private boolean obbySettings() {
return renderBlocksSetting.getValue().equals(RenderBlocks.OBBY) || renderBlocksSetting.getValue().equals(RenderBlocks.BOTH);
}
private boolean bedrockSettings() {
return renderBlocksSetting.getValue().equals(RenderBlocks.BEDROCK) || renderBlocksSetting.getValue().equals(RenderBlocks.BOTH);
}
@Override
public void onUpdate() {
if (safeHoles == null) {
safeHoles = new ConcurrentHashMap<>();
} else {
safeHoles.clear();
}
int range = (int) Math.ceil(renderDistance.getValue());
CrystalAura crystalAura = MODULE_MANAGER.getModuleT(CrystalAura.class);
List<BlockPos> blockPosList = crystalAura.getSphere(getPlayerPos(), range, range, false, true, 0);
for (BlockPos pos : blockPosList) {
// block gotta be air
if (!mc.world.getBlockState(pos).getBlock().equals(Blocks.AIR)) {
continue;
}
// block 1 above gotta be air
if (!mc.world.getBlockState(pos.add(0, 1, 0)).getBlock().equals(Blocks.AIR)) {
continue;
}
// block 2 above gotta be air
if (!mc.world.getBlockState(pos.add(0, 2, 0)).getBlock().equals(Blocks.AIR)) {
continue;
}
boolean isSafe = true;
boolean isBedrock = true;
for (BlockPos offset : surroundOffset) {
Block block = mc.world.getBlockState(pos.add(offset)).getBlock();
if (block != Blocks.BEDROCK) {
isBedrock = false;
}
if (block != Blocks.BEDROCK && block != Blocks.OBSIDIAN && block != Blocks.ENDER_CHEST && block != Blocks.ANVIL) {
isSafe = false;
break;
}
}
if (isSafe) {
safeHoles.put(pos, isBedrock);
}
}
}
@Override
public void onWorldRender(final RenderEvent event) {
if (mc.player == null || safeHoles == null) {
return;
}
if (safeHoles.isEmpty()) {
return;
}
KamiTessellator.prepare(GL11.GL_QUADS);
safeHoles.forEach((blockPos, isBedrock) -> {
switch (renderBlocksSetting.getValue()) {
case BOTH:
if (isBedrock) {
drawBox(blockPos, r2.getValue(), g2.getValue(), b2.getValue());
}
else {
drawBox(blockPos, r1.getValue(), g1.getValue(), b1.getValue());
}
break;
case OBBY:
if (!isBedrock) {
drawBox(blockPos, r1.getValue(), g1.getValue(), b1.getValue());
}
break;
case BEDROCK:
if (isBedrock) {
drawBox(blockPos, r2.getValue(), g2.getValue(), b2.getValue());
}
break;
}
});
KamiTessellator.release();
}
private void drawBox(BlockPos blockPos, int r, int g, int b) {
Color color = new Color(r, g, b, a0.getValue());
if (renderModeSetting.getValue().equals(RenderMode.DOWN)) {
KamiTessellator.drawBox(blockPos, color.getRGB(), GeometryMasks.Quad.DOWN);
} else if (renderModeSetting.getValue().equals(RenderMode.BLOCK)) {
KamiTessellator.drawBox(blockPos, color.getRGB(), GeometryMasks.Quad.ALL);
}
}
}

View File

@ -1,139 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.KamiMod
import me.zeroeightsix.kami.event.events.RenderEvent
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.module.modules.combat.CrystalAura
import me.zeroeightsix.kami.setting.Settings
import me.zeroeightsix.kami.util.GeometryMasks
import me.zeroeightsix.kami.util.KamiTessellator
import net.minecraft.init.Blocks
import net.minecraft.util.math.BlockPos
import org.lwjgl.opengl.GL11
import java.awt.Color
import java.util.concurrent.ConcurrentHashMap
import kotlin.math.ceil
/**
* Created 16 November 2019 by hub
* Updated by dominikaaaa on 15/12/19
*/
@Module.Info(
name = "HoleESP",
category = Module.Category.RENDER,
description = "Show safe holes for crystal pvp"
)
class HoleESP : Module() {
private val surroundOffset = arrayOf(
BlockPos(0, -1, 0), // down
BlockPos(0, 0, -1), // north
BlockPos(1, 0, 0), // east
BlockPos(0, 0, 1), // south
BlockPos(-1, 0, 0) // west
)
private val renderDistance = register(Settings.d("Render Distance", 8.0))
private val a0 = register(Settings.integerBuilder("Transparency").withMinimum(0).withValue(32).withMaximum(255).build())
private val r1 = register(Settings.integerBuilder("Red (Obby)").withMinimum(0).withValue(208).withMaximum(255).withVisibility { v: Int? -> obbySettings() }.build())
private val g1 = register(Settings.integerBuilder("Green (Obby)").withMinimum(0).withValue(144).withMaximum(255).withVisibility { v: Int? -> obbySettings() }.build())
private val b1 = register(Settings.integerBuilder("Blue (Obby)").withMinimum(0).withValue(255).withMaximum(255).withVisibility { v: Int? -> obbySettings() }.build())
private val r2 = register(Settings.integerBuilder("Red (Bedrock)").withMinimum(0).withValue(144).withMaximum(255).withVisibility { v: Int? -> bedrockSettings() }.build())
private val g2 = register(Settings.integerBuilder("Green (Bedrock)").withMinimum(0).withValue(144).withMaximum(255).withVisibility { v: Int? -> bedrockSettings() }.build())
private val b2 = register(Settings.integerBuilder("Blue (Bedrock)").withMinimum(0).withValue(255).withMaximum(255).withVisibility { v: Int? -> bedrockSettings() }.build())
private val renderModeSetting = register(Settings.e<RenderMode>("Render Mode", RenderMode.BLOCK))
private val renderBlocksSetting = register(Settings.e<RenderBlocks>("Render", RenderBlocks.BOTH))
private var safeHoles: ConcurrentHashMap<BlockPos, Boolean>? = null
private enum class RenderMode {
DOWN, BLOCK
}
private enum class RenderBlocks {
OBBY, BEDROCK, BOTH
}
private fun obbySettings(): Boolean {
return renderBlocksSetting.value == RenderBlocks.OBBY || renderBlocksSetting.value == RenderBlocks.BOTH
}
private fun bedrockSettings(): Boolean {
return renderBlocksSetting.value == RenderBlocks.BEDROCK || renderBlocksSetting.value == RenderBlocks.BOTH
}
override fun onUpdate() {
if (safeHoles == null) {
safeHoles = ConcurrentHashMap()
} else {
safeHoles!!.clear()
}
val range = ceil(renderDistance.value).toInt()
val crystalAura = KamiMod.MODULE_MANAGER.getModuleT(CrystalAura::class.java)
val blockPosList = crystalAura.getSphere(CrystalAura.getPlayerPos(), range.toFloat(), range, false, true, 0)
for (pos in blockPosList) {
// block gotta be air
if (mc.world.getBlockState(pos).block != Blocks.AIR) {
continue
}
// block 1 above gotta be air
if (mc.world.getBlockState(pos.add(0, 1, 0)).block != Blocks.AIR) {
continue
}
// block 2 above gotta be air
if (mc.world.getBlockState(pos.add(0, 2, 0)).block != Blocks.AIR) {
continue
}
var isSafe = true
var isBedrock = true
for (offset in surroundOffset) {
val block = mc.world.getBlockState(pos.add(offset)).block
if (block !== Blocks.BEDROCK) {
isBedrock = false
}
if (block !== Blocks.BEDROCK && block !== Blocks.OBSIDIAN && block !== Blocks.ENDER_CHEST && block !== Blocks.ANVIL) {
isSafe = false
break
}
}
if (isSafe) {
safeHoles!![pos] = isBedrock
}
}
}
override fun onWorldRender(event: RenderEvent) {
if (mc.player == null || safeHoles == null) {
return
}
if (safeHoles!!.isEmpty()) {
return
}
KamiTessellator.prepare(GL11.GL_QUADS)
safeHoles!!.forEach { (blockPos: BlockPos, isBedrock: Boolean) ->
when (renderBlocksSetting.value) {
RenderBlocks.BOTH -> if (isBedrock) {
drawBox(blockPos, r2.value, g2.value, b2.value)
} else {
drawBox(blockPos, r1.value, g1.value, b1.value)
}
RenderBlocks.OBBY -> if (!isBedrock) {
drawBox(blockPos, r1.value, g1.value, b1.value)
}
RenderBlocks.BEDROCK -> if (isBedrock) {
drawBox(blockPos, r2.value, g2.value, b2.value)
}
}
}
KamiTessellator.release()
}
private fun drawBox(blockPos: BlockPos, r: Int, g: Int, b: Int) {
val color = Color(r, g, b, a0.value)
if (renderModeSetting.value == RenderMode.DOWN) {
KamiTessellator.drawBox(blockPos, color.rgb, GeometryMasks.Quad.DOWN)
} else if (renderModeSetting.value == RenderMode.BLOCK) {
KamiTessellator.drawBox(blockPos, color.rgb, GeometryMasks.Quad.ALL)
}
}
}

View File

@ -0,0 +1,21 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* Created (partly) by Dewy on the 19th of April, 2020
*
* PLEASE NOTE: Just like xray, the overlay textures will break in a development environment.
*/
@Module.Info(
name = "HungerOverlay",
description = "Displays a helpful overlay over your hunger bar.",
category = Module.Category.PLAYER
)
public class HungerOverlay extends Module {
public Setting<Boolean> saturationOverlay = register(Settings.booleanBuilder("Saturation Overlay").withValue(true));
public Setting<Boolean> foodValueOverlay = register(Settings.booleanBuilder("Food Value Overlay").withValue(true));
public Setting<Boolean> foodExhaustionOverlay = register(Settings.booleanBuilder("Food Exhaustion Overlay").withValue(true));
}

View File

@ -1,24 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
/**
* Created (partly) by Dewy on the 19th of April, 2020
*
* PLEASE NOTE: Just like xray, the overlay textures will break in a development environment.
*/
@Module.Info(
name = "HungerOverlay",
description = "Displays a helpful overlay over your hunger bar.",
category = Module.Category.PLAYER
)
class HungerOverlay : Module() {
@JvmField
var saturationOverlay: Setting<Boolean> = register(Settings.booleanBuilder("Saturation Overlay").withValue(true))
@JvmField
var foodValueOverlay: Setting<Boolean> = register(Settings.booleanBuilder("Food Value Overlay").withValue(true))
@JvmField
var foodExhaustionOverlay: Setting<Boolean> = register(Settings.booleanBuilder("Food Exhaustion Overlay").withValue(true))
}

View File

@ -0,0 +1,25 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
/**
* @author 086
*/
@Module.Info(
name = "NoHurtCam",
category = Module.Category.RENDER,
description = "Disables the 'hurt' camera effect"
)
public class NoHurtCam extends Module {
private static NoHurtCam INSTANCE;
public NoHurtCam() {
INSTANCE = this;
}
public static boolean shouldDisable() {
return INSTANCE != null && INSTANCE.isEnabled();
}
}

View File

@ -1,26 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
/**
* @author 086
*/
@Module.Info(
name = "NoHurtCam",
category = Module.Category.RENDER,
description = "Disables the 'hurt' camera effect"
)
class NoHurtCam : Module() {
companion object {
private var INSTANCE: NoHurtCam? = null
@JvmStatic
fun shouldDisable(): Boolean {
return INSTANCE != null && INSTANCE!!.isEnabled
}
}
init {
INSTANCE = this
}
}

View File

@ -0,0 +1,67 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.event.events.WorldCheckLightForEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.*;
import net.minecraft.world.EnumSkyBlock;
import net.minecraftforge.client.event.RenderBlockOverlayEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
/**
* Created by 086 on 4/02/2018.
* Updated by dominikaaaa on 14/04/20
*
* Skylight Updates taken from https://github.com/fr1kin/ForgeHax/blob/1a4f98d/src/main/java/com/matt/forgehax/mods/NoSkylightUpdates.java
*/
@Module.Info(
name = "NoRender",
category = Module.Category.RENDER,
description = "Ignore entity spawn packets"
)
public class NoRender extends Module {
private Setting<Boolean> mob = register(Settings.b("Mob", false));
private Setting<Boolean> sand = register(Settings.b("Sand", false));
private Setting<Boolean> gentity = register(Settings.b("GEntity", false));
private Setting<Boolean> object = register(Settings.b("Object", false));
public Setting<Boolean> items = register(Settings.b("Items", false));
private Setting<Boolean> xp = register(Settings.b("XP", false));
private Setting<Boolean> paint = register(Settings.b("Paintings", false));
private Setting<Boolean> fire = register(Settings.b("Fire", true));
private Setting<Boolean> explosion = register(Settings.b("Explosions", true));
public Setting<Boolean> beacon = register(Settings.b("Beacon Beams", false));
private Setting<Boolean> skylight = register(Settings.b("Skylight Updates", false));
@EventHandler
public Listener<PacketEvent.Receive> receiveListener = new Listener<>(event -> {
Packet packet = event.getPacket();
if ((packet instanceof SPacketSpawnMob && mob.getValue()) ||
(packet instanceof SPacketSpawnGlobalEntity && gentity.getValue()) ||
(packet instanceof SPacketSpawnObject && object.getValue()) ||
(packet instanceof SPacketSpawnExperienceOrb && xp.getValue()) ||
(packet instanceof SPacketSpawnObject && sand.getValue()) ||
(packet instanceof SPacketExplosion && explosion.getValue()) ||
(packet instanceof SPacketSpawnPainting && paint.getValue()))
event.cancel();
});
@EventHandler
public Listener<RenderBlockOverlayEvent> blockOverlayEventListener = new Listener<>(event -> {
if (fire.getValue() && event.getOverlayType() == RenderBlockOverlayEvent.OverlayType.FIRE)
event.setCanceled(true);
});
@SubscribeEvent
public void onLightingUpdate(WorldCheckLightForEvent event) {
if (skylight.getValue() && event.getEnumSkyBlock() == EnumSkyBlock.SKY) {
event.setCanceled(true);
}
}
}

View File

@ -1,63 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.event.events.PacketEvent.Receive
import me.zeroeightsix.kami.event.events.WorldCheckLightForEvent
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.network.play.server.*
import net.minecraft.world.EnumSkyBlock
import net.minecraftforge.client.event.RenderBlockOverlayEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
/**
* Created by 086 on 4/02/2018.
* Updated by dominikaaaa on 14/04/20
*
* Skylight Updates taken from https://github.com/fr1kin/ForgeHax/blob/1a4f98d/src/main/java/com/matt/forgehax/mods/NoSkylightUpdates.java
*/
@Module.Info(
name = "NoRender",
category = Module.Category.RENDER,
description = "Ignore entity spawn packets"
)
class NoRender : Module() {
private val mob = register(Settings.b("Mob", false))
private val sand = register(Settings.b("Sand", false))
private val gEntity = register(Settings.b("GEntity", false))
private val `object` = register(Settings.b("Object", false))
@JvmField
var items: Setting<Boolean> = register(Settings.b("Items", false))
private val xp = register(Settings.b("XP", false))
private val paint = register(Settings.b("Paintings", false))
private val fire = register(Settings.b("Fire", true))
private val explosion = register(Settings.b("Explosions", true))
@JvmField
var beacon: Setting<Boolean> = register(Settings.b("Beacon Beams", false))
private val skylight = register(Settings.b("Skylight Updates", false))
@EventHandler
var receiveListener = Listener(EventHook { event: Receive ->
val packet = event.packet
if (packet is SPacketSpawnMob && mob.value ||
packet is SPacketSpawnGlobalEntity && gEntity.value ||
packet is SPacketSpawnObject && `object`.value ||
packet is SPacketSpawnExperienceOrb && xp.value ||
packet is SPacketSpawnObject && sand.value ||
packet is SPacketExplosion && explosion.value ||
packet is SPacketSpawnPainting && paint.value) event.cancel()
})
@EventHandler
var blockOverlayEventListener = Listener(EventHook { event: RenderBlockOverlayEvent -> if (fire.value && event.overlayType == RenderBlockOverlayEvent.OverlayType.FIRE) event.isCanceled = true })
@SubscribeEvent
fun onLightingUpdate(event: WorldCheckLightForEvent) {
if (skylight.value && event.enumSkyBlock == EnumSkyBlock.SKY) {
event.isCanceled = true
}
}
}

View File

@ -1,6 +1,6 @@
package me.zeroeightsix.kami.module.modules.render
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.module.Module;
/**
* Created by 086 on 24/12/2017.
@ -12,4 +12,5 @@ import me.zeroeightsix.kami.module.Module
category = Module.Category.RENDER,
description = "Previews shulkers in the game GUI"
)
class ShulkerPreview : Module()
public class ShulkerPreview extends Module {
}

View File

@ -0,0 +1,139 @@
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.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.ColourUtils;
import me.zeroeightsix.kami.util.GeometryMasks;
import me.zeroeightsix.kami.util.KamiTessellator;
import me.zeroeightsix.kami.util.Wrapper;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItemFrame;
import net.minecraft.entity.item.EntityMinecartChest;
import net.minecraft.item.ItemShulkerBox;
import net.minecraft.tileentity.*;
import net.minecraft.util.math.BlockPos;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
/**
* Created by 086 on 10/12/2017.
* Updated by dominikaaaa on 14/12/19
*/
@Module.Info(
name = "StorageESP",
description = "Draws nice little lines around storage items",
category = Module.Category.RENDER
)
public class StorageESP extends Module {
private Setting<Boolean> chest = register(Settings.b("Chest", true));
private Setting<Boolean> dispenser = register(Settings.b("Dispenser", true));
private Setting<Boolean> shulker = register(Settings.b("Shulker", true));
private Setting<Boolean> echest = register(Settings.b("Ender Chest", true));
private Setting<Boolean> furnace = register(Settings.b("Furnace", true));
private Setting<Boolean> hopper = register(Settings.b("Hopper", true));
private Setting<Boolean> cart = register(Settings.b("Minecart", true));
private Setting<Boolean> frame = register(Settings.b("Item Frame", true));
private int getTileEntityColor(TileEntity tileEntity) {
if (tileEntity instanceof TileEntityChest || tileEntity instanceof TileEntityDispenser)
return ColourUtils.Colors.ORANGE;
else if (tileEntity instanceof TileEntityShulkerBox)
return ColourUtils.Colors.RED;
else if (tileEntity instanceof TileEntityEnderChest)
return ColourUtils.Colors.PURPLE;
else if (tileEntity instanceof TileEntityFurnace)
return ColourUtils.Colors.GRAY;
else if (tileEntity instanceof TileEntityHopper)
return ColourUtils.Colors.DARK_RED;
else
return -1;
}
private int getEntityColor(Entity entity) {
if (entity instanceof EntityMinecartChest)
return ColourUtils.Colors.ORANGE;
else if (entity instanceof EntityItemFrame &&
((EntityItemFrame) entity).getDisplayedItem().getItem() instanceof ItemShulkerBox)
return ColourUtils.Colors.YELLOW;
else if (entity instanceof EntityItemFrame &&
(!(((EntityItemFrame) entity).getDisplayedItem().getItem() instanceof ItemShulkerBox)))
return ColourUtils.Colors.ORANGE;
else
return -1;
}
@Override
public void onWorldRender(RenderEvent event) {
ArrayList<Triplet<BlockPos, Integer, Integer>> a = new ArrayList<>();
GlStateManager.pushMatrix();
for (TileEntity tileEntity : Wrapper.getWorld().loadedTileEntityList) {
BlockPos pos = tileEntity.getPos();
int color = getTileEntityColor(tileEntity);
int side = GeometryMasks.Quad.ALL;
if (tileEntity instanceof TileEntityChest) {
TileEntityChest chest = (TileEntityChest) tileEntity;
// Leave only the colliding face and then flip the bits (~) to have ALL but that face
if (chest.adjacentChestZNeg != null) side = ~(side & GeometryMasks.Quad.NORTH);
if (chest.adjacentChestXPos != null) side = ~(side & GeometryMasks.Quad.EAST);
if (chest.adjacentChestZPos != null) side = ~(side & GeometryMasks.Quad.SOUTH);
if (chest.adjacentChestXNeg != null) side = ~(side & GeometryMasks.Quad.WEST);
}
if ((tileEntity instanceof TileEntityChest && chest.getValue()) || (tileEntity instanceof TileEntityDispenser && dispenser.getValue()) || (tileEntity instanceof TileEntityShulkerBox && shulker.getValue()) || (tileEntity instanceof TileEntityEnderChest && echest.getValue()) || (tileEntity instanceof TileEntityFurnace && furnace.getValue()) || (tileEntity instanceof TileEntityHopper && hopper.getValue()))
if (color != -1)
a.add(new Triplet<>(pos, color, side)); //GeometryTessellator.drawCuboid(event.getBuffer(), pos, GeometryMasks.Line.ALL, color);
}
for (Entity entity : Wrapper.getWorld().loadedEntityList) {
BlockPos pos = entity.getPosition();
int color = getEntityColor(entity);
if ((entity instanceof EntityItemFrame && frame.getValue()) || (entity instanceof EntityMinecartChest && cart.getValue()))
if (color != -1)
a.add(new Triplet<>(entity instanceof EntityItemFrame ? pos.add(0, -1, 0) : pos, color, GeometryMasks.Quad.ALL)); //GeometryTessellator.drawCuboid(event.getBuffer(), entity instanceof EntityItemFrame ? pos.add(0, -1, 0) : pos, GeometryMasks.Line.ALL, color);
}
KamiTessellator.prepare(GL11.GL_QUADS);
for (Triplet<BlockPos, Integer, Integer> pair : a)
KamiTessellator.drawBox(pair.getFirst(), changeAlpha(pair.getSecond(), 100), pair.getThird());
KamiTessellator.release();
GlStateManager.popMatrix();
GlStateManager.enableTexture2D();
}
int changeAlpha(int origColor, int userInputedAlpha) {
origColor = origColor & 0x00ffffff; //drop the previous alpha value
return (userInputedAlpha << 24) | origColor; //add the one the user inputted
}
public class Triplet<T, U, V> {
private final T first;
private final U second;
private final V third;
public Triplet(T first, U second, V third) {
this.first = first;
this.second = second;
this.third = third;
}
public T getFirst() {
return first;
}
public U getSecond() {
return second;
}
public V getThird() {
return third;
}
}
}

View File

@ -1,83 +0,0 @@
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.Settings
import me.zeroeightsix.kami.util.ColourUtils
import me.zeroeightsix.kami.util.GeometryMasks
import me.zeroeightsix.kami.util.KamiTessellator
import me.zeroeightsix.kami.util.Wrapper
import net.minecraft.client.renderer.GlStateManager
import net.minecraft.entity.Entity
import net.minecraft.entity.item.EntityItemFrame
import net.minecraft.entity.item.EntityMinecartChest
import net.minecraft.item.ItemShulkerBox
import net.minecraft.tileentity.*
import net.minecraft.util.math.BlockPos
import org.lwjgl.opengl.GL11
import java.util.*
/**
* Created by 086 on 10/12/2017.
* Updated by dominikaaaa on 14/12/19
*/
@Module.Info(
name = "StorageESP",
description = "Draws nice little lines around storage items",
category = Module.Category.RENDER
)
class StorageESP : Module() {
private val chest = register(Settings.b("Chest", true))
private val dispenser = register(Settings.b("Dispenser", true))
private val shulker = register(Settings.b("Shulker", true))
private val enderChest = register(Settings.b("Ender Chest", true))
private val furnace = register(Settings.b("Furnace", true))
private val hopper = register(Settings.b("Hopper", true))
private val cart = register(Settings.b("Minecart", true))
private val frame = register(Settings.b("Item Frame", true))
private fun getTileEntityColor(tileEntity: TileEntity): Int {
return if (tileEntity is TileEntityChest || tileEntity is TileEntityDispenser) ColourUtils.Colors.ORANGE else if (tileEntity is TileEntityShulkerBox) ColourUtils.Colors.RED else if (tileEntity is TileEntityEnderChest) ColourUtils.Colors.PURPLE else if (tileEntity is TileEntityFurnace) ColourUtils.Colors.GRAY else if (tileEntity is TileEntityHopper) ColourUtils.Colors.DARK_RED else -1
}
private fun getEntityColor(entity: Entity): Int {
return if (entity is EntityMinecartChest) ColourUtils.Colors.ORANGE else if (entity is EntityItemFrame &&
entity.displayedItem.getItem() is ItemShulkerBox) ColourUtils.Colors.YELLOW else if (entity is EntityItemFrame &&
entity.displayedItem.getItem() !is ItemShulkerBox) ColourUtils.Colors.ORANGE else -1
}
override fun onWorldRender(event: RenderEvent) {
val a = ArrayList<Triplet<BlockPos, Int, Int>>()
GlStateManager.pushMatrix()
for (tileEntity in Wrapper.getWorld().loadedTileEntityList) {
val pos = tileEntity.pos
val color = getTileEntityColor(tileEntity)
var side = GeometryMasks.Quad.ALL
if (tileEntity is TileEntityChest) {
// Leave only the colliding face and then flip the bits (~) to have ALL but that face
if (tileEntity.adjacentChestZNeg != null) side = (side and GeometryMasks.Quad.NORTH).inv()
if (tileEntity.adjacentChestXPos != null) side = (side and GeometryMasks.Quad.EAST).inv()
if (tileEntity.adjacentChestZPos != null) side = (side and GeometryMasks.Quad.SOUTH).inv()
if (tileEntity.adjacentChestXNeg != null) side = (side and GeometryMasks.Quad.WEST).inv()
}
if (tileEntity is TileEntityChest && chest.value || tileEntity is TileEntityDispenser && dispenser.value || tileEntity is TileEntityShulkerBox && shulker.value || tileEntity is TileEntityEnderChest && enderChest.value || tileEntity is TileEntityFurnace && furnace.value || tileEntity is TileEntityHopper && hopper.value) if (color != -1) a.add(Triplet(pos, color, side)) //GeometryTessellator.drawCuboid(event.getBuffer(), pos, GeometryMasks.Line.ALL, color);
}
for (entity in Wrapper.getWorld().loadedEntityList) {
val pos = entity.position
val color = getEntityColor(entity)
if (entity is EntityItemFrame && frame.value || entity is EntityMinecartChest && cart.value) if (color != -1) a.add(Triplet(if (entity is EntityItemFrame) pos.add(0, -1, 0) else pos, color, GeometryMasks.Quad.ALL)) //GeometryTessellator.drawCuboid(event.getBuffer(), entity instanceof EntityItemFrame ? pos.add(0, -1, 0) : pos, GeometryMasks.Line.ALL, color);
}
KamiTessellator.prepare(GL11.GL_QUADS)
for (pair in a) KamiTessellator.drawBox(pair.first, changeAlpha(pair.second, 100), pair.third)
KamiTessellator.release()
GlStateManager.popMatrix()
GlStateManager.enableTexture2D()
}
private fun changeAlpha(origColor: Int, userInputedAlpha: Int): Int {
var origColor = origColor
origColor = origColor and 0x00ffffff //drop the previous alpha value
return userInputedAlpha shl 24 or origColor //add the one the user inputted
}
inner class Triplet<T, U, V>(val first: T, val second: U, val third: V)
}

View File

@ -0,0 +1,28 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.KamiMod;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.util.Friends;
import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.scoreboard.ScorePlayerTeam;
@Module.Info(
name = "TabFriends",
description = "Highlights friends in the tab menu",
category = Module.Category.RENDER,
showOnArray = Module.ShowOnArray.OFF
)
public class TabFriends extends Module {
public static TabFriends INSTANCE;
public TabFriends() {
TabFriends.INSTANCE = this;
}
public static String getPlayerName(NetworkPlayerInfo networkPlayerInfoIn) {
String dname = networkPlayerInfoIn.getDisplayName() != null ? networkPlayerInfoIn.getDisplayName().getFormattedText() : ScorePlayerTeam.formatPlayerName(networkPlayerInfoIn.getPlayerTeam(), networkPlayerInfoIn.getGameProfile().getName());
if (Friends.isFriend(dname)) return String.format("%sa%s", KamiMod.colour, dname);
return dname;
}
}

View File

@ -1,29 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.KamiMod
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.util.Friends
import net.minecraft.client.network.NetworkPlayerInfo
import net.minecraft.scoreboard.ScorePlayerTeam
@Module.Info(
name = "TabFriends",
description = "Highlights friends in the tab menu",
category = Module.Category.RENDER,
showOnArray = Module.ShowOnArray.OFF
)
class TabFriends : Module() {
companion object {
@JvmField
var INSTANCE: TabFriends? = null
@JvmStatic
fun getPlayerName(networkPlayerInfoIn: NetworkPlayerInfo): String {
val dname = if (networkPlayerInfoIn.displayName != null) networkPlayerInfoIn.displayName!!.formattedText else ScorePlayerTeam.formatPlayerName(networkPlayerInfoIn.playerTeam, networkPlayerInfoIn.gameProfile.name)
return if (Friends.isFriend(dname)) String.format("%sa%s", KamiMod.colour, dname) else dname
}
}
init {
INSTANCE = this
}
}

View File

@ -0,0 +1,191 @@
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.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;
import me.zeroeightsix.kami.util.HueCycler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.math.Vec3d;
import org.lwjgl.opengl.GL11;
import static me.zeroeightsix.kami.util.ColourConverter.rgbToInt;
/**
* Created by 086 on 11/12/2017.
* <p>
* Kurisu Makise is best girl
*/
@Module.Info(
name = "Tracers",
description = "Draws lines to other living entities",
category = Module.Category.RENDER
)
public class Tracers extends Module {
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<Boolean> renderInvis = register(Settings.b("Invisible", false));
private Setting<Boolean> customColours = register(Settings.booleanBuilder("Custom Colours").withValue(true).build());
private Setting<Float> opacity = register(Settings.floatBuilder("Opacity").withRange(0f, 1f).withValue(1f).build());
private Setting<Integer> r = register(Settings.integerBuilder("Red").withMinimum(0).withValue(155).withMaximum(255).withVisibility(v -> customColours.getValue()).build());
private Setting<Integer> g = register(Settings.integerBuilder("Green").withMinimum(0).withValue(144).withMaximum(255).withVisibility(v -> customColours.getValue()).build());
private Setting<Integer> b = register(Settings.integerBuilder("Blue").withMinimum(0).withValue(255).withMaximum(255).withVisibility(v -> customColours.getValue()).build());
HueCycler cycler = new HueCycler(3600);
@Override
public void onWorldRender(RenderEvent event) {
GlStateManager.pushMatrix();
Minecraft.getMinecraft().world.loadedEntityList.stream()
.filter(EntityUtil::isLiving)
.filter(entity -> {
if (entity.isInvisible()) {
return renderInvis.getValue();
}
return true;
})
.filter(entity -> !EntityUtil.isFakeLocalPlayer(entity))
.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.getValue()) return;
if (customColours.getValue()) {
colour = rgbToInt(r.getValue(), g.getValue(), b.getValue(), (int) (opacity.getValue() * 255f));
} else {
colour = cycler.current();
}
} else {
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.getValue());
});
GlStateManager.popMatrix();
}
@Override
public void onUpdate() {
cycler.next();
}
private void drawRainbowToEntity(Entity entity, float opacity) {
Vec3d eyes = new Vec3d(0, 0, 1)
.rotatePitch(-(float) Math
.toRadians(Minecraft.getMinecraft().player.rotationPitch))
.rotateYaw(-(float) Math
.toRadians(Minecraft.getMinecraft().player.rotationYaw));
double[] xyz = interpolate(entity);
double posx = xyz[0];
double posy = xyz[1];
double posz = xyz[2];
double posx2 = eyes.x;
double posy2 = eyes.y + mc.player.getEyeHeight();
double posz2 = eyes.z;
GL11.glBlendFunc(770, 771);
GL11.glEnable(GL11.GL_BLEND);
GL11.glLineWidth(1.5f);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
cycler.reset();
cycler.setNext(opacity);
GlStateManager.disableLighting();
GL11.glLoadIdentity();
mc.entityRenderer.orientCamera(mc.getRenderPartialTicks());
GL11.glBegin(GL11.GL_LINES);
{
GL11.glVertex3d(posx, posy, posz);
GL11.glVertex3d(posx2, posy2, posz2);
cycler.setNext(opacity);
GL11.glVertex3d(posx2, posy2, posz2);
GL11.glVertex3d(posx2, posy2, posz2);
}
GL11.glEnd();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_BLEND);
GL11.glColor3d(1d, 1d, 1d);
GlStateManager.enableLighting();
}
private int getColour(Entity entity) {
if (entity instanceof EntityPlayer) {
return Friends.isFriend(entity.getName()) ? ColourUtils.Colors.RAINBOW : ColourUtils.Colors.WHITE;
} else {
if (EntityUtil.isPassive(entity)) return ColourUtils.Colors.GREEN;
else
return ColourUtils.Colors.RED;
}
}
public static double interpolate(double now, double then) {
return then + (now - then) * mc.getRenderPartialTicks();
}
public static double[] interpolate(Entity entity) {
double posX = interpolate(entity.posX, entity.lastTickPosX) - mc.getRenderManager().renderPosX;
double posY = interpolate(entity.posY, entity.lastTickPosY) - mc.getRenderManager().renderPosY;
double posZ = interpolate(entity.posZ, entity.lastTickPosZ) - mc.getRenderManager().renderPosZ;
return new double[]{posX, posY, posZ};
}
public static void drawLineToEntity(Entity e, float red, float green, float blue, float opacity) {
double[] xyz = interpolate(e);
drawLine(xyz[0], xyz[1], xyz[2], e.height, red, green, blue, opacity);
}
public static void drawLine(double posx, double posy, double posz, double up, float red, float green, float blue, float opacity) {
Vec3d eyes = new Vec3d(0, 0, 1)
.rotatePitch(-(float) Math
.toRadians(Minecraft.getMinecraft().player.rotationPitch))
.rotateYaw(-(float) Math
.toRadians(Minecraft.getMinecraft().player.rotationYaw));
drawLineFromPosToPos(eyes.x, eyes.y + mc.player.getEyeHeight(), eyes.z, posx, posy, posz, up, red, green, blue, opacity);
}
public static void drawLineFromPosToPos(double posx, double posy, double posz, double posx2, double posy2, double posz2, double up, float red, float green, float blue, float opacity) {
GL11.glBlendFunc(770, 771);
GL11.glLineWidth(1.5f);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glColor4f(red, green, blue, opacity);
GlStateManager.disableLighting();
GL11.glLoadIdentity();
mc.entityRenderer.orientCamera(mc.getRenderPartialTicks());
GL11.glBegin(GL11.GL_LINES);
{
GL11.glVertex3d(posx, posy, posz);
GL11.glVertex3d(posx2, posy2, posz2);
GL11.glVertex3d(posx2, posy2, posz2);
GL11.glVertex3d(posx2, posy2 + up, posz2);
}
GL11.glEnd();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(true);
GL11.glColor3d(1d, 1d, 1d);
GlStateManager.enableLighting();
}
}

View File

@ -1,176 +0,0 @@
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.Settings
import me.zeroeightsix.kami.util.*
import net.minecraft.client.Minecraft
import net.minecraft.client.renderer.GlStateManager
import net.minecraft.entity.Entity
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.util.math.Vec3d
import org.lwjgl.opengl.GL11
/**
* Created by 086 on 11/12/2017.
*
*
* Kurisu Makise is best girl
*/
@Module.Info(
name = "Tracers",
description = "Draws lines to other living entities",
category = Module.Category.RENDER
)
class Tracers : Module() {
private val players = register(Settings.b("Players", true))
private val friends = register(Settings.b("Friends", true))
private val animals = register(Settings.b("Animals", false))
private val mobs = register(Settings.b("Mobs", false))
private val range = register(Settings.d("Range", 200.0))
private val renderInvis = register(Settings.b("Invisible", false))
private val customColours = register(Settings.booleanBuilder("Custom Colours").withValue(true).build())
private val opacity = register(Settings.floatBuilder("Opacity").withRange(0f, 1f).withValue(1f).build())
private val r = register(Settings.integerBuilder("Red").withMinimum(0).withValue(155).withMaximum(255).withVisibility { v: Int? -> customColours.value }.build())
private val g = register(Settings.integerBuilder("Green").withMinimum(0).withValue(144).withMaximum(255).withVisibility { v: Int? -> customColours.value }.build())
private val b = register(Settings.integerBuilder("Blue").withMinimum(0).withValue(255).withMaximum(255).withVisibility { v: Int? -> customColours.value }.build())
private var cycler = HueCycler(3600)
override fun onWorldRender(event: RenderEvent) {
GlStateManager.pushMatrix()
Minecraft.getMinecraft().world.loadedEntityList.stream()
.filter { e: Entity? -> EntityUtil.isLiving(e) }
.filter { entity: Entity ->
if (entity.isInvisible) {
return@filter renderInvis.value
}
true
}
.filter { entity: Entity? -> !EntityUtil.isFakeLocalPlayer(entity) }
.filter { entity: Entity -> if (entity is EntityPlayer) players.value && mc.player !== entity else if (EntityUtil.isPassive(entity)) animals.value else mobs.value }
.filter { entity: Entity? -> mc.player.getDistance(entity) < range.value }
.forEach { entity: Entity ->
var colour = getColour(entity)
colour = if (colour == ColourUtils.Colors.RAINBOW) {
if (!friends.value) return@forEach
if (customColours.value) {
ColourConverter.rgbToInt(r.value, g.value, b.value, (opacity.value * 255f).toInt())
} else {
cycler.current()
}
} else {
cycler.current()
}
val r = (colour ushr 16 and 0xFF) / 255f
val g = (colour ushr 8 and 0xFF) / 255f
val b = (colour and 0xFF) / 255f
drawLineToEntity(entity, r, g, b, opacity.value)
}
GlStateManager.popMatrix()
}
override fun onUpdate() {
cycler.next()
}
private fun drawRainbowToEntity(entity: Entity, opacity: Float) {
val eyes = Vec3d(0.0, 0.0, 1.0)
.rotatePitch((-Math
.toRadians(Minecraft.getMinecraft().player.rotationPitch.toDouble())).toFloat())
.rotateYaw((-Math
.toRadians(Minecraft.getMinecraft().player.rotationYaw.toDouble())).toFloat())
val xyz = interpolate(entity)
val posx = xyz[0]
val posy = xyz[1]
val posz = xyz[2]
val posx2 = eyes.x
val posy2 = eyes.y + mc.player.getEyeHeight()
val posz2 = eyes.z
GL11.glBlendFunc(770, 771)
GL11.glEnable(GL11.GL_BLEND)
GL11.glLineWidth(1.5f)
GL11.glDisable(GL11.GL_TEXTURE_2D)
GL11.glDisable(GL11.GL_DEPTH_TEST)
GL11.glDepthMask(false)
cycler.reset()
cycler.setNext(opacity)
GlStateManager.disableLighting()
GL11.glLoadIdentity()
mc.entityRenderer.orientCamera(mc.renderPartialTicks)
GL11.glBegin(GL11.GL_LINES)
run {
GL11.glVertex3d(posx, posy, posz)
GL11.glVertex3d(posx2, posy2, posz2)
cycler.setNext(opacity)
GL11.glVertex3d(posx2, posy2, posz2)
GL11.glVertex3d(posx2, posy2, posz2)
}
GL11.glEnd()
GL11.glEnable(GL11.GL_TEXTURE_2D)
GL11.glEnable(GL11.GL_DEPTH_TEST)
GL11.glDepthMask(true)
GL11.glDisable(GL11.GL_BLEND)
GL11.glColor3d(1.0, 1.0, 1.0)
GlStateManager.enableLighting()
}
private fun getColour(entity: Entity): Int {
return if (entity is EntityPlayer) {
if (Friends.isFriend(entity.getName())) ColourUtils.Colors.RAINBOW else ColourUtils.Colors.WHITE
} else {
if (EntityUtil.isPassive(entity)) ColourUtils.Colors.GREEN else ColourUtils.Colors.RED
}
}
companion object {
private fun interpolate(now: Double, then: Double): Double {
return then + (now - then) * mc.renderPartialTicks
}
fun interpolate(entity: Entity): DoubleArray {
val posX = interpolate(entity.posX, entity.lastTickPosX) - mc.getRenderManager().renderPosX
val posY = interpolate(entity.posY, entity.lastTickPosY) - mc.getRenderManager().renderPosY
val posZ = interpolate(entity.posZ, entity.lastTickPosZ) - mc.getRenderManager().renderPosZ
return doubleArrayOf(posX, posY, posZ)
}
fun drawLineToEntity(e: Entity, red: Float, green: Float, blue: Float, opacity: Float) {
val xyz = interpolate(e)
drawLine(xyz[0], xyz[1], xyz[2], e.height.toDouble(), red, green, blue, opacity)
}
private fun drawLine(posx: Double, posy: Double, posz: Double, up: Double, red: Float, green: Float, blue: Float, opacity: Float) {
val eyes = Vec3d(0.0, 0.0, 1.0)
.rotatePitch((-Math
.toRadians(Minecraft.getMinecraft().player.rotationPitch.toDouble())).toFloat())
.rotateYaw((-Math
.toRadians(Minecraft.getMinecraft().player.rotationYaw.toDouble())).toFloat())
drawLineFromPosToPos(eyes.x, eyes.y + mc.player.getEyeHeight(), eyes.z, posx, posy, posz, up, red, green, blue, opacity)
}
@JvmStatic
fun drawLineFromPosToPos(posx: Double, posy: Double, posz: Double, posx2: Double, posy2: Double, posz2: Double, up: Double, red: Float, green: Float, blue: Float, opacity: Float) {
GL11.glBlendFunc(770, 771)
GL11.glLineWidth(1.5f)
GL11.glDisable(GL11.GL_TEXTURE_2D)
GL11.glDisable(GL11.GL_DEPTH_TEST)
GL11.glDepthMask(false)
GL11.glColor4f(red, green, blue, opacity)
GlStateManager.disableLighting()
GL11.glLoadIdentity()
mc.entityRenderer.orientCamera(mc.renderPartialTicks)
GL11.glBegin(GL11.GL_LINES)
run {
GL11.glVertex3d(posx, posy, posz)
GL11.glVertex3d(posx2, posy2, posz2)
GL11.glVertex3d(posx2, posy2, posz2)
GL11.glVertex3d(posx2, posy2 + up, posz2)
}
GL11.glEnd()
GL11.glEnable(GL11.GL_TEXTURE_2D)
GL11.glEnable(GL11.GL_DEPTH_TEST)
GL11.glDepthMask(true)
GL11.glColor3d(1.0, 1.0, 1.0)
GlStateManager.enableLighting()
}
}
}

View File

@ -0,0 +1,182 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.KamiMod;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* Created by 20kdc on 15/02/2020.
* Updated by dominikaaaa on 17/02/20
* Note for anybody using this in a development environment: THIS DOES NOT WORK. It will lag and the texture will break
*/
@Module.Info(
name = "XRay",
category = Module.Category.RENDER,
description = "See through common blocks!")
@EventBusSubscriber(modid = KamiMod.MODID
)
public class XRay extends Module {
// A default reasonable configuration for the XRay. Most people will want to use it like this.
private static final String DEFAULT_XRAY_CONFIG = "minecraft:grass,minecraft:dirt,minecraft:netherrack,minecraft:gravel,minecraft:sand,minecraft:stone";
// Split by ',' & each element trimmed (this is a bit weird but it works for now?)
private Setting<String> hiddenBlockNames = register(Settings.stringBuilder("HiddenBlocks").withValue(DEFAULT_XRAY_CONFIG).withConsumer((old, value) -> {
refreshHiddenBlocksSet(value);
if (isEnabled())
mc.renderGlobal.loadRenderers();
}).build());
public Setting<Boolean> invert = register(Settings.booleanBuilder("Invert").withValue(false).withConsumer((old, value) -> {
invertStatic = value;
if (isEnabled())
mc.renderGlobal.loadRenderers();
}).build());
private Setting<Boolean> outlines = register(Settings.booleanBuilder("Outlines").withValue(true).withConsumer((old, value) -> {
outlinesStatic = value;
if (isEnabled())
mc.renderGlobal.loadRenderers();
}).build());
// A static mirror of the state.
private static Set<Block> hiddenBlocks = Collections.synchronizedSet(new HashSet<>());
private static boolean invertStatic, outlinesStatic = true;
// This is the state used for hidden blocks.
private static IBlockState transparentState;
// This is used as part of a mechanism to make the Minecraft renderer play along with the XRay.
// Essentially, the XRay primitive is just a block state transformer.
// Then this implements a custom block that the block state transformer can use for hidden blocks.
public static Block transparentBlock;
public XRay() {
invertStatic = invert.getValue();
outlinesStatic = outlines.getValue();
refreshHiddenBlocksSet(hiddenBlockNames.getValue());
}
// Get hidden block list for command display
public String extGet() {
return extGetInternal(null);
}
// Add entry by arbitrary user-provided string
public void extAdd(String s) {
hiddenBlockNames.setValue(extGetInternal(null) + ", " + s);
}
// Remove entry by arbitrary user-provided string
public void extRemove(String s) {
hiddenBlockNames.setValue(extGetInternal(Block.getBlockFromName(s)));
}
// Clears the list.
public void extClear() {
hiddenBlockNames.setValue("");
}
// Resets the list to default
public void extDefaults() { extClear(); extAdd(DEFAULT_XRAY_CONFIG); }
// Set the list to 1 value
public void extSet(String s) { extClear(); extAdd(s); }
private String extGetInternal(Block filter) {
StringBuilder sb = new StringBuilder();
boolean notFirst = false;
for (Block b : hiddenBlocks) {
if (b == filter)
continue;
if (notFirst)
sb.append(", ");
notFirst = true;
sb.append(Block.REGISTRY.getNameForObject(b));
}
return sb.toString();
}
private void refreshHiddenBlocksSet(String v) {
hiddenBlocks.clear();
for (String s : v.split(",")) {
String s2 = s.trim();
Block block = Block.getBlockFromName(s2);
if (block != null)
hiddenBlocks.add(block);
}
}
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
transparentBlock = new Block(Material.GLASS) {
// did you know this name's new
@Override
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT;
}
// Not opaque so other materials (such as, of course, ores) will render
@Override
public boolean isOpaqueCube(IBlockState blah) {
return false;
}
// Essentially, the hidden-block world should be a projected grid-like thing...?
@Override
public boolean shouldSideBeRendered(IBlockState blah, IBlockAccess w, BlockPos pos, EnumFacing side) {
BlockPos adj = pos.offset(side);
IBlockState other = w.getBlockState(adj);
// this directly adj. to this must never be rendered
if (other.getBlock() == this)
return false;
// if it contacts something opaque, don't render as we'll probably accidentally make it harder to see
return !other.isOpaqueCube();
}
};
transparentBlock.setRegistryName("kami_xray_transparent");
transparentState = transparentBlock.getDefaultState();
event.getRegistry().registerAll(transparentBlock);
}
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event) {
// this runs after transparentBlock is set, right?
event.getRegistry().registerAll(new ItemBlock(transparentBlock).setRegistryName(transparentBlock.getRegistryName()));
}
public static IBlockState transform(IBlockState input) {
Block b = input.getBlock();
boolean hide = hiddenBlocks.contains(b);
if (invertStatic)
hide = !hide;
if (hide) {
IBlockState target = Blocks.AIR.getDefaultState();
if (outlinesStatic && (transparentState != null))
target = transparentState;
return target;
}
return input;
}
@Override
protected void onEnable() {
// This is important because otherwise the changes in ChunkCache behavior won't propagate.
// Also needs to be done if shouldHide effects change.
mc.renderGlobal.loadRenderers();
}
@Override
protected void onDisable() {
// This is important because otherwise the changes in ChunkCache behavior won't propagate.
// Also needs to be done if shouldHide effects change.
mc.renderGlobal.loadRenderers();
}
}

View File

@ -1,183 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.KamiMod
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Setting
import me.zeroeightsix.kami.setting.Settings
import net.minecraft.block.Block
import net.minecraft.block.material.Material
import net.minecraft.block.state.IBlockState
import net.minecraft.init.Blocks
import net.minecraft.item.Item
import net.minecraft.item.ItemBlock
import net.minecraft.util.BlockRenderLayer
import net.minecraft.util.EnumFacing
import net.minecraft.util.math.BlockPos
import net.minecraft.world.IBlockAccess
import net.minecraftforge.event.RegistryEvent
import net.minecraftforge.fml.common.Mod.EventBusSubscriber
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.util.*
/**
* Created by 20kdc on 15/02/2020.
* Updated by dominikaaaa on 17/02/20
* Note for anybody using this in a development environment: THIS DOES NOT WORK. It will lag and the texture will break
*/
@Module.Info(
name = "XRay",
category = Module.Category.RENDER,
description = "See through common blocks!"
)
@EventBusSubscriber(modid = KamiMod.MODID)
class XRay : Module() {
// Split by ',' & each element trimmed (this is a bit weird but it works for now?)
private val hiddenBlockNames = register(Settings.stringBuilder("HiddenBlocks").withValue(DEFAULT_XRAY_CONFIG).withConsumer { old: String?, value: String ->
refreshHiddenBlocksSet(value)
if (isEnabled) mc.renderGlobal.loadRenderers()
}.build())
@JvmField
var invert: Setting<Boolean> = register(Settings.booleanBuilder("Invert").withValue(false).withConsumer { old: Boolean?, value: Boolean ->
invertStatic = value
if (isEnabled) mc.renderGlobal.loadRenderers()
}.build())
private val outlines = register(Settings.booleanBuilder("Outlines").withValue(true).withConsumer { old: Boolean?, value: Boolean ->
outlinesStatic = value
if (isEnabled) mc.renderGlobal.loadRenderers()
}.build())
// Get hidden block list for command display
fun extGet(): String {
return extGetInternal(null)
}
// Add entry by arbitrary user-provided string
fun extAdd(s: String) {
hiddenBlockNames.value = extGetInternal(null) + ", " + s
}
// Remove entry by arbitrary user-provided string
fun extRemove(s: String?) {
hiddenBlockNames.value = extGetInternal(Block.getBlockFromName(s))
}
// Clears the list.
fun extClear() {
hiddenBlockNames.value = ""
}
// Resets the list to default
fun extDefaults() {
extClear()
extAdd(DEFAULT_XRAY_CONFIG)
}
// Set the list to 1 value
fun extSet(s: String) {
extClear()
extAdd(s)
}
private fun extGetInternal(filter: Block?): String {
val sb = StringBuilder()
var notFirst = false
for (b in hiddenBlocks) {
if (b === filter) continue
if (notFirst) sb.append(", ")
notFirst = true
sb.append(Block.REGISTRY.getNameForObject(b))
}
return sb.toString()
}
private fun refreshHiddenBlocksSet(v: String) {
hiddenBlocks.clear()
for (s in v.split(",").toTypedArray()) {
val s2 = s.trim { it <= ' ' }
val block = Block.getBlockFromName(s2)
if (block != null) hiddenBlocks.add(block)
}
}
override fun onEnable() {
// This is important because otherwise the changes in ChunkCache behavior won't propagate.
// Also needs to be done if shouldHide effects change.
mc.renderGlobal.loadRenderers()
}
override fun onDisable() {
// This is important because otherwise the changes in ChunkCache behavior won't propagate.
// Also needs to be done if shouldHide effects change.
mc.renderGlobal.loadRenderers()
}
companion object {
// A default reasonable configuration for the XRay. Most people will want to use it like this.
private const val DEFAULT_XRAY_CONFIG = "minecraft:grass,minecraft:dirt,minecraft:netherrack,minecraft:gravel,minecraft:sand,minecraft:stone"
// A static mirror of the state.
private val hiddenBlocks = Collections.synchronizedSet(HashSet<Block>())
private var invertStatic: Boolean = false
private var outlinesStatic = true
// This is the state used for hidden blocks.
private var transparentState: IBlockState? = null
// This is used as part of a mechanism to make the Minecraft renderer play along with the XRay.
// Essentially, the XRay primitive is just a block state transformer.
// Then this implements a custom block that the block state transformer can use for hidden blocks.
var transparentBlock: Block? = null
@SubscribeEvent
fun registerBlocks(event: RegistryEvent.Register<Block?>) {
transparentBlock = object : Block(Material.GLASS) {
// did you know this name's new
override fun getRenderLayer(): BlockRenderLayer {
return BlockRenderLayer.CUTOUT
}
// Not opaque so other materials (such as, of course, ores) will render
override fun isOpaqueCube(blah: IBlockState): Boolean {
return false
}
// Essentially, the hidden-block world should be a projected grid-like thing...?
override fun shouldSideBeRendered(blah: IBlockState, w: IBlockAccess, pos: BlockPos, side: EnumFacing): Boolean {
val adj = pos.offset(side)
val other = w.getBlockState(adj)
// this directly adj. to this must never be rendered
return if (other.block === this) false else !other.isOpaqueCube
// if it contacts something opaque, don't render as we'll probably accidentally make it harder to see
}
}
(transparentBlock as Block).setRegistryName("kami_xray_transparent")
transparentState = (transparentBlock as Block).defaultState
event.registry.registerAll(transparentBlock)
}
@SubscribeEvent
fun registerItems(event: RegistryEvent.Register<Item?>) {
// this runs after transparentBlock is set, right?
event.registry.registerAll(ItemBlock(transparentBlock).setRegistryName(transparentBlock!!.registryName))
}
@JvmStatic
fun transform(input: IBlockState): IBlockState? {
val b = input.block
var hide = hiddenBlocks.contains(b)
if (invertStatic) hide = !hide
if (hide) {
var target = Blocks.AIR.defaultState
if (outlinesStatic && transparentState != null) target = transparentState
return target
}
return input
}
}
init {
invertStatic = invert.value
outlinesStatic = outlines.value
refreshHiddenBlocksSet(hiddenBlockNames.value)
}
}

View File

@ -0,0 +1,47 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* @author dominikaaaa
* Created by dominikaaaa on 20/12/19
* Updated by dominikaaaa on 22/12/19
*/
@Module.Info(
name = "Zoom",
category = Module.Category.RENDER,
description = "Configures FOV",
showOnArray = Module.ShowOnArray.OFF
)
public class Zoom extends Module {
private float fov = 0;
private float sensi = 0;
private Setting<Integer> fovChange = register(Settings.integerBuilder("FOV").withMinimum(30).withValue(30).withMaximum(150).build());
private Setting<Float> sensChange = register(Settings.floatBuilder("Sensitivity").withMinimum(0.25F).withValue(1.3F).withMaximum(2F).build());
private Setting<Boolean> smoothCamera = register(Settings.b("Cinematic Camera", true));
private Setting<Boolean> sens = register(Settings.b("Sensitivity", true));
public void onEnable() {
if (mc.player == null) return;
fov = mc.gameSettings.fovSetting;
sensi = mc.gameSettings.mouseSensitivity;
if (smoothCamera.getValue()) mc.gameSettings.smoothCamera = true;
}
public void onDisable() {
mc.gameSettings.fovSetting = fov;
mc.gameSettings.mouseSensitivity = sensi;
if (smoothCamera.getValue()) mc.gameSettings.smoothCamera = false;
}
public void onUpdate() {
if (mc.player == null) return;
mc.gameSettings.fovSetting = fovChange.getValue();
mc.gameSettings.smoothCamera = smoothCamera.getValue();
if (sens.getValue()) mc.gameSettings.mouseSensitivity = sensi * sensChange.getValue();
}
}

View File

@ -1,38 +0,0 @@
package me.zeroeightsix.kami.module.modules.render
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
/**
* @author dominikaaaa
* Created by dominikaaaa on 20/12/19
* Updated by dominikaaaa on 22/12/19
*/
@Module.Info(name = "Zoom", category = Module.Category.RENDER, description = "Configures FOV", showOnArray = Module.ShowOnArray.OFF)
class Zoom : Module() {
private var fov = 0f
private var sensi = 0f
private val fovChange = register(Settings.integerBuilder("FOV").withMinimum(30).withValue(30).withMaximum(150).build())
private val sensChange = register(Settings.floatBuilder("Sensitivity").withMinimum(0.25f).withValue(1.3f).withMaximum(2f).build())
private val smoothCamera = register(Settings.b("Cinematic Camera", true))
private val sens = register(Settings.b("Sensitivity", true))
public override fun onEnable() {
if (mc.player == null) return
fov = mc.gameSettings.fovSetting
sensi = mc.gameSettings.mouseSensitivity
if (smoothCamera.value) mc.gameSettings.smoothCamera = true
}
public override fun onDisable() {
mc.gameSettings.fovSetting = fov
mc.gameSettings.mouseSensitivity = sensi
if (smoothCamera.value) mc.gameSettings.smoothCamera = false
}
override fun onUpdate() {
if (mc.player == null) return
mc.gameSettings.fovSetting = fovChange.value.toFloat()
mc.gameSettings.smoothCamera = smoothCamera.value
if (sens.value) mc.gameSettings.mouseSensitivity = sensi * sensChange.value
}
}