diff options
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java new file mode 100644 index 00000000..d4c930d2 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java @@ -0,0 +1,82 @@ +package de.hysky.skyblocker.mixins; + +import com.mojang.authlib.GameProfile; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.auction.AuctionViewScreen; +import de.hysky.skyblocker.skyblock.auction.EditBidPopup; +import de.hysky.skyblocker.skyblock.dungeon.partyfinder.PartyFinderScreen; +import de.hysky.skyblocker.skyblock.item.HotbarSlotLock; +import de.hysky.skyblocker.skyblock.item.ItemProtection; +import de.hysky.skyblocker.skyblock.rift.HealingMelonIndicator; +import de.hysky.skyblocker.skyblock.searchoverlay.OverlayScreen; +import de.hysky.skyblocker.skyblock.searchoverlay.SearchOverManager; +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.text.Text; +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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ClientPlayerEntity.class) +public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity { + @Shadow + @Final + protected MinecraftClient client; + + public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) { + super(world, profile); + } + + @Inject(method = "dropSelectedItem", at = @At("HEAD"), cancellable = true) + public void skyblocker$dropSelectedItem(CallbackInfoReturnable<Boolean> cir) { + if (Utils.isOnSkyblock() && (ItemProtection.isItemProtected(this.getInventory().getMainHandStack()) || HotbarSlotLock.isLocked(this.getInventory().selectedSlot)) + && (!SkyblockerConfigManager.get().locations.dungeons.allowDroppingProtectedItems || !Utils.isInDungeons())) { + cir.setReturnValue(false); + } + } + + @Inject(method = "updateHealth", at = @At("RETURN")) + public void skyblocker$updateHealth(CallbackInfo ci) { + HealingMelonIndicator.updateHealth(); + } + + @Inject(method = "openEditSignScreen", at = @At("HEAD"), cancellable = true) + public void skyblocker$redirectEditSignScreen(SignBlockEntity sign, boolean front, CallbackInfo callbackInfo) { + // Fancy Party Finder + if (!PartyFinderScreen.isInKuudraPartyFinder && client.currentScreen instanceof PartyFinderScreen partyFinderScreen && !partyFinderScreen.isAborted() && sign.getText(front).getMessage(3, false).getString().toLowerCase().contains("level")) { + partyFinderScreen.updateSign(sign, front); + callbackInfo.cancel(); + return; + } + + if (client.currentScreen instanceof AuctionViewScreen auctionViewScreen) { + this.client.setScreen(new EditBidPopup(auctionViewScreen, sign, front, auctionViewScreen.minBid)); + callbackInfo.cancel(); + } + + // Search Overlay + if (client.currentScreen != null) { + if (SkyblockerConfigManager.get().general.searchOverlay.enableAuctionHouse && client.currentScreen.getTitle().getString().toLowerCase().contains("auction")) { + if (sign.getText(front).getMessage(3, false).getString().equalsIgnoreCase("enter query")) { + SearchOverManager.updateSign(sign, front, true); + client.setScreen(new OverlayScreen(Text.of(""))); + callbackInfo.cancel(); + } + } else if (SkyblockerConfigManager.get().general.searchOverlay.enableBazaar && client.currentScreen.getTitle().getString().toLowerCase().contains("bazaar")) { + if (sign.getText(front).getMessage(3, false).getString().equalsIgnoreCase("enter query")) { + SearchOverManager.updateSign(sign, front, false); + client.setScreen(new OverlayScreen(Text.of(""))); + callbackInfo.cancel(); + } + } + } + } +}
\ No newline at end of file |