diff options
Diffstat (limited to 'src/main/java/rosegoldaddons/utils')
5 files changed, 334 insertions, 64 deletions
diff --git a/src/main/java/rosegoldaddons/utils/OpenSkyblockGui.java b/src/main/java/rosegoldaddons/utils/OpenSkyblockGui.java index 2e574fb..2b14d14 100644 --- a/src/main/java/rosegoldaddons/utils/OpenSkyblockGui.java +++ b/src/main/java/rosegoldaddons/utils/OpenSkyblockGui.java @@ -1,27 +1,51 @@ package rosegoldaddons.utils; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiChest; -import net.minecraft.init.Items; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.Slot; +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; +import net.minecraft.util.Vec3i; import net.minecraftforge.client.event.GuiScreenEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; import rosegoldaddons.Main; import rosegoldaddons.commands.Rosedrobe; import rosegoldaddons.commands.Rosepet; -import scala.Int; -import tv.twitch.chat.Chat; +import rosegoldaddons.features.SexAura; +import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.List; public class OpenSkyblockGui { private static boolean openTrades = false; + public static boolean doTrades = false; + private static int deb = 0; + public static int die = -1; + public static boolean sellAll = false; + public static boolean selling = false; + public static int enableChat = -1; + public static boolean doVisit = false; + private static boolean didVisit = false; + private static final KeyBinding[] binds = Main.mc.gameSettings.keyBindings; + private static int sellAttempts = 0; + public static boolean storeInChest = false; + public static boolean storing = false; + public static boolean openedChest = false; + + public static String[] endermanDrops = { + "summoning eye", "ender pearl", "bone", "obsidian", "crystal fragment", "eye of ender", "end stone", "arrow", "combat exp, rune" + }; @SubscribeEvent public void guiDraw(GuiScreenEvent.BackgroundDrawnEvent event) { - if(!Rosedrobe.openWardrobe && !openTrades && !Rosepet.openPetS) return; + if (!Rosedrobe.openWardrobe && !openTrades && !Rosepet.openPetS && !sellAll && !storeInChest) return; if (event.gui instanceof GuiChest) { Container container = ((GuiChest) event.gui).inventorySlots; if (container instanceof ContainerChest) { @@ -46,13 +70,13 @@ public class OpenSkyblockGui { if (chestName.contains("Pets")) { int currPage = 1; int lastPage = 1; - if(chestName.startsWith("(")) { - currPage = Integer.parseInt(chestName.substring(chestName.indexOf("(")+1, chestName.indexOf("/"))); - lastPage = Integer.parseInt(chestName.substring(chestName.indexOf("/")+1, chestName.indexOf(")"))); + if (chestName.startsWith("(")) { + currPage = Integer.parseInt(chestName.substring(chestName.indexOf("(") + 1, chestName.indexOf("/"))); + lastPage = Integer.parseInt(chestName.substring(chestName.indexOf("/") + 1, chestName.indexOf(")"))); } String petName = Rosepet.name; int petSlot = Rosepet.petSlot; - if(petSlot != 0) { + if (petSlot != 0) { clickSlot(petSlot - 1, 0, 0); Rosepet.petSlot = 0; Rosepet.openPetS = false; @@ -74,7 +98,7 @@ public class OpenSkyblockGui { } else { Rosepet.openPetS = false; Main.mc.thePlayer.closeScreen(); - ChatUtils.sendMessage("No pet named "+petName+" found."); + ChatUtils.sendMessage("No pet named " + petName + " found."); } } else { ChatUtils.sendMessage("Invalid Pet Name"); @@ -82,6 +106,163 @@ public class OpenSkyblockGui { } } + } else if (sellAll && deb == 0) { + selling = true; + if (chestName.contains("Bazaar")) { + List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.getStack().getDisplayName().contains("Inventory Now")) { + if (slot.getStack().serializeNBT().toString().contains("don't have items")) { + ChatUtils.sendMessage("Couldn't find any items to sell to bazaar"); + sellAttempts = 0; + sellAll = false; + selling = false; + Main.mc.thePlayer.closeScreen(); + } else { + clickSlot(slot.slotNumber, 0, 0); + } + } + } + } else if (chestName.contains("you sure?")) { + List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.getStack().getDisplayName().contains("whole inventory")) { + clickSlot(slot.slotNumber, 0, 0); + sellAttempts++; + deb = 5; + break; + } else if (slot.getStack().getDisplayName().contains("sold!")) { + ChatUtils.sendMessage("Sold!"); + sellAttempts = 0; + sellAll = false; + selling = false; + Main.mc.thePlayer.closeScreen(); + return; + } + } + } + } else if(storeInChest && deb == 0) { + storing = true; + if (chestName.contains("Chest")) { + List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if(slot.slotNumber < 53) continue; + String display = slot.getStack().getDisplayName().toLowerCase(); + for(String drop : endermanDrops) { + if (display.contains(drop)) { + clickSlot(slot.slotNumber, 0, 1, 0); + deb = 5; + return; + } + } + } + ChatUtils.sendMessage("done storing"); + storeInChest = false; + storing = false; + openedChest = false; + Main.mc.thePlayer.closeScreen(); + } + } + } + } + } + + @SubscribeEvent + public void debounce(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.END) return; + if (deb > 0) deb--; + if(storeInChest && !openedChest && !ShadyRotation.running) { + storing = true; + Vec3 chest = closestChest(); + if(chest == null) { + ChatUtils.sendMessage("No chest found in island, going back to macroing"); + storeInChest = false; + storing = false; + } else { + ShadyRotation.smoothLook(ShadyRotation.vec3ToRotation(chest), Main.configFile.smoothLookVelocity, () -> { + rightClick(); + openedChest = true; + }); + } + } + if (sellAttempts > 9) { + Main.mc.thePlayer.closeScreen(); + Main.mc.thePlayer.sendChatMessage("/bz"); + sellAttempts = 0; + } + if (deb == 0 && didVisit && doVisit) { + doVisit = false; + didVisit = false; + Main.mc.thePlayer.sendChatMessage("/trade " + removeFormatting(SexAura.sender.split(" ")[1])); + doTrades = true; + die = 200; + } + if (doTrades) { + if (die > 0) { + die--; + } + } + if (die == 0) { + doTrades = false; + enableChat = 40; + die = -1; + } + if (enableChat > 0) enableChat--; + if (enableChat == 0) { + SexAura.blocked = false; + enableChat = -1; + } + } + + @SubscribeEvent + public void onTick(TickEvent event) { + if (Main.mc.thePlayer == null || Main.mc.theWorld == null) return; + if (Main.configFile.stopKeyboard || SexAura.blocked) { + for (KeyBinding keyBinding : binds) { + KeyBinding.setKeyBindState(keyBinding.getKeyCode(), false); + } + } + } + + @SubscribeEvent + public void guiDraw2(GuiScreenEvent.BackgroundDrawnEvent event) { + if(!doVisit) return; + if (event.gui instanceof GuiChest) { + Container container = ((GuiChest) event.gui).inventorySlots; + if (container instanceof ContainerChest) { + if (doVisit && deb == 0) { + List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.getStack().getDisplayName().contains("Visit player")) { + if (!didVisit) { + clickSlot(slot.slotNumber, 0, 0); + didVisit = true; + deb = 100; + } + } + } + } + if (doTrades && deb == 0) { + List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; + if (!chestInventory.get(30).getHasStack()) { + for (int i = chestInventory.size() - 1; i > 0; i--) { + Slot slot = chestInventory.get(i); + if (!slot.getHasStack()) continue; + if (slot.getStack().getDisplayName().contains("SkyBlock")) continue; + if (slot.slotNumber < 44) continue; + clickSlot(slot.slotNumber, 1, 0); + deb = 5; + } + } + if (chestInventory.get(39).getHasStack() && (chestInventory.get(39).getStack().getDisplayName().contains("Warning!") || chestInventory.get(39).getStack().getDisplayName().contains("Deal!"))) { + clickSlot(39, 0, 0); + doTrades = false; + enableChat = 40; + } } } } @@ -95,4 +276,55 @@ public class OpenSkyblockGui { private void clickSlot(int slot, int type, int windowAdd) { Main.mc.playerController.windowClick(Main.mc.thePlayer.openContainer.windowId + windowAdd, slot, type, 0, Main.mc.thePlayer); } + + private void clickSlot(int slot, int type, int mode, int windowAdd) { + Main.mc.playerController.windowClick(Main.mc.thePlayer.openContainer.windowId + windowAdd, slot, type, mode, Main.mc.thePlayer); + } + + private String removeFormatting(String input) { + return input.replaceAll("ยง[0-9a-fk-or]", ""); + } + + private Vec3 closestChest() { + if (Main.mc.theWorld == null) return null; + if (Main.mc.thePlayer == null) return null; + int r = 6; + BlockPos playerPos = Main.mc.thePlayer.getPosition(); + playerPos.add(0, 1, 0); + Vec3 playerVec = Main.mc.thePlayer.getPositionVector(); + Vec3i vec3i = new Vec3i(r, r, r); + ArrayList<Vec3> chests = new ArrayList<>(); + for (BlockPos blockPos : BlockPos.getAllInBox(playerPos.add(vec3i), playerPos.subtract(vec3i))) { + IBlockState blockState = Main.mc.theWorld.getBlockState(blockPos); + if (blockState.getBlock() == Blocks.chest) { + chests.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); + } + } + + double smallest = 9999; + Vec3 closest = null; + for (Vec3 chest : chests) { + double dist = chest.distanceTo(playerVec); + if (dist < smallest) { + smallest = dist; + closest = chest; + } + } + return closest; + } + + public static void rightClick() { + try { + Method rightClickMouse; + try { + rightClickMouse = Minecraft.class.getDeclaredMethod("rightClickMouse"); + } catch (NoSuchMethodException e) { + rightClickMouse = Minecraft.class.getDeclaredMethod("func_147121_ag"); + } + rightClickMouse.setAccessible(true); + rightClickMouse.invoke(Main.mc); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/rosegoldaddons/utils/RenderUtils.java b/src/main/java/rosegoldaddons/utils/RenderUtils.java index d6a7f8f..9d314a3 100644 --- a/src/main/java/rosegoldaddons/utils/RenderUtils.java +++ b/src/main/java/rosegoldaddons/utils/RenderUtils.java @@ -3,6 +3,7 @@ package rosegoldaddons.utils; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; @@ -111,7 +112,6 @@ public class RenderUtils { drawSelectionBoundingBox(axisAlignedBB); - GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glDepthMask(true); resetCaps(); @@ -653,6 +653,24 @@ public class RenderUtils { glScissor((int) (x * factor), (int) ((scaledResolution.getScaledHeight() - y2) * factor), (int) ((x2 - x) * factor), (int) ((y2 - y) * factor)); } + + public static void drawRectangle(int x, int y, int width, int height) { + glEnable(GL_BLEND); + glColor3f(0,0,0); + glRecti(x, y, width, height); + glFlush(); + } + + public static void drawTexture(ResourceLocation resourceLocation, int x, int y, int width, int height, int textureWidth, int textureHeight, int textureX, int textureY) { + Main.mc.getTextureManager().bindTexture(resourceLocation); + GlStateManager.color(255, 255, 255); + Gui.drawModalRectWithCustomSizedTexture(x, y, textureX, textureY, width, height, textureWidth, textureHeight); + } + + public static void drawTexture(ResourceLocation resourceLocation, int x, int y, int width, int height) { + drawTexture(resourceLocation, x, y, width, height, width, height, 0, 0); + } + /** * Modified from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE diff --git a/src/main/java/rosegoldaddons/utils/Rotation.java b/src/main/java/rosegoldaddons/utils/Rotation.java deleted file mode 100644 index f18d5ef..0000000 --- a/src/main/java/rosegoldaddons/utils/Rotation.java +++ /dev/null @@ -1,44 +0,0 @@ -package rosegoldaddons.utils; - - -public class Rotation { - private float yaw; - private float pitch; - - public Rotation(float yaw, float pitch) { - this.yaw = yaw; - this.pitch = pitch; - } - - public float getYaw() { - return this.yaw; - } - - public void setYaw(float yaw) { - this.yaw = yaw; - } - - public float getPitch() { - return this.pitch; - } - - public void setPitch(float pitch) { - this.pitch = pitch; - } - - public void addYaw(float yaw) { - this.yaw += yaw; - } - - public void addPitch(float pitch) { - this.pitch += pitch; - } - - public float getValue() { - return Math.abs(this.yaw) + Math.abs(this.pitch); - } - - public String toString() { - return "Rotation{yaw=" + this.yaw + ", pitch=" + this.pitch + '}'; - } -} diff --git a/src/main/java/rosegoldaddons/utils/ScoreboardUtils.java b/src/main/java/rosegoldaddons/utils/ScoreboardUtils.java index d3a8463..0f22e86 100644 --- a/src/main/java/rosegoldaddons/utils/ScoreboardUtils.java +++ b/src/main/java/rosegoldaddons/utils/ScoreboardUtils.java @@ -18,12 +18,15 @@ import java.util.List; import java.util.stream.Collectors; /* -* Stolen from Danker's Skyblock Mod: https://github.com/bowser0000/SkyblockMod +* Edited from Danker's Skyblock Mod: https://github.com/bowser0000/SkyblockMod */ public class ScoreboardUtils { public static boolean inSkyblock = false; public static boolean inDungeon = false; + public static boolean inPrivateIsland = false; + public static boolean inDragonNest = false; + public static boolean inLimbo = false; public static String cleanSB(String scoreboard) { char[] nvString = StringUtils.stripControlCodes(scoreboard).toCharArray(); @@ -119,13 +122,25 @@ public class ScoreboardUtils { @SubscribeEvent public void onTick(TickEvent.ClientTickEvent event) { - if(ticks % 20 == 0) { - if(Main.mc.thePlayer != null && Main.mc.theWorld != null) { - ScoreObjective scoreboardObj = Main.mc.theWorld.getScoreboard().getObjectiveInDisplaySlot(1); - if(scoreboardObj != null) { - inSkyblock = removeFormatting(scoreboardObj.getDisplayName()).contains("SKYBLOCK"); + if(ticks % 10 == 0) { + if (Main.configFile.forceDungeon) { + inSkyblock = true; + inDungeon = true; + } else { + if (Main.mc.thePlayer != null && Main.mc.theWorld != null) { + Scoreboard scoreboard = Main.mc.theWorld.getScoreboard(); + ScoreObjective scoreboardObj = scoreboard.getObjectiveInDisplaySlot(1); + if (scoreboardObj != null) { + inSkyblock = removeFormatting(scoreboardObj.getDisplayName()).contains("SKYBLOCK"); + inLimbo = false; + } else { + inSkyblock = false; + inLimbo = true; + } + inPrivateIsland = inSkyblock && scoreboardContains("Your Island"); + inDragonNest = inSkyblock && scoreboardContains("Dragon's Nest"); + inDungeon = inSkyblock && scoreboardContains("The Catacombs"); } - inDungeon = inSkyblock && ScoreboardUtils.scoreboardContains("The Catacombs"); } ticks = 0; } diff --git a/src/main/java/rosegoldaddons/utils/ShadyRotation.java b/src/main/java/rosegoldaddons/utils/ShadyRotation.java index 111ea6e..3125aa2 100644 --- a/src/main/java/rosegoldaddons/utils/ShadyRotation.java +++ b/src/main/java/rosegoldaddons/utils/ShadyRotation.java @@ -2,10 +2,13 @@ package rosegoldaddons.utils; import net.minecraft.entity.Entity; import net.minecraft.util.BlockPos; +import net.minecraft.util.MovementInput; import net.minecraft.util.Vec3; +import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import rosegoldaddons.Main; +import rosegoldaddons.events.PlayerMoveEvent; public class ShadyRotation { private static float pitchDifference; @@ -13,16 +16,33 @@ public class ShadyRotation { private static int ticks = -1; private static int tickCounter = 0; private static Runnable callback = null; + private static boolean async = false; + + private static float serverPitch; + private static float serverYaw; public static boolean running = false; + public static boolean runningAsync = false; public static class Rotation { public float pitch; public float yaw; + public boolean async; public Rotation(float pitch, float yaw) { this.pitch = pitch; this.yaw = yaw; + this.async = false; + } + + public Rotation(float pitch, float yaw, boolean async) { + this.pitch = pitch; + this.yaw = yaw; + this.async = async; + } + + public void setAsync(boolean async) { + this.async = async; } } @@ -76,7 +96,7 @@ public class ShadyRotation { return new Rotation(pitch, yaw); } - public static void smoothLook(Rotation rotation, int ticks, Runnable callback) { + public static void smoothLook(Rotation rotation, int ticks, Runnable callback, boolean async) { if(ticks == 0) { look(rotation); callback.run(); @@ -85,6 +105,7 @@ public class ShadyRotation { ShadyRotation.callback = callback; + ShadyRotation.async = rotation.async; pitchDifference = wrapAngleTo180(rotation.pitch - Main.mc.thePlayer.rotationPitch); yawDifference = wrapAngleTo180(rotation.yaw - Main.mc.thePlayer.rotationYaw); @@ -92,6 +113,10 @@ public class ShadyRotation { ShadyRotation.tickCounter = 0; } + public static void smoothLook(Rotation rotation, int ticks, Runnable callback) { + smoothLook(rotation, ticks, callback, false); + } + public static void smartLook(Rotation rotation, int ticksPer180, Runnable callback) { float rotationDifference = Math.max( Math.abs(rotation.pitch - Main.mc.thePlayer.rotationPitch), @@ -105,16 +130,40 @@ public class ShadyRotation { Main.mc.thePlayer.rotationYaw = rotation.yaw; } + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onUpdatePre(PlayerMoveEvent.Pre pre) { + //if(Main.oringo) return; + serverPitch = Main.mc.thePlayer.rotationPitch; + serverYaw = Main.mc.thePlayer.rotationYaw; + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onUpdatePost(PlayerMoveEvent.Post post) { + //if(Main.oringo) return; + Main.mc.thePlayer.rotationPitch = serverPitch; + Main.mc.thePlayer.rotationYaw = serverYaw; + } + @SubscribeEvent public void onTick(TickEvent event) { if(Main.mc.thePlayer == null) return; if(tickCounter < ticks) { - running = true; + if(!async) { + running = true; + runningAsync = false; + } else { + runningAsync = true; + running = false; + } Main.mc.thePlayer.rotationPitch += pitchDifference / ticks; Main.mc.thePlayer.rotationYaw += yawDifference / ticks; tickCounter++; } else if(callback != null) { - running = false; + if(!async) { + running = false; + } else { + runningAsync = false; + } callback.run(); callback = null; } |