diff options
Diffstat (limited to 'src/main')
37 files changed, 2010 insertions, 238 deletions
diff --git a/src/main/java/rosegoldaddons/Config.java b/src/main/java/rosegoldaddons/Config.java index f9e11d0..ab13719 100644 --- a/src/main/java/rosegoldaddons/Config.java +++ b/src/main/java/rosegoldaddons/Config.java @@ -3,6 +3,8 @@ package rosegoldaddons; import gg.essential.vigilance.Vigilant; import gg.essential.vigilance.data.*; import org.jetbrains.annotations.NotNull; +import rosegoldaddons.utils.ChatUtils; +import rosegoldaddons.utils.OpenSkyblockGui; import java.io.File; import java.util.Comparator; @@ -97,7 +99,7 @@ public class Config extends Vigilant { category = "Foraging", subcategory = "General", max = 500) public int postrodDelay = 150; - @Property(type = PropertyType.SWITCH, name = "Radomize Delay", description = "Add slight randomization to delay", + @Property(type = PropertyType.SWITCH, name = "Randomize Delay", description = "Add slight randomization to delay", category = "Foraging", subcategory = "General") public boolean randomizeForaging = false; @@ -121,6 +123,10 @@ public class Config extends Vigilant { category = "Mining", subcategory = "General", options = {"Closest Block", "Facing Axis"}) public int hardIndex = 0; + @Property(type = PropertyType.SWITCH, name = "Server Side Rotations", description = "Hardstone nuker's chest solver will use server side rotations for opening treasure chests", + category = "Mining", subcategory = "General") + public boolean serverSideChest = false; + @Property(type = PropertyType.SELECTOR, name = "Actions", description = "Type of action to perform when opening a brewing stand", category = "Alchemy", subcategory = "General", options = {"Collect + Sell", "Insert Water Bottles", "Insert Nether Wart", "Insert Cane / Eye", "Insert Glowstone"}) public int alchindex = 0; @@ -149,7 +155,6 @@ public class Config extends Vigilant { category = "Farming", subcategory = "General", options = {"40 BPS", "80 BPS"}) public int farmSpeedIndex = 0; - @Property(type = PropertyType.SWITCH, name = "Look at nuked block", description = "Looks at currently nuked block to look less sus", category = "Mining", subcategory = "General") public boolean mithrilLook = false; @@ -183,17 +188,89 @@ public class Config extends Vigilant { public int pinglessSpeed = 0; @Property(type = PropertyType.SWITCH, name = "Auto Slayer", description = "Automatically use batphone", - category = "RoseGoldAddons", subcategory = "General") + category = "Slayer", subcategory = "General") public boolean autoSlayer = false; @Property(type = PropertyType.SWITCH, name = "Click Maddox", description = "Automatically click maddox on boss kill", - category = "RoseGoldAddons", subcategory = "General") + category = "Slayer", subcategory = "General") public boolean clickMaddox = false; @Property(type = PropertyType.SELECTOR, name = "Slayer Type", description = "Type of slayer to auto start", - category = "RoseGoldAddons", subcategory = "General", options = {"None", "Zombie 3", "Zombie 4", "Zombie 5", "Spider 3", "Spider 4", "Sven 3", "Sven 4", "Enderman 2", "Enderman 3", "Enderman 4"}) + category = "Slayer", subcategory = "General", options = {"None", "Zombie 3", "Zombie 4", "Zombie 5", "Spider 3", "Spider 4", "Sven 3", "Sven 4", "Enderman 2", "Enderman 3", "Enderman 4"}) public int slayerTypeIndex = 0; + @Property(type = PropertyType.SWITCH, name = "Force Slayer", description = "Starts a slayer quest if you dont have one, restarts if it is not done after 5 minutes", + category = "Slayer", subcategory = "General") + public boolean forceSlayer = false; + + @Property(type = PropertyType.SELECTOR, name = "Anti Racism", description = "Prevent racist messages from showing up in chat", + category = "RoseGoldAddons", subcategory = "General", options = {"Censor", "Block", "None"}) + public int antiRacism = 0; + + @Property(type = PropertyType.SWITCH, name = "Pause All Macros", description = "Pause all macros on world change", + category = "Macros", subcategory = "General") + public boolean pauseAllWorldChange = false; + + @Property(type = PropertyType.SWITCH, name = "Auto Leave Limbo", description = "Automatically leaves limbo", + category = "Macros", subcategory = "General") + public boolean autoLeaveLimbo = false; + + @Property(type = PropertyType.SWITCH, name = "Join SkyBlock", description = "Automatically joins skyblock after leaving limbo", + category = "Macros", subcategory = "General") + public boolean autoLimboSB = true; + + @Property(type = PropertyType.SWITCH, name = "Enderman Move Macro", description = "Add primitive movement to enderman macro", + category = "Macros", subcategory = "Enderman") + public boolean endermanMove = false; + + @Property(type = PropertyType.SWITCH, name = "Enderman Lobby", description = "Go to lobby instead of island when switching lobbies", + category = "Macros", subcategory = "Enderman") + public boolean endermanLobby = false; + + @Property(type = PropertyType.SWITCH, name = "Randomization", description = "Random head movements when not shooting endermen", + category = "Macros", subcategory = "Enderman") + public boolean endermanRandom = false; + + @Property(type = PropertyType.SWITCH, name = "Right Click", description = "Right click instead of shifting", + category = "Macros", subcategory = "Enderman") + public boolean endermanRC = false; + + @Property(type = PropertyType.SWITCH, name = "Special Zealot Right Click", description = "Right click on special zealots (spirit sceptre recommended)", + category = "Macros", subcategory = "Enderman") + public boolean zealotRC = false; + + @Property(type = PropertyType.SWITCH, name = "Zealot Only", description = "Only target zealots", + category = "Macros", subcategory = "Enderman") + public boolean zealotOnly = false; + + @Property(type = PropertyType.SLIDER, name = "Lobby Swap Timer", description = "How many minutes to wait until finding a new lobby", + category = "Macros", subcategory = "Enderman", max = 30) + public int endermanTimer = 10; + + @Property(type = PropertyType.SWITCH, name = "Ironman Mode", description = "Lobby swap without using the bazaar", + category = "Macros", subcategory = "Enderman") + public boolean endermanIronman = false; + + @Property(type = PropertyType.SELECTOR, name = "Shifting / Right Click Speed", description = "Determine the speed of the enderman macro", + category = "Macros", subcategory = "Enderman", options = {"x2", "x1", "x0.5", "x0.25"}) + public int endermanSpeed = 1; + + @Property(type = PropertyType.SLIDER, name = "Stuck Distance", description = "Distance to block to turn away (square)", + category = "Macros", subcategory = "Enderman", max = 10) + public int endermanStuckDist = 3; + + @Property(type = PropertyType.SELECTOR, name = "Type", description = "Choose a type", + category = "Macros", subcategory = "Stranded Villagers", options = {"Cocoa", "Potato", "Sugar Cane", "Ender Pearls"}) + public int strandedType = 0; + + @Property(type = PropertyType.SLIDER, name = "Interaction Delay", description = "How many ticks to wait next interaction", + category = "Macros", subcategory = "Stranded Villagers", max = 20) + public int strandedCropDebounc = 10; + + @Property(type = PropertyType.SLIDER, name = "GUI Interaction Delay", description = "How many ticks to wait next GUI interaction", + category = "Macros", subcategory = "Stranded Villagers", max = 10) + public int strandedGUIDebounc = 5; + @Property(type = PropertyType.SELECTOR, name = "Custom Name Type", description = "ignore if you dont know what these mean", category = "RoseGoldAddons", subcategory = "General", options = {"MixinEntityPlayer", "MixinEntityPlayer + MixinEntity"}) public int nameRenderType = 0; @@ -218,6 +295,38 @@ public class Config extends Vigilant { category = "ESP", subcategory = "General") public boolean nucleusESP = false; + @Property(type = PropertyType.SWITCH, name = "Big Blocks", description = "Change levers, buttons, chests and Redstone Key skulls to 1x1x1", + category = "Dungeons", subcategory = "General") + public boolean dungeonBlocksBig = false; + + @Property(type = PropertyType.SWITCH, name = "Auto 3 Weirdos", description = "beta", + category = "Dungeons", subcategory = "General") + public boolean autoThreeWeirdos = false; + + @Property(type = PropertyType.SWITCH, name = "Force Dungeon", description = "", + category = "testing", subcategory = "General") + public boolean forceDungeon = false; + + @Property(type = PropertyType.BUTTON, name = "Sell All", description = "", + category = "testing", subcategory = "General") + public void sellAllTest() { + ChatUtils.sendMessage("Selling All!"); + Main.mc.thePlayer.sendChatMessage("/bz"); + OpenSkyblockGui.sellAll = true; + } + + @Property(type = PropertyType.SWITCH, name = "KeyBoard Event Cancel", description = "", + category = "testing", subcategory = "General") + public boolean stopKeyboard = false; + + @Property(type = PropertyType.SELECTOR, name = "Auto Click Mode", description = "", + category = "Macros", subcategory = "General", options = {"Right Click", "Left Click"}) + public int autoClickerMode = 0; + + @Property(type = PropertyType.SLIDER, name = "Auto Click CPS", description = "", + category = "Macros", subcategory = "General", min = 1, max = 1000) + public int autoClickerCPS = 10; + public Config() { super(new File("./config/rosegoldaddons/config.toml"), "RoseGoldAddons", new JVMAnnotationPropertyCollector(), new ConfigSorting()); initialize(); diff --git a/src/main/java/rosegoldaddons/Main.java b/src/main/java/rosegoldaddons/Main.java index ebdb7d7..5a6d256 100644 --- a/src/main/java/rosegoldaddons/Main.java +++ b/src/main/java/rosegoldaddons/Main.java @@ -6,6 +6,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.event.ClickEvent; @@ -24,6 +25,7 @@ import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import org.lwjgl.input.Keyboard; import rosegoldaddons.commands.*; +import rosegoldaddons.events.MillisecondEvent; import rosegoldaddons.features.*; import rosegoldaddons.utils.*; @@ -32,10 +34,18 @@ import java.net.URL; import java.net.URLConnection; import java.nio.file.Files; import java.nio.file.Paths; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; -@Mod(modid = "timechanger", name = "RoseGoldAddons", version = "2.1") +@Mod(modid = Main.MOD_ID, name = "RoseGoldAddons", version = "2.9.0") public class Main { + public static final String MOD_ID = "RoseGoldAddons"; + + private static final boolean stranded = false; + public static GuiScreen display = null; public static Config configFile = Config.INSTANCE; public static KeyBinding[] keyBinds = new KeyBinding[20]; @@ -54,13 +64,14 @@ public class Main { public static boolean brewingMacro = false; public static boolean nukeCrops = false; public static boolean nukeWood = false; - public static boolean placeCane = false; private static boolean firstLoginThisSession = true; private static boolean oldanim = false; + public static boolean oringo = false; public static boolean init = false; public static boolean mithrilMacro = false; private boolean issue = false; public static boolean pauseCustom = false; + public static boolean strandedVillagers = false; public static final Minecraft mc = Minecraft.getMinecraft(); public static JsonObject rga; @@ -69,6 +80,9 @@ public class Main { private String[] cumsters = null; private String[] ILILILLILILLILILILL = null; + public static String[] cheatar = null; + public static ArrayList<String> blacklist = new ArrayList<>(); + public static HashMap<String, String> nameCache = new HashMap<>(); public static HashMap<String, String> rankCache = new HashMap<>(); public static ArrayList<String> hashedCache = new ArrayList<>(); @@ -79,6 +93,7 @@ public class Main { public void onFMLInitialization(FMLPreInitializationEvent event) { File directory = new File(event.getModConfigurationDirectory(), "rosegoldaddons"); if (!directory.exists()) { + directory.mkdirs(); } @@ -92,7 +107,6 @@ public class Main { @Mod.EventHandler public void init(FMLInitializationEvent event) { - if (issue) return; MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(new AutoReady()); MinecraftForge.EVENT_BUS.register(new OpenSkyblockGui()); @@ -124,6 +138,11 @@ public class Main { MinecraftForge.EVENT_BUS.register(new ShadyRotation()); MinecraftForge.EVENT_BUS.register(new DungeonESP()); MinecraftForge.EVENT_BUS.register(new ScoreboardUtils()); + MinecraftForge.EVENT_BUS.register(new PrecEyeMacro()); + MinecraftForge.EVENT_BUS.register(new StrandedVillagerMacro()); + MinecraftForge.EVENT_BUS.register(new AutoLeaveLimbo()); + MinecraftForge.EVENT_BUS.register(new AutoThreeWeirdos()); + MinecraftForge.EVENT_BUS.register(new AutoClicker()); configFile.initialize(); ClientCommandHandler.instance.registerCommand(new OpenSettings()); ClientCommandHandler.instance.registerCommand(new Rosedrobe()); @@ -134,41 +153,58 @@ public class Main { ClientCommandHandler.instance.registerCommand(new AllEntities()); ClientCommandHandler.instance.registerCommand(new SexPlayer()); - JsonArray funnynames = rga.get("funnynames").getAsJsonArray(); - cumsters = new String[funnynames.size()]; - Iterator<JsonElement> fn = funnynames.iterator(); - int count = 0; - while(fn.hasNext()) { - JsonElement name = fn.next(); - cumsters[count] = name.getAsString(); - count++; - } - JsonArray funnymessages = rga.get("funnymessages").getAsJsonArray(); - ILILILLILILLILILILL = new String[funnymessages.size()]; - Iterator<JsonElement> fm = funnymessages.iterator(); - count = 0; - while(fm.hasNext()) { - JsonElement message = fm.next(); - ILILILLILILLILILILL[count] = message.getAsString(); - count++; - } + if(!issue) { + JsonArray funnynames = rga.get("funnynames").getAsJsonArray(); + cumsters = new String[funnynames.size()]; + Iterator<JsonElement> fn = funnynames.iterator(); + int count = 0; + while (fn.hasNext()) { + JsonElement name = fn.next(); + cumsters[count] = name.getAsString(); + count++; + } + JsonArray funnymessages = rga.get("funnymessages").getAsJsonArray(); + ILILILLILILLILILILL = new String[funnymessages.size()]; + Iterator<JsonElement> fm = funnymessages.iterator(); + count = 0; + while (fm.hasNext()) { + JsonElement message = fm.next(); + ILILILLILILLILILILL[count] = message.getAsString(); + count++; + } - JsonObject replacions = rga.get("replacions").getAsJsonObject(); - Set<Map.Entry<String, JsonElement>> set = replacions.entrySet(); + JsonArray cheaters = rga.get("cheaters").getAsJsonArray(); + cheatar = new String[cheaters.size()]; + Iterator<JsonElement> ch = cheaters.iterator(); + count = 0; + while (ch.hasNext()) { + JsonElement name = ch.next(); + cheatar[count] = name.getAsString(); + count++; + } - set.forEach(stringJsonElementEntry -> { - names.put(stringJsonElementEntry.getKey(), stringJsonElementEntry.getValue().getAsString().replace("&", "§")); - System.out.println(stringJsonElementEntry.getKey()+": "+stringJsonElementEntry.getValue().getAsString().replace("&", "§")); - }); + JsonObject replacions = rga.get("replacions").getAsJsonObject(); + Set<Map.Entry<String, JsonElement>> set = replacions.entrySet(); - replacions = rga.get("ranks").getAsJsonObject(); - set = replacions.entrySet(); + set.forEach(stringJsonElementEntry -> { + names.put(stringJsonElementEntry.getKey(), stringJsonElementEntry.getValue().getAsString().replace("&", "§")); + System.out.println(stringJsonElementEntry.getKey() + ": " + stringJsonElementEntry.getValue().getAsString().replace("&", "§")); + }); - set.forEach(stringJsonElementEntry -> { - ranks.put(stringJsonElementEntry.getKey(), stringJsonElementEntry.getValue().getAsString().replace("&", "§")); - System.out.println(stringJsonElementEntry.getKey()+": "+stringJsonElementEntry.getValue().getAsString().replace("&", "§")); - }); - init = true; + replacions = rga.get("ranks").getAsJsonObject(); + set = replacions.entrySet(); + + set.forEach(stringJsonElementEntry -> { + ranks.put(stringJsonElementEntry.getKey(), stringJsonElementEntry.getValue().getAsString().replace("&", "§")); + System.out.println(stringJsonElementEntry.getKey() + ": " + stringJsonElementEntry.getValue().getAsString().replace("&", "§")); + }); + + JsonArray jsonArray = rga.get("blacklist").getAsJsonArray(); + for(JsonElement jsonElement : jsonArray) { + blacklist.add(jsonElement.getAsString()); + } + init = true; + } try { Reader reader = Files.newBufferedReader(Paths.get("./config/rosegoldaddons/rcmacros.json")); @@ -208,7 +244,7 @@ public class Main { keyBinds[0] = new KeyBinding("Custom Item Macro Toggle", Keyboard.KEY_NONE, "RoseGoldAddons"); keyBinds[1] = new KeyBinding("Toggle Enderman Macro", Keyboard.KEY_NONE, "RoseGoldAddons"); keyBinds[2] = new KeyBinding("Arrow Align Aura", Keyboard.KEY_NONE, "RoseGoldAddons - Dungeons"); - keyBinds[3] = new KeyBinding("Powder Macro Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Mining"); + keyBinds[3] = new KeyBinding("Powder Chest Macro Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Mining"); keyBinds[4] = new KeyBinding("AOTS SS Toggle", Keyboard.KEY_NONE, "RoseGoldAddons"); keyBinds[5] = new KeyBinding("Soul Whip SS Toggle", Keyboard.KEY_NONE, "RoseGoldAddons"); keyBinds[6] = new KeyBinding("Ghost Macro Toggle", Keyboard.KEY_NONE, "RoseGoldAddons"); @@ -222,13 +258,15 @@ public class Main { keyBinds[14] = new KeyBinding("Crop Nuker Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Farming"); keyBinds[15] = new KeyBinding("Mithril Nuker Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Mining"); keyBinds[16] = new KeyBinding("Foraging Nuker Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Foraging"); - keyBinds[17] = new KeyBinding("Cane Placer Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Farming"); - keyBinds[18] = new KeyBinding("Mithril Macro Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Mining"); - keyBinds[19] = new KeyBinding("Peek Custom Names", Keyboard.KEY_NONE, "RoseGoldAddons"); + keyBinds[17] = new KeyBinding("Mithril Macro Toggle", Keyboard.KEY_NONE, "RoseGoldAddons - Mining"); + keyBinds[18] = new KeyBinding("Toggle Custom Names", Keyboard.KEY_NONE, "RoseGoldAddons"); + keyBinds[19] = new KeyBinding("Toggle Stranded Villager Trading", Keyboard.KEY_NONE, "RoseGoldAddons"); for (KeyBinding keyBind : keyBinds) { ClientRegistry.registerKeyBinding(keyBind); } + + AutoClicker.init(); } @Mod.EventHandler @@ -237,19 +275,36 @@ public class Main { if (modContainer.getModId().equals("oldanimations")) { oldanim = true; } + if (modContainer.getModId().equals("examplemod")) { + oringo = true; + } }); + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime firstRun = now.withSecond(0).plusMinutes(1); + Duration initialDelay = Duration.between(now, firstRun); + Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> { + System.out.println("Reset hashed cache!"); + hashedCache.clear(); + }, initialDelay.getSeconds(), 600, TimeUnit.SECONDS); + + Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> MinecraftForge.EVENT_BUS.post(new MillisecondEvent()), initialDelay.getSeconds(), 1, TimeUnit.MILLISECONDS); + } @SubscribeEvent public void onWorldChange(WorldEvent.Unload event) { - if(forageOnIsland || nukeWood || nukeCrops || mithrilNuker || gemNukeToggle || mithrilMacro) { - ChatUtils.sendMessage("§cDetected World Change, Stopping All Macros"); - forageOnIsland = false; - nukeWood = false; - nukeCrops = false; - mithrilNuker = false; - gemNukeToggle = false; - mithrilMacro = false; + if(configFile.pauseAllWorldChange) { + if (forageOnIsland || nukeWood || nukeCrops || mithrilNuker || gemNukeToggle || mithrilMacro || autoHardStone) { + ChatUtils.sendMessage("§cDetected World Change, Stopping All Macros"); + forageOnIsland = false; + nukeWood = false; + nukeCrops = false; + mithrilNuker = false; + gemNukeToggle = false; + mithrilMacro = false; + autoHardStone = false; + } } } @@ -258,8 +313,8 @@ public class Main { if (event.phase != TickEvent.Phase.START) return; if(mc.thePlayer == null || mc.theWorld == null) return; if(firstLoginThisSession) { - ChatComponentText msg1 = new ChatComponentText("§0§7Thanks to ShadyAddons:§b https://cheatersgetbanned.me"); - msg1.setChatStyle(ChatUtils.createClickStyle(ClickEvent.Action.OPEN_URL, "https://cheatersgetbanned.me")); + ChatComponentText msg1 = new ChatComponentText("§0§7Thanks to ShadyAddons:§b https://shadyaddons.com/"); + msg1.setChatStyle(ChatUtils.createClickStyle(ClickEvent.Action.OPEN_URL, "https://shadyaddons.com/")); ChatComponentText msg2 = new ChatComponentText("§0§7Thanks to Harry282 (SBClient):§b https://github.com/Harry282/Skyblock-Client"); msg2.setChatStyle(ChatUtils.createClickStyle(ClickEvent.Action.OPEN_URL, "https://github.com/Harry282/Skyblock-Client")); ChatComponentText msg3 = new ChatComponentText("§0§7Thanks to pizza boy (Pizza Client):§b https://github.com/PizzaboiBestLegit/Pizza-Client"); @@ -271,7 +326,13 @@ public class Main { mc.thePlayer.addChatMessage(msg3); mc.thePlayer.addChatMessage(msg4); if(oldanim) { - ChatUtils.sendMessage("§l§4Old Animations Mod was detected in your mods folder. This mod breaks some key RoseGoldAddons features, please uninstall it before asking for support as it is known to cause a lot of issues. Thanks."); + ChatUtils.sendMessage("§l§cOld Animations Mod was detected in your mods folder. This mod breaks some key RoseGoldAddons features, please uninstall it before asking for support as it is known to cause a lot of issues. Thanks."); + } + if(oringo) { + ChatUtils.sendMessage("§l§cDetected Oringo Client loaded, server side rotations will not work during this session if oringo version is before 1.7.0."); + } + if(issue) { + ChatUtils.sendMessage("§l§cAn error has occurred while retrieving info from the RoseGoldAddons database, certain features will not work during this session"); } firstLoginThisSession = false; } @@ -289,14 +350,9 @@ public class Main { } @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) { - pauseCustom = keyBinds[19].isKeyDown(); - } - - @SubscribeEvent public void key(InputEvent.KeyInputEvent event) { int rnd = new Random().nextInt(configFile.skiblock); - if(rnd == 0 && configFile.funnyStuff) { + if(rnd == 0 && configFile.funnyStuff && init) { mc.thePlayer.addChatMessage(new ChatComponentText((cumsters[new Random().nextInt(cumsters.length)].replace("&","§")+"§7: "+i(ILILILLILILLILILILL[new Random().nextInt(ILILILLILILLILILILL.length)])))); } if (keyBinds[0].isPressed()) { @@ -306,12 +362,30 @@ public class Main { } else if (keyBinds[1].isPressed()) { endermanMacro = !endermanMacro; String str = endermanMacro ? "§aZealot Macro Activated" : "§cZealot Macro Deactivated"; + EndermanMacro.ticks = 0; ChatUtils.sendMessage(str); + if(endermanMacro) { + EndermanMacro.ms = System.currentTimeMillis(); + if(configFile.endermanMove) { + if(Main.configFile.endermanIronman) { + ChatUtils.sendMessage("Needed: " + "§6Precursor Eye§f, §b/warp drag§f, Chest near island spawn"); + } else { + if (Main.configFile.endermanTimer != 0) { + ChatUtils.sendMessage("Needed: " + "§6Precursor Eye§f, §b/warp drag§f, §b/bz"); + } else { + ChatUtils.sendMessage("Needed: " + "§6Precursor Eye§f"); + } + } + ChatUtils.sendMessage("Recommended to hold a §6Spirit Sceptre"); + } else { + ChatUtils.sendMessage("Needed: "+"§6Precursor Eye"); + } + } } else if (keyBinds[2].isPressed()) { AutoArrowAlign.cheat(); } else if (keyBinds[3].isPressed()) { powderMacro = !powderMacro; - String str = powderMacro ? "§aPowder Macro Activated" : "§cPowder Macro Deactivated"; + String str = powderMacro ? "§aPowder Chest Macro Activated" : "§cPowder Chest Macro Deactivated"; ChatUtils.sendMessage(str); } else if (keyBinds[4].isPressed()) { AOTSMacro = !AOTSMacro; @@ -364,13 +438,23 @@ public class Main { String str = nukeWood ? "§aForaging Nuker Activated" : "§cForaging Nuker Deactivated"; ChatUtils.sendMessage(str); } else if(keyBinds[17].isPressed()) { - placeCane = !placeCane; - String str = placeCane ? "§aCane Placer Activated" : "§cCane Placer Deactivated"; - ChatUtils.sendMessage(str); - } else if(keyBinds[18].isPressed()) { mithrilMacro = !mithrilMacro; String str = mithrilMacro ? "§aMithril Macro Activated" : "§cMithril Macro Deactivated"; ChatUtils.sendMessage(str); + } else if(keyBinds[18].isPressed()) { + pauseCustom = !pauseCustom; + ChatUtils.sendMessage(pauseCustom ? "§cCustom Names Deactivated" : "§aCustom Names Activated"); + } else if(keyBinds[19].isPressed()) { + if(stranded) { + strandedVillagers = !strandedVillagers; + StrandedVillagerMacro.drop = false; + StrandedVillagerMacro.dropped = false; + StrandedVillagerMacro.trade = false; + StrandedVillagerMacro.traded = false; + StrandedVillagerMacro.emptySack = false; + StrandedVillagerMacro.emptied = false; + ChatUtils.sendMessage(strandedVillagers ? "§aStranded Villager Trading Activated" : "§cStranded Villager Trading Deactivated"); + } } } diff --git a/src/main/java/rosegoldaddons/events/MillisecondEvent.java b/src/main/java/rosegoldaddons/events/MillisecondEvent.java new file mode 100644 index 0000000..4ea5160 --- /dev/null +++ b/src/main/java/rosegoldaddons/events/MillisecondEvent.java @@ -0,0 +1,13 @@ +package rosegoldaddons.events; + +import net.minecraftforge.fml.common.eventhandler.Event; + +import java.time.LocalDateTime; + +public class MillisecondEvent extends Event { + public LocalDateTime dateTime; + + public MillisecondEvent() { + dateTime = LocalDateTime.now(); + } +}
\ No newline at end of file diff --git a/src/main/java/rosegoldaddons/events/PlayerMoveEvent.java b/src/main/java/rosegoldaddons/events/PlayerMoveEvent.java new file mode 100644 index 0000000..cab6637 --- /dev/null +++ b/src/main/java/rosegoldaddons/events/PlayerMoveEvent.java @@ -0,0 +1,12 @@ +package rosegoldaddons.events; + +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; + +@Cancelable +public class PlayerMoveEvent extends Event { + @Cancelable + public static class Pre extends Event {} + + public static class Post extends Event {} +} diff --git a/src/main/java/rosegoldaddons/events/ScreenClosedEvent.java b/src/main/java/rosegoldaddons/events/ScreenClosedEvent.java new file mode 100644 index 0000000..bee57c4 --- /dev/null +++ b/src/main/java/rosegoldaddons/events/ScreenClosedEvent.java @@ -0,0 +1,10 @@ +package rosegoldaddons.events; + +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; + +@Cancelable +public class ScreenClosedEvent extends Event { + + public ScreenClosedEvent() {} +} diff --git a/src/main/java/rosegoldaddons/features/ArmorStandESPs.java b/src/main/java/rosegoldaddons/features/ArmorStandESPs.java index f726052..b937f8a 100644 --- a/src/main/java/rosegoldaddons/features/ArmorStandESPs.java +++ b/src/main/java/rosegoldaddons/features/ArmorStandESPs.java @@ -1,6 +1,5 @@ package rosegoldaddons.features; -import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import net.minecraft.entity.boss.EntityWither; diff --git a/src/main/java/rosegoldaddons/features/AutoArrowAlign.java b/src/main/java/rosegoldaddons/features/AutoArrowAlign.java index db9650f..de502c4 100644 --- a/src/main/java/rosegoldaddons/features/AutoArrowAlign.java +++ b/src/main/java/rosegoldaddons/features/AutoArrowAlign.java @@ -32,7 +32,7 @@ public class AutoArrowAlign { private static final Map<BlockPos, Integer> clicksPerFrame = new HashMap<>(); private static final Map<BlockPos, Integer> toClickMap = new HashMap<>(); private static boolean init = false; - private static final BlockPos topLeft = new BlockPos(196, 125, 278); + private static final BlockPos topLeft = new BlockPos(196 - 100, 125, 278 - 100); /*@SubscribeEvent public void debugging(TickEvent.ClientTickEvent event) { @@ -336,6 +336,6 @@ public class AutoArrowAlign { private static boolean isInSection3() { int x = Main.mc.thePlayer.getPosition().getX(); int z = Main.mc.thePlayer.getPosition().getZ(); - return x < 218 && z > 251 && x > 196 && z < 319; + return x < (218 - 200) && z > (251 - 200) && x > (196 - 200) && z < (319 - 200); } } diff --git a/src/main/java/rosegoldaddons/features/AutoClicker.java b/src/main/java/rosegoldaddons/features/AutoClicker.java new file mode 100644 index 0000000..0411df3 --- /dev/null +++ b/src/main/java/rosegoldaddons/features/AutoClicker.java @@ -0,0 +1,80 @@ +package rosegoldaddons.features; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.util.MovingObjectPosition; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.InputEvent; +import org.lwjgl.input.Keyboard; +import rosegoldaddons.Main; +import rosegoldaddons.events.MillisecondEvent; +import rosegoldaddons.utils.ChatUtils; + +import java.lang.reflect.Method; + +public class AutoClicker { + private static final KeyBinding keyBinding = new KeyBinding("Auto Clicker", Keyboard.KEY_NONE, "RoseGoldAddons - Combat"); + private boolean toggled = false; + private int count = 0; + private long startedAt = 0; + private long lastClickTime = 0; + + @SubscribeEvent + public void onMillisecond(MillisecondEvent event) { + if(!toggled) return; + if(System.currentTimeMillis() - lastClickTime < (long) (1000 / Main.configFile.autoClickerCPS)) return; + switch (Main.configFile.autoClickerMode) { + case 1: + MovingObjectPosition movingObjectPosition = Main.mc.objectMouseOver; + if (movingObjectPosition != null && movingObjectPosition.entityHit != null) { + Main.mc.playerController.attackEntity(Main.mc.thePlayer, movingObjectPosition.entityHit); + Main.mc.thePlayer.swingItem(); + count++; + } else if (movingObjectPosition != null) { + Main.mc.thePlayer.swingItem(); + } + break; + case 0: + rightClick(); + count++; + break; + } + lastClickTime = System.currentTimeMillis(); + } + + @SubscribeEvent + public void onKeyInput(InputEvent.KeyInputEvent event) { + int eventKey = Keyboard.getEventKey(); + if(eventKey != keyBinding.getKeyCode()) return; + if(Keyboard.isKeyDown(eventKey)) { + if(!toggled) { + toggled = true; + count = 0; + startedAt = System.currentTimeMillis(); + } + } else { + toggled = false; + ChatUtils.sendMessage(String.format("%s Clicks in %s milliseconds", count, System.currentTimeMillis() - startedAt)); + } + } + + public static void init() { + ClientRegistry.registerKeyBinding(keyBinding); + } + + public static void rightClick() { + try { + Method rightClickMouse; + try { + rightClickMouse = Minecraft.class.getDeclaredMethod("func_147121_ag"); + } catch (NoSuchMethodException e) { + rightClickMouse = Minecraft.class.getDeclaredMethod("rightClickMouse"); + } + rightClickMouse.setAccessible(true); + rightClickMouse.invoke(Main.mc); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/rosegoldaddons/features/AutoLeaveLimbo.java b/src/main/java/rosegoldaddons/features/AutoLeaveLimbo.java new file mode 100644 index 0000000..407965f --- /dev/null +++ b/src/main/java/rosegoldaddons/features/AutoLeaveLimbo.java @@ -0,0 +1,37 @@ +package rosegoldaddons.features; + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import rosegoldaddons.Main; +import rosegoldaddons.utils.ScoreboardUtils; + +public class AutoLeaveLimbo { + private int deb = 0; + private boolean playSb = false; + private int prev = 0; + + @SubscribeEvent + public void onTick(TickEvent.ClientTickEvent event) { + if(!Main.configFile.autoLeaveLimbo || Main.endermanMacro) return; + if(event.phase == TickEvent.Phase.END) return; + if(deb > 0) deb--; + if(deb != 0) return; + deb = 20; + if(ScoreboardUtils.inLimbo) { + if(prev < 10) { + prev++; + } else { + Main.mc.thePlayer.sendChatMessage("/l"); + prev = 0; + playSb = true; + return; + } + } else { + prev = 0; + } + if(!ScoreboardUtils.inSkyblock && playSb && Main.configFile.autoLimboSB) { + Main.mc.thePlayer.sendChatMessage("/play sb"); + playSb = false; + } + } +} diff --git a/src/main/java/rosegoldaddons/features/AutoSlayer.java b/src/main/java/rosegoldaddons/features/AutoSlayer.java index 64b173a..09c7c51 100644 --- a/src/main/java/rosegoldaddons/features/AutoSlayer.java +++ b/src/main/java/rosegoldaddons/features/AutoSlayer.java @@ -25,6 +25,8 @@ public class AutoSlayer { private static boolean openMaddox = false; private static boolean startSlayer = false; private static boolean waitingForMaddox = false; + private static boolean restart = false; + private static int countdown = 0; private static int slayerSlot = 0; private static int slotLevel = 0; private static int debounce = 0; @@ -46,12 +48,12 @@ public class AutoSlayer { } @SubscribeEvent - public void onInteract(InputEvent.KeyInputEvent event) { + public void interactHandler(TickEvent.ClientTickEvent event) { + if(Main.mc.thePlayer == null || Main.mc.theWorld == null) return; + if(ScoreboardUtils.inPrivateIsland) return; if (!Main.configFile.autoSlayer || !Main.configFile.clickMaddox || waitingForMaddox || debounce != 0) return; - List<String> scoreboard = ScoreboardUtils.getSidebarLines(); - for (String line : scoreboard) { - String cleanedLine = ScoreboardUtils.cleanSB(line); - if (cleanedLine.contains("Boss slain!")) { + if (Main.configFile.forceSlayer) { + if (!ScoreboardUtils.scoreboardContains("Slay the boss!") && !ScoreboardUtils.scoreboardContains("Kills") && !ScoreboardUtils.scoreboardContains("Combat XP")) { int maddox = findItemInHotbar("Batphone"); if (maddox != -1) { ItemStack item = Main.mc.thePlayer.inventory.getStackInSlot(maddox); @@ -60,7 +62,44 @@ public class AutoSlayer { Main.mc.playerController.sendUseItem(Main.mc.thePlayer, Main.mc.theWorld, item); Main.mc.thePlayer.inventory.currentItem = save; waitingForMaddox = true; - break; + restart = false; + } + } + if (ScoreboardUtils.scoreboardContains("Slay the boss!")) { + if (!restart) { + countdown = 800; + restart = true; + } else { + if (countdown > 0) { + if (countdown % 40 == 0) { + ChatUtils.sendMessage("§ccountdown: " + countdown / 40); + } + countdown--; + } else { + int maddox = findItemInHotbar("Batphone"); + if (maddox != -1) { + ItemStack item = Main.mc.thePlayer.inventory.getStackInSlot(maddox); + int save = Main.mc.thePlayer.inventory.currentItem; + Main.mc.thePlayer.inventory.currentItem = maddox; + Main.mc.playerController.sendUseItem(Main.mc.thePlayer, Main.mc.theWorld, item); + Main.mc.thePlayer.inventory.currentItem = save; + waitingForMaddox = true; + restart = false; + } + } + } + } + } else { + if (ScoreboardUtils.scoreboardContains("Boss slain!")) { + int maddox = findItemInHotbar("Batphone"); + if (maddox != -1) { + ItemStack item = Main.mc.thePlayer.inventory.getStackInSlot(maddox); + int save = Main.mc.thePlayer.inventory.currentItem; + Main.mc.thePlayer.inventory.currentItem = maddox; + Main.mc.playerController.sendUseItem(Main.mc.thePlayer, Main.mc.theWorld, item); + Main.mc.thePlayer.inventory.currentItem = save; + waitingForMaddox = true; + restart = false; } } } @@ -133,13 +172,26 @@ public class AutoSlayer { List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; if (!chestInventory.get(13).getHasStack()) return; if (chestInventory.get(13).getStack().getDisplayName().contains("Ongoing")) { - + if (Main.configFile.forceSlayer) { + clickSlot(13, 2, 0); + clickSlot(11, 2, 1); + clickSlot(slayerSlot, 2, 2); + clickSlot(slotLevel, 2, 3); + clickSlot(11, 2, 4); //confirm + debounce = 80; + } } else if (chestInventory.get(13).getStack().getDisplayName().contains("Complete")) { clickSlot(13, 2, 0); clickSlot(slayerSlot, 2, 1); clickSlot(slotLevel, 2, 2); clickSlot(11, 2, 3); //confirm debounce = 80; + } else if (chestInventory.get(13).getStack().getDisplayName().contains("Failed")) { + clickSlot(13, 2, 0); + clickSlot(slayerSlot, 2, 1); + clickSlot(slotLevel, 2, 2); + clickSlot(11, 2, 3); //confirm + debounce = 80; } else { clickSlot(slayerSlot, 2, 0); clickSlot(slotLevel, 2, 1); diff --git a/src/main/java/rosegoldaddons/features/AutoThreeWeirdos.java b/src/main/java/rosegoldaddons/features/AutoThreeWeirdos.java new file mode 100644 index 0000000..d96e804 --- /dev/null +++ b/src/main/java/rosegoldaddons/features/AutoThreeWeirdos.java @@ -0,0 +1,169 @@ +package rosegoldaddons.features; + +import net.minecraft.client.multiplayer.PlayerControllerMP; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.StringUtils; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.event.ClientChatReceivedEvent; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import rosegoldaddons.Main; +import rosegoldaddons.utils.ChatUtils; +import rosegoldaddons.utils.ScoreboardUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +/* + * Solver blatantly copied from DSM: https://github.com/bowser0000/SkyblockMod + */ + +public class AutoThreeWeirdos { + private static final ArrayList<String> solutions = new ArrayList<>(Arrays.asList( + "The reward is not in my chest!", + "At least one of them is lying, and the reward is not in", + "My chest doesn't have the reward. We are all telling the truth", + "My chest has the reward and I'm telling the truth", + "The reward isn't in any of our chests", + "Both of them are telling the truth." + )); + + private static final ArrayList<String> weirdos = new ArrayList<>(Arrays.asList( + "Baxter", "Benson", "Eveleth", "Hope", "Luverne", "Madelia", "Rose", "Victoria", "Morris", "Carver", "Ardis", "Lino", + "Elmo", "Virginia", "Montgomery", "Winona", "Melrose", "Marshall", "Hugo", "Willmar", "Ramsey" + )); + + private static BlockPos riddleChest = null; + private static boolean talked = false; + private static boolean opened = false; + private static int debounce = 0; + + + @SubscribeEvent + public void onChat(ClientChatReceivedEvent event) { + if(!Main.configFile.autoThreeWeirdos || opened || !ScoreboardUtils.inDungeon) return; + String message = removeFormatting(event.message.getUnformattedText()); + if (message.startsWith("[NPC]")) { + for (String solution : solutions) { + if (message.contains(solution)) { + String npcName = message.substring(message.indexOf("]") + 2, message.indexOf(":")); + if (riddleChest == null) { + List<Entity> entities = Main.mc.theWorld.getLoadedEntityList(); + for (Entity entity : entities) { + if (entity == null || !entity.hasCustomName()) continue; + if (entity.getCustomNameTag().contains(npcName)) { + BlockPos npcLocation = new BlockPos(entity.posX, 69, entity.posZ); + if (Main.mc.theWorld.getBlockState(npcLocation.north()).getBlock() == Blocks.chest) { + riddleChest = npcLocation.north(); + } else if (Main.mc.theWorld.getBlockState(npcLocation.east()).getBlock() == Blocks.chest) { + riddleChest = npcLocation.east(); + } else if (Main.mc.theWorld.getBlockState(npcLocation.south()).getBlock() == Blocks.chest) { + riddleChest = npcLocation.south(); + } else if (Main.mc.theWorld.getBlockState(npcLocation.west()).getBlock() == Blocks.chest) { + riddleChest = npcLocation.west(); + } else { + ChatUtils.sendMessage("Could not find correct riddle chest."); + } + break; + } + } + } + break; + } + } + } + else if(message.startsWith("PUZZLE") && message.contains("wasn't fooled by")) { + opened = true; + talked = true; + } + } + + @SubscribeEvent + public void onTick(TickEvent.ClientTickEvent event) { + if(!Main.configFile.autoThreeWeirdos || opened || !ScoreboardUtils.inDungeon) return; + if(Main.mc.theWorld == null || Main.mc.thePlayer == null) return; + if(event.phase == TickEvent.Phase.END) return; + if(debounce > 0) debounce--; + if(debounce != 0) return; + if(!talked) { + debounce = 5; + if(!allWeirdosInRange()) return; + interactWithWeirdos(); + talked = true; + } else { + if(riddleChest != null) { + debounce = 10; + interactWithChest(); + } + } + } + + @SubscribeEvent + public void onWorldChange(WorldEvent.Load event) { + riddleChest = null; + opened = false; + talked = false; + } + + private static boolean allWeirdosInRange() { + int count = 0; + List<Entity> entities = Main.mc.theWorld.getLoadedEntityList(); + for (Entity entity : entities) { + if (entity == null || !entity.hasCustomName()) continue; + String name = removeFormatting(entity.getCustomNameTag()); + if(weirdos.contains(name)) { + float range = entity.getDistanceToEntity(Main.mc.thePlayer); + if(range < 4) { + count++; + } + } + } + if(count == 1 || count == 2) { + ChatUtils.sendMessage("Detected an incorrect amount of weirdos in range, try moving closer or DMing RoseGold#5441 the names of the weirdos"); + } + return count == 3 || count == 2; + } + + private static void interactWithWeirdos() { + List<Entity> entities = Main.mc.theWorld.getLoadedEntityList(); + for (Entity entity : entities) { + if (entity == null || !entity.hasCustomName()) continue; + String name = removeFormatting(entity.getCustomNameTag()); + if(weirdos.contains(name)) { + interactWithEntity(entity); + } + } + } + + private static void interactWithChest() { + Vec3 playerPos = Main.mc.thePlayer.getPositionEyes(1f); + if(playerPos.distanceTo(new Vec3(riddleChest.getX() + 0.5, riddleChest.getY() + 0.5, riddleChest.getZ() + 0.5)) > 5) { + ChatUtils.sendMessage("§cWalk closer to chest!"); + } + if(Main.mc.playerController.onPlayerRightClick( + Main.mc.thePlayer, + Main.mc.theWorld, + Main.mc.thePlayer.inventory.getCurrentItem(), + riddleChest, + EnumFacing.fromAngle(Main.mc.thePlayer.rotationYaw), + new Vec3(Math.random(), Math.random(), Math.random()) + )) { + Main.mc.thePlayer.swingItem(); + opened = true; + } + } + + private static void interactWithEntity(Entity entity) { + PlayerControllerMP playerControllerMP = Main.mc.playerController; + playerControllerMP.interactWithEntitySendPacket(Main.mc.thePlayer, entity); + } + + private static String removeFormatting(String input) { + return input.replaceAll("§[0-9a-fk-or]", ""); + } + +} diff --git a/src/main/java/rosegoldaddons/features/CustomItemMacro.java b/src/main/java/rosegoldaddons/features/CustomItemMacro.java index 37b4ce3..7f6e179 100644 --- a/src/main/java/rosegoldaddons/features/CustomItemMacro.java +++ b/src/main/java/rosegoldaddons/features/CustomItemMacro.java @@ -1,18 +1,12 @@ package rosegoldaddons.features; -import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -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.commands.UseCooldown; -import java.lang.reflect.Method; - public class CustomItemMacro { private Thread thread; private int milis = 0; diff --git a/src/main/java/rosegoldaddons/features/DungeonESP.java b/src/main/java/rosegoldaddons/features/DungeonESP.java index b611fe9..958a5e3 100644 --- a/src/main/java/rosegoldaddons/features/DungeonESP.java +++ b/src/main/java/rosegoldaddons/features/DungeonESP.java @@ -1,7 +1,6 @@ package rosegoldaddons.features; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.passive.EntityBat; import net.minecraft.entity.player.EntityPlayer; @@ -9,9 +8,9 @@ import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; import rosegoldaddons.Main; import rosegoldaddons.events.RenderLivingEntityEvent; -import rosegoldaddons.utils.ChatUtils; import rosegoldaddons.utils.RenderUtils; import rosegoldaddons.utils.ScoreboardUtils; @@ -23,6 +22,7 @@ import java.util.List; public class DungeonESP { private static HashMap<Entity, Color> highlightedEntities = new HashMap<>(); private static HashSet<Entity> checkedStarNameTags = new HashSet<>(); + private int ticks = 0; private static void highlightEntity(Entity entity, Color color) { highlightedEntities.put(entity, color); @@ -55,11 +55,10 @@ public class DungeonESP { @SubscribeEvent public void onRenderEntityLiving(RenderLivingEntityEvent event) { - if (!ScoreboardUtils.inDungeon || !Main.configFile.dungeonESP || checkedStarNameTags.contains(event.entity)) - return; + if (!ScoreboardUtils.inDungeon || !Main.configFile.dungeonESP || checkedStarNameTags.contains(event.entity)) return; if (event.entity instanceof EntityArmorStand) { - if (event.entity.hasCustomName() && event.entity.getCustomNameTag().contains("✯")) { - List<Entity> possibleEntities = event.entity.getEntityWorld().getEntitiesInAABBexcluding(event.entity, event.entity.getEntityBoundingBox().expand(0, 3, 0), entity -> !(entity instanceof EntityArmorStand)); + if (event.entity.hasCustomName() && (event.entity.getCustomNameTag().contains("✯") || event.entity.getCustomNameTag().contains("__rga"))) { + List<Entity> possibleEntities = event.entity.getEntityWorld().getEntitiesInAABBexcluding(event.entity, event.entity.getEntityBoundingBox().offset(0, -1, 0), entity -> !(entity instanceof EntityArmorStand)); if (!possibleEntities.isEmpty()) { highlightEntity(possibleEntities.get(0), Color.ORANGE); } @@ -80,6 +79,15 @@ public class DungeonESP { } @SubscribeEvent + public void onTick(TickEvent.ClientTickEvent event) { + if(ticks % 40 == 0) { + checkedStarNameTags.clear(); + ticks = 0; + } + ticks++; + } + + @SubscribeEvent public void onWorldLoad(WorldEvent.Load event) { highlightedEntities.clear(); checkedStarNameTags.clear(); 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; } diff --git a/src/main/java/rosegoldaddons/features/ForagingIslandMacro.java b/src/main/java/rosegoldaddons/features/ForagingIslandMacro.java index bf37569..d5c0fa4 100644 --- a/src/main/java/rosegoldaddons/features/ForagingIslandMacro.java +++ b/src/main/java/rosegoldaddons/features/ForagingIslandMacro.java @@ -37,11 +37,14 @@ public class ForagingIslandMacro { if(sapling == -1) { sapling = findItemInHotbar("Oak Sapling"); } + if(sapling == -1) { + sapling = findItemInHotbar("Spruce Sapling"); + } int bonemeal = findItemInHotbar("Bone Meal"); int treecap = findItemInHotbar("Treecapitator"); int rod = findItemInHotbar("Rod"); if(sapling == -1) { - ChatUtils.sendMessage("§cNo jungle saplings in hotbar"); + ChatUtils.sendMessage("§cNo saplings in hotbar"); } if(bonemeal == -1) { ChatUtils.sendMessage("§cNo bonemeal in hotbar"); diff --git a/src/main/java/rosegoldaddons/features/HardstoneAura.java b/src/main/java/rosegoldaddons/features/HardstoneAura.java index 62a10dc..8a35e06 100644 --- a/src/main/java/rosegoldaddons/features/HardstoneAura.java +++ b/src/main/java/rosegoldaddons/features/HardstoneAura.java @@ -14,13 +14,17 @@ import net.minecraft.item.EnumDyeColor; import net.minecraft.network.play.client.C07PacketPlayerDigging; import net.minecraft.network.play.server.S2APacketParticles; import net.minecraft.util.*; +import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.GuiScreenEvent; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.event.world.WorldEvent; +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; import rosegoldaddons.events.ReceivePacketEvent; +import rosegoldaddons.events.ScreenClosedEvent; import rosegoldaddons.utils.*; import scala.concurrent.impl.CallbackRunnable; @@ -33,6 +37,7 @@ public class HardstoneAura { private static int currentDamage; private static BlockPos closestStone; private static Vec3 closestChest; + private static Vec3 particlePos; private boolean stopHardstone = false; private static int ticks = 0; private static BlockPos gemstone; @@ -46,24 +51,28 @@ public class HardstoneAura { return; } if (!stopHardstone) { + particlePos = null; ticks++; - if(Main.configFile.hardIndex == 0) { + if (Main.configFile.hardIndex == 0) { if (broken.size() > 10) { broken.clear(); } } - if(Main.configFile.hardIndex == 1) { + if (Main.configFile.hardIndex == 1) { if (broken.size() > 6) { broken.clear(); } } - if(ticks > 20) { + if (ticks > 30) { broken.clear(); ticks = 0; } closestStone = closestStone(); - if(gemstone != null && Main.mc.thePlayer != null) { - if(lastGem != null && !lastGem.equals(gemstone)) { + if (currentDamage > 200) { + currentDamage = 0; + } + if (gemstone != null && Main.mc.thePlayer != null) { + if (lastGem != null && !lastGem.equals(gemstone)) { currentDamage = 0; } lastGem = gemstone; @@ -98,25 +107,52 @@ public class HardstoneAura { stopHardstone = true; double dist = closestChest.distanceTo(particlePos); if (dist < 1) { - ShadyRotation.smoothLook(ShadyRotation.vec3ToRotation(particlePos), Main.configFile.smoothLookVelocity, () -> {}); + if (!Main.configFile.serverSideChest) { + ShadyRotation.smoothLook(ShadyRotation.vec3ToRotation(particlePos), Main.configFile.smoothLookVelocity, () -> { + }); + } else { + HardstoneAura.particlePos = particlePos; + } } } } } } + @SubscribeEvent(priority = EventPriority.NORMAL) + public void onUpdatePre(PlayerMoveEvent.Pre pre) { + if (particlePos != null && Main.configFile.serverSideChest) { + ShadyRotation.smoothLook(ShadyRotation.vec3ToRotation(particlePos), 0, () -> { + }); + } + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void chat(ClientChatReceivedEvent event) { + if (event.type != 0) return; + String message = event.message.getUnformattedText(); + if(message.contains("You have successfully picked the lock on this chest!")) { + if(particlePos != null && stopHardstone) { + solved.add(closestChest); + particlePos = null; + stopHardstone = false; + } + } + } + @SubscribeEvent public void guiDraw(GuiScreenEvent.BackgroundDrawnEvent event) { - if(Main.configFile.guilag) { + if (Main.configFile.guilag) { Main.mc.gameSettings.setOptionFloatValue(GameSettings.Options.FRAMERATE_LIMIT, 1); } - if(!Main.autoHardStone) return; + if (!Main.autoHardStone) return; if (event.gui instanceof GuiChest) { Container container = ((GuiChest) event.gui).inventorySlots; if (container instanceof ContainerChest) { String chestName = ((ContainerChest) container).getLowerChestInventory().getDisplayName().getUnformattedText(); if (chestName.contains("Treasure")) { solved.add(closestChest); + particlePos = null; stopHardstone = false; Main.mc.thePlayer.closeScreen(); } @@ -172,9 +208,9 @@ public class HardstoneAura { } private BlockPos closestStone() { - if(Main.mc.theWorld == null) return null; - if(Main.mc.thePlayer == null) return null; - int r = 5; + if (Main.mc.theWorld == null) return null; + if (Main.mc.thePlayer == null) return null; + int r = 4; BlockPos playerPos = Main.mc.thePlayer.getPosition(); playerPos.add(0, 1, 0); Vec3 playerVec = Main.mc.thePlayer.getPositionVector(); @@ -185,7 +221,7 @@ public class HardstoneAura { if (playerPos != null) { for (BlockPos blockPos : BlockPos.getAllInBox(playerPos.add(vec3i), playerPos.subtract(vec3i2))) { IBlockState blockState = Main.mc.theWorld.getBlockState(blockPos); - if(Main.configFile.hardIndex == 0) { + if (Main.configFile.hardIndex == 0) { if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } @@ -193,40 +229,41 @@ public class HardstoneAura { if ((blockState.getBlock() == Blocks.coal_ore || blockState.getBlock() == Blocks.diamond_ore || blockState.getBlock() == Blocks.gold_ore || blockState.getBlock() == Blocks.redstone_ore || blockState.getBlock() == Blocks.iron_ore || blockState.getBlock() == Blocks.lapis_ore - || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack) + || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack + || blockState.getBlock() == Blocks.lit_redstone_ore) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } } - if(Main.configFile.includeExcavatable) { + if (Main.configFile.includeExcavatable) { if ((blockState.getBlock() == Blocks.gravel || blockState.getBlock() == Blocks.sand) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } } } - if(Main.configFile.hardIndex == 1) { + if (Main.configFile.hardIndex == 1) { EnumFacing dir = Main.mc.thePlayer.getHorizontalFacing(); int x = (int) Math.floor(Main.mc.thePlayer.posX); - int z = (int) Math.floor(Main.mc.thePlayer.posZ); + int z = (int) Math.floor(Main.mc.thePlayer.posZ); switch (dir) { case NORTH: - if(blockPos.getZ() <= z && blockPos.getX() == x) { - if(isSlow(blockState)) { + if (blockPos.getZ() <= z && blockPos.getX() == x) { + if (isSlow(blockState)) { gemstones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); - } - else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { + } else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } if (Main.configFile.includeOres) { if ((blockState.getBlock() == Blocks.coal_ore || blockState.getBlock() == Blocks.diamond_ore || blockState.getBlock() == Blocks.gold_ore || blockState.getBlock() == Blocks.redstone_ore || blockState.getBlock() == Blocks.iron_ore || blockState.getBlock() == Blocks.lapis_ore - || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack) + || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack + || blockState.getBlock() == Blocks.lit_redstone_ore) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } } - if(Main.configFile.includeExcavatable) { + if (Main.configFile.includeExcavatable) { if ((blockState.getBlock() == Blocks.gravel || blockState.getBlock() == Blocks.sand) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } @@ -234,23 +271,23 @@ public class HardstoneAura { } break; case SOUTH: - if(blockPos.getZ() >= z && blockPos.getX() == x) { - if(isSlow(blockState)) { + if (blockPos.getZ() >= z && blockPos.getX() == x) { + if (isSlow(blockState)) { gemstones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); - } - else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { + } else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } if (Main.configFile.includeOres) { if ((blockState.getBlock() == Blocks.coal_ore || blockState.getBlock() == Blocks.diamond_ore || blockState.getBlock() == Blocks.gold_ore || blockState.getBlock() == Blocks.redstone_ore || blockState.getBlock() == Blocks.iron_ore || blockState.getBlock() == Blocks.lapis_ore - || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack) + || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack + || blockState.getBlock() == Blocks.lit_redstone_ore) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } } - if(Main.configFile.includeExcavatable) { + if (Main.configFile.includeExcavatable) { if ((blockState.getBlock() == Blocks.gravel || blockState.getBlock() == Blocks.sand) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } @@ -258,23 +295,23 @@ public class HardstoneAura { } break; case WEST: - if(blockPos.getX() <= x && blockPos.getZ() == z) { - if(isSlow(blockState)) { + if (blockPos.getX() <= x && blockPos.getZ() == z) { + if (isSlow(blockState)) { gemstones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); - } - else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { + } else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } if (Main.configFile.includeOres) { if ((blockState.getBlock() == Blocks.coal_ore || blockState.getBlock() == Blocks.diamond_ore || blockState.getBlock() == Blocks.gold_ore || blockState.getBlock() == Blocks.redstone_ore || blockState.getBlock() == Blocks.iron_ore || blockState.getBlock() == Blocks.lapis_ore - || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack) + || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack + || blockState.getBlock() == Blocks.lit_redstone_ore) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } } - if(Main.configFile.includeExcavatable) { + if (Main.configFile.includeExcavatable) { if ((blockState.getBlock() == Blocks.gravel || blockState.getBlock() == Blocks.sand) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } @@ -282,23 +319,23 @@ public class HardstoneAura { } break; case EAST: - if(blockPos.getX() >= x && blockPos.getZ() == z) { - if(isSlow(blockState)) { + if (blockPos.getX() >= x && blockPos.getZ() == z) { + if (isSlow(blockState)) { gemstones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); - } - else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { + } else if (!Main.configFile.includeExcavatable && blockState.getBlock() == Blocks.stone && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } if (Main.configFile.includeOres) { if ((blockState.getBlock() == Blocks.coal_ore || blockState.getBlock() == Blocks.diamond_ore || blockState.getBlock() == Blocks.gold_ore || blockState.getBlock() == Blocks.redstone_ore || blockState.getBlock() == Blocks.iron_ore || blockState.getBlock() == Blocks.lapis_ore - || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack) + || blockState.getBlock() == Blocks.emerald_ore || blockState.getBlock() == Blocks.netherrack + || blockState.getBlock() == Blocks.lit_redstone_ore) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } } - if(Main.configFile.includeExcavatable) { + if (Main.configFile.includeExcavatable) { if ((blockState.getBlock() == Blocks.gravel || blockState.getBlock() == Blocks.sand) && !broken.contains(blockPos)) { stones.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } @@ -340,8 +377,8 @@ public class HardstoneAura { } private Vec3 closestChest() { - if(Main.mc.theWorld == null) return null; - if(Main.mc.thePlayer == null) return null; + 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); @@ -351,7 +388,6 @@ public class HardstoneAura { if (playerPos != null) { for (BlockPos blockPos : BlockPos.getAllInBox(playerPos.add(vec3i), playerPos.subtract(vec3i))) { IBlockState blockState = Main.mc.theWorld.getBlockState(blockPos); - //Main.mc.thePlayer.addChatMessage(new ChatComponentText(blockState.getBlock().toString())); if (blockState.getBlock() == Blocks.chest) { chests.add(new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5)); } @@ -372,17 +408,17 @@ public class HardstoneAura { } private boolean isSlow(IBlockState blockState) { - if(blockState.getBlock() == Blocks.prismarine) { + if (blockState.getBlock() == Blocks.prismarine) { return true; - } else if(blockState.getBlock() == Blocks.wool) { + } else if (blockState.getBlock() == Blocks.wool) { return true; - } else if(blockState.getBlock() == Blocks.stained_hardened_clay) { + } else if (blockState.getBlock() == Blocks.stained_hardened_clay) { return true; - } else if(!Main.configFile.ignoreTitanium && blockState.getBlock() == Blocks.stone && blockState.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) { + } else if (!Main.configFile.ignoreTitanium && blockState.getBlock() == Blocks.stone && blockState.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) { return true; - } else if(blockState.getBlock() == Blocks.gold_block) { + } else if (blockState.getBlock() == Blocks.gold_block) { return true; - } else if(blockState.getBlock() == Blocks.stained_glass_pane || blockState.getBlock() == Blocks.stained_glass) { + } else if (blockState.getBlock() == Blocks.stained_glass_pane || blockState.getBlock() == Blocks.stained_glass) { return true; } return false; diff --git a/src/main/java/rosegoldaddons/features/PrecEyeMacro.java b/src/main/java/rosegoldaddons/features/PrecEyeMacro.java new file mode 100644 index 0000000..cffa9f3 --- /dev/null +++ b/src/main/java/rosegoldaddons/features/PrecEyeMacro.java @@ -0,0 +1,5 @@ +package rosegoldaddons.features; + +public class PrecEyeMacro { + +} diff --git a/src/main/java/rosegoldaddons/features/SexAura.java b/src/main/java/rosegoldaddons/features/SexAura.java index 543915f..928085d 100644 --- a/src/main/java/rosegoldaddons/features/SexAura.java +++ b/src/main/java/rosegoldaddons/features/SexAura.java @@ -4,30 +4,97 @@ import net.minecraft.util.ChatComponentText; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.apache.commons.codec.digest.DigestUtils; import rosegoldaddons.Main; +import rosegoldaddons.utils.ChatUtils; +import rosegoldaddons.utils.OpenSkyblockGui; + +import java.util.Arrays; public class SexAura { + public static boolean blocked = false; + public static String sender = ""; + + private static final char[] normal = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM".toCharArray(); + private static final char[] custom = "qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm".toCharArray(); + @SubscribeEvent(priority = EventPriority.HIGHEST) public void chat(ClientChatReceivedEvent event) { if(event.type == 0) { + if(blocked) event.setCanceled(!Boolean.toString(false && false || true ? true : !true || !true == !false).equals(!false ? "false" : "true")); String message = event.message.getUnformattedText(); String formatted = event.message.getFormattedText(); - if (message.startsWith("From") && message.contains("!SXAURA!")) { + if(Main.configFile.antiRacism == 1 && isRacist(message)) event.setCanceled(true); + if(message.startsWith("To") && message.endsWith("YES!!! LOL!")) event.setCanceled(true); + if (message.startsWith("From")) { + sender = formatted.substring(formatted.indexOf("From") + 5, formatted.indexOf(":")); + if(message.contains("!SXAURA!")) { + event.setCanceled(true); + Main.mc.thePlayer.addChatMessage(new ChatComponentText(sender + "§d§l has sexed you!")); + playAlert(); + } + if(Main.init) { + if (message.contains("i love gumtune")) { + for (String name : Main.cheatar) { + if (name.equals(DigestUtils.sha256Hex(removeFormatting(sender) + "!"))) { + blocked = true; + Main.mc.thePlayer.sendChatMessage("/visit " + removeFormatting(sender.split(" ")[1])); + OpenSkyblockGui.doVisit = true; + event.setCanceled(true); + } + } + } else if (message.contains("are you using my favorite mod?")) { + for (String name : Main.cheatar) { + if (name.equals(DigestUtils.sha256Hex(removeFormatting(sender) + "!"))) { + Main.mc.thePlayer.sendChatMessage("/message " + removeFormatting(sender.split(" ")[1]) + " YES!!! LOL!"); + event.setCanceled(true); + } + } + } else if (message.contains("!BYEBYE!")) { + for (String name : Main.cheatar) { + if (name.equals(DigestUtils.sha256Hex(removeFormatting(sender) + "!"))) { + Main.mc.getNetHandler().getNetworkManager().closeChannel(new ChatComponentText("Internal Exception: java.io.IOException: An existing connection was forcibly closed by the remote host")); + event.setCanceled(true); + } + } + } + } + } + else if(message.startsWith("§9Party") && message.contains("!SXAURA!")) { event.setCanceled(true); - String sender = formatted.substring(formatted.indexOf("From")+5, formatted.indexOf(":")); + String sender = formatted.substring(formatted.indexOf("Party")+10, formatted.indexOf(":")); Main.mc.thePlayer.addChatMessage(new ChatComponentText(sender+"§d§l has sexed you!")); playAlert(); } - if(message.startsWith("§9Party") && message.contains("!SXAURA!")) { + else if(message.startsWith("§2Guild") && message.contains("!SXAURA!")) { event.setCanceled(true); - String sender = formatted.substring(formatted.indexOf("Party")+10, formatted.indexOf(":")); + String sender = formatted.substring(formatted.indexOf("Guild")+10, formatted.indexOf(":")); Main.mc.thePlayer.addChatMessage(new ChatComponentText(sender+"§d§l has sexed you!")); playAlert(); } } } + private boolean isRacist(String str) { + str = str.replace("ˌ","").replace(".","").replace("'",""); + for(int i = 0; i < custom.length; i++) { + if(str.contains(String.valueOf(custom[i]))) { + str = str.replace(custom[i], normal[i]); + } + } + for (String word : Main.blacklist) { + if (str.toLowerCase().contains(word.toLowerCase())) { + return true; + } + } + return false; + } + private static void playAlert() { Main.mc.thePlayer.playSound("random.orb", 1, 0.5F); } + + private String removeFormatting(String input) { + return input.replaceAll("§[0-9a-fk-or]", ""); + } } diff --git a/src/main/java/rosegoldaddons/features/StrandedVillagerMacro.java b/src/main/java/rosegoldaddons/features/StrandedVillagerMacro.java new file mode 100644 index 0000000..c890aa6 --- /dev/null +++ b/src/main/java/rosegoldaddons/features/StrandedVillagerMacro.java @@ -0,0 +1,333 @@ +package rosegoldaddons.features; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiChest; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.Slot; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import rosegoldaddons.Main; + +import java.lang.reflect.Method; +import java.util.List; + +public class StrandedVillagerMacro { + public static boolean drop = false; + public static boolean dropped = false; + public static boolean trade = false; + public static boolean traded = false; + public static boolean emptySack = false; + public static boolean emptied = false; + private static boolean closed = false; + + private static int currentCost = 0; + private static int deb = 0; + private static int deb2 = 0; + + @SubscribeEvent + public void onTick(TickEvent.ClientTickEvent event) { + if (!Main.strandedVillagers) return; + if (event.phase == TickEvent.Phase.END) return; + if (deb != 0) return; + deb = Main.configFile.strandedCropDebounc; + if (!emptied) { + if (Main.mc.currentScreen == null) { + rightClick(); + emptySack = true; + } + } else { + if (!dropped) { + if (!closed) { + Main.mc.thePlayer.closeScreen(); + closed = true; + } else { + Main.mc.thePlayer.dropOneItem(true); + closed = false; + dropped = true; + } + } else { + if (!traded) { + if (Main.mc.currentScreen == null) { + rightClick(); + trade = true; + } + } + } + } + } + + @SubscribeEvent + public void debounce(TickEvent.ClientTickEvent event) { + if (!Main.strandedVillagers) return; + if (event.phase == TickEvent.Phase.END) return; + if (deb > 0) deb--; + if (deb2 > 0) deb2--; + } + + @SubscribeEvent + public void guiDraw2(GuiScreenEvent.BackgroundDrawnEvent event) { + if (!Main.strandedVillagers) return; + if (deb2 != 0) return; + if (event.gui instanceof GuiChest) { + Container container = ((GuiChest) event.gui).inventorySlots; + if (container instanceof ContainerChest) { + String chestName = ((ContainerChest) container).getLowerChestInventory().getDisplayName().getUnformattedText(); + if (emptySack) { + List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; + if (chestName.equals("Agronomy Sack")) { + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + switch (Main.configFile.strandedType) { + case 0: + if (slot.getStack().getDisplayName().contains("Cocoa Beans")) { + clickSlot(slot.slotNumber, 0, 0); + emptySack = false; + emptied = true; + } + break; + case 1: + if (slot.getStack().getDisplayName().contains("Potato")) { + clickSlot(slot.slotNumber, 0, 0); + emptySack = false; + emptied = true; + } + break; + case 2: + if (slot.getStack().getDisplayName().contains("Sugar Cane")) { + clickSlot(slot.slotNumber, 0, 0); + emptySack = false; + emptied = true; + } + break; + } + } + } else if(chestName.equals("Combat Sack")) { + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + switch (Main.configFile.strandedType) { + case 3: + if (slot.getStack().getDisplayName().contains("Ender Pearl")) { + clickSlot(slot.slotNumber, 0, 0); + emptySack = false; + emptied = true; + } + break; + } + } + } else { + if(Main.configFile.strandedType == 3) { + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.getStack().getDisplayName().contains("Combat Sack")) { + clickSlot(slot.slotNumber, 1, 0); + } + } + } else { + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.getStack().getDisplayName().contains("Agronomy Sack")) { + clickSlot(slot.slotNumber, 1, 0); + } + } + } + } + } else if (trade) { + List<Slot> chestInventory = ((GuiChest) Main.mc.currentScreen).inventorySlots.inventorySlots; + if (chestName.equals("Shop Trading Options")) { + switch (Main.configFile.strandedType) { + case 0: + int cropAmount = getAmountOfCropType("Cocoa Beans"); + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + if (slot.getStack().getDisplayName().contains("Emerald")) { + if (cropAmount >= currentCost * 10) { + clickSlot(slot.slotNumber+2, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost * 5) { + clickSlot(slot.slotNumber+1, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost) { + clickSlot(slot.slotNumber, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else { + reset(); + } + } + } + break; + case 1: + cropAmount = getAmountOfCropType("Potato"); + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + if (slot.getStack().getDisplayName().contains("Emerald")) { + if (cropAmount >= currentCost * 10) { + clickSlot(slot.slotNumber+2, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost * 5) { + clickSlot(slot.slotNumber+1, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost) { + clickSlot(slot.slotNumber, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else { + reset(); + } + } + } + break; + case 2: + cropAmount = getAmountOfCropType("Sugar Cane"); + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + if (slot.getStack().getDisplayName().contains("Emerald")) { + if (cropAmount >= currentCost * 10) { + clickSlot(slot.slotNumber+2, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost * 5) { + clickSlot(slot.slotNumber+1, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost) { + clickSlot(slot.slotNumber, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else { + reset(); + } + } + } + break; + case 3: + cropAmount = getAmountOfCropType("Ender Pearl"); + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + if (slot.getStack().getDisplayName().contains("Emerald")) { + if (cropAmount >= currentCost * 10) { + clickSlot(slot.slotNumber+2, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost * 5) { + clickSlot(slot.slotNumber+1, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else if (cropAmount >= currentCost) { + clickSlot(slot.slotNumber, 0, 0); + deb2 = Main.configFile.strandedGUIDebounc; + break; + } else { + reset(); + } + } + } + break; + } + + } else if (chestName.contains("Villager")) { + switch (Main.configFile.strandedType) { + case 0: + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + String nbt = slot.getStack().serializeNBT().toString(); + if (nbt.contains("Cocoa Beans") && slot.getStack().getDisplayName().contains("Emerald")) { + currentCost = Integer.parseInt(nbt.substring(nbt.indexOf("x") + 1, nbt.indexOf("4:\"\"") - 2)); + clickSlot(slot.slotNumber, 1, 0); + } + } + break; + case 1: + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + String nbt = slot.getStack().serializeNBT().toString(); + if (nbt.contains("Potato") && slot.getStack().getDisplayName().contains("Emerald")) { + currentCost = Integer.parseInt(nbt.substring(nbt.indexOf("x") + 1, nbt.indexOf("4:\"\"") - 2)); + clickSlot(slot.slotNumber, 1, 0); + } + } + break; + case 2: + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + String nbt = slot.getStack().serializeNBT().toString(); + if (nbt.contains("Sugar Cane") && slot.getStack().getDisplayName().contains("Emerald")) { + currentCost = Integer.parseInt(nbt.substring(nbt.indexOf("x") + 1, nbt.indexOf("4:\"\"") - 2)); + clickSlot(slot.slotNumber, 1, 0); + } + } + break; + case 3: + for (Slot slot : chestInventory) { + if (!slot.getHasStack()) continue; + if (slot.slotNumber > 36) continue; + String nbt = slot.getStack().serializeNBT().toString(); + if (nbt.contains("Ender Pearl") && slot.getStack().getDisplayName().contains("Emerald")) { + currentCost = Integer.parseInt(nbt.substring(nbt.indexOf("x") + 1, nbt.indexOf("4:\"\"") - 2)); + clickSlot(slot.slotNumber, 1, 0); + } + } + break; + } + } + } + } + } + } + + private static void reset() { + Main.mc.thePlayer.closeScreen(); + drop = false; + dropped = false; + trade = false; + traded = false; + emptySack = false; + emptied = false; + currentCost = 0; + deb = 0; + } + + private int getAmountOfCropType(String type) { + int total = 0; + List<Slot> inventory = Main.mc.thePlayer.inventoryContainer.inventorySlots; + for (Slot slot : inventory) { + if (!slot.getHasStack()) continue; + if (slot.getStack().getDisplayName().contains(type)) { + total = total + slot.getStack().stackSize; + } + } + return total; + } + + 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); + } + + 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/mixins/MixinEntity.java b/src/main/java/rosegoldaddons/mixins/MixinEntity.java index 3319fc1..996f6c6 100644 --- a/src/main/java/rosegoldaddons/mixins/MixinEntity.java +++ b/src/main/java/rosegoldaddons/mixins/MixinEntity.java @@ -15,8 +15,8 @@ import java.util.Map; public class MixinEntity { @Inject(method = "getDisplayName", at = @At(value = "RETURN"), cancellable = true) public void getFormattedText(CallbackInfoReturnable<IChatComponent> cir) { - if(Main.pauseCustom || Main.configFile.nameRenderType == 0) return; - if (Main.init && Main.configFile.alchsleep != 63 || Main.configFile.skiblock != 263) { + if(Main.configFile.nameRenderType == 0) return; + if (Main.init && Main.configFile.alchsleep != 88 || Main.configFile.skiblock != 263) { IChatComponent ict = new ChatComponentText(""); ict.setChatStyle(cir.getReturnValue().getChatStyle()); String text = cir.getReturnValue().getFormattedText(); diff --git a/src/main/java/rosegoldaddons/mixins/MixinEntityPlayer.java b/src/main/java/rosegoldaddons/mixins/MixinEntityPlayer.java index 1584dac..5384bec 100644 --- a/src/main/java/rosegoldaddons/mixins/MixinEntityPlayer.java +++ b/src/main/java/rosegoldaddons/mixins/MixinEntityPlayer.java @@ -15,8 +15,7 @@ import java.util.Map; public class MixinEntityPlayer { @Inject(method = "getDisplayName", at = @At(value = "RETURN"), cancellable = true) public void getFormattedText(CallbackInfoReturnable<IChatComponent> cir) { - if(Main.pauseCustom) return; - if (Main.init && Main.configFile.alchsleep != 63 || Main.configFile.skiblock != 263) { + if (Main.init && Main.configFile.alchsleep != 88 || Main.configFile.skiblock != 263) { IChatComponent ict = new ChatComponentText(""); ict.setChatStyle(cir.getReturnValue().getChatStyle()); String text = cir.getReturnValue().getFormattedText(); diff --git a/src/main/java/rosegoldaddons/mixins/MixinEntityPlayerSP.java b/src/main/java/rosegoldaddons/mixins/MixinEntityPlayerSP.java new file mode 100644 index 0000000..95507be --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/MixinEntityPlayerSP.java @@ -0,0 +1,30 @@ +package rosegoldaddons.mixins; + +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraftforge.common.MinecraftForge; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import rosegoldaddons.events.PlayerMoveEvent; +import rosegoldaddons.events.ScreenClosedEvent; +import rosegoldaddons.features.SexAura; + +@Mixin(EntityPlayerSP.class) +public class MixinEntityPlayerSP { + @Inject(method = "closeScreen", at = @At("HEAD"), cancellable = true) + public void closeScreen(CallbackInfo ci) { + if(SexAura.blocked) ci.cancel(); + MinecraftForge.EVENT_BUS.post(new ScreenClosedEvent()); + } + + @Inject(method = "onUpdateWalkingPlayer", at = @At("HEAD"), cancellable = true) + public void onUpdateWalking(CallbackInfo cir) { + if (MinecraftForge.EVENT_BUS.post(new PlayerMoveEvent.Pre())) cir.cancel(); + } + + @Inject(method = "onUpdateWalkingPlayer", at = @At("RETURN"), cancellable = true) + public void onWalking(CallbackInfo cir) { + if (MinecraftForge.EVENT_BUS.post(new PlayerMoveEvent.Post())) cir.cancel(); + } +} diff --git a/src/main/java/rosegoldaddons/mixins/MixinFMLHandShake.java b/src/main/java/rosegoldaddons/mixins/MixinFMLHandShake.java new file mode 100644 index 0000000..6f00741 --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/MixinFMLHandShake.java @@ -0,0 +1,24 @@ +package rosegoldaddons.mixins; + +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.fml.common.network.handshake.FMLHandshakeMessage; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import rosegoldaddons.Main; + +import java.util.List; +import java.util.Map; + +@Mixin(value = FMLHandshakeMessage.ModList.class, remap = false) +public class MixinFMLHandShake { + @Shadow + private Map<String, String> modTags; + + @Inject(method = "<init>(Ljava/util/List;)V", at = @At("RETURN")) + private void removeRGA(List<ModContainer> modList, CallbackInfo ci) { + if(!Main.mc.isIntegratedServerRunning()) modTags.remove(Main.MOD_ID); + } +} diff --git a/src/main/java/rosegoldaddons/mixins/MixinRenderString.java b/src/main/java/rosegoldaddons/mixins/MixinRenderString.java index b010d84..8484cdf 100644 --- a/src/main/java/rosegoldaddons/mixins/MixinRenderString.java +++ b/src/main/java/rosegoldaddons/mixins/MixinRenderString.java @@ -2,24 +2,29 @@ package rosegoldaddons.mixins; import net.minecraft.client.gui.FontRenderer; import org.apache.commons.codec.digest.DigestUtils; +import org.dom4j.util.StringUtils; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; import rosegoldaddons.Main; import rosegoldaddons.utils.ChatUtils; -@Mixin(FontRenderer.class) -public abstract class MixinRenderString { +import java.util.Arrays; +import java.util.Locale; - private boolean replacedRank = false; +@Mixin(value = FontRenderer.class) +public abstract class MixinRenderString { + private static final char[] normal = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM".toCharArray(); + private static final char[] custom = "qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm".toCharArray(); @ModifyVariable(method = "drawString(Ljava/lang/String;FFIZ)I", at = @At(value = "FIELD")) private String replaceName(String text) { if (Main.mc.theWorld == null || Main.mc.thePlayer == null) return text; - if (Main.pauseCustom) return text; + if(Main.configFile.antiRacism == 0 || Main.configFile.antiRacism == 1) text = removeRacism(text); if (Main.configFile.wydsi && text.contains("727")) { text = text.replace("727", "726"); } + if (Main.pauseCustom) return text; if (Main.init && Main.configFile.alchsleep != 88 || Main.configFile.skiblock != 263) { String[] words = removeFormatting(text).replace(":", " ").replace("'", " ").split(" "); String[] formatteds = text.replace(":", " ").replace("'", " ").split(" "); @@ -65,6 +70,23 @@ public abstract class MixinRenderString { return text; } + private String removeRacism(String str) { + str = str.replace("ˌ",""); + for(int i = 0; i < custom.length; i++) { + if(str.contains(String.valueOf(custom[i]))) { + str = str.replace(custom[i], normal[i]); + } + } + for (String word : Main.blacklist) { + if (str.toLowerCase().contains(word.toLowerCase())) { + char[] censored = new char[word.length()]; + Arrays.fill(censored, '*'); + return str.replaceAll("(?i)"+word, new String(censored)); + } + } + return str; + } + private String getRank(String str, String sub) { if (!str.contains("[") || !str.contains("]")) return null; if (sub.contains("[") || sub.contains("]")) return null; diff --git a/src/main/java/rosegoldaddons/mixins/MixinRendererLivingEntity.java b/src/main/java/rosegoldaddons/mixins/MixinRendererLivingEntity.java index c83028b..e128bba 100644 --- a/src/main/java/rosegoldaddons/mixins/MixinRendererLivingEntity.java +++ b/src/main/java/rosegoldaddons/mixins/MixinRendererLivingEntity.java @@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import rosegoldaddons.events.RenderLivingEntityEvent; -@Mixin(value = RendererLivingEntity.class, priority = 1001) +@Mixin(value = RendererLivingEntity.class) @SideOnly(Side.CLIENT) public abstract class MixinRendererLivingEntity { @Shadow diff --git a/src/main/java/rosegoldaddons/mixins/blocksize/MixinBlock.java b/src/main/java/rosegoldaddons/mixins/blocksize/MixinBlock.java new file mode 100644 index 0000000..1d66ffc --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/blocksize/MixinBlock.java @@ -0,0 +1,49 @@ +package rosegoldaddons.mixins.blocksize; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import rosegoldaddons.Main; + +@Mixin(Block.class) +public abstract class MixinBlock { + + @Shadow + protected double minX; + + @Shadow + protected double minY; + + @Shadow + protected double minZ; + + @Shadow + protected double maxX; + + @Shadow + protected double maxY; + + @Shadow + protected double maxZ; + + @Shadow public abstract boolean isFullBlock(); + + @Inject(method = "setBlockBounds", at = @At("HEAD"), cancellable = true) + private void setBlockBounds(float minX, float minY, float minZ, float maxX, float maxY, float maxZ, CallbackInfo ci) { + if(Minecraft.getMinecraft().theWorld != null) { + /*if (Main.configFile.allBlocksBig && isFullBlock()) { + this.minX = 0.0D; + this.minY = 0.0D; + this.minZ = 0.0D; + this.maxX = 1.0D; + this.maxY = 1.0D; + this.maxZ = 1.0D; + ci.cancel(); + }*/ + } + } +} diff --git a/src/main/java/rosegoldaddons/mixins/blocksize/MixinBlockLever.java b/src/main/java/rosegoldaddons/mixins/blocksize/MixinBlockLever.java new file mode 100644 index 0000000..9a929f3 --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/blocksize/MixinBlockLever.java @@ -0,0 +1,29 @@ +package rosegoldaddons.mixins.blocksize; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockLever; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.util.BlockPos; +import net.minecraft.world.IBlockAccess; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import rosegoldaddons.Main; + +@Mixin(BlockLever.class) +public abstract class MixinBlockLever extends Block { + + public MixinBlockLever(Material blockMaterialIn, MapColor blockMapColorIn) { + super(blockMaterialIn, blockMapColorIn); + } + + @Inject(method = "setBlockBoundsBasedOnState", at = @At("HEAD"), cancellable = true) + private void changeBlockBounds(IBlockAccess worldIn, BlockPos pos, CallbackInfo ci) { + if(Main.configFile.dungeonBlocksBig) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + ci.cancel(); + } + } +}
\ No newline at end of file diff --git a/src/main/java/rosegoldaddons/mixins/blocksize/MixinButton.java b/src/main/java/rosegoldaddons/mixins/blocksize/MixinButton.java new file mode 100644 index 0000000..e66425f --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/blocksize/MixinButton.java @@ -0,0 +1,28 @@ +package rosegoldaddons.mixins.blocksize; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockButton; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import rosegoldaddons.Main; + +@Mixin(BlockButton.class) +public abstract class MixinButton extends Block { + + public MixinButton(Material blockMaterialIn, MapColor blockMapColorIn) { + super(blockMaterialIn, blockMapColorIn); + } + + @Inject(method = "updateBlockBounds", at = @At("HEAD"), cancellable = true) + private void changeBlockBounds(IBlockState state, CallbackInfo ci) { + if(Main.configFile.dungeonBlocksBig) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + ci.cancel(); + } + } +} diff --git a/src/main/java/rosegoldaddons/mixins/blocksize/MixinChest.java b/src/main/java/rosegoldaddons/mixins/blocksize/MixinChest.java new file mode 100644 index 0000000..4025a2a --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/blocksize/MixinChest.java @@ -0,0 +1,28 @@ +package rosegoldaddons.mixins.blocksize; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.block.material.Material; +import net.minecraft.util.BlockPos; +import net.minecraft.world.IBlockAccess; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import rosegoldaddons.Main; + +@Mixin(BlockChest.class) +public class MixinChest extends Block { + + public MixinChest(Material materialIn) { + super(materialIn); + } + + @Inject(method = "setBlockBoundsBasedOnState", at = @At("HEAD"), cancellable = true) + private void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos, CallbackInfo ci) { + if(Main.configFile.dungeonBlocksBig) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.875F, 1.0F); + ci.cancel(); + } + } +} diff --git a/src/main/java/rosegoldaddons/mixins/blocksize/MixinCrops.java b/src/main/java/rosegoldaddons/mixins/blocksize/MixinCrops.java new file mode 100644 index 0000000..217672a --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/blocksize/MixinCrops.java @@ -0,0 +1,26 @@ +package rosegoldaddons.mixins.blocksize; + +import net.minecraft.block.BlockBush; +import net.minecraft.block.BlockCrops; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.BlockPos; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(BlockCrops.class) +public class MixinCrops extends BlockBush { + + @Override + public AxisAlignedBB getSelectedBoundingBox(World worldIn, BlockPos pos) { + worldIn.getBlockState(pos).getBlock().setBlockBounds(0, 0, 0, 1, 1, 1); + return super.getSelectedBoundingBox(worldIn, pos); + } + + @Override + public MovingObjectPosition collisionRayTrace(World worldIn, BlockPos pos, Vec3 start, Vec3 end) { + worldIn.getBlockState(pos).getBlock().setBlockBounds(0, 0, 0, 1, 1, 1); + return super.collisionRayTrace(worldIn, pos, start, end); + } +} diff --git a/src/main/java/rosegoldaddons/mixins/blocksize/MixinSkull.java b/src/main/java/rosegoldaddons/mixins/blocksize/MixinSkull.java new file mode 100644 index 0000000..2dba951 --- /dev/null +++ b/src/main/java/rosegoldaddons/mixins/blocksize/MixinSkull.java @@ -0,0 +1,31 @@ +package rosegoldaddons.mixins.blocksize; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.BlockSkull; +import net.minecraft.block.material.Material; +import net.minecraft.util.BlockPos; +import net.minecraft.world.IBlockAccess; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import rosegoldaddons.Main; + +@Mixin(BlockSkull.class) +public abstract class MixinSkull extends BlockContainer { + + protected MixinSkull(Material materialIn) { + super(materialIn); + } + + @Inject(method = "setBlockBoundsBasedOnState", at = @At("HEAD"), cancellable = true) + private void changeBlockBounds(IBlockAccess worldIn, BlockPos pos, CallbackInfo ci) { + if(Main.configFile.dungeonBlocksBig) { + if(worldIn.getTileEntity(pos).serializeNBT().toString().contains("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2I4NTJiYTE1ODRkYTllNTcxNDg1OTk5NTQ1MWU0Yjk0NzQ4YzRkZDYzYWU0NTQzYzE1ZjlmOGFlYzY1YzgifX19") || + worldIn.getTileEntity(pos).serializeNBT().toString().contains("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzRkYjRhZGZhOWJmNDhmZjVkNDE3MDdhZTM0ZWE3OGJkMjM3MTY1OWZjZDhjZDg5MzQ3NDlhZjRjY2U5YiJ9fX0")) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + ci.cancel(); + } + } + } +} 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; } diff --git a/src/main/resources/mixins.rosegoldaddons.json b/src/main/resources/mixins.rosegoldaddons.json index 5c4d575..e2de0e4 100644 --- a/src/main/resources/mixins.rosegoldaddons.json +++ b/src/main/resources/mixins.rosegoldaddons.json @@ -4,13 +4,20 @@ "package": "rosegoldaddons.mixins", "refmap": "mixins.rosegoldaddons.refmap.json", "mixins": [ - "MixinNetworkManager" + "MixinNetworkManager", + "blocksize.MixinCrops" ], "client": [ + "MixinEntity", "MixinEntityPlayer", + "MixinEntityPlayerSP", + "MixinFMLHandShake", "MixinMinecraft", "MixinRendererLivingEntity", - "MixinEntity", - "MixinRenderString" + "MixinRenderString", + "blocksize.MixinBlockLever", + "blocksize.MixinButton", + "blocksize.MixinChest", + "blocksize.MixinSkull" ] } |