From 6bcf1db390b03cc58debd75121489650294f3760 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:10:40 -0400 Subject: 1.21.2-pre3 --- .../java/de/hysky/skyblocker/SkyblockerScreen.java | 8 +- .../de/hysky/skyblocker/UpdateNotifications.java | 2 +- .../compatibility/jei/SkyblockerJEIPlugin.java | 5 +- src/main/java/de/hysky/skyblocker/debug/Debug.java | 8 +- .../mixins/AbstractInventoryScreenMixin.java | 16 +- .../skyblocker/mixins/BackgroundRendererMixin.java | 19 +- .../mixins/ClientPlayNetworkHandlerMixin.java | 6 +- .../skyblocker/mixins/ComponentHolderMixin.java | 2 +- .../hysky/skyblocker/mixins/DrawContextMixin.java | 3 +- .../skyblocker/mixins/DyedColorComponentMixin.java | 4 +- .../mixins/EntityRenderDispatcherMixin.java | 6 +- .../skyblocker/mixins/FarmlandBlockMixin.java | 4 +- .../skyblocker/mixins/HandledScreenMixin.java | 7 +- .../de/hysky/skyblocker/mixins/InGameHudMixin.java | 7 +- .../skyblocker/mixins/InventoryScreenMixin.java | 17 +- .../skyblocker/mixins/PlayerInventoryMixin.java | 2 +- .../skyblocker/mixins/PlayerSkinTextureMixin.java | 6 +- .../hysky/skyblocker/mixins/RenderFishMixin.java | 12 +- .../skyblocker/mixins/WorldRendererMixin.java | 18 +- .../mixins/accessors/DrawContextInvoker.java | 8 +- .../mixins/accessors/FrustumInvoker.java | 2 +- .../mixins/accessors/RecipeBookWidgetAccessor.java | 12 +- .../mixins/accessors/SkullBlockEntityAccessor.java | 18 -- .../hysky/skyblocker/skyblock/FishingHelper.java | 8 +- .../hysky/skyblocker/skyblock/TeleportOverlay.java | 2 +- .../skyblock/auction/AuctionBrowserScreen.java | 16 +- .../skyblock/auction/AuctionViewScreen.java | 5 +- .../skyblock/auction/widgets/RarityWidget.java | 7 +- .../skyblock/auction/widgets/SliderWidget.java | 7 +- .../skyblock/chat/ChatRuleConfigScreen.java | 4 +- .../skyblock/chat/SkyblockXpMessages.java | 2 +- .../skyblock/chocolatefactory/EggFinder.java | 4 +- .../chocolatefactory/TimeTowerReminder.java | 2 +- .../skyblocker/skyblock/dungeon/DungeonMap.java | 7 +- .../skyblock/dungeon/DungeonMapConfigScreen.java | 3 +- .../hysky/skyblocker/skyblock/dungeon/Reparty.java | 4 +- .../skyblock/dungeon/partyfinder/PartyEntry.java | 15 +- .../dungeon/partyfinder/PartyFinderScreen.java | 5 +- .../skyblock/dungeon/secrets/SecretsTracker.java | 4 +- .../skyblock/dwarven/CrystalsChestHighlighter.java | 2 +- .../skyblocker/skyblock/dwarven/CrystalsHud.java | 5 +- .../skyblock/dwarven/CrystalsHudConfigScreen.java | 3 +- .../skyblock/dwarven/CrystalsLocationsManager.java | 2 +- .../skyblock/dwarven/GlaciteColdOverlay.java | 28 +- .../skyblock/dwarven/WishingCompassSolver.java | 9 +- .../skyblocker/skyblock/events/EventToast.java | 20 +- .../skyblock/events/JacobEventToast.java | 9 +- .../skyblock/fancybars/EditBarWidget.java | 2 +- .../skyblocker/skyblock/fancybars/StatusBar.java | 14 +- .../skyblock/fancybars/StatusBarsConfigScreen.java | 3 +- .../skyblocker/skyblock/item/CustomArmorTrims.java | 10 +- .../skyblocker/skyblock/item/ItemCooldowns.java | 43 +-- .../hysky/skyblocker/skyblock/item/ItemPrice.java | 8 +- .../skyblocker/skyblock/item/ItemProtection.java | 10 +- .../skyblock/item/ItemRarityBackgrounds.java | 4 +- .../skyblock/item/SkyblockCraftingTableScreen.java | 90 +------ .../skyblock/item/SkyblockInventoryScreen.java | 8 +- .../skyblock/item/tooltip/BackpackPreview.java | 9 +- .../item/tooltip/CompactorDeletorPreview.java | 4 +- .../tooltip/CompactorPreviewTooltipComponent.java | 19 +- .../skyblocker/skyblock/itemlist/ItemListTab.java | 1 + .../skyblock/itemlist/ItemListWidget.java | 9 +- .../skyblock/itemlist/ResultButtonWidget.java | 6 +- .../skyblock/itemlist/SearchResultsWidget.java | 3 +- .../skyblock/itemlist/UpcomingEventsTab.java | 8 +- .../recipebook/NoopRecipeScreenHandler.java | 44 ++++ .../itemlist/recipebook/RecipeAreaDisplay.java | 22 ++ .../skyblock/itemlist/recipebook/RecipeTab.java | 12 + .../recipebook/SkyblockCraftingRecipeResults.java | 291 +++++++++++++++++++++ .../itemlist/recipebook/SkyblockCraftingTab.java | 62 +++++ .../recipebook/SkyblockRecipeBookWidget.java | 237 +++++++++++++++++ .../recipebook/SkyblockRecipeResultButton.java | 58 ++++ .../recipebook/SkyblockRecipeTabButton.java | 38 +++ .../itemlist/recipebook/UpcomingEventsTab.java | 180 +++++++++++++ .../skyblock/itemlist/recipebook/package-info.java | 4 + .../profileviewer/ProfileViewerNavButton.java | 3 +- .../profileviewer/ProfileViewerScreen.java | 3 +- .../profileviewer/collections/GenericCategory.java | 3 +- .../profileviewer/dungeons/DungeonClassWidget.java | 7 +- .../dungeons/DungeonFloorRunsWidget.java | 3 +- .../dungeons/DungeonHeaderWidget.java | 3 +- .../dungeons/DungeonMiscStatsWidgets.java | 7 +- .../profileviewer/inventory/Inventory.java | 13 +- .../profileviewer/inventory/PaginationButton.java | 5 +- .../profileviewer/inventory/PlayerInventory.java | 21 +- .../skyblock/profileviewer/skills/SkillWidget.java | 3 +- .../skyblock/profileviewer/skills/SkillsPage.java | 3 +- .../profileviewer/slayers/SlayerWidget.java | 9 +- .../profileviewer/utils/SubPageSelectButton.java | 3 +- .../skyblock/quicknav/QuickNavButton.java | 3 +- .../skyblock/searchoverlay/OverlayScreen.java | 5 +- .../tabhud/widget/component/PlayerComponent.java | 2 +- .../skyblock/waypoint/MythologicalRitual.java | 5 +- .../hysky/skyblocker/utils/ApiAuthentication.java | 2 +- .../de/hysky/skyblocker/utils/NEURepoManager.java | 5 +- src/main/java/de/hysky/skyblocker/utils/Utils.java | 2 +- .../skyblocker/utils/render/FrustumUtils.java | 6 +- .../skyblocker/utils/render/RenderHelper.java | 57 ++-- .../utils/render/SkyblockerRenderLayers.java | 4 +- .../utils/render/culling/ReducedWorldProvider.java | 2 +- .../utils/render/culling/WorldProvider.java | 2 +- .../utils/render/gui/AbstractPopupScreen.java | 10 +- .../utils/render/gui/SideTabButtonWidget.java | 3 +- .../skyblocker/utils/waypoint/NamedWaypoint.java | 3 +- 104 files changed, 1343 insertions(+), 418 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/mixins/accessors/SkullBlockEntityAccessor.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/NoopRecipeScreenHandler.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/RecipeAreaDisplay.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/RecipeTab.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockCraftingRecipeResults.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockCraftingTab.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockRecipeBookWidget.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockRecipeResultButton.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockRecipeTabButton.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/UpcomingEventsTab.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/package-info.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java b/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java index 611a7dcd..cc90d747 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.Tips; +import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; @@ -11,6 +12,7 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ConfirmLinkScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.*; +import net.minecraft.client.render.RenderLayer; import net.minecraft.screen.ScreenTexts; import net.minecraft.text.OrderedText; import net.minecraft.text.StringVisitable; @@ -90,8 +92,8 @@ public class SkyblockerScreen extends Screen { } @Override - protected void initTabNavigation() { - super.initTabNavigation(); + protected void refreshWidgetPositions() { + super.refreshWidgetPositions(); this.layout.refreshPositions(); } @@ -130,7 +132,7 @@ public class SkyblockerScreen extends Screen { int iconY = y - 13; context.drawTextWithShadow(textRenderer, orderedText, x, y, this.getTextColor()); - context.drawTexture(this.icon, iconX, iconY, 0, 0, 32, 32, 32, 32); + context.drawTexture(RenderLayer::getGuiTextured, this.icon, iconX, iconY, 0, 0, 32, 32, 32, 32); } private OrderedText trim(Text text, int width) { diff --git a/src/main/java/de/hysky/skyblocker/UpdateNotifications.java b/src/main/java/de/hysky/skyblocker/UpdateNotifications.java index 089d59d5..00ae9ac0 100644 --- a/src/main/java/de/hysky/skyblocker/UpdateNotifications.java +++ b/src/main/java/de/hysky/skyblocker/UpdateNotifications.java @@ -106,7 +106,7 @@ public class UpdateNotifications { .withUnderline(true) .withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, downloadLink))); - CLIENT.player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.updateNotifications.newUpdateMessage", versionText))); + CLIENT.player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.updateNotifications.newUpdateMessage", versionText)), false); SystemToast.add(CLIENT.getToastManager(), TOAST_TYPE, Text.translatable("skyblocker.updateNotifications.newUpdateToast.title"), Text.stringifiedTranslatable("skyblocker.updateNotifications.newUpdateToast.description", newVersion.version())); } } catch (Exception e) { diff --git a/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java index a1e57682..ee54c3b5 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java @@ -47,7 +47,8 @@ public class SkyblockerJEIPlugin implements IModPlugin { @Override public void registerRecipes(@NotNull IRecipeRegistration registration) { - registration.getIngredientManager().addIngredientsAtRuntime(VanillaTypes.ITEM_STACK, ItemRepository.getItems()); + //FIXME no clue what to replace any of this with, we can't use items as that does not work + /*registration.getIngredientManager().addIngredientsAtRuntime(VanillaTypes.ITEM_STACK, ItemRepository.getItems()); registration.addRecipes(skyblockCraftingRecipeCategory.getRecipeType(), ItemRepository.getRecipesStream().map(recipe -> new RecipeEntry(recipe.getId(), new ShapedRecipe("", CraftingRecipeCategory.MISC, RawShapedRecipe.create(Map.of( 'a', Ingredient.ofStacks(recipe.getGrid().get(0)), @@ -60,6 +61,6 @@ public class SkyblockerJEIPlugin implements IModPlugin { 'h', Ingredient.ofStacks(recipe.getGrid().get(7)), 'i', Ingredient.ofStacks(recipe.getGrid().get(8)) ), "abc", "def", "ghi"), recipe.getResult())) - ).toList()); + ).toList());*/ } } diff --git a/src/main/java/de/hysky/skyblocker/debug/Debug.java b/src/main/java/de/hysky/skyblocker/debug/Debug.java index 7805c4e4..da4ac9c1 100644 --- a/src/main/java/de/hysky/skyblocker/debug/Debug.java +++ b/src/main/java/de/hysky/skyblocker/debug/Debug.java @@ -71,7 +71,7 @@ public class Debug { .stream() .map(entity -> entity.writeNbt(new NbtCompound())) .map(NbtHelper::toPrettyPrintedText) - .forEach(client.player::sendMessage); + .forEach(text -> client.player.sendMessage(text, false)); keyDown = true; } else if (!dumpNearbyEntitiesKey.wasPressed() && keyDown) { keyDown = false; @@ -83,9 +83,9 @@ public class Debug { Slot focusedSlot = ((HandledScreenAccessor) handledScreen).getFocusedSlot(); if (dumpHoveredItemKey.matchesKey(key, scancode) && client.player != null && focusedSlot != null && focusedSlot.hasStack()) { if (!Screen.hasShiftDown()) { - client.player.sendMessage(Constants.PREFIX.get().append(Text.literal("Hovered Item: " + SkyblockerMod.GSON_COMPACT.toJson(ItemStack.CODEC.encodeStart(ItemStackComponentizationFixer.getRegistryLookup().getOps(JsonOps.INSTANCE), focusedSlot.getStack()).getOrThrow())))); + client.player.sendMessage(Constants.PREFIX.get().append(Text.literal("Hovered Item: " + SkyblockerMod.GSON_COMPACT.toJson(ItemStack.CODEC.encodeStart(ItemStackComponentizationFixer.getRegistryLookup().getOps(JsonOps.INSTANCE), focusedSlot.getStack()).getOrThrow()))), false); } else { - client.player.sendMessage(Constants.PREFIX.get().append(Text.literal("Held Item NW Calcs: " + SkyblockerMod.GSON_COMPACT.toJson(Calculation.LIST_CODEC.encodeStart(JsonOps.INSTANCE, NetworthCalculator.getItemNetworth(focusedSlot.getStack()).calculations()).getOrThrow())))); + client.player.sendMessage(Constants.PREFIX.get().append(Text.literal("Held Item NW Calcs: " + SkyblockerMod.GSON_COMPACT.toJson(Calculation.LIST_CODEC.encodeStart(JsonOps.INSTANCE, NetworthCalculator.getItemNetworth(focusedSlot.getStack()).calculations()).getOrThrow()))), false); } } }); @@ -136,4 +136,4 @@ public class Debug { return Command.SINGLE_SUCCESS; }); } -} +} \ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java index 69f33aa0..4e95e3dc 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java @@ -2,18 +2,20 @@ package de.hysky.skyblocker.mixins; 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 com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Utils; -import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ingame.InventoryScreen; +import net.minecraft.client.gui.screen.ingame.StatusEffectsDisplay; -@Mixin(AbstractInventoryScreen.class) +@Mixin(InventoryScreen.class) public class AbstractInventoryScreenMixin { - @Inject(method = "drawStatusEffects", at = @At("HEAD"), cancellable = true) - private void skyblocker$dontDrawStatusEffects(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.hideStatusEffectOverlay) ci.cancel(); + @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/StatusEffectsDisplay;drawStatusEffects(Lnet/minecraft/client/gui/DrawContext;IIF)V")) + private boolean skyblocker$dontDrawStatusEffects(StatusEffectsDisplay statusEffectsDisplay, DrawContext context, int mouseX, int mouseY, float tickDelta) { + return !(Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.hideStatusEffectOverlay); } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java index 02eacdfa..327ef8f5 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java @@ -1,18 +1,19 @@ package de.hysky.skyblocker.mixins; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.sugar.Local; -import com.mojang.blaze3d.systems.RenderSystem; + import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.CrimsonIsleConfig; import de.hysky.skyblocker.utils.Utils; import net.minecraft.block.enums.CameraSubmersionType; import net.minecraft.client.render.BackgroundRenderer; import net.minecraft.client.render.Camera; -import net.minecraft.client.render.FogShape; +import net.minecraft.client.render.Fog; + +import org.joml.Vector4f; 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(BackgroundRenderer.class) public abstract class BackgroundRendererMixin { @@ -21,8 +22,8 @@ public abstract class BackgroundRendererMixin { * Moves fog farther away from the player when in the crimson isles. * This sets it to be the same distance as what you would see in the overworld (every other skyblock island) */ - @Inject(method = "applyFog", at = @At("RETURN")) - private static void applyFogModifyDistance(CallbackInfo ci, @Local(argsOnly = true) Camera camera, @Local(argsOnly = true) BackgroundRenderer.FogType fogType, @Local(argsOnly = true, ordinal = 0) float viewDistance, @Local(argsOnly = true) boolean thickFog) { + @ModifyReturnValue(method = "applyFog", at = @At("RETURN")) + private static Fog applyFogModifyDistance(Fog original, @Local(argsOnly = true) Camera camera, @Local(argsOnly = true) BackgroundRenderer.FogType fogType, @Local(argsOnly = true) Vector4f color, @Local(argsOnly = true, ordinal = 0) float viewDistance, @Local(argsOnly = true) boolean thickFog) { final CameraSubmersionType cameraSubmersionType = camera.getSubmersionType(); CrimsonIsleConfig config = SkyblockerConfigManager.get().crimsonIsle; @@ -34,9 +35,9 @@ public abstract class BackgroundRendererMixin { start = viewDistance - Math.clamp(viewDistance / 10.0f, 4.0f, 64.0f); } - RenderSystem.setShaderFogStart(start); - RenderSystem.setShaderFogEnd(viewDistance); - RenderSystem.setShaderFogShape(FogShape.CYLINDER); + return new Fog(start, original.end(), original.shape(), original.red(), original.green(), original.blue(), original.alpha()); } + + return original; } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index 1a161b95..c03588db 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -41,8 +41,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientPlayNetworkHandler.class) public abstract class ClientPlayNetworkHandlerMixin { - @Shadow - private ClientWorld world; + @Shadow + private ClientWorld world; @Shadow @Final @@ -58,7 +58,7 @@ public abstract class ClientPlayNetworkHandlerMixin { } } - @Inject(method = "method_37472", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V")) + @Inject(method = "method_64896", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V")) private void skyblocker$onItemDestroy(int entityId, CallbackInfo ci) { if (world.getEntityById(entityId) instanceof ItemEntity itemEntity) { DungeonManager.onItemPickup(itemEntity); diff --git a/src/main/java/de/hysky/skyblocker/mixins/ComponentHolderMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ComponentHolderMixin.java index 199f5c26..177299bf 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ComponentHolderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ComponentHolderMixin.java @@ -14,7 +14,7 @@ import net.minecraft.component.ComponentHolder; import net.minecraft.component.ComponentType; import net.minecraft.component.DataComponentTypes; import net.minecraft.item.ItemStack; -import net.minecraft.item.trim.ArmorTrim; +import net.minecraft.item.equipment.trim.ArmorTrim; @Mixin(ComponentHolder.class) public interface ComponentHolderMixin { diff --git a/src/main/java/de/hysky/skyblocker/mixins/DrawContextMixin.java b/src/main/java/de/hysky/skyblocker/mixins/DrawContextMixin.java index 9f09c37a..56a5183a 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/DrawContextMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/DrawContextMixin.java @@ -11,8 +11,7 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(DrawContext.class) 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")) + @ModifyExpressionValue(method = "drawCooldownProgress", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ItemCooldownManager;getCooldownProgress(Lnet/minecraft/item/ItemStack;F)F")) private float skyblocker$modifyItemCooldown(float cooldownProgress, @Local(argsOnly = true) ItemStack stack) { return Utils.isOnSkyblock() && ItemCooldowns.isOnCooldown(stack) ? ItemCooldowns.getItemCooldownEntry(stack).getRemainingCooldownPercent() : cooldownProgress; } diff --git a/src/main/java/de/hysky/skyblocker/mixins/DyedColorComponentMixin.java b/src/main/java/de/hysky/skyblocker/mixins/DyedColorComponentMixin.java index 13e5669b..350b0446 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/DyedColorComponentMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/DyedColorComponentMixin.java @@ -23,10 +23,10 @@ public class DyedColorComponentMixin { String itemUuid = ItemUtils.getItemUuid(stack); if (SkyblockerConfigManager.get().general.customAnimatedDyes.containsKey(itemUuid)) { - return ColorHelper.Argb.fullAlpha(CustomArmorAnimatedDyes.animateColorTransition(SkyblockerConfigManager.get().general.customAnimatedDyes.get(itemUuid))); + return ColorHelper.fullAlpha(CustomArmorAnimatedDyes.animateColorTransition(SkyblockerConfigManager.get().general.customAnimatedDyes.get(itemUuid))); } - return ColorHelper.Argb.fullAlpha(SkyblockerConfigManager.get().general.customDyeColors.getOrDefault(itemUuid, originalColor)); + return ColorHelper.fullAlpha(SkyblockerConfigManager.get().general.customDyeColors.getOrDefault(itemUuid, originalColor)); } return originalColor; diff --git a/src/main/java/de/hysky/skyblocker/mixins/EntityRenderDispatcherMixin.java b/src/main/java/de/hysky/skyblocker/mixins/EntityRenderDispatcherMixin.java index cc7b8119..ae5856e2 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/EntityRenderDispatcherMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/EntityRenderDispatcherMixin.java @@ -11,6 +11,8 @@ import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.decoration.ArmorStandEntity; + +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -25,8 +27,8 @@ public class EntityRenderDispatcherMixin { return Utils.isInDungeons() && SkyblockerConfigManager.get().dungeons.hideSoulweaverSkulls && entity instanceof ArmorStandEntity armorStand && entity.isInvisible() && armorStand.hasStackEquipped(EquipmentSlot.HEAD) ? !ItemUtils.getHeadTexture(armorStand.getEquippedStack(EquipmentSlot.HEAD)).equals(SOULWEAVER_SKULL_TEXTURE) : original; } - @ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;isInvisible()Z", ordinal = 1)) - private boolean skyblocker$armorStandHitboxVisible(boolean invisible, E entity) { + @ModifyExpressionValue(method = "render(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/EntityRenderer;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/entity/state/EntityRenderState;invisible:Z", opcode = Opcodes.GETFIELD, ordinal = 1)) + private boolean skyblocker$armorStandHitboxVisible(boolean invisible, @Local(argsOnly = true) E entity) { return (!(entity instanceof ArmorStandEntity) || !Utils.isOnHypixel() || !Debug.debugEnabled() || !SkyblockerConfigManager.get().debug.showInvisibleArmorStands) && invisible; } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/FarmlandBlockMixin.java b/src/main/java/de/hysky/skyblocker/mixins/FarmlandBlockMixin.java index 4c981d9a..a92c1ad7 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/FarmlandBlockMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/FarmlandBlockMixin.java @@ -6,10 +6,8 @@ import de.hysky.skyblocker.utils.Utils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.FarmlandBlock; -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; @@ -31,7 +29,7 @@ public abstract class FarmlandBlockMixin extends Block { } @Override - public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) { + public VoxelShape getCullingShape(BlockState state) { return SHAPE; } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index bb21092e..579c8773 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -24,6 +24,7 @@ import de.hysky.skyblocker.utils.container.ContainerSolverManager; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.render.RenderLayer; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.screen.GenericContainerScreenHandler; @@ -168,7 +169,7 @@ public abstract class HandledScreenMixin extends Screen @SuppressWarnings("DataFlowIssue") // makes intellij be quiet about this.focusedSlot maybe being null. It's already null checked in mixined method. - @Inject(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V"), cancellable = true) + @Inject(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V"), cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci, @Local(ordinal = 0) ItemStack stack) { if (!Utils.isOnSkyblock()) return; @@ -316,12 +317,12 @@ public abstract class HandledScreenMixin extends Screen // Item protection if (ItemProtection.isItemProtected(slot.getStack())) { RenderSystem.enableBlend(); - context.drawTexture(ITEM_PROTECTION, slot.x, slot.y, 0, 0, 16, 16, 16, 16); + context.drawTexture(RenderLayer::getGuiTextured, ITEM_PROTECTION, slot.x, slot.y, 0, 0, 16, 16, 16, 16); RenderSystem.disableBlend(); } } - @Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V")) + @Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawStackOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V")) private void skyblocker$drawSlotText(DrawContext context, Slot slot, CallbackInfo ci) { if (Utils.isOnSkyblock()) { SlotTextManager.renderSlotText(context, textRenderer, slot); diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java index 5dfc3922..361ca6f0 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java @@ -19,6 +19,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.LayeredDrawer; import net.minecraft.client.gui.hud.InGameHud; +import net.minecraft.client.render.RenderLayer; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -62,13 +63,13 @@ public abstract class InGameHudMixin { if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) ItemRarityBackgrounds.tryDraw(player.getInventory().main.get(index), context, x, y); if (HotbarSlotLock.isLocked(index)) { RenderSystem.enableBlend(); - context.drawTexture(SLOT_LOCK_ICON.get(), x, y, 0, 0, 16, 16, 16, 16); + context.drawTexture(RenderLayer::getGuiTextured, SLOT_LOCK_ICON.get(), x, y, 0, 0, 16, 16, 16, 16); RenderSystem.disableBlend(); } //item protection if (ItemProtection.isItemProtected(player.getInventory().main.get(index))) { RenderSystem.enableBlend(); - context.drawTexture(ItemProtection.ITEM_PROTECTION_TEX, x, y, 0, 0, 16, 16, 16, 16); + context.drawTexture(RenderLayer::getGuiTextured, ItemProtection.ITEM_PROTECTION_TEX, x, y, 0, 0, 16, 16, 16, 16); RenderSystem.disableBlend(); } } @@ -144,7 +145,7 @@ public abstract class InGameHudMixin { }; } - @ModifyArg(method = "", slice = @Slice(from = @At(value = "NEW", target = "Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 1)), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 5)) + @ModifyArg(method = "", slice = @Slice(from = @At(value = "NEW", target = "Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 2)), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 5)) private LayeredDrawer.Layer skyblocker$beforeChat(LayeredDrawer.Layer beforeChatLayer) { return (context, tickCounter) -> { HudRenderEvents.BEFORE_CHAT.invoker().onRender(context, tickCounter); diff --git a/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java index f5b22c21..1c57a466 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java @@ -1,8 +1,7 @@ package de.hysky.skyblocker.mixins; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.itemlist.ItemListWidget; +import de.hysky.skyblocker.skyblock.itemlist.recipebook.SkyblockRecipeBookWidget; import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; @@ -12,18 +11,14 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(InventoryScreen.class) public abstract class InventoryScreenMixin { - @ModifyExpressionValue(method = "", at = @At(value = "NEW", target = "Lnet/minecraft/client/gui/screen/recipebook/RecipeBookWidget;")) - private RecipeBookWidget skyblocker$replaceRecipeBook(RecipeBookWidget original) { - return SkyblockerConfigManager.get().general.itemList.enableItemList && Utils.isOnSkyblock() ? new ItemListWidget() : original; - } - @ModifyArg(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/TexturedButtonWidget;(IIIILnet/minecraft/client/gui/screen/ButtonTextures;Lnet/minecraft/client/gui/widget/ButtonWidget$PressAction;)V"), index = 0) - private int skyblocker$moveButton(int x) { - return Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.showEquipmentInInventory ? x + 21 : x; + @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/RecipeBookScreen;(Lnet/minecraft/screen/AbstractRecipeScreenHandler;Lnet/minecraft/client/gui/screen/recipebook/RecipeBookWidget;Lnet/minecraft/entity/player/PlayerInventory;Lnet/minecraft/text/Text;)V")) + private static RecipeBookWidget skyblocker$replaceRecipeBook(RecipeBookWidget original) { + return SkyblockerConfigManager.get().general.itemList.enableItemList && Utils.isOnSkyblock() ? new SkyblockRecipeBookWidget() : original; } - @ModifyArg(method = "method_19891", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/ButtonWidget;setPosition(II)V"), index = 0) - private int skyblocker$moveButtonWhenPressed(int x) { + @ModifyArg(method = "getRecipeBookButtonPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ScreenPos;(II)V"), index = 0) + private int skyblocker$moveButton(int x) { return Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.showEquipmentInInventory ? x + 21 : x; } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerInventoryMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerInventoryMixin.java index 35747267..8995e2ad 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PlayerInventoryMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PlayerInventoryMixin.java @@ -14,7 +14,7 @@ public class PlayerInventoryMixin { @Shadow public int selectedSlot; - @Inject(method = "scrollInHotbar", at = @At("TAIL")) + @Inject(method = "setSelectedSlot", at = @At("TAIL")) private void skyblocker$onHotbarScroll(CallbackInfo ci) { ArrowPoisonWarning.tryWarn(selectedSlot); } diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java index 9b9691c5..a9c07adc 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java @@ -62,11 +62,11 @@ public class PlayerSkinTextureMixin { for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { - int color = image.getColor(x, y); - float[] hsb = Color.RGBtoHSB(ColorHelper.Abgr.getRed(color), ColorHelper.Abgr.getGreen(color), ColorHelper.Abgr.getBlue(color), null); + int color = image.getColorArgb(x, y); + float[] hsb = Color.RGBtoHSB((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, null); //Work around "fake" transparent pixels - Thanks Hypixel I totally appreciate this! - if (hsb[2] <= BRIGHTNESS_THRESHOLD) image.setColor(x, y, ColorHelper.Abgr.withAlpha(0x00, color & 0x00FFFFFF)); + if (hsb[2] <= BRIGHTNESS_THRESHOLD) image.setColorArgb(x, y, ColorHelper.withAlpha(0x00, color & 0x00FFFFFF)); } } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java b/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java index 0382285b..7fe5baa9 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java @@ -7,19 +7,15 @@ import net.minecraft.client.render.entity.FishingBobberEntityRenderer; import net.minecraft.entity.projectile.FishingBobberEntity; 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 com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.sugar.Local; @Mixin(FishingBobberEntityRenderer.class) public abstract class RenderFishMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void skyblocker$render(CallbackInfo ci, @Local(argsOnly = true) FishingBobberEntity fishingBobberEntity) { + @ModifyReturnValue(method = "shouldRender", at = @At("RETURN")) + private boolean skyblocker$render(boolean original, @Local(argsOnly = true) FishingBobberEntity fishingBobberEntity) { //if rendered bobber is not the players and option to hide others is enabled do not render the bobber - if (Utils.isOnSkyblock() && fishingBobberEntity.getPlayerOwner() != MinecraftClient.getInstance().player && SkyblockerConfigManager.get().helpers.fishing.hideOtherPlayersRods) { - ci.cancel(); - } + return Utils.isOnSkyblock() && SkyblockerConfigManager.get().helpers.fishing.hideOtherPlayersRods ? original && fishingBobberEntity.getPlayerOwner() != MinecraftClient.getInstance().player : original; } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java index 7126cbad..6f0b9349 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java @@ -1,12 +1,11 @@ package de.hysky.skyblocker.mixins; -import de.hysky.skyblocker.skyblock.dungeon.LividColor; -import de.hysky.skyblocker.skyblock.slayers.SlayerEntitiesGlow; -import net.minecraft.entity.decoration.ArmorStandEntity; 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.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; @@ -14,16 +13,21 @@ import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.Share; import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; +import de.hysky.skyblocker.skyblock.dungeon.LividColor; import de.hysky.skyblocker.skyblock.entity.MobBoundingBoxes; import de.hysky.skyblocker.skyblock.entity.MobGlow; +import de.hysky.skyblocker.skyblock.slayers.SlayerEntitiesGlow; +import net.minecraft.client.render.DefaultFramebufferSet; import net.minecraft.client.render.WorldRenderer; import net.minecraft.entity.Entity; -import org.spongepowered.asm.mixin.injection.Slice; +import net.minecraft.entity.decoration.ArmorStandEntity; @Mixin(WorldRenderer.class) public class WorldRendererMixin { + @Shadow + private DefaultFramebufferSet framebufferSet; - @ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;hasOutline(Lnet/minecraft/entity/Entity;)Z")) + @ModifyExpressionValue(method = "renderEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;hasOutline(Lnet/minecraft/entity/Entity;)Z")) private boolean skyblocker$shouldMobGlow(boolean original, @Local Entity entity, @Share("hasCustomGlow") LocalBooleanRef hasCustomGlow) { boolean allowGlow = LividColor.allowGlow(); boolean shouldGlow = MobGlow.shouldMobGlow(entity); @@ -31,7 +35,7 @@ public class WorldRendererMixin { return allowGlow && original || shouldGlow; } - @ModifyVariable(method = "render", + @ModifyVariable(method = "renderEntities", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;hasOutline(Lnet/minecraft/entity/Entity;)Z"), to = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;setColor(IIII)V")), at = @At("STORE"), ordinal = 0 ) @@ -39,7 +43,7 @@ public class WorldRendererMixin { return hasCustomGlow.get() ? MobGlow.getGlowColor(entity) : color; } - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderEntity(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;)V")) + @Inject(method = "renderEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderEntity(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;)V")) private void skyblocker$beforeEntityIsRendered(CallbackInfo ci, @Local Entity entity) { boolean shouldShowBoundingBox = MobBoundingBoxes.shouldDrawMobBoundingBox(entity); diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/DrawContextInvoker.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/DrawContextInvoker.java index 7a04630d..312f0f69 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/accessors/DrawContextInvoker.java +++ b/src/main/java/de/hysky/skyblocker/mixins/accessors/DrawContextInvoker.java @@ -4,18 +4,22 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.tooltip.TooltipPositioner; +import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; + +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; import java.util.List; +import java.util.function.Function; @Mixin(DrawContext.class) public interface DrawContextInvoker { @Invoker - void invokeDrawTooltip(TextRenderer textRenderer, List components, int x, int y, TooltipPositioner positioner); + void invokeDrawTooltip(TextRenderer textRenderer, List components, int x, int y, TooltipPositioner positioner, @Nullable Identifier texture); @Invoker - void invokeDrawTexturedQuad(Identifier texture, int x1, int x2, int y1, int y2, int z, float u1, float u2, float v1, float v2, float red, float green, float blue, float alpha); + void invokeDrawTexturedQuad(Function renderLayers, Identifier texture, int x1, int x2, int y1, int y2, float u1, float u2, float v1, float v2, int color); } diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/FrustumInvoker.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/FrustumInvoker.java index e4d04dde..5f100bc7 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/accessors/FrustumInvoker.java +++ b/src/main/java/de/hysky/skyblocker/mixins/accessors/FrustumInvoker.java @@ -10,5 +10,5 @@ import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(Frustum.class) public interface FrustumInvoker { @Invoker - boolean invokeIsVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); + int invokeIntersectAab(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); } diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/RecipeBookWidgetAccessor.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/RecipeBookWidgetAccessor.java index 555a0d8a..59983910 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/accessors/RecipeBookWidgetAccessor.java +++ b/src/main/java/de/hysky/skyblocker/mixins/accessors/RecipeBookWidgetAccessor.java @@ -1,15 +1,15 @@ package de.hysky.skyblocker.mixins.accessors; 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; +import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(RecipeBookWidget.class) public interface RecipeBookWidgetAccessor { - @Accessor - String getSearchText(); + @Invoker + int invokeGetTop(); - @Accessor - TextFieldWidget getSearchField(); + @Invoker + int invokeGetLeft(); } diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/SkullBlockEntityAccessor.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/SkullBlockEntityAccessor.java deleted file mode 100644 index 34c196b3..00000000 --- a/src/main/java/de/hysky/skyblocker/mixins/accessors/SkullBlockEntityAccessor.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.hysky.skyblocker.mixins.accessors; - -import com.mojang.authlib.GameProfile; -import net.minecraft.block.entity.SkullBlockEntity; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -import java.util.Optional; -import java.util.concurrent.CompletableFuture; - -@Mixin(SkullBlockEntity.class) -public interface SkullBlockEntityAccessor { - @Invoker - static CompletableFuture> invokeFetchProfileByName(String name) { - throw new UnsupportedOperationException(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java index d6ec6b62..868feb6e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java @@ -15,8 +15,8 @@ import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; import net.minecraft.util.Formatting; -import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; @@ -31,7 +31,7 @@ public class FishingHelper { UseItemCallback.EVENT.register((player, world, hand) -> { ItemStack stack = player.getStackInHand(hand); if (!Utils.isOnSkyblock()) { - return TypedActionResult.pass(stack); + return ActionResult.PASS; } if (stack.getItem() instanceof FishingRodItem) { if (player.fishHook == null) { @@ -40,7 +40,7 @@ public class FishingHelper { reset(); } } - return TypedActionResult.pass(stack); + return ActionResult.PASS; }); WorldRenderEvents.AFTER_TRANSLUCENT.register(FishingHelper::render); } @@ -62,7 +62,7 @@ public class FishingHelper { } public static void onSound(PlaySoundS2CPacket packet) { - String path = packet.getSound().value().getId().getPath(); + String path = packet.getSound().value().id().getPath(); if (SkyblockerConfigManager.get().helpers.fishing.enableFishingHelper && startTimeFish != 0 && System.currentTimeMillis() >= startTimeFish + 2000 && ("entity.generic.splash".equals(path) || "entity.player.splash".equals(path))) { ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null && player.fishHook != null) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java index bdd5e60a..ccdb6db2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java @@ -83,7 +83,7 @@ public class TeleportOverlay { 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 if (client.interactionManager != null && range > client.player.getAttributeInstance(EntityAttributes.PLAYER_BLOCK_INTERACTION_RANGE).getValue()) { + } else if (client.interactionManager != null && range > client.player.getAttributeInstance(EntityAttributes.BLOCK_INTERACTION_RANGE).getValue()) { HitResult result = client.player.raycast(range, wrc.tickCounter().getTickDelta(true), false); if (result.getType() == HitResult.Type.BLOCK && result instanceof BlockHitResult blockHitResult) { render(wrc, blockHitResult); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java index eb0fa9b1..2625c3b6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java @@ -16,6 +16,7 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.render.RenderLayer; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; @@ -27,6 +28,7 @@ import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Colors; import net.minecraft.util.Identifier; +import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.MathHelper; import org.lwjgl.glfw.GLFW; import org.slf4j.Logger; @@ -123,7 +125,7 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI & SliderWidget.OptionInfo> extends C int optionWidth = current.getOptionSize()[0]; int optionHeight = current.getOptionSize()[1]; - context.drawTexture(current.getBackTexture(), 0, 0, 0, 0, getWidth(), getHeight(), getWidth(), getHeight()); - context.drawTexture(current.getOptionTexture(), x, y, 0, 0, optionWidth, optionHeight, optionWidth, optionHeight); + context.drawTexture(RenderLayer::getGuiTextured, current.getBackTexture(), 0, 0, 0, 0, getWidth(), getHeight(), getWidth(), getHeight()); + context.drawTexture(RenderLayer::getGuiTextured, current.getOptionTexture(), x, y, 0, 0, optionWidth, optionHeight, optionWidth, optionHeight); if (isHovered()) { - context.drawTexture(current.getHoverTexture(), x, y, 0, 0, optionWidth, optionHeight, optionWidth, optionHeight); + context.drawTexture(RenderLayer::getGuiTextured, current.getHoverTexture(), x, y, 0, 0, optionWidth, optionHeight, optionWidth, optionHeight); } context.getMatrices().pop(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java index 9ecb71e2..11d5b72b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java @@ -80,10 +80,10 @@ public class ChatRuleConfigScreen extends Screen { if (chatRule.getCustomSound() == null) return -1; //if no sound just return -1 List soundOptions = soundsLookup.values().stream().toList(); - Identifier ruleSoundId = chatRule.getCustomSound().getId(); + Identifier ruleSoundId = chatRule.getCustomSound().id(); for (int i = 0; i < soundOptions.size(); i++) { - if (soundOptions.get(i).getId().compareTo(ruleSoundId) == 0) { + if (soundOptions.get(i).id().compareTo(ruleSoundId) == 0) { return i; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java index 0e46115b..7e1e44fe 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java @@ -33,7 +33,7 @@ public class SkyblockXpMessages { int hash = xpMessage.hashCode(); if (!RECENT_MESSAGES.contains(hash)) { - CLIENT.player.sendMessage(Constants.PREFIX.get().append(xpMessage)); + CLIENT.player.sendMessage(Constants.PREFIX.get().append(xpMessage), false); RECENT_MESSAGES.add(hash); Scheduler.INSTANCE.schedule(() -> RECENT_MESSAGES.remove(hash), 20 * 10); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java index a65e61ff..3095ce65 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java @@ -118,7 +118,7 @@ public class EggFinder { public static void checkIfEgg(ArmorStandEntity armorStand) { if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableEggFinder) return; if (SkyblockTime.skyblockSeason.get() != SkyblockTime.Season.SPRING) return; - if (armorStand.hasCustomName() || !armorStand.isInvisible() || !armorStand.shouldHideBasePlate()) return; + if (armorStand.hasCustomName() || !armorStand.isInvisible() || armorStand.shouldShowBasePlate()) return; if (Utils.getLocation() == Location.UNKNOWN) { //The location is unknown upon world change and will be changed via location change packets soon, so we can queue it for now armorStandQueue.add(armorStand); return; @@ -229,7 +229,7 @@ public class EggFinder { .withColor(color)) .append(" at " + egg.entity.getBlockPos().up(2).toShortString() + "!") .styled(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/skyblocker eggFinder shareLocation " + PosUtils.toSpaceSeparatedString(egg.waypoint.pos) + " " + this)) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.literal("Click to share the location in chat!").formatted(Formatting.GREEN))))); + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.literal("Click to share the location in chat!").formatted(Formatting.GREEN)))), false); } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/TimeTowerReminder.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/TimeTowerReminder.java index 9b2c7b45..76008783 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/TimeTowerReminder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/TimeTowerReminder.java @@ -61,7 +61,7 @@ public class TimeTowerReminder { private static void sendMessage() { if (MinecraftClient.getInstance().player == null || !Utils.isOnSkyblock()) return; if (SkyblockerConfigManager.get().helpers.chocolateFactory.enableTimeTowerReminder) { - MinecraftClient.getInstance().player.sendMessage(Constants.PREFIX.get().append(Text.literal("Your Chocolate Factory's Time Tower has deactivated!").formatted(Formatting.RED))); + MinecraftClient.getInstance().player.sendMessage(Constants.PREFIX.get().append(Text.literal("Your Chocolate Factory's Time Tower has deactivated!").formatted(Formatting.RED)), false); } File tempFile = SkyblockerMod.CONFIG_DIR.resolve(TIME_TOWER_FILE).toFile(); try { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java index f7f33bd0..32fd1afe 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java @@ -12,6 +12,7 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.LightmapTextureManager; +import net.minecraft.client.render.MapRenderState; import net.minecraft.client.render.MapRenderer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; @@ -24,6 +25,7 @@ import net.minecraft.item.map.MapState; public class DungeonMap { private static final MapIdComponent DEFAULT_MAP_ID_COMPONENT = new MapIdComponent(1024); + private static final MapRenderState MAP_RENDER_STATE = new MapRenderState(); private static MapIdComponent cachedMapIdComponent = null; @Init @@ -52,12 +54,13 @@ public class DungeonMap { int y = SkyblockerConfigManager.get().dungeons.dungeonMap.mapY; float scaling = SkyblockerConfigManager.get().dungeons.dungeonMap.mapScaling; VertexConsumerProvider.Immediate vertices = client.getBufferBuilders().getEffectVertexConsumers(); - MapRenderer mapRenderer = client.g