diff options
Diffstat (limited to 'src/main/java/rosegoldaddons/features/EndermanMacro.java')
-rw-r--r-- | src/main/java/rosegoldaddons/features/EndermanMacro.java | 260 |
1 files changed, 239 insertions, 21 deletions
diff --git a/src/main/java/rosegoldaddons/features/EndermanMacro.java b/src/main/java/rosegoldaddons/features/EndermanMacro.java index 0e99af4..ecd82d2 100644 --- a/src/main/java/rosegoldaddons/features/EndermanMacro.java +++ b/src/main/java/rosegoldaddons/features/EndermanMacro.java @@ -1,62 +1,280 @@ package rosegoldaddons.features; -import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBanner; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.GuiIngameMenu; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.network.play.client.C0BPacketEntityAction; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockPos; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import rosegoldaddons.Main; -import rosegoldaddons.utils.RenderUtils; -import rosegoldaddons.utils.ShadyRotation; +import rosegoldaddons.utils.*; import java.awt.*; +import java.util.List; +import java.util.Random; public class EndermanMacro { + private final KeyBinding sneak = Minecraft.getMinecraft().gameSettings.keyBindSneak; + private final KeyBinding walkForward = Minecraft.getMinecraft().gameSettings.keyBindForward; + private final KeyBinding jump = Minecraft.getMinecraft().gameSettings.keyBindJump; + private final KeyBinding sprint = Minecraft.getMinecraft().gameSettings.keyBindSprint; + public static long ms = -1; private static Entity enderman; + public static int ticks = 0; + public static int pausedTicks = 0; + private boolean sneaking = false; + private boolean moving = false; + private boolean pauseMacro = false; + private boolean sold = false; + private boolean stored = false; + private boolean sentl = false; + private int totalShifts = 0; + private int mainDeb = 0; @SubscribeEvent public void onTick(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.END) return; + if (pauseMacro) return; + ticks++; if (!Main.configFile.EndermanESP && !Main.endermanMacro) return; - if(event.phase == TickEvent.Phase.END) return; + if (ticks % Math.pow(2, Main.configFile.endermanSpeed) != 0) return; + if (Main.mc.currentScreen != null && !(Main.mc.currentScreen instanceof GuiIngameMenu) && !(Main.mc.currentScreen instanceof GuiChat)) return; + if(mainDeb != 0) return; + sold = false; + stored = false; enderman = getClosestEnderman(); - if(enderman != null && Main.endermanMacro && !ShadyRotation.running) { - ShadyRotation.smoothLook(ShadyRotation.getRotationToEntity(enderman), Main.configFile.smoothLookVelocity, () -> { - KeyBinding.setKeyBindState(Main.mc.gameSettings.keyBindSneak.getKeyCode(), true); - KeyBinding.setKeyBindState(Main.mc.gameSettings.keyBindSneak.getKeyCode(), false); + if (Main.endermanMacro && !ShadyRotation.running) { + if (enderman != null) { + ShadyRotation.smoothLook( + ShadyRotation.getRotationToEntity(enderman), + Main.configFile.smoothLookVelocity, + () -> { + if (!sneaking && totalShifts % 2 == 0) { + if(Main.mc.thePlayer.inventory.getStackInSlot(Main.mc.thePlayer.inventory.currentItem) != null) { + if(Main.configFile.endermanRC || (Main.configFile.zealotRC && enderman instanceof EntityEnderman && ((EntityEnderman) enderman).getHeldBlockState().getBlock() == Blocks.end_portal_frame)) + Main.mc.playerController.sendUseItem(Main.mc.thePlayer, Main.mc.theWorld, Main.mc.thePlayer.inventory.getStackInSlot(Main.mc.thePlayer.inventory.currentItem)); + } + if(!Main.configFile.endermanRC) KeyBinding.setKeyBindState(sneak.getKeyCode(), true); + KeyBinding.setKeyBindState(jump.getKeyCode(), true); + totalShifts++; + sneaking = true; + } + }); + } else { + KeyBinding.setKeyBindState(jump.getKeyCode(), true); + if(Main.configFile.zealotOnly) { + if(ScoreboardUtils.inLimbo) { + mainDeb = 20; + Main.mc.thePlayer.sendChatMessage("/l"); + return; + } + if(!ScoreboardUtils.inSkyblock) { + mainDeb = 20; + Main.mc.thePlayer.sendChatMessage("/play sb"); + return; + } + if (!ScoreboardUtils.inDragonNest) { + mainDeb = 20; + Main.mc.thePlayer.sendChatMessage("/warp drag"); + return; + } + } + if(Main.configFile.endermanRandom && !ShadyRotation.runningAsync) { + ShadyRotation.smoothLook( + new ShadyRotation.Rotation(new Random().nextInt(30), Main.mc.thePlayer.rotationYaw + new Random().nextInt(80)-40), + 10, + () -> {}, + true + ); + } + } + } + } - if(!Main.mc.thePlayer.movementInput.sneak) { - Main.mc.getNetHandler().addToSendQueue(new C0BPacketEntityAction(Main.mc.thePlayer, C0BPacketEntityAction.Action.START_SNEAKING)); - Main.mc.thePlayer.movementInput.sneak = true; + @SubscribeEvent + public void movementControl(TickEvent.ClientTickEvent event) { + if (!Main.configFile.endermanMove) return; + if (event.phase == TickEvent.Phase.END) return; + if (Main.mc.currentScreen != null && !(Main.mc.currentScreen instanceof GuiIngameMenu) && !(Main.mc.currentScreen instanceof GuiChat)) return; + if (Main.endermanMacro) { + if (pausedTicks % 40 != 0) return; + KeyBinding.setKeyBindState(walkForward.getKeyCode(), true); + KeyBinding.setKeyBindState(sprint.getKeyCode(), true); + moving = true; + if (Main.configFile.endermanTimer != 0 && ticks > Main.configFile.endermanTimer * 1200) { + pauseMacro = true; + moving = false; + KeyBinding.setKeyBindState(walkForward.getKeyCode(), false); + KeyBinding.setKeyBindState(jump.getKeyCode(), false); + KeyBinding.setKeyBindState(sprint.getKeyCode(), false); + KeyBinding.setKeyBindState(sneak.getKeyCode(), false); + if (OpenSkyblockGui.selling || OpenSkyblockGui.storing) return; + if(!Main.configFile.endermanIronman) { + if (!sold) { + OpenSkyblockGui.sellAll = true; + OpenSkyblockGui.selling = true; + Main.mc.thePlayer.sendChatMessage("/bz"); + sold = true; + return; + } + } + if (Main.configFile.endermanLobby) { + if (ScoreboardUtils.inDragonNest) { + if(!sentl) { + Main.mc.thePlayer.sendChatMessage("/l"); + sentl = true; + return; + } else { + ChatUtils.sendMessage("Successfully rejoined a new lobby, macro uptime: "+millisToHours(ms)); + pauseMacro = false; + ticks = 0; + sentl = false; + } + } else { + if(ScoreboardUtils.inSkyblock && !ScoreboardUtils.inPrivateIsland) { + Main.mc.thePlayer.sendChatMessage("/is"); + } + if(ScoreboardUtils.inPrivateIsland) { + if(Main.configFile.endermanIronman && !stored) { + OpenSkyblockGui.storeInChest = true; + stored = true; + return; + } + Main.mc.thePlayer.sendChatMessage("/warp drag"); + } + } + if (!ScoreboardUtils.inSkyblock) { + Main.mc.thePlayer.sendChatMessage("/play sb"); + } } else { - Main.mc.getNetHandler().addToSendQueue(new C0BPacketEntityAction(Main.mc.thePlayer, C0BPacketEntityAction.Action.STOP_SNEAKING)); - Main.mc.thePlayer.movementInput.sneak = false; + if (ScoreboardUtils.inDragonNest) { + Main.mc.thePlayer.sendChatMessage("/is"); + } + if (ScoreboardUtils.inPrivateIsland) { + if(Main.configFile.endermanIronman && !stored) { + OpenSkyblockGui.storeInChest = true; + stored = true; + return; + } + Main.mc.thePlayer.sendChatMessage("/warp drag"); + pauseMacro = false; + ticks = 0; + } } - }); + } + } else { + if (!moving) return; + KeyBinding.setKeyBindState(walkForward.getKeyCode(), false); + KeyBinding.setKeyBindState(jump.getKeyCode(), false); + KeyBinding.setKeyBindState(sprint.getKeyCode(), false); + moving = false; + } + } + + @SubscribeEvent + public void debounce(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.END) return; + if (pauseMacro) pausedTicks++; + if(mainDeb > 0) mainDeb--; + } + + @SubscribeEvent + public void stuckControl(TickEvent.ClientTickEvent event) { + if (!Main.endermanMacro || !Main.configFile.endermanMove) return; + if(event.phase == TickEvent.Phase.END) return; + if (Main.mc.objectMouseOver != null && Main.mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + BlockPos lookingAt = Main.mc.objectMouseOver.getBlockPos(); + BlockPos playerPos = Main.mc.thePlayer.getPosition(); + if(playerPos.distanceSq(lookingAt) > Main.configFile.endermanStuckDist) return; + switch (Main.mc.thePlayer.getHorizontalFacing()) { + case NORTH: + ShadyRotation.smoothLook(new ShadyRotation.Rotation(Main.mc.thePlayer.rotationPitch, 270), Main.configFile.smoothLookVelocity, () -> {}); + break; + case EAST: + ShadyRotation.smoothLook(new ShadyRotation.Rotation(Main.mc.thePlayer.rotationPitch, 0), Main.configFile.smoothLookVelocity, () -> {}); + break; + case SOUTH: + ShadyRotation.smoothLook(new ShadyRotation.Rotation(Main.mc.thePlayer.rotationPitch, 90), Main.configFile.smoothLookVelocity, () -> {}); + break; + case WEST: + ShadyRotation.smoothLook(new ShadyRotation.Rotation(Main.mc.thePlayer.rotationPitch, 180), Main.configFile.smoothLookVelocity, () -> {}); + break; + } + } + } + + @SubscribeEvent + public void sneakControl(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.END) return; + if (pauseMacro) return; + if (Main.mc.currentScreen != null && !(Main.mc.currentScreen instanceof GuiIngameMenu) && !(Main.mc.currentScreen instanceof GuiChat)) return; + if (ticks % Math.pow(2, Main.configFile.endermanSpeed) != 0) return; + if(totalShifts % 2 == 1) { + if(!Main.configFile.endermanRC) KeyBinding.setKeyBindState(sneak.getKeyCode(), true); + totalShifts++; + sneaking = true; + return; + } + if (sneaking) { + if(!Main.configFile.endermanRC) KeyBinding.setKeyBindState(sneak.getKeyCode(), false); + sneaking = false; } } @SubscribeEvent public void renderWorld(RenderWorldLastEvent event) { if (!Main.configFile.EndermanESP) return; - if (enderman == null) return; - RenderUtils.drawEntityBox(enderman, Color.RED, Main.configFile.lineWidth, event.partialTicks); + if (enderman != null) { + RenderUtils.drawEntityBox(enderman, Color.RED, Main.configFile.lineWidth, event.partialTicks); + } + } + + private static String millisToHours(long millis) { + long curr = System.currentTimeMillis(); + int seconds = (int) ((curr - millis)/1000); + return String.format("%02d:%02d:%02d", seconds/3600, (seconds%3600)/60, seconds%60); } private static Entity getClosestEnderman() { Entity eman = null; double closest = 9999; - if(Main.mc.theWorld == null) return null; + if (Main.mc.theWorld == null) return null; for (Entity entity1 : (Main.mc.theWorld.loadedEntityList)) { - if (entity1 instanceof EntityEnderman && !(((EntityEnderman) entity1).getHealth() == 0) && Main.mc.thePlayer.canEntityBeSeen(entity1)) { + if (entity1 instanceof EntityEnderman && !(((EntityEnderman) entity1).getHealth() == 0)) { + if(((EntityEnderman) entity1).getHeldBlockState().getBlock() == Blocks.end_portal_frame) { + double dist = entity1.getDistance(Main.mc.thePlayer.posX, Main.mc.thePlayer.posY, Main.mc.thePlayer.posZ); + if(dist < 40) return entity1; + } + if(!Main.mc.thePlayer.canEntityBeSeen(entity1)) continue; + if(Main.configFile.zealotOnly) { + Entity armorStand = null; + List<Entity> possibleEntities = entity1.getEntityWorld().getEntitiesInAABBexcluding(entity1, entity1.getEntityBoundingBox().expand(0, 4, 0), entity -> !(entity instanceof EntityEnderman)); + for (Entity en : possibleEntities) { + if (en instanceof EntityArmorStand) { + armorStand = en; + break; + } + } + if (armorStand == null) return null; + if (!armorStand.getCustomNameTag().contains("Zealot")) continue; + } double dist = entity1.getDistance(Main.mc.thePlayer.posX, Main.mc.thePlayer.posY, Main.mc.thePlayer.posZ); if (dist < closest) { - if(Main.configFile.macroRadius != 0 && dist < Main.configFile.macroRadius) { + if (Main.configFile.macroRadius != 0 && dist < Main.configFile.macroRadius) { closest = dist; eman = entity1; - } if(Main.configFile.macroRadius == 0) { + } + if (Main.configFile.macroRadius == 0) { closest = dist; eman = entity1; } |