From c0ffa818843719554fb4f6e34fc40fe6f3c1ae38 Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Fri, 14 Jul 2023 14:46:08 +0200 Subject: rewrite of the ItemFixerUpper thanks @AzureAaron, @ExternalTime, and @Futuremappermydud for helping me debug/enhance the code --- .../skyblock/itemlist/ItemFixerUpper.java | 407 +++++++++++++-------- 1 file changed, 248 insertions(+), 159 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java index d8ad3a89..3e1c67ec 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java @@ -1,39 +1,45 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; -import net.minecraft.item.Items; -// import net.minecraft.registry.Registry; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; import java.util.Map; public class ItemFixerUpper { - private final static Map MAPPING = Map.ofEntries( - Map.entry("minecraft:golden_rail", "minecraft:powered_rail"), - Map.entry("minecraft:lit_pumpkin", "minecraft:jack_o_lantern"), - Map.entry("minecraft:snow_layer", "minecraft:snow"), - Map.entry("minecraft:hardened_clay", "minecraft:terracotta"), - Map.entry("minecraft:speckled_melon", "minecraft:glistering_melon_slice"), - Map.entry("minecraft:mob_spawner", "minecraft:spawner"), - Map.entry("minecraft:brick_block", "minecraft:bricks"), - Map.entry("minecraft:deadbush", "minecraft:dead_bush"), - Map.entry("minecraft:slime", "minecraft:slime_block"), - Map.entry("minecraft:melon_block", "minecraft:melon"), - Map.entry("minecraft:reeds", "minecraft:sugar_cane"), - Map.entry("minecraft:yellow_flower", "minecraft:dandelion"), - Map.entry("minecraft:firework_charge", "minecraft:firework_star"), - Map.entry("minecraft:noteblock", "minecraft:note_block"), - Map.entry("minecraft:web", "minecraft:cobweb"), - Map.entry("minecraft:fireworks", "minecraft:firework_rocket"), - Map.entry("minecraft:netherbrick", "minecraft:nether_brick"), - Map.entry("minecraft:stained_hardened_clay", "minecraft:terracotta"), - Map.entry("minecraft:quartz_ore", "minecraft:nether_quartz_ore"), - Map.entry("minecraft:tallgrass", "minecraft:grass"), - Map.entry("minecraft:stone_slab2", "minecraft:red_sandstone_slab"), - Map.entry("minecraft:waterlily", "minecraft:lily_pad"), - Map.entry("minecraft:stone_stairs", "minecraft:cobblestone_stairs") - ); + private final static String[] ANVIL_VARIANTS = { + "minecraft:anvil", + "minecraft:chipped_anvil", + "minecraft:damaged_anvil" + }; + + private final static String[] COAL_VARIANTS = { + "minecraft:coal", + "minecraft:charcoal" + }; - private final static String[] DYE_COLORS = { + private final static String[] COBBLESTONE_WALL_VARIANTS = { + "minecraft:cobblestone_wall", + "minecraft:mossy_cobblestone_wall" + }; + + private final static String[] COOKED_FISH_VARIANTS = { + "minecraft:cooked_cod", + "minecraft:cooked_salmon" + }; + + private final static String[] DIRT_VARIANTS = { + "minecraft:dirt", + "minecraft:coarse_dirt", + "minecraft:podzol" + }; + + private final static String[] DOUBLE_PLANT_VARIANTS = { + "minecraft:sunflower", + "minecraft:lilac", + "minecraft:tall_grass", + "minecraft:large_fern", + "minecraft:rose_bush", + "minecraft:peony" + }; + + private final static String[] DYE_VARIANTS = { "minecraft:ink_sac", "minecraft:red_dye", "minecraft:green_dye", @@ -52,39 +58,55 @@ public class ItemFixerUpper { "minecraft:bone_meal" }; - private final static String[] BLOCK_COLORS = { - "white_", - "orange_", - "magenta_", - "light_blue_", - "yellow_", - "lime_", - "pink_", - "gray_", - "light_gray_", - "cyan_", - "purple_", - "blue_", - "brown_", - "green_", - "red_", - "black_" - }; - - private final static String[] TREE_VARIANTS = { - "oak_", - "spruce_", - "birch_", - "jungle_", - "acacia_", - "dark_oak_" - }; - - private final static String[] STONE_BRICK_VARIANTS = { - "minecraft:stone_bricks", - "minecraft:mossy_stone_bricks", - "minecraft:cracked_stone_bricks", - "minecraft:chiseled_stone_bricks" + private final static String[] FISH_VARIANTS = { + "minecraft:cod", + "minecraft:salmon", + "minecraft:tropical_fish", + "minecraft:pufferfish" + }; + + private final static String[] GOLDEN_APPLE_VARIANTS = { + "minecraft:golden_apple", + "minecraft:enchanted_golden_apple" + }; + + private final static String[] LOG_VARIANTS = { + "minecraft:oak_log", + "minecraft:spruce_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:oak_wood", + "minecraft:spruce_wood", + "minecraft:birch_wood", + "minecraft:jungle_wood", + }; + + private final static String[] LOG2_VARIANTS = { + "minecraft:acacia_log", + "minecraft:dark_oak_log", + "minecraft:acacia_wood", + "minecraft:dark_oak_wood" + }; + + private final static String[] MONSTER_EGG_VARIANTS = { + "minecraft:infested_stone", + "minecraft:infested_cobblestone", + "minecraft:infested_stone_bricks", + "minecraft:infested_mossy_stone_bricks", + "minecraft:infested_cracked_stone_bricks", + "minecraft:infested_chiseled_stone_bricks" + }; + + private final static String[] PRISMARINE_VARIANTS = { + "minecraft:prismarine", + "minecraft:prismarine_bricks", + "minecraft:dark_prismarine" + }; + + private final static String[] QUARTZ_BLOCK_VARIANTS = { + "minecraft:quartz_block", + "minecraft:chiseled_quartz_block", + "minecraft:quartz_pillar" }; private final static String[] RED_FLOWER_VARIANTS = { @@ -99,45 +121,11 @@ public class ItemFixerUpper { "minecraft:oxeye_daisy" }; - private final static String[] DOUBLE_PLANT_VARIANTS = { - "minecraft:sunflower", - "minecraft:lilac", - "minecraft:tall_grass", - "minecraft:large_fern", - "minecraft:rose_bush", - "minecraft:peony" + private final static String[] SAND_VARIANTS = { + "minecraft:sand", + "minecraft:red_sand" }; - private final static Map SPAWN_EGG_VARIANTS = Map.ofEntries( - Map.entry(50, "minecraft:creeper_spawn_egg"), - Map.entry(51, "minecraft:skeleton_spawn_egg"), - Map.entry(52, "minecraft:spider_spawn_egg"), - Map.entry(54, "minecraft:zombie_spawn_egg"), - Map.entry(55, "minecraft:slime_spawn_egg"), - Map.entry(56, "minecraft:ghast_spawn_egg"), - Map.entry(57, "minecraft:zombified_piglin_spawn_egg"), - Map.entry(58, "minecraft:enderman_spawn_egg"), - Map.entry(59, "minecraft:cave_spider_spawn_egg"), - Map.entry(60, "minecraft:silverfish_spawn_egg"), - Map.entry(61, "minecraft:blaze_spawn_egg"), - Map.entry(62, "minecraft:magma_cube_spawn_egg"), - Map.entry(65, "minecraft:bat_spawn_egg"), - Map.entry(66, "minecraft:witch_spawn_egg"), - Map.entry(67, "minecraft:endermite_spawn_egg"), - Map.entry(68, "minecraft:guardian_spawn_egg"), - Map.entry(90, "minecraft:pig_spawn_egg"), - Map.entry(91, "minecraft:sheep_spawn_egg"), - Map.entry(92, "minecraft:cow_spawn_egg"), - Map.entry(93, "minecraft:chicken_spawn_egg"), - Map.entry(94, "minecraft:squid_spawn_egg"), - Map.entry(95, "minecraft:wolf_spawn_egg"), - Map.entry(96, "minecraft:mooshroom_spawn_egg"), - Map.entry(98, "minecraft:ocelot_spawn_egg"), - Map.entry(100, "minecraft:horse_spawn_egg"), - Map.entry(101, "minecraft:rabbit_spawn_egg"), - Map.entry(120, "minecraft:villager_spawn_egg") - ); - private final static String[] SKULL_VARIANTS = { "minecraft:skeleton_skull", "minecraft:wither_skeleton_skull", @@ -146,16 +134,9 @@ public class ItemFixerUpper { "minecraft:creeper_head" }; - private final static String[] FISH_VARIANTS = { - "minecraft:cod", - "minecraft:salmon", - "minecraft:tropical_fish", - "minecraft:pufferfish" - }; - - private final static String[] COOKED_FISH_VARIANTS = { - "minecraft:cooked_cod", - "minecraft:cooked_salmon" + private final static String[] SPONGE_VARIANTS = { + "minecraft:sponge", + "minecraft:wet_sponge" }; private final static String[] STONE_VARIANTS = { @@ -171,7 +152,7 @@ public class ItemFixerUpper { private final static String[] STONE_SLAB_VARIANTS = { "minecraft:smooth_stone_slab", "minecraft:sandstone_slab", - "minecraft:barrier", // doesn't exist + "minecraft:petrified_oak_slab", "minecraft:cobblestone_slab", "minecraft:brick_slab", "minecraft:stone_brick_slab", @@ -179,63 +160,171 @@ public class ItemFixerUpper { "minecraft:quartz_slab" }; - private final static String[] COBBLESTONE_WALL_VARIANTS = { - "minecraft:cobblestone_wall", - "minecraft:mossy_cobblestone_wall" + private final static String[] STONEBRICK_VARIANTS = { + "minecraft:stone_bricks", + "minecraft:mossy_stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" }; - private final static String[] DIRT_VARIANTS = { - "minecraft:dirt", - "minecraft:coarse_dirt", - "minecraft:podzol" + private final static String[] TALLGRASS_VARIANTS = { + "minecraft:dead_bush", + "minecraft:grass", + "minecraft:fern" }; - private final static String[] SPONGE_VARIANTS = { - "minecraft:sponge", - "minecraft:wet_sponge" + private final static Map SPAWN_EGG_VARIANTS = Map.ofEntries( + Map.entry(0, "minecraft:polar_bear_spawn_egg"), + Map.entry(50, "minecraft:creeper_spawn_egg"), + Map.entry(51, "minecraft:skeleton_spawn_egg"), + Map.entry(52, "minecraft:spider_spawn_egg"), + Map.entry(54, "minecraft:zombie_spawn_egg"), + Map.entry(55, "minecraft:slime_spawn_egg"), + Map.entry(56, "minecraft:ghast_spawn_egg"), + Map.entry(57, "minecraft:zombified_piglin_spawn_egg"), + Map.entry(58, "minecraft:enderman_spawn_egg"), + Map.entry(59, "minecraft:cave_spider_spawn_egg"), + Map.entry(60, "minecraft:silverfish_spawn_egg"), + Map.entry(61, "minecraft:blaze_spawn_egg"), + Map.entry(62, "minecraft:magma_cube_spawn_egg"), + Map.entry(65, "minecraft:bat_spawn_egg"), + Map.entry(66, "minecraft:witch_spawn_egg"), + Map.entry(67, "minecraft:endermite_spawn_egg"), + Map.entry(68, "minecraft:guardian_spawn_egg"), + Map.entry(90, "minecraft:pig_spawn_egg"), + Map.entry(91, "minecraft:sheep_spawn_egg"), + Map.entry(92, "minecraft:cow_spawn_egg"), + Map.entry(93, "minecraft:chicken_spawn_egg"), + Map.entry(94, "minecraft:squid_spawn_egg"), + Map.entry(95, "minecraft:wolf_spawn_egg"), + Map.entry(96, "minecraft:mooshroom_spawn_egg"), + Map.entry(98, "minecraft:ocelot_spawn_egg"), + Map.entry(100, "minecraft:horse_spawn_egg"), + Map.entry(101, "minecraft:rabbit_spawn_egg"), + Map.entry(120, "minecraft:villager_spawn_egg") + ); + + private final static String[] SANDSTONE_VARIANTS = { + ":", + ":chiseled_", + ":cut_" }; - private final static String[] PRISMARINE_VARIANTS = { - "minecraft:prismarine", - "minecraft:prismarine_bricks", - "minecraft:dark_prismarine" + private final static String[] COLOR_VARIANTS = { + ":white_", + ":orange_", + ":magenta_", + ":light_blue_", + ":yellow_", + ":lime_", + ":pink_", + ":gray_", + ":light_gray_", + ":cyan_", + ":purple_", + ":blue_", + ":brown_", + ":green_", + ":red_", + ":black_" + }; + + private final static String[] WOOD_VARIANTS = { + ":oak_", + ":spruce_", + ":birch_", + ":jungle_", + ":acacia_", + ":dark_oak_" }; - // TODO: map potions to their correct colors + private final static Map RENAMED = Map.ofEntries( + Map.entry("minecraft:bed", "minecraft:red_bed"), + Map.entry("minecraft:boat", "minecraft:oak_boat"), + Map.entry("minecraft:brick_block", "minecraft:bricks"), + Map.entry("minecraft:deadbush", "minecraft:dead_bush"), + Map.entry("minecraft:fence_gate", "minecraft:oak_fence_gate"), + Map.entry("minecraft:fence", "minecraft:oak_fence"), + Map.entry("minecraft:firework_charge", "minecraft:firework_star"), + Map.entry("minecraft:fireworks", "minecraft:firework_rocket"), + Map.entry("minecraft:golden_rail", "minecraft:powered_rail"), + Map.entry("minecraft:grass", "minecraft:grass_block"), + Map.entry("minecraft:hardened_clay", "minecraft:terracotta"), + Map.entry("minecraft:lit_pumpkin", "minecraft:jack_o_lantern"), + Map.entry("minecraft:melon_block", "minecraft:melon"), + Map.entry("minecraft:melon", "minecraft:melon_slice"), + Map.entry("minecraft:mob_spawner", "minecraft:spawner"), + Map.entry("minecraft:nether_brick", "minecraft:nether_bricks"), + Map.entry("minecraft:netherbrick", "minecraft:nether_brick"), + Map.entry("minecraft:noteblock", "minecraft:note_block"), + Map.entry("minecraft:piston_extension", "minecraft:moving_piston"), + Map.entry("minecraft:portal", "minecraft:nether_portal"), + Map.entry("minecraft:pumpkin", "minecraft:carved_pumpkin"), + Map.entry("minecraft:quartz_ore", "minecraft:nether_quartz_ore"), + Map.entry("minecraft:record_11", "minecraft:music_disc_11"), + Map.entry("minecraft:record_13", "minecraft:music_disc_13"), + Map.entry("minecraft:record_blocks", "minecraft:music_disc_blocks"), + Map.entry("minecraft:record_cat", "minecraft:music_disc_cat"), + Map.entry("minecraft:record_chirp", "minecraft:music_disc_chirp"), + Map.entry("minecraft:record_far", "minecraft:music_disc_far"), + Map.entry("minecraft:record_mall", "minecraft:music_disc_mall"), + Map.entry("minecraft:record_mellohi", "minecraft:music_disc_mellohi"), + Map.entry("minecraft:record_stal", "minecraft:music_disc_stal"), + Map.entry("minecraft:record_strad", "minecraft:music_disc_strad"), + Map.entry("minecraft:record_wait", "minecraft:music_disc_wait"), + Map.entry("minecraft:record_ward", "minecraft:music_disc_ward"), + Map.entry("minecraft:red_nether_brick", "minecraft:red_nether_bricks"), + Map.entry("minecraft:reeds", "minecraft:sugar_cane"), + Map.entry("minecraft:sign", "minecraft:oak_sign"), + Map.entry("minecraft:slime", "minecraft:slime_block"), + Map.entry("minecraft:snow_layer", "minecraft:snow"), + Map.entry("minecraft:snow", "minecraft:snow_block"), + Map.entry("minecraft:speckled_melon", "minecraft:glistering_melon_slice"), + Map.entry("minecraft:stone_slab2", "minecraft:red_sandstone_slab"), + Map.entry("minecraft:stone_stairs", "minecraft:cobblestone_stairs"), + Map.entry("minecraft:trapdoor", "minecraft:oak_trapdoor"), + Map.entry("minecraft:waterlily", "minecraft:lily_pad"), + Map.entry("minecraft:web", "minecraft:cobweb"), + Map.entry("minecraft:wooden_button", "minecraft:oak_button"), + Map.entry("minecraft:wooden_door", "minecraft:oak_door"), + Map.entry("minecraft:wooden_pressure_plate", "minecraft:oak_pressure_plate"), + Map.entry("minecraft:yellow_flower", "minecraft:dandelion") + ); + + //TODO : Add mushroom block variants public static String convertItemId(String id, int damage) { - if (id.equals("minecraft:dye")) return DYE_COLORS[damage]; - if (id.equals("minecraft:log2")) return "minecraft:" + TREE_VARIANTS[damage + 4] + "log"; - if (id.equals("minecraft:leaves2")) return "minecraft:" + TREE_VARIANTS[damage + 4] + "leaves"; - if (id.equals("minecraft:stonebrick")) return STONE_BRICK_VARIANTS[damage]; - if (id.equals("minecraft:red_flower")) return RED_FLOWER_VARIANTS[damage]; - if (id.equals("minecraft:double_plant")) return DOUBLE_PLANT_VARIANTS[damage]; - if (id.equals("minecraft:spawn_egg")) return SPAWN_EGG_VARIANTS.getOrDefault(damage, "minecraft:ghast_spawn_egg"); - if (id.equals("minecraft:banner")) return "minecraft:" + BLOCK_COLORS[15 - damage] + "banner"; - if (id.equals("minecraft:skull")) return SKULL_VARIANTS[damage]; - if (id.equals("minecraft:fish")) return FISH_VARIANTS[damage]; - if (id.equals("minecraft:cooked_fish")) return COOKED_FISH_VARIANTS[damage]; - if (id.equals("minecraft:stone")) return STONE_VARIANTS[damage]; - if (id.equals("minecraft:stone_slab")) return STONE_SLAB_VARIANTS[damage]; - if (id.equals("minecraft:cobblestone_wall")) return COBBLESTONE_WALL_VARIANTS[damage]; - if (id.equals("minecraft:dirt")) return DIRT_VARIANTS[damage]; - if (id.equals("minecraft:sponge")) return SPONGE_VARIANTS[damage]; - if (id.equals("minecraft:prismarine")) return PRISMARINE_VARIANTS[damage]; - - id = MAPPING.getOrDefault(id, id); - // if (Registry.ITEM.get(new Identifier(id)).equals(Items.AIR)) { - if (Registries.ITEM.get(new Identifier(id)).equals(Items.AIR)) { - String shortId = id.split(":")[1]; - // if (damage < BLOCK_COLORS.length && !Registry.ITEM.get(new Identifier("minecraft:" + BLOCK_COLORS[damage] + shortId)).equals(Items.AIR)) - if (damage < BLOCK_COLORS.length && !Registries.ITEM.get(new Identifier("minecraft:" + BLOCK_COLORS[damage] + shortId)).equals(Items.AIR)) - return "minecraft:" + BLOCK_COLORS[damage] + shortId; - // if (damage < TREE_VARIANTS.length && !Registry.ITEM.get(new Identifier("minecraft:" + TREE_VARIANTS[damage] + shortId)).equals(Items.AIR)) - if (damage < TREE_VARIANTS.length && !Registries.ITEM.get(new Identifier("minecraft:" + TREE_VARIANTS[damage] + shortId)).equals(Items.AIR)) - return "minecraft:" + TREE_VARIANTS[damage] + shortId; - - if (id.contains("wooden_")) return id.replaceFirst("wooden_", TREE_VARIANTS[damage]); - if (id.contains("minecraft:record")) return id.replaceFirst("minecraft:record", "minecraft:music_disc"); - } - return id; + return switch (id) { + case "minecraft:anvil" -> ANVIL_VARIANTS[damage]; + case "minecraft:coal" -> COAL_VARIANTS[damage]; + case "minecraft:cobblestone_wall" -> COBBLESTONE_WALL_VARIANTS[damage]; + case "minecraft:cooked_fish" -> COOKED_FISH_VARIANTS[damage]; + case "minecraft:dirt" -> DIRT_VARIANTS[damage]; + case "minecraft:double_plant" -> DOUBLE_PLANT_VARIANTS[damage]; + case "minecraft:dye" -> DYE_VARIANTS[damage]; + case "minecraft:fish" -> FISH_VARIANTS[damage]; + case "minecraft:golden_apple" -> GOLDEN_APPLE_VARIANTS[damage]; + case "minecraft:log" -> LOG_VARIANTS[damage]; + case "minecraft:log2" -> LOG2_VARIANTS[damage]; + case "minecraft:monster_egg" -> MONSTER_EGG_VARIANTS[damage]; + case "minecraft:prismarine" -> PRISMARINE_VARIANTS[damage]; + case "minecraft:quartz_block" -> QUARTZ_BLOCK_VARIANTS[damage]; + case "minecraft:red_flower" -> RED_FLOWER_VARIANTS[damage]; + case "minecraft:sand" -> SAND_VARIANTS[damage]; + case "minecraft:skull" -> SKULL_VARIANTS[damage]; + case "minecraft:sponge" -> SPONGE_VARIANTS[damage]; + case "minecraft:stone" -> STONE_VARIANTS[damage]; + case "minecraft:stone_slab" -> STONE_SLAB_VARIANTS[damage]; + case "minecraft:stonebrick" -> STONEBRICK_VARIANTS[damage]; + case "minecraft:tallgrass" -> TALLGRASS_VARIANTS[damage]; + case "minecraft:spawn_egg" -> SPAWN_EGG_VARIANTS.get(damage); + case "minecraft:sandstone", "minecraft:red_sandstone" -> id.replaceFirst(":", SANDSTONE_VARIANTS[damage]); + case "minecraft:banner" -> id.replaceFirst(":", COLOR_VARIANTS[15 - damage]); + case "minecraft:carpet", "minecraft:stained_glass", "minecraft:stained_glass_pane", "minecraft:wool" -> id.replaceFirst(":", COLOR_VARIANTS[damage]); + case "minecraft:stained_hardened_clay" -> id.replaceFirst(":", COLOR_VARIANTS[damage]).replaceFirst("stained_hardened_clay", "terracotta"); + case "minecraft:leaves", "minecraft:planks", "minecraft:sapling", "minecraft:wooden_slab" -> id.replaceFirst(":", WOOD_VARIANTS[damage]).replaceFirst("wooden_", ""); + case "minecraft:leaves2" -> id.replaceFirst(":", WOOD_VARIANTS[damage + 4]).replaceFirst("2", ""); + default -> RENAMED.getOrDefault(id, id); + }; } } -- cgit From cba602c9c46ba07808aaf84759b61b33d25e9620 Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Fri, 14 Jul 2023 15:32:24 +0200 Subject: add comments and enhance leaves2 replacement --- .../skyblocker/skyblock/itemlist/ItemFixerUpper.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java index 3e1c67ec..68aa42e2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java @@ -174,6 +174,7 @@ public class ItemFixerUpper { }; private final static Map SPAWN_EGG_VARIANTS = Map.ofEntries( + //This entry 0 is technically not right but Hypixel decided to make it polar bear so well we use that Map.entry(0, "minecraft:polar_bear_spawn_egg"), Map.entry(50, "minecraft:creeper_spawn_egg"), Map.entry(51, "minecraft:skeleton_spawn_egg"), @@ -238,6 +239,7 @@ public class ItemFixerUpper { ":dark_oak_" }; + //this is the map of all renames private final static Map RENAMED = Map.ofEntries( Map.entry("minecraft:bed", "minecraft:red_bed"), Map.entry("minecraft:boat", "minecraft:oak_boat"), @@ -292,9 +294,11 @@ public class ItemFixerUpper { ); //TODO : Add mushroom block variants + //i'll do it later because it isn't used and unlike the other, it's not just a rename or a separate, it's a separate and a merge public static String convertItemId(String id, int damage) { return switch (id) { + //all the case are simple separate case "minecraft:anvil" -> ANVIL_VARIANTS[damage]; case "minecraft:coal" -> COAL_VARIANTS[damage]; case "minecraft:cobblestone_wall" -> COBBLESTONE_WALL_VARIANTS[damage]; @@ -317,13 +321,20 @@ public class ItemFixerUpper { case "minecraft:stone_slab" -> STONE_SLAB_VARIANTS[damage]; case "minecraft:stonebrick" -> STONEBRICK_VARIANTS[damage]; case "minecraft:tallgrass" -> TALLGRASS_VARIANTS[damage]; + //we use a Map from int to str instead of an array because numbers are not consecutive case "minecraft:spawn_egg" -> SPAWN_EGG_VARIANTS.get(damage); + //when we use the generalized variant we need to replaceFirst case "minecraft:sandstone", "minecraft:red_sandstone" -> id.replaceFirst(":", SANDSTONE_VARIANTS[damage]); + //to use the general color variants we need to reverse the order because Minecraft decided so for some reason case "minecraft:banner" -> id.replaceFirst(":", COLOR_VARIANTS[15 - damage]); case "minecraft:carpet", "minecraft:stained_glass", "minecraft:stained_glass_pane", "minecraft:wool" -> id.replaceFirst(":", COLOR_VARIANTS[damage]); + //for the terracotta we need to replace the "stained_hardened_clay" with "terracotta" as well as doing the color separation case "minecraft:stained_hardened_clay" -> id.replaceFirst(":", COLOR_VARIANTS[damage]).replaceFirst("stained_hardened_clay", "terracotta"); + //for the wooden slab we need to remove the "wooden_" prefix, but otherwise it's the same, so I just combined them anyway case "minecraft:leaves", "minecraft:planks", "minecraft:sapling", "minecraft:wooden_slab" -> id.replaceFirst(":", WOOD_VARIANTS[damage]).replaceFirst("wooden_", ""); - case "minecraft:leaves2" -> id.replaceFirst(":", WOOD_VARIANTS[damage + 4]).replaceFirst("2", ""); + //here we strip the last character which is 2 because we need leaves2 to be leaves + case "minecraft:leaves2" -> id.replaceFirst(":", WOOD_VARIANTS[damage + 4]).substring(0, id.length() - 1); + //the default case is just a rename or no change default -> RENAMED.getOrDefault(id, id); }; } -- cgit From c366ee6db411d67ff6ad5ef5c1dcde00a88a6818 Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Fri, 14 Jul 2023 16:34:22 +0200 Subject: fix leaves2 and enhance terracotta and wooden_slab --- .../xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java index 68aa42e2..cc7b216c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemFixerUpper.java @@ -328,12 +328,12 @@ public class ItemFixerUpper { //to use the general color variants we need to reverse the order because Minecraft decided so for some reason case "minecraft:banner" -> id.replaceFirst(":", COLOR_VARIANTS[15 - damage]); case "minecraft:carpet", "minecraft:stained_glass", "minecraft:stained_glass_pane", "minecraft:wool" -> id.replaceFirst(":", COLOR_VARIANTS[damage]); - //for the terracotta we need to replace the "stained_hardened_clay" with "terracotta" as well as doing the color separation - case "minecraft:stained_hardened_clay" -> id.replaceFirst(":", COLOR_VARIANTS[damage]).replaceFirst("stained_hardened_clay", "terracotta"); + //for the terracotta we replace the whole name by the color and append "terracotta" at the end + case "minecraft:stained_hardened_clay" -> id.replaceFirst(":stained_hardened_clay", COLOR_VARIANTS[damage]) + "terracotta"; //for the wooden slab we need to remove the "wooden_" prefix, but otherwise it's the same, so I just combined them anyway - case "minecraft:leaves", "minecraft:planks", "minecraft:sapling", "minecraft:wooden_slab" -> id.replaceFirst(":", WOOD_VARIANTS[damage]).replaceFirst("wooden_", ""); - //here we strip the last character which is 2 because we need leaves2 to be leaves - case "minecraft:leaves2" -> id.replaceFirst(":", WOOD_VARIANTS[damage + 4]).substring(0, id.length() - 1); + case "minecraft:leaves", "minecraft:planks", "minecraft:sapling", "minecraft:wooden_slab" -> id.replaceFirst(":(?:wooden_)?", WOOD_VARIANTS[damage]); + //here we replace the 2 by nothing to remove it as it's not needed anymore + case "minecraft:leaves2" -> id.replaceFirst(":", WOOD_VARIANTS[damage + 4]).replaceFirst("2", ""); //the default case is just a rename or no change default -> RENAMED.getOrDefault(id, id); }; -- cgit From f05ef4128f4b0bcb9d0bf1a691ce17037f1bc765 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 16 Jul 2023 04:04:42 -0400 Subject: Rendering Improvements, Fixes + Occlusion Culling --- build.gradle | 4 ++ gradle.properties | 3 ++ .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 45 ++++++++++++++------ .../me/xmrvizzy/skyblocker/utils/RenderUtils.java | 2 +- .../skyblocker/utils/culling/OcclusionCulling.java | 48 ++++++++++++++++++++++ .../skyblocker/utils/culling/WorldProvider.java | 29 +++++++++++++ .../skyblocker/utils/culling/package-info.java | 4 ++ 8 files changed, 124 insertions(+), 13 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java (limited to 'src/main/java/me') diff --git a/build.gradle b/build.gradle index fec3b902..3c89f43f 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,7 @@ repositories { url = "https://maven.meteordev.org/releases" } maven {url "https://jitpack.io"} + maven { url "https://repo.codemc.io/repository/maven-public/" } // For Occlusion Culling library } dependencies { @@ -63,6 +64,9 @@ dependencies { include modImplementation("com.github.0x3C50:Renderer:${project.renderer_version}") include(modImplementation ("meteordevelopment:discord-ipc:1.1")) + + // Occlusion Culling (https://github.com/LogisticsCraft/OcclusionCulling) + include implementation("com.logisticscraft:occlusionculling:${project.occlusionculling_version}") } base { diff --git a/gradle.properties b/gradle.properties index cbb51b52..ce4f22c0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,6 +20,9 @@ rei_version=12.0.625 ## Renderer (https://github.com/0x3C50/Renderer) renderer_version = d687aced4c +## Occlusion Culling (https://github.com/LogisticsCraft/OcclusionCulling) +occlusionculling_version = 0.0.7-SNAPSHOT + # Mod Properties mod_version = 1.10.0 maven_group = me.xmrvizzy diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index cc712405..3692db1b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -19,6 +19,7 @@ import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.*; +import me.xmrvizzy.skyblocker.utils.culling.OcclusionCulling; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; @@ -83,6 +84,7 @@ public class SkyblockerMod implements ClientModInitializer { DungeonMap.init(); TheRift.init(); TitleContainer.init(); + OcclusionCulling.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 6fa93735..a1221549 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -2,22 +2,29 @@ package me.xmrvizzy.skyblocker.utils; import me.x150.renderer.render.Renderer3d; import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; +import me.xmrvizzy.skyblocker.utils.culling.OcclusionCulling; import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.sound.SoundEvent; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; - import java.awt.*; +import com.mojang.blaze3d.systems.RenderSystem; + public class RenderHelper { private static final Vec3d ONE = new Vec3d(1, 1, 1); + private static final int MAX_OVERWORLD_BUILD_HEIGHT = 319; public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { renderFilledThroughWalls(context, pos, colorComponents, alpha); @@ -25,26 +32,40 @@ public class RenderHelper { } public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderThroughWalls(); - renderFilled(context, pos, colorComponents, alpha); - Renderer3d.stopRenderThroughWalls(); + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + Renderer3d.renderThroughWalls(); + renderFilled(context, pos, colorComponents, alpha); + Renderer3d.stopRenderThroughWalls(); + } } public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + if (OcclusionCulling.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { renderFilled(context, pos, colorComponents, alpha); } } - public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + private static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), ONE); } - public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { - context.matrixStack().push(); - context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); - BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); - context.matrixStack().pop(); + private static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, MAX_OVERWORLD_BUILD_HEIGHT, pos.getZ() + 1)) { + MatrixStack matrices = context.matrixStack(); + Vec3d camera = context.camera().getPos(); + + matrices.push(); + matrices.translate(pos.getX() - camera.x, pos.getY() - camera.y, pos.getZ() - camera.z); + + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder buffer = tessellator.getBuffer(); + VertexConsumerProvider.Immediate consumer = VertexConsumerProvider.immediate(buffer); + + BeaconBlockEntityRendererInvoker.renderBeam(matrices, consumer, context.tickDelta(), context.world().getTime(), 0, MAX_OVERWORLD_BUILD_HEIGHT, colorComponents); + + consumer.draw(); + matrices.pop(); + } } public static void displayTitleAndPlaySound(int stayTicks, int fadeOutTicks, String titleKey, Formatting formatting) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java index 73ad468f..61f79ae1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java @@ -82,7 +82,7 @@ public class RenderUtils { e.getZ() - MathHelper.lerp(tickDelta, e.lastRenderZ, e.getZ())); } - public static Boolean pointExistsInArea(int x, int y, int x1, int y1, int x2, int y2) { + public static boolean pointExistsInArea(int x, int y, int x1, int y1, int x2, int y2) { return x >= x1 && x <= x2 && y >= y1 && y <= y2; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java new file mode 100644 index 00000000..e9a25fc3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java @@ -0,0 +1,48 @@ +package me.xmrvizzy.skyblocker.utils.culling; + +import com.logisticscraft.occlusionculling.OcclusionCullingInstance; +import com.logisticscraft.occlusionculling.cache.ArrayOcclusionCache; +import com.logisticscraft.occlusionculling.util.Vec3d; + +import me.xmrvizzy.skyblocker.utils.FrustumUtils; +import net.minecraft.client.MinecraftClient; + +public class OcclusionCulling { + private static final int TRACING_DISTANCE = 128; + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static OcclusionCullingInstance instance = null; + + // Reused objects to reduce allocation overhead + private static Vec3d cameraPos = new Vec3d(0, 0, 0); + private static Vec3d min = new Vec3d(0, 0, 0); + private static Vec3d max = new Vec3d(0, 0, 0); + + /** + * Initializes the occlusion culling instance + */ + public static void init() { + instance = new OcclusionCullingInstance(TRACING_DISTANCE, new WorldProvider(), new ArrayOcclusionCache(TRACING_DISTANCE), 2); + } + + private static void updateCameraPos() { + var camera = CLIENT.gameRenderer.getCamera().getPos(); + cameraPos.set(camera.x, camera.y, camera.z); + } + + /** + * This first checks checks if the bounding box is within the camera's FOV, if + * it is then it checks for whether it's occluded or not. + * + * @return A boolean representing whether the bounding box is fully visible or + * not. + */ + public static boolean isVisible(double x1, double y1, double z1, double x2, double y2, double z2) { + if (!FrustumUtils.isVisible(x1, y1, z1, x2, y2, z2)) return false; + + updateCameraPos(); + min.set(x1, y1, z1); + max.set(x2, y2, z2); + + return instance.isAABBVisible(min, max, cameraPos); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java new file mode 100644 index 00000000..47d92c1f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java @@ -0,0 +1,29 @@ +package me.xmrvizzy.skyblocker.utils.culling; + +import com.logisticscraft.occlusionculling.DataProvider; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.math.BlockPos; + +public class WorldProvider implements DataProvider { + private final static MinecraftClient CLIENT = MinecraftClient.getInstance(); + private ClientWorld world = null; + + @Override + public boolean prepareChunk(int chunkX, int chunkZ) { + this.world = CLIENT.world; + return this.world != null; + } + + @Override + public boolean isOpaqueFullCube(int x, int y, int z) { + BlockPos pos = new BlockPos(x, y, z); + return this.world.getBlockState(pos).isOpaqueFullCube(this.world, pos); + } + + @Override + public void cleanup() { + this.world = null; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java new file mode 100644 index 00000000..c25e7f7a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java @@ -0,0 +1,4 @@ +/** + * Package dedicated to occlusion culling utilities + */ +package me.xmrvizzy.skyblocker.utils.culling; \ No newline at end of file -- cgit From 57328808e6cd8c2140f5a71b4c2605ac71e1b553 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 29 Jun 2023 11:15:58 +0800 Subject: Add Shortcuts --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 13 ++ .../skyblocker/mixin/accessor/FrustumInvoker.java | 7 +- .../skyblocker/skyblock/shortcut/Shortcuts.java | 166 +++++++++++++++++++++ .../me/xmrvizzy/skyblocker/utils/FrustumUtils.java | 2 +- .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 37 +++-- .../resources/assets/skyblocker/lang/en_us.json | 9 +- 7 files changed, 221 insertions(+), 15 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 3692db1b..0263f20c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -16,6 +16,7 @@ import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; +import me.xmrvizzy.skyblocker.skyblock.shortcut.Shortcuts; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.*; @@ -76,6 +77,7 @@ public class SkyblockerMod implements ClientModInitializer { QuickNav.init(); DwarvenHud.init(); ChatMessageListener.init(); + Shortcuts.init(); DiscordRPCManager.init(); LividColor.init(); FishingHelper.init(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 04cfaea3..8c7d2f71 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -161,6 +161,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public FairySouls fairySouls = new FairySouls(); + @ConfigEntry.Category("shortcuts") + @ConfigEntry.Gui.CollapsibleObject() + public Shortcuts shortcuts = new Shortcuts(); + @ConfigEntry.Category("itemList") @ConfigEntry.Gui.CollapsibleObject() public ItemList itemList = new ItemList(); @@ -264,6 +268,15 @@ public class SkyblockerConfig implements ConfigData { public boolean enableFairySoulsHelper = false; } + public static class Shortcuts { + @ConfigEntry.Gui.Tooltip() + public boolean enableShortcuts = true; + @ConfigEntry.Gui.Tooltip() + public boolean enableCommandShortcuts = true; + @ConfigEntry.Gui.Tooltip() + public boolean enableCommandArgShortcuts = true; + } + public static class Hitbox { public boolean oldFarmlandHitbox = true; public boolean oldLeverHitbox = false; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java index 108a7344..3cde115e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java @@ -1,15 +1,14 @@ package me.xmrvizzy.skyblocker.mixin.accessor; -import me.xmrvizzy.skyblocker.utils.FrustumUtils; import net.minecraft.client.render.Frustum; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; /** - * Use {@link FrustumUtils#isVisible(double, double, double, double, double, double) FrustumUtils#isVisible} which is shorter. For the purpose of avoiding object allocations! + * Use {@link me.xmrvizzy.skyblocker.utils.FrustumUtils#isVisible(double, double, double, double, double, double) FrustumUtils#isVisible} which is shorter. For the purpose of avoiding object allocations! */ @Mixin(Frustum.class) public interface FrustumInvoker { - @Invoker("isVisible") - boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); + @Invoker + boolean invokeIsVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java new file mode 100644 index 00000000..dcd98e79 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -0,0 +1,166 @@ +package me.xmrvizzy.skyblocker.skyblock.shortcut; + +import com.mojang.brigadier.Command; +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents; +import net.minecraft.text.Text; + +import java.util.HashMap; +import java.util.Map; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class Shortcuts { + public static final Map commands = new HashMap<>(); + public static final Map commandArgs = new HashMap<>(); + + public static void init() { + commands.put("/s", "/skyblock"); + commands.put("/sk", "/skyblock"); + commands.put("/sky", "/skyblock"); + commands.put("/i", "/is"); + commands.put("/h", "/hub"); + commands.put("/hu", "/hub"); + + commands.put("/d", "/warp dungeon_hub"); + commands.put("/dn", "/warp dungeon_hub"); + commands.put("/dun", "/warp dungeon_hub"); + commands.put("/dungeon", "/warp dungeon_hub"); + + commands.put("/bl", "/warp nether"); + commands.put("/blazing", "/warp nether"); + commands.put("/fortress", "/warp nether"); + commands.put("/crimson", "/warp nether"); + commands.put("/isles", "/warp nether"); + commands.put("/ci", "/warp nether"); + commands.put("/crimson isles", "/warp nether"); + commands.put("/n", "/warp nether"); + commands.put("/nether", "/warp nether"); + + commands.put("/deep", "/warp deep"); + commands.put("/cavern", "/warp deep"); + commands.put("/caverns", "/warp deep"); + + commands.put("/dw", "/warp mines"); + commands.put("/dwarven", "/warp mines"); + commands.put("/mi", "/warp mines"); + commands.put("/mines", "/warp mines"); + + commands.put("/fo", "/warp forge"); + commands.put("/for", "/warp forge"); + commands.put("/forge", "/warp forge"); + + commands.put("/cry", "/warp crystals"); + commands.put("/crystal", "/warp crystals"); + commands.put("/ho", "/warp crystals"); + commands.put("/hollows", "/warp crystals"); + commands.put("/ch", "/warp crystals"); + commands.put("/crystal hollows", "/warp crystals"); + + commands.put("/ga", "/warp garden"); + commands.put("/garden", "/warp garden"); + commands.put("/go", "/warp gold"); + commands.put("/gold", "/warp gold"); + + commands.put("/des", "/warp desert"); + commands.put("/desert", "/warp desert"); + commands.put("/mu", "/warp desert"); + commands.put("/mushroom", "/warp desert"); + + commands.put("/sp", "/warp spider"); + commands.put("/spider", "/warp spider"); + commands.put("/spiders", "/warp spider"); + + commands.put("/ba", "/warp barn"); + commands.put("/barn", "/warp barn"); + + commands.put("/e", "/warp end"); + commands.put("/end", "/warp end"); + + commands.put("/park", "/warp park"); + + commands.put("/castle", "/warp castle"); + commands.put("/museum", "/warp museum"); + commands.put("/da", "/warp da"); + commands.put("/dark", "/warp da"); + commands.put("/crypt", "/warp crypt"); + commands.put("/crypts", "/warp crypt"); + commands.put("/nest", "/warp nest"); + commands.put("/magma", "/warp magma"); + commands.put("/void", "/warp void"); + commands.put("/drag", "/warp drag"); + commands.put("/dragon", "/warp drag"); + commands.put("/jungle", "/warp jungle"); + commands.put("/howl", "/warp howl"); + + commands.put("/ca", "/chat all"); + commands.put("/cp", "/chat party"); + commands.put("/cg", "/chat guild"); + commands.put("/co", "/chat officer"); + commands.put("/cc", "/chat coop"); + + commandArgs.put("/m", "/msg"); + + commandArgs.put("/pa", "/p accept"); + commands.put("/pv", "/p leave"); + commands.put("/pd", "/p disband"); + commands.put("/rp", "/reparty"); + commands.put("/pr", "/reparty"); + + commandArgs.put("/v", "/visit"); + commands.put("/vp", "/visit portalhub"); + commands.put("/visit p", "/visit portalhub"); + + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { + for (String key : commands.keySet()) { + if (key.startsWith("/")) { + dispatcher.register(literal(key.substring(1))); + } + } + for (String key : commandArgs.keySet()) { + if (key.startsWith("/")) { + dispatcher.register(literal(key.substring(1))); + } + } + dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> { + FabricClientCommandSource source = context.getSource(); + String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; + source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status)); + for (Map.Entry command : commands.entrySet()) { + source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue())); + } + status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; + source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status)); + for (Map.Entry commandArg : commandArgs.entrySet()) { + source.sendFeedback(Text.of("§7" + commandArg.getKey() + " §f→ §7" + commandArg.getValue())); + } + source.sendFeedback(Text.of("§e§lSkyblocker §fCommands")); + for (String command : dispatcher.getSmartUsage(dispatcher.getRoot().getChild(SkyblockerMod.NAMESPACE), source).values()) { + source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command)); + } + return Command.SINGLE_SUCCESS; + }))); + }); + ClientSendMessageEvents.MODIFY_COMMAND.register(command -> { + if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) { + command = '/' + command; + if (SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts) { + command = commands.getOrDefault(command, command); + } + if (SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts) { + String[] messageArgs = command.split(" "); + for (int i = 0; i < messageArgs.length; i++) { + messageArgs[i] = commandArgs.getOrDefault(messageArgs[i], messageArgs[i]); + } + command = String.join(" ", messageArgs); + } + return command.substring(1); + } + return command; + }); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java index 9ea90c16..565bd7a8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java @@ -17,6 +17,6 @@ public class FrustumUtils { } public static boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { - return ((FrustumInvoker) getFrustum()).isVisible(minX, minY, minZ, maxX, maxY, maxZ); + return ((FrustumInvoker) getFrustum()).invokeIsVisible(minX, minY, minZ, maxX, maxY, maxZ); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 35dfd368..71e3b44f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -29,6 +29,7 @@ import java.util.List; */ public class Utils { private static final String PROFILE_PREFIX = "Profile: "; + private static boolean isOnHypixel = false; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; @@ -45,6 +46,10 @@ public class Utils { private static boolean sentLocRaw = false; private static long lastLocRaw = 0; + public static boolean isOnHypixel() { + return isOnHypixel; + } + public static boolean isOnSkyblock() { return isOnSkyblock; } @@ -126,21 +131,35 @@ public class Utils { String string = sidebar.toString(); if (sidebar.isEmpty()) return; - if (sidebar.get(0).contains("SKYBLOCK") || sidebar.get(0).contains("SKIBLOCK")) { - if (!isOnSkyblock) { - if (!isInjected) { - isInjected = true; - ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); + if (sidebar.get(sidebar.size() - 1).equals("www.hypixel.net")) { + if (!isOnHypixel) { + isOnHypixel = true; + } + if (sidebar.get(0).contains("SKYBLOCK") || sidebar.get(0).contains("SKIBLOCK")) { + if (!isOnSkyblock) { + if (!isInjected) { + isInjected = true; + ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); + } + isOnSkyblock = true; + SkyblockEvents.JOIN.invoker().onSkyblockJoin(); } - isOnSkyblock = true; - SkyblockEvents.JOIN.invoker().onSkyblockJoin(); + } else { + leaveSkyblock(); } - } else if (isOnSkyblock) { + isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + } else if (isOnHypixel) { + isOnHypixel = false; + leaveSkyblock(); + } + } + + private static void leaveSkyblock() { + if (isOnSkyblock) { isOnSkyblock = false; isInDungeons = false; SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } - isInDungeons = isOnSkyblock && string.contains("The Catacombs"); } public static String getLocation() { diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 0cf9933c..247fb3cd 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -29,6 +29,13 @@ "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", "text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper", "text.autoconfig.skyblocker.option.general.fairySouls.enableFairySoulsHelper": "Enable Fairy Souls Helper", + "text.autoconfig.skyblocker.option.general.shortcuts": "Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts": "Enable Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts.@Tooltip": "Only works on Hypixel. Edit shortcuts with \"/skyblocker shortcuts\". At least one of the following options must be enabled for this to take effect.", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts": "Enable Command Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts.@Tooltip": "Shortcuts for commands consisting of only one word. Edit shortcuts with \"/skyblocker shortcuts\". Shortcuts must be enabled for this to take effect.", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts": "Enable Command Argument Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts.@Tooltip": "Shortcuts that replace an argument/word of a command with multiple arguments/words. Edit shortcuts with \"/skyblocker shortcuts\". Shortcuts must be enabled for this to take effect.", "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", @@ -214,7 +221,7 @@ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Enable Background", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - + "text.autoconfig.skyblocker.option.locations.rift": "The Rift", "text.autoconfig.skyblocker.option.locations.rift.mirrorverseWaypoints": "Enable Mirrorverse Waypoints", "text.autoconfig.skyblocker.option.locations.rift.mcGrubberStacks": "McGrubber Stacks", -- cgit From 931ea3749ba94d1b7de4577722246df1a4e9cced Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 29 Jun 2023 20:47:50 +0800 Subject: Add shortcuts loading and saving --- .../skyblocker/skyblock/shortcut/Shortcuts.java | 143 ++++++++++++++------- 1 file changed, 100 insertions(+), 43 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java index dcd98e79..f6483e52 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -1,24 +1,60 @@ package me.xmrvizzy.skyblocker.skyblock.shortcut; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; import com.mojang.brigadier.Command; +import com.mojang.brigadier.CommandDispatcher; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents; +import net.minecraft.client.MinecraftClient; +import net.minecraft.command.CommandRegistryAccess; import net.minecraft.text.Text; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.*; +import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.CompletableFuture; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class Shortcuts { + private static final Logger LOGGER = LoggerFactory.getLogger(Shortcuts.class); + private static final File SHORTCUTS_FILE = SkyblockerMod.CONFIG_DIR.resolve("shortcuts.json").toFile(); + private static CompletableFuture shortcutsLoaded; public static final Map commands = new HashMap<>(); public static final Map commandArgs = new HashMap<>(); public static void init() { + shortcutsLoaded = CompletableFuture.runAsync(Shortcuts::loadShortcuts); + ClientLifecycleEvents.CLIENT_STOPPING.register(Shortcuts::saveShortcuts); + ClientCommandRegistrationCallback.EVENT.register(Shortcuts::registerCommands); + ClientSendMessageEvents.MODIFY_COMMAND.register(Shortcuts::modifyCommand); + } + + private static void loadShortcuts() { + try (BufferedReader reader = new BufferedReader(new FileReader(SHORTCUTS_FILE))) { + Type shortcutsType = new TypeToken>>() {}.getType(); + Map> shortcuts = SkyblockerMod.GSON.fromJson(reader, shortcutsType); + commands.putAll(shortcuts.get("commands")); + commandArgs.putAll(shortcuts.get("commandArgs")); + LOGGER.info("[Skyblocker] Loaded {} command shortcuts and {} command argument shortcuts", commands.size(), commandArgs.size()); + } catch (FileNotFoundException e) { + registerDefaultShortcuts(); + LOGGER.warn("[Skyblocker] Shortcuts file not found, using default shortcuts. This is normal when using for the first time.", e); + } catch (IOException e) { + LOGGER.error("[Skyblocker] Failed to load shortcuts file", e); + } + } + + private static void registerDefaultShortcuts() { commands.put("/s", "/skyblock"); commands.put("/sk", "/skyblock"); commands.put("/sky", "/skyblock"); @@ -114,53 +150,74 @@ public class Shortcuts { commandArgs.put("/v", "/visit"); commands.put("/vp", "/visit portalhub"); commands.put("/visit p", "/visit portalhub"); + } - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { - for (String key : commands.keySet()) { - if (key.startsWith("/")) { - dispatcher.register(literal(key.substring(1))); - } + private static void saveShortcuts(MinecraftClient client) { + JsonObject shortcutsJson = new JsonObject(); + shortcutsJson.add("commands", SkyblockerMod.GSON.toJsonTree(commands)); + shortcutsJson.add("commandArgs", SkyblockerMod.GSON.toJsonTree(commandArgs)); + try (BufferedWriter writer = new BufferedWriter(new FileWriter(SHORTCUTS_FILE))) { + SkyblockerMod.GSON.toJson(shortcutsJson, writer); + LOGGER.info("[Skyblocker] Saved {} command shortcuts and {} command argument shortcuts", commands.size(), commandArgs.size()); + } catch (IOException e) { + LOGGER.error("[Skyblocker] Failed to save shortcuts file", e); + } + } + + private static void registerCommands(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess) { + for (String key : commands.keySet()) { + if (key.startsWith("/")) { + dispatcher.register(literal(key.substring(1))); } - for (String key : commandArgs.keySet()) { - if (key.startsWith("/")) { - dispatcher.register(literal(key.substring(1))); - } + } + for (String key : commandArgs.keySet()) { + if (key.startsWith("/")) { + dispatcher.register(literal(key.substring(1))); } - dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> { - FabricClientCommandSource source = context.getSource(); - String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; - source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status)); - for (Map.Entry command : commands.entrySet()) { - source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue())); - } - status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; - source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status)); - for (Map.Entry commandArg : commandArgs.entrySet()) { - source.sendFeedback(Text.of("§7" + commandArg.getKey() + " §f→ §7" + commandArg.getValue())); - } - source.sendFeedback(Text.of("§e§lSkyblocker §fCommands")); - for (String command : dispatcher.getSmartUsage(dispatcher.getRoot().getChild(SkyblockerMod.NAMESPACE), source).values()) { - source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command)); - } - return Command.SINGLE_SUCCESS; - }))); - }); - ClientSendMessageEvents.MODIFY_COMMAND.register(command -> { - if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) { - command = '/' + command; - if (SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts) { - command = commands.getOrDefault(command, command); - } - if (SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts) { - String[] messageArgs = command.split(" "); - for (int i = 0; i < messageArgs.length; i++) { - messageArgs[i] = commandArgs.getOrDefault(messageArgs[i], messageArgs[i]); - } - command = String.join(" ", messageArgs); + } + dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> { + FabricClientCommandSource source = context.getSource(); + String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; + source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status)); + if (!shortcutsLoaded.isDone()) { + source.sendFeedback(Text.of("§c§lShortcuts not loaded yet")); + } else for (Map.Entry command : commands.entrySet()) { + source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue())); + } + status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; + source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status)); + if (!shortcutsLoaded.isDone()) { + source.sendFeedback(Text.of("§c§lShortcuts not loaded yet")); + } else for (Map.Entry commandArg : commandArgs.entrySet()) { + source.sendFeedback(Text.of("§7" + commandArg.getKey() + " §f→ §7" + commandArg.getValue())); + } + source.sendFeedback(Text.of("§e§lSkyblocker §fCommands")); + for (String command : dispatcher.getSmartUsage(dispatcher.getRoot().getChild(SkyblockerMod.NAMESPACE), source).values()) { + source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command)); + } + return Command.SINGLE_SUCCESS; + }))); + } + + private static String modifyCommand(String command) { + if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) { + if (!shortcutsLoaded.isDone()) { + LOGGER.warn("[Skyblocker] Shortcuts not loaded yet, skipping shortcut for command: {}", command); + return command; + } + command = '/' + command; + if (SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts) { + command = commands.getOrDefault(command, command); + } + if (SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts) { + String[] messageArgs = command.split(" "); + for (int i = 0; i < messageArgs.length; i++) { + messageArgs[i] = commandArgs.getOrDefault(messageArgs[i], messageArgs[i]); } - return command.substring(1); + command = String.join(" ", messageArgs); } - return command; - }); + return command.substring(1); + } + return command; } } -- cgit From 04a598fa906928c0f706b0ce6cd3d3add30faed2 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 29 Jun 2023 22:59:34 +0800 Subject: Add Shortcuts config screen --- .../skyblocker/skyblock/shortcut/Shortcuts.java | 8 ++ .../shortcut/ShortcutsConfigListWidget.java | 148 +++++++++++++++++++++ .../skyblock/shortcut/ShortcutsConfigScreen.java | 23 ++++ .../resources/assets/skyblocker/lang/en_us.json | 7 +- 4 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java index f6483e52..2fbe4315 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -32,6 +32,10 @@ public class Shortcuts { public static final Map commands = new HashMap<>(); public static final Map commandArgs = new HashMap<>(); + public static boolean isShortcutsLoaded() { + return shortcutsLoaded.isDone(); + } + public static void init() { shortcutsLoaded = CompletableFuture.runAsync(Shortcuts::loadShortcuts); ClientLifecycleEvents.CLIENT_STOPPING.register(Shortcuts::saveShortcuts); @@ -196,6 +200,10 @@ public class Shortcuts { source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command)); } return Command.SINGLE_SUCCESS; + })).then(literal("shortcuts").executes(context -> { + // Queue the screen or else the screen will be immediately closed after executing this command + SkyblockerMod.getInstance().scheduler.queueOpenScreen(ShortcutsConfigScreen::new); + return Command.SINGLE_SUCCESS; }))); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java new file mode 100644 index 00000000..893d9169 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java @@ -0,0 +1,148 @@ +package me.xmrvizzy.skyblocker.skyblock.shortcut; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Selectable; +import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; +import net.minecraft.client.gui.screen.narration.NarrationPart; +import net.minecraft.client.gui.widget.ElementListWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.text.Text; + +import java.util.List; + +public class ShortcutsConfigListWidget extends ElementListWidget { + public ShortcutsConfigListWidget(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int itemHeight) { + super(minecraftClient, width, height, top, bottom, itemHeight); + ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.targetCommand", "skyblocker.shortcuts.replacementCommand"); + addEntry(commandCategory); + if (!Shortcuts.isShortcutsLoaded()) { + addEntry(new ShortcutLoadingEntry()); + } else { + Shortcuts.commands.keySet().stream().sorted().forEach(commandTarget -> addEntry(new ShortcutEntry(commandTarget, Shortcuts.commands.get(commandTarget), commandCategory))); + } + ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry("skyblocekr.shortcuts.targetCommandArg", "skyblocker.shortcuts.replacementCommandArg"); + addEntry(commandArgCategory); + if (!Shortcuts.isShortcutsLoaded()) { + addEntry(new ShortcutLoadingEntry()); + } else { + Shortcuts.commandArgs.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgTarget, Shortcuts.commandArgs.get(commandArgTarget), commandArgCategory))); + } + } + + @Override + public int getRowWidth() { + return super.getRowWidth() + 100; + } + + @Override + protected int getScrollbarPositionX() { + return super.getScrollbarPositionX() + 50; + } + + protected abstract static class AbstractShortcutEntry extends ElementListWidget.Entry { + } + + private class ShortcutCategoryEntry extends AbstractShortcutEntry { + private final Text targetName; + private final Text replacementName; + + private ShortcutCategoryEntry(String targetName, String replacementName) { + this.targetName = Text.translatable(targetName); + this.replacementName = Text.translatable(replacementName); + } + + @Override + public List children() { + return List.of(); + } + + @Override + public List selectableChildren() { + return List.of(new Selectable() { + @Override + public SelectionType getType() { + return SelectionType.HOVERED; + } + + @Override + public void appendNarrations(NarrationMessageBuilder builder) { + builder.put(NarrationPart.TITLE, targetName, replacementName); + } + }); + } + + @Override + public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + context.drawCenteredTextWithShadow(client.textRenderer, targetName, width / 2 - 85, y + 5, 0xFFFFFF); + context.drawCenteredTextWithShadow(client.textRenderer, replacementName, width / 2 + 85, y + 5, 0xFFFFFF); + } + } + + private class ShortcutLoadingEntry extends AbstractShortcutEntry { + private final Text text; + + private ShortcutLoadingEntry() { + this.text = Text.of("§c§lShortcuts not loaded yet"); + } + + @Override + public List children() { + return List.of(); + } + + @Override + public List selectableChildren() { + return List.of(new Selectable() { + @Override + public SelectionType getType() { + return SelectionType.HOVERED; + } + + @Override + public void appendNarrations(NarrationMessageBuilder builder) { + builder.put(NarrationPart.TITLE, text); + } + }); + } + + @Override + public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + context.drawCenteredTextWithShadow(client.textRenderer, text, width / 2, y + 5, 0xFFFFFF); + } + } + + private class ShortcutEntry extends AbstractShortcutEntry { + private final List children; + private final TextFieldWidget target; + private final TextFieldWidget replacement; + + private ShortcutEntry(String target, String replacement, ShortcutCategoryEntry category) { + this.target = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 - 160, 5, 150, 20, category.targetName); + this.replacement = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 + 10, 5, 150, 20, category.replacementName); + this.target.setText(target); + this.replacement.setText(replacement); + children = List.of(this.target, this.replacement); + } + + @Override + public List children() { + return children; + } + + @Override + public List selectableChildren() { + return children; + } + + @Override + public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + target.setY(y); + replacement.setY(y); + target.render(context, mouseX, mouseY, tickDelta); + replacement.render(context, mouseX, mouseY, tickDelta); + context.drawCenteredTextWithShadow(client.textRenderer, "→", width / 2, y + 5, 0xFFFFFF); + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java new file mode 100644 index 00000000..2f020604 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java @@ -0,0 +1,23 @@ +package me.xmrvizzy.skyblocker.skyblock.shortcut; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.text.Text; + +public class ShortcutsConfigScreen extends Screen { + public ShortcutsConfigScreen() { + super(Text.translatable("skyblocker.shortcuts.config")); + } + + @Override + protected void init() { + super.init(); + addDrawableChild(new ShortcutsConfigListWidget(client, width, height, 32, height - 32, 25)); + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); + context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.width / 2, 16, 0xFFFFFF); + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 247fb3cd..d647c1e1 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -272,5 +272,10 @@ "skyblocker.rift.mania": "Mania!", "skyblocker.rift.stakeNow": "Stake now!", "skyblocker.fairySouls.markAllFound": "Marked all fairy souls in the current island as found", - "skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing" + "skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing", + "skyblocker.shortcuts.config": "Shortcuts Config", + "skyblocker.shortcuts.targetCommand": "Target Command", + "skyblocker.shortcuts.replacementCommand": "Replacement Command", + "skyblocekr.shortcuts.targetCommandArg": "Target Command Argument", + "skyblocker.shortcuts.replacementCommandArg": "Replacement Command Argument" } -- cgit From 6e1dcf2861e6f084e75a9602cc270aaecb151bdc Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 30 Jun 2023 18:39:32 +0800 Subject: Add shortcuts editing --- .../skyblocker/skyblock/shortcut/Shortcuts.java | 52 ++++++---- .../shortcut/ShortcutsConfigListWidget.java | 110 +++++++++++++++++---- .../skyblock/shortcut/ShortcutsConfigScreen.java | 66 ++++++++++++- .../resources/assets/skyblocker/lang/en_us.json | 16 ++- 4 files changed, 200 insertions(+), 44 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java index 2fbe4315..799eab7c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -14,6 +14,7 @@ import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents; import net.minecraft.client.MinecraftClient; import net.minecraft.command.CommandRegistryAccess; import net.minecraft.text.Text; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,37 +29,48 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit public class Shortcuts { private static final Logger LOGGER = LoggerFactory.getLogger(Shortcuts.class); private static final File SHORTCUTS_FILE = SkyblockerMod.CONFIG_DIR.resolve("shortcuts.json").toFile(); + @Nullable private static CompletableFuture shortcutsLoaded; public static final Map commands = new HashMap<>(); public static final Map commandArgs = new HashMap<>(); public static boolean isShortcutsLoaded() { - return shortcutsLoaded.isDone(); + return shortcutsLoaded != null && shortcutsLoaded.isDone(); } public static void init() { - shortcutsLoaded = CompletableFuture.runAsync(Shortcuts::loadShortcuts); + loadShortcuts(); ClientLifecycleEvents.CLIENT_STOPPING.register(Shortcuts::saveShortcuts); ClientCommandRegistrationCallback.EVENT.register(Shortcuts::registerCommands); ClientSendMessageEvents.MODIFY_COMMAND.register(Shortcuts::modifyCommand); } - private static void loadShortcuts() { - try (BufferedReader reader = new BufferedReader(new FileReader(SHORTCUTS_FILE))) { - Type shortcutsType = new TypeToken>>() {}.getType(); - Map> shortcuts = SkyblockerMod.GSON.fromJson(reader, shortcutsType); - commands.putAll(shortcuts.get("commands")); - commandArgs.putAll(shortcuts.get("commandArgs")); - LOGGER.info("[Skyblocker] Loaded {} command shortcuts and {} command argument shortcuts", commands.size(), commandArgs.size()); - } catch (FileNotFoundException e) { - registerDefaultShortcuts(); - LOGGER.warn("[Skyblocker] Shortcuts file not found, using default shortcuts. This is normal when using for the first time.", e); - } catch (IOException e) { - LOGGER.error("[Skyblocker] Failed to load shortcuts file", e); + protected static void loadShortcuts() { + if (shortcutsLoaded != null && !isShortcutsLoaded()) { + return; } + shortcutsLoaded = CompletableFuture.runAsync(() -> { + try (BufferedReader reader = new BufferedReader(new FileReader(SHORTCUTS_FILE))) { + Type shortcutsType = new TypeToken>>() { + }.getType(); + Map> shortcuts = SkyblockerMod.GSON.fromJson(reader, shortcutsType); + commands.clear(); + commandArgs.clear(); + commands.putAll(shortcuts.get("commands")); + commandArgs.putAll(shortcuts.get("commandArgs")); + LOGGER.info("[Skyblocker] Loaded {} command shortcuts and {} command argument shortcuts", commands.size(), commandArgs.size()); + } catch (FileNotFoundException e) { + registerDefaultShortcuts(); + LOGGER.warn("[Skyblocker] Shortcuts file not found, using default shortcuts. This is normal when using for the first time.", e); + } catch (IOException e) { + LOGGER.error("[Skyblocker] Failed to load shortcuts file", e); + } + }); } private static void registerDefaultShortcuts() { + commands.clear(); + commandArgs.clear(); commands.put("/s", "/skyblock"); commands.put("/sk", "/skyblock"); commands.put("/sky", "/skyblock"); @@ -156,7 +168,7 @@ public class Shortcuts { commands.put("/visit p", "/visit portalhub"); } - private static void saveShortcuts(MinecraftClient client) { + protected static void saveShortcuts(MinecraftClient client) { JsonObject shortcutsJson = new JsonObject(); shortcutsJson.add("commands", SkyblockerMod.GSON.toJsonTree(commands)); shortcutsJson.add("commandArgs", SkyblockerMod.GSON.toJsonTree(commandArgs)); @@ -183,15 +195,15 @@ public class Shortcuts { FabricClientCommandSource source = context.getSource(); String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status)); - if (!shortcutsLoaded.isDone()) { - source.sendFeedback(Text.of("§c§lShortcuts not loaded yet")); + if (!isShortcutsLoaded()) { + source.sendFeedback(Text.translatable("skyblocker.shortcuts.notLoaded")); } else for (Map.Entry command : commands.entrySet()) { source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue())); } status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status)); - if (!shortcutsLoaded.isDone()) { - source.sendFeedback(Text.of("§c§lShortcuts not loaded yet")); + if (!isShortcutsLoaded()) { + source.sendFeedback(Text.translatable("skyblocker.shortcuts.notLoaded")); } else for (Map.Entry commandArg : commandArgs.entrySet()) { source.sendFeedback(Text.of("§7" + commandArg.getKey() + " §f→ §7" + commandArg.getValue())); } @@ -209,7 +221,7 @@ public class Shortcuts { private static String modifyCommand(String command) { if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) { - if (!shortcutsLoaded.isDone()) { + if (!isShortcutsLoaded()) { LOGGER.warn("[Skyblocker] Shortcuts not loaded yet, skipping shortcut for command: {}", command); return command; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java index 893d9169..210f0bd6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java @@ -9,25 +9,35 @@ import net.minecraft.client.gui.screen.narration.NarrationPart; import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.Text; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Optional; public class ShortcutsConfigListWidget extends ElementListWidget { - public ShortcutsConfigListWidget(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int itemHeight) { + private final ShortcutsConfigScreen screen; + protected final List categories = new ArrayList<>(); + + public ShortcutsConfigListWidget(MinecraftClient minecraftClient, ShortcutsConfigScreen screen, int width, int height, int top, int bottom, int itemHeight) { super(minecraftClient, width, height, top, bottom, itemHeight); - ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.targetCommand", "skyblocker.shortcuts.replacementCommand"); + this.screen = screen; + ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.command.target", "skyblocker.shortcuts.command.replacement"); + categories.add(commandCategory); addEntry(commandCategory); if (!Shortcuts.isShortcutsLoaded()) { addEntry(new ShortcutLoadingEntry()); } else { - Shortcuts.commands.keySet().stream().sorted().forEach(commandTarget -> addEntry(new ShortcutEntry(commandTarget, Shortcuts.commands.get(commandTarget), commandCategory))); + Shortcuts.commands.keySet().stream().sorted().forEach(commandTarget -> addEntry(new ShortcutEntry(commandCategory, commandTarget, Shortcuts.commands.get(commandTarget)))); } - ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry("skyblocekr.shortcuts.targetCommandArg", "skyblocker.shortcuts.replacementCommandArg"); + ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.commandArg.target", "skyblocker.shortcuts.commandArg.replacement", "skyblocker.shortcuts.commandArg.tooltip"); + categories.add(commandArgCategory); addEntry(commandArgCategory); if (!Shortcuts.isShortcutsLoaded()) { addEntry(new ShortcutLoadingEntry()); } else { - Shortcuts.commandArgs.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgTarget, Shortcuts.commandArgs.get(commandArgTarget), commandArgCategory))); + Shortcuts.commandArgs.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgCategory, commandArgTarget, Shortcuts.commandArgs.get(commandArgTarget)))); } } @@ -41,16 +51,62 @@ public class ShortcutsConfigListWidget extends ElementListWidget { + protected Optional getCategory() { + if (getSelectedOrNull() instanceof ShortcutCategoryEntry category) { + return Optional.of(category); + } else if (getSelectedOrNull() instanceof ShortcutEntry shortcutEntry) { + return Optional.of(shortcutEntry.category); + } + return Optional.empty(); + } + + protected Map getShortcutsMap(ShortcutCategoryEntry category) { + return switch (categories.indexOf(category)) { + case 0 -> Shortcuts.commands; + case 1 -> Shortcuts.commandArgs; + default -> throw new IllegalStateException("Unexpected category: " + category); + }; + } + + @Override + public void setSelected(@Nullable ShortcutsConfigListWidget.AbstractShortcutEntry entry) { + super.setSelected(entry); + screen.updateButtons(); + } + + protected void addShortcutAfterSelected() { + getCategory().ifPresent(category -> { + children().add(children().indexOf(getSelectedOrNull()) + 1, new ShortcutEntry(category)); + getShortcutsMap(category).put("", ""); + }); + } + + @Override + protected boolean removeEntry(AbstractShortcutEntry entry) { + return super.removeEntry(entry); + } + + protected static abstract class AbstractShortcutEntry extends ElementListWidget.Entry { } - private class ShortcutCategoryEntry extends AbstractShortcutEntry { + protected class ShortcutCategoryEntry extends AbstractShortcutEntry { private final Text targetName; private final Text replacementName; + @Nullable + private final Text tooltip; private ShortcutCategoryEntry(String targetName, String replacementName) { + this(targetName, replacementName, (Text) null); + } + + private ShortcutCategoryEntry(String targetName, String replacementName, String tooltip) { + this(targetName, replacementName, Text.translatable(tooltip)); + } + + private ShortcutCategoryEntry(String targetName, String replacementName, @Nullable Text tooltip) { this.targetName = Text.translatable(targetName); this.replacementName = Text.translatable(replacementName); + this.tooltip = tooltip; } @Override @@ -77,6 +133,9 @@ public class ShortcutsConfigListWidget extends ElementListWidget children; - private final TextFieldWidget target; - private final TextFieldWidget replacement; - - private ShortcutEntry(String target, String replacement, ShortcutCategoryEntry category) { - this.target = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 - 160, 5, 150, 20, category.targetName); - this.replacement = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 + 10, 5, 150, 20, category.replacementName); - this.target.setText(target); - this.replacement.setText(replacement); - children = List.of(this.target, this.replacement); + protected final ShortcutCategoryEntry category; + protected final TextFieldWidget target; + protected final TextFieldWidget replacement; + private String oldTarget; + + protected ShortcutEntry(ShortcutCategoryEntry category) { + this(category, "", ""); + } + + private ShortcutEntry(ShortcutCategoryEntry category, String targetString, String replacementString) { + this.category = category; + target = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 - 160, 5, 150, 20, category.targetName); + replacement = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 + 10, 5, 150, 20, category.replacementName); + oldTarget = targetString; + target.setText(targetString); + replacement.setText(replacementString); + target.setChangedListener(newTarget -> { + Map map = getShortcutsMap(category); + map.remove(oldTarget); + map.put(newTarget, replacement.getText()); + oldTarget = newTarget; + }); + replacement.setChangedListener(newReplacement -> getShortcutsMap(category).put(target.getText(), newReplacement)); + children = List.of(target, replacement); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java index 2f020604..49581761 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java @@ -1,18 +1,76 @@ package me.xmrvizzy.skyblocker.skyblock.shortcut; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ConfirmScreen; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.tooltip.Tooltip; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.GridWidget; +import net.minecraft.client.gui.widget.SimplePositioningWidget; +import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; public class ShortcutsConfigScreen extends Screen { + + private ShortcutsConfigListWidget shortcutsConfigListWidget; + private ButtonWidget buttonDelete; + private ButtonWidget buttonNew; + private ButtonWidget buttonDone; + private double scrollAmount; + public ShortcutsConfigScreen() { super(Text.translatable("skyblocker.shortcuts.config")); } + @Override + public void setTooltip(Text tooltip) { + super.setTooltip(tooltip); + } + @Override protected void init() { super.init(); - addDrawableChild(new ShortcutsConfigListWidget(client, width, height, 32, height - 32, 25)); + shortcutsConfigListWidget = new ShortcutsConfigListWidget(client, this, width, height, 32, height - 64, 25); + addDrawableChild(shortcutsConfigListWidget); + GridWidget gridWidget = new GridWidget(); + gridWidget.getMainPositioner().marginX(5).marginY(2); + GridWidget.Adder adder = gridWidget.createAdder(2); + buttonDelete = ButtonWidget.builder(Text.translatable("selectServer.delete"), button -> { + if (client != null && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry shortcutEntry) { + scrollAmount = shortcutsConfigListWidget.getScrollAmount(); + client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.translatable("skyblocker.shortcuts.deleteWarning", shortcutEntry.target.getText() + " → " + shortcutEntry.replacement.getText()), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); + } + }).build(); + adder.add(buttonDelete); + buttonNew = ButtonWidget.builder(Text.translatable("skyblocker.shortcuts.new"), buttonNew -> shortcutsConfigListWidget.addShortcutAfterSelected()).build(); + adder.add(buttonNew); + adder.add(ButtonWidget.builder(ScreenTexts.CANCEL, button -> { + if (client != null) { + client.setScreen(null); + } + Shortcuts.loadShortcuts(); // Cancel changes by reloading shortcuts from disk + }).build()); + buttonDone = ButtonWidget.builder(ScreenTexts.DONE, button -> { + if (client != null) { + client.setScreen(null); + Shortcuts.saveShortcuts(client); // Save shortcuts to disk + } + }).tooltip(Tooltip.of(Text.translatable("skyblocker.shortcuts.commandSuggestionTooltip"))).build(); + adder.add(buttonDone); + gridWidget.refreshPositions(); + SimplePositioningWidget.setPos(gridWidget, 0, this.height - 64, this.width, 64); + gridWidget.forEachChild(this::addDrawableChild); + updateButtons(); + } + + private void deleteEntry(boolean confirmedAction) { + if (client != null) { + if (confirmedAction && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry shortcutEntry) { + shortcutsConfigListWidget.getShortcutsMap(shortcutEntry.category).remove(shortcutEntry.target.getText()); + } + client.setScreen(this); // Re-inits the screen and creates a new instance of ShortcutsConfigListWidget + shortcutsConfigListWidget.setScrollAmount(scrollAmount); + } } @Override @@ -20,4 +78,10 @@ public class ShortcutsConfigScreen extends Screen { super.render(context, mouseX, mouseY, delta); context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.width / 2, 16, 0xFFFFFF); } + + protected void updateButtons() { + buttonDelete.active = Shortcuts.isShortcutsLoaded() && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry; + buttonNew.active = Shortcuts.isShortcutsLoaded() && shortcutsConfigListWidget.getCategory().isPresent(); + buttonDone.active = Shortcuts.isShortcutsLoaded(); + } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index d647c1e1..b907cf1b 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -35,7 +35,7 @@ "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts": "Enable Command Shortcuts", "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts.@Tooltip": "Shortcuts for commands consisting of only one word. Edit shortcuts with \"/skyblocker shortcuts\". Shortcuts must be enabled for this to take effect.", "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts": "Enable Command Argument Shortcuts", - "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts.@Tooltip": "Shortcuts that replace an argument/word of a command with multiple arguments/words. Edit shortcuts with \"/skyblocker shortcuts\". Shortcuts must be enabled for this to take effect.", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts.@Tooltip": "Shortcuts that replace one or more word(s)/argument(s) of a command which has multiple words/arguments. Edit shortcuts with \"/skyblocker shortcuts\". Shortcuts must be enabled for this to take effect.", "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", @@ -274,8 +274,14 @@ "skyblocker.fairySouls.markAllFound": "Marked all fairy souls in the current island as found", "skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing", "skyblocker.shortcuts.config": "Shortcuts Config", - "skyblocker.shortcuts.targetCommand": "Target Command", - "skyblocker.shortcuts.replacementCommand": "Replacement Command", - "skyblocekr.shortcuts.targetCommandArg": "Target Command Argument", - "skyblocker.shortcuts.replacementCommandArg": "Replacement Command Argument" + "skyblocker.shortcuts.notLoaded": "§c§lShortcuts not loaded yet", + "skyblocker.shortcuts.command.target": "Target Command", + "skyblocker.shortcuts.command.replacement": "Replacement Command", + "skyblocker.shortcuts.commandArg.target": "Target Command Argument", + "skyblocker.shortcuts.commandArg.replacement": "Replacement Command Argument", + "skyblocker.shortcuts.commandArg.tooltip": "Replace one or more word(s)/argument(s) of a command which has multiple words/arguments instead of matching the entire command.", + "skyblocker.shortcuts.deleteQuestion": "Are you sure you want to remove this shortcut?", + "skyblocker.shortcuts.deleteWarning": "Shortcut '%s' will be lost forever! (A long time!)", + "skyblocker.shortcuts.new": "New Shortcut", + "skyblocker.shortcuts.commandSuggestionTooltip": "Due to limitations of Minecraft, command suggestions will only work after a restart of the game." } -- cgit From b4882519e945f5d4a03fb3c11c21e871f5d28cbb Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 3 Jul 2023 09:42:08 +0800 Subject: Only save when the done button is pressed --- .../shortcut/ShortcutsConfigListWidget.java | 32 ++++++++++------------ .../skyblock/shortcut/ShortcutsConfigScreen.java | 13 ++++++--- 2 files changed, 24 insertions(+), 21 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java index 210f0bd6..9fe30a87 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java @@ -11,20 +11,18 @@ import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; public class ShortcutsConfigListWidget extends ElementListWidget { private final ShortcutsConfigScreen screen; - protected final List categories = new ArrayList<>(); + protected final List categories; public ShortcutsConfigListWidget(MinecraftClient minecraftClient, ShortcutsConfigScreen screen, int width, int height, int top, int bottom, int itemHeight) { super(minecraftClient, width, height, top, bottom, itemHeight); this.screen = screen; ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.command.target", "skyblocker.shortcuts.command.replacement"); - categories.add(commandCategory); addEntry(commandCategory); if (!Shortcuts.isShortcutsLoaded()) { addEntry(new ShortcutLoadingEntry()); @@ -32,13 +30,13 @@ public class ShortcutsConfigListWidget extends ElementListWidget addEntry(new ShortcutEntry(commandCategory, commandTarget, Shortcuts.commands.get(commandTarget)))); } ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.commandArg.target", "skyblocker.shortcuts.commandArg.replacement", "skyblocker.shortcuts.commandArg.tooltip"); - categories.add(commandArgCategory); addEntry(commandArgCategory); if (!Shortcuts.isShortcutsLoaded()) { addEntry(new ShortcutLoadingEntry()); } else { Shortcuts.commandArgs.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgCategory, commandArgTarget, Shortcuts.commandArgs.get(commandArgTarget)))); } + categories = List.of(commandCategory, commandArgCategory); } @Override @@ -75,10 +73,7 @@ public class ShortcutsConfigListWidget extends ElementListWidget { - children().add(children().indexOf(getSelectedOrNull()) + 1, new ShortcutEntry(category)); - getShortcutsMap(category).put("", ""); - }); + getCategory().ifPresent(category -> children().add(children().indexOf(getSelectedOrNull()) + 1, new ShortcutEntry(category))); } @Override @@ -86,6 +81,18 @@ public class ShortcutsConfigListWidget extends ElementListWidget { } @@ -177,7 +184,6 @@ public class ShortcutsConfigListWidget extends ElementListWidget { - Map map = getShortcutsMap(category); - map.remove(oldTarget); - map.put(newTarget, replacement.getText()); - oldTarget = newTarget; - }); - replacement.setChangedListener(newReplacement -> getShortcutsMap(category).put(target.getText(), newReplacement)); children = List.of(target, replacement); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java index 49581761..72861493 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java @@ -16,6 +16,7 @@ public class ShortcutsConfigScreen extends Screen { private ButtonWidget buttonDelete; private ButtonWidget buttonNew; private ButtonWidget buttonDone; + private boolean initialized; private double scrollAmount; public ShortcutsConfigScreen() { @@ -30,7 +31,12 @@ public class ShortcutsConfigScreen extends Screen { @Override protected void init() { super.init(); - shortcutsConfigListWidget = new ShortcutsConfigListWidget(client, this, width, height, 32, height - 64, 25); + if (initialized) { + shortcutsConfigListWidget.updateSize(width, height, 32, height - 64); + } else { + shortcutsConfigListWidget = new ShortcutsConfigListWidget(client, this, width, height, 32, height - 64, 25); + initialized = true; + } addDrawableChild(shortcutsConfigListWidget); GridWidget gridWidget = new GridWidget(); gridWidget.getMainPositioner().marginX(5).marginY(2); @@ -48,12 +54,11 @@ public class ShortcutsConfigScreen extends Screen { if (client != null) { client.setScreen(null); } - Shortcuts.loadShortcuts(); // Cancel changes by reloading shortcuts from disk }).build()); buttonDone = ButtonWidget.builder(ScreenTexts.DONE, button -> { + shortcutsConfigListWidget.saveShortcuts(); if (client != null) { client.setScreen(null); - Shortcuts.saveShortcuts(client); // Save shortcuts to disk } }).tooltip(Tooltip.of(Text.translatable("skyblocker.shortcuts.commandSuggestionTooltip"))).build(); adder.add(buttonDone); @@ -66,7 +71,7 @@ public class ShortcutsConfigScreen extends Screen { private void deleteEntry(boolean confirmedAction) { if (client != null) { if (confirmedAction && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry shortcutEntry) { - shortcutsConfigListWidget.getShortcutsMap(shortcutEntry.category).remove(shortcutEntry.target.getText()); + shortcutsConfigListWidget.removeEntry(shortcutEntry); } client.setScreen(this); // Re-inits the screen and creates a new instance of ShortcutsConfigListWidget shortcutsConfigListWidget.setScrollAmount(scrollAmount); -- cgit From e1a8a2262e787fd40b8890918e7b5ba45e92aabf Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 4 Jul 2023 09:51:03 +0800 Subject: Add cancel changes confirmation --- .../skyblock/shortcut/ShortcutsConfigScreen.java | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java index 72861493..49511068 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java @@ -17,6 +17,7 @@ public class ShortcutsConfigScreen extends Screen { private ButtonWidget buttonNew; private ButtonWidget buttonDone; private boolean initialized; + private boolean saved; private double scrollAmount; public ShortcutsConfigScreen() { @@ -52,13 +53,14 @@ public class ShortcutsConfigScreen extends Screen { adder.add(buttonNew); adder.add(ButtonWidget.builder(ScreenTexts.CANCEL, button -> { if (client != null) { - client.setScreen(null); + close(); } }).build()); buttonDone = ButtonWidget.builder(ScreenTexts.DONE, button -> { shortcutsConfigListWidget.saveShortcuts(); + saved = true; if (client != null) { - client.setScreen(null); + close(); } }).tooltip(Tooltip.of(Text.translatable("skyblocker.shortcuts.commandSuggestionTooltip"))).build(); adder.add(buttonDone); @@ -73,7 +75,7 @@ public class ShortcutsConfigScreen extends Screen { if (confirmedAction && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry shortcutEntry) { shortcutsConfigListWidget.removeEntry(shortcutEntry); } - client.setScreen(this); // Re-inits the screen and creates a new instance of ShortcutsConfigListWidget + client.setScreen(this); // Re-inits the screen and keeps the old instance of ShortcutsConfigListWidget shortcutsConfigListWidget.setScrollAmount(scrollAmount); } } @@ -84,6 +86,21 @@ public class ShortcutsConfigScreen extends Screen { context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.width / 2, 16, 0xFFFFFF); } + @Override + public void close() { + if (!saved && client != null) { + client.setScreen(new ConfirmScreen(confirmedAction -> { + if (confirmedAction) { + super.close(); + } else { + client.setScreen(this); + } + }, Text.translatable("text.cloth-config.quit_config"), Text.translatable("text.cloth-config.quit_config_sure"), Text.translatable("text.cloth-config.quit_discard"), ScreenTexts.CANCEL)); + } else { + super.close(); + } + } + protected void updateButtons() { buttonDelete.active = Shortcuts.isShortcutsLoaded() && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry; buttonNew.active = Shortcuts.isShortcutsLoaded() && shortcutsConfigListWidget.getCategory().isPresent(); -- cgit From bcf2b072a0d3a868bad745228a88ec18b37ae471 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 4 Jul 2023 10:06:31 +0800 Subject: Remove some default shortcuts --- .../skyblocker/skyblock/shortcut/Shortcuts.java | 105 +++++++-------------- 1 file changed, 35 insertions(+), 70 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java index 799eab7c..03701a3f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -71,101 +71,66 @@ public class Shortcuts { private static void registerDefaultShortcuts() { commands.clear(); commandArgs.clear(); + + // Skyblock commands.put("/s", "/skyblock"); - commands.put("/sk", "/skyblock"); - commands.put("/sky", "/skyblock"); commands.put("/i", "/is"); commands.put("/h", "/hub"); - commands.put("/hu", "/hub"); + // Dungeon commands.put("/d", "/warp dungeon_hub"); - commands.put("/dn", "/warp dungeon_hub"); - commands.put("/dun", "/warp dungeon_hub"); - commands.put("/dungeon", "/warp dungeon_hub"); - - commands.put("/bl", "/warp nether"); - commands.put("/blazing", "/warp nether"); - commands.put("/fortress", "/warp nether"); - commands.put("/crimson", "/warp nether"); - commands.put("/isles", "/warp nether"); - commands.put("/ci", "/warp nether"); - commands.put("/crimson isles", "/warp nether"); - commands.put("/n", "/warp nether"); - commands.put("/nether", "/warp nether"); - - commands.put("/deep", "/warp deep"); - commands.put("/cavern", "/warp deep"); - commands.put("/caverns", "/warp deep"); - - commands.put("/dw", "/warp mines"); - commands.put("/dwarven", "/warp mines"); - commands.put("/mi", "/warp mines"); - commands.put("/mines", "/warp mines"); - commands.put("/fo", "/warp forge"); - commands.put("/for", "/warp forge"); - commands.put("/forge", "/warp forge"); + // Chat channels + commands.put("/ca", "/chat all"); + commands.put("/cp", "/chat party"); + commands.put("/cg", "/chat guild"); + commands.put("/co", "/chat officer"); + commands.put("/cc", "/chat coop"); - commands.put("/cry", "/warp crystals"); - commands.put("/crystal", "/warp crystals"); - commands.put("/ho", "/warp crystals"); - commands.put("/hollows", "/warp crystals"); - commands.put("/ch", "/warp crystals"); - commands.put("/crystal hollows", "/warp crystals"); + // Message + commandArgs.put("/m", "/msg"); - commands.put("/ga", "/warp garden"); - commands.put("/garden", "/warp garden"); - commands.put("/go", "/warp gold"); - commands.put("/gold", "/warp gold"); + // Party + commandArgs.put("/pa", "/p accept"); + commands.put("/pv", "/p leave"); + commands.put("/pd", "/p disband"); + commands.put("/rp", "/reparty"); - commands.put("/des", "/warp desert"); - commands.put("/desert", "/warp desert"); - commands.put("/mu", "/warp desert"); - commands.put("/mushroom", "/warp desert"); + // Visit + commandArgs.put("/v", "/visit"); + commands.put("/vp", "/visit portalhub"); + } - commands.put("/sp", "/warp spider"); + private static void registerMoreDefaultShortcuts() { + // Combat commands.put("/spider", "/warp spider"); - commands.put("/spiders", "/warp spider"); - - commands.put("/ba", "/warp barn"); - commands.put("/barn", "/warp barn"); - - commands.put("/e", "/warp end"); + commands.put("/crimson", "/warp nether"); commands.put("/end", "/warp end"); + // Mining + commands.put("/gold", "/warp gold"); + commands.put("/cavern", "/warp deep"); + commands.put("/dwarven", "/warp mines"); + commands.put("/fo", "/warp forge"); + commands.put("/ch", "/warp crystals"); + + // Foraging & Farming commands.put("/park", "/warp park"); + commands.put("/barn", "/warp barn"); + commands.put("/desert", "/warp desert"); + commands.put("/ga", "/warp garden"); + // Other warps commands.put("/castle", "/warp castle"); commands.put("/museum", "/warp museum"); commands.put("/da", "/warp da"); - commands.put("/dark", "/warp da"); commands.put("/crypt", "/warp crypt"); - commands.put("/crypts", "/warp crypt"); commands.put("/nest", "/warp nest"); commands.put("/magma", "/warp magma"); commands.put("/void", "/warp void"); commands.put("/drag", "/warp drag"); - commands.put("/dragon", "/warp drag"); commands.put("/jungle", "/warp jungle"); commands.put("/howl", "/warp howl"); - - commands.put("/ca", "/chat all"); - commands.put("/cp", "/chat party"); - commands.put("/cg", "/chat guild"); - commands.put("/co", "/chat officer"); - commands.put("/cc", "/chat coop"); - - commandArgs.put("/m", "/msg"); - - commandArgs.put("/pa", "/p accept"); - commands.put("/pv", "/p leave"); - commands.put("/pd", "/p disband"); - commands.put("/rp", "/reparty"); - commands.put("/pr", "/reparty"); - - commandArgs.put("/v", "/visit"); - commands.put("/vp", "/visit portalhub"); - commands.put("/visit p", "/visit portalhub"); } protected static void saveShortcuts(MinecraftClient client) { -- cgit From 2129c4d2284a4f78d94e74b3e328b8e056607fe9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 4 Jul 2023 10:19:20 +0800 Subject: Refactor ShortcutsConfigListWidget --- .../skyblocker/mixin/HandledScreenMixin.java | 4 +- .../shortcut/ShortcutsConfigListWidget.java | 100 ++++++++++++--------- .../skyblock/shortcut/ShortcutsConfigScreen.java | 6 +- 3 files changed, 61 insertions(+), 49 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 903d3992..13272323 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -30,6 +30,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Map; + @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { protected HandledScreenMixin(Text title) { @@ -96,7 +98,7 @@ public abstract class HandledScreenMixin extends Screen { superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY); } else if (experimentSolver instanceof UltrasequencerSolver ultrasequencerSolver && slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; - ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); + ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().map(Map.Entry::getKey).ifPresentOrElse(ultrasequencerSolver::setUltrasequencerNextSlot, () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java index 9fe30a87..f29470bf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java @@ -11,32 +11,28 @@ import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; +import java.util.stream.Stream; public class ShortcutsConfigListWidget extends ElementListWidget { private final ShortcutsConfigScreen screen; - protected final List categories; + private final List> shortcutMaps = new ArrayList<>(); public ShortcutsConfigListWidget(MinecraftClient minecraftClient, ShortcutsConfigScreen screen, int width, int height, int top, int bottom, int itemHeight) { super(minecraftClient, width, height, top, bottom, itemHeight); this.screen = screen; - ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.command.target", "skyblocker.shortcuts.command.replacement"); - addEntry(commandCategory); - if (!Shortcuts.isShortcutsLoaded()) { - addEntry(new ShortcutLoadingEntry()); + ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry(Shortcuts.commands, "skyblocker.shortcuts.command.target", "skyblocker.shortcuts.command.replacement"); + if (Shortcuts.isShortcutsLoaded()) { + commandCategory.shortcutsMap.keySet().stream().sorted().forEach(commandTarget -> addEntry(new ShortcutEntry(commandCategory, commandTarget))); } else { - Shortcuts.commands.keySet().stream().sorted().forEach(commandTarget -> addEntry(new ShortcutEntry(commandCategory, commandTarget, Shortcuts.commands.get(commandTarget)))); - } - ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.commandArg.target", "skyblocker.shortcuts.commandArg.replacement", "skyblocker.shortcuts.commandArg.tooltip"); - addEntry(commandArgCategory); - if (!Shortcuts.isShortcutsLoaded()) { addEntry(new ShortcutLoadingEntry()); + } + ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry(Shortcuts.commandArgs, "skyblocker.shortcuts.commandArg.target", "skyblocker.shortcuts.commandArg.replacement", "skyblocker.shortcuts.commandArg.tooltip"); + if (Shortcuts.isShortcutsLoaded()) { + commandArgCategory.shortcutsMap.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgCategory, commandArgTarget))); } else { - Shortcuts.commandArgs.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgCategory, commandArgTarget, Shortcuts.commandArgs.get(commandArgTarget)))); + addEntry(new ShortcutLoadingEntry()); } - categories = List.of(commandCategory, commandArgCategory); } @Override @@ -58,14 +54,6 @@ public class ShortcutsConfigListWidget extends ElementListWidget getShortcutsMap(ShortcutCategoryEntry category) { - return switch (categories.indexOf(category)) { - case 0 -> Shortcuts.commands; - case 1 -> Shortcuts.commandArgs; - default -> throw new IllegalStateException("Unexpected category: " + category); - }; - } - @Override public void setSelected(@Nullable ShortcutsConfigListWidget.AbstractShortcutEntry entry) { super.setSelected(entry); @@ -81,39 +69,46 @@ public class ShortcutsConfigListWidget extends ElementListWidget getNotEmptyShortcuts() { + return children().stream().filter(ShortcutEntry.class::isInstance).map(ShortcutEntry.class::cast).filter(ShortcutEntry::isNotEmpty); + } + protected static abstract class AbstractShortcutEntry extends ElementListWidget.Entry { } - protected class ShortcutCategoryEntry extends AbstractShortcutEntry { + private class ShortcutCategoryEntry extends AbstractShortcutEntry { + private final Map shortcutsMap; private final Text targetName; private final Text replacementName; @Nullable private final Text tooltip; - private ShortcutCategoryEntry(String targetName, String replacementName) { - this(targetName, replacementName, (Text) null); + private ShortcutCategoryEntry(Map shortcutsMap, String targetName, String replacementName) { + this(shortcutsMap, targetName, replacementName, (Text) null); } - private ShortcutCategoryEntry(String targetName, String replacementName, String tooltip) { - this(targetName, replacementName, Text.translatable(tooltip)); + private ShortcutCategoryEntry(Map shortcutsMap, String targetName, String replacementName, String tooltip) { + this(shortcutsMap, targetName, replacementName, Text.translatable(tooltip)); } - private ShortcutCategoryEntry(String targetName, String replacementName, @Nullable Text tooltip) { + private ShortcutCategoryEntry(Map shortcutsMap, String targetName, String replacementName, @Nullable Text tooltip) { + this.shortcutsMap = shortcutsMap; this.targetName = Text.translatable(targetName); this.replacementName = Text.translatable(replacementName); this.tooltip = tooltip; + shortcutMaps.add(shortcutsMap); + addEntry(this); } @Override @@ -181,23 +176,28 @@ public class ShortcutsConfigListWidget extends ElementListWidget children; - protected final ShortcutCategoryEntry category; - protected final TextFieldWidget target; - protected final TextFieldWidget replacement; + private final ShortcutCategoryEntry category; + private final TextFieldWidget target; + private final TextFieldWidget replacement; - protected ShortcutEntry(ShortcutCategoryEntry category) { - this(category, "", ""); + private ShortcutEntry(ShortcutCategoryEntry category) { + this(category, ""); } - private ShortcutEntry(ShortcutCategoryEntry category, String targetString, String replacementString) { + private ShortcutEntry(ShortcutCategoryEntry category, String targetString) { this.category = category; target = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 - 160, 5, 150, 20, category.targetName); replacement = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 + 10, 5, 150, 20, category.replacementName); target.setText(targetString); - replacement.setText(replacementString); + replacement.setText(category.shortcutsMap.getOrDefault(targetString, "")); children = List.of(target, replacement); } + @Override + public String toString() { + return target.getText() + " → " + replacement.getText(); + } + @Override public List children() { return children; @@ -208,6 +208,18 @@ public class ShortcutsConfigListWidget extends ElementListWidget { if (client != null && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry shortcutEntry) { scrollAmount = shortcutsConfigListWidget.getScrollAmount(); - client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.translatable("skyblocker.shortcuts.deleteWarning", shortcutEntry.target.getText() + " → " + shortcutEntry.replacement.getText()), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); + client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.translatable("skyblocker.shortcuts.deleteWarning", shortcutEntry), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); } }).build(); adder.add(buttonDelete); @@ -58,7 +57,6 @@ public class ShortcutsConfigScreen extends Screen { }).build()); buttonDone = ButtonWidget.builder(ScreenTexts.DONE, button -> { shortcutsConfigListWidget.saveShortcuts(); - saved = true; if (client != null) { close(); } @@ -88,7 +86,7 @@ public class ShortcutsConfigScreen extends Screen { @Override public void close() { - if (!saved && client != null) { + if (client != null && shortcutsConfigListWidget.hasChanges()) { client.setScreen(new ConfirmScreen(confirmedAction -> { if (confirmedAction) { super.close(); -- cgit From c2e3c7fe5eeea767d2ce517a7ef9e4c67a7968e5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 10 Jul 2023 16:36:00 +0800 Subject: Refactor queueOpenScreen --- .../skyblocker/config/SkyblockerConfig.java | 10 ++-- .../skyblocker/skyblock/dungeon/DungeonMap.java | 40 ++++++---------- .../skyblock/dungeon/DungeonMapConfigScreen.java | 28 +++++------ .../skyblocker/skyblock/dwarven/DwarvenHud.java | 56 +++++++++++----------- .../skyblock/dwarven/DwarvenHudConfigScreen.java | 6 +-- .../skyblocker/skyblock/shortcut/Shortcuts.java | 5 +- .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 15 ++---- .../skyblocker/utils/title/TitleContainer.java | 7 +-- .../utils/title/TitleContainerConfigScreen.java | 4 +- 9 files changed, 70 insertions(+), 101 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 8c7d2f71..c4eeb090 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -1,6 +1,5 @@ package me.xmrvizzy.skyblocker.config; -import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.ConfigData; @@ -518,7 +517,7 @@ public class SkyblockerConfig implements ConfigData { */ public static void init() { AutoConfig.register(SkyblockerConfig.class, GsonConfigSerializer::new); - ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal("skyblocker").then(optionsLiteral("config")).then(optionsLiteral("options"))))); + ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options"))))); } /** @@ -528,11 +527,8 @@ public class SkyblockerConfig implements ConfigData { * @return the command builder */ private static LiteralArgumentBuilder optionsLiteral(String name) { - return literal(name).executes(context -> { - // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed - SkyblockerMod.getInstance().scheduler.queueOpenScreen(AutoConfig.getConfigScreen(SkyblockerConfig.class, null)); - return Command.SINGLE_SUCCESS; - }); + // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed + return literal(name).executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(AutoConfig.getConfigScreen(SkyblockerConfig.class, null))); } public static SkyblockerConfig get() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java index 2a97d0ee..29a6e687 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java @@ -1,9 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; -import org.apache.commons.lang3.StringUtils; - -import com.mojang.brigadier.Command; - +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; @@ -16,11 +13,11 @@ import net.minecraft.item.FilledMapItem; import net.minecraft.item.ItemStack; import net.minecraft.item.map.MapState; import net.minecraft.nbt.NbtCompound; -import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import org.apache.commons.lang3.StringUtils; public class DungeonMap { - private static final Identifier MAP_BACKGROUND = new Identifier("textures/map/map_background.png"); + private static final Identifier MAP_BACKGROUND = new Identifier("textures/map/map_background.png"); public static void render(MatrixStack matrices) { MinecraftClient client = MinecraftClient.getInstance(); @@ -36,36 +33,29 @@ public class DungeonMap { MapRenderer map = client.gameRenderer.getMapRenderer(); MapState state = FilledMapItem.getMapState(mapid, client.world); float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; - int x = SkyblockerConfig.get().locations.dungeons.mapX; - int y = SkyblockerConfig.get().locations.dungeons.mapY; + int x = SkyblockerConfig.get().locations.dungeons.mapX; + int y = SkyblockerConfig.get().locations.dungeons.mapY; if (state == null) return; matrices.push(); matrices.translate(x, y, 0); matrices.scale(scaling, scaling, 0f); - map.draw( matrices, vertices, mapid, state, false, 15728880); + map.draw(matrices, vertices, mapid, state, false, 15728880); vertices.draw(); matrices.pop(); } } - + public static void renderHUDMap(DrawContext context, int x, int y) { - float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; - int size = (int) (128 * scaling); - context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size); + float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; + int size = (int) (128 * scaling); + context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size); } - + public static void init() { - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { - dispatcher.register(ClientCommandManager.literal("skyblocker") - .then(ClientCommandManager.literal("hud") - .then(ClientCommandManager.literal("dungeonmap") - .executes(context -> { - MinecraftClient client = context.getSource().getClient(); - client.send(() -> client.setScreen(new DungeonMapConfigScreen(Text.literal("Dungeon Map Config")))); - - return Command.SINGLE_SUCCESS; - })))); - }); + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("hud") + .then(ClientCommandManager.literal("dungeonmap") + .executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(DungeonMapConfigScreen::new)))))); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index ffd7a8b6..ef782c3b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -10,43 +10,43 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.text.Text; public class DungeonMapConfigScreen extends Screen { - + private int hudX = SkyblockerConfig.get().locations.dungeons.mapX; private int hudY = SkyblockerConfig.get().locations.dungeons.mapY; - - protected DungeonMapConfigScreen(Text title) { - super(title); + + protected DungeonMapConfigScreen() { + super(Text.literal("Dungeon Map Config")); } - + @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); renderBackground(context); DungeonMap.renderHUDMap(context, hudX, hudY); - context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width >> 1, height >> 1, Color.GRAY.getRGB()); } - + @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; int size = (int) (128 * scaling); - if(RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + size, hudY + size) && button == 0) { - hudX = (int) Math.max(Math.min(mouseX - (size / 2), this.width - size), 0); - hudY = (int) Math.max(Math.min(mouseY - (size / 2), this.height - size), 0); + if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + size, hudY + size) && button == 0) { + hudX = (int) Math.max(Math.min(mouseX - (size >> 1), this.width - size), 0); + hudY = (int) Math.max(Math.min(mouseY - (size >> 1), this.height - size), 0); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } - + @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if(button == 1) { + if (button == 1) { hudX = 2; hudY = 2; } - + return super.mouseClicked(mouseX, mouseY, button); } - + @Override public void close() { SkyblockerConfig.get().locations.dungeons.mapX = hudX; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 122f6c6c..7316577e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -7,7 +8,6 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallba import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -26,34 +26,32 @@ public class DwarvenHud { public static final List COMMISSIONS = Stream.of( - "(?:Titanium|Mithril|Hard Stone) Miner", - "(?:Ice Walker|Goblin|Goblin Raid|Automaton|Sludge|Team Treasurite Member|Yog|Boss Corleone|Thyst) Slayer", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Mithril", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Titanium", - "Goblin Raid", - "(?:Powder Ghast|Star Sentry) Puncher", - "(? Pattern.compile("^.*(" + s + "): (\\d+\\.?\\d*%|DONE)")) .collect(Collectors.toList()); + public static void init() { ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("hud") .then(ClientCommandManager.literal("dwarven") - .executes(context -> { - client.send(() -> client.setScreen(new DwarvenHudConfigScreen(Text.of("Dwarven HUD Config")))); - return 1; - }))))); + .executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(DwarvenHudConfigScreen::new)))))); HudRenderCallback.EVENT.register((context, tickDelta) -> { if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled - || client.options.playerListKey.isPressed() - || client.player == null - || commissionList.isEmpty()) { + || client.options.playerListKey.isPressed() + || client.player == null + || commissionList.isEmpty()) { return; } render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); @@ -62,7 +60,7 @@ public class DwarvenHud { public static void render(DrawContext context, int hudX, int hudY, List commissions) { - switch(SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { + switch (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { case SIMPLE -> renderSimple(context, hudX, hudY, commissions); case FANCY -> renderFancy(context, hudX, hudY, commissions); case CLASSIC -> renderClassic(context, hudX, hudY, commissions); @@ -77,12 +75,12 @@ public class DwarvenHud { int y = 0; for (Commission commission : commissions) { context - .drawTextWithShadow(client.textRenderer, - Text.literal(commission.commission + ": ") - .styled(style -> style.withColor(Formatting.AQUA)) - .append(Text.literal(commission.progression) - .styled(style -> style.withColor(Formatting.GREEN))), - hudX + 5, hudY + y + 5, 0xFFFFFFFF); + .drawTextWithShadow(client.textRenderer, + Text.literal(commission.commission + ": ") + .styled(style -> style.withColor(Formatting.AQUA)) + .append(Text.literal(commission.progression) + .styled(style -> style.withColor(Formatting.GREEN))), + hudX + 5, hudY + y + 5, 0xFFFFFFFF); y += 20; } } @@ -119,6 +117,6 @@ public class DwarvenHud { } // steamroller tactics to get visibility from outside classes (CommsWidget) - public static record Commission(String commission, String progression){} - + public record Commission(String commission, String progression) { + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index f91ed921..10e62d88 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -5,7 +5,6 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import java.awt.*; @@ -15,8 +14,9 @@ public class DwarvenHudConfigScreen extends Screen { private int hudX = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x; private int hudY = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y; - protected DwarvenHudConfigScreen(Text title) { - super(title); + + protected DwarvenHudConfigScreen() { + super(Text.of("Dwarven HUD Config")); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java index 03701a3f..bef56cbd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -177,11 +177,8 @@ public class Shortcuts { source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command)); } return Command.SINGLE_SUCCESS; - })).then(literal("shortcuts").executes(context -> { // Queue the screen or else the screen will be immediately closed after executing this command - SkyblockerMod.getInstance().scheduler.queueOpenScreen(ShortcutsConfigScreen::new); - return Command.SINGLE_SUCCESS; - }))); + })).then(literal("shortcuts").executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(ShortcutsConfigScreen::new)))); } private static String modifyCommand(String command) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 7b19e284..fbe79ade 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.utils; +import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.SkyblockerMod; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; @@ -58,17 +59,9 @@ public class Scheduler { * * @param screenSupplier the supplier of the screen to open */ - public void queueOpenScreen(Supplier screenSupplier) { - queueOpenScreen(screenSupplier.get()); - } - - /** - * Schedules a screen to open in the next tick. Used in commands to avoid screen immediately closing after the command is executed. - * - * @param screen the supplier of the screen to open - */ - public void queueOpenScreen(Screen screen) { - MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().setScreen(screen)); + public int queueOpenScreen(Supplier screenSupplier) { + MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().setScreen(screenSupplier.get())); + return Command.SINGLE_SUCCESS; } public void tick() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index a4e445ee..7b92fff6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,6 +1,5 @@ package me.xmrvizzy.skyblocker.utils.title; -import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -9,7 +8,6 @@ import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; import java.util.LinkedHashSet; @@ -31,10 +29,7 @@ public class TitleContainer { ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("hud") .then(ClientCommandManager.literal("titleContainer") - .executes(context -> { - SkyblockerMod.getInstance().scheduler.queueOpenScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config"))); - return Command.SINGLE_SUCCESS; - }))))); + .executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(TitleContainerConfigScreen::new)))))); } /** diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index e729ea15..c0c4d63c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -21,8 +21,8 @@ public class TitleContainerConfigScreen extends Screen { private float hudX = SkyblockerConfig.get().general.titleContainer.x; private float hudY = SkyblockerConfig.get().general.titleContainer.y; - protected TitleContainerConfigScreen(Text title) { - super(title); + protected TitleContainerConfigScreen() { + super(Text.of("Title Container HUD Config")); } @Override -- cgit From bac0f8f4aff96c5c6707bbb750f37de92e000da4 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Tue, 18 Jul 2023 14:56:20 -0400 Subject: Add Dark Auction Tab Hud --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index c2f14d3c..f7a989bc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -26,6 +26,7 @@ public class PlayerLocator { GARDEN, INSTANCED, THE_RIFT, + DARK_AUCTION, UNKNOWN } @@ -85,6 +86,8 @@ public class PlayerLocator { return Location.INSTANCED; case "The Rift": return Location.THE_RIFT; + case "Dark Auction": + return Location.DARK_AUCTION; default: return Location.UNKNOWN; } -- cgit From 2e2d837d2040ec64a328e97afbcf1775861e0ce5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:03:43 +0800 Subject: Add string argument to commands and remove Hypixel check --- .../java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java index bef56cbd..44077b3e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -4,9 +4,9 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.StringArgumentType; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class Shortcuts { @@ -153,7 +154,7 @@ public class Shortcuts { } for (String key : commandArgs.keySet()) { if (key.startsWith("/")) { - dispatcher.register(literal(key.substring(1))); + dispatcher.register(literal(key.substring(1)).then(argument("args", StringArgumentType.greedyString()))); } } dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> { @@ -182,7 +183,7 @@ public class Shortcuts { } private static String modifyCommand(String command) { - if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) { + if (SkyblockerConfig.get().general.shortcuts.enableShortcuts) { if (!isShortcutsLoaded()) { LOGGER.warn("[Skyblocker] Shortcuts not loaded yet, skipping shortcut for command: {}", command); return command; -- cgit From e1861cce82e7cd78b8f2e46d96378a288e379aa6 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 22 Jul 2023 18:33:45 -0400 Subject: Fix ads filter triggering when it shouldn't --- src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java index 6b681d4c..426bb8cc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java @@ -13,13 +13,14 @@ public class AdFilter extends ChatPatternListener { Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), Pattern.compile("(.)\\1{7,}"), Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), }; + private static final String EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u12DE"; public AdFilter() { // Groups: // 1. Player name // 2. Message - // (?:§8\[[§feadbc0-9]+§8\] )?(?:.+ )?§[67abc](?:\[[§A-Za-z0-9+]+\] )?([A-Za-z0-9_]+)§[f7]: (.+) - super("(?:§8\\[[§feadbc0-9]+§8\\] )?(?:.+ )?§[67abc](?:\\[[§A-Za-z0-9+]+\\] )?([A-Za-z0-9_]+)§[f7]: (.+)"); + // (?:§8\[[§feadbc0-9]+§8\] )?(?:[§76l]+[] )?§[67abc](?:\[[§A-Za-z0-9+]+\] )?([A-Za-z0-9_]+)§[f7]: (.+) + super("(?:§8\\[[§feadbc0-9]+§8\\] )?(?:[§76l]+[" + EMBLEMS + "] )?§[67abc](?:\\[[§A-Za-z0-9+]+\\] )?([A-Za-z0-9_]+)§[f7]: (.+)"); } @Override -- cgit From 20edc3b057346e70965ed2dffa131722f64a0d7a Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 22 Jul 2023 22:51:46 -0400 Subject: Add show off message filter --- .../xmrvizzy/skyblocker/chat/ChatMessageListener.java | 1 + .../skyblocker/chat/filters/ShowOffFilter.java | 18 ++++++++++++++++++ .../xmrvizzy/skyblocker/config/SkyblockerConfig.java | 3 +++ src/main/resources/assets/skyblocker/lang/en_us.json | 3 ++- 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index d58d03aa..5ea3e2a9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -53,6 +53,7 @@ public interface ChatMessageListener { new MoltenWaveFilter(), new TeleportPadFilter(), new AutopetFilter(), + new ShowOffFilter() }; // Register all listeners to EVENT for (ChatMessageListener listener : listeners) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java new file mode 100644 index 00000000..a9835d21 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java @@ -0,0 +1,18 @@ +package me.xmrvizzy.skyblocker.chat.filters; + +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; + +public class ShowOffFilter extends SimpleChatFilter { + private static final String EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u12DE"; + private static final String[] SHOW_TYPES = { "is holding", "is wearing", "is friends with a", "has" }; + + public ShowOffFilter() { + super("(?:§8\\[[§feadbc0-9]+§8\\] )?(?:[§76l]+[" + EMBLEMS + "] )?§[67abc](?:\\[[§A-Za-z0-9+]+\\] )?([A-Za-z0-9_]+)[§f7]+ (?:" + String.join("|", SHOW_TYPES) + ") §8\\[(.+)§8\\]"); + } + + @Override + protected ChatFilterResult state() { + return SkyblockerConfig.get().messages.hideShowOff; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index c4eeb090..c965517a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -497,6 +497,9 @@ public class SkyblockerConfig implements ConfigData { public ChatFilterResult hideCombo = ChatFilterResult.PASS; @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) public ChatFilterResult hideAutopet = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + @ConfigEntry.Gui.Tooltip + public ChatFilterResult hideShowOff = ChatFilterResult.PASS; @ConfigEntry.Gui.Tooltip() public boolean hideMana = false; } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index b907cf1b..054d3162 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -242,7 +242,8 @@ "text.autoconfig.skyblocker.option.messages.hideAutopet": "Hide Autopet Messages", "text.autoconfig.skyblocker.option.messages.hideMana": "Hide Mana Consumption Messages from Action Bar", "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Gives a better experience with FancyBar", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Hide empty item tooltips in menus", + "text.autoconfig.skyblocker.option.messages.hideShowOff": "Hide Show Off Messages", + "text.autoconfig.skyblocker.option.messages.hideShowOff.@Tooltip": "Filters messages from the /show command", "text.autoconfig.skyblocker.category.slayer": "Slayers", "text.autoconfig.skyblocker.option.slayer.vampireSlayer": "Vampire Slayer", "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableEffigyWaypoints": "Enable Effigy Waypoints", -- cgit From 13b48d01865ec996df88a93c02f83e3d756a43f7 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:38:51 -0400 Subject: Garden Tab Hud Improvements - Added visitors widget - Added camera position widget with yaw & pitch which've been rounded to 3 points of precision --- .../skyblock/tabhud/screens/main/GardenScreen.java | 15 +++++++--- .../tabhud/widget/CameraPositionWidget.java | 32 ++++++++++++++++++++++ .../tabhud/widget/GardenVisitorsWidget.java | 29 ++++++++++++++++++++ 3 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java index ae5b642f..8fd69cbb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java @@ -2,8 +2,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CameraPositionWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenVisitorsWidget; import net.minecraft.text.Text; public class GardenScreen extends Screen{ @@ -13,11 +15,16 @@ public class GardenScreen extends Screen{ GardenServerWidget gsw = new GardenServerWidget(); ComposterWidget cw = new ComposterWidget(); + GardenVisitorsWidget vw = new GardenVisitorsWidget(); + CameraPositionWidget cpw = new CameraPositionWidget(); - this.stackWidgetsH(gsw, cw); - this.centerW(gsw); - this.centerW(cw); - this.addWidgets(gsw, cw); + this.stackWidgetsH(gsw, vw); + this.stackWidgetsH(cw, cpw); + this.offCenterL(gsw); + this.offCenterL(vw); + this.offCenterR(cw); + this.offCenterR(cpw); + this.addWidgets(gsw, cw, vw, cpw); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java new file mode 100644 index 00000000..ca108837 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java @@ -0,0 +1,32 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.math.MathHelper; + +public class CameraPositionWidget extends Widget { + private static final MutableText TITLE = Text.literal("Camera Pos").formatted(Formatting.DARK_PURPLE, Formatting.BOLD); + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + + public CameraPositionWidget() { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + double yaw = CLIENT.getCameraEntity().getYaw(); + double pitch = CLIENT.getCameraEntity().getPitch(); + + this.addComponent(new PlainTextComponent(Text.literal("Yaw: " + roundToDecimalPlaces(MathHelper.wrapDegrees(yaw), 3)))); + this.addComponent(new PlainTextComponent(Text.literal("Pitch: " + roundToDecimalPlaces(MathHelper.wrapDegrees(pitch), 3)))); + + this.pack(); + } + + //https://stackoverflow.com/a/33889423 + private static double roundToDecimalPlaces(double value, int decimalPlaces) { + double shift = Math.pow(10, decimalPlaces); + + return Math.round(value * shift) / shift; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java new file mode 100644 index 00000000..6a4d2af3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java @@ -0,0 +1,29 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class GardenVisitorsWidget extends Widget { + private static final MutableText TITLE = Text.literal("Visitors").formatted(Formatting.DARK_GREEN, Formatting.BOLD); + + public GardenVisitorsWidget() { + super(TITLE, Formatting.DARK_GREEN.getColorValue()); + + if (PlayerListMgr.textAt(54) == null) { + this.addComponent(new PlainTextComponent(Text.literal("No visitors!").formatted(Formatting.GRAY))); + this.pack(); + + return; + } + + for (int i = 54; i < 59; i++) { + String text = PlayerListMgr.strAt(i); + if (text != null) this.addComponent(new PlainTextComponent(Text.literal(text))); + } + + this.pack(); + } +} -- cgit From cfae3b8ca91484ef7d9dc7e0eff919ffeeff89c7 Mon Sep 17 00:00:00 2001 From: Kevin <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 25 Jul 2023 02:15:16 -0400 Subject: Hide spammed warnings (#209) --- build.gradle | 15 ++++++----- gradle.properties | 2 ++ .../mixin/ClientPlayNetworkHandlerMixin.java | 29 +++++++++++++++------- .../xmrvizzy/skyblocker/mixin/ScoreboardMixin.java | 16 ++++++++++++ .../skyblocker/skyblock/FishingHelper.java | 4 +-- src/main/resources/skyblocker.mixins.json | 1 + 6 files changed, 50 insertions(+), 17 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java (limited to 'src/main/java/me') diff --git a/build.gradle b/build.gradle index 44d47adc..9e5e4e6a 100644 --- a/build.gradle +++ b/build.gradle @@ -40,6 +40,9 @@ dependencies { mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + // Fabric API. This is technically optional, but you probably want it anyway. + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" + // Cloth config include modImplementation("me.shedaniel.cloth:cloth-config-fabric:${project.clothconfig_version}") { exclude group: "net.fabricmc.fabric-api" @@ -53,12 +56,6 @@ dependencies { modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" - // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" - - // https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit used pull data from the NEU item repo - include implementation("org.eclipse.jgit:org.eclipse.jgit:6.4.0.202211300538-r") - // Renderer (https://github.com/0x3C50/Renderer) include modImplementation("com.github.0x3C50:Renderer:${project.renderer_version}"){ exclude group: "io.github.ladysnake" exclude module: "satin" @@ -66,6 +63,12 @@ dependencies { include modImplementation("meteordevelopment:discord-ipc:1.1") + // Mixin Extras (https://github.com/LlamaLad7/MixinExtras) + include implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-fabric:${project.mixin_extras_version}")) + + // https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit used pull data from the NEU item repo + include implementation("org.eclipse.jgit:org.eclipse.jgit:6.4.0.202211300538-r") + // Occlusion Culling (https://github.com/LogisticsCraft/OcclusionCulling) include implementation("com.logisticscraft:occlusionculling:${project.occlusionculling_version}") } diff --git a/gradle.properties b/gradle.properties index a97ef816..d28c538b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,6 +20,8 @@ rei_version=12.0.625 ## Renderer (https://github.com/0x3C50/Renderer) renderer_version = master-SNAPSHOT +## Mixin Extras (https://github.com/LlamaLad7/MixinExtras) +mixin_extras_version=0.2.0-beta.9 ## Occlusion Culling (https://github.com/LogisticsCraft/OcclusionCulling) occlusionculling_version = 0.0.7-SNAPSHOT diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java index 80c98473..1d8b6565 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java @@ -1,24 +1,35 @@ package me.xmrvizzy.skyblocker.mixin; +import com.llamalad7.mixinextras.injector.WrapWithCondition; import me.xmrvizzy.skyblocker.skyblock.FishingHelper; -import net.minecraft.client.MinecraftClient; +import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; -import org.spongepowered.asm.mixin.Final; +import org.slf4j.Logger; 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; @Mixin(ClientPlayNetworkHandler.class) public abstract class ClientPlayNetworkHandlerMixin { - @Shadow - @Final - private MinecraftClient client; - @Inject(method = "onPlaySound", at = @At("RETURN")) - private void skyblockmod_onPlaySound(PlaySoundS2CPacket packet, CallbackInfo ci) { - FishingHelper.onSound(client, packet); + private void skyblocker$onPlaySound(PlaySoundS2CPacket packet, CallbackInfo ci) { + FishingHelper.onSound(packet); + } + + @WrapWithCondition(method = "onEntityPassengersSet", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;)V")) + private boolean skyblocker$cancelEntityPassengersWarning(Logger instance, String msg) { + return !Utils.isOnHypixel(); + } + + @WrapWithCondition(method = "onPlayerList", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + private boolean skyblocker$cancelPlayerListWarning(Logger instance, String format, Object arg) { + return !Utils.isOnHypixel(); + } + + @WrapWithCondition(method = "onTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V")) + private boolean skyblocker$cancelTeamWarning(Logger instance, String format, Object... arg) { + return !Utils.isOnHypixel(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java new file mode 100644 index 00000000..6f88821c --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java @@ -0,0 +1,16 @@ +package me.xmrvizzy.skyblocker.mixin; + +import com.llamalad7.mixinextras.injector.WrapWithCondition; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.scoreboard.Scoreboard; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(Scoreboard.class) +public abstract class ScoreboardMixin { + @WrapWithCondition(method = "addTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + private boolean skyblocker$cancelTeamWarning(Logger instance, String format, Object arg) { + return !Utils.isOnHypixel(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java index 8dee3fcb..b53157c5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java @@ -44,10 +44,10 @@ public class FishingHelper { startTime = 0; } - public static void onSound(MinecraftClient client, PlaySoundS2CPacket packet) { + public static void onSound(PlaySoundS2CPacket packet) { String path = packet.getSound().value().getId().getPath(); if (SkyblockerConfig.get().general.fishing.enableFishingHelper && startTime != 0 && System.currentTimeMillis() >= startTime + 2000 && ("entity.generic.splash".equals(path) || "entity.player.splash".equals(path))) { - ClientPlayerEntity player = client.player; + ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null && player.fishHook != null) { Vec3d soundToFishHook = player.fishHook.getPos().subtract(packet.getX(), 0, packet.getZ()); if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.getPos().squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) { diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 701d54e5..83861112 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -18,6 +18,7 @@ "PlayerListHudAccessor", "PlayerListHudMixin", "RecipeBookWidgetAccessor", + "ScoreboardMixin", "accessor.BeaconBlockEntityRendererInvoker", "accessor.FrustumInvoker" ], -- cgit From 32c90b26ac57edda7cd5130f9c9a089db33ee370 Mon Sep 17 00:00:00 2001 From: Kevin <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 26 Jul 2023 00:06:58 -0400 Subject: Fix hotbar lock rendering mixin (#211) --- .../xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 30 ++++------------------ 1 file changed, 5 insertions(+), 25 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 7d9182b5..3e2db3e0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.mixin; +import com.llamalad7.mixinextras.sugar.Local; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.FancyStatusBars; @@ -11,11 +12,8 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -26,9 +24,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Environment(EnvType.CLIENT) @Mixin(InGameHud.class) public abstract class InGameHudMixin { - //@Shadow - //@Final - //private static Identifier ICONS = new Identifier("textures/gui/icons.png"); @Unique private static final Identifier SLOT_LOCK = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/slot_lock.png"); @Unique @@ -36,10 +31,6 @@ public abstract class InGameHudMixin { private final StatusBarTracker statusBarTracker = SkyblockerMod.getInstance().statusBarTracker; @Unique private final FancyStatusBars statusBars = new FancyStatusBars(); - @Unique - private DrawContext hotbarContext; - @Unique - private int hotbarSlotIndex; @Shadow private int scaledHeight; @@ -63,21 +54,10 @@ public abstract class InGameHudMixin { } } - @Inject(method = "renderHotbar", at = @At("HEAD")) - public void skyblocker$renderHotbar(float f, DrawContext context, CallbackInfo ci) { - if (Utils.isOnSkyblock()) { - hotbarContext = context; - hotbarSlotIndex = 0; - } - } - - @Inject(method = "renderHotbarItem", at = @At("HEAD")) - public void skyblocker$renderHotbarItem(DrawContext context, int i, int j, float f, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) { - if (Utils.isOnSkyblock()) { - if (HotbarSlotLock.isLocked(hotbarSlotIndex)) { - hotbarContext.drawTexture(SLOT_LOCK, i, j, 0, 0, 16, 16); - } - hotbarSlotIndex++; + @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderHotbarItem(Lnet/minecraft/client/gui/DrawContext;IIFLnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;I)V", ordinal = 0)) + public void skyblocker$renderHotbarItemLock(float tickDelta, DrawContext context, CallbackInfo ci, @Local(ordinal = 4, name = "m") int index, @Local(ordinal = 5, name = "n") int x, @Local(ordinal = 6, name = "o") int y) { + if (Utils.isOnSkyblock() && HotbarSlotLock.isLocked(index)) { + context.drawTexture(SLOT_LOCK, x, y, 0, 0, 16, 16); } } -- cgit From 9bd911f8ba9685e5a04afba5d83ad0fa8dd24d36 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 27 Jul 2023 22:55:36 -0400 Subject: Add new trophy fishing emblem (#212) --- src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java index 426bb8cc..a813346b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java @@ -13,7 +13,7 @@ public class AdFilter extends ChatPatternListener { Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), Pattern.compile("(.)\\1{7,}"), Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), }; - private static final String EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u12DE"; + private static final String EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u2654\u12DE"; public AdFilter() { // Groups: diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java index a9835d21..3b5ea41a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ShowOffFilter.java @@ -4,7 +4,7 @@ import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; public class ShowOffFilter extends SimpleChatFilter { - private static final String EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u12DE"; + private static final String EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u2654\u12DE"; private static final String[] SHOW_TYPES = { "is holding", "is wearing", "is friends with a", "has" }; public ShowOffFilter() { -- cgit From 17b50cb7bc0e06e2be08f275eb32a93d7e8f6b66 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 04:41:35 -0400 Subject: Add Etherwarp Overlay --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 1 + .../skyblocker/config/SkyblockerConfig.java | 1 + .../skyblocker/skyblock/EtherwarpOverlay.java | 54 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 1 + 4 files changed, 57 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 0263f20c..50c60840 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -87,6 +87,7 @@ public class SkyblockerMod implements ClientModInitializer { TheRift.init(); TitleContainer.init(); OcclusionCulling.init(); + EtherwarpOverlay.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index c965517a..6874f2ce 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -136,6 +136,7 @@ public class SkyblockerConfig implements ConfigData { public boolean acceptReparty = true; public boolean backpackPreviewWithoutShift = false; public boolean hideEmptyTooltips = true; + public boolean etherwarpOverlay = true; @ConfigEntry.Category("tabHud") @ConfigEntry.Gui.CollapsibleObject() diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java new file mode 100644 index 00000000..22048fcc --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -0,0 +1,54 @@ +package me.xmrvizzy.skyblocker.skyblock; + +import org.lwjgl.glfw.GLFW; + +import com.mojang.blaze3d.systems.RenderSystem; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.util.InputUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; + +public class EtherwarpOverlay { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final float[] COLOR_COMPONENTS = { 118f / 255f, 21f / 255f, 148f / 255f }; + + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(EtherwarpOverlay::renderEtherwarpOverlay); + } + + private static void renderEtherwarpOverlay(WorldRenderContext wrc) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.etherwarpOverlay) { + ItemStack heldItem = CLIENT.player.getMainHandStack(); + String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); + + if (itemId != null && itemId.equals("ASPECT_OF_THE_VOID") && InputUtil.isKeyPressed(CLIENT.getWindow().getHandle(), GLFW.GLFW_KEY_LEFT_SHIFT)) { + HitResult result = CLIENT.player.raycast(61, wrc.tickDelta(), false); + + if (result instanceof BlockHitResult blockHit) { + BlockPos pos = blockHit.getBlockPos(); + BlockState state = CLIENT.world.getBlockState(pos); + if (state.getBlock() != Blocks.AIR && CLIENT.world.getBlockState(pos.up()).getBlock() == Blocks.AIR && CLIENT.world.getBlockState(pos.up(2)).getBlock() == Blocks.AIR) { + RenderSystem.polygonOffset(-1f, -10f); + RenderSystem.enablePolygonOffset(); + + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); + + RenderSystem.polygonOffset(0f, 0f); + RenderSystem.disablePolygonOffset(); + } + } + } + } + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 054d3162..736f5872 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -25,6 +25,7 @@ "text.autoconfig.skyblocker.option.general.experiments.enableSuperpairsSolver": "Enable Superpairs Solver", "text.autoconfig.skyblocker.option.general.experiments.enableUltrasequencerSolver": "Enable Ultrasequencer Solver", "text.autoconfig.skyblocker.option.general.acceptReparty": "Auto accept Reparty", + "text.autoconfig.skyblocker.option.general.etherwarpOverlay": "Etherwarp Overlay", "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", "text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper", -- cgit From bf2b17b4e6a380a5a678e7638ce4bc65a4b15a20 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 17:45:00 -0400 Subject: Remove invalid base64 log spam --- .../skyblocker/mixin/PlayerSkinProviderMixin.java | 27 ++++++++++++++++++++++ src/main/resources/skyblocker.mixins.json | 1 + 2 files changed, 28 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java new file mode 100644 index 00000000..5b75eb47 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java @@ -0,0 +1,27 @@ +package me.xmrvizzy.skyblocker.mixin; + +import java.util.concurrent.ExecutorService; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.texture.PlayerSkinProvider; + +@Mixin(PlayerSkinProvider.class) +public class PlayerSkinProviderMixin { + + @Redirect(method = "loadSkin(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/texture/PlayerSkinProvider$SkinTextureAvailableCallback;Z)V", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/ExecutorService;execute(Ljava/lang/Runnable;)V", remap = false)) + private void skyblocker$removeInvalidBase64LogSpam(ExecutorService executor, Runnable runnable) { + executor.execute(() -> { + try { + runnable.run(); + } catch (Throwable t) { + if (!(t instanceof IllegalArgumentException) || !Utils.isOnHypixel()) { + t.printStackTrace(); + } + } + }); + } +} diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 83861112..656f9d32 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -17,6 +17,7 @@ "MinecraftClientMixin", "PlayerListHudAccessor", "PlayerListHudMixin", + "PlayerSkinProviderMixin", "RecipeBookWidgetAccessor", "ScoreboardMixin", "accessor.BeaconBlockEntityRendererInvoker", -- cgit From 96951b64b95cb03815df2e28bb45ceebad1d949d Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 19:37:38 -0400 Subject: AOTE Compatibility + Etherwarp check --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index 22048fcc..16845769 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -15,6 +15,7 @@ import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.util.InputUtil; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; @@ -31,8 +32,9 @@ public class EtherwarpOverlay { if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.etherwarpOverlay) { ItemStack heldItem = CLIENT.player.getMainHandStack(); String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); + NbtCompound nbt = heldItem.getNbt(); - if (itemId != null && itemId.equals("ASPECT_OF_THE_VOID") && InputUtil.isKeyPressed(CLIENT.getWindow().getHandle(), GLFW.GLFW_KEY_LEFT_SHIFT)) { + if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && InputUtil.isKeyPressed(CLIENT.getWindow().getHandle(), GLFW.GLFW_KEY_LEFT_SHIFT)) { HitResult result = CLIENT.player.raycast(61, wrc.tickDelta(), false); if (result instanceof BlockHitResult blockHit) { -- cgit From 45ffaf83e87998bb38b9bb880eb131cee53f15f9 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 19:55:35 -0400 Subject: Check sneak key --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index 16845769..6f7fadbf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -1,7 +1,5 @@ package me.xmrvizzy.skyblocker.skyblock; -import org.lwjgl.glfw.GLFW; - import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; @@ -13,7 +11,6 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.util.InputUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.hit.BlockHitResult; @@ -34,7 +31,7 @@ public class EtherwarpOverlay { String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); NbtCompound nbt = heldItem.getNbt(); - if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && InputUtil.isKeyPressed(CLIENT.getWindow().getHandle(), GLFW.GLFW_KEY_LEFT_SHIFT)) { + if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && CLIENT.options.sneakKey.isPressed()) { HitResult result = CLIENT.player.raycast(61, wrc.tickDelta(), false); if (result instanceof BlockHitResult blockHit) { -- cgit From 56c9e620fb05fabdffdb653709f12c095475b7da Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 20:00:07 -0400 Subject: Check range --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index 6f7fadbf..f92be63f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -32,7 +32,8 @@ public class EtherwarpOverlay { NbtCompound nbt = heldItem.getNbt(); if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && CLIENT.options.sneakKey.isPressed()) { - HitResult result = CLIENT.player.raycast(61, wrc.tickDelta(), false); + int range = (nbt != null && nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 61; + HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); if (result instanceof BlockHitResult blockHit) { BlockPos pos = blockHit.getBlockPos(); -- cgit From bc0c2321c09cf234e143f112857a3cf86792125a Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 20:04:36 -0400 Subject: Etherwarp Conduit --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index f92be63f..0a425229 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -31,7 +31,7 @@ public class EtherwarpOverlay { String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); NbtCompound nbt = heldItem.getNbt(); - if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && CLIENT.options.sneakKey.isPressed()) { + if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END") || itemId.equals("ETHERWARP_CONDUIT")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && CLIENT.options.sneakKey.isPressed()) { int range = (nbt != null && nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 61; HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); -- cgit From 233323cfba664d16acd82ae18c84af0cc02be485 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 20:12:37 -0400 Subject: more changes this is making me sad ;( --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index 0a425229..02480513 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -31,8 +31,8 @@ public class EtherwarpOverlay { String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); NbtCompound nbt = heldItem.getNbt(); - if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END") || itemId.equals("ETHERWARP_CONDUIT")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && CLIENT.options.sneakKey.isPressed()) { - int range = (nbt != null && nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 61; + if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END") || itemId.equals("ETHERWARP_CONDUIT")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && (CLIENT.options.sneakKey.isPressed() || itemId.equals("ETHERWARP_CONDUIT"))) { + int range = (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 61; HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); if (result instanceof BlockHitResult blockHit) { -- cgit From bb227f5d7774ca3f1a8c0cff5848226418bd860e Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 20:15:24 -0400 Subject: goodbye null check --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index 02480513..a083a580 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -31,7 +31,7 @@ public class EtherwarpOverlay { String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); NbtCompound nbt = heldItem.getNbt(); - if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END") || itemId.equals("ETHERWARP_CONDUIT")) && (nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) && (CLIENT.options.sneakKey.isPressed() || itemId.equals("ETHERWARP_CONDUIT"))) { + if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END") || itemId.equals("ETHERWARP_CONDUIT")) && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && (CLIENT.options.sneakKey.isPressed() || itemId.equals("ETHERWARP_CONDUIT"))) { int range = (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 61; HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); -- cgit From cc3d2b7474ddf7ea1be5bb2693f4e300a2457ee2 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 20:24:47 -0400 Subject: incase people cannot affork 200k --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index a083a580..aacb794b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -32,7 +32,7 @@ public class EtherwarpOverlay { NbtCompound nbt = heldItem.getNbt(); if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END") || itemId.equals("ETHERWARP_CONDUIT")) && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && (CLIENT.options.sneakKey.isPressed() || itemId.equals("ETHERWARP_CONDUIT"))) { - int range = (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 61; + int range = (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57; HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); if (result instanceof BlockHitResult blockHit) { -- cgit From 5e693573457ab26d01229c0ba9db179aab9c1712 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 28 Jul 2023 20:36:27 -0400 Subject: Cleaner if statement --- src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java index aacb794b..005b3d64 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java @@ -31,7 +31,7 @@ public class EtherwarpOverlay { String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); NbtCompound nbt = heldItem.getNbt(); - if (itemId != null && (itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END") || itemId.equals("ETHERWARP_CONDUIT")) && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && (CLIENT.options.sneakKey.isPressed() || itemId.equals("ETHERWARP_CONDUIT"))) { + if (itemId != null && (((itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && CLIENT.options.sneakKey.isPressed()) || itemId.equals("ETHERWARP_CONDUIT"))) { int range = (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57; HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); -- cgit From eee776d2702dd619aaec2180fb878b94a856369c Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Sat, 29 Jul 2023 04:06:35 +0200 Subject: Yay --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 +- .../skyblocker/config/SkyblockerConfig.java | 14 +++- .../skyblocker/skyblock/EtherwarpOverlay.java | 54 ------------- .../skyblocker/skyblock/TeleportOverlay.java | 91 ++++++++++++++++++++++ 4 files changed, 105 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 50c60840..bd414acb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -87,7 +87,7 @@ public class SkyblockerMod implements ClientModInitializer { TheRift.init(); TitleContainer.init(); OcclusionCulling.init(); - EtherwarpOverlay.init(); + TeleportOverlay.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 6874f2ce..2cc7dd36 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -136,7 +136,6 @@ public class SkyblockerConfig implements ConfigData { public boolean acceptReparty = true; public boolean backpackPreviewWithoutShift = false; public boolean hideEmptyTooltips = true; - public boolean etherwarpOverlay = true; @ConfigEntry.Category("tabHud") @ConfigEntry.Gui.CollapsibleObject() @@ -182,6 +181,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public TitleContainer titleContainer = new TitleContainer(); + @ConfigEntry.Category("Teleport Overlay") + @ConfigEntry.Gui.CollapsibleObject() + public TeleportOverlay teleportOverlay = new TeleportOverlay(); + @ConfigEntry.Gui.Excluded public List lockedSlots = new ArrayList<>(); } @@ -293,6 +296,15 @@ public class SkyblockerConfig implements ConfigData { public Alignment alignment = Alignment.MIDDLE; } + public static class TeleportOverlay { + public boolean enableTeleportOverlays = true; + public boolean enableWeirdTransmission = true; + public boolean enableInstantTransmission = true; + public boolean enableEtherTransmission = true; + public boolean enableSinrecallTransmission = true; + public boolean enableWitherImpact = true; + } + public enum Direction { HORIZONTAL, VERTICAL; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java deleted file mode 100644 index 005b3d64..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ /dev/null @@ -1,54 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock; - -import com.mojang.blaze3d.systems.RenderSystem; - -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; -import me.xmrvizzy.skyblocker.utils.RenderHelper; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; - -public class EtherwarpOverlay { - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final float[] COLOR_COMPONENTS = { 118f / 255f, 21f / 255f, 148f / 255f }; - - public static void init() { - WorldRenderEvents.AFTER_TRANSLUCENT.register(EtherwarpOverlay::renderEtherwarpOverlay); - } - - private static void renderEtherwarpOverlay(WorldRenderContext wrc) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.etherwarpOverlay) { - ItemStack heldItem = CLIENT.player.getMainHandStack(); - String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); - NbtCompound nbt = heldItem.getNbt(); - - if (itemId != null && (((itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && CLIENT.options.sneakKey.isPressed()) || itemId.equals("ETHERWARP_CONDUIT"))) { - int range = (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57; - HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); - - if (result instanceof BlockHitResult blockHit) { - BlockPos pos = blockHit.getBlockPos(); - BlockState state = CLIENT.world.getBlockState(pos); - if (state.getBlock() != Blocks.AIR && CLIENT.world.getBlockState(pos.up()).getBlock() == Blocks.AIR && CLIENT.world.getBlockState(pos.up(2)).getBlock() == Blocks.AIR) { - RenderSystem.polygonOffset(-1f, -10f); - RenderSystem.enablePolygonOffset(); - - RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); - - RenderSystem.polygonOffset(0f, 0f); - RenderSystem.disablePolygonOffset(); - } - } - } - } - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java new file mode 100644 index 00000000..6551ac9d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java @@ -0,0 +1,91 @@ +package me.xmrvizzy.skyblocker.skyblock; + +import com.mojang.blaze3d.systems.RenderSystem; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; + +public class TeleportOverlay { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final float[] COLOR_COMPONENTS = { 118f / 255f, 21f / 255f, 148f / 255f }; + + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(TeleportOverlay::define); + } + + private static void define(WorldRenderContext wrc) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays) { + ItemStack heldItem = CLIENT.player.getMainHandStack(); + String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); + NbtCompound nbt = heldItem.getNbt(); + + if (itemId != null) { + switch (itemId) { + case "ASPECT_OF_THE_LEECH_1" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 3); + } + } + case "ASPECT_OF_THE_LEECH_2" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 4); + } + } + case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && CLIENT.options.sneakKey.isPressed()) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); + } + else if (SkyblockerConfig.get().general.teleportOverlay.enableInstantTransmission) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 8 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 8); + } + } + case "ETHERWARP_CONDUIT" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); + } + } + case "SINSEEKER_SCYTHE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableSinrecallTransmission) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 4 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 4); + } + } + case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWitherImpact) { + render(wrc, 10); + } + } + } + } + } + } + + private static void render(WorldRenderContext wrc, double range) { + HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); + + if (result instanceof BlockHitResult blockHit) { + BlockPos pos = blockHit.getBlockPos(); + BlockState state = CLIENT.world.getBlockState(pos); + if (state.getBlock() != Blocks.AIR && CLIENT.world.getBlockState(pos.up()).getBlock() == Blocks.AIR && CLIENT.world.getBlockState(pos.up(2)).getBlock() == Blocks.AIR) { + RenderSystem.polygonOffset(-1f, -10f); + RenderSystem.enablePolygonOffset(); + + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); + + RenderSystem.polygonOffset(0f, 0f); + RenderSystem.disablePolygonOffset(); + } + } + } +} -- cgit From 4f5ce131b5048bf62d44950fb1018ebcc4be980b Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 29 Jul 2023 13:43:32 +0800 Subject: Refactor TeleportOverlay --- .../skyblocker/skyblock/TeleportOverlay.java | 144 +++++++++++---------- 1 file changed, 79 insertions(+), 65 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java index 6551ac9d..781a914e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock; import com.mojang.blaze3d.systems.RenderSystem; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.utils.RenderHelper; @@ -9,7 +8,6 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -18,74 +16,90 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; public class TeleportOverlay { - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final float[] COLOR_COMPONENTS = { 118f / 255f, 21f / 255f, 148f / 255f }; + private static final float[] COLOR_COMPONENTS = {118f / 255f, 21f / 255f, 148f / 255f}; + private static final MinecraftClient client = MinecraftClient.getInstance(); + + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(TeleportOverlay::render); + } - public static void init() { - WorldRenderEvents.AFTER_TRANSLUCENT.register(TeleportOverlay::define); - } + private static void render(WorldRenderContext wrc) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays && client.player != null) { + ItemStack heldItem = client.player.getMainHandStack(); + String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); + NbtCompound nbt = heldItem.getNbt(); - private static void define(WorldRenderContext wrc) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays) { - ItemStack heldItem = CLIENT.player.getMainHandStack(); - String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); - NbtCompound nbt = heldItem.getNbt(); + if (itemId != null) { + switch (itemId) { + case "ASPECT_OF_THE_LEECH_1" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 3); + } + } + case "ASPECT_OF_THE_LEECH_2" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 4); + } + } + case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) { + render(wrc, nbt, 57); + } else if (SkyblockerConfig.get().general.teleportOverlay.enableInstantTransmission) { + render(wrc, nbt, 8); + } + } + case "ETHERWARP_CONDUIT" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission) { + render(wrc, nbt, 57); + } + } + case "SINSEEKER_SCYTHE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableSinrecallTransmission) { + render(wrc, nbt, 4); + } + } + case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWitherImpact) { + render(wrc, 10); + } + } + } + } + } + } - if (itemId != null) { - switch (itemId) { - case "ASPECT_OF_THE_LEECH_1" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { - render(wrc, 3); - } - } - case "ASPECT_OF_THE_LEECH_2" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { - render(wrc, 4); - } - } - case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && CLIENT.options.sneakKey.isPressed()) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); - } - else if (SkyblockerConfig.get().general.teleportOverlay.enableInstantTransmission) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 8 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 8); - } - } - case "ETHERWARP_CONDUIT" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); - } - } - case "SINSEEKER_SCYTHE" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableSinrecallTransmission) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 4 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 4); - } - } - case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableWitherImpact) { - render(wrc, 10); - } - } - } - } - } - } + /** + * Renders the teleport overlay with a given base range and the tuned transmission stat. + */ + private static void render(WorldRenderContext wrc, NbtCompound nbt, int baseRange) { + render(wrc, nbt != null && nbt.getCompound("ExtraAttributes").contains("tuned_transmission") ? baseRange + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : baseRange); + } - private static void render(WorldRenderContext wrc, double range) { - HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); + /** + * Renders the teleport overlay with a given range. Uses {@link MinecraftClient#crosshairTarget} if it is a block and within range. Otherwise, raycasts from the player with the given range. + */ + private static void render(WorldRenderContext wrc, int range) { + if (client.crosshairTarget != null && client.crosshairTarget.getType() == HitResult.Type.BLOCK && client.crosshairTarget instanceof BlockHitResult blockHitResult && client.crosshairTarget.squaredDistanceTo(client.player) < range * range) { + render(wrc, blockHitResult); + } else { + HitResult result = client.player.raycast(range, wrc.tickDelta(), false); + if (result.getType() == HitResult.Type.BLOCK && result instanceof BlockHitResult blockHitResult) { + render(wrc, blockHitResult); + } + } + } - if (result instanceof BlockHitResult blockHit) { - BlockPos pos = blockHit.getBlockPos(); - BlockState state = CLIENT.world.getBlockState(pos); - if (state.getBlock() != Blocks.AIR && CLIENT.world.getBlockState(pos.up()).getBlock() == Blocks.AIR && CLIENT.world.getBlockState(pos.up(2)).getBlock() == Blocks.AIR) { - RenderSystem.polygonOffset(-1f, -10f); - RenderSystem.enablePolygonOffset(); + private static void render(WorldRenderContext wrc, BlockHitResult blockHitResult) { + BlockPos pos = blockHitResult.getBlockPos(); + BlockState state = client.world.getBlockState(pos); + if (!state.isAir() && client.world.getBlockState(pos.up()).isAir() && client.world.getBlockState(pos.up(2)).isAir()) { + RenderSystem.polygonOffset(-1f, -10f); + RenderSystem.enablePolygonOffset(); - RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); - RenderSystem.polygonOffset(0f, 0f); - RenderSystem.disablePolygonOffset(); - } - } - } + RenderSystem.polygonOffset(0f, 0f); + RenderSystem.disablePolygonOffset(); + } + } } -- cgit From 9a784067b9921ce4b61ef309eb197843ea0c19d6 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 29 Jul 2023 12:24:10 +0800 Subject: Refactor PlayerSkinProviderMixin --- .../skyblocker/mixin/PlayerSkinProviderMixin.java | 31 +++++++++------------- 1 file changed, 12 insertions(+), 19 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java index 5b75eb47..a382a58e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerSkinProviderMixin.java @@ -1,27 +1,20 @@ package me.xmrvizzy.skyblocker.mixin; -import java.util.concurrent.ExecutorService; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.texture.PlayerSkinProvider; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(PlayerSkinProvider.class) public class PlayerSkinProviderMixin { - - @Redirect(method = "loadSkin(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/texture/PlayerSkinProvider$SkinTextureAvailableCallback;Z)V", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/ExecutorService;execute(Ljava/lang/Runnable;)V", remap = false)) - private void skyblocker$removeInvalidBase64LogSpam(ExecutorService executor, Runnable runnable) { - executor.execute(() -> { - try { - runnable.run(); - } catch (Throwable t) { - if (!(t instanceof IllegalArgumentException) || !Utils.isOnHypixel()) { - t.printStackTrace(); - } - } - }); - } + @ModifyVariable(method = "loadSkin(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/texture/PlayerSkinProvider$SkinTextureAvailableCallback;Z)V", at = @At("STORE")) + private Runnable skyblocker$removeInvalidBase64LogSpam(Runnable runnable) { + return Utils.isOnHypixel() ? () -> { + try { + runnable.run(); + } catch (IllegalArgumentException ignored) { + } + } : runnable; + } } -- cgit From bca948cc7a9630ebe380590f0f036e1d5ef2ee99 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 25 Jul 2023 15:11:10 +0800 Subject: Refactor mixins --- .../skyblocker/gui/ContainerSolverManager.java | 2 +- .../skyblocker/mixin/AccessorWorldRenderer.java | 13 ------- .../skyblocker/mixin/ClientPlayerEntityMixin.java | 7 ++-- .../skyblocker/mixin/DrawContextMixin.java | 44 +++++++++++----------- .../skyblocker/mixin/FarmlandBlockMixin.java | 20 ++++++---- .../skyblocker/mixin/HandledScreenAccessor.java | 17 --------- .../skyblocker/mixin/HandledScreenMixin.java | 8 ++-- .../xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 6 +-- .../skyblocker/mixin/InventoryScreenMixin.java | 17 ++------- .../xmrvizzy/skyblocker/mixin/LeverBlockMixin.java | 3 +- .../skyblocker/mixin/PlayerListHudAccessor.java | 18 --------- .../skyblocker/mixin/PlayerListHudMixin.java | 26 +++++-------- .../skyblocker/mixin/RecipeBookWidgetAccessor.java | 14 ------- .../mixin/accessor/HandledScreenAccessor.java | 17 +++++++++ .../mixin/accessor/PlayerListHudAccessor.java | 17 +++++++++ .../mixin/accessor/RecipeBookWidgetAccessor.java | 14 +++++++ .../mixin/accessor/WorldRendererAccessor.java | 13 +++++++ .../skyblocker/skyblock/dungeon/OldLever.java | 18 +++------ .../skyblock/itemlist/ItemListWidget.java | 32 ++++++++-------- .../skyblock/quicknav/QuickNavButton.java | 6 +-- .../skyblock/rift/HealingMelonIndicator.java | 4 +- .../skyblock/tabhud/util/PlayerListMgr.java | 3 +- .../me/xmrvizzy/skyblocker/utils/FrustumUtils.java | 4 +- src/main/resources/skyblocker.mixins.json | 10 ++--- 24 files changed, 150 insertions(+), 183 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 0c27704d..7d187caa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.gui; import com.mojang.blaze3d.systems.RenderSystem; -import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.HandledScreenAccessor; import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java deleted file mode 100644 index e9067851..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import net.minecraft.client.render.Frustum; -import net.minecraft.client.render.WorldRenderer; - -@Mixin(WorldRenderer.class) -public interface AccessorWorldRenderer { - @Accessor - Frustum getFrustum(); -} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java index e48e725e..ea35ebbe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java @@ -4,7 +4,6 @@ import com.mojang.authlib.GameProfile; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.rift.HealingMelonIndicator; import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; @@ -25,8 +24,8 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity if (Utils.isOnSkyblock()) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir); } - @Inject(method = "updateHealth", at = @At("HEAD")) - public void skyblocker$updateHealth(float health, CallbackInfo info) { - HealingMelonIndicator.updateHealth(MinecraftClient.getInstance()); + @Inject(method = "updateHealth", at = @At("RETURN")) + public void skyblocker$updateHealth(CallbackInfo info) { + HealingMelonIndicator.updateHealth(); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index a8a490b8..e12f645a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -1,18 +1,6 @@ package me.xmrvizzy.skyblocker.mixin; -import java.awt.Color; -import java.util.regex.Pattern; - -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Final; -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 com.mojang.blaze3d.systems.RenderSystem; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.ItemUtils; import me.xmrvizzy.skyblocker.utils.Utils; @@ -23,18 +11,28 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.ColorHelper; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +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 java.awt.*; +import java.util.regex.Pattern; @Mixin(DrawContext.class) public abstract class DrawContextMixin { - @Shadow @Final private MatrixStack matrices; - - @Shadow - public void fill(RenderLayer layer, int x1, int x2, int y1, int y2, int color) { - } - + @Shadow + @Final + private MatrixStack matrices; + + @Shadow + public abstract void fill(RenderLayer layer, int x1, int x2, int y1, int y2, int color); + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { if (!stack.isEmpty()) { NbtCompound tag = stack.getNbt(); @@ -42,7 +40,7 @@ public abstract class DrawContextMixin { if (tag.getCompound("ExtraAttributes").contains("drill_fuel")) { float current = 3000.0F; float max = 3000.0F; - + for (String line : ItemUtils.getTooltipStrings(stack)) { if (line.contains("Fuel: ")) { String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim(); @@ -52,17 +50,17 @@ public abstract class DrawContextMixin { break; } } - + matrices.push(); matrices.translate(0f, 0f, 200f); RenderSystem.disableDepthTest(); - + float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); - + matrices.pop(); RenderSystem.enableDepthTest(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java index 761f8a68..d36773b2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java @@ -1,34 +1,38 @@ package me.xmrvizzy.skyblocker.mixin; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.FarmlandBlock; -import net.minecraft.block.ShapeContext; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; +import org.spongepowered.asm.mixin.Final; 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.CallbackInfoReturnable; @Mixin(FarmlandBlock.class) public abstract class FarmlandBlockMixin extends Block { + @Shadow + @Final + protected static VoxelShape SHAPE; + protected FarmlandBlockMixin(Settings settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox) - cir.setReturnValue(Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, 16.0)); + @ModifyReturnValue(method = "getOutlineShape", at = @At("RETURN")) + private VoxelShape skyblocker$replaceOutlineShape(VoxelShape original) { + return SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox && Utils.isOnSkyblock() ? VoxelShapes.fullCube() : original; } @SuppressWarnings("deprecation") @Override public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) { - return Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 15.0, 16.0); + return SHAPE; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java deleted file mode 100644 index ea497b75..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(HandledScreen.class) -public interface HandledScreenAccessor { - @Accessor - int getX(); - @Accessor - int getY(); - @Accessor - int getBackgroundWidth(); - @Accessor - int getBackgroundHeight(); -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 13272323..8a57f752 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -34,14 +34,14 @@ import java.util.Map; @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { - protected HandledScreenMixin(Text title) { - super(title); - } - @Shadow @Nullable protected Slot focusedSlot; + protected HandledScreenMixin(Text title) { + super(title); + } + @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { if (this.client != null && this.focusedSlot != null && keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode) && WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 3e2db3e0..e1a14e4c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -27,7 +27,6 @@ public abstract class InGameHudMixin { @Unique private static final Identifier SLOT_LOCK = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/slot_lock.png"); @Unique - private final StatusBarTracker statusBarTracker = SkyblockerMod.getInstance().statusBarTracker; @Unique private final FancyStatusBars statusBars = new FancyStatusBars(); @@ -38,8 +37,7 @@ public abstract class InGameHudMixin { private int scaledWidth; @Shadow - public void setOverlayMessage(Text message, boolean tinted) { - } + public abstract void setOverlayMessage(Text message, boolean tinted); @Inject(method = "setOverlayMessage(Lnet/minecraft/text/Text;Z)V", at = @At("HEAD"), cancellable = true) private void skyblocker$onSetOverlayMessage(Text message, boolean tinted, CallbackInfo ci) { @@ -76,8 +74,6 @@ public abstract class InGameHudMixin { if (Utils.isInDungeons() && SkyblockerConfig.get().locations.dungeons.enableMap) DungeonMap.render(context.getMatrices()); - - //RenderSystem.setShaderTexture(0, ICONS); } @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java index 64a1a4fe..729124fd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.mixin; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemListWidget; import me.xmrvizzy.skyblocker.utils.Utils; @@ -7,21 +8,11 @@ import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(InventoryScreen.class) public abstract class InventoryScreenMixin { - @Redirect( - method = "", - at = @At( - value = "NEW", - target = "net/minecraft/client/gui/screen/recipebook/RecipeBookWidget" - ) - ) - RecipeBookWidget skyblocker$constructor() { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.itemList.enableItemList) - return new ItemListWidget(); - else - return new RecipeBookWidget(); + @ModifyExpressionValue(method = "", at = @At(value = "NEW", target = "net/minecraft/client/gui/screen/recipebook/RecipeBookWidget")) + private RecipeBookWidget skyblocker$replaceRecipeBook(RecipeBookWidget original) { + return SkyblockerConfig.get().general.itemList.enableItemList && Utils.isOnSkyblock() ? new ItemListWidget() : original; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java index 505de202..96a53878 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java @@ -24,8 +24,7 @@ public abstract class LeverBlockMixin extends WallMountedBlock { public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { if (Utils.isOnSkyblock()) { VoxelShape shape = OldLever.getShape(state.get(FACE), state.get(FACING)); - if (shape != null) - cir.setReturnValue(shape); + if (shape != null) cir.setReturnValue(shape); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java deleted file mode 100644 index db329775..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import java.util.Comparator; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import net.minecraft.client.gui.hud.PlayerListHud; -import net.minecraft.client.network.PlayerListEntry; - -@Mixin(PlayerListHud.class) -public interface PlayerListHudAccessor { - - @Accessor("ENTRY_ORDERING") - public static Comparator getOrdering() { - throw new AssertionError(); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index ef65190f..0d900167 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -1,11 +1,5 @@ package me.xmrvizzy.skyblocker.mixin; -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 me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; @@ -19,38 +13,36 @@ import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.text.Text; +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; @Environment(EnvType.CLIENT) @Mixin(PlayerListHud.class) public class PlayerListHudMixin { - @Shadow private Text footer; @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) - public void skyblocker$renderTabHud(DrawContext context, int scaledW, Scoreboard sb, ScoreboardObjective sbo, - CallbackInfo info) { - - if (!Utils.isOnSkyblock() - || !SkyblockerConfig.get().general.tabHud.tabHudEnabled - || TabHud.defaultTgl.isPressed()) { + public void skyblocker$renderTabHud(DrawContext context, int w, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { + if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { return; } - MinecraftClient client = MinecraftClient.getInstance(); - ClientPlayNetworkHandler nwH = client.getNetworkHandler(); + ClientPlayNetworkHandler nwH = MinecraftClient.getInstance().getNetworkHandler(); if (nwH == null) { return; } - int w = scaledW; int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); try { Screen screen = Screen.getCorrect(w, h, footer); screen.render(context); info.cancel(); } catch (Exception e) { - TabHud.LOGGER.error("Drawing default hud. Reason: Screen exception {}", e); + TabHud.LOGGER.error("[Skyblocker] Encountered unknown exception while drawing default hud", e); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java deleted file mode 100644 index 808b2950..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(RecipeBookWidget.class) -public interface RecipeBookWidgetAccessor { - @Accessor - String getSearchText(); - @Accessor - TextFieldWidget getSearchField(); -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java new file mode 100644 index 00000000..ad35dae6 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(HandledScreen.class) +public interface HandledScreenAccessor { + @Accessor + int getX(); + @Accessor + int getY(); + @Accessor + int getBackgroundWidth(); + @Accessor + int getBackgroundHeight(); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java new file mode 100644 index 00000000..7e335d73 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.gui.hud.PlayerListHud; +import net.minecraft.client.network.PlayerListEntry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Comparator; + +@Mixin(PlayerListHud.class) +public interface PlayerListHudAccessor { + + @Accessor("ENTRY_ORDERING") + static Comparator getOrdering() { + throw new AssertionError(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java new file mode 100644 index 00000000..0f20d4e4 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java @@ -0,0 +1,14 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RecipeBookWidget.class) +public interface RecipeBookWidgetAccessor { + @Accessor + String getSearchText(); + @Accessor + TextFieldWidget getSearchField(); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java new file mode 100644 index 00000000..831a3385 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java @@ -0,0 +1,13 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.client.render.Frustum; +import net.minecraft.client.render.WorldRenderer; + +@Mixin(WorldRenderer.class) +public interface WorldRendererAccessor { + @Accessor + Frustum getFrustum(); +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java index 37320c92..13789fe1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java @@ -7,11 +7,11 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; public class OldLever { - protected static final VoxelShape FLOOR_SHAPE; - protected static final VoxelShape NORTH_SHAPE; - protected static final VoxelShape SOUTH_SHAPE; - protected static final VoxelShape EAST_SHAPE; - protected static final VoxelShape WEST_SHAPE; + protected static final VoxelShape FLOOR_SHAPE = Block.createCuboidShape(4.0D, 0.0D, 4.0D, 12.0D, 10.0D, 12.0D); + protected static final VoxelShape NORTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 10.0D, 11.0D, 13.0D, 16.0D); + protected static final VoxelShape SOUTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 0.0D, 11.0D, 13.0D, 6.0D); + protected static final VoxelShape EAST_SHAPE = Block.createCuboidShape(0.0D, 3.0D, 5.0D, 6.0D, 13.0D, 11.0D); + protected static final VoxelShape WEST_SHAPE = Block.createCuboidShape(10.0D, 3.0D, 5.0D, 16.0D, 13.0D, 11.0D); public static VoxelShape getShape(WallMountLocation wallMountLocation, Direction direction) { if (!SkyblockerConfig.get().general.hitbox.oldLeverHitbox) @@ -37,12 +37,4 @@ public class OldLever { } return null; } - - static { - FLOOR_SHAPE = Block.createCuboidShape(4, 0, 4, 12, 10, 12); - NORTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 10.0D, 11.0D, 13.0D, 16.0D); - SOUTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 0.0D, 11.0D, 13.0D, 6.0D); - WEST_SHAPE = Block.createCuboidShape(10.0D, 3.0D, 5.0D, 16.0D, 13.0D, 11.0D); - EAST_SHAPE = Block.createCuboidShape(0.0D, 3.0D, 5.0D, 6.0D, 13.0D, 11.0D); - } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index 3a1f91d3..04dc6820 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.mojang.blaze3d.systems.RenderSystem; -import me.xmrvizzy.skyblocker.mixin.RecipeBookWidgetAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.RecipeBookWidgetAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -15,7 +15,7 @@ import net.minecraft.screen.AbstractRecipeScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -@Environment(value= EnvType.CLIENT) +@Environment(value = EnvType.CLIENT) public class ItemListWidget extends RecipeBookWidget implements Drawable, Selectable { private int parentWidth; private int parentHeight; @@ -23,10 +23,12 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select private TextFieldWidget searchField; private SearchResultsWidget results; - public ItemListWidget() { super(); } + public ItemListWidget() { + super(); + } public void updateSearchResult() { - this.results.updateSearchResult(((RecipeBookWidgetAccessor)this).getSearchText()); + this.results.updateSearchResult(((RecipeBookWidgetAccessor) this).getSearchText()); } @Override @@ -35,7 +37,7 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select this.parentWidth = parentWidth; this.parentHeight = parentHeight; this.leftOffset = narrow ? 0 : 86; - this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); + this.searchField = ((RecipeBookWidgetAccessor) this).getSearchField(); int x = (this.parentWidth - 147) / 2 - this.leftOffset; int y = (this.parentHeight - 166) / 2; if (ItemRegistry.filesImported) { @@ -48,14 +50,14 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (this.isOpen()) { MatrixStack matrices = context.getMatrices(); - matrices.push(); + matrices.push(); matrices.translate(0.0D, 0.0D, 100.0D); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); + this.searchField = ((RecipeBookWidgetAccessor) this).getSearchField(); int i = (this.parentWidth - 147) / 2 - this.leftOffset; int j = (this.parentHeight - 166) / 2; context.drawTexture(TEXTURE, i, j, 1, 1, 147, 166); - this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); + this.searchField = ((RecipeBookWidgetAccessor) this).getSearchField(); if (!ItemRegistry.filesImported && !this.searchField.isFocused() && this.searchField.getText().isEmpty()) { Text hintText = (Text.literal("Loading...")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); @@ -66,7 +68,7 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select } else { this.searchField.render(context, mouseX, mouseY, delta); } - if (ItemRegistry.filesImported){ + if (ItemRegistry.filesImported) { if (results == null) { int x = (this.parentWidth - 147) / 2 - this.leftOffset; int y = (this.parentHeight - 166) / 2; @@ -88,15 +90,15 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (this.isOpen() && !this.client.player.isSpectator() && ItemRegistry.filesImported && results != null) { - if (this.searchField != null && this.searchField.mouseClicked(mouseX, mouseY, button)) { + if (this.isOpen() && this.client.player != null && !this.client.player.isSpectator() && ItemRegistry.filesImported && this.searchField != null && results != null) { + if (this.searchField.mouseClicked(mouseX, mouseY, button)) { this.results.closeRecipeView(); this.searchField.setFocused(true); return true; - } else - this.searchField.setFocused(false); + } else { + this.searchField.setFocused(false); return this.results.mouseClicked(mouseX, mouseY, button); - } else - return false; + } + } else return false; } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index c02463a3..d9e97976 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -3,7 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.quicknav; import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.HandledScreenAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -19,7 +19,6 @@ import net.minecraft.util.Identifier; @Environment(value=EnvType.CLIENT) public class QuickNavButton extends ClickableWidget { - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static final Identifier BUTTON_TEXTURE = new Identifier("textures/gui/container/creative_inventory/tabs.png"); private final int index; @@ -42,12 +41,9 @@ public class QuickNavButton extends ClickableWidget { if (screen instanceof HandledScreen handledScreen) { int x = ((HandledScreenAccessor)handledScreen).getX(); int y = ((HandledScreenAccessor)handledScreen).getY(); - int w = ((HandledScreenAccessor)handledScreen).getBackgroundWidth(); int h = ((HandledScreenAccessor)handledScreen).getBackgroundHeight(); if (h > 166) --h; // why is this even a thing - // this.x = x + this.index % 6 * 28 + 4; this.setX(x + this.index % 6 * 26 + 4); - // this.y = this.index < 6 ? y - 28 : y + h - 4; this.setY(this.index < 6 ? y - 26 : y + h - 4); this.u = 26; this.v = (index < 6 ? 0 : 64) + (toggled ? 32 : 0); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index fed34796..aa730c31 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -12,12 +12,12 @@ import net.minecraft.util.Formatting; public class HealingMelonIndicator { private static final Title title = new Title("skyblocker.rift.healNow", Formatting.DARK_RED); - public static void updateHealth(MinecraftClient client) { + public static void updateHealth() { if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) { TitleContainer.removeTitle(title); return; } - ClientPlayerEntity player = client.player; + ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) { RenderHelper.displayInTitleContainerAndPlaySound(title); } else { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index ee4319dc..d0ce6b72 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -4,11 +4,10 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.PlayerListHudAccessor; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java index 565bd7a8..fd8ffdbd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.utils; -import me.xmrvizzy.skyblocker.mixin.AccessorWorldRenderer; +import me.xmrvizzy.skyblocker.mixin.accessor.WorldRendererAccessor; import me.xmrvizzy.skyblocker.mixin.accessor.FrustumInvoker; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Frustum; @@ -9,7 +9,7 @@ import net.minecraft.util.math.Box; public class FrustumUtils { public static Frustum getFrustum() { - return ((AccessorWorldRenderer) MinecraftClient.getInstance().worldRenderer).getFrustum(); + return ((WorldRendererAccessor) MinecraftClient.getInstance().worldRenderer).getFrustum(); } public static boolean isBoxVisible(Box box) { diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 656f9d32..360a966a 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -3,25 +3,25 @@ "package": "me.xmrvizzy.skyblocker.mixin", "compatibilityLevel": "JAVA_17", "client": [ - "AccessorWorldRenderer", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", "DrawContextMixin", "FarmlandBlockMixin", "GenericContainerScreenHandlerMixin", - "HandledScreenAccessor", "HandledScreenMixin", "InGameHudMixin", "InventoryScreenMixin", "LeverBlockMixin", "MinecraftClientMixin", - "PlayerListHudAccessor", "PlayerListHudMixin", "PlayerSkinProviderMixin", - "RecipeBookWidgetAccessor", "ScoreboardMixin", "accessor.BeaconBlockEntityRendererInvoker", - "accessor.FrustumInvoker" + "accessor.FrustumInvoker", + "accessor.HandledScreenAccessor", + "accessor.PlayerListHudAccessor", + "accessor.RecipeBookWidgetAccessor", + "accessor.WorldRendererAccessor" ], "injectors": { "defaultRequire": 1 -- cgit From 57288fb7367aded15090fe01597c3d0aa88654e7 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 26 Jul 2023 01:57:20 -0400 Subject: Swap order of checks to fix crash The config isn't initialized early enough --- src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java index d36773b2..b07390b7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java @@ -27,7 +27,7 @@ public abstract class FarmlandBlockMixin extends Block { @ModifyReturnValue(method = "getOutlineShape", at = @At("RETURN")) private VoxelShape skyblocker$replaceOutlineShape(VoxelShape original) { - return SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox && Utils.isOnSkyblock() ? VoxelShapes.fullCube() : original; + return Utils.isOnSkyblock() && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox ? VoxelShapes.fullCube() : original; } @SuppressWarnings("deprecation") -- cgit From 10211b749a0e487057bff456a32c87a1aef7abb7 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 26 Jul 2023 15:20:34 -0400 Subject: Convert stuff to BetterInject --- .../skyblocker/mixin/ClientPlayNetworkHandlerMixin.java | 6 +++--- .../me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java | 8 ++++---- .../java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 10 ++++------ src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 4 ++-- .../java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java | 9 ++++----- .../me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java | 5 ++--- .../java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java | 8 ++++---- 7 files changed, 23 insertions(+), 27 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java index 1d8b6565..51248581 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java @@ -1,6 +1,8 @@ package me.xmrvizzy.skyblocker.mixin; import com.llamalad7.mixinextras.injector.WrapWithCondition; + +import dev.cbyrne.betterinject.annotations.Inject; import me.xmrvizzy.skyblocker.skyblock.FishingHelper; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.network.ClientPlayNetworkHandler; @@ -8,13 +10,11 @@ import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; import org.slf4j.Logger; 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; @Mixin(ClientPlayNetworkHandler.class) public abstract class ClientPlayNetworkHandlerMixin { @Inject(method = "onPlaySound", at = @At("RETURN")) - private void skyblocker$onPlaySound(PlaySoundS2CPacket packet, CallbackInfo ci) { + private void skyblocker$onPlaySound(PlaySoundS2CPacket packet) { FishingHelper.onSound(packet); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java index ea35ebbe..ee1fc5b8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java @@ -1,6 +1,8 @@ package me.xmrvizzy.skyblocker.mixin; import com.mojang.authlib.GameProfile; + +import dev.cbyrne.betterinject.annotations.Inject; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.rift.HealingMelonIndicator; import me.xmrvizzy.skyblocker.utils.Utils; @@ -9,8 +11,6 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; 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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ClientPlayerEntity.class) @@ -20,12 +20,12 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity } @Inject(method = "dropSelectedItem", at = @At("HEAD"), cancellable = true) - public void skyblocker$dropSelectedItem(boolean dropEntireStack, CallbackInfoReturnable cir) { + public void skyblocker$dropSelectedItem(CallbackInfoReturnable cir) { if (Utils.isOnSkyblock()) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir); } @Inject(method = "updateHealth", at = @At("RETURN")) - public void skyblocker$updateHealth(CallbackInfo info) { + public void skyblocker$updateHealth() { HealingMelonIndicator.updateHealth(); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index e12f645a..cd0ccefd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -1,24 +1,22 @@ package me.xmrvizzy.skyblocker.mixin; import com.mojang.blaze3d.systems.RenderSystem; + +import dev.cbyrne.betterinject.annotations.Arg; +import dev.cbyrne.betterinject.annotations.Inject; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.ItemUtils; import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.ColorHelper; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Final; 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 java.awt.*; import java.util.regex.Pattern; @@ -32,7 +30,7 @@ public abstract class DrawContextMixin { public abstract void fill(RenderLayer layer, int x1, int x2, int y1, int y2, int color); @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) - public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { + public void skyblocker$renderItemBar(@Arg ItemStack stack, @Arg(ordinal = 0) int x, @Arg(ordinal = 1) int y) { if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { if (!stack.isEmpty()) { NbtCompound tag = stack.getNbt(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index e1a14e4c..4cda73aa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -60,7 +60,7 @@ public abstract class InGameHudMixin { } @Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderExperienceBar(DrawContext context, int x, CallbackInfo ci) { + private void skyblocker$renderExperienceBar(CallbackInfo ci) { if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.isInTheRift()) ci.cancel(); } @@ -77,7 +77,7 @@ public abstract class InGameHudMixin { } @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderMountHealth(DrawContext context, CallbackInfo ci) { + private void skyblocker$renderMountHealth(CallbackInfo ci) { if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.isInTheRift()) ci.cancel(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java index 96a53878..d65b93a2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java @@ -4,16 +4,15 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.OldLever; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.block.BlockState; import net.minecraft.block.LeverBlock; -import net.minecraft.block.ShapeContext; import net.minecraft.block.WallMountedBlock; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; 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.CallbackInfoReturnable; +import dev.cbyrne.betterinject.annotations.Arg; +import dev.cbyrne.betterinject.annotations.Inject; + @Mixin(LeverBlock.class) public abstract class LeverBlockMixin extends WallMountedBlock { protected LeverBlockMixin(Settings settings) { @@ -21,7 +20,7 @@ public abstract class LeverBlockMixin extends WallMountedBlock { } @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + public void skyblocker$onGetOutlineShape(@Arg BlockState state, CallbackInfoReturnable cir) { if (Utils.isOnSkyblock()) { VoxelShape shape = OldLever.getShape(state.get(FACE), state.get(FACING)); if (shape != null) cir.setReturnValue(shape); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java index 0c1977fe..85f179e4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -8,8 +8,7 @@ import org.jetbrains.annotations.Nullable; 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 dev.cbyrne.betterinject.annotations.Inject; @Mixin(MinecraftClient.class) public abstract class MinecraftClientMixin { @@ -18,7 +17,7 @@ public abstract class MinecraftClientMixin { public ClientPlayerEntity player; @Inject(method = "handleInputEvents", at = @At("HEAD")) - public void skyblocker$handleInputEvents(CallbackInfo ci) { + public void skyblocker$handleInputEvents() { if (Utils.isOnSkyblock()) { HotbarSlotLock.handleInputEvents(player); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index 0d900167..819ddb4b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -10,15 +10,15 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.text.Text; 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 dev.cbyrne.betterinject.annotations.Arg; +import dev.cbyrne.betterinject.annotations.Inject; + @Environment(EnvType.CLIENT) @Mixin(PlayerListHud.class) public class PlayerListHudMixin { @@ -26,7 +26,7 @@ public class PlayerListHudMixin { private Text footer; @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) - public void skyblocker$renderTabHud(DrawContext context, int w, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { + public void skyblocker$renderTabHud(@Arg DrawContext context, @Arg int w, CallbackInfo info) { if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { return; } -- cgit From 7f74f75944500941e69a72e47b71cc597d6ebc28 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 26 Jul 2023 15:23:29 -0400 Subject: Disable remapping of non-obfuscated injection points --- .../me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java | 6 +++--- src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java index 51248581..2d109524 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java @@ -18,17 +18,17 @@ public abstract class ClientPlayNetworkHandlerMixin { FishingHelper.onSound(packet); } - @WrapWithCondition(method = "onEntityPassengersSet", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;)V")) + @WrapWithCondition(method = "onEntityPassengersSet", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;)V", remap = false)) private boolean skyblocker$cancelEntityPassengersWarning(Logger instance, String msg) { return !Utils.isOnHypixel(); } - @WrapWithCondition(method = "onPlayerList", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + @WrapWithCondition(method = "onPlayerList", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V", remap = false)) private boolean skyblocker$cancelPlayerListWarning(Logger instance, String format, Object arg) { return !Utils.isOnHypixel(); } - @WrapWithCondition(method = "onTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V")) + @WrapWithCondition(method = "onTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V", remap = false)) private boolean skyblocker$cancelTeamWarning(Logger instance, String format, Object... arg) { return !Utils.isOnHypixel(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java index 6f88821c..90edde6f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScoreboardMixin.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(Scoreboard.class) public abstract class ScoreboardMixin { - @WrapWithCondition(method = "addTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + @WrapWithCondition(method = "addTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V", remap = false)) private boolean skyblocker$cancelTeamWarning(Logger instance, String format, Object arg) { return !Utils.isOnHypixel(); } -- cgit From ebe9becc201351503b332ba50b2a1972b4de89fe Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 2 Aug 2023 12:43:47 +0800 Subject: Fix TeleportOverlay raycasting --- .../java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java index 781a914e..e7c76160 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java @@ -24,7 +24,7 @@ public class TeleportOverlay { } private static void render(WorldRenderContext wrc) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays && client.player != null) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays && client.player != null && client.world != null) { ItemStack heldItem = client.player.getMainHandStack(); String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); NbtCompound nbt = heldItem.getNbt(); @@ -77,11 +77,13 @@ public class TeleportOverlay { /** * Renders the teleport overlay with a given range. Uses {@link MinecraftClient#crosshairTarget} if it is a block and within range. Otherwise, raycasts from the player with the given range. + * @implNote {@link MinecraftClient#player} and {@link MinecraftClient#world} must not be null when calling this method. */ private static void render(WorldRenderContext wrc, int range) { if (client.crosshairTarget != null && client.crosshairTarget.getType() == HitResult.Type.BLOCK && client.crosshairTarget instanceof BlockHitResult blockHitResult && client.crosshairTarget.squaredDistanceTo(client.player) < range * range) { render(wrc, blockHitResult); - } else { + } else if (client.interactionManager != null && range > client.interactionManager.getReachDistance()) { + @SuppressWarnings("DataFlowIssue") HitResult result = client.player.raycast(range, wrc.tickDelta(), false); if (result.getType() == HitResult.Type.BLOCK && result instanceof BlockHitResult blockHitResult) { render(wrc, blockHitResult); @@ -89,8 +91,13 @@ public class TeleportOverlay { } } + /** + * Renders the teleport overlay at the given {@link BlockHitResult}. + * @implNote {@link MinecraftClient#world} must not be null when calling this method. + */ private static void render(WorldRenderContext wrc, BlockHitResult blockHitResult) { BlockPos pos = blockHitResult.getBlockPos(); + @SuppressWarnings("DataFlowIssue") BlockState state = client.world.getBlockState(pos); if (!state.isAir() && client.world.getBlockState(pos.up()).isAir() && client.world.getBlockState(pos.up(2)).isAir()) { RenderSystem.polygonOffset(-1f, -10f); -- cgit From 8353ab29d85a5827fda151ab2b042419f6420bcb Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 6 Aug 2023 05:07:57 -0400 Subject: Fix Croesus Helper (#226) --- .../java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index 2d868782..44c8803f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -25,7 +25,7 @@ public class CroesusHelper extends ContainerSolver { List highlights = new ArrayList<>(); for (Map.Entry entry : slots.entrySet()) { ItemStack stack = entry.getValue(); - if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("opened")) { + if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("No more Chests to open!")) { highlights.add(ColorHighlight.gray(entry.getKey())); } } -- cgit