diff --git a/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java b/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java index 73f66a88..31a7db85 100644 --- a/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java +++ b/src/main/java/me/zeroeightsix/kami/event/ForgeEventProcessor.java @@ -20,6 +20,8 @@ import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingDamageEvent; import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.player.AttackEntityEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.world.ChunkEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -87,7 +89,8 @@ public class ForgeEventProcessor { if (event.isCanceled()) return; RenderGameOverlayEvent.ElementType target = RenderGameOverlayEvent.ElementType.EXPERIENCE; - if (!Wrapper.getPlayer().isCreative() && Wrapper.getPlayer().getRidingEntity() instanceof EntityHorse) target = RenderGameOverlayEvent.ElementType.HEALTHMOUNT; + if (!Wrapper.getPlayer().isCreative() && Wrapper.getPlayer().getRidingEntity() instanceof EntityHorse) + target = RenderGameOverlayEvent.ElementType.HEALTHMOUNT; if (event.getType() == target) { ModuleManager.onRender(); @@ -95,14 +98,13 @@ public class ForgeEventProcessor { UIRenderer.renderAndUpdateFrames(); GL11.glPopMatrix(); KamiTessellator.releaseGL(); - }else if (event.getType() == RenderGameOverlayEvent.ElementType.BOSSINFO && ModuleManager.isModuleEnabled("BossStack")) { + } else if (event.getType() == RenderGameOverlayEvent.ElementType.BOSSINFO && ModuleManager.isModuleEnabled("BossStack")) { BossStack.render(event); } } - @SubscribeEvent(priority= EventPriority.NORMAL, receiveCanceled=true) - public void onKeyInput(InputEvent.KeyInputEvent event) - { + @SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true) + public void onKeyInput(InputEvent.KeyInputEvent event) { if (Keyboard.getEventKeyState()) ModuleManager.onBind(Keyboard.getEventKey()); } @@ -111,14 +113,14 @@ public class ForgeEventProcessor { public void onChatSent(ClientChatEvent event) { if (event.getMessage().startsWith(Command.COMMAND_PREFIX)) { event.setCanceled(true); - try{ + try { Wrapper.getMinecraft().ingameGUI.getChatGUI().addToSentMessages(event.getMessage()); if (event.getMessage().length() > 1) - KamiMod.getInstance().commandManager.callCommand(event.getMessage().substring(Command.COMMAND_PREFIX.length()-1)); + KamiMod.getInstance().commandManager.callCommand(event.getMessage().substring(Command.COMMAND_PREFIX.length() - 1)); else Command.sendChatMessage("Please enter a command."); - }catch (Exception e) { + } catch (Exception e) { e.printStackTrace(); Command.sendChatMessage("Error occured while running command! (" + e.getMessage() + ")"); } @@ -130,31 +132,55 @@ public class ForgeEventProcessor { public void onPlayerDrawn(RenderPlayerEvent.Pre event) { KamiMod.EVENT_BUS.post(event); } + @SubscribeEvent(priority = EventPriority.HIGHEST) public void onPlayerDrawn(RenderPlayerEvent.Post event) { KamiMod.EVENT_BUS.post(event); } + @SubscribeEvent() - public void onChunkLoaded(ChunkEvent.Load event) { KamiMod.EVENT_BUS.post(event); } + public void onChunkLoaded(ChunkEvent.Load event) { + KamiMod.EVENT_BUS.post(event); + } + @SubscribeEvent() - public void onChunkLoaded(ChunkEvent.Unload event) { KamiMod.EVENT_BUS.post(event); } + public void onChunkLoaded(ChunkEvent.Unload event) { + KamiMod.EVENT_BUS.post(event); + } + @SubscribeEvent - public void onInputUpdate(InputUpdateEvent event) { KamiMod.EVENT_BUS.post(event); } + public void onInputUpdate(InputUpdateEvent event) { + KamiMod.EVENT_BUS.post(event); + } + @SubscribeEvent public void onLivingEntityUseItemEventTick(LivingEntityUseItemEvent.Start entityUseItemEvent) { KamiMod.EVENT_BUS.post(entityUseItemEvent); } + @SubscribeEvent public void onLivingDamageEvent(LivingDamageEvent event) { KamiMod.EVENT_BUS.post(event); } + @SubscribeEvent public void onEntityJoinWorldEvent(EntityJoinWorldEvent entityJoinWorldEvent) { KamiMod.EVENT_BUS.post(entityJoinWorldEvent); } + @SubscribeEvent public void onPlayerPush(PlayerSPPushOutOfBlocksEvent event) { KamiMod.EVENT_BUS.post(event); } + @SubscribeEvent + public void onLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { + KamiMod.EVENT_BUS.post(event); + } + + @SubscribeEvent + public void onAttackEntity(AttackEntityEvent entityEvent) { + KamiMod.EVENT_BUS.post(entityEvent); + } + } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/combat/Aura.java b/src/main/java/me/zeroeightsix/kami/module/modules/combat/Aura.java index c9b398b3..647be6ed 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/combat/Aura.java +++ b/src/main/java/me/zeroeightsix/kami/module/modules/combat/Aura.java @@ -1,6 +1,8 @@ package me.zeroeightsix.kami.module.modules.combat; import me.zeroeightsix.kami.module.Module; +import me.zeroeightsix.kami.module.ModuleManager; +import me.zeroeightsix.kami.module.modules.misc.AutoTool; import me.zeroeightsix.kami.setting.Setting; import me.zeroeightsix.kami.util.EntityUtil; import me.zeroeightsix.kami.util.Friends; @@ -53,6 +55,7 @@ public class Aura extends Module { return; }else{ if (EntityUtil.isPassive(target) ? animals : (EntityUtil.isMobAggressive(target) && mobs)) { + if (ModuleManager.isModuleEnabled("AutoTool")) AutoTool.equipBestWeapon(); attack(target); return; } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/misc/AutoTool.java b/src/main/java/me/zeroeightsix/kami/module/modules/misc/AutoTool.java new file mode 100644 index 00000000..ca41235d --- /dev/null +++ b/src/main/java/me/zeroeightsix/kami/module/modules/misc/AutoTool.java @@ -0,0 +1,79 @@ +package me.zeroeightsix.kami.module.modules.misc; + +import me.zero.alpine.listener.EventHandler; +import me.zero.alpine.listener.Listener; +import me.zeroeightsix.kami.module.Module; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.init.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.item.ItemTool; +import net.minecraftforge.event.entity.player.AttackEntityEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; + +/** + * Created by 086 on 2/10/2018. + */ +@Module.Info(name = "AutoTool", description = "Automatically switch to the best tools when mining or attacking", category = Module.Category.MISC) +public class AutoTool extends Module { + + @EventHandler + private Listener leftClickListener = new Listener<>(event -> { + equipBestTool(mc.world.getBlockState(event.getPos())); + }); + + @EventHandler + private Listener attackListener = new Listener<>(event -> { + equipBestWeapon(); + }); + + private void equipBestTool(IBlockState blockState) { + int bestSlot = -1; + double max = 0; + for (int i = 0; i < 9; i++) { + ItemStack stack = mc.player.inventory.getStackInSlot(i); + if (stack.isEmpty) continue; + float speed = stack.getDestroySpeed(blockState); + int eff; + if (speed > 1) { + speed += ((eff = EnchantmentHelper.getEnchantmentLevel(Enchantments.EFFICIENCY, stack)) > 0 ? (Math.pow(eff, 2) + 1) : 0); + if (speed > max) { + max = speed; + bestSlot = i; + } + } + } + if (bestSlot != -1) equip(bestSlot); + } + + public static void equipBestWeapon() { + int bestSlot = -1; + double maxDamage = 0; + for (int i = 0; i < 9; i++) { + ItemStack stack = mc.player.inventory.getStackInSlot(i); + if (stack.isEmpty) continue; + if (stack.getItem() instanceof ItemTool) { + double damage = (((ItemTool) stack.getItem()).attackDamage + (double) EnchantmentHelper.getModifierForCreature(stack, EnumCreatureAttribute.UNDEFINED)); + if (damage > maxDamage) { + maxDamage = damage; + bestSlot = i; + } + } else if (stack.getItem() instanceof ItemSword) { + double damage = (((ItemSword) stack.getItem()).getAttackDamage() + (double) EnchantmentHelper.getModifierForCreature(stack, EnumCreatureAttribute.UNDEFINED)); + if (damage > maxDamage) { + maxDamage = damage; + bestSlot = i; + } + } + } + if (bestSlot != -1) equip(bestSlot); + } + + private static void equip(int slot) { + mc.player.inventory.currentItem = slot; + mc.playerController.syncCurrentPlayItem(); + } + +}