diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/events/ClientPlayerBlockBreakEvent.java | 14 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/events/SkyblockEvents.java (renamed from src/main/java/me/xmrvizzy/skyblocker/utils/SkyblockEvents.java) | 2 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerInteractionManagerMixin.java | 9 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 6 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 6 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java | 2 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemCooldowns.java | 40 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 1 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java | 12 |
9 files changed, 44 insertions, 48 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/events/ClientPlayerBlockBreakEvent.java b/src/main/java/me/xmrvizzy/skyblocker/events/ClientPlayerBlockBreakEvent.java index 9d9463f7..76298612 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/events/ClientPlayerBlockBreakEvent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/events/ClientPlayerBlockBreakEvent.java @@ -2,20 +2,22 @@ package me.xmrvizzy.skyblocker.events; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; // Fabric API currently doesn't have an event for this public class ClientPlayerBlockBreakEvent { public static final Event<AfterBlockBreak> AFTER = EventFactory.createArrayBacked(AfterBlockBreak.class, - (listeners) -> (pos, player) -> { - for (AfterBlockBreak listener : listeners) { - listener.afterBlockBreak(pos, player); - } - }); + (listeners) -> (world, player, pos, state) -> { + for (AfterBlockBreak listener : listeners) { + listener.afterBlockBreak(world, player, pos, state); + } + }); @FunctionalInterface public interface AfterBlockBreak { - void afterBlockBreak(BlockPos pos, PlayerEntity player); + void afterBlockBreak(World world, PlayerEntity player, BlockPos pos, BlockState state); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/SkyblockEvents.java b/src/main/java/me/xmrvizzy/skyblocker/events/SkyblockEvents.java index 2dd83ffa..477d68b0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/SkyblockEvents.java +++ b/src/main/java/me/xmrvizzy/skyblocker/events/SkyblockEvents.java @@ -1,4 +1,4 @@ -package me.xmrvizzy.skyblocker.utils; +package me.xmrvizzy.skyblocker.events; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerInteractionManagerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerInteractionManagerMixin.java index 4b343317..3963f9d3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerInteractionManagerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerInteractionManagerMixin.java @@ -1,15 +1,18 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.events.ClientPlayerBlockBreakEvent; +import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerInteractionManager; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; 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; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(ClientPlayerInteractionManager.class) public class ClientPlayerInteractionManagerMixin { @@ -17,8 +20,8 @@ public class ClientPlayerInteractionManagerMixin { @Final private MinecraftClient client; - @Inject(method = "breakBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;onBroken(Lnet/minecraft/world/WorldAccess;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;)V")) - private void skyblocker$blockBreak(BlockPos pos, CallbackInfoReturnable<Boolean> cir) { - ClientPlayerBlockBreakEvent.AFTER.invoker().afterBlockBreak(pos, this.client.player); + @Inject(method = "breakBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;onBroken(Lnet/minecraft/world/WorldAccess;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;)V"), locals = LocalCapture.CAPTURE_FAILHARD) + private void skyblocker$onBlockBroken(BlockPos pos, CallbackInfoReturnable<Boolean> cir, World world, BlockState blockState) { + ClientPlayerBlockBreakEvent.AFTER.invoker().afterBlockBreak(world, this.client.player, pos, blockState); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index 7a055488..81c6bdb4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -134,10 +134,6 @@ public abstract class DrawContextMixin { @ModifyExpressionValue(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ItemCooldownManager;getCooldownProgress(Lnet/minecraft/item/Item;F)F")) private float skyblocker$modifyItemCooldown(float cooldownProgress, @Local ItemStack stack) { - if (Utils.isOnSkyblock() && ItemCooldowns.isItemOnCooldown(stack)) { - return ItemCooldowns.getItemCooldownEntry(stack).getRemainingCooldownPercent(); - } - - return cooldownProgress; + return Utils.isOnSkyblock() && ItemCooldowns.isOnCooldown(stack) ? ItemCooldowns.getItemCooldownEntry(stack).getRemainingCooldownPercent() : cooldownProgress; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 566e6054..7df38bde 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -78,9 +78,9 @@ public abstract class InGameHudMixin { @ModifyExpressionValue(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getAttackCooldownProgress(F)F")) private float skyblocker$modifyAttackIndicatorCooldown(float cooldownProgress) { - if (Utils.isOnSkyblock()) { - ItemStack stack = this.client.player.getMainHandStack(); - if (ItemCooldowns.isItemOnCooldown(stack)) { + if (Utils.isOnSkyblock() && client.player != null) { + ItemStack stack = client.player.getMainHandStack(); + if (ItemCooldowns.isOnCooldown(stack)) { return ItemCooldowns.getItemCooldownEntry(stack).getRemainingCooldownPercent(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java index dba066a5..6eb0623c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java @@ -8,7 +8,7 @@ import dev.isxander.yacl3.config.v2.api.SerialEntry; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager; -import me.xmrvizzy.skyblocker.utils.SkyblockEvents; +import me.xmrvizzy.skyblocker.events.SkyblockEvents; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemCooldowns.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemCooldowns.java index 232797d6..89e525d4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemCooldowns.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemCooldowns.java @@ -6,6 +6,7 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager; import me.xmrvizzy.skyblocker.events.ClientPlayerBlockBreakEvent; import me.xmrvizzy.skyblocker.utils.ItemUtils; import net.fabricmc.fabric.api.event.player.UseItemCallback; +import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; @@ -22,28 +23,26 @@ public class ItemCooldowns { private static final String GRAPPLING_HOOK_ID = "GRAPPLING_HOOK"; private static final ImmutableList<String> BAT_ARMOR_IDS = ImmutableList.of("BAT_PERSON_HELMET", "BAT_PERSON_CHESTPLATE", "BAT_PERSON_LEGGINGS", "BAT_PERSON_BOOTS"); + private static final SkyblockerConfig.ItemCooldown config = SkyblockerConfigManager.get().general.itemCooldown; private static final Map<String, CooldownEntry> itemCooldowns = new HashMap<>(); - private static SkyblockerConfig.ItemCooldown config; public static void init() { - config = SkyblockerConfigManager.get().general.itemCooldown; ClientPlayerBlockBreakEvent.AFTER.register(ItemCooldowns::afterBlockBreak); UseItemCallback.EVENT.register(ItemCooldowns::onItemInteract); } - public static void afterBlockBreak(BlockPos pos, PlayerEntity player) { + public static void afterBlockBreak(World world, PlayerEntity player, BlockPos pos, BlockState state) { if (!config.enableItemCooldowns) return; String usedItemId = ItemUtils.getItemId(player.getMainHandStack()); if (usedItemId == null) return; if (usedItemId.equals(JUNGLE_AXE_ID)) { - if (!isItemOnCooldown(JUNGLE_AXE_ID)) { + if (!isOnCooldown(JUNGLE_AXE_ID)) { itemCooldowns.put(JUNGLE_AXE_ID, new CooldownEntry(2000)); } - } - else if (usedItemId.equals(TREECAPITATOR_ID)) { - if (!isItemOnCooldown(TREECAPITATOR_ID)) { + } else if (usedItemId.equals(TREECAPITATOR_ID)) { + if (!isOnCooldown(TREECAPITATOR_ID)) { itemCooldowns.put(TREECAPITATOR_ID, new CooldownEntry(2000)); } } @@ -54,7 +53,7 @@ public class ItemCooldowns { String usedItemId = ItemUtils.getItemId(player.getMainHandStack()); if (usedItemId != null && usedItemId.equals(GRAPPLING_HOOK_ID) && player.fishHook != null) { - if (!isItemOnCooldown(GRAPPLING_HOOK_ID) && !isPlayerWearingBatArmor(player)) { + if (!isOnCooldown(GRAPPLING_HOOK_ID) && !isWearingBatArmor(player)) { itemCooldowns.put(GRAPPLING_HOOK_ID, new CooldownEntry(2000)); } } @@ -62,18 +61,17 @@ public class ItemCooldowns { return TypedActionResult.pass(ItemStack.EMPTY); } - public static boolean isItemOnCooldown(ItemStack itemStack) { - return isItemOnCooldown(ItemUtils.getItemId(itemStack)); + public static boolean isOnCooldown(ItemStack itemStack) { + return isOnCooldown(ItemUtils.getItemId(itemStack)); } - private static boolean isItemOnCooldown(String itemId) { + private static boolean isOnCooldown(String itemId) { if (itemCooldowns.containsKey(itemId)) { CooldownEntry cooldownEntry = itemCooldowns.get(itemId); if (cooldownEntry.isOnCooldown()) { return true; - } - else { - itemCooldowns.remove(cooldownEntry); + } else { + itemCooldowns.remove(itemId); return false; } } @@ -85,7 +83,7 @@ public class ItemCooldowns { return itemCooldowns.get(ItemUtils.getItemId(itemStack)); } - private static boolean isPlayerWearingBatArmor(PlayerEntity player) { + private static boolean isWearingBatArmor(PlayerEntity player) { for (ItemStack stack : player.getArmorItems()) { String itemId = ItemUtils.getItemId(stack); if (!BAT_ARMOR_IDS.contains(itemId)) { @@ -95,13 +93,9 @@ public class ItemCooldowns { return true; } - public static class CooldownEntry { - private final int cooldown; - private final long startTime; - + public record CooldownEntry(int cooldown, long startTime) { public CooldownEntry(int cooldown) { - this.cooldown = cooldown; - this.startTime = System.currentTimeMillis(); + this(cooldown, System.currentTimeMillis()); } public boolean isOnCooldown() { @@ -110,11 +104,11 @@ public class ItemCooldowns { public long getRemainingCooldown() { long time = (this.startTime + this.cooldown) - System.currentTimeMillis(); - return time <= 0 ? 0 : time; + return Math.max(time, 0); } public float getRemainingCooldownPercent() { - return this.isOnCooldown() ? ((float) this.getRemainingCooldown()) / ((float) cooldown) : 0.0f; + return this.isOnCooldown() ? (float) this.getRemainingCooldown() / cooldown : 0.0f; } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index b0fb6edf..20edfca2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -2,6 +2,7 @@ package me.xmrvizzy.skyblocker.utils; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.events.SkyblockEvents; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.utils.scheduler.MessageScheduler; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java index 39d91bba..6196fec0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java @@ -2,7 +2,7 @@ package me.xmrvizzy.skyblocker.utils.discord; import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager; -import me.xmrvizzy.skyblocker.utils.SkyblockEvents; +import me.xmrvizzy.skyblocker.events.SkyblockEvents; import me.xmrvizzy.skyblocker.utils.Utils; import meteordevelopment.discordipc.DiscordIPC; import meteordevelopment.discordipc.RichPresence; @@ -34,7 +34,7 @@ public class DiscordRPCManager { } /** - * Checks the {@link SkyblockerConfigManager.RichPresence#customMessage custom message}, updates {@link #cycleCount} if enabled, and updates rich presence. + * Checks the {@link me.xmrvizzy.skyblocker.config.SkyblockerConfig.RichPresence#customMessage custom message}, updates {@link #cycleCount} if enabled, and updates rich presence. */ public static void updateDataAndPresence() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message @@ -58,16 +58,16 @@ public class DiscordRPCManager { * <p> * When the {@link #updateTask previous update} does not exist or {@link CompletableFuture#isDone() has completed}: * <p> - * Connects to discord if {@link SkyblockerConfigManager.RichPresence#enableRichPresence rich presence is enabled}, + * Connects to discord if {@link me.xmrvizzy.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled}, * the player {@link Utils#isOnSkyblock() is on Skyblock}, and {@link DiscordIPC#isConnected() discord is not already connected}. - * Updates the presence if {@link SkyblockerConfigManager.RichPresence#enableRichPresence rich presence is enabled} + * Updates the presence if {@link me.xmrvizzy.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled} * and the player {@link Utils#isOnSkyblock() is on Skyblock}. - * Stops the connection if {@link SkyblockerConfigManager.RichPresence#enableRichPresence rich presence is disabled} + * Stops the connection if {@link me.xmrvizzy.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled} * or the player {@link Utils#isOnSkyblock() is not on Skyblock} and {@link DiscordIPC#isConnected() discord is connected}. * Saves the update task in {@link #updateTask} * * @param initialization whether this is the first time the presence is being updates. If {@code true}, a message will be logged - * if {@link SkyblockerConfigManager.RichPresence#enableRichPresence rich presence is disabled}. + * if {@link me.xmrvizzy.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled}. */ private static void initAndUpdatePresence(boolean initialization) { if (updateTask == null || updateTask.isDone()) { |