diff --git a/build.gradle.kts b/build.gradle.kts index 0b1a762f..14b0fd8a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -75,7 +75,7 @@ version = if (preReleaseNumber == 0) { dependencies { minecraft("com.mojang:minecraft:${mcVersion}") - mappings("net.fabricmc:yarn:${mcVersion}+build.${deps["yarn_build"]}:v2") + mappings(loom.officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${deps["fabricLoaderVersion"]}") modImplementation("net.fabricmc.fabric-api:fabric-api:${deps["fabric_api"]}") diff --git a/src/main/java/com/github/mkram17/bazaarutils/commands/BUCommand.java b/src/main/java/com/github/mkram17/bazaarutils/commands/BUCommand.java index d8b8829c..3fb95bf8 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/commands/BUCommand.java +++ b/src/main/java/com/github/mkram17/bazaarutils/commands/BUCommand.java @@ -3,7 +3,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.List; @@ -11,8 +11,8 @@ public interface BUCommand { String getCommandName(); - default Text getDescription() { - return Text.empty(); + default Component getDescription() { + return Component.empty(); } default List getAliases() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/commands/DeveloperCommands.java b/src/main/java/com/github/mkram17/bazaarutils/commands/DeveloperCommands.java index 39270757..4c8c4538 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/commands/DeveloperCommands.java +++ b/src/main/java/com/github/mkram17/bazaarutils/commands/DeveloperCommands.java @@ -2,12 +2,12 @@ import com.github.mkram17.bazaarutils.config.features.DeveloperConfig; import com.github.mkram17.bazaarutils.config.util.ConfigUtil; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.features.notification.OutbidOrderHandler; import com.github.mkram17.bazaarutils.misc.NotificationType; import com.github.mkram17.bazaarutils.utils.PlayerActionUtil; import com.github.mkram17.bazaarutils.utils.annotations.modules.Module; -import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; +import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataUtil; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.Order; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.TransactionType; import com.mojang.brigadier.arguments.IntegerArgumentType; @@ -17,8 +17,8 @@ import lombok.Getter; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import java.util.List; @@ -28,7 +28,7 @@ public final class DeveloperCommands implements BUCommand { public final String commandName = "developer"; @Getter - public final Text description = Text.literal("Toggles developer mode.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Toggles developer mode.").withStyle(ChatFormatting.GRAY); @Getter private final List subcommands = List.of( @@ -68,7 +68,7 @@ private static final class RemoveCommand implements BUCommand { public final String commandName = "remove"; @Getter - public final Text description = Text.literal("Removes an order by index.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Removes an order by index.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder(LiteralArgumentBuilder base) { @@ -93,7 +93,7 @@ private static final class InfoCommand implements BUCommand { public final String commandName = "info"; @Getter - public final Text description = Text.literal("Prints info about an order by index.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Prints info about an order by index.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder(LiteralArgumentBuilder base) { @@ -115,7 +115,7 @@ private static final class OutdatedCommand implements BUCommand { public final String commandName = "outdated"; @Getter - public final Text description = Text.literal("Lists all outdated orders.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Lists all outdated orders.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder(LiteralArgumentBuilder base) { @@ -139,7 +139,7 @@ private static final class ConvertNameCommand implements BUCommand { public final String commandName = "convertname"; @Getter - public final Text description = Text.literal("Converts an item name to its product ID.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Converts an item name to its product ID.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder( @@ -152,7 +152,7 @@ private int convertNameToId(CommandContext context) { if (!isEnabled()) return 0; String name = StringArgumentType.getString(context, "item name").replaceAll("_", " "); - BazaarDataManager.findProductIdOptional(name).ifPresentOrElse( + BazaarDataUtil.findProductIdOptional(name).ifPresentOrElse( id -> PlayerActionUtil.notifyAll(name + ": " + id), () -> PlayerActionUtil.notifyAll("Could not find product ID for " + name) ); @@ -166,7 +166,7 @@ private static final class ListCommand implements BUCommand { public final String commandName = "list"; @Getter - public final Text description = Text.literal("Lists all watched orders.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Lists all watched orders.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder(LiteralArgumentBuilder base) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/commands/DiscordCommand.java b/src/main/java/com/github/mkram17/bazaarutils/commands/DiscordCommand.java index a02eeed9..5ef66bc3 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/commands/DiscordCommand.java +++ b/src/main/java/com/github/mkram17/bazaarutils/commands/DiscordCommand.java @@ -4,10 +4,10 @@ import com.github.mkram17.bazaarutils.utils.annotations.modules.Module; import lombok.Getter; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ConfirmLinkScreen; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.ConfirmLinkScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import java.net.URI; @@ -19,22 +19,22 @@ public final class DiscordCommand implements BUCommand { public final String commandName = "discord"; @Getter - public final Text description = Text.literal("Opens the BazaarUtils Discord invite.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Opens the BazaarUtils Discord invite.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder(LiteralArgumentBuilder base) { return base.executes(context -> { - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); - client.send(() -> client.setScreen(new ConfirmLinkScreen(confirmed -> { + client.schedule(() -> client.setScreen(new ConfirmLinkScreen(confirmed -> { if (confirmed) { try { - net.minecraft.util.Util.getOperatingSystem().open(new URI(Util.DISCORD_LINK)); + net.minecraft.util.Util.getPlatform().openUri(new URI(Util.DISCORD_LINK)); } catch (URISyntaxException e) { throw new RuntimeException(e); } } - MinecraftClient.getInstance().setScreen(null); + Minecraft.getInstance().setScreen(null); }, Util.DISCORD_LINK, true))); return 1; diff --git a/src/main/java/com/github/mkram17/bazaarutils/commands/HelpCommand.java b/src/main/java/com/github/mkram17/bazaarutils/commands/HelpCommand.java index f3532f20..f0fc342a 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/commands/HelpCommand.java +++ b/src/main/java/com/github/mkram17/bazaarutils/commands/HelpCommand.java @@ -9,9 +9,9 @@ import com.mojang.brigadier.context.CommandContext; import lombok.Getter; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import java.util.List; @@ -19,7 +19,7 @@ public final class HelpCommand implements BUCommand { @Getter public final String commandName = "help"; - @Getter public final Text description = Text.literal("Lists all available commands.").formatted(Formatting.GRAY); + @Getter public final Component description = Component.literal("Lists all available commands.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder(LiteralArgumentBuilder base) { @@ -29,26 +29,26 @@ public LiteralArgumentBuilder getCommandBuilder(Liter private int execute(CommandContext context) { BazaarUtilsCommands root = BazaarUtilsLateInitModules.BazaarUtilsCommands; - MutableText message = Text.literal("BazaarUtils Commands\n").formatted(Formatting.GOLD); + MutableComponent message = Component.literal("BazaarUtils Commands\n").withStyle(ChatFormatting.GOLD); - message.append(Text.literal("---------------------\n").formatted(Formatting.DARK_GRAY)); + message.append(Component.literal("---------------------\n").withStyle(ChatFormatting.DARK_GRAY)); for (BUCommand command : root.getSubcommands()) { appendCommand(message, command, "/bu"); } - message.append(Text.literal("---------------------").formatted(Formatting.DARK_GRAY)); + message.append(Component.literal("---------------------").withStyle(ChatFormatting.DARK_GRAY)); PlayerActionUtil.notifyAll(message.getString()); return 1; } - private void appendCommand(MutableText message, BUCommand command, String path) { + private void appendCommand(MutableComponent message, BUCommand command, String path) { String fullPath = path + " " + command.getCommandName(); - message.append(Text.literal(fullPath).formatted(Formatting.GREEN)); - message.append(Text.literal(" - ").formatted(Formatting.DARK_GRAY)); + message.append(Component.literal(fullPath).withStyle(ChatFormatting.GREEN)); + message.append(Component.literal(" - ").withStyle(ChatFormatting.DARK_GRAY)); message.append(command.getDescription()); - message.append(Text.literal("\n")); + message.append(Component.literal("\n")); for (BUCommand sub : command.getSubcommands()) { appendCommand(message, sub, fullPath); diff --git a/src/main/java/com/github/mkram17/bazaarutils/commands/UpdateResourcesCommand.java b/src/main/java/com/github/mkram17/bazaarutils/commands/UpdateResourcesCommand.java index bf0ab0a0..f25182c9 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/commands/UpdateResourcesCommand.java +++ b/src/main/java/com/github/mkram17/bazaarutils/commands/UpdateResourcesCommand.java @@ -5,8 +5,8 @@ import com.github.mkram17.bazaarutils.utils.annotations.modules.Module; import lombok.Getter; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import com.mojang.brigadier.builder.LiteralArgumentBuilder; @Module @@ -15,7 +15,7 @@ public final class UpdateResourcesCommand implements BUCommand { public final String commandName = "updateresources"; @Getter - public final Text description = Text.literal("Checks for and applies resource updates.").formatted(Formatting.GRAY); + public final Component description = Component.literal("Checks for and applies resource updates.").withStyle(ChatFormatting.GRAY); @Override public LiteralArgumentBuilder getCommandBuilder(LiteralArgumentBuilder base) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/features/KeybindConfig.java b/src/main/java/com/github/mkram17/bazaarutils/config/features/KeybindConfig.java index ae2ffa22..150268f3 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/features/KeybindConfig.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/features/KeybindConfig.java @@ -2,19 +2,19 @@ import com.github.mkram17.bazaarutils.BazaarUtils; import com.github.mkram17.bazaarutils.features.keybinds.StashHelper; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.util.InputUtil; -import net.minecraft.util.Identifier; +import net.minecraft.client.KeyMapping; +import com.mojang.blaze3d.platform.InputConstants; +import net.minecraft.resources.Identifier; import org.lwjgl.glfw.GLFW; public class KeybindConfig { - public static final KeyBinding.Category CATEGORY = KeyBinding.Category.create(Identifier.of(BazaarUtils.MOD_ID)); + public static final KeyMapping.Category CATEGORY = KeyMapping.Category.register(Identifier.parse(BazaarUtils.MOD_ID)); //Keybinds get registered on object creation. - public StashHelper stashHelper = new StashHelper(new KeyBinding( + public StashHelper stashHelper = new StashHelper(new KeyMapping( "Pick Up Stash", - InputUtil.Type.KEYSYM, + InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_V, CATEGORY )); diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ConfigPatches.java b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ConfigPatches.java index c661e5b4..f0414453 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ConfigPatches.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ConfigPatches.java @@ -12,7 +12,7 @@ import com.mojang.serialization.MapCodec; import com.mojang.serialization.JsonOps; import lombok.extern.slf4j.Slf4j; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/Patch.java b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/Patch.java index f6155a4f..516e57b1 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/Patch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/Patch.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.config.patcher; import com.google.gson.JsonObject; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; import java.util.function.UnaryOperator; public interface Patch extends UnaryOperator { diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddListPatch.java b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddListPatch.java index ddf3974a..8c2fd356 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddListPatch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddListPatch.java @@ -6,12 +6,12 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; import java.util.List; public record AddListPatch(String path, List inserts) implements Patch { - public static final Identifier ID = Identifier.of("bazaarutils", "add_list"); + public static final Identifier ID = Identifier.fromNamespaceAndPath("bazaarutils", "add_list"); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( Codec.STRING.fieldOf("path").forGetter(AddListPatch::path), JsonUtils.JSON_ELEMENT_CODEC.listOf().fieldOf("inserts").forGetter(AddListPatch::inserts) diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddPatch.java b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddPatch.java index 982b88f5..aadceab4 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddPatch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/AddPatch.java @@ -6,11 +6,11 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; public record AddPatch(String path, JsonElement insert) implements Patch { - public static final Identifier ID = Identifier.of("bazaarutils", "add"); + public static final Identifier ID = Identifier.fromNamespaceAndPath("bazaarutils", "add"); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( Codec.STRING.fieldOf("path").forGetter(AddPatch::path), JsonUtils.JSON_ELEMENT_CODEC.fieldOf("insert").forGetter(AddPatch::insert) diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/CompoundPatch.java b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/CompoundPatch.java index 54c1c212..64a2ee9a 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/CompoundPatch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/CompoundPatch.java @@ -5,12 +5,12 @@ import com.google.gson.JsonObject; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; import java.util.List; public record CompoundPatch(List patches) implements Patch { - public static final Identifier ID = Identifier.of("bazaarutils", "compound"); + public static final Identifier ID = Identifier.fromNamespaceAndPath("bazaarutils", "compound"); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( ConfigPatches.CODEC.listOf().fieldOf("patches").forGetter(CompoundPatch::patches) ).apply(i, CompoundPatch::new)); diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/MovePatch.java b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/MovePatch.java index 1b7d5028..ebdb0429 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/MovePatch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/MovePatch.java @@ -7,11 +7,11 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; public record MovePatch(String from, String to) implements Patch { - public static final Identifier ID = Identifier.of("bazaarutils", "move"); + public static final Identifier ID = Identifier.fromNamespaceAndPath("bazaarutils", "move"); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( Codec.STRING.fieldOf("from").forGetter(MovePatch::from), Codec.STRING.fieldOf("to").forGetter(MovePatch::to) diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/RemovePatch.java b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/RemovePatch.java index 4e11955a..04e9a16b 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/RemovePatch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/patcher/ops/RemovePatch.java @@ -7,11 +7,11 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; public record RemovePatch(String path) implements Patch { - public static final Identifier ID = Identifier.of("bazaarutils", "remove"); + public static final Identifier ID = Identifier.fromNamespaceAndPath("bazaarutils", "remove"); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( Codec.STRING.fieldOf("path").forGetter(RemovePatch::path) ).apply(i, RemovePatch::new)); diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/ConfigUtil.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/ConfigUtil.java index 78832040..5c9c84e8 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/ConfigUtil.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/ConfigUtil.java @@ -10,9 +10,9 @@ import com.teamresourceful.resourcefulconfig.api.client.ResourcefulConfigScreen; import com.teamresourceful.resourcefulconfig.api.loader.Configurator; import com.teamresourceful.resourcefulconfig.api.types.ResourcefulConfig; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ClickableWidget; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.AbstractWidget; import java.util.ArrayList; import java.util.List; @@ -35,9 +35,9 @@ public static Screen createGUI(Screen parent) { } public static void openGUI() { - MinecraftClient client = MinecraftClient.getInstance(); - Screen parent = client.currentScreen; - client.send(() -> client.setScreen(createGUI(parent))); + Minecraft client = Minecraft.getInstance(); + Screen parent = client.screen; + client.schedule(() -> client.setScreen(createGUI(parent))); } public static void scheduleConfigSave() { @@ -51,8 +51,8 @@ public static void scheduleConfigSave() { } } - public static List getWidgets(){ - List widgets = new ArrayList<>(); + public static List getWidgets(){ + List widgets = new ArrayList<>(); //automatically added using @RegisterWidget annotation return widgets; } diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ItemElement.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ItemElement.java index bf9ffe03..a80cc128 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ItemElement.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ItemElement.java @@ -8,8 +8,8 @@ import com.teamresourceful.resourcefulconfig.api.types.entries.ResourcefulConfigEntry; import com.teamresourceful.resourcefulconfig.api.types.entries.ResourcefulConfigValueEntry; import com.teamresourceful.resourcefulconfig.api.types.options.EntryType; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -59,21 +59,21 @@ public ResourcefulConfigValueEntry valueEntry() { return (ResourcefulConfigValueEntry) delegate.entry(); } - public Text title() { + public Component title() { Field field = entryField(); if (field != null) { ConfigEntry options = field.getAnnotation(ConfigEntry.class); if (options != null && !options.translation().isEmpty()) { - return Text.translatable(options.translation()); + return Component.translatable(options.translation()); } } - return Text.literal(delegate.id()); + return Component.literal(delegate.id()); } - public Text description() { + public Component description() { Field field = entryField(); if (field != null) { @@ -81,12 +81,12 @@ public Text description() { if (comment != null) { return !comment.translation().isEmpty() - ? Text.translatable(comment.translation()) - : Text.literal(comment.value()); + ? Component.translatable(comment.translation()) + : Component.literal(comment.value()); } } - return Text.empty(); + return Component.empty(); } @Override public ResourcefulConfigEntry entry() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ResourcefulConfigItems.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ResourcefulConfigItems.java index b992bd8f..35e572b2 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ResourcefulConfigItems.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/ResourcefulConfigItems.java @@ -1,10 +1,10 @@ package com.github.mkram17.bazaarutils.config.util.api; -import net.minecraft.item.Item; -import net.minecraft.registry.Registries; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.tags.TagKey; +import net.minecraft.resources.Identifier; import org.jetbrains.annotations.Nullable; import java.util.HashMap; @@ -25,14 +25,14 @@ public final class ResourcefulConfigItems { if (identifier == null) return null; return source.get().stream() - .filter(item -> Registries.ITEM.getId(item).equals(identifier)) + .filter(item -> BuiltInRegistries.ITEM.getKey(item).equals(identifier)) .findFirst() .orElse(null); }); } - private static Supplier> source = () -> Registries.ITEM.stream().toList(); + private static Supplier> source = () -> BuiltInRegistries.ITEM.stream().toList(); public static void setSource(Supplier> source) { ResourcefulConfigItems.source = source; @@ -53,8 +53,8 @@ public static List getItems(String tag) { if (tag == null || tag.isEmpty()) return base; Identifier tagId = Identifier.tryParse(tag); if (tagId == null) return base; - TagKey tagKey = TagKey.of(RegistryKeys.ITEM, tagId); - return base.stream().filter(item -> item.getRegistryEntry().isIn(tagKey)).toList(); + TagKey tagKey = TagKey.create(Registries.ITEM, tagId); + return base.stream().filter(item -> item.builtInRegistryHolder().is(tagKey)).toList(); } public static List getItems() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotElement.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotElement.java index 253c8549..720887a4 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotElement.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotElement.java @@ -8,8 +8,8 @@ import com.teamresourceful.resourcefulconfig.api.types.entries.ResourcefulConfigEntry; import com.teamresourceful.resourcefulconfig.api.types.entries.ResourcefulConfigValueEntry; import com.teamresourceful.resourcefulconfig.api.types.options.EntryType; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -65,19 +65,19 @@ public ResourcefulConfigValueEntry valueEntry() { return (ResourcefulConfigValueEntry) delegate.entry(); } - public Text title() { + public Component title() { Field field = entryField(delegate); if (field != null) { ConfigEntry options = field.getAnnotation(ConfigEntry.class); - if (options != null && !options.translation().isEmpty()) return Text.translatable(options.translation()); + if (options != null && !options.translation().isEmpty()) return Component.translatable(options.translation()); } - return Text.literal(delegate.id()); + return Component.literal(delegate.id()); } - public Text description() { + public Component description() { Field field = entryField(delegate); if (field != null) { @@ -85,12 +85,12 @@ public Text description() { if (comment != null) { return !comment.translation().isEmpty() - ? Text.translatable(comment.translation()) - : Text.literal(comment.value()); + ? Component.translatable(comment.translation()) + : Component.literal(comment.value()); } } - return Text.empty(); + return Component.empty(); } @Override public ResourcefulConfigEntry entry() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProvider.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProvider.java index 2098bc1a..3964da15 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProvider.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProvider.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.config.util.api; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.ItemStack; @FunctionalInterface public interface SlotProvider { diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProviders.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProviders.java index 98d6dfef..d6641cbe 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProviders.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/api/SlotProviders.java @@ -2,8 +2,8 @@ import com.github.mkram17.bazaarutils.utils.minecraft.item.ItemBuilder; import com.github.mkram17.bazaarutils.utils.minecraft.item.ItemButton; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRenderer.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRenderer.java index 90d2c6d6..8b68dc24 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRenderer.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRenderer.java @@ -7,27 +7,27 @@ import com.github.mkram17.bazaarutils.config.util.client.components.options.ResetOptionWidget; import com.teamresourceful.resourcefulconfig.api.client.ResourcefulConfigElementRenderer; import com.teamresourceful.resourcefulconfig.api.types.entries.ResourcefulConfigValueEntry; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.item.Item; -import net.minecraft.registry.Registries; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.world.item.Item; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; import java.util.List; public record ItemRenderer(ItemElement element) implements ResourcefulConfigElementRenderer { @Override - public Text title() { + public Component title() { return element.title(); } @Override - public Text description() { + public Component description() { return element.description(); } @Override - public List widgets() { + public List widgets() { ResourcefulConfigValueEntry entry = element.valueEntry(); List items = ResourcefulConfigItems.getItems(element.tag()); diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRendererProvider.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRendererProvider.java index 8576fdd3..527d86ab 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRendererProvider.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/ItemRendererProvider.java @@ -2,14 +2,14 @@ import com.github.mkram17.bazaarutils.config.util.api.ItemElement; import com.teamresourceful.resourcefulconfig.api.client.ResourcefulConfigUI; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; public final class ItemRendererProvider { private ItemRendererProvider() {} public static void register() { ResourcefulConfigUI.registerElementRenderer( - Identifier.of("bazaarutils", "item"), + Identifier.fromNamespaceAndPath("bazaarutils", "item"), element -> { ItemElement ie = ItemElement.wrap(element); return ie != null ? new ItemRenderer(ie) : null; diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRenderer.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRenderer.java index ce49720c..bed26300 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRenderer.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRenderer.java @@ -6,24 +6,24 @@ import com.github.mkram17.bazaarutils.config.util.client.components.options.types.SlotOptionWidget; import com.teamresourceful.resourcefulconfig.api.client.ResourcefulConfigElementRenderer; import com.teamresourceful.resourcefulconfig.api.types.entries.ResourcefulConfigValueEntry; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.network.chat.Component; import java.util.List; public record SlotRenderer(SlotElement element) implements ResourcefulConfigElementRenderer { @Override - public Text title() { + public Component title() { return element.title(); } @Override - public Text description() { + public Component description() { return element.description(); } @Override - public List widgets() { + public List widgets() { ResourcefulConfigValueEntry entry = element.valueEntry(); SlotOptionWidget slotWidget = new SlotOptionWidget( @@ -34,7 +34,7 @@ public List widgets() { SlotNumberOptionWidget numberWidget = new SlotNumberOptionWidget(element); - ClickableWidget resetWidget = ResetOptionWidget.of(() -> { + AbstractWidget resetWidget = ResetOptionWidget.of(() -> { entry.reset(); numberWidget.reset(); }); diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRendererProvider.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRendererProvider.java index c710a70a..550aeef9 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRendererProvider.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/SlotRendererProvider.java @@ -4,16 +4,16 @@ import com.github.mkram17.bazaarutils.config.util.api.SlotElement; import com.github.mkram17.bazaarutils.config.util.api.SlotProviders; import com.teamresourceful.resourcefulconfig.api.client.ResourcefulConfigUI; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.Identifier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.resources.Identifier; public final class SlotRendererProvider { private SlotRendererProvider() {} public static void register() { ResourcefulConfigUI.registerElementRenderer( - Identifier.of("bazaarutils", "slot"), + Identifier.fromNamespaceAndPath("bazaarutils", "slot"), element -> { SlotElement se = SlotElement.wrap(element); return se != null ? new SlotRenderer(se) : null; diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/AbstractSelectorOverlay.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/AbstractSelectorOverlay.java index bc1b8b72..08139b8a 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/AbstractSelectorOverlay.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/AbstractSelectorOverlay.java @@ -2,17 +2,17 @@ import com.teamresourceful.resourcefulconfig.client.components.ModSprites; import com.teamresourceful.resourcefulconfig.client.screens.base.OverlayScreen; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.RenderPipelines; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.gui.GuiGraphics; import org.jetbrains.annotations.NotNull; public abstract class AbstractSelectorOverlay extends OverlayScreen { protected int ox, oy, ow, oh; protected AbstractSelectorOverlay() { - super(MinecraftClient.getInstance().currentScreen); + super(Minecraft.getInstance().screen); } protected boolean isOverOverlay(double mouseX, double mouseY) { @@ -20,19 +20,19 @@ protected boolean isOverOverlay(double mouseX, double mouseY) { } @Override - public void renderBackground(@NotNull DrawContext context, int mouseX, int mouseY, float delta) { + public void renderBackground(@NotNull GuiGraphics context, int mouseX, int mouseY, float delta) { super.renderBackground(context, mouseX, mouseY, delta); - context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, ModSprites.ACCENT, ox, oy, ow, oh); - context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, ModSprites.BUTTON, ox + 1, oy + 1, ow - 2, oh - 2); + context.blitSprite(RenderPipelines.GUI_TEXTURED, ModSprites.ACCENT, ox, oy, ow, oh); + context.blitSprite(RenderPipelines.GUI_TEXTURED, ModSprites.BUTTON, ox + 1, oy + 1, ow - 2, oh - 2); } @Override - public boolean mouseClicked(Click click, boolean doubled) { + public boolean mouseClicked(MouseButtonEvent click, boolean doubled) { if (click.button() != 0 || isOverOverlay(click.x(), click.y())) { return super.mouseClicked(click, doubled); } - close(); + onClose(); return false; } diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/ResetOptionWidget.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/ResetOptionWidget.java index 88758b3c..812a0cfd 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/ResetOptionWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/ResetOptionWidget.java @@ -3,12 +3,12 @@ import com.teamresourceful.resourcefulconfig.client.UIConstants; import com.teamresourceful.resourcefulconfig.client.components.ModSprites; import com.teamresourceful.resourcefulconfig.client.components.base.SpriteButton; -import net.minecraft.client.gui.widget.ClickableWidget; +import net.minecraft.client.gui.components.AbstractWidget; public final class ResetOptionWidget { private ResetOptionWidget() {} - public static ClickableWidget of(Runnable onPress) { + public static AbstractWidget of(Runnable onPress) { return SpriteButton.builder(12, 12) .padding(2) .sprite(ModSprites.RESET) diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/SelectorOptionWidget.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/SelectorOptionWidget.java index 4fc50c7a..35b6db84 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/SelectorOptionWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/SelectorOptionWidget.java @@ -2,13 +2,13 @@ import com.teamresourceful.resourcefulconfig.client.components.base.SpriteButton; import com.teamresourceful.resourcefulconfig.client.components.options.types.ResetableWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; public abstract class SelectorOptionWidget extends SpriteButton implements ResetableWidget { - protected static final Text SELECT = Text.translatable("bazaarutils.rconfig.ui.constant.select"); + protected static final Component SELECT = Component.translatable("bazaarutils.rconfig.ui.constant.select"); - protected SelectorOptionWidget(Identifier sprite, Text tooltip) { + protected SelectorOptionWidget(Identifier sprite, Component tooltip) { super(12, 12, 2, sprite, () -> {}, tooltip); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemOptionWidget.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemOptionWidget.java index ffd751d2..e8ce08fd 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemOptionWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemOptionWidget.java @@ -8,18 +8,18 @@ import com.teamresourceful.resourcefulconfig.client.components.ModSprites; import com.teamresourceful.resourcefulconfig.client.components.options.text.TextBox; import com.teamresourceful.resourcefulconfig.client.utils.ListenableState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.RenderPipelines; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.input.AbstractInput; -import net.minecraft.client.input.CharInput; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.input.InputWithModifiers; +import net.minecraft.client.input.CharacterEvent; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; +import net.minecraft.util.Mth; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,7 +29,7 @@ import java.util.function.Supplier; public class ItemOptionWidget extends SelectorOptionWidget { - protected static final Text SEARCH = Text.translatable("bazaarutils.rconfig.ui.constant.search"); + protected static final Component SEARCH = Component.translatable("bazaarutils.rconfig.ui.constant.search"); private final List items; private final Supplier getter; @@ -43,19 +43,19 @@ public ItemOptionWidget(List items, Supplier getter, Consumer cellWidgets = new ArrayList<>(); + private final List cellWidgets = new ArrayList<>(); private TextBox searchBox; @@ -105,10 +105,10 @@ private int overlayHeight() { } private void rebuildCells() { - cellWidgets.forEach(this::remove); + cellWidgets.forEach(this::removeWidget); cellWidgets.clear(); - scrollOffset = MathHelper.clamp(scrollOffset, 0, maxScroll()); + scrollOffset = Mth.clamp(scrollOffset, 0, maxScroll()); oh = overlayHeight(); int startX = ox + PADDING; @@ -128,12 +128,12 @@ private void rebuildCells() { startY + row * ContainerCell.CELL_SIZE, item, selected -> { - this.setter.accept(Registries.ITEM.getId(selected).toString()); - close(); + this.setter.accept(BuiltInRegistries.ITEM.getKey(selected).toString()); + onClose(); } ); cellWidgets.add(cell); - addDrawableChild(cell); + addRenderableWidget(cell); } } @@ -145,7 +145,7 @@ private void applySearch(String query) { if (q.isEmpty()) return true; String name = item.getName(new ItemStack(item)).getString().toLowerCase(); - String key = Registries.ITEM.getId(item).toString().toLowerCase(); + String key = BuiltInRegistries.ITEM.getKey(item).toString().toLowerCase(); return name.contains(q) || key.contains(q); }).toList(); @@ -161,7 +161,7 @@ protected void init() { : source.getY() - oh - SPACING; int centerX = source.getX() + source.getWidth() / 2; - ox = MathHelper.clamp(centerX - ow / 2, 0, this.width - ow); + ox = Mth.clamp(centerX - ow / 2, 0, this.width - ow); ListenableState searchState = ListenableState.of(""); searchState.registerListener(q -> { @@ -171,21 +171,21 @@ protected void init() { this.searchBox = new TextBox(ow - PADDING * 2, SEARCH_HEIGHT, searchState) { @Override - public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, ModSprites.BUTTON, getX(), getY(), getWidth(), getHeight()); + public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { + context.blitSprite(RenderPipelines.GUI_TEXTURED, ModSprites.BUTTON, getX(), getY(), getWidth(), getHeight()); super.renderWidget(context, mouseX, mouseY, delta); this.applyCursor(context); } }; this.searchBox.setPosition(ox + PADDING, oy + PADDING); this.searchBox.setPlaceholder(SEARCH.getString(), 0xFF808080); - addDrawableChild(this.searchBox); + addRenderableWidget(this.searchBox); rebuildCells(); } @Override - public void renderBackground(@NotNull DrawContext context, int mouseX, int mouseY, float delta) { + public void renderBackground(@NotNull GuiGraphics context, int mouseX, int mouseY, float delta) { super.renderBackground(context, mouseX, mouseY, delta); if (maxScroll() > 0) { @@ -202,7 +202,7 @@ public void renderBackground(@NotNull DrawContext context, int mouseX, int mouse public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if (!isOverOverlay(mouseX, mouseY)) return false; - int newOffset = MathHelper.clamp(scrollOffset - (int) Math.signum(scrollY), 0, maxScroll()); + int newOffset = Mth.clamp(scrollOffset - (int) Math.signum(scrollY), 0, maxScroll()); if (newOffset != scrollOffset) { scrollOffset = newOffset; @@ -213,7 +213,7 @@ public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, doubl } @Override - public boolean charTyped(CharInput input) { + public boolean charTyped(CharacterEvent input) { if (searchBox != null && !searchBox.isFocused()) { setInitialFocus(searchBox); return searchBox.charTyped(input); diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemStringOptionWidget.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemStringOptionWidget.java index 98ebba38..6ef59ee9 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemStringOptionWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/ItemStringOptionWidget.java @@ -3,10 +3,10 @@ import com.github.mkram17.bazaarutils.config.util.api.ResourcefulConfigItems; import com.teamresourceful.resourcefulconfig.client.components.options.types.ResetableWidget; import com.teamresourceful.resourcefulconfig.client.components.options.types.StringOptionWidget; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; import java.util.function.Function; import java.util.function.Supplier; diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotNumberOptionWidget.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotNumberOptionWidget.java index 37befe7c..0ed18e78 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotNumberOptionWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotNumberOptionWidget.java @@ -4,7 +4,7 @@ import com.github.mkram17.bazaarutils.utils.minecraft.components.CustomDataComponents; import com.teamresourceful.resourcefulconfig.client.components.options.types.NumberOptionWidget; import com.teamresourceful.resourcefulconfig.client.components.options.types.ResetableWidget; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.ItemStack; public class SlotNumberOptionWidget extends NumberOptionWidget implements ResetableWidget { private final int maxSlot; @@ -26,7 +26,7 @@ public SlotNumberOptionWidget(SlotElement element) { // not the last saved/valid value. This is a implementation detail of NumberOptionWidget, // and although we may override and fix it with a custom setChangedListener(...) call, // it'd be better off if upstream fixes this behavior. - if (!stack.isEmpty() && stack.contains(CustomDataComponents.SLOT_SELECTOR_LOCKED)) throw new NumberFormatException(); + if (!stack.isEmpty() && stack.has(CustomDataComponents.SLOT_SELECTOR_LOCKED)) throw new NumberFormatException(); return value; }, NumberOptionWidget.INTEGER_FILTER diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotOptionWidget.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotOptionWidget.java index 6d8c610d..89af89fe 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotOptionWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/SlotOptionWidget.java @@ -6,10 +6,10 @@ import com.github.mkram17.bazaarutils.config.util.client.components.options.types.selector.ContainerCell; import com.teamresourceful.resourcefulconfig.client.UIConstants; import com.teamresourceful.resourcefulconfig.client.components.ModSprites; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.world.item.ItemStack; +import net.minecraft.util.Mth; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -32,8 +32,8 @@ public SlotOptionWidget(SlotElement element, Supplier getter, Consumer< } @Override - public void onPress(@NotNull net.minecraft.client.input.AbstractInput modifiers) { - MinecraftClient.getInstance().setScreen(new SlotSelector(this, element, getter.get(), setter)); + public void onPress(@NotNull net.minecraft.client.input.InputWithModifiers modifiers) { + Minecraft.getInstance().setScreen(new SlotSelector(this, element, getter.get(), setter)); } public static class SlotSelector extends AbstractSelectorOverlay { @@ -48,7 +48,7 @@ public static class SlotSelector extends AbstractSelectorOverlay { private final int selectedSlot; - private final List cellWidgets = new ArrayList<>(); + private final List cellWidgets = new ArrayList<>(); public SlotSelector(SlotOptionWidget source, SlotElement element, int currentSlot, Consumer setter) { this.source = source; @@ -58,7 +58,7 @@ public SlotSelector(SlotOptionWidget source, SlotElement element, int currentSlo } private void rebuildCells() { - cellWidgets.forEach(this::remove); + cellWidgets.forEach(this::removeWidget); cellWidgets.clear(); int startX = ox + PADDING; @@ -77,11 +77,11 @@ private void rebuildCells() { slot == selectedSlot, () -> { setter.accept(s); - close(); + onClose(); } ); cellWidgets.add(cell); - addDrawableChild(cell); + addRenderableWidget(cell); } } @@ -95,7 +95,7 @@ protected void init() { : source.getY() - oh - SPACING; int centerX = source.getX() + source.getWidth() / 2; - ox = MathHelper.clamp(centerX - ow / 2, 0, this.width - ow); + ox = Mth.clamp(centerX - ow / 2, 0, this.width - ow); rebuildCells(); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ContainerCell.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ContainerCell.java index c8eb0423..868c481b 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ContainerCell.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ContainerCell.java @@ -2,21 +2,21 @@ import com.github.mkram17.bazaarutils.utils.minecraft.components.CustomDataComponents; import com.teamresourceful.resourcefulconfig.client.components.base.BaseWidget; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.RenderPipelines; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.TooltipDisplayComponent; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.TooltipDisplay; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.resources.Identifier; import org.jetbrains.annotations.NotNull; public class ContainerCell extends BaseWidget { public static final int CELL_SIZE = 18; - private static final Identifier SLOT_SPRITE = Identifier.ofVanilla("container/slot"); + private static final Identifier SLOT_SPRITE = Identifier.withDefaultNamespace("container/slot"); private final ItemStack stack; @@ -29,13 +29,13 @@ public ContainerCell(int x, int y, ItemStack stack, boolean selected, Runnable o setPosition(x, y); this.stack = stack; this.selected = selected; - this.active = !(!stack.isEmpty() && stack.contains(CustomDataComponents.SLOT_SELECTOR_LOCKED)); + this.active = !(!stack.isEmpty() && stack.has(CustomDataComponents.SLOT_SELECTOR_LOCKED)); this.onSelect = onSelect; } @Override - protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, SLOT_SPRITE, getX(), getY(), CELL_SIZE, CELL_SIZE); + protected void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { + context.blitSprite(RenderPipelines.GUI_TEXTURED, SLOT_SPRITE, getX(), getY(), CELL_SIZE, CELL_SIZE); if (selected) { context.fill(getX() + 1, getY() + 1, getX() + CELL_SIZE - 1, getY() + CELL_SIZE - 1, 0x8800AA00); @@ -44,12 +44,12 @@ protected void renderWidget(DrawContext context, int mouseX, int mouseY, float d } if (!stack.isEmpty()) { - context.drawItem(stack, getX() + 1, getY() + 1); + context.renderItem(stack, getX() + 1, getY() + 1); - if (isHovered() && !stack.getOrDefault(DataComponentTypes.TOOLTIP_DISPLAY, TooltipDisplayComponent.DEFAULT).hideTooltip()) { - context.drawTooltip( - MinecraftClient.getInstance().textRenderer, - stack.getTooltip(Item.TooltipContext.DEFAULT, null, TooltipType.BASIC), + if (isHovered() && !stack.getOrDefault(DataComponents.TOOLTIP_DISPLAY, TooltipDisplay.DEFAULT).hideTooltip()) { + context.setComponentTooltipForNextFrame( + Minecraft.getInstance().font, + stack.getTooltipLines(Item.TooltipContext.EMPTY, null, TooltipFlag.NORMAL), mouseX, mouseY ); } @@ -59,7 +59,7 @@ protected void renderWidget(DrawContext context, int mouseX, int mouseY, float d } @Override - public void onClick(@NotNull Click event, boolean doubled) { + public void onClick(@NotNull MouseButtonEvent event, boolean doubled) { onSelect.run(); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ItemCell.java b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ItemCell.java index 9474dac8..3b272baa 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ItemCell.java +++ b/src/main/java/com/github/mkram17/bazaarutils/config/util/client/components/options/types/selector/ItemCell.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.config.util.client.components.options.types.selector; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import java.util.function.Consumer; diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/BazaarDataUpdateEvent.java b/src/main/java/com/github/mkram17/bazaarutils/events/BazaarDataUpdateEvent.java index f407a555..483487c1 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/BazaarDataUpdateEvent.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/BazaarDataUpdateEvent.java @@ -1,40 +1,28 @@ package com.github.mkram17.bazaarutils.events; -import lombok.AllArgsConstructor; +import com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers.CustomBazaarReply; import lombok.Getter; import meteordevelopment.orbit.ICancellable; -import net.hypixel.api.reply.skyblock.SkyBlockBazaarReply; /** * Event fired when bazaar data is updated from the Hypixel API. *

* This event is triggered whenever fresh bazaar market data is retrieved from the Hypixel API. - * It provides access to the complete bazaar reply containing all current market prices, volumes, - * and other bazaar statistics. + * It provides access to the converted custom bazaar reply containing all current market prices, + * volumes, and other bazaar statistics. *

- * - *

Usage Example:

- *
- * {@code
- * @EventHandler
- * public void onBazaarDataUpdate(BazaarDataUpdateEvent event) {
- *     SkyBlockBazaarReply reply = event.getBazaarReply();
- *     // Update local cache with new market data
- *     updatePriceCache(reply);
- * }
- * }
- * 
- * - * @see SkyBlockBazaarReply */ -@AllArgsConstructor public class BazaarDataUpdateEvent implements ICancellable { /** - * The bazaar data reply from the Hypixel API containing current market information. + * The converted bazaar data reply containing current market information. */ @Getter - private SkyBlockBazaarReply bazaarReply; + private final CustomBazaarReply bazaarReply; + + public BazaarDataUpdateEvent(CustomBazaarReply bazaarReply) { + this.bazaarReply = bazaarReply; + } @Override public void setCancelled(boolean cancelled) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/ChestLoadedEvent.java b/src/main/java/com/github/mkram17/bazaarutils/events/ChestLoadedEvent.java index b0e0bbee..5dd7174a 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/ChestLoadedEvent.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/ChestLoadedEvent.java @@ -8,14 +8,14 @@ import com.github.mkram17.bazaarutils.utils.Util; import lombok.Getter; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.inventory.ChestMenu; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.List; @@ -53,7 +53,7 @@ * The event uses a polling mechanism that checks every 40ms (up to 50 attempts / 2 seconds) * to determine when the GUI is fully loaded. * - * @see Inventory + * @see Container * @see ItemStack */ public class ChestLoadedEvent { @@ -61,13 +61,13 @@ public class ChestLoadedEvent { * The container that is being displayed. */ @Getter - private GenericContainerScreen genericContainerScreen; + private ContainerScreen genericContainerScreen; /** * The inventory of the lower chest/container (this is actually the inventory on top, NOT the player's inventory (ask Mojang, not me)). */ @Getter - private Inventory lowerChestInventory; + private Container lowerChestInventory; /** * List of all non-empty item stacks in the container. @@ -88,7 +88,7 @@ public class ChestLoadedEvent { @RunOnInit public static void registerScreenEvent() { ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { - if (screen instanceof GenericContainerScreen gcs) { + if (screen instanceof ContainerScreen gcs) { // Use an AtomicInteger for mutable integer in lambda final AtomicInteger attempts = new AtomicInteger(0); final int MAX_ATTEMPTS = 50; // ~2.5 seconds timeout (50 * 1 tick) @@ -98,15 +98,15 @@ public static void registerScreenEvent() { @Override public void run() { // Ensure we are still on the same screen - if (client.currentScreen != gcs) { + if (client.screen != gcs) { return; } - ScreenHandler handler = gcs.getScreenHandler(); - if (handler instanceof GenericContainerScreenHandler containerHandler) { - Inventory inv = containerHandler.getInventory(); + AbstractContainerMenu handler = gcs.getMenu(); + if (handler instanceof ChestMenu containerHandler) { + Container inv = containerHandler.getContainer(); // Check if inventory is populated and not in a loading state - if (!inv.isEmpty() && !inv.getStack(inv.size() - 1).isEmpty() && !isItemLoading(inv)) { + if (!inv.isEmpty() && !inv.getItem(inv.getContainerSize() - 1).isEmpty() && !isItemLoading(inv)) { // GUI is loaded, post the event ChestLoadedEvent event = new ChestLoadedEvent(); event.lowerChestInventory = inv; @@ -127,10 +127,10 @@ public void run() { }); } - private static List getChestItemSlots(Inventory inventory) { + private static List getChestItemSlots(Container inventory) { List stacks = new ArrayList<>(); - for (int i = 0; i < inventory.size(); i++) { - ItemStack stack = inventory.getStack(i); + for (int i = 0; i < inventory.getContainerSize(); i++) { + ItemStack stack = inventory.getItem(i); if (!stack.isEmpty()) { stacks.add(stack); } @@ -138,12 +138,12 @@ private static List getChestItemSlots(Inventory inventory) { return stacks; } - private static boolean isItemLoading(Inventory inventory) { - for (int i = 0; i < inventory.size(); i++) { - ItemStack item = inventory.getStack(i); + private static boolean isItemLoading(Container inventory) { + for (int i = 0; i < inventory.getContainerSize(); i++) { + ItemStack item = inventory.getItem(i); if (item.isEmpty()) continue; - Text customName = item.get(DataComponentTypes.CUSTOM_NAME); + Component customName = item.get(DataComponents.CUSTOM_NAME); if (customName == null) continue; String name = Util.removeFormatting(customName.getString()); @@ -154,10 +154,10 @@ private static boolean isItemLoading(Inventory inventory) { // Only bottleneck on lore data of items known to have partialized lore if (name.contains("Sell")) { - LoreComponent lore = item.get(DataComponentTypes.LORE); + ItemLore lore = item.get(DataComponents.LORE); if (lore != null && !lore.lines().isEmpty()) { - for (Text line : lore.lines()) { + for (Component line : lore.lines()) { if (Util.removeFormatting(line.getString()).contains("Loading")) { return true; } diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/ReplaceItemEvent.java b/src/main/java/com/github/mkram17/bazaarutils/events/ReplaceItemEvent.java index 9768229e..98bc01b0 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/ReplaceItemEvent.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/ReplaceItemEvent.java @@ -3,8 +3,8 @@ import lombok.Getter; import lombok.Setter; import meteordevelopment.orbit.ICancellable; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.ItemStack; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; /** * Event fired when an item in an inventory is about to be replaced. @@ -27,7 +27,7 @@ * * * @see ItemStack - * @see SimpleInventory + * @see SimpleContainer */ public class ReplaceItemEvent implements ICancellable { /** @@ -40,7 +40,7 @@ public class ReplaceItemEvent implements ICancellable { * The inventory containing the item being replaced. */ @Getter - private final SimpleInventory inventory; + private final SimpleContainer inventory; /** * The slot ID where the replacement is occurring. @@ -62,7 +62,7 @@ public class ReplaceItemEvent implements ICancellable { * @param inventory the inventory containing the item * @param slotId the slot where the replacement occurs */ - public ReplaceItemEvent(ItemStack original, SimpleInventory inventory, int slotId) { + public ReplaceItemEvent(ItemStack original, SimpleContainer inventory, int slotId) { this.original = original; this.inventory = inventory; this.slotId = slotId; diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/ScreenChangeEvent.java b/src/main/java/com/github/mkram17/bazaarutils/events/ScreenChangeEvent.java index e2bc6d33..525f1f1a 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/ScreenChangeEvent.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/ScreenChangeEvent.java @@ -3,7 +3,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screens.Screen; /** * Event fired when the player's current screen changes. @@ -23,7 +23,7 @@ * } * } * - * @see com.github.mkram17.bazaarutils.mixin.MinecraftClientMixin + * @see com.github.mkram17.bazaarutils.mixin.MinecraftMixin */ @AllArgsConstructor public class ScreenChangeEvent { diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/SignOpenEvent.java b/src/main/java/com/github/mkram17/bazaarutils/events/SignOpenEvent.java index 54e7239b..cbdaca39 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/SignOpenEvent.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/SignOpenEvent.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.events; import lombok.Getter; -import net.minecraft.client.gui.screen.ingame.SignEditScreen; +import net.minecraft.client.gui.screens.inventory.SignEditScreen; /** * Event fired when a sign editing screen is opened. diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/SlotClickEvent.java b/src/main/java/com/github/mkram17/bazaarutils/events/SlotClickEvent.java index 963202f2..abb2aa60 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/SlotClickEvent.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/SlotClickEvent.java @@ -3,9 +3,9 @@ import lombok.Getter; import lombok.Setter; import meteordevelopment.orbit.ICancellable; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.screen.slot.Slot; -import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.inventory.ClickType; import org.jetbrains.annotations.NotNull; /** @@ -30,16 +30,16 @@ * } * * - * @see HandledScreen + * @see AbstractContainerScreen * @see Slot - * @see SlotActionType + * @see ClickType */ public class SlotClickEvent implements ICancellable { /** * The screen where the slot was clicked. */ @NotNull - public final HandledScreen handledScreen; + public final AbstractContainerScreen handledScreen; /** * The slot that was clicked. @@ -61,7 +61,7 @@ public class SlotClickEvent implements ICancellable { /** * The type of click action performed. */ - public SlotActionType clickType; + public ClickType clickType; /** * If true, the pickblock action will be used instead of the normal click action. @@ -84,7 +84,7 @@ public class SlotClickEvent implements ICancellable { * @param clickedButton the mouse button clicked * @param actionType the type of click action */ - public SlotClickEvent(HandledScreen handledScreen, Slot slot, int slotId, int clickedButton, SlotActionType actionType) { + public SlotClickEvent(AbstractContainerScreen handledScreen, Slot slot, int slotId, int clickedButton, ClickType actionType) { this.handledScreen = handledScreen; this.slot = slot; this.slotId = slotId; diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/handler/BazaarChatEventHandler.java b/src/main/java/com/github/mkram17/bazaarutils/events/handler/BazaarChatEventHandler.java index da22f135..57b9e580 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/handler/BazaarChatEventHandler.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/handler/BazaarChatEventHandler.java @@ -2,7 +2,7 @@ import com.github.mkram17.bazaarutils.config.BUConfig; import com.github.mkram17.bazaarutils.config.features.notification.NotificationsConfig; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.events.BazaarChatEvent; import com.github.mkram17.bazaarutils.features.gui.overlays.BazaarLimitsVisualizer; import com.github.mkram17.bazaarutils.misc.NotificationType; diff --git a/src/main/java/com/github/mkram17/bazaarutils/events/handler/ChatHandler.java b/src/main/java/com/github/mkram17/bazaarutils/events/handler/ChatHandler.java index 46885892..d6a9b989 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/events/handler/ChatHandler.java +++ b/src/main/java/com/github/mkram17/bazaarutils/events/handler/ChatHandler.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.events.handler; import com.github.mkram17.bazaarutils.config.BUConfig; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.events.BazaarChatEvent; import com.github.mkram17.bazaarutils.misc.NotificationType; import com.github.mkram17.bazaarutils.utils.annotations.autoregistration.RunOnInit; @@ -12,7 +12,7 @@ import com.github.mkram17.bazaarutils.utils.Util; import com.github.mkram17.bazaarutils.utils.minecraft.components.TextSearch; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.List; @@ -53,7 +53,7 @@ public static void registerBazaarChat() { return; } - ArrayList siblings = new ArrayList<>(message.getSiblings()); + ArrayList siblings = new ArrayList<>(message.getSiblings()); getMessageType(message, siblings).ifPresent(messageType -> { switch (messageType) { @@ -76,7 +76,7 @@ public static void registerBazaarChat() { * @param siblings the individual text components of the message * @return the bazaar event type if detected, empty otherwise */ - private static Optional getMessageType(Text message, ArrayList siblings) { + private static Optional getMessageType(Component message, ArrayList siblings) { if (siblings.isEmpty() && message.getString().contains("was filled!")) { return Optional.of(BazaarChatEvent.BazaarEventTypes.ORDER_FILLED); } @@ -122,7 +122,7 @@ private static Optional getMessageType(Text me * @param priceIndex index of the price component * @return the parsed order information if successful, empty otherwise */ - private static Optional parseOrderData(ArrayList siblings, int volumeIndex, int nameIndex, int priceIndex, TransactionType.Side side) { + private static Optional parseOrderData(ArrayList siblings, int volumeIndex, int nameIndex, int priceIndex, TransactionType.Side side) { try { String volumeString = siblings.get(volumeIndex).getString().replace(",", ""); int volume = Integer.parseInt(volumeString); @@ -141,7 +141,7 @@ private static Optional parseOrderData(ArrayList siblings, int return Optional.of(new OrderInfo(name, side, null, volume, pricePerUnit, null)); } catch (Exception e) { - Util.notifyError("Failed to parse order data from chat: " + siblings.stream().map(Text::getString), e); + Util.notifyError("Failed to parse order data from chat: " + siblings.stream().map(Component::getString), e); return Optional.empty(); } } @@ -157,7 +157,7 @@ private static Optional parseOrderData(ArrayList siblings, int * @param priceIndex index of the price component */ private static void processOrderEvent( - ArrayList siblings, + ArrayList siblings, BazaarChatEvent.BazaarEventTypes eventType, TransactionType transactionType, int volumeIndex, @@ -176,7 +176,7 @@ private static void processOrderEvent( * * @param siblings the text components of the message */ - public static void handleFlip(ArrayList siblings) { + public static void handleFlip(ArrayList siblings) { int priceIndex = TextSearch.indexOf(siblings, "for") + 1; processOrderEvent(siblings, BazaarChatEvent.BazaarEventTypes.ORDER_FLIPPED, TransactionType.of(TransactionType.Side.SELL, TransactionType.Method.ORDER), 3, 4, priceIndex); } @@ -186,7 +186,7 @@ public static void handleFlip(ArrayList siblings) { * * @param siblings the text components of the message */ - public static void handleCancelled(ArrayList siblings) { + public static void handleCancelled(ArrayList siblings) { int priceIndex = TextSearch.indexOf(siblings, "for") + 1; processOrderEvent(siblings, BazaarChatEvent.BazaarEventTypes.ORDER_CANCELLED, TransactionType.of(TransactionType.Side.SELL, TransactionType.Method.ORDER), 2, 4, priceIndex); @@ -197,7 +197,7 @@ public static void handleCancelled(ArrayList siblings) { * * @param siblings the text components of the message */ - public static void handleInstaSell(ArrayList siblings) { + public static void handleInstaSell(ArrayList siblings) { int priceIndex = TextSearch.indexOf(siblings, "for") + 1; processOrderEvent(siblings, BazaarChatEvent.BazaarEventTypes.INSTA_SELL, TransactionType.of(TransactionType.Side.SELL, TransactionType.Method.INSTANT), 2, 4, priceIndex); @@ -208,7 +208,7 @@ public static void handleInstaSell(ArrayList siblings) { * * @param siblings the text components of the message */ - public static void handleInstaBuy(ArrayList siblings) { + public static void handleInstaBuy(ArrayList siblings) { processOrderEvent(siblings, BazaarChatEvent.BazaarEventTypes.INSTA_BUY, TransactionType.of(TransactionType.Side.BUY, TransactionType.Method.INSTANT), 2, 4, 6); } @@ -217,7 +217,7 @@ public static void handleInstaBuy(ArrayList siblings) { * * @param message the full chat message */ - private static void handleFilled(Text message) { + private static void handleFilled(Component message) { String messageString = Util.removeFormatting(message.getString()); // Example: "Your Buy Order for 2,304x Mithril was filled!" String[] parts = messageString.split(" for |x | was filled!"); @@ -248,7 +248,7 @@ private static void handleFilled(Text message) { * * @param siblings the text components of the message */ - private static void handleOrderCreated(ArrayList siblings) { + private static void handleOrderCreated(ArrayList siblings) { String itemName = Util.removeFormatting(getName(siblings)); int volume = Integer.parseInt(siblings.get(3).getString().replace(",", "")); @@ -275,7 +275,7 @@ private static void handleOrderCreated(ArrayList siblings) { * @param siblings the text components of the message * @return the extracted item name without formatting */ - private static String getName(List siblings) { + private static String getName(List siblings) { if (siblings.size() == 10) { return Util.removeFormatting(siblings.get(6).getString()); } else { @@ -288,7 +288,7 @@ private static String getName(List siblings) { * * @param siblings the text components of the message */ - private static void handleClaimed(ArrayList siblings) { + private static void handleClaimed(ArrayList siblings) { Optional orderOptional; try { @@ -320,7 +320,7 @@ private static void handleClaimed(ArrayList siblings) { * @param siblings the text components of the message * @return the claimed buy order if found in tracked orders, empty otherwise */ - private static Optional getClaimedBuyOrder(ArrayList siblings) { + private static Optional getClaimedBuyOrder(ArrayList siblings) { // Parse volume with validation String volumeStr = siblings.get(3).getString().replace(",", "").trim(); @@ -383,16 +383,16 @@ private static Optional getClaimedBuyOrder(ArrayList siblings) { * @param siblings the text components of the message * @return the claimed sell order if found in tracked orders, empty otherwise */ - private static Optional getClaimedSellOrder(ArrayList siblings) { + private static Optional getClaimedSellOrder(ArrayList siblings) { // Sell order claimed messages sometimes include volume and sometimes don't - Text volumeComponent = siblings.get(TextSearch.indexOf(siblings, "x") - 1); + Component volumeComponent = siblings.get(TextSearch.indexOf(siblings, "x") - 1); String volumeString = volumeComponent.getString(); int volume = Integer.parseInt(volumeString.replace(",", "").trim()); - Text nameComponent = siblings.get(TextSearch.indexOf(siblings, "x") + 1); + Component nameComponent = siblings.get(TextSearch.indexOf(siblings, "x") + 1); String name = nameComponent.getString().trim(); - Text priceComponent = siblings.get(TextSearch.lastIndexOf(siblings, "at") + 1); + Component priceComponent = siblings.get(TextSearch.lastIndexOf(siblings, "at") + 1); String priceString = priceComponent.getString().replace(",", "").trim(); double price = Double.parseDouble(priceString); diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/chat/UselessBazaarNotificationsRemover.java b/src/main/java/com/github/mkram17/bazaarutils/features/chat/UselessBazaarNotificationsRemover.java index 284cdb74..0c30e6c2 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/chat/UselessBazaarNotificationsRemover.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/chat/UselessBazaarNotificationsRemover.java @@ -9,7 +9,7 @@ import com.teamresourceful.resourcefulconfig.api.types.info.TooltipProvider; import lombok.Getter; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.Arrays; @@ -33,8 +33,8 @@ public enum TransientBazaarMessages implements TooltipProvider { } @Override - public Text getTooltip() { - return Text.of(getMessage()); + public Component getTooltip() { + return Component.nullToEmpty(getMessage()); } } diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/CancelOrderAndSearch.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/CancelOrderAndSearch.java index 24de916a..6cd07ebf 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/CancelOrderAndSearch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/CancelOrderAndSearch.java @@ -7,8 +7,8 @@ import com.github.mkram17.bazaarutils.utils.minecraft.item.ItemRef; import com.teamresourceful.resourcefulconfig.api.annotations.ConfigObject; import lombok.Getter; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; @ConfigObject public class CancelOrderAndSearch extends BUListener implements ItemButton { @@ -26,7 +26,7 @@ public ItemRef getItemRef() { private transient ItemStack replacementItem; public CancelOrderAndSearch() { - this.replacementItem = Items.BLUE_TERRACOTTA.getDefaultStack(); + this.replacementItem = Items.BLUE_TERRACOTTA.getDefaultInstance(); } private transient OrderInfo orderInfo; diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/ModButtons.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/ModButtons.java index ba9e76f6..3a501f73 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/ModButtons.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/ModButtons.java @@ -12,10 +12,10 @@ import com.github.mkram17.bazaarutils.utils.config.BUToggleableFeature; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenType; import com.github.mkram17.bazaarutils.utils.minecraft.gui.widgets.WidgetManager; -import net.minecraft.client.gui.screen.ButtonTextures; -import net.minecraft.item.Items; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.components.WidgetSprites; +import net.minecraft.world.item.Items; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; import java.util.ArrayList; import java.util.Collections; @@ -23,18 +23,18 @@ @Module public class ModButtons implements BUToggleableFeature { - private static final Identifier DEFAULT_ORDERS = Identifier.tryParse(BazaarUtils.MOD_ID, "widget/generic_widget_base"); - private static final Identifier HOVERED_ORDERS = Identifier.tryParse(BazaarUtils.MOD_ID, "widget/generic_widget_hover"); + private static final Identifier DEFAULT_ORDERS = Identifier.tryBuild(BazaarUtils.MOD_ID, "widget/generic_widget_base"); + private static final Identifier HOVERED_ORDERS = Identifier.tryBuild(BazaarUtils.MOD_ID, "widget/generic_widget_hover"); - public static final ButtonTextures SLOT_ORDERS_BUTTON_TEXTURES = new ButtonTextures( + public static final WidgetSprites SLOT_ORDERS_BUTTON_TEXTURES = new WidgetSprites( DEFAULT_ORDERS, HOVERED_ORDERS ); - private static final Identifier DEFAULT_SETTINGS = Identifier.tryParse(BazaarUtils.MOD_ID, "widget/settings_widget_base"); - private static final Identifier HOVERED_SETTINGS = Identifier.tryParse(BazaarUtils.MOD_ID, "widget/settings_widget_hover"); + private static final Identifier DEFAULT_SETTINGS = Identifier.tryBuild(BazaarUtils.MOD_ID, "widget/settings_widget_base"); + private static final Identifier HOVERED_SETTINGS = Identifier.tryBuild(BazaarUtils.MOD_ID, "widget/settings_widget_hover"); - public static final ButtonTextures SLOT_SETTINGS_BUTTON_TEXTURES = new ButtonTextures( + public static final WidgetSprites SLOT_SETTINGS_BUTTON_TEXTURES = new WidgetSprites( DEFAULT_SETTINGS, HOVERED_SETTINGS ); @@ -81,7 +81,7 @@ private static ItemSlotButtonWidget createModSettingsButtonWidget(WidgetManager. SLOT_SETTINGS_BUTTON_TEXTURES, (widget) -> ConfigUtil.openGUI(), null, - Text.literal("Bazaar Utils Settings") + Component.literal("Bazaar Utils Settings") ); } @@ -97,8 +97,8 @@ private static ItemSlotButtonWidget createBazaarOrdersButtonWidget(WidgetManager config.size, config.size, SLOT_ORDERS_BUTTON_TEXTURES, (widget) -> PlayerActionUtil.runCommand("managebazaarorders"), - Items.BOOK.getDefaultStack(), - Text.literal("Go to Orders (Requires Cookie)") + Items.BOOK.getDefaultInstance(), + Component.literal("Go to Orders (Requires Cookie)") ); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/Bookmark.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/Bookmark.java index 1a12f771..9a817c70 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/Bookmark.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/Bookmark.java @@ -1,5 +1,5 @@ package com.github.mkram17.bazaarutils.features.gui.buttons.bookmarks; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.ItemStack; public record Bookmark(String name, ItemStack itemStack, String productID) {} \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkSearchWidget.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkSearchWidget.java index 593d69c1..07577f4a 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkSearchWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkSearchWidget.java @@ -15,13 +15,13 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenType; import com.github.mkram17.bazaarutils.utils.minecraft.gui.container.ContainerManager; import com.github.mkram17.bazaarutils.utils.minecraft.gui.widgets.WidgetManager; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import java.util.ArrayList; import java.util.Collections; @@ -45,12 +45,12 @@ public static List getWidgets() { for (Bookmark bookmark : bookmarks) { ItemStack configuredItem = bookmark.itemStack(); - final ItemStack itemForButton = (configuredItem == null) ? Items.BARRIER.getDefaultStack() : configuredItem; - MutableText text = Text.literal(bookmark.name()).formatted(Formatting.BOLD); + final ItemStack itemForButton = (configuredItem == null) ? Items.BARRIER.getDefaultInstance() : configuredItem; + MutableComponent text = Component.literal(bookmark.name()).withStyle(ChatFormatting.BOLD); - Style style = Style.EMPTY.withColor(Formatting.GRAY).withBold(false); - text.append(Text.literal("\nInsta Buy: " + Util.getPrettyString(OrderUtil.getPriceForPosition(bookmark.productID(), PricingPosition.MATCHED, TransactionType.of(TransactionType.Side.BUY, TransactionType.Method.INSTANT))) + " coins").setStyle(style)); - text.append(Text.literal("\nInsta Sell: " + Util.getPrettyString(OrderUtil.getPriceForPosition(bookmark.productID(), PricingPosition.MATCHED, TransactionType.of(TransactionType.Side.SELL, TransactionType.Method.INSTANT))) + " coins").setStyle(style)); + Style style = Style.EMPTY.withColor(ChatFormatting.GRAY).withBold(false); + text.append(Component.literal("\nInsta Buy: " + Util.getPrettyString(OrderUtil.getPriceForPosition(bookmark.productID(), PricingPosition.MATCHED, TransactionType.of(TransactionType.Side.BUY, TransactionType.Method.INSTANT))) + " coins").setStyle(style)); + text.append(Component.literal("\nInsta Sell: " + Util.getPrettyString(OrderUtil.getPriceForPosition(bookmark.productID(), PricingPosition.MATCHED, TransactionType.of(TransactionType.Side.SELL, TransactionType.Method.INSTANT))) + " coins").setStyle(style)); ItemSlotButtonWidget button = new ItemSlotButtonWidget( buttonX, @@ -58,7 +58,7 @@ public static List getWidgets() { buttonSize, buttonSize, BookmarkUtil.SLOT_BUTTON_TEXTURES, (btn) -> { - if (MinecraftClient.getInstance().isShiftPressed()) { + if (Minecraft.getInstance().hasShiftDown()) { PlayerActionUtil.notifyAll("Removed " + bookmark.name() + " bookmark from shift-click. Open Bazaar again to display changes."); onWidgetShiftClick(bookmark); } else { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkUtil.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkUtil.java index 96dc34a4..265b5007 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkUtil.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/BookmarkUtil.java @@ -1,10 +1,10 @@ package com.github.mkram17.bazaarutils.features.gui.buttons.bookmarks; import com.github.mkram17.bazaarutils.BazaarUtils; -import com.github.mkram17.bazaarutils.data.BookmarksStorage; +import com.github.mkram17.bazaarutils.utils.storage.BookmarksStorage; import lombok.Getter; -import net.minecraft.client.gui.screen.ButtonTextures; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.components.WidgetSprites; +import net.minecraft.resources.Identifier; import java.util.List; import java.util.Optional; @@ -13,10 +13,10 @@ public class BookmarkUtil { @Getter public static Optional currentBookmarkOpt = Optional.empty(); - public static final Identifier DEFAULT_WIDGET_TEXTURE = Identifier.tryParse(BazaarUtils.MOD_ID, "widget/bookmark_widget_base"); - public static final Identifier HOVER_WIDGET_TEXTURE = Identifier.tryParse(BazaarUtils.MOD_ID, "widget/bookmark_widget_hover"); + public static final Identifier DEFAULT_WIDGET_TEXTURE = Identifier.tryBuild(BazaarUtils.MOD_ID, "widget/bookmark_widget_base"); + public static final Identifier HOVER_WIDGET_TEXTURE = Identifier.tryBuild(BazaarUtils.MOD_ID, "widget/bookmark_widget_hover"); - public static final ButtonTextures SLOT_BUTTON_TEXTURES = new ButtonTextures(DEFAULT_WIDGET_TEXTURE, HOVER_WIDGET_TEXTURE); + public static final WidgetSprites SLOT_BUTTON_TEXTURES = new WidgetSprites(DEFAULT_WIDGET_TEXTURE, HOVER_WIDGET_TEXTURE); public static void saveBookmarks() { BookmarksStorage.INSTANCE.save(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/ToggleBookmarkButton.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/ToggleBookmarkButton.java index a01df5d6..2096834b 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/ToggleBookmarkButton.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/bookmarks/ToggleBookmarkButton.java @@ -14,10 +14,10 @@ import com.github.mkram17.bazaarutils.utils.minecraft.item.groups.ItemGroups; import com.github.mkram17.bazaarutils.utils.minecraft.item.ItemRef; import meteordevelopment.orbit.EventHandler; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.network.chat.Component; import java.util.List; import java.util.Optional; @@ -53,8 +53,8 @@ public ItemStack getReplacementItem(int size) { ItemStack stack = ItemButton.super.getReplacementItem(size); stack.set( - DataComponentTypes.CUSTOM_NAME, - Text.literal(bookmarked + DataComponents.CUSTOM_NAME, + Component.literal(bookmarked ? "Remove " + BookmarkUtil.currentBookmarkOpt.get().name() + " Bookmark" : "Bookmark " + resolveCurrentItemName().orElse("?"))); @@ -91,7 +91,7 @@ private void toggleBookmark(String name) { ItemStack itemStack = ScreenManager.getInstance().current() .flatMap(BazaarScreenHandler::getDisplayItem) .map(ItemInfo::itemStack) - .orElse(Items.DIAMOND.getDefaultStack()); + .orElse(Items.DIAMOND.getDefaultInstance()); String productId = ScreenManager.getInstance().current() .flatMap(BazaarScreenHandler::getDisplayProductId) diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/BuyOrderAmountHelper.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/BuyOrderAmountHelper.java index a26c1b09..fa0ac4b9 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/BuyOrderAmountHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/BuyOrderAmountHelper.java @@ -15,7 +15,7 @@ import com.teamresourceful.resourcefulconfig.api.annotations.ConfigOption; import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.stream.IntStream; @@ -98,21 +98,21 @@ protected int computeFixedValue(TransactionState state) { } @Override - protected Text getButtonItemText(TransactionState state) { - return Text.of("Order " + getButtonItemStackSize(state) + " items."); + protected Component getButtonItemText(TransactionState state) { + return Component.nullToEmpty("Order " + getButtonItemStackSize(state) + " items."); } @Override - public Text getTitle(int index) { - return Text.literal(switch (amountStrategy) { + public Component getTitle(int index) { + return Component.literal(switch (amountStrategy) { case AmountStrategy.MAX -> "Orders MAX possible items"; case AmountStrategy.FIXED -> "Orders " + fixedAmount + " items"; }); } @Override - public Text getDescription(int index) { - return Text.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); + public Component getDescription(int index) { + return Component.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); } private static int getNextSlotIndex() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/InstantBuyAmountHelper.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/InstantBuyAmountHelper.java index d53fffda..04267216 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/InstantBuyAmountHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/InstantBuyAmountHelper.java @@ -15,7 +15,7 @@ import com.teamresourceful.resourcefulconfig.api.annotations.ConfigOption; import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.stream.IntStream; @@ -98,21 +98,21 @@ protected int computeFixedValue(TransactionState state) { } @Override - protected Text getButtonItemText(TransactionState state) { - return Text.of("Offer " + getButtonItemStackSize(state) + " items."); + protected Component getButtonItemText(TransactionState state) { + return Component.nullToEmpty("Offer " + getButtonItemStackSize(state) + " items."); } @Override - public Text getTitle(int index) { - return Text.literal(switch (amountStrategy) { + public Component getTitle(int index) { + return Component.literal(switch (amountStrategy) { case MAX -> "Buys MAX possible items"; case FIXED -> "Buys " + fixedAmount + " items"; }); } @Override - public Text getDescription(int index) { - return Text.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); + public Component getDescription(int index) { + return Component.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); } private static int getNextSlotIndex() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/SellOfferAmountHelper.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/SellOfferAmountHelper.java index 3a8a6cd9..75ef6b99 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/SellOfferAmountHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/amount/SellOfferAmountHelper.java @@ -15,7 +15,7 @@ import com.teamresourceful.resourcefulconfig.api.annotations.ConfigOption; import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.stream.IntStream; @@ -98,21 +98,21 @@ protected int computeFixedValue(TransactionState state) { } @Override - protected Text getButtonItemText(TransactionState state) { - return Text.of("Offer " + getButtonItemStackSize(state) + " items."); + protected Component getButtonItemText(TransactionState state) { + return Component.nullToEmpty("Offer " + getButtonItemStackSize(state) + " items."); } @Override - public Text getTitle(int index) { - return Text.literal(switch (amountStrategy) { + public Component getTitle(int index) { + return Component.literal(switch (amountStrategy) { case MAX -> "Offers the whole of your inventory"; case FIXED -> "Offers " + fixedAmount + " items"; }); } @Override - public Text getDescription(int index) { - return Text.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); + public Component getDescription(int index) { + return Component.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); } private static int getNextSlotIndex() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/BuyOrderPriceHelper.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/BuyOrderPriceHelper.java index cd3506fc..b0f38b92 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/BuyOrderPriceHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/BuyOrderPriceHelper.java @@ -16,7 +16,7 @@ import com.teamresourceful.resourcefulconfig.api.annotations.ConfigOption; import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.stream.IntStream; @@ -86,13 +86,13 @@ public BuyOrderPriceHelper() { } @Override - protected Text getButtonItemText(TransactionState state) { - return Text.of("Bid " + getButtonItemStackSize(state) + " per item."); + protected Component getButtonItemText(TransactionState state) { + return Component.nullToEmpty("Bid " + getButtonItemStackSize(state) + " per item."); } @Override - public Text getTitle(int index) { - return Text.literal(switch (pricingPosition) { + public Component getTitle(int index) { + return Component.literal(switch (pricingPosition) { case COMPETITIVE -> "Bids +0.1 above best offer"; case MATCHED -> "Bids equal to best offer"; case OUTBID -> "Bids -0.1 below best offer"; @@ -100,8 +100,8 @@ public Text getTitle(int index) { } @Override - public Text getDescription(int index) { - return Text.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); + public Component getDescription(int index) { + return Component.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); } private static int getNextSlotIndex() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/FlipOrderPriceHelper.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/FlipOrderPriceHelper.java index 36e77171..fe2de327 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/FlipOrderPriceHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/FlipOrderPriceHelper.java @@ -16,7 +16,7 @@ import com.teamresourceful.resourcefulconfig.api.annotations.ConfigOption; import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.stream.IntStream; @@ -86,13 +86,13 @@ public FlipOrderPriceHelper() { } @Override - protected Text getButtonItemText(TransactionState state) { - return Text.of("Ask " + getButtonItemStackSize(state) + " per item."); + protected Component getButtonItemText(TransactionState state) { + return Component.nullToEmpty("Ask " + getButtonItemStackSize(state) + " per item."); } @Override - public Text getTitle(int index) { - return Text.literal(switch (pricingPosition) { + public Component getTitle(int index) { + return Component.literal(switch (pricingPosition) { case COMPETITIVE -> "Flips asking +0.1 above best bid"; case MATCHED -> "Flips asking equal to best bid"; case OUTBID -> "Flips asking -0.1 below best bid"; @@ -100,8 +100,8 @@ public Text getTitle(int index) { } @Override - public Text getDescription(int index) { - return Text.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); + public Component getDescription(int index) { + return Component.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); } private static int getNextSlotIndex() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/SellOfferPriceHelper.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/SellOfferPriceHelper.java index bb6c9c71..06c754b7 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/SellOfferPriceHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/buttons/inputhelper/price/SellOfferPriceHelper.java @@ -17,7 +17,7 @@ import com.teamresourceful.resourcefulconfig.api.annotations.ConfigOption; import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.stream.IntStream; @@ -87,13 +87,13 @@ public SellOfferPriceHelper() { } @Override - protected Text getButtonItemText(TransactionState state) { - return Text.of("Ask " + getButtonItemStackSize(state) + " per item."); + protected Component getButtonItemText(TransactionState state) { + return Component.nullToEmpty("Ask " + getButtonItemStackSize(state) + " per item."); } @Override - public Text getTitle(int index) { - return Text.literal(switch (pricingPosition) { + public Component getTitle(int index) { + return Component.literal(switch (pricingPosition) { case COMPETITIVE -> "Asks +0.1 above best bid"; case MATCHED -> "Asks equal to best bid"; case OUTBID -> "Asks -0.1 below best bid"; @@ -101,8 +101,8 @@ public Text getTitle(int index) { } @Override - public Text getDescription(int index) { - return Text.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); + public Component getDescription(int index) { + return Component.literal("Slot " + slotIndex + " · " + resolveItem().getName().getString()); } private static int getNextSlotIndex() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/InstantSellHighlight.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/InstantSellHighlight.java index d4e89725..4b5cf4a9 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/InstantSellHighlight.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/InstantSellHighlight.java @@ -17,13 +17,13 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; import meteordevelopment.orbit.EventHandler; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.Slot; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -31,7 +31,7 @@ @Module public class InstantSellHighlight extends BUListener implements BUToggleableFeature, SlotHighlight { - public static final Identifier IDENTIFIER = Identifier.tryParse(BazaarUtils.MOD_ID, "highlights/standard_background"); + public static final Identifier IDENTIFIER = Identifier.tryBuild(BazaarUtils.MOD_ID, "highlights/standard_background"); @Override public Identifier getIdentifier() { @@ -40,20 +40,20 @@ public Identifier getIdentifier() { private static final Map colorCache = new ConcurrentHashMap<>(); - private void populateCache(Set names, HandledScreen screen, PlayerInventory playerInventory) { + private void populateCache(Set names, AbstractContainerScreen screen, Inventory playerInventory) { colorCache.clear(); - for (Slot slot : screen.getScreenHandler().slots) { - if (!slot.hasStack() || slot.inventory != playerInventory) continue; + for (Slot slot : screen.getMenu().slots) { + if (!slot.hasItem() || slot.container != playerInventory) continue; - Text customName = slot.getStack().getCustomName(); + Component customName = slot.getItem().getCustomName(); if (customName == null) continue; String itemName = customName.getString(); if (names.stream().anyMatch(itemName::equalsIgnoreCase)) { - colorCache.put(slot.getIndex(), InventoryConfig.INSTANT_SELL_HIGHLIGHT_COLOR); + colorCache.put(slot.getContainerSlot(), InventoryConfig.INSTANT_SELL_HIGHLIGHT_COLOR); } } } @@ -84,8 +84,8 @@ private void onChestLoaded(ChestLoadedEvent event) { if (!isEnabled()) return; ScreenManager.getInstance().current().ifPresent(context -> { - HandledScreen screen = ScreenManager.getCurrentlyHandledScreen(HandledScreen.class).orElse(null); - MinecraftClient client = MinecraftClient.getInstance(); + AbstractContainerScreen screen = ScreenManager.getCurrentlyHandledScreen(AbstractContainerScreen.class).orElse(null); + Minecraft client = Minecraft.getInstance(); if (screen == null || client.player == null) return; @@ -101,7 +101,7 @@ private void onChestLoaded(ChestLoadedEvent event) { }); } - private void onScreenInitialized(MinecraftClient client, Screen screen, int width, int height) { + private void onScreenInitialized(Minecraft client, Screen screen, int width, int height) { colorCache.clear(); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/OrderStatusHighlight.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/OrderStatusHighlight.java index dd5d0265..af8baa73 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/OrderStatusHighlight.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/OrderStatusHighlight.java @@ -17,16 +17,16 @@ import meteordevelopment.orbit.EventHandler; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.text.TextColor; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.inventory.Slot; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextColor; +import net.minecraft.resources.Identifier; import java.util.ArrayList; import java.util.List; @@ -36,7 +36,7 @@ //drawing done in MixinHandledScreen @Module public class OrderStatusHighlight extends BUListener implements BUToggleableFeature, SlotHighlight { - public static final Identifier IDENTIFIER = Identifier.tryParse(BazaarUtils.MOD_ID, "highlights/standard_background"); + public static final Identifier IDENTIFIER = Identifier.tryBuild(BazaarUtils.MOD_ID, "highlights/standard_background"); @Override public Identifier getIdentifier() { @@ -44,9 +44,9 @@ public Identifier getIdentifier() { } private static final Map colorCache = new ConcurrentHashMap<>(); - private static final Map> tooltipCache = new ConcurrentHashMap<>(); + private static final Map> tooltipCache = new ConcurrentHashMap<>(); - private void populateCache(ItemStack stack, HandledScreen screen) { + private void populateCache(ItemStack stack, AbstractContainerScreen screen) { int index = getSlotIndex(stack, screen); if (index == -1) return; @@ -86,33 +86,33 @@ private void onChestLoaded(ChestLoadedEvent event) { return; } - HandledScreen screen = ScreenManager.getCurrentlyHandledScreen(HandledScreen.class).orElse(null); + AbstractContainerScreen screen = ScreenManager.getCurrentlyHandledScreen(AbstractContainerScreen.class).orElse(null); if (screen == null) return; event.getItemStacks().forEach(stack -> populateCache(stack, screen)); } - private void onScreenInitialized(MinecraftClient client, Screen screen, int width, int height) { + private void onScreenInitialized(Minecraft client, Screen screen, int width, int height) { colorCache.clear(); tooltipCache.clear(); } - private void onTooltip(ItemStack stack, net.minecraft.item.Item.TooltipContext context, TooltipType type, List lines) { + private void onTooltip(ItemStack stack, net.minecraft.world.item.Item.TooltipContext context, TooltipFlag type, List lines) { if (!isEnabled() || !ScreenManager.getInstance().isCurrent(BazaarScreens.ORDERS_PAGE)) return; - HandledScreen screen = ScreenManager.getCurrentlyHandledScreen(HandledScreen.class).orElse(null); + AbstractContainerScreen screen = ScreenManager.getCurrentlyHandledScreen(AbstractContainerScreen.class).orElse(null); if (screen == null) return; int index = getSlotIndex(stack, screen); if (index == -1) return; - List cached = tooltipCache.get(index); + List cached = tooltipCache.get(index); if (cached != null) lines.addAll(1, cached); } - private static int getSlotIndex(ItemStack stack, HandledScreen screen) { - for (Slot slot : screen.getScreenHandler().slots) { - if (slot.hasStack() && slot.getStack().equals(stack)) return slot.getIndex(); + private static int getSlotIndex(ItemStack stack, AbstractContainerScreen screen) { + for (Slot slot : screen.getMenu().slots) { + if (slot.hasItem() && slot.getItem().equals(stack)) return slot.getContainerSlot(); } return -1; @@ -132,8 +132,8 @@ private static int getArgbFromPricingPosition(PricingPosition pricingPosition) { }; } - private static List buildTooltipLines(Order order, PricingPosition pos) { - List lines = new ArrayList<>(); + private static List buildTooltipLines(Order order, PricingPosition pos) { + List lines = new ArrayList<>(); switch (pos) { case COMPETITIVE -> lines.add(styledText("COMPETITIVE", InventoryConfig.ORDER_STATUS_HIGHLIGHT_COMPETITIVE_COLOR, true)); @@ -145,14 +145,14 @@ private static List buildTooltipLines(Order order, PricingPosition pos) { } if (DeveloperConfig.DEVELOPER_MODE_TOGGLE) { - lines.add(Text.literal("[BU] Buy: " + Util.getPrettyString(order.getMarketPrice(TransactionType.Side.BUY)) + " coins")); - lines.add(Text.literal("[BU] Sell: " + Util.getPrettyString(order.getMarketPrice(TransactionType.Side.SELL)) + " coins")); + lines.add(Component.literal("[BU] Buy: " + Util.getPrettyString(order.getMarketPrice(TransactionType.Side.BUY)) + " coins")); + lines.add(Component.literal("[BU] Sell: " + Util.getPrettyString(order.getMarketPrice(TransactionType.Side.SELL)) + " coins")); } return lines; } - private static Text styledText(String content, int rgb, boolean bold) { - return Text.literal(content).setStyle(Style.EMPTY.withColor(TextColor.fromRgb(rgb)).withBold(bold)); + private static Component styledText(String content, int rgb, boolean bold) { + return Component.literal(content).setStyle(Style.EMPTY.withColor(TextColor.fromRgb(rgb)).withBold(bold)); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/RestrictionTarget.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/RestrictionTarget.java index c24bf9c5..2fffcdf5 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/RestrictionTarget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/RestrictionTarget.java @@ -3,7 +3,7 @@ import com.github.mkram17.bazaarutils.config.features.gui.InventoryConfig; import com.teamresourceful.resourcefulconfig.api.types.info.TooltipProvider; import com.teamresourceful.resourcefulconfig.api.types.info.Translatable; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; public enum RestrictionTarget implements TooltipProvider, Translatable { INSTANT_SELL { @@ -13,8 +13,8 @@ public String getTranslationKey() { } @Override - public Text getTooltip() { - return Text.translatable("bazaarutils.config.inventory.restrictions.features.target.instant_sell.label"); + public Component getTooltip() { + return Component.translatable("bazaarutils.config.inventory.restrictions.features.target.instant_sell.label"); } }, SELL_SACKS { @@ -24,8 +24,8 @@ public String getTranslationKey() { } @Override - public Text getTooltip() { - return Text.translatable("bazaarutils.config.inventory.restrictions.features.target.sell_sacks.label"); + public Component getTooltip() { + return Component.translatable("bazaarutils.config.inventory.restrictions.features.target.sell_sacks.label"); } }; diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/DoubleRestrictionControl.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/DoubleRestrictionControl.java index ca5d7b93..124177c5 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/DoubleRestrictionControl.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/DoubleRestrictionControl.java @@ -8,7 +8,7 @@ import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; import lombok.Setter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.Arrays; import java.util.Locale; @@ -76,15 +76,15 @@ public String describeRule() { } @Override - public Text getTitle(int index) { - return Text.literal(switch (rule) { + public Component getTitle(int index) { + return Component.literal(switch (rule) { case PRICE -> "Blocks if total price > " + amount; case VOLUME -> "Blocks if volume held > " + amount; }); } @Override - public Text getDescription(int index) { - return Text.literal("Applies to: " + formatTargets()); + public Component getDescription(int index) { + return Component.literal("Applies to: " + formatTargets()); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/StringRestrictionControl.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/StringRestrictionControl.java index 8d669a47..dac905b4 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/StringRestrictionControl.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/inventory/restrictions/controls/StringRestrictionControl.java @@ -8,7 +8,7 @@ import com.teamresourceful.resourcefulconfig.api.types.info.ListEntryInfoProvider; import lombok.Getter; import lombok.Setter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; @Getter @Setter @@ -58,12 +58,12 @@ public String describeRule() { } @Override - public Text getTitle(int index) { - return Text.literal("Blocks items matching \"" + name + "\""); + public Component getTitle(int index) { + return Component.literal("Blocks items matching \"" + name + "\""); } @Override - public Text getDescription(int index) { - return Text.literal("Applies to: " + formatTargets()); + public Component getDescription(int index) { + return Component.literal("Applies to: " + formatTargets()); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/BazaarLimitsVisualizer.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/BazaarLimitsVisualizer.java index 45c9c1ec..8dd2746b 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/BazaarLimitsVisualizer.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/BazaarLimitsVisualizer.java @@ -6,7 +6,7 @@ import java.util.List; import com.github.mkram17.bazaarutils.config.features.gui.OverlaysConfig; -import com.github.mkram17.bazaarutils.data.BazaarLimitsStorage; +import com.github.mkram17.bazaarutils.utils.storage.BazaarLimitsStorage; import com.github.mkram17.bazaarutils.events.listener.BUListener; import com.github.mkram17.bazaarutils.generated.BazaarUtilsModules; import com.github.mkram17.bazaarutils.misc.BUCompatibilityHelper; @@ -22,8 +22,8 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenType; import com.github.mkram17.bazaarutils.utils.minecraft.gui.widgets.WidgetManager; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; @Module public class BazaarLimitsVisualizer extends BUListener implements BUToggleableFeature { @@ -106,10 +106,10 @@ private static TextDisplayWidget createLimitWidget(WidgetManager.ScreenWidgetDim String current = Util.formatNumberWithPrefix(ordered); String max = Util.formatNumberWithPrefix(BazaarLimitsVisualizer.COIN_LIMIT); - Formatting color = (ordered >= BazaarLimitsVisualizer.COIN_LIMIT) ? Formatting.RED : Formatting.GREEN; - Text message = Text.literal("Bazaar Order Limit: ").formatted(Formatting.GOLD) - .append(Text.literal(current).formatted(color)) - .append(Text.literal(" / " + max).formatted(Formatting.GRAY)); + ChatFormatting color = (ordered >= BazaarLimitsVisualizer.COIN_LIMIT) ? ChatFormatting.RED : ChatFormatting.GREEN; + Component message = Component.literal("Bazaar Order Limit: ").withStyle(ChatFormatting.GOLD) + .append(Component.literal(current).withStyle(color)) + .append(Component.literal(" / " + max).withStyle(ChatFormatting.GRAY)); int spacing = BUCompatibilityHelper.isSkyblockerLoaded() ? 26 : 5; @@ -126,11 +126,11 @@ private static TextDisplayWidget createTimeUntilResetWidget(WidgetManager.Screen long hours = duration.toHours(); long minutes = duration.toMinutesPart(); - Formatting urgencyColor = (hours < 1) ? Formatting.RED : (hours < 10 ? Formatting.YELLOW : Formatting.GRAY); + ChatFormatting urgencyColor = (hours < 1) ? ChatFormatting.RED : (hours < 10 ? ChatFormatting.YELLOW : ChatFormatting.GRAY); String timeLabel = String.format("%dh %dm", hours, minutes); - Text timeText = Text.literal("Until Reset: ").formatted(Formatting.GOLD) - .append(Text.literal(timeLabel).formatted(urgencyColor)); + Component timeText = Component.literal("Until Reset: ").withStyle(ChatFormatting.GOLD) + .append(Component.literal(timeLabel).withStyle(urgencyColor)); int spacing = BUCompatibilityHelper.isSkyblockerLoaded() ? 26 : 5; diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/PriceCharts.java b/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/PriceCharts.java index f9a34350..a64d0e00 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/PriceCharts.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/gui/overlays/PriceCharts.java @@ -2,9 +2,9 @@ import com.github.mkram17.bazaarutils.config.features.gui.OverlaysConfig; import com.github.mkram17.bazaarutils.utils.annotations.modules.Module; -import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; import com.github.mkram17.bazaarutils.events.SlotClickEvent; import com.github.mkram17.bazaarutils.events.listener.BUListener; +import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataUtil; import com.github.mkram17.bazaarutils.utils.config.BUToggleableFeature; import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarScreens; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.OrderInfo; @@ -13,14 +13,14 @@ import com.github.mkram17.bazaarutils.utils.Util; import meteordevelopment.orbit.EventHandler; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ConfirmLinkScreen; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.ConfirmLinkScreen; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import java.net.URI; import java.net.URISyntaxException; @@ -41,23 +41,23 @@ public boolean isEnabled() { public PriceCharts() {} @Override - public void getTooltip(ItemStack stack, Item.TooltipContext ctx, TooltipType type, List lines) { + public void getTooltip(ItemStack stack, Item.TooltipContext ctx, TooltipFlag type, List lines) { if (!isEnabled() || stack == null || stack.isEmpty() || !shouldShow()) return; if (stack.getItem().getName().getString().contains("GLASS_PANE")) return; - String key = sanitizeName(stack.getName().getString()); + String key = sanitizeName(stack.getHoverName().getString()); // Lazily populate cache if a synced/replaced stack appears later if (!SHOW_CACHE.computeIfAbsent(key, OrderInfo::isValidName)) { return; } - MutableText text = Text.literal("CTRL+SHIFT click for price charts & other info") - .formatted(Formatting.GOLD, Formatting.BOLD); - MutableText poweredBy = Text.literal("Powered by skyblock.finance") - .formatted(Formatting.GRAY); + MutableComponent text = Component.literal("CTRL+SHIFT click for price charts & other info") + .withStyle(ChatFormatting.GOLD, ChatFormatting.BOLD); + MutableComponent poweredBy = Component.literal("Powered by skyblock.finance") + .withStyle(ChatFormatting.GRAY); - lines.add(Text.literal("")); + lines.add(Component.literal("")); lines.add(text); lines.add(poweredBy); } @@ -68,28 +68,28 @@ private void onClick(SlotClickEvent e){ return; } - if (!MinecraftClient.getInstance().isShiftPressed() || !MinecraftClient.getInstance().isCtrlPressed()) { + if (!Minecraft.getInstance().hasShiftDown() || !Minecraft.getInstance().hasControlDown()) { return; } - String itemName = sanitizeName(e.slot.getStack().getName().getString()); + String itemName = sanitizeName(e.slot.getItem().getHoverName().getString()); if (!SHOW_CACHE.getOrDefault(itemName, false)) { return; } - String productID = BazaarDataManager.findProductIdOptional(itemName).get(); // All cached items are safe + String productID = BazaarDataUtil.findProductIdOptional(itemName).get(); // All cached items are safe String link = "https://skyblock.finance/items/" + productID; - MinecraftClient.getInstance().setScreen(new ConfirmLinkScreen(confirmed -> { + Minecraft.getInstance().setScreen(new ConfirmLinkScreen(confirmed -> { if (confirmed) { try { - net.minecraft.util.Util.getOperatingSystem().open(new URI(link)); + net.minecraft.util.Util.getPlatform().openUri(new URI(link)); } catch (URISyntaxException ex) { Util.notifyError("Failed to open skyblock.finance link.", ex); } } - MinecraftClient.getInstance().setScreen(null); + Minecraft.getInstance().setScreen(null); }, link, true)); e.cancel(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/keybinds/StashHelper.java b/src/main/java/com/github/mkram17/bazaarutils/features/keybinds/StashHelper.java index 0f77f230..49f8e8d0 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/keybinds/StashHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/keybinds/StashHelper.java @@ -2,17 +2,17 @@ import com.github.mkram17.bazaarutils.features.util.BUKeybinding; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; import com.github.mkram17.bazaarutils.utils.PlayerActionUtil; import lombok.Getter; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.KeyMapping; public class StashHelper extends BUKeybinding { @Getter private int ticksBetweenPresses; - public StashHelper(KeyBinding keyBinding) { + public StashHelper(KeyMapping keyBinding) { super(keyBinding); } @@ -20,7 +20,7 @@ public StashHelper(KeyBinding keyBinding) { protected void registerOnPressed(){ ClientTickEvents.END_CLIENT_TICK.register(client -> { ticksBetweenPresses++; - if(!keyBinding.isPressed()) { + if(!keyBinding.isDown()) { return; } if(ticksBetweenPresses > 10) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/notification/OutbidOrderHandler.java b/src/main/java/com/github/mkram17/bazaarutils/features/notification/OutbidOrderHandler.java index 2cb95773..5faaa776 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/notification/OutbidOrderHandler.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/notification/OutbidOrderHandler.java @@ -1,15 +1,15 @@ package com.github.mkram17.bazaarutils.features.notification; import com.github.mkram17.bazaarutils.config.features.notification.NotificationsConfig; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.utils.annotations.modules.Module; import com.github.mkram17.bazaarutils.utils.config.BUToggleableFeature; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.Order; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.OrderStatus; import com.github.mkram17.bazaarutils.utils.bazaar.market.price.PricingPosition; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import java.util.List; @@ -22,26 +22,26 @@ public boolean isEnabled() { public OutbidOrderHandler() {} - public static MutableText getOutbidMessage(Order order) { + public static MutableComponent getOutbidMessage(Order order) { return createYourOrderForText(order) - .append(Text.literal(" is now outdated.").formatted(Formatting.WHITE)) - .append(Text.literal(" Click to open bazaar orders").formatted(Formatting.GOLD)); + .append(Component.literal(" is now outdated.").withStyle(ChatFormatting.WHITE)) + .append(Component.literal(" Click to open bazaar orders").withStyle(ChatFormatting.GOLD)); } - public static MutableText getCompetitiveMessage(Order order) { + public static MutableComponent getCompetitiveMessage(Order order) { return createYourOrderForText(order) - .append(Text.literal(" is no longer outdated.").formatted(Formatting.DARK_PURPLE)); + .append(Component.literal(" is no longer outdated.").withStyle(ChatFormatting.DARK_PURPLE)); } - public static MutableText getMatchedMessage(Order order) { + public static MutableComponent getMatchedMessage(Order order) { return createYourOrderForText(order) - .append(Text.literal(" has been matched.").formatted(Formatting.YELLOW)); + .append(Component.literal(" has been matched.").withStyle(ChatFormatting.YELLOW)); } - private static MutableText createYourOrderForText(Order order) { - return Text.literal("Your " + order.getTransactionType().getSide().toString().toLowerCase() + " order for ").formatted(Formatting.WHITE) - .append(Text.literal(order.getVolume().toString() + " ").formatted(Formatting.DARK_PURPLE)) - .append(Text.literal(order.getName()).formatted(Formatting.GOLD)); + private static MutableComponent createYourOrderForText(Order order) { + return Component.literal("Your " + order.getTransactionType().getSide().toString().toLowerCase() + " order for ").withStyle(ChatFormatting.WHITE) + .append(Component.literal(order.getVolume().toString() + " ").withStyle(ChatFormatting.DARK_PURPLE)) + .append(Component.literal(order.getName()).withStyle(ChatFormatting.GOLD)); } public static List getOutbidOrders() { diff --git a/src/main/java/com/github/mkram17/bazaarutils/features/util/BUKeybinding.java b/src/main/java/com/github/mkram17/bazaarutils/features/util/BUKeybinding.java index 49dc3e92..b66ce107 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/features/util/BUKeybinding.java +++ b/src/main/java/com/github/mkram17/bazaarutils/features/util/BUKeybinding.java @@ -1,24 +1,24 @@ package com.github.mkram17.bazaarutils.features.util; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.KeyMapping; public abstract class BUKeybinding { - protected final KeyBinding keyBinding; + protected final KeyMapping keyBinding; - public BUKeybinding(KeyBinding keyBinding) { + public BUKeybinding(KeyMapping keyBinding) { this.keyBinding = keyBinding; registerKeybinding(keyBinding); registerOnPressed(); } - private static void registerKeybinding(KeyBinding keyBinding){ + private static void registerKeybinding(KeyMapping keyBinding){ KeyBindingHelper.registerKeyBinding(keyBinding); } protected void registerOnPressed(){} public String getUsage(){ - return keyBinding.getBoundKeyTranslationKey(); + return keyBinding.saveString(); } } diff --git a/src/main/java/com/github/mkram17/bazaarutils/misc/JoinMessages.java b/src/main/java/com/github/mkram17/bazaarutils/misc/JoinMessages.java index eaae0996..bf2a8644 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/misc/JoinMessages.java +++ b/src/main/java/com/github/mkram17/bazaarutils/misc/JoinMessages.java @@ -8,25 +8,25 @@ import com.github.mkram17.bazaarutils.utils.Util; import com.github.mkram17.bazaarutils.utils.annotations.modules.Module; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; @Module public final class JoinMessages extends BUListener { - private static final Text WELCOME_MESSAGE = Text.literal("Thanks for installing! Use /bu or /bazaarutils help to configure the mod.").formatted(Formatting.GREEN); + private static final Component WELCOME_MESSAGE = Component.literal("Thanks for installing! Use /bu or /bazaarutils help to configure the mod.").withStyle(ChatFormatting.GREEN); - private static final Text DISCORD_MESSAGE = Text.literal("For more help or to report a bug, join the ") - .formatted(Formatting.GREEN) + private static final Component DISCORD_MESSAGE = Component.literal("For more help or to report a bug, join the ") + .withStyle(ChatFormatting.GREEN) .append(Util.DISCORD_TEXT) - .append(Text.literal("!").formatted(Formatting.GREEN)); + .append(Component.literal("!").withStyle(ChatFormatting.GREEN)); - private final Text updateMessage; + private final Component updateMessage; public JoinMessages() { super(); - this.updateMessage = Text.literal(BazaarUtils.getUpdateNotes()).formatted(Formatting.DARK_GREEN); + this.updateMessage = Component.literal(BazaarUtils.getUpdateNotes()).withStyle(ChatFormatting.DARK_GREEN); } @Override diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorAbstractContainerScreen.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorAbstractContainerScreen.java new file mode 100644 index 00000000..66860d2b --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorAbstractContainerScreen.java @@ -0,0 +1,18 @@ +package com.github.mkram17.bazaarutils.mixin; + +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(AbstractContainerScreen.class) +public interface AccessorAbstractContainerScreen { + @Accessor("imageWidth") + int getImageWidth(); + + @Accessor("leftPos") + int getLeftPos(); + + @Accessor("topPos") + int getTopPos(); + +} diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorHandledScreen.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorHandledScreen.java deleted file mode 100644 index 8d29f452..00000000 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorHandledScreen.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.github.mkram17.bazaarutils.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 AccessorHandledScreen { - @Accessor("backgroundWidth") - int getBackgroundWidth(); - - @Accessor("x") - int getX(); - - @Accessor("y") - int getY(); - -} diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorScreen.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorScreen.java index 3f9d29a4..7f27d3ff 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorScreen.java +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorScreen.java @@ -1,10 +1,10 @@ package com.github.mkram17.bazaarutils.mixin; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.Drawable; -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.Selectable; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.Renderable; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.narration.NarratableEntry; +import net.minecraft.client.gui.screens.Screen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; @@ -14,18 +14,18 @@ //used for SlotClickEvent @Mixin(Screen.class) public interface AccessorScreen { - @Accessor("client") - MinecraftClient getClient(); + @Accessor("minecraft") + Minecraft getMinecraft(); - @Invoker("addDrawableChild") - T registerWidget(T widget); + @Invoker("addRenderableWidget") + T registerWidget(T widget); - @Invoker("remove") - void unregisterWidget(Element element); + @Invoker("removeWidget") + void unregisterWidget(GuiEventListener element); - @Accessor("drawables") - List getDrawables(); + @Accessor("renderables") + List getRenderables(); @Accessor("children") - List getChildren(); + List getChildren(); } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorSignEditScreen.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorSignEditScreen.java index 0572e3cf..5e316d1b 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorSignEditScreen.java +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/AccessorSignEditScreen.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.mixin; -import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen; +import net.minecraft.client.gui.screens.inventory.AbstractSignEditScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; @@ -11,13 +11,13 @@ public interface AccessorSignEditScreen { // Expose the private setCurrentRowMessage method - @Invoker("setCurrentRowMessage") - void callSetCurrentRowMessage(String message); + @Invoker("setMessage") + void callSetMessage(String message); // Accessors for currentRow (private field) - @Accessor("currentRow") - int getCurrentRow(); + @Accessor("line") + int getLine(); - @Accessor("currentRow") - void setCurrentRow(int row); + @Accessor("line") + void setLine(int row); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/DrawContentMixin.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/DrawContentMixin.java index 50ea3089..f5c96f13 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/DrawContentMixin.java +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/DrawContentMixin.java @@ -2,22 +2,22 @@ import com.github.mkram17.bazaarutils.BazaarUtils; import com.github.mkram17.bazaarutils.utils.minecraft.components.CustomDataComponents; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.item.ItemStack; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; //used to change stack size String -@Mixin(DrawContext.class) +@Mixin(GuiGraphics.class) public abstract class DrawContentMixin { @ModifyVariable( - method = "drawStackCount", + method = "renderItemCount", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private String modifyStackCountString(String text, TextRenderer textRenderer, ItemStack stack, int x, int y) { + private String modifyStackCountString(String text, Font textRenderer, ItemStack stack, int x, int y) { String customData = stack.get(CustomDataComponents.CUSTOM_SIZE); double dataSize; diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/MinecraftClientMixin.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/MinecraftMixin.java similarity index 69% rename from src/main/java/com/github/mkram17/bazaarutils/mixin/MinecraftClientMixin.java rename to src/main/java/com/github/mkram17/bazaarutils/mixin/MinecraftMixin.java index fd362190..6010f95e 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/MinecraftClientMixin.java +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/MinecraftMixin.java @@ -2,8 +2,8 @@ import com.github.mkram17.bazaarutils.BazaarUtils; import com.github.mkram17.bazaarutils.events.ScreenChangeEvent; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -12,14 +12,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //for ScreenChangeEvent -@Mixin(value = MinecraftClient.class) -public class MinecraftClientMixin { +@Mixin(value = Minecraft.class) +public class MinecraftMixin { @Shadow @Nullable - public Screen currentScreen; + public Screen screen; @Inject(method = "setScreen", at = @At("HEAD")) public void setScreen(Screen newScreen, CallbackInfo ci) { - BazaarUtils.EVENT_BUS.post(new ScreenChangeEvent(currentScreen, newScreen)); + BazaarUtils.EVENT_BUS.post(new ScreenChangeEvent(screen, newScreen)); } } diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinAbstractContainerScreen.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinAbstractContainerScreen.java new file mode 100644 index 00000000..a5f973a1 --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinAbstractContainerScreen.java @@ -0,0 +1,98 @@ +// MixinHandledScreen.java +package com.github.mkram17.bazaarutils.mixin; + +import com.github.mkram17.bazaarutils.BazaarUtils; +import com.github.mkram17.bazaarutils.events.SlotClickEvent; +import com.github.mkram17.bazaarutils.generated.BazaarUtilsModules; +import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarScreens; +import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.network.chat.Component; +import net.minecraft.data.AtlasIds; +import net.minecraft.resources.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +//used for SlotClickEvent, register keybinds in chests, block slot clicks, highlighting slots +@Mixin(value = AbstractContainerScreen.class, priority = 999) +public abstract class MixinAbstractContainerScreen extends Screen { + protected MixinAbstractContainerScreen(Component title) { + super(title); + } + + @Inject(method = "slotClicked(Lnet/minecraft/world/inventory/Slot;IILnet/minecraft/world/inventory/ClickType;)V", at = @At("HEAD"), cancellable = true) + private void onHandleMouseClick(Slot slot, int slotId, int button, ClickType actionType, CallbackInfo ci) { + if (slot == null) return; + + AbstractContainerScreen screen = (AbstractContainerScreen) (Object) this; + SlotClickEvent event = new SlotClickEvent(screen, slot, slotId, button, actionType); + BazaarUtils.EVENT_BUS.post(event); + // Use the accessor to safely get the client instance + Minecraft client = ((AccessorScreen) screen).getMinecraft(); + + if (event.isCancelled()) { + ci.cancel(); + return; + } + + if (event.usePickblockInstead) { + assert client != null && client.player != null && client.gameMode != null; + client.gameMode.handleInventoryMouseClick( + screen.getMenu().containerId, + slotId, + 2, + ClickType.PICKUP, + client.player + ); + ci.cancel(); + } + } + + @Inject(method = "renderSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;renderItem(Lnet/minecraft/world/item/ItemStack;III)V")) + private void drawOnItem_OrderStatusHighlight(GuiGraphics context, Slot slot, int x, int y, CallbackInfo ci) { + if (slot == null || !slot.hasItem() || !BazaarUtilsModules.OrderStatusHighlight.isEnabled() + || !ScreenManager.getInstance().isCurrent(BazaarScreens.ORDERS_PAGE)) { + return; + } + + if (Minecraft.getInstance().player != null && slot.container == Minecraft.getInstance().player.getInventory()) { + return; + } + + Integer color = BazaarUtilsModules.OrderStatusHighlight.getHighlightColor(slot.getContainerSlot()); + if (color != null) draw(context, slot.x, slot.y, BazaarUtilsModules.OrderStatusHighlight.getIdentifier(), color); + } + + @Inject(method = "renderSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;renderItem(Lnet/minecraft/world/item/ItemStack;III)V")) + private void drawOnItem_InstantSellHighlight(GuiGraphics context, Slot slot, int x, int y, CallbackInfo ci) { + if (slot == null || !slot.hasItem() || !BazaarUtilsModules.InstantSellHighlight.isEnabled() + || !ScreenManager.getInstance().isCurrent(BazaarScreens.MAIN_PAGE, BazaarScreens.ITEMS_GROUP_PAGE, BazaarScreens.ITEM_PAGE)) { + return; + } + + if (Minecraft.getInstance().player != null && slot.container != Minecraft.getInstance().player.getInventory()) { + return; + } + + Integer color = BazaarUtilsModules.InstantSellHighlight.getHighlightColor(slot.getContainerSlot()); + if (color != null) draw(context, slot.x, slot.y, BazaarUtilsModules.InstantSellHighlight.getIdentifier(), color); + } + + @Unique + protected void draw(GuiGraphics context, int x, int y, Identifier identifier, int argb) { + final var sprite = Minecraft.getInstance().getAtlasManager() + .getAtlasOrThrow(AtlasIds.GUI) + .getSprite(identifier); + + context.blitSprite(RenderPipelines.GUI_TEXTURED, sprite, x, y, 16, 16, argb); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinHandledScreen.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinHandledScreen.java deleted file mode 100644 index 0cdf7aa4..00000000 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinHandledScreen.java +++ /dev/null @@ -1,98 +0,0 @@ -// MixinHandledScreen.java -package com.github.mkram17.bazaarutils.mixin; - -import com.github.mkram17.bazaarutils.BazaarUtils; -import com.github.mkram17.bazaarutils.events.SlotClickEvent; -import com.github.mkram17.bazaarutils.generated.BazaarUtilsModules; -import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarScreens; -import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.RenderPipelines; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.screen.slot.Slot; -import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.text.Text; -import net.minecraft.util.Atlases; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -//used for SlotClickEvent, register keybinds in chests, block slot clicks, highlighting slots -@Mixin(value = HandledScreen.class, priority = 999) -public abstract class MixinHandledScreen extends Screen { - protected MixinHandledScreen(Text title) { - super(title); - } - - @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At("HEAD"), cancellable = true) - private void onHandleMouseClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { - if (slot == null) return; - - HandledScreen screen = (HandledScreen) (Object) this; - SlotClickEvent event = new SlotClickEvent(screen, slot, slotId, button, actionType); - BazaarUtils.EVENT_BUS.post(event); - // Use the accessor to safely get the client instance - MinecraftClient client = ((AccessorScreen) screen).getClient(); - - if (event.isCancelled()) { - ci.cancel(); - return; - } - - if (event.usePickblockInstead) { - assert client != null && client.player != null && client.interactionManager != null; - client.interactionManager.clickSlot( - screen.getScreenHandler().syncId, - slotId, - 2, - SlotActionType.PICKUP, - client.player - ); - ci.cancel(); - } - } - - @Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItem(Lnet/minecraft/item/ItemStack;III)V")) - private void drawOnItem_OrderStatusHighlight(DrawContext context, Slot slot, int x, int y, CallbackInfo ci) { - if (slot == null || !slot.hasStack() || !BazaarUtilsModules.OrderStatusHighlight.isEnabled() - || !ScreenManager.getInstance().isCurrent(BazaarScreens.ORDERS_PAGE)) { - return; - } - - if (MinecraftClient.getInstance().player != null && slot.inventory == MinecraftClient.getInstance().player.getInventory()) { - return; - } - - Integer color = BazaarUtilsModules.OrderStatusHighlight.getHighlightColor(slot.getIndex()); - if (color != null) draw(context, slot.x, slot.y, BazaarUtilsModules.OrderStatusHighlight.getIdentifier(), color); - } - - @Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItem(Lnet/minecraft/item/ItemStack;III)V")) - private void drawOnItem_InstantSellHighlight(DrawContext context, Slot slot, int x, int y, CallbackInfo ci) { - if (slot == null || !slot.hasStack() || !BazaarUtilsModules.InstantSellHighlight.isEnabled() - || !ScreenManager.getInstance().isCurrent(BazaarScreens.MAIN_PAGE, BazaarScreens.ITEMS_GROUP_PAGE, BazaarScreens.ITEM_PAGE)) { - return; - } - - if (MinecraftClient.getInstance().player != null && slot.inventory != MinecraftClient.getInstance().player.getInventory()) { - return; - } - - Integer color = BazaarUtilsModules.InstantSellHighlight.getHighlightColor(slot.getIndex()); - if (color != null) draw(context, slot.x, slot.y, BazaarUtilsModules.InstantSellHighlight.getIdentifier(), color); - } - - @Unique - protected void draw(DrawContext context, int x, int y, Identifier identifier, int argb) { - final var sprite = MinecraftClient.getInstance().getAtlasManager() - .getAtlasTexture(Atlases.GUI) - .getSprite(identifier); - - context.drawSpriteStretched(RenderPipelines.GUI_TEXTURED, sprite, x, y, 16, 16, argb); - } -} \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSignEditScreen.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSignEditScreen.java index afa7c483..f76ce64b 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSignEditScreen.java +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSignEditScreen.java @@ -2,7 +2,7 @@ import com.github.mkram17.bazaarutils.BazaarUtils; import com.github.mkram17.bazaarutils.events.SignOpenEvent; -import net.minecraft.client.gui.screen.ingame.SignEditScreen; +import net.minecraft.client.gui.screens.inventory.SignEditScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSimpleInventory.java b/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSimpleContainer.java similarity index 58% rename from src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSimpleInventory.java rename to src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSimpleContainer.java index 9dae96b9..b5d70ae5 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSimpleInventory.java +++ b/src/main/java/com/github/mkram17/bazaarutils/mixin/MixinSimpleContainer.java @@ -2,9 +2,9 @@ import com.github.mkram17.bazaarutils.BazaarUtils; import com.github.mkram17.bazaarutils.events.ReplaceItemEvent; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.util.collection.DefaultedList; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.NonNullList; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -13,18 +13,18 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //used for ReplaceItemEvent -@Mixin(SimpleInventory.class) -public abstract class MixinSimpleInventory { +@Mixin(SimpleContainer.class) +public abstract class MixinSimpleContainer { @Final @Shadow - public DefaultedList heldStacks; + public NonNullList items; - @Inject(method = "getStack(I)Lnet/minecraft/item/ItemStack;",at = @At("HEAD"), cancellable = true) + @Inject(method = "getItem(I)Lnet/minecraft/world/item/ItemStack;",at = @At("HEAD"), cancellable = true) private void onGetStack(int slot, CallbackInfoReturnable cir) { - if (slot < 0 || slot >= this.heldStacks.size()) return; + if (slot < 0 || slot >= this.items.size()) return; - ReplaceItemEvent event = new ReplaceItemEvent(this.heldStacks.get(slot),(SimpleInventory) (Object) this,slot); + ReplaceItemEvent event = new ReplaceItemEvent(this.items.get(slot),(SimpleContainer) (Object) this,slot); BazaarUtils.EVENT_BUS.post(event); if (event.getReplacement() != event.getOriginal()) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/data/APIUtils.java b/src/main/java/com/github/mkram17/bazaarutils/utils/APIUtil.java similarity index 91% rename from src/main/java/com/github/mkram17/bazaarutils/data/APIUtils.java rename to src/main/java/com/github/mkram17/bazaarutils/utils/APIUtil.java index dda16ddd..0b8a02f4 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/data/APIUtils.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/APIUtil.java @@ -1,11 +1,11 @@ -package com.github.mkram17.bazaarutils.data; +package com.github.mkram17.bazaarutils.utils; import net.hypixel.api.HypixelAPI; import net.hypixel.api.apache.ApacheHttpClient; import java.util.UUID; -public class APIUtils { +public class APIUtil { public static String getApiKey() { String apiKey = System.getenv("HYPIXEL_API_KEY"); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/PlayerActionUtil.java b/src/main/java/com/github/mkram17/bazaarutils/utils/PlayerActionUtil.java index 2236ccd6..cb409de2 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/PlayerActionUtil.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/PlayerActionUtil.java @@ -3,32 +3,32 @@ import com.github.mkram17.bazaarutils.BazaarUtils; import com.github.mkram17.bazaarutils.config.features.DeveloperConfig; import com.github.mkram17.bazaarutils.misc.NotificationType; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.ClickEvent; -import net.minecraft.text.HoverEvent; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; public class PlayerActionUtil { public static void runCommand(String command){ - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); if (client.player != null) { - client.player.networkHandler.sendChatCommand(command); + client.player.connection.sendCommand(command); } } - static void sendPlayerMessage(Text message){ - if (MinecraftClient.getInstance().player != null) { - MinecraftClient.getInstance().player.sendMessage(message, false); + static void sendPlayerMessage(Component message){ + if (Minecraft.getInstance().player != null) { + Minecraft.getInstance().player.displayClientMessage(message, false); } else { Util.logMessage("Could not send notification because player is null. Message: " + message); Util.tickExecuteLater(100, () -> sendPlayerMessage(message)); } } - public static void notifyAll(Text message) { - MutableText messageText = Text.literal("[" + BazaarUtils.MOD_NAME + "] ").formatted(Formatting.GOLD); + public static void notifyAll(Component message) { + MutableComponent messageText = Component.literal("[" + BazaarUtils.MOD_NAME + "] ").withStyle(ChatFormatting.GOLD); messageText.append(message.copy()); sendPlayerMessage(messageText); @@ -36,25 +36,25 @@ public static void notifyAll(Text message) { } public static void notifyAll(String message) { - notifyAll(Text.literal(message).formatted(Formatting.WHITE)); + notifyAll(Component.literal(message).withStyle(ChatFormatting.WHITE)); } //only used for developer messages and debugging. notifyAll(String/Text messsage) is used to send messages to the player public static void notifyAll(String message, NotificationType notificationType) { String callingName = Util.getCallingClassName(); String simpleCallingName = callingName.substring(callingName.lastIndexOf(".") + 1); - MutableText messageText = Text.literal("(" + simpleCallingName + ") ") - .formatted(Formatting.GOLD) - .append(Text.literal(message).formatted(Formatting.DARK_GREEN)); + MutableComponent messageText = Component.literal("(" + simpleCallingName + ") ") + .withStyle(ChatFormatting.GOLD) + .append(Component.literal(message).withStyle(ChatFormatting.DARK_GREEN)); if(notificationType.isEnabled()) notifyAll(messageText); } - public static void notifyChatCommand(MutableText message, String command){ - message.styled(style -> style + public static void notifyChatCommand(MutableComponent message, String command){ + message.withStyle(style -> style .withClickEvent(new ClickEvent.RunCommand("/" + command)) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Run /" + command)))); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Run /" + command)))); notifyAll(message); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/ResourceManager.java b/src/main/java/com/github/mkram17/bazaarutils/utils/ResourceManager.java index 0668ce70..5a743cd2 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/ResourceManager.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/ResourceManager.java @@ -4,15 +4,18 @@ import com.github.mkram17.bazaarutils.config.BUConfig; import com.github.mkram17.bazaarutils.config.hidden.MetadataConfig; import com.github.mkram17.bazaarutils.config.util.ConfigUtil; +import com.github.mkram17.bazaarutils.misc.NotificationType; import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; import com.github.mkram17.bazaarutils.utils.annotations.autoregistration.RunOnInit; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import lombok.Getter; +import lombok.Setter; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.MinecraftClient; -import net.minecraft.resource.Resource; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.resources.Identifier; import java.io.IOException; import java.io.InputStream; @@ -22,8 +25,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; -import java.util.Optional; -import java.util.Scanner; +import java.util.*; import java.util.concurrent.CompletableFuture; //TODO move config to config/bazaarutils directory and rename to "config". See how REI does this. @@ -31,8 +33,13 @@ public class ResourceManager { private static final Path MOD_CONFIG_DIR = FabricLoader.getInstance().getConfigDir().resolve(BazaarUtils.MOD_ID); private static final Path LOCAL_RESOURCES_PATH = MOD_CONFIG_DIR.resolve("bazaar-resources.json"); - private static final Identifier BUNDLED_RESOURCES_ID = Identifier.of(BazaarUtils.MOD_ID, "bazaar-resources.json"); + private static final Identifier BUNDLED_RESOURCES_ID = Identifier.fromNamespaceAndPath(BazaarUtils.MOD_ID, "bazaar-resources.json"); private static final String GITHUB_API_URL = "https://api.github.com/repos/mkram17/Skyblock-Bazaar-Conversions/contents/conversionupdating/bazaar-conversions.json?ref=main"; + /* Cached conversions: lowercase name -> productId */ + @Getter + private static volatile Map nameToProductIdCache = Map.of(); + @Setter + private static volatile boolean conversionsLoaded = false; public static void initialize() { @@ -55,9 +62,9 @@ private static void copyDefaultResourcesIfMissing() throws IOException { } Util.logMessage("Local resources file not found. Copying from bundled resources."); - Optional resourceOptional = MinecraftClient.getInstance().getResourceManager().getResource(BUNDLED_RESOURCES_ID); + Optional resourceOptional = Minecraft.getInstance().getResourceManager().getResource(BUNDLED_RESOURCES_ID); if (resourceOptional.isPresent()) { - try (InputStream inputStream = resourceOptional.get().getInputStream()) { + try (InputStream inputStream = resourceOptional.get().open()) { Files.copy(inputStream, LOCAL_RESOURCES_PATH); // don't know the SHA of the bundled file, so stays null to force an update check. MetadataConfig.RESOURCES_SHA = ""; @@ -118,7 +125,7 @@ private static void downloadLatestResources(String downloadUrl, String latestSha MetadataConfig.RESOURCES_SHA = latestSha; ConfigUtil.scheduleConfigSave(); - BazaarDataManager.setConversionsLoaded(false); + ResourceManager.setConversionsLoaded(false); PlayerActionUtil.notifyAll("Successfully updated Bazaar resources!"); } catch (Exception e) { Util.notifyError("Failed to download resources", e); @@ -138,9 +145,9 @@ public static JsonObject getResourceJson() { Util.notifyError("Could not read local bazaar-resources.json", e); // Fallback to bundled resources if local read fails try { - Optional resourceOptional = MinecraftClient.getInstance().getResourceManager().getResource(BUNDLED_RESOURCES_ID); + Optional resourceOptional = Minecraft.getInstance().getResourceManager().getResource(BUNDLED_RESOURCES_ID); if (resourceOptional.isPresent()) { - try (InputStream inputStream = resourceOptional.get().getInputStream()) { + try (InputStream inputStream = resourceOptional.get().open()) { String content = new String(inputStream.readAllBytes()); return JsonParser.parseString(content).getAsJsonObject(); } @@ -158,4 +165,44 @@ public static void onClientStart(){ ResourceManager.initialize(); }); } + + /** + * Cached conversion load. Thread-safe (single pass). + */ + public static void ensureConversionsLoaded() { + if (conversionsLoaded) { + return; + } + + // Double-checked guard avoids repeated JSON parsing on the hot path. + synchronized (BazaarDataManager.class) { + if (conversionsLoaded) { + return; + } + + try { + Map mutable = new HashMap<>(); + + var resources = getResourceJson(); + var conversions = resources.getAsJsonObject(); + + for (String key : conversions.keySet()) { + String value = conversions.get(key).getAsString(); + if (value != null) { + mutable.put(value.toLowerCase(Locale.ROOT), key); + } + } + + nameToProductIdCache = Collections.unmodifiableMap(mutable); + conversionsLoaded = true; + + PlayerActionUtil.notifyAll("Loaded bazaarConversions cache: " + nameToProductIdCache.size() + " entries.", NotificationType.BAZAARDATA); + } catch (Exception e) { + Util.notifyError("Failed loading bazaarConversions cache", e); + + nameToProductIdCache = Map.of(); + conversionsLoaded = true; + } + } + } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/SoundUtil.java b/src/main/java/com/github/mkram17/bazaarutils/utils/SoundUtil.java index c1bb4e67..b84d4c55 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/SoundUtil.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/SoundUtil.java @@ -1,39 +1,39 @@ package com.github.mkram17.bazaarutils.utils; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.sound.PositionedSoundInstance; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.sounds.SimpleSoundInstance; +import net.minecraft.core.Holder; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; import java.util.concurrent.CompletableFuture; public class SoundUtil { public static void playSound(SoundEvent sound, float volume) { - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); var player = client.player; - if (client.world == null || player == null || client.getSoundManager() == null) { + if (client.level == null || player == null || client.getSoundManager() == null) { // Util.logError("Failed to play sound due to null value", new Throwable()); Util.tickExecuteLater(20, () -> playSound(sound, volume)); return; } - PositionedSoundInstance soundInstance = PositionedSoundInstance.ambient(sound, 1f, volume); + SimpleSoundInstance soundInstance = SimpleSoundInstance.forLocalAmbience(sound, 1f, volume); client.getSoundManager().play(soundInstance); } - public static void playSound(RegistryEntry soundEntry, float volume) { - MinecraftClient client = MinecraftClient.getInstance(); + public static void playSound(Holder soundEntry, float volume) { + Minecraft client = Minecraft.getInstance(); - if (client == null || client.getSoundManager() == null || client.world == null) { + if (client == null || client.getSoundManager() == null || client.level == null) { Util.logError("Failed to play sound due to null value", new Throwable()); Util.tickExecuteLater(20, () -> playSound(soundEntry, volume)); return; } - PositionedSoundInstance soundInstance = PositionedSoundInstance.ambient(soundEntry.value(), 1f, volume); + SimpleSoundInstance soundInstance = SimpleSoundInstance.forLocalAmbience(soundEntry.value(), 1f, volume); client.getSoundManager().play(soundInstance); } @@ -41,7 +41,7 @@ public static void playSound(RegistryEntry soundEntry, float volume) public static void notifyMultipleTimes(int notifyNum){ CompletableFuture.runAsync(() ->{ for(int i = 0; i < notifyNum; i++) { - Util.tickExecuteLater(1, () -> SoundUtil.playSound(SoundEvents.ENTITY_EXPERIENCE_ORB_PICKUP, .5f)); + Util.tickExecuteLater(1, () -> SoundUtil.playSound(SoundEvents.EXPERIENCE_ORB_PICKUP, .5f)); try { Thread.sleep(150); } catch (InterruptedException ex) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/Util.java b/src/main/java/com/github/mkram17/bazaarutils/utils/Util.java index 8e77b852..90692f52 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/Util.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/Util.java @@ -5,10 +5,10 @@ import com.github.mkram17.bazaarutils.utils.annotations.autoregistration.RunOnInit; import lombok.AllArgsConstructor; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.text.ClickEvent; -import net.minecraft.text.HoverEvent; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import org.apache.logging.log4j.LogManager; import java.math.BigDecimal; @@ -26,26 +26,26 @@ public class Util { "/bu tax {amount} to set bazaar tax. This is important for the mod to function correctly. /bu customorders to see current Custom Orders. /bu customorder {order amount} {slot number} to make new Custom Order /bu customorder remove {customorder number} to remove Custom Order (find number by using /bu customorders) \n---------------------------\n "; public static final String DISCORD_LINK = "https://discord.gg/xDKjvm5hQd"; - public static final Text DISCORD_TEXT = Text.literal("Discord server") - .styled(style -> { + public static final Component DISCORD_TEXT = Component.literal("Discord server") + .withStyle(style -> { try { return style .withBold(true) .withClickEvent(new ClickEvent.OpenUrl(new URI(DISCORD_LINK))) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to join the Discord!"))); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to join the Discord!"))); } catch (URISyntaxException e) { throw new RuntimeException(e); } }); - public static final Text CHANGELOG = Text.literal("Click To See Changelog") - .styled(style -> { + public static final Component CHANGELOG = Component.literal("Click To See Changelog") + .withStyle(style -> { try { return style .withBold(true) .withClickEvent(new ClickEvent.OpenUrl(new URI("https://modrinth.com/mod/bazaar-utils/changelog"))) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to see the changelog"))) - .withFormatting(Formatting.GREEN); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to see the changelog"))) + .applyFormat(ChatFormatting.GREEN); } catch (URISyntaxException e) { throw new RuntimeException(e); } @@ -72,12 +72,12 @@ private static void logError(String message, String callingName, Throwable e) { public static void notifyError(String message, Throwable e) { String callingName = getCallingClassName(); String simpleCallingName = callingName.substring(callingName.lastIndexOf(".") + 1); - Text messageText = Text.literal("[" + BazaarUtils.MOD_NAME + " Error]: " + message + ". Click here for support.") - .styled(style -> { + Component messageText = Component.literal("[" + BazaarUtils.MOD_NAME + " Error]: " + message + ". Click here for support.") + .withStyle(style -> { try { - return style.withColor(Formatting.RED) + return style.withColor(ChatFormatting.RED) .withClickEvent(new ClickEvent.OpenUrl(new URI("https://discord.gg/xDKjvm5hQd"))) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to join the Discord for support"))); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to join the Discord for support"))); } catch (URISyntaxException uriSyntaxException) { throw new RuntimeException(uriSyntaxException); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/InputHelper.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/InputHelper.java index 1c8cf90c..f07d3427 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/InputHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/InputHelper.java @@ -9,9 +9,9 @@ import com.github.mkram17.bazaarutils.utils.minecraft.item.ItemButton; import com.github.mkram17.bazaarutils.utils.minecraft.components.CustomDataComponents; import lombok.Getter; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import java.util.Optional; @@ -61,7 +61,7 @@ && shouldReplaceItem(event))) { ItemStack stack = getReplacementItem(); stack.set(CustomDataComponents.CUSTOM_SIZE, String.valueOf(getButtonItemStackSize(state.get()))); - stack.set(DataComponentTypes.CUSTOM_NAME, getButtonItemText(state.get())); + stack.set(DataComponents.CUSTOM_NAME, getButtonItemText(state.get())); event.setReplacement(stack); } @@ -89,7 +89,7 @@ public void onSlotClicked(SlotClickEvent event) { // Button stuff - protected abstract Text getButtonItemText(T state); + protected abstract Component getButtonItemText(T state); protected abstract String getButtonItemStackSize(T state); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/PlayerAccountUpgrades.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/PlayerAccountUpgrades.java index 1cf1e076..a9366332 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/PlayerAccountUpgrades.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/PlayerAccountUpgrades.java @@ -3,7 +3,7 @@ import com.teamresourceful.resourcefulconfig.api.types.info.TooltipProvider; import com.teamresourceful.resourcefulconfig.api.types.info.Translatable; import lombok.Getter; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; public class PlayerAccountUpgrades { @@ -13,8 +13,8 @@ public String getTranslationKey() { return "bazaarutils.hypixel.account_upgrades.bazaar_flipper.not_upgraded.label"; } @Override - public Text getTooltip() { - return Text.translatable("bazaarutils.hypixel.account_upgrades.bazaar_flipper.not_upgraded.label"); + public Component getTooltip() { + return Component.translatable("bazaarutils.hypixel.account_upgrades.bazaar_flipper.not_upgraded.label"); } }, FIRST_TIER(1.125, 21) { @@ -22,8 +22,8 @@ public String getTranslationKey() { return "bazaarutils.hypixel.account_upgrades.bazaar_flipper.first_tier.label"; } @Override - public Text getTooltip() { - return Text.translatable("bazaarutils.hypixel.account_upgrades.bazaar_flipper.first_tier.label"); + public Component getTooltip() { + return Component.translatable("bazaarutils.hypixel.account_upgrades.bazaar_flipper.first_tier.label"); } }, SECOND_TIER(1, 28) { @@ -31,8 +31,8 @@ public String getTranslationKey() { return "bazaarutils.hypixel.account_upgrades.bazaar_flipper.second_tier.label"; } @Override - public Text getTooltip() { - return Text.translatable("bazaarutils.hypixel.account_upgrades.bazaar_flipper.second_tier.label"); + public Component getTooltip() { + return Component.translatable("bazaarutils.hypixel.account_upgrades.bazaar_flipper.second_tier.label"); } }; diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/SignInputHelper.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/SignInputHelper.java index 337c0cf2..bd23ad56 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/SignInputHelper.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/SignInputHelper.java @@ -1,9 +1,9 @@ package com.github.mkram17.bazaarutils.utils.bazaar; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.events.ChestLoadedEvent; import com.github.mkram17.bazaarutils.utils.Util; -import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; +import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataUtil; import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarScreenHandler; import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarScreens; import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarSlots; @@ -21,19 +21,19 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.sign.SignManager; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.Getter; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.scoreboard.ScoreHolder; -import net.minecraft.scoreboard.ScoreboardDisplaySlot; -import net.minecraft.scoreboard.ScoreboardObjective; -import net.minecraft.scoreboard.Team; -import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.scores.ScoreHolder; +import net.minecraft.world.scores.DisplaySlot; +import net.minecraft.world.scores.Objective; +import net.minecraft.world.scores.PlayerTeam; +import net.minecraft.world.inventory.ChestMenu; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -77,7 +77,7 @@ public SignInputHelper(@NotNull String name, @NotNull BazaarSlots.BazaarSlot inp this.inputSignRef = inputSignRef; } - protected Optional getInputSign(Inventory inventory) { + protected Optional getInputSign(Container inventory) { int slot = inputSignRef.resolve(inventory); return inputSignRef.query(inventory).first(inventory).map(stack -> new ItemInfo(slot, stack)); @@ -111,10 +111,10 @@ public record TransactionState( ItemInfo inputSign, @NotNull - PlayerInventory playerInventory, + Inventory playerInventory, @NotNull - GenericContainerScreen containerScreen + ContainerScreen containerScreen ) implements SignInputState { } @@ -130,13 +130,13 @@ public enum AmountStrategy { @Override protected Optional makeState(ChestLoadedEvent event) { - Optional container = ScreenManager.getInstance() + Optional container = ScreenManager.getInstance() .current() - .flatMap(context -> context.as(GenericContainerScreen.class)); + .flatMap(context -> context.as(ContainerScreen.class)); - Optional inventory = container - .map(GenericContainerScreen::getScreenHandler) - .map(GenericContainerScreenHandler::getInventory); + Optional inventory = container + .map(ContainerScreen::getMenu) + .map(ChestMenu::getContainer); if (container.isEmpty() || inventory.isEmpty()) return Optional.empty(); @@ -156,11 +156,11 @@ protected Optional makeState(ChestLoadedEvent event) { if (productId.isEmpty()) return Optional.empty(); - Optional purse = Optional.ofNullable(MinecraftClient.getInstance()) - .flatMap(client -> Optional.ofNullable(client.world)) + Optional purse = Optional.ofNullable(Minecraft.getInstance()) + .flatMap(client -> Optional.ofNullable(client.level)) .flatMap(world -> Optional.ofNullable(world.getScoreboard())) .flatMap(scoreboard -> { - ScoreboardObjective objective = scoreboard.getObjectiveForSlot(ScoreboardDisplaySlot.SIDEBAR); + Objective objective = scoreboard.getDisplayObjective(DisplaySlot.SIDEBAR); if (objective == null) { return Optional.empty(); @@ -168,15 +168,15 @@ protected Optional makeState(ChestLoadedEvent event) { ObjectArrayList scoreboardLines = new ObjectArrayList<>(); - for (ScoreHolder scoreHolder : scoreboard.getKnownScoreHolders()) { - if (scoreboard.getScoreHolderObjectives(scoreHolder).containsKey(objective)) { - Team team = scoreboard.getScoreHolderTeam(scoreHolder.getNameForScoreboard()); + for (ScoreHolder scoreHolder : scoreboard.getTrackedPlayers()) { + if (scoreboard.listPlayerScores(scoreHolder).containsKey(objective)) { + PlayerTeam team = scoreboard.getPlayersTeam(scoreHolder.getScoreboardName()); if (team != null) { - String line = team.getPrefix().getString() + team.getSuffix().getString(); + String line = team.getPlayerPrefix().getString() + team.getPlayerSuffix().getString(); if (!line.trim().isEmpty()) { - scoreboardLines.add(Formatting.strip(line)); + scoreboardLines.add(ChatFormatting.stripFormatting(line)); } } } @@ -204,9 +204,9 @@ protected Optional makeState(ChestLoadedEvent event) { if (purse.isEmpty()) return Optional.empty(); - Optional playerInventory = Optional.ofNullable(MinecraftClient.getInstance()) + Optional playerInventory = Optional.ofNullable(Minecraft.getInstance()) .flatMap(client -> Optional.ofNullable(client.player)) - .map(ClientPlayerEntity::getInventory); + .map(LocalPlayer::getInventory); if (playerInventory.isEmpty()) return Optional.empty(); @@ -226,7 +226,7 @@ protected String getButtonItemStackSize(TransactionState state) { @Override protected ResolvedInput resolveInput(TransactionState state) { - OptionalDouble price = BazaarDataManager.findItemPriceOptional(state.productId(), getTransactionType()); + OptionalDouble price = BazaarDataUtil.findItemPriceOptional(state.productId(), getTransactionType()); if (price.isEmpty()) { Util.logMessage("Could not retrieve relevant item pricing for " + name + "'s resolved value."); @@ -249,14 +249,14 @@ protected int computeMaxValue(TransactionState state) { case INSTANT -> { if (getTransactionType().isBuy()) { yield Optional.of(state.containerScreen()) - .map(GenericContainerScreen::getScreenHandler) - .map(GenericContainerScreenHandler::getInventory) + .map(ContainerScreen::getMenu) + .map(ChestMenu::getContainer) .map(inventory -> SlotLookup.getInventoryItem(inventory, BazaarSlots.INSTANT_BUY.INPUT_FILLING_AMOUNT.slot)) .map(ItemInfo::itemStack) .flatMap(BazaarScreens::findOptionAmount) .map(value -> (int) Math.floor(value)) .orElse((int) state.playerInventory() - .getMainStacks() + .getNonEquipmentItems() .stream() .filter(ItemStack::isEmpty) .count() @@ -274,11 +274,11 @@ protected int computeMaxValue(TransactionState state) { .map(limit -> Math.min(amountCanAfford, limit)) .orElse(amountCanAfford); } - yield state.playerInventory().getMainStacks().stream() + yield state.playerInventory().getNonEquipmentItems().stream() .filter(stack -> !stack.isEmpty()) .filter(stack -> Optional.ofNullable(stack.getCustomName()) - .map(Text::getString) - .flatMap(BazaarDataManager::findProductIdOptional) + .map(Component::getString) + .flatMap(BazaarDataUtil::findProductIdOptional) .map(productId -> productId.equals(state.productId())) .orElse(false)) .mapToInt(ItemStack::getCount) @@ -297,7 +297,7 @@ public record TransactionState( ItemInfo inputSign, @NotNull - GenericContainerScreen containerScreen + ContainerScreen containerScreen ) implements SignInputState { } @@ -314,13 +314,13 @@ protected Optional getItemProductId(ItemInfo inputSign) { @Override protected Optional makeState(ChestLoadedEvent event) { - Optional container = ScreenManager.getInstance() + Optional container = ScreenManager.getInstance() .current() - .flatMap(context -> context.as(GenericContainerScreen.class)); + .flatMap(context -> context.as(ContainerScreen.class)); - Optional inventory = container - .map(GenericContainerScreen::getScreenHandler) - .map(GenericContainerScreenHandler::getInventory); + Optional inventory = container + .map(ContainerScreen::getMenu) + .map(ChestMenu::getContainer); if (container.isEmpty() || inventory.isEmpty()) return Optional.empty(); @@ -348,7 +348,7 @@ protected String getButtonItemStackSize(TransactionState state) { @Override protected ResolvedInput resolveInput(TransactionState state) { - OptionalDouble price = BazaarDataManager.findItemPriceOptional(state.productId(), getTransactionType()); + OptionalDouble price = BazaarDataUtil.findItemPriceOptional(state.productId(), getTransactionType()); if (price.isEmpty()) { Util.logMessage("Could not retrieve relevant item pricing for " + name + "'s resolved value."); @@ -373,12 +373,12 @@ public TransactionFlip(@NotNull String name, @NotNull BazaarSlots.BazaarSlot inp @Override protected Optional getItemProductId(ItemInfo inputSign) { - List loreLines = LoreParser.lines(inputSign.itemStack()); + List loreLines = LoreParser.lines(inputSign.itemStack()); if (loreLines.isEmpty()) return Optional.empty(); return matchToUserOrder(loreLines).map(Order::getProductID); } - private Optional matchToUserOrder(List loreLines) { + private Optional matchToUserOrder(List loreLines) { Optional priceInfo = getOrderPriceInfo(loreLines); Optional volume = getVolumeUnclaimed(loreLines); @@ -396,7 +396,7 @@ private Optional matchToUserOrder(List loreLines) { return tempOrder.findOrderInList(UserOrdersStorage.INSTANCE.get()); } - private Optional getOrderPriceInfo(List loreLines) { + private Optional getOrderPriceInfo(List loreLines) { if (loreLines.size() <= INPUT_LORE_LINE_PRICE) return Optional.empty(); Matcher matcher = PRICE_PATTERN.matcher(loreLines.get(INPUT_LORE_LINE_PRICE).getString()); @@ -412,7 +412,7 @@ private Optional getOrderPriceInfo(List loreLines) { return Optional.empty(); } - private Optional getVolumeUnclaimed(List loreLines) { + private Optional getVolumeUnclaimed(List loreLines) { if (loreLines.size() <= INPUT_LORE_LINE_VOLUME) return Optional.empty(); Matcher matcher = VOLUME_PATTERN.matcher(loreLines.get(INPUT_LORE_LINE_VOLUME).getString()); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/InstantSellParser.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/InstantSellParser.java index a874e627..2db64844 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/InstantSellParser.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/InstantSellParser.java @@ -4,8 +4,8 @@ import com.github.mkram17.bazaarutils.utils.bazaar.market.order.OrderInfo; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.TransactionType; import com.github.mkram17.bazaarutils.utils.minecraft.components.LoreParser; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; import java.util.List; import java.util.Optional; @@ -26,7 +26,7 @@ public static InstantSellResult parseOrders(ItemStack instantSellStack) { } public static Optional parseItemPageOrder(ItemStack sellInstantlyStack) { - List lines = LoreParser.lines(sellInstantlyStack); + List lines = LoreParser.lines(sellInstantlyStack); if (lines.size() < 6) return Optional.empty(); try { @@ -41,8 +41,8 @@ public static Optional parseItemPageOrder(ItemStack sellInsta } } - private static Optional parseLine(Text line) { - List s = line.getSiblings(); + private static Optional parseLine(Component line) { + List s = line.getSiblings(); if (s.size() != 6) return Optional.empty(); String name = s.get(3).getString().trim(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/SellSacksParser.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/SellSacksParser.java index e1f1588b..377553fc 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/SellSacksParser.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/components/SellSacksParser.java @@ -4,8 +4,8 @@ import com.github.mkram17.bazaarutils.utils.bazaar.market.order.OrderInfo; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.TransactionType; import com.github.mkram17.bazaarutils.utils.minecraft.components.LoreParser; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.List; @@ -22,8 +22,8 @@ public static SellSacksResult parseOrders(ItemStack sellSacksStack) { List items = new ArrayList<>(); Optional otherItems = Optional.empty(); - for (Text line : LoreParser.lines(sellSacksStack)) { - List s = line.getSiblings(); + for (Component line : LoreParser.lines(sellSacksStack)) { + List s = line.getSiblings(); if (s.size() != 6) continue; String name = s.get(3).getString().trim(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataManager.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataManager.java index 8a9cb156..d47f492f 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataManager.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataManager.java @@ -1,22 +1,16 @@ package com.github.mkram17.bazaarutils.utils.bazaar.data; import com.github.mkram17.bazaarutils.BazaarUtils; -import com.github.mkram17.bazaarutils.data.APIUtils; +import com.github.mkram17.bazaarutils.utils.APIUtil; import com.github.mkram17.bazaarutils.events.BazaarDataUpdateEvent; import com.github.mkram17.bazaarutils.misc.NotificationType; -import com.github.mkram17.bazaarutils.utils.annotations.autoregistration.RunOnInit; -import com.github.mkram17.bazaarutils.mixin.AccessorSkyBlockBazaarReply; import com.github.mkram17.bazaarutils.utils.PlayerActionUtil; -import com.github.mkram17.bazaarutils.utils.ResourceManager; import com.github.mkram17.bazaarutils.utils.Util; -import com.github.mkram17.bazaarutils.utils.bazaar.market.order.PriceType; -import com.github.mkram17.bazaarutils.utils.bazaar.market.order.TransactionType; +import com.github.mkram17.bazaarutils.utils.annotations.autoregistration.RunOnInit; +import com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers.APIConversionUtil; +import com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers.CustomBazaarReply; import lombok.Getter; -import lombok.Setter; -import net.hypixel.api.reply.skyblock.SkyBlockBazaarReply; -import java.time.Duration; -import java.util.*; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -25,36 +19,28 @@ public final class BazaarDataManager { - private static final long BASE_INTERVAL_MS = 20_000; - private static final long POST_OFFSET_MS = 500; - private static final long STALE_BACKOFF_MS = 750; - private static final long FAILURE_RETRY_MS = 500; - private static final int STALE_WARNING_THRESHOLD = 5; - @Getter - private static volatile SkyBlockBazaarReply currentReply; + private static volatile CustomBazaarReply currentReply; + @Getter private static volatile long lastSnapshotTs = -1; - private static volatile long lastFetchWallClock = -1; + + private static final BazaarDataSettings BAZAAR_DATA_SETTINGS = new BazaarDataSettings(); private static volatile ScheduledFuture scheduledTask; + // Serializes schedule/cancel so only one pending fetch task exists at a time. private static final Object SCHED_LOCK = new Object(); private static final AtomicInteger consecutiveIdenticalSnapshots = new AtomicInteger(0); - private static final AtomicInteger consecutiveFailures = new AtomicInteger(0); - /* Cached conversions: lowercase name -> productID */ - private static volatile Map nameToProductIdCache = Map.of(); - @Setter - private static volatile boolean conversionsLoaded = false; + private static final AtomicInteger consecutiveFailures = new AtomicInteger(0); @RunOnInit public static void init() { scheduleFetch(0); - PlayerActionUtil.notifyAll("BazaarDataManager initialized (simple fixed-interval poller). Base=" + BASE_INTERVAL_MS + "ms", NotificationType.BAZAARDATA); + PlayerActionUtil.notifyAll("BazaarDataManager initialized (simple fixed-interval poller). Base=" + BAZAAR_DATA_SETTINGS.BASE_INTERVAL_MS + "ms", NotificationType.BAZAARDATA); } - private static void scheduleFetch(long delayMs) { synchronized (SCHED_LOCK) { if (scheduledTask != null && !scheduledTask.isDone()) { @@ -67,258 +53,101 @@ private static void scheduleFetch(long delayMs) { private static void fetchOnceSafely() { try { fetchOnce(); - } catch (Throwable t) { - Util.notifyError("Unexpected error in BazaarDataManager fetch loop", t); - scheduleFetch(FAILURE_RETRY_MS); + } catch (Throwable throwable) { + Util.notifyError("Unexpected error in BazaarDataManager fetch loop", throwable); + scheduleFailureRetry(); } } private static void fetchOnce() { - lastFetchWallClock = System.currentTimeMillis(); - APIUtils.API.getSkyBlockBazaar().whenComplete((reply, throwable) -> { - if (throwable != null) { - consecutiveFailures.incrementAndGet(); - PlayerActionUtil.notifyAll("Fetch failure (" + throwable.getClass().getSimpleName() + "). Retry in " + FAILURE_RETRY_MS + "ms (failures=" + consecutiveFailures.get() + ")", NotificationType.BAZAARDATA); - scheduleFetch(FAILURE_RETRY_MS); - return; - } - if (reply == null || !reply.isSuccess()) { - consecutiveFailures.incrementAndGet(); - PlayerActionUtil.notifyAll("Null/unsuccessful reply. Retry in " + FAILURE_RETRY_MS + "ms (failures=" + consecutiveFailures.get() + ")", NotificationType.BAZAARDATA); - scheduleFetch(FAILURE_RETRY_MS); + APIUtil.API.getSkyBlockBazaar().whenComplete((reply, throwable) -> { + if (throwable != null || !reply.isSuccess()) { + handleFetchFailure( + "Fetch failure (" + throwable.getClass().getSimpleName() + "). Retry in " + BAZAAR_DATA_SETTINGS.FAILURE_RETRY_MS + "ms", + true + ); return; } - consecutiveFailures.set(0); - long snapshotTs = extractLastUpdated(reply); + CustomBazaarReply customReply = APIConversionUtil.fromSkyBlockReply(reply); + + long snapshotTs = customReply.getLastUpdated(); if (snapshotTs <= 0) { - PlayerActionUtil.notifyAll("Invalid lastUpdated <= 0. Retry in " + FAILURE_RETRY_MS + "ms", NotificationType.BAZAARDATA); - scheduleFetch(FAILURE_RETRY_MS); + handleFetchFailure("Invalid lastUpdated <= 0. Retry in " + BAZAAR_DATA_SETTINGS.FAILURE_RETRY_MS + "ms", false); return; } - if (snapshotTs != lastSnapshotTs) { - long previous = lastSnapshotTs; - lastSnapshotTs = snapshotTs; - currentReply = reply; - consecutiveIdenticalSnapshots.set(0); - - EVENT_BUS.post(new BazaarDataUpdateEvent(reply)); - - if (previous != -1) { - PlayerActionUtil.notifyAll("New snapshot " + snapshotTs + " (Δ " + (snapshotTs - previous) + " ms). Scheduling next predicted fetch.", NotificationType.BAZAARDATA); - } else { - PlayerActionUtil.notifyAll("First snapshot " + snapshotTs + " received.", NotificationType.BAZAARDATA); - } + consecutiveFailures.set(0); - scheduleNextFromSnapshot(snapshotTs); - } else { - int identical = consecutiveIdenticalSnapshots.incrementAndGet(); - PlayerActionUtil.notifyAll("Snapshot unchanged (" + snapshotTs + ") x" + identical, NotificationType.BAZAARDATA); - if (identical == STALE_WARNING_THRESHOLD) { - PlayerActionUtil.notifyAll("WARNING: " + identical + " identical snapshots in a row. Server might be lagging or BASE_INTERVAL_MS too short.", NotificationType.BAZAARDATA); - } - scheduleNextFromSnapshot(snapshotTs); - } + handleSnapshotResult(customReply, snapshotTs); + scheduleNextFromSnapshot(snapshotTs); }); } - private static void scheduleNextFromSnapshot(long snapshotTs) { - long now = System.currentTimeMillis(); - long target = snapshotTs + BASE_INTERVAL_MS + POST_OFFSET_MS; - - long delay; - if (now >= target) { - // Past the ideal fetch time; server hasn’t advanced snapshot yet. Don’t spam: back off. - delay = STALE_BACKOFF_MS; - } else { - var typicalDelay = target - now; - delay = Math.max(typicalDelay, STALE_BACKOFF_MS); - } - scheduleFetch(delay); + private static void handleFetchFailure(String messagePrefix, boolean includeFailureCount) { + int failureCount = includeFailureCount ? consecutiveFailures.incrementAndGet() : consecutiveFailures.get(); + String message = includeFailureCount ? messagePrefix + " (failures=" + failureCount + ")" : messagePrefix; + Util.notifyError(message, new Throwable()); + scheduleFailureRetry(); } - private static long extractLastUpdated(SkyBlockBazaarReply reply) { - try { - return ((AccessorSkyBlockBazaarReply) reply).getLastUpdated(); - } catch (Exception e) { - Util.notifyError("Failed to access lastUpdated (mixin+reflection failed)", e); - return -1; - - } - } - - - /** - * Get the number of orders at an exact price for a product & price type. - * @return OptionalInt empty if reply / product / priceType invalid or not found. - */ - public static OptionalInt getOrderCountOptional(String productId, TransactionType transactionType, double price) { - SkyBlockBazaarReply reply = currentReply; - - if (transactionType == null) { - return OptionalInt.empty(); - } - - PriceType priceType = transactionType.getPriceType(); - - if (reply == null || productId == null || priceType == null) { - return OptionalInt.empty(); - } - - try { - SkyBlockBazaarReply.Product product = reply.getProduct(productId); - - if (product == null) { - return OptionalInt.empty(); - } - - List list = switch (priceType) { - case INSTABUY -> product.getBuySummary(); - case INSTASELL -> product.getSellSummary(); - }; - - if (list == null) { - return OptionalInt.empty(); - } - - for (SkyBlockBazaarReply.Product.Summary s : list) { - if (Double.compare(s.getPricePerUnit(), price) == 0) { - return OptionalInt.of((int) s.getOrders()); - } - } - - return OptionalInt.of(0); - } catch (Exception e) { - Util.notifyError("Error in getOrderCountOptional for productID=" + productId, e); - - return OptionalInt.empty(); - } + private static void scheduleFailureRetry() { + scheduleFetch(BAZAAR_DATA_SETTINGS.FAILURE_RETRY_MS); } - /** - * Find the top bazaar price for a product based on the given {@link TransactionType}. - * The returned {@link OptionalDouble} is empty if the reply, product ID, or derived {@link PriceType} - * is {@code null}, if the product cannot be found, or if an exception occurs while resolving the price. - * If the selected summary list exists but is empty, this method returns {@code OptionalDouble.of(0.0)}. - * - * @param productId the bazaar product ID to look up - * @param transactionType the transaction type whose {@link PriceType} controls which summary is queried - * @return an {@link OptionalDouble} containing the resolved price per unit, or empty if unavailable - */ - public static OptionalDouble findItemPriceOptional(String productId, TransactionType transactionType) { - SkyBlockBazaarReply reply = currentReply; - - if (transactionType == null) { - return OptionalDouble.empty(); - } - - PriceType priceType = transactionType.getPriceType(); - - if (reply == null || productId == null || priceType == null) { - return OptionalDouble.empty(); //TODO maybe throw error here instead. Needs testing to make sure it doesn't happen too frequently or at times where it is expected behavior + private static void handleSnapshotResult(CustomBazaarReply reply, long snapshotTs) { + if (snapshotTs != lastSnapshotTs) { + handleNewSnapshot(reply, snapshotTs); + return; } - try { - SkyBlockBazaarReply.Product product = reply.getProduct(productId); - - if (product == null) { - return OptionalDouble.empty(); - } - - return switch (priceType) { - case INSTABUY -> { - List buySummary = product.getBuySummary(); - - if (buySummary == null || buySummary.isEmpty()) { - yield OptionalDouble.of(0.0); - } - - yield OptionalDouble.of(buySummary.getFirst().getPricePerUnit()); - } - case INSTASELL -> { - List sellSummary = product.getSellSummary(); - - if (sellSummary == null || sellSummary.isEmpty()) { - yield OptionalDouble.of(0.0); - } - - yield OptionalDouble.of(sellSummary.getFirst().getPricePerUnit()); - } - }; - } catch (Exception e) { - Util.notifyError("Error in findItemPriceOptional for productID=" + productId, e); - - return OptionalDouble.empty(); - } + handleUnchangedSnapshot(snapshotTs); } - public static Optional findProductIdOptional(String naturalName) { - if (naturalName == null || naturalName.isBlank()) { - return Optional.empty(); - } + private static void handleNewSnapshot(CustomBazaarReply reply, long snapshotTs) { + long previousSnapshotTs = lastSnapshotTs; + lastSnapshotTs = snapshotTs; + currentReply = reply; + consecutiveIdenticalSnapshots.set(0); - ensureConversionsLoaded(); - - return Optional.ofNullable(nameToProductIdCache.get(naturalName.toLowerCase(Locale.ROOT))); - } + EVENT_BUS.post(new BazaarDataUpdateEvent(reply)); - /** - * Cached conversion load. Thread-safe (single pass). - */ - private static void ensureConversionsLoaded() { - if (conversionsLoaded) { + if (previousSnapshotTs != -1) { + PlayerActionUtil.notifyAll( + "New snapshot " + snapshotTs + " (Δ " + (snapshotTs - previousSnapshotTs) + " ms). Scheduling next predicted fetch.", + NotificationType.BAZAARDATA + ); return; } - synchronized (BazaarDataManager.class) { - if (conversionsLoaded) { - return; - } - - try { - Map mutable = new HashMap<>(); - - var resources = ResourceManager.getResourceJson(); - var conversions = resources.getAsJsonObject(); - - for (String key : conversions.keySet()) { - String value = conversions.get(key).getAsString(); - if (value != null) { - mutable.put(value.toLowerCase(Locale.ROOT), key); - } - } - - nameToProductIdCache = Collections.unmodifiableMap(mutable); - conversionsLoaded = true; - - PlayerActionUtil.notifyAll("Loaded bazaarConversions cache: " + nameToProductIdCache.size() + " entries.", NotificationType.BAZAARDATA); - } catch (Exception e) { - Util.notifyError("Failed loading bazaarConversions cache", e); - - nameToProductIdCache = Map.of(); - conversionsLoaded = true; - } - } + PlayerActionUtil.notifyAll("First snapshot " + snapshotTs + " received.", NotificationType.BAZAARDATA); } - public static Optional getCurrentSnapshotAge() { - long ts = lastSnapshotTs; + private static void handleUnchangedSnapshot(long snapshotTs) { + int identicalSnapshotCount = consecutiveIdenticalSnapshots.incrementAndGet(); + PlayerActionUtil.notifyAll("Snapshot unchanged (" + snapshotTs + ") x" + identicalSnapshotCount, NotificationType.BAZAARDATA); - if (ts <= 0) { - return Optional.empty(); + if (identicalSnapshotCount == BAZAAR_DATA_SETTINGS.STALE_WARNING_THRESHOLD) { + PlayerActionUtil.notifyAll( + "WARNING: " + identicalSnapshotCount + " identical snapshots in a row. Server might be lagging or BASE_INTERVAL_MS too short.", + NotificationType.BAZAARDATA + ); } - - return Optional.of(Duration.ofMillis(System.currentTimeMillis() - ts)); } - public static Optional getTimeSinceLastFetchAttempt() { - long f = lastFetchWallClock; + private static void scheduleNextFromSnapshot(long snapshotTs) { + long nowMs = System.currentTimeMillis(); + long expectedNextFetchAtMs = snapshotTs + BAZAAR_DATA_SETTINGS.BASE_INTERVAL_MS + BAZAAR_DATA_SETTINGS.POST_OFFSET_MS; - if (f <= 0) { - return Optional.empty(); + long nextDelayMs; + if (nowMs >= expectedNextFetchAtMs) { + // Past the ideal fetch time; server has not advanced snapshot yet, so back off. + nextDelayMs = BAZAAR_DATA_SETTINGS.STALE_BACKOFF_MS; + } else { + long idealDelayMs = expectedNextFetchAtMs - nowMs; + nextDelayMs = Math.max(idealDelayMs, BAZAAR_DATA_SETTINGS.STALE_BACKOFF_MS); } - return Optional.of(Duration.ofMillis(System.currentTimeMillis() - f)); + scheduleFetch(nextDelayMs); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataSettings.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataSettings.java new file mode 100644 index 00000000..27984a30 --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataSettings.java @@ -0,0 +1,9 @@ +package com.github.mkram17.bazaarutils.utils.bazaar.data; + +public class BazaarDataSettings { + public final long BASE_INTERVAL_MS = 20_000; + public final long POST_OFFSET_MS = 500; + public final long STALE_BACKOFF_MS = 750; + public final long FAILURE_RETRY_MS = 500; + public final int STALE_WARNING_THRESHOLD = 5; +} diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataUtil.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataUtil.java new file mode 100644 index 00000000..68ce3864 --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/BazaarDataUtil.java @@ -0,0 +1,150 @@ +package com.github.mkram17.bazaarutils.utils.bazaar.data; + +import com.github.mkram17.bazaarutils.utils.ResourceManager; +import com.github.mkram17.bazaarutils.utils.Util; +import com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers.CustomBazaarReply; +import com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers.ProductData; +import com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers.ProductOrder; +import com.github.mkram17.bazaarutils.utils.bazaar.market.order.PriceType; +import com.github.mkram17.bazaarutils.utils.bazaar.market.order.TransactionType; +import net.hypixel.api.reply.skyblock.SkyBlockBazaarReply; + +import java.util.List; +import java.util.Locale; +import java.util.Optional; +import java.util.OptionalDouble; +import java.util.OptionalInt; + +public class BazaarDataUtil { + /** + * Get the number of orders at an exact price for a product & price type. + * @return OptionalInt empty if reply / product / priceType invalid or not found. + */ + public static OptionalInt getOrderCountOptional(String productId, TransactionType transactionType, double price) { + CustomBazaarReply reply = BazaarDataManager.getCurrentReply(); + + if (transactionType == null) { + return OptionalInt.empty(); + } + + PriceType priceType = transactionType.getPriceType(); + + if (reply == null || productId == null || priceType == null) { + return OptionalInt.empty(); + } + + try { + ProductData product = reply.getProduct(productId); + + if (product == null) { + return OptionalInt.empty(); + } + + List list = switch (priceType) { + case INSTABUY -> product.getBuyOrders(); + case INSTASELL -> product.getSellOrders(); + }; + + if (list == null) { + return OptionalInt.empty(); + } + + for (ProductOrder s : list) { + if (Double.compare(s.getPricePerUnit(), price) == 0) { + return OptionalInt.of((int) s.getVolume()); + } + } + + return OptionalInt.of(0); + } catch (Exception e) { + Util.notifyError("Error in getOrderCountOptional for productID=" + productId, e); + + return OptionalInt.empty(); + } + } + + /** + * Find the top bazaar price for a product based on the given {@link TransactionType}. + * The returned {@link OptionalDouble} is empty if the reply, product ID, or derived {@link PriceType} + * is {@code null}, if the product cannot be found, or if an exception occurs while resolving the price. + * If the selected summary list exists but is empty, this method returns {@code OptionalDouble.of(0.0)}. + * + * @param productId the bazaar product ID to look up + * @param transactionType the transaction type whose {@link PriceType} controls which summary is queried + * @return an {@link OptionalDouble} containing the resolved price per unit, or empty if unavailable + */ + public static OptionalDouble findItemPriceOptional(String productId, TransactionType transactionType) { + CustomBazaarReply reply = BazaarDataManager.getCurrentReply(); + if (transactionType == null) { + return OptionalDouble.empty(); + } + + PriceType priceType = transactionType.getPriceType(); + + if (reply == null || productId == null || priceType == null) { + return OptionalDouble.empty(); //TODO maybe throw error here instead. Needs testing to make sure it doesn't happen too frequently or at times where it is expected behavior + } + + try { + ProductData product = reply.getProduct(productId); + + if (product == null) { + return OptionalDouble.empty(); + } + + return switch (priceType) { + case INSTABUY -> { + List buySummary = product.getBuyOrders(); + + if (buySummary == null || buySummary.isEmpty()) { + yield OptionalDouble.of(0.0); + } + + yield OptionalDouble.of(buySummary.getFirst().getPricePerUnit()); + } + case INSTASELL -> { + List sellSummary = product.getSellOrders(); + + if (sellSummary == null || sellSummary.isEmpty()) { + yield OptionalDouble.of(0.0); + } + + yield OptionalDouble.of(sellSummary.getFirst().getPricePerUnit()); + } + }; + } catch (Exception e) { + Util.notifyError("Error in findItemPriceOptional for productID=" + productId, e); + + return OptionalDouble.empty(); + } + } + + + /** + * Checks whether the provided string is a known bazaar product ID. + * Uses in-memory data only (current reply + conversion cache). + */ + public static boolean isValidProductId(String productId) { + if (productId == null || productId.isBlank()) { + return false; + } + + CustomBazaarReply reply = BazaarDataManager.getCurrentReply(); + if (reply != null && reply.getProduct(productId) != null) { + return true; + } + + ResourceManager.ensureConversionsLoaded(); + return ResourceManager.getNameToProductIdCache().containsValue(productId); + } + + public static Optional findProductIdOptional(String naturalName) { + if (naturalName == null || naturalName.isBlank()) { + return Optional.empty(); + } + + ResourceManager.ensureConversionsLoaded(); + + return Optional.ofNullable(ResourceManager.getNameToProductIdCache().get(naturalName.toLowerCase(Locale.ROOT))); + } +} diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/APIConversionUtil.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/APIConversionUtil.java new file mode 100644 index 00000000..897e88b5 --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/APIConversionUtil.java @@ -0,0 +1,69 @@ +package com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers; + +import com.github.mkram17.bazaarutils.mixin.AccessorSkyBlockBazaarReply; +import com.github.mkram17.bazaarutils.utils.bazaar.market.order.Order; +import com.github.mkram17.bazaarutils.utils.bazaar.market.order.PriceType; +import net.hypixel.api.reply.skyblock.SkyBlockBazaarReply; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public final class APIConversionUtil { + + public static CustomBazaarReply fromSkyBlockReply(SkyBlockBazaarReply reply) { + AccessorSkyBlockBazaarReply accessor = (AccessorSkyBlockBazaarReply) reply; + + Map sourceProducts = reply.getProducts(); + Map converted = convertAPIProducts(sourceProducts); + + return new CustomBazaarReply(accessor.getLastUpdated(), converted); + } + + public static Map convertAPIProducts(Map apiProducts) { + if (apiProducts == null || apiProducts.isEmpty()) { + return Map.of(); + } + return apiProducts.entrySet().stream() + .collect(Collectors.toUnmodifiableMap( + Map.Entry::getKey, + e -> fromAPIProduct(e.getKey(), e.getValue()) + )); + } + + public static ProductData fromAPIProduct(String productId, SkyBlockBazaarReply.Product apiProduct) { + List sell = new ArrayList<>(); + List buy = new ArrayList<>(); + + if (apiProduct.getSellSummary() != null) { + var convertedSellSummaries = convertAPIProductSummaries(apiProduct.getSellSummary(), PriceType.INSTASELL); + sell.addAll(convertedSellSummaries); + } + + if (apiProduct.getBuySummary() != null) { + var convertedBuySummaries = convertAPIProductSummaries(apiProduct.getBuySummary(), PriceType.INSTABUY); + buy.addAll(convertedBuySummaries); + } + + return new ProductData(productId, sell, buy); + } + + public static List convertAPIProductSummaries(List apiSummaries, PriceType priceType) { + if (apiSummaries == null || apiSummaries.isEmpty()) { + return List.of(); + } + return apiSummaries.stream() + .map(s -> fromAPIProductSummary(s, priceType)) + .toList(); + } + + public static ProductOrder fromAPIProductSummary(SkyBlockBazaarReply.Product.Summary apiSummary, PriceType priceType) { + return new ProductOrder( + priceType, + apiSummary.getPricePerUnit(), + apiSummary.getAmount(), + apiSummary.getOrders() + ); + } +} diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/CustomBazaarReply.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/CustomBazaarReply.java new file mode 100644 index 00000000..3fdba9a6 --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/CustomBazaarReply.java @@ -0,0 +1,25 @@ +package com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers; + +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.bazaar.market.order.Order; +import lombok.Getter; +import net.hypixel.api.reply.AbstractReply; + +import java.util.List; +import java.util.Map; + +public class CustomBazaarReply extends AbstractReply { + @Getter + private final long lastUpdated; + @Getter + private final Map products; + + public CustomBazaarReply(long lastUpdated, Map products) { + this.lastUpdated = lastUpdated; + this.products = products; + } + + public ProductData getProduct(String productId) { + return products.get(productId); + } +} diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/ProductData.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/ProductData.java new file mode 100644 index 00000000..08951a1a --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/ProductData.java @@ -0,0 +1,28 @@ +package com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class ProductData { + @Getter + private final String productId; + private final List productBuyOrders; + private final List productSellOrders; + + public ProductData(String productId, List productBuyOrders, List productSellOrders) { + this.productId = productId; + this.productBuyOrders = new ArrayList<>(productBuyOrders); + this.productSellOrders = new ArrayList<>(productSellOrders); + } + + public List getBuyOrders() { + return productBuyOrders; + } + + public List getSellOrders() { + return productSellOrders; + } +} diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/ProductOrder.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/ProductOrder.java new file mode 100644 index 00000000..614bb584 --- /dev/null +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/data/wrappers/ProductOrder.java @@ -0,0 +1,30 @@ +package com.github.mkram17.bazaarutils.utils.bazaar.data.wrappers; + +import com.github.mkram17.bazaarutils.utils.bazaar.market.order.*; +import lombok.Getter; + +public class ProductOrder { + @Getter + private final PriceType priceType; + @Getter + private final double pricePerUnit; + @Getter + private final long volume; + @Getter + private final long numOrders; + + public ProductOrder(PriceType priceType, double pricePerUnit, long volume, long numOrders) { + this.priceType = priceType; + this.pricePerUnit = pricePerUnit; + this.volume = volume; + this.numOrders = numOrders; + } + + public boolean hasOrders() { + return numOrders >0 && pricePerUnit >0; + } + + public boolean equalsOrder(Order order) { + return order.getTransactionType().getPriceType() == priceType && order.getPricePerItem() == pricePerUnit && order.getVolume() == volume; + } +} diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreenHandler.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreenHandler.java index bbd5c1ed..b5be6d05 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreenHandler.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreenHandler.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.utils.bazaar.gui; -import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; +import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataUtil; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.OrderInfo; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.TransactionType; import com.github.mkram17.bazaarutils.utils.minecraft.ItemInfo; @@ -11,9 +11,9 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenContext; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; import com.github.mkram17.bazaarutils.utils.minecraft.gui.container.ContainerManager; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -65,12 +65,12 @@ public static Optional getDisplayItemName(@NotNull ScreenContext context return getDisplayItem(context) .map(ItemInfo::itemStack) .map(ItemStack::getCustomName) - .map(Text::getString); + .map(Component::getString); } public static Optional getDisplayProductId(@NotNull ScreenContext context) { return getDisplayItemName(context) - .flatMap(BazaarDataManager::findProductIdOptional); + .flatMap(BazaarDataUtil::findProductIdOptional); } public static Optional getDisplayOrderInfo(@NotNull ScreenContext context) { @@ -99,7 +99,7 @@ public static String getItemName(List containerItems) { private static String getItemNameFromStacks(List stacks, String nameFromTitle) { for (ItemStack stack : stacks) { if (stack == null || stack.isEmpty()) continue; - if (stack.getName().getString().startsWith(nameFromTitle)) { + if (stack.getHoverName().getString().startsWith(nameFromTitle)) { return stack.getCustomName().getString(); } } @@ -107,8 +107,8 @@ private static String getItemNameFromStacks(List stacks, String nameF } private static Optional getItemFromSlot(@NotNull ScreenContext context, BazaarSlots.BazaarSlot slot) { - return context.as(GenericContainerScreen.class) - .map(screen -> SlotLookup.getInventoryItem(screen.getScreenHandler().getInventory(), slot)); + return context.as(ContainerScreen.class) + .map(screen -> SlotLookup.getInventoryItem(screen.getMenu().getContainer(), slot)); } public static Optional findOptionAmount(ItemStack option) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreens.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreens.java index 122ff9bc..7e031ebe 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreens.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarScreens.java @@ -4,10 +4,10 @@ import com.github.mkram17.bazaarutils.utils.bazaar.InputHelper; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenType; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; import java.util.*; import java.util.regex.Matcher; @@ -166,10 +166,10 @@ public static void initialize() { ); public static Optional findOptionAmount(ItemStack option) { - LoreComponent lore = option.getComponents().get(DataComponentTypes.LORE); + ItemLore lore = option.getComponents().get(DataComponents.LORE); if (lore != null) { - String joined = lore.lines().stream().map(Text::getString).collect(Collectors.joining((" "))); + String joined = lore.lines().stream().map(Component::getString).collect(Collectors.joining((" "))); Matcher matcher = AMOUNT_PATTERN.matcher(joined); if (matcher.find()) { @@ -185,10 +185,10 @@ public static Optional findOptionAmount(ItemStack option) { } public static Optional findBuyOrderAmountLimit(ItemStack inputSign) { - LoreComponent lore = inputSign.getComponents().get(DataComponentTypes.LORE); + ItemLore lore = inputSign.getComponents().get(DataComponents.LORE); if (lore != null) { - String joined = lore.lines().stream().map(Text::getString).collect(Collectors.joining((" "))); + String joined = lore.lines().stream().map(Component::getString).collect(Collectors.joining((" "))); Matcher matcher = PURCHASE_LIMIT_PATTERN.matcher(joined); if (matcher.find()) { @@ -205,10 +205,10 @@ public static Optional findBuyOrderAmountLimit(ItemStack inputSign) { // Could be of use, but is not, as generally you cannot hold any further than what the Bazaar would allow you to sell order. public static Optional findSellAmountLimit(ItemStack inputSign) { - LoreComponent lore = inputSign.getComponents().get(DataComponentTypes.LORE); + ItemLore lore = inputSign.getComponents().get(DataComponents.LORE); if (lore != null) { - String joined = lore.lines().stream().map(Text::getString).collect(Collectors.joining((" "))); + String joined = lore.lines().stream().map(Component::getString).collect(Collectors.joining((" "))); Matcher matcher = SELL_LIMIT_PATTERN.matcher(joined); if (matcher.find()) { diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarSlots.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarSlots.java index 96bdae40..14f0947e 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarSlots.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/gui/BazaarSlots.java @@ -3,8 +3,8 @@ import com.github.mkram17.bazaarutils.utils.minecraft.SlotLookup; import com.github.mkram17.bazaarutils.utils.minecraft.gui.container.ContainerQuery; import lombok.AllArgsConstructor; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.Items; +import net.minecraft.world.Container; +import net.minecraft.world.item.Items; import java.util.function.Function; @@ -13,11 +13,11 @@ public record BazaarSlot( SlotLookup.IndexReference ref, Function builder ) { - public int resolve(Inventory container) { + public int resolve(Container container) { return ref.resolve(container); } - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return builder.apply(ref.query(container)); } } @@ -42,7 +42,7 @@ public enum OVERVIEW_PAGE { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } @@ -104,7 +104,7 @@ public enum ITEM_PAGE { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } @@ -139,7 +139,7 @@ public enum ITEMS_GROUP_PAGE { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } @@ -194,7 +194,7 @@ public enum ORDER_OPTIONS { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } @@ -219,7 +219,7 @@ public enum BUY_ORDER { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } @@ -253,7 +253,7 @@ public enum INSTANT_BUY { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } @@ -278,7 +278,7 @@ public enum SELL_OFFER { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } @@ -295,7 +295,7 @@ public enum INSTANT_SELL { public final BazaarSlot slot; - public ContainerQuery query(Inventory container) { + public ContainerQuery query(Container container) { return slot.query(container); } } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/Order.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/Order.java index e306dd1b..8385ef05 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/Order.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/Order.java @@ -2,7 +2,7 @@ import com.github.mkram17.bazaarutils.config.features.notification.NotificationsConfig; import com.github.mkram17.bazaarutils.config.features.DeveloperConfig; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.events.BazaarDataUpdateEvent; import com.github.mkram17.bazaarutils.events.UserOrdersChangeEvent; import com.github.mkram17.bazaarutils.events.listener.AbstractListener; @@ -16,9 +16,9 @@ import lombok.Setter; import lombok.ToString; import meteordevelopment.orbit.EventHandler; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; @@ -105,20 +105,20 @@ private void onOutbid(boolean isOutbid) { return; } - MutableText message; + MutableComponent message; if (isOutbid) { message = OutbidOrderHandler.getOutbidMessage(this); if (DeveloperConfig.DEVELOPER_MODE_TOGGLE) { - message.append(Text.literal(". Market Price: " + this.getMarketPrice(this.getTransactionType().getSide()) + " Order Price: " + this.getPricePerItem())); + message.append(Component.literal(". Market Price: " + this.getMarketPrice(this.getTransactionType().getSide()) + " Order Price: " + this.getPricePerItem())); } if (shouldAutoOpenBazaar) { OrderUtil.openBazaar(); } - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); var player = client.player; diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderInfo.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderInfo.java index 48895aaf..7180086f 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderInfo.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderInfo.java @@ -1,12 +1,11 @@ package com.github.mkram17.bazaarutils.utils.bazaar.market.order; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; -import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataUtil; import com.github.mkram17.bazaarutils.utils.minecraft.ItemInfo; import com.github.mkram17.bazaarutils.utils.Util; import com.github.mkram17.bazaarutils.utils.bazaar.market.price.PriceInfo; import com.github.mkram17.bazaarutils.utils.bazaar.market.price.PricingPosition; -import com.teamresourceful.resourcefulconfig.api.annotations.ConfigEntry; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -49,7 +48,7 @@ public class OrderInfo extends PriceInfo { * Creates a container that tracks market data for a specific Bazaar product. * * @param name display name of the item - * @param side whether this is a buy or sell transaction + * @param side whether this is a buy or sell transaction * @param status status of the order * @param volume quantity of the order * @param pricePerItem current price per unit for the order @@ -64,15 +63,14 @@ public OrderInfo(@Nullable String name, @Nullable TransactionType.Side side, @Nu this.volume = volume; this.tolerance = calculateTolerance(); - BazaarDataManager.findProductIdOptional(name).ifPresent(productId -> this.productID = productId); - validateProductId(productID); + BazaarDataUtil.findProductIdOptional(name).ifPresent(id -> this.productID = id); + validateProductId(); findPricingPosition().ifPresent(pricingPosition -> this.pricingPosition = pricingPosition); } - //TODO validate name/product id with method specifically for that. Maybe can switch findProdIdOpt for non optional version and then rely on validation method. - private void validateProductId(String productId) { - if(productId == null || productId.isBlank()) { - Util.notifyError("Error setting product id for " + this, new Throwable("Product ID cannot be null or blank")); + private void validateProductId() { + if(!BazaarDataUtil.isValidProductId(productID)){ + Util.notifyError("Error setting product id for " + this, new Throwable("Product ID is invalid")); } } @@ -98,7 +96,7 @@ private double calculateTolerance() { * @return {@code true} when a product ID exists for the name */ public static boolean isValidName(String itemName) { - return itemName != null && BazaarDataManager.findProductIdOptional(itemName).isPresent(); + return itemName != null && BazaarDataUtil.findProductIdOptional(itemName).isPresent(); } /** @@ -113,7 +111,7 @@ public Optional findPricingPosition() { double marketPrice = getMarketPrice(transactionType.getSide()); - var orderCountOpt = BazaarDataManager.getOrderCountOptional(productID, getTransactionType(), getPricePerItem()); + var orderCountOpt = BazaarDataUtil.getOrderCountOptional(productID, getTransactionType(), getPricePerItem()); if (orderCountOpt.isEmpty()) { return Optional.empty(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUpdater.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUpdater.java index 7b3d2855..a31b8ddf 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUpdater.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUpdater.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.utils.bazaar.market.order; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.events.ChestLoadedEvent; import com.github.mkram17.bazaarutils.utils.Util; import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarScreens; @@ -10,12 +10,12 @@ import com.github.mkram17.bazaarutils.utils.annotations.autoregistration.RunOnInit; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.List; @@ -24,7 +24,7 @@ import static com.github.mkram17.bazaarutils.BazaarUtils.EVENT_BUS; public class OrderUpdater { - private static Inventory lowerChestInventory; + private static Container lowerChestInventory; private static final String PREFIX_BUY = "BUY"; private static final String PREFIX_SELL = "SELL"; @@ -97,13 +97,13 @@ private static void updateBazaarOrder(Order order, ItemInfo parsedItemInfo) { order.setItemInfo(parsedItemInfo); - Optional loreComponent = order.getItemInfo().itemStack().getComponentChanges().get(DataComponentTypes.LORE); + Optional loreComponent = order.getItemInfo().itemStack().getComponentsPatch().get(DataComponents.LORE); if (loreComponent == null || loreComponent.isEmpty()) { return; } - List loreLines = loreComponent.get().styledLines(); + List loreLines = loreComponent.get().styledLines(); int amountFilled = parseAmountFilled(loreLines); int amountClaimed = parseAmountClaimed(loreLines, amountFilled); @@ -128,8 +128,8 @@ private static void updateBazaarOrder(Order order, ItemInfo parsedItemInfo) { } private static OrderInfo parseOrderFromItemStack(ItemStack stack) { - String title = stack.getName().getString(); - Optional loreComponent = stack.getComponentChanges().get(DataComponentTypes.LORE); + String title = stack.getHoverName().getString(); + Optional loreComponent = stack.getComponentsPatch().get(DataComponents.LORE); ItemInfo itemInfo = new ItemInfo(mapScreenIndexToInventoryIndex(stack), stack); @@ -137,7 +137,7 @@ private static OrderInfo parseOrderFromItemStack(ItemStack stack) { return null; } - List loreLines = loreComponent.get().styledLines(); + List loreLines = loreComponent.get().styledLines(); TransactionType.Side side = detectTransactionSide(title); @@ -186,8 +186,8 @@ private static String stripPrefix(String title, TransactionType.Side side) { return title.startsWith(prefix) ? title.substring(prefix.length()) : title; } - private static double parseUnitPrice(List lore) { - Text line = TextSearch.findLine(lore, LORE_PER_UNIT).orElse(null); + private static double parseUnitPrice(List lore) { + Component line = TextSearch.findLine(lore, LORE_PER_UNIT).orElse(null); if (line == null) { return Double.NaN; @@ -202,8 +202,8 @@ private static double parseUnitPrice(List lore) { } } - private static int parseVolume(List lore) { - Text line = TextSearch.findLine(lore, LORE_ORDER_AMOUNT).orElse(null); + private static int parseVolume(List lore) { + Component line = TextSearch.findLine(lore, LORE_ORDER_AMOUNT).orElse(null); if (line == null) { line = TextSearch.findLine(lore, LORE_OFFER_AMOUNT).orElse(null); @@ -221,8 +221,8 @@ private static int parseVolume(List lore) { } } - private static int parseAmountFilled(List lore) { - Text filledLine = TextSearch.findLine(lore, LORE_FILLED).orElse(null); + private static int parseAmountFilled(List lore) { + Component filledLine = TextSearch.findLine(lore, LORE_FILLED).orElse(null); if (filledLine == null) { return -1; @@ -243,12 +243,12 @@ private static int parseAmountFilled(List lore) { } } - private static int parseAmountClaimed(List lore, int amountFilled) { + private static int parseAmountClaimed(List lore, int amountFilled) { if (amountFilled < 0) { return -1; } - Text unclaimedLine = TextSearch.findLine(lore, LORE_TO_CLAIM).orElse(null); + Component unclaimedLine = TextSearch.findLine(lore, LORE_TO_CLAIM).orElse(null); if (unclaimedLine == null) { return amountFilled; // fully claimed @@ -279,8 +279,8 @@ private static int parseAmountClaimed(List lore, int amountFilled) { private static List extractOrderStacks(List screenStacks) { List result = new ArrayList<>(); for (ItemStack stack : screenStacks) { - if (stack.isOf(Items.BLACK_STAINED_GLASS_PANE)) continue; - if (stack.isOf(Items.ARROW)) break; // stop at navigation arrow + if (stack.is(Items.BLACK_STAINED_GLASS_PANE)) continue; + if (stack.is(Items.ARROW)) break; // stop at navigation arrow result.add(stack); } return result; @@ -288,8 +288,8 @@ private static List extractOrderStacks(List screenStacks) private static int mapScreenIndexToInventoryIndex(ItemStack target) { if (lowerChestInventory == null) return -1; - for (int i = 0; i < lowerChestInventory.size(); i++) { - ItemStack current = lowerChestInventory.getStack(i); + for (int i = 0; i < lowerChestInventory.getContainerSize(); i++) { + ItemStack current = lowerChestInventory.getItem(i); if (!current.isEmpty() && current.equals(target)) { return i; } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUtil.java b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUtil.java index 657c3fa1..b167df41 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUtil.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/bazaar/market/order/OrderUtil.java @@ -1,11 +1,11 @@ package com.github.mkram17.bazaarutils.utils.bazaar.market.order; -import com.github.mkram17.bazaarutils.data.UserOrdersStorage; +import com.github.mkram17.bazaarutils.utils.storage.UserOrdersStorage; import com.github.mkram17.bazaarutils.events.UserOrdersChangeEvent; import com.github.mkram17.bazaarutils.misc.NotificationType; import com.github.mkram17.bazaarutils.utils.PlayerActionUtil; import com.github.mkram17.bazaarutils.utils.Util; -import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; +import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataUtil; import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarScreens; import com.github.mkram17.bazaarutils.utils.bazaar.market.price.PricingPosition; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; @@ -74,8 +74,8 @@ public static double getPriceForPosition(String productID, PricingPosition prici return -1; } - OptionalDouble marketSellPriceOpt = BazaarDataManager.findItemPriceOptional(productID, TransactionType.of(TransactionType.Side.SELL, TransactionType.Method.ORDER)); - OptionalDouble marketBuyPriceOpt = BazaarDataManager.findItemPriceOptional(productID, TransactionType.of(TransactionType.Side.BUY, TransactionType.Method.ORDER)); + OptionalDouble marketSellPriceOpt = BazaarDataUtil.findItemPriceOptional(productID, TransactionType.of(TransactionType.Side.SELL, TransactionType.Method.ORDER)); + OptionalDouble marketBuyPriceOpt = BazaarDataUtil.findItemPriceOptional(productID, TransactionType.of(TransactionType.Side.BUY, TransactionType.Method.ORDER)); if(marketBuyPriceOpt.isEmpty() || marketSellPriceOpt.isEmpty()) { Util.notifyError("Could not resolve market prices for " + productID + " when calculating price for position. Buy price present: " + marketBuyPriceOpt.isPresent() + " Sell price present: " + marketSellPriceOpt.isPresent(), new Exception("Price resolution error")); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/ItemInfo.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/ItemInfo.java index de525601..e4395c63 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/ItemInfo.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/ItemInfo.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.utils.minecraft; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.ItemStack; /** * Encapsulates lightweight UI metadata for an item shown in the Bazaar orders screen, @@ -21,6 +21,6 @@ public boolean equals(Object other) { return false; } - return this.slotIndex.equals(index) && ItemStack.areEqual(this.itemStack, stack); + return this.slotIndex.equals(index) && ItemStack.matches(this.itemStack, stack); } } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/PlayerSlots.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/PlayerSlots.java index 408d8638..2bf5c1b5 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/PlayerSlots.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/PlayerSlots.java @@ -1,10 +1,10 @@ package com.github.mkram17.bazaarutils.utils.minecraft; -import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataManager; +import com.github.mkram17.bazaarutils.utils.bazaar.data.BazaarDataUtil; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.item.ItemStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.world.item.ItemStack; import java.util.List; import java.util.Objects; @@ -17,17 +17,17 @@ private PlayerSlots() {} public static Optional findScreenSlotByProductId(String productId) { return ScreenManager.getInstance() .current() - .flatMap(context -> context.as(GenericContainerScreen.class)) + .flatMap(context -> context.as(ContainerScreen.class)) .flatMap(screen -> { - int containerSize = screen.getScreenHandler().getInventory().size(); - List mainStacks = Objects.requireNonNull(MinecraftClient.getInstance().player) - .getInventory().getMainStacks(); + int containerSize = screen.getMenu().getContainer().getContainerSize(); + List mainStacks = Objects.requireNonNull(Minecraft.getInstance().player) + .getInventory().getNonEquipmentItems(); for (int i = 0; i < mainStacks.size(); i++) { ItemStack stack = mainStacks.get(i); boolean matches = !stack.isEmpty() - && BazaarDataManager.findProductIdOptional(stack.getName().getString()) + && BazaarDataUtil.findProductIdOptional(stack.getHoverName().getString()) .map(id -> id.equals(productId)) .orElse(false); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotHighlight.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotHighlight.java index 89f7c068..5e2ba4ed 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotHighlight.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotHighlight.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.utils.minecraft; -import net.minecraft.util.Identifier; +import net.minecraft.resources.Identifier; public interface SlotHighlight { Identifier getIdentifier(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotLookup.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotLookup.java index ad817a51..881da8b5 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotLookup.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/SlotLookup.java @@ -2,27 +2,27 @@ import com.github.mkram17.bazaarutils.utils.bazaar.gui.BazaarSlots; import com.github.mkram17.bazaarutils.utils.minecraft.gui.container.ContainerQuery; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; import java.util.Optional; public class SlotLookup { - public static ItemInfo getInventoryItem(Inventory inventory, int chestSlot) { - return new ItemInfo(chestSlot, inventory.getStack(chestSlot)); + public static ItemInfo getInventoryItem(Container inventory, int chestSlot) { + return new ItemInfo(chestSlot, inventory.getItem(chestSlot)); } - public static ItemInfo getInventoryItem(Inventory inventory, BazaarSlots.BazaarSlot slot) { + public static ItemInfo getInventoryItem(Container inventory, BazaarSlots.BazaarSlot slot) { return getInventoryItem(inventory, slot.resolve(inventory)); } - public static Optional getInventorySlotFromItemStack(Inventory inventory, ItemStack wanted) { - for (int i = 0; i < inventory.size() - 1; i++) { - ItemStack item = inventory.getStack(i); + public static Optional getInventorySlotFromItemStack(Container inventory, ItemStack wanted) { + for (int i = 0; i < inventory.getContainerSize() - 1; i++) { + ItemStack item = inventory.getItem(i); if (item.isEmpty()) continue; - if (item == wanted || (ItemStack.areItemsEqual(item, wanted) && item.getCount() == wanted.getCount())) { + if (item == wanted || (ItemStack.isSameItem(item, wanted) && item.getCount() == wanted.getCount())) { return Optional.of(i); } } @@ -32,13 +32,13 @@ public static Optional getInventorySlotFromItemStack(Inventory inventor public sealed interface IndexReference permits IndexReference.FixedIndex, IndexReference.ContainerSizeNegativeOffset { - int resolve(Inventory container); + int resolve(Container container); - default int getMaxInventoryIndex(Inventory container) { - return container.size() - 1; + default int getMaxInventoryIndex(Container container) { + return container.getContainerSize() - 1; } - default ContainerQuery query(Inventory container) { + default ContainerQuery query(Container container) { return ContainerQuery.at(resolve(container)); } @@ -50,7 +50,7 @@ public FixedIndex(int index) { } @Override - public int resolve(Inventory container) { + public int resolve(Container container) { return index; } } @@ -63,7 +63,7 @@ public ContainerSizeNegativeOffset(int delta) { } @Override - public int resolve(Inventory container) { + public int resolve(Container container) { return this.getMaxInventoryIndex(container) - delta; } } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/CustomDataComponents.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/CustomDataComponents.java index 7ade92cb..54cb1f8e 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/CustomDataComponents.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/CustomDataComponents.java @@ -3,24 +3,24 @@ import com.github.mkram17.bazaarutils.BazaarUtils; import com.github.mkram17.bazaarutils.utils.annotations.modules.PreInitModule; import com.mojang.serialization.Codec; -import net.minecraft.component.ComponentType; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.Registry; +import net.minecraft.resources.Identifier; @PreInitModule public final class CustomDataComponents { - public static ComponentType CUSTOM_SIZE; - public static ComponentType SHOW_PRICE_CHART; - public static ComponentType SLOT_SELECTOR_LOCKED; + public static DataComponentType CUSTOM_SIZE; + public static DataComponentType SHOW_PRICE_CHART; + public static DataComponentType SLOT_SELECTOR_LOCKED; public CustomDataComponents() { - CUSTOM_SIZE = register("custom_size", ComponentType.builder().codec(Codec.STRING).build()); - SHOW_PRICE_CHART = register("has_price_chart", ComponentType.builder().codec(Codec.BOOL).build()); - SLOT_SELECTOR_LOCKED = register("slot_selector_locked", ComponentType.builder().codec(Codec.BOOL).build()); + CUSTOM_SIZE = register("custom_size", DataComponentType.builder().persistent(Codec.STRING).build()); + SHOW_PRICE_CHART = register("has_price_chart", DataComponentType.builder().persistent(Codec.BOOL).build()); + SLOT_SELECTOR_LOCKED = register("slot_selector_locked", DataComponentType.builder().persistent(Codec.BOOL).build()); } - private static ComponentType register(String id, ComponentType type) { - return Registry.register(Registries.DATA_COMPONENT_TYPE, Identifier.of(BazaarUtils.MOD_ID, id), type); + private static DataComponentType register(String id, DataComponentType type) { + return Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, Identifier.fromNamespaceAndPath(BazaarUtils.MOD_ID, id), type); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/LoreParser.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/LoreParser.java index 0b3fdc4a..d4a8c65e 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/LoreParser.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/LoreParser.java @@ -1,10 +1,10 @@ package com.github.mkram17.bazaarutils.utils.minecraft.components; import com.github.mkram17.bazaarutils.utils.Util; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; import java.util.List; import java.util.Optional; @@ -16,8 +16,8 @@ public final class LoreParser { private LoreParser() {} - public static List lines(ItemStack stack) { - LoreComponent lore = stack.getComponents().get(DataComponentTypes.LORE); + public static List lines(ItemStack stack) { + ItemLore lore = stack.getComponents().get(DataComponents.LORE); return lore != null ? lore.lines() : List.of(); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/TextSearch.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/TextSearch.java index cab3a0f1..8a106253 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/TextSearch.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/components/TextSearch.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.utils.minecraft.components; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import java.util.LinkedList; import java.util.List; @@ -11,7 +11,7 @@ public final class TextSearch { private TextSearch() {} - public static int indexOf(List lines, String contains) { + public static int indexOf(List lines, String contains) { for (int i = 0; i < lines.size(); i++) { if (lines.get(i).getString().contains(contains)) return i; } @@ -19,7 +19,7 @@ public static int indexOf(List lines, String contains) { return -1; } - public static int lastIndexOf(List lines, String contains) { + public static int lastIndexOf(List lines, String contains) { for (int i = lines.size() - 1; i >= 0; i--) { if (lines.get(i).getString().contains(contains)) return i; } @@ -27,25 +27,25 @@ public static int lastIndexOf(List lines, String contains) { return -1; } - public static Optional findLine(List lines, String contains) { + public static Optional findLine(List lines, String contains) { return lines.stream() .filter(text -> text.getString().contains(contains)) .findFirst(); } - public static List findSpanning(List lines, String match) { + public static List findSpanning(List lines, String match) { String combined = lines.stream() - .map(Text::getString) + .map(Component::getString) .collect(Collectors.joining(" ")); int matchStart = combined.indexOf(match); if (matchStart == -1) return List.of(); int matchEnd = matchStart + match.length(); - List result = new LinkedList<>(); + List result = new LinkedList<>(); int offset = 0; - for (Text line : lines) { + for (Component line : lines) { int end = offset + line.getString().length(); if (offset < matchEnd && end > matchStart) result.add(line); offset = end; diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenContext.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenContext.java index 38e2c24e..beb07621 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenContext.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenContext.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.utils.minecraft.gui; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import java.util.Optional; @@ -27,7 +27,7 @@ public boolean matches(ScreenType wanted) { return type != null && type == wanted; } - public > Optional as(Class type) { + public > Optional as(Class type) { return type.isInstance(screen) ? Optional.of(type.cast(screen)) : Optional.empty(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenManager.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenManager.java index 33971364..2b124f43 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenManager.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenManager.java @@ -14,16 +14,16 @@ import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.gui.screen.ingame.SignEditScreen; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket; -import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.screen.ScreenHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.SignEditScreen; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.protocol.game.ServerboundContainerClosePacket; +import net.minecraft.world.inventory.ChestMenu; +import net.minecraft.world.inventory.AbstractContainerMenu; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -124,7 +124,7 @@ private static boolean isFollowUpScreen(Screen screen) { private static void onChestLoaded(ChestLoadedEvent event) { ContainerManager.onChestLoaded(event); - GenericContainerScreen screen = event.getGenericContainerScreen(); + ContainerScreen screen = event.getGenericContainerScreen(); ScreenType resolved = matchType(screen).orElse(null); List list = new ArrayList<>(instance.history); @@ -258,41 +258,41 @@ public boolean inRegisteredScreenType() { return isCurrent(types.toArray(ScreenType[]::new)); } - public Optional inGenericContainerScreen() { - return current().flatMap(ctx -> ctx.as(GenericContainerScreen.class)); + public Optional inGenericContainerScreen() { + return current().flatMap(ctx -> ctx.as(ContainerScreen.class)); } - public static Optional getCurrentScreenHandler(Class type) { - MinecraftClient client = MinecraftClient.getInstance(); + public static Optional getCurrentScreenHandler(Class type) { + Minecraft client = Minecraft.getInstance(); if (client == null || client.player == null) { return Optional.empty(); } - return type.isInstance(client.player.currentScreenHandler) - ? Optional.of(type.cast(client.player.currentScreenHandler)) + return type.isInstance(client.player.containerMenu) + ? Optional.of(type.cast(client.player.containerMenu)) : Optional.empty(); } - public static > Optional getCurrentlyHandledScreen(Class type) { - MinecraftClient client = MinecraftClient.getInstance(); + public static > Optional getCurrentlyHandledScreen(Class type) { + Minecraft client = Minecraft.getInstance(); if (client == null || client.player == null) { return Optional.empty(); } - return type.isInstance(client.currentScreen) - ? Optional.of(type.cast(client.currentScreen)) + return type.isInstance(client.screen) + ? Optional.of(type.cast(client.screen)) : Optional.empty(); } - public static Optional getScreenContainer() { - return getCurrentScreenHandler(GenericContainerScreenHandler.class) - .map(GenericContainerScreenHandler::getInventory); + public static Optional getScreenContainer() { + return getCurrentScreenHandler(ChestMenu.class) + .map(ChestMenu::getContainer); } public static Optional getScreenContainerSize() { - return getScreenContainer().map(Inventory::size); + return getScreenContainer().map(Container::getContainerSize); } public static ItemInfo getScreenItem(int chestSlot) { @@ -309,14 +309,14 @@ public static Optional getInventorySlotFromItemStack(ItemStack wanted) public static void closeHandledScreen() { PlayerActionUtil.notifyAll("Closing GUI", NotificationType.GUI); - if (getCurrentlyHandledScreen(HandledScreen.class).isEmpty()) { + if (getCurrentlyHandledScreen(AbstractContainerScreen.class).isEmpty()) { Util.notifyError("Current screen does not implement HandledScreen", new Throwable()); return; } try { - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); if (client == null) { Util.notifyError("Client is null", new Throwable()); @@ -332,16 +332,16 @@ public static void closeHandledScreen() { private static void customCloseHandledScreen() { try { - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); if (client.player == null) { Util.notifyError("Player is null, cannot close screen", new Throwable()); return; } - client.player.networkHandler.sendPacket(new CloseHandledScreenC2SPacket(client.player.currentScreenHandler.syncId)); + client.player.connection.send(new ServerboundContainerClosePacket(client.player.containerMenu.containerId)); client.setScreen(null); - client.player.currentScreenHandler = client.player.playerScreenHandler; + client.player.containerMenu = client.player.inventoryMenu; } catch (Exception exception) { Util.notifyError("Error encountered while closing screen with custom method", exception); throw new RuntimeException(exception); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenType.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenType.java index fe7d5b84..118ff65d 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenType.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/ScreenType.java @@ -3,12 +3,12 @@ import com.github.mkram17.bazaarutils.utils.Util; import com.github.mkram17.bazaarutils.utils.minecraft.gui.container.ContainerManager; import com.github.mkram17.bazaarutils.utils.minecraft.gui.container.ContainerQuery; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.Item; -import net.minecraft.predicate.NumberRange; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.world.Container; +import net.minecraft.world.item.Item; +import net.minecraft.advancements.criterion.MinMaxBounds; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.List; @@ -45,25 +45,25 @@ public Builder name(String label) { public Builder genericContainer() { return new Builder(concat(chain, new ScreenPredicate("GenericContainer", - screen -> screen instanceof GenericContainerScreen)), name); + screen -> screen instanceof ContainerScreen)), name); } public Builder containerTitle(String fragment) { return new Builder(concat(chain, new ScreenPredicate("Title[" + fragment + "]", screen -> { - Text text = screen.getTitle(); + Component text = screen.getTitle(); return text != null && Util.removeFormatting(text.getString()).contains(fragment); })), name); } - public Builder containerItem(NumberRange.IntRange slotRange, Item... wanted) { - String desc = "Item[slots=" + slotRange.getMin().orElse(0) + ".." + - slotRange.getMax().orElse(54) + ", types=" + + public Builder containerItem(MinMaxBounds.Ints slotRange, Item... wanted) { + String desc = "Item[slots=" + slotRange.min().orElse(0) + ".." + + slotRange.max().orElse(54) + ", types=" + java.util.Arrays.toString(wanted) + "]"; return new Builder(concat(chain, new ScreenPredicate(desc, screen -> ContainerQuery .range( - slotRange.getMin().orElse(0), - slotRange.getMax().orElse(ContainerManager.getLowerChestInventory().size() - 1) + slotRange.min().orElse(0), + slotRange.max().orElse(ContainerManager.getLowerChestInventory().getContainerSize() - 1) ) .itemType(wanted) .first() @@ -71,7 +71,7 @@ public Builder containerItem(NumberRange.IntRange slotRange, Item... wanted) { } public Builder containerItem(int slot, Item... wanted) { - return containerItem(NumberRange.IntRange.exactly(slot), wanted); + return containerItem(MinMaxBounds.Ints.exactly(slot), wanted); } public Builder containerQuery(ContainerQuery query) { @@ -80,11 +80,11 @@ public Builder containerQuery(ContainerQuery query) { screen -> query.first().isPresent())), name); } - public Builder containerQuery(Function builder) { + public Builder containerQuery(Function builder) { return containerQuery("fn", builder); } - public Builder containerQuery(String label, Function builder) { + public Builder containerQuery(String label, Function builder) { return new Builder(concat(chain, new ScreenPredicate( "Query[" + label + "]", screen -> builder.apply(ContainerManager.getLowerChestInventory()).first().isPresent())), name); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerManager.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerManager.java index bcd94626..cc0cf001 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerManager.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerManager.java @@ -7,13 +7,13 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenContext; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; import lombok.Getter; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerInteractionManager; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ClickType; import java.util.Optional; @@ -34,37 +34,37 @@ public static String getContainerName() { } @Getter - private static Inventory lowerChestInventory = null; + private static Container lowerChestInventory = null; public static int getLowerChestInventorySize() { - Inventory inventory = getLowerChestInventory(); + Container inventory = getLowerChestInventory(); if (inventory == null) { return -1; } - return inventory.size(); + return inventory.getContainerSize(); } public static void clickSlot(int slotIndex, int button) { - Optional handlerOpt = ScreenManager.getCurrentScreenHandler(ScreenHandler.class); + Optional handlerOpt = ScreenManager.getCurrentScreenHandler(AbstractContainerMenu.class); - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); - ClientPlayerInteractionManager interactionManager = client.interactionManager; - ClientPlayerEntity player = client.player; + MultiPlayerGameMode interactionManager = client.gameMode; + LocalPlayer player = client.player; if (interactionManager == null || player == null || handlerOpt.isEmpty()) { return; } - int syncId = handlerOpt.get().syncId; + int syncId = handlerOpt.get().containerId; Util.tickExecuteLater(1, () -> interactionManager - .clickSlot(syncId, + .handleInventoryMouseClick(syncId, slotIndex, button, - SlotActionType.PICKUP, + ClickType.PICKUP, player ) ); @@ -74,7 +74,7 @@ public static ItemInfo getChestItem(int chestSlot) { return SlotLookup.getInventoryItem(lowerChestInventory, chestSlot); } - public static int getInventorySlotFromItemStack(Inventory lowerChestInventory, ItemStack itemStack) { + public static int getInventorySlotFromItemStack(Container lowerChestInventory, ItemStack itemStack) { return SlotLookup.getInventorySlotFromItemStack(lowerChestInventory, itemStack).orElse(-1); } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerQuery.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerQuery.java index a7bc961a..f0fb5b60 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerQuery.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/container/ContainerQuery.java @@ -5,13 +5,13 @@ import com.github.mkram17.bazaarutils.utils.minecraft.SlotLookup; import com.github.mkram17.bazaarutils.utils.minecraft.components.TextSearch; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.predicate.NumberRange.IntRange; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.Container; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.advancements.criterion.MinMaxBounds.Ints; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.List; @@ -20,11 +20,11 @@ public class ContainerQuery { - private final IntRange slotRange; + private final Ints slotRange; private final Predicate filter; private final List description; - private ContainerQuery(IntRange slotRange, Predicate filter, List description) { + private ContainerQuery(Ints slotRange, Predicate filter, List description) { this.slotRange = slotRange; this.filter = filter; this.description = List.copyOf(description); @@ -32,14 +32,14 @@ private ContainerQuery(IntRange slotRange, Predicate filter, List true, List.of("slot=" + slot)); } public static ContainerQuery range(int minInclusive, int maxInclusive) { return new ContainerQuery( - IntRange.between(minInclusive, maxInclusive), + Ints.between(minInclusive, maxInclusive), item -> true, List.of("slots=" + minInclusive + ".." + maxInclusive)); } @@ -63,7 +63,7 @@ public ContainerQuery withCustomName(String... allowed) { String names = String.join("|", allowed); return chain(filter.and(stack -> { - Text data = stack.get(DataComponentTypes.CUSTOM_NAME); + Component data = stack.get(DataComponents.CUSTOM_NAME); if (data != null) { for (String name : allowed) { if (data.getString().contains(name)) return true; @@ -75,15 +75,15 @@ public ContainerQuery withCustomName(String... allowed) { public ContainerQuery withLore(String lore) { return chain(filter.and(stack -> { - LoreComponent data = stack.get(DataComponentTypes.LORE); + ItemLore data = stack.get(DataComponents.LORE); return data != null && !TextSearch.findSpanning(data.lines(), lore).isEmpty(); }), "lore[" + lore + "]"); } - public Optional first(Inventory inventory) { - int invSize = inventory.size(); - int min = Math.max(0, slotRange.getMin().orElse(0)); - int max = Math.min(invSize - 1, slotRange.getMax().orElse(invSize - 1)); + public Optional first(Container inventory) { + int invSize = inventory.getContainerSize(); + int min = Math.max(0, slotRange.min().orElse(0)); + int max = Math.min(invSize - 1, slotRange.max().orElse(invSize - 1)); for (int i = min; i <= max; i++) { ItemInfo item = SlotLookup.getInventoryItem(inventory, i); @@ -96,15 +96,15 @@ public Optional first(Inventory inventory) { } public Optional first() { - Optional inventory = ScreenManager.getScreenContainer(); + Optional inventory = ScreenManager.getScreenContainer(); if (inventory.isEmpty()) return Optional.empty(); return first(inventory.get()); } - public List all(Inventory inventory) { - int invSize = inventory.size(); - int min = Math.max(0, slotRange.getMin().orElse(0)); - int max = Math.min(invSize - 1, slotRange.getMax().orElse(invSize - 1)); + public List all(Container inventory) { + int invSize = inventory.getContainerSize(); + int min = Math.max(0, slotRange.min().orElse(0)); + int max = Math.min(invSize - 1, slotRange.max().orElse(invSize - 1)); List out = new ArrayList<>(); for (int i = min; i <= max; i++) { @@ -118,7 +118,7 @@ public List all(Inventory inventory) { } public List all() { - Optional inventory = ScreenManager.getScreenContainer(); + Optional inventory = ScreenManager.getScreenContainer(); if (inventory.isEmpty()) return new ArrayList<>(); return all(inventory.get()); } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/sign/SignManager.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/sign/SignManager.java index 2992663c..c04fdcbb 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/sign/SignManager.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/sign/SignManager.java @@ -9,9 +9,9 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenContext; import com.github.mkram17.bazaarutils.utils.minecraft.gui.ScreenManager; import meteordevelopment.orbit.EventHandler; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.SignEditScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.SignEditScreen; import java.util.Optional; import java.util.function.Consumer; @@ -34,7 +34,7 @@ public static void closeSign() { try { PlayerActionUtil.notifyAll("Closing sign", NotificationType.GUI); - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); ScreenManager screenManager = ScreenManager.getInstance(); Optional context = screenManager.current(); @@ -45,11 +45,11 @@ public static void closeSign() { return; } - if (client.currentScreen instanceof SignEditScreen signEditScreen && signEditScreen != context.get().screen()) { + if (client.screen instanceof SignEditScreen signEditScreen && signEditScreen != context.get().screen()) { screenManager.setCurrentScreen(signEditScreen); } - client.execute(context.get().screen()::close); + client.execute(context.get().screen()::onClose); } catch (Exception e) { Util.notifyError("Unknown error while closing sign", e); } @@ -66,7 +66,7 @@ private static void setSignTextInternal(String text, boolean closeAfter, int att return; } - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); if (client == null) { Util.notifyError("Failed to set sign text: MinecraftClient is null.", new Throwable()); @@ -77,7 +77,7 @@ private static void setSignTextInternal(String text, boolean closeAfter, int att client.execute(() -> { ScreenManager screenManager = ScreenManager.getInstance(); - Screen currentScreen = client.currentScreen; + Screen currentScreen = client.screen; if (currentScreen instanceof SignEditScreen) { Optional context = screenManager.current(); @@ -104,7 +104,7 @@ private static void setSignTextInternal(String text, boolean closeAfter, int att - if (client.currentScreen instanceof SignEditScreen signEditScreen && signEditScreen != context.get().screen()) { + if (client.screen instanceof SignEditScreen signEditScreen && signEditScreen != context.get().screen()) { screenManager.setCurrentScreen(signEditScreen); } @@ -112,16 +112,16 @@ private static void setSignTextInternal(String text, boolean closeAfter, int att AccessorSignEditScreen signScreen = (AccessorSignEditScreen) context.get().screen(); String[] lines = text.split("\n", 4); - int originalRow = signScreen.getCurrentRow(); + int originalRow = signScreen.getLine(); for (int i = 0; i < 4; i++) { String line = i < lines.length ? lines[i] : ""; - signScreen.setCurrentRow(i); - signScreen.callSetCurrentRowMessage(line); + signScreen.setLine(i); + signScreen.callSetMessage(line); } - signScreen.setCurrentRow(originalRow); + signScreen.setLine(originalRow); if (closeAfter) { closeSign(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/ItemSlotButtonWidget.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/ItemSlotButtonWidget.java index 95e55256..5b92329b 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/ItemSlotButtonWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/ItemSlotButtonWidget.java @@ -1,30 +1,31 @@ package com.github.mkram17.bazaarutils.utils.minecraft.gui.widgets; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ButtonTextures; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.TexturedButtonWidget; -import net.minecraft.item.ItemStack; -import net.minecraft.text.MutableText; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button.OnPress; +import net.minecraft.client.gui.components.WidgetSprites; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.components.ImageButton; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.MutableComponent; -public class ItemSlotButtonWidget extends TexturedButtonWidget { +public class ItemSlotButtonWidget extends ImageButton { private final ItemStack itemStack; - public ItemSlotButtonWidget(int x, int y, int width, int height, ButtonTextures textures, PressAction onPress, ItemStack itemStack, MutableText tooltip) { - super(x, y, width, height, textures, onPress, net.minecraft.text.Text.empty()); + public ItemSlotButtonWidget(int x, int y, int width, int height, WidgetSprites textures, OnPress onPress, ItemStack itemStack, MutableComponent tooltip) { + super(x, y, width, height, textures, onPress, net.minecraft.network.chat.Component.empty()); this.itemStack = itemStack; - this.setTooltip(Tooltip.of(tooltip)); + this.setTooltip(Tooltip.create(tooltip)); } @Override - public void drawIcon(DrawContext context, int mouseX, int mouseY, float delta) { - super.drawIcon(context, mouseX, mouseY, delta); + public void renderContents(GuiGraphics context, int mouseX, int mouseY, float delta) { + super.renderContents(context, mouseX, mouseY, delta); if (this.itemStack != null && !this.itemStack.isEmpty()) { int itemX = this.getX() + (this.width - 16) / 2; int itemY = this.getY() + (this.height - 16) / 2; - context.drawItem(this.itemStack, itemX, itemY); + context.renderItem(this.itemStack, itemX, itemY); } } } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/TextDisplayWidget.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/TextDisplayWidget.java index b11dd382..a24505aa 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/TextDisplayWidget.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/TextDisplayWidget.java @@ -1,46 +1,46 @@ package com.github.mkram17.bazaarutils.utils.minecraft.gui.widgets; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.text.Text; - -public class TextDisplayWidget extends ClickableWidget { +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.network.chat.Component; + +public class TextDisplayWidget extends AbstractWidget { public enum Alignment { LEFT, CENTER, RIGHT } - private final Text text; + private final Component text; private final Alignment alignment; - public TextDisplayWidget(int x, int y, int width, int height, Text text, Alignment alignment) { + public TextDisplayWidget(int x, int y, int width, int height, Component text, Alignment alignment) { super(x, y, width, height, text); this.text = text; this.alignment = alignment; } - public TextDisplayWidget(int x, int y, int width, int height, Text text) { + public TextDisplayWidget(int x, int y, int width, int height, Component text) { this(x, y, width, height, text, Alignment.LEFT); } @Override - public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { + Font textRenderer = Minecraft.getInstance().font; - int textY = this.getY() + (this.height - textRenderer.fontHeight) / 2; + int textY = this.getY() + (this.height - textRenderer.lineHeight) / 2; int textX = switch (alignment) { case LEFT -> this.getX(); - case CENTER -> this.getX() + (this.width - textRenderer.getWidth(text)) / 2; - case RIGHT -> this.getX() + this.width - textRenderer.getWidth(text); + case CENTER -> this.getX() + (this.width - textRenderer.width(text)) / 2; + case RIGHT -> this.getX() + this.width - textRenderer.width(text); }; - context.drawText(textRenderer, text, textX, textY, 0xFFFFFFFF, false); + context.drawString(textRenderer, text, textX, textY, 0xFFFFFFFF, false); } @Override - protected void appendClickableNarrations(NarrationMessageBuilder builder) {} + protected void updateWidgetNarration(NarrationElementOutput builder) {} } \ No newline at end of file diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/WidgetManager.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/WidgetManager.java index 4c802d1d..4d7bedf0 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/WidgetManager.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/gui/widgets/WidgetManager.java @@ -4,7 +4,7 @@ import com.github.mkram17.bazaarutils.events.ChestLoadedEvent; import com.github.mkram17.bazaarutils.events.ScreenChangeEvent; import com.github.mkram17.bazaarutils.misc.NotificationType; -import com.github.mkram17.bazaarutils.mixin.AccessorHandledScreen; +import com.github.mkram17.bazaarutils.mixin.AccessorAbstractContainerScreen; import com.github.mkram17.bazaarutils.mixin.AccessorScreen; import com.github.mkram17.bazaarutils.utils.PlayerActionUtil; import com.github.mkram17.bazaarutils.utils.annotations.autoregistration.RunOnInit; @@ -13,10 +13,10 @@ import com.github.mkram17.bazaarutils.utils.minecraft.gui.container.ContainerManager; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.screens.Screen; import java.util.List; import java.util.Optional; @@ -37,7 +37,7 @@ private static void onScreenChange(ScreenChangeEvent event) { // causes a flash when onChestLoaded removes and re-adds immediately after. Screen next = event.getNewScreen(); - if (next == null || next instanceof GenericContainerScreen) return; + if (next == null || next instanceof ContainerScreen) return; addWidgetsTo(next); } @@ -52,7 +52,7 @@ private static void onChestLoaded(ChestLoadedEvent event) { private static void addWidgetsTo(Screen screen) { if (!(screen instanceof AccessorScreen accessor)) return; - List widgets = ConfigUtil.getWidgets(); + List widgets = ConfigUtil.getWidgets(); if (widgets.isEmpty()) return; widgets.forEach(accessor::registerWidget); @@ -68,7 +68,7 @@ private static void removeWidgetsFrom(Screen screen) { } public static Optional getScreenDimensions(ScreenType... required) { - if (!(MinecraftClient.getInstance().currentScreen instanceof AccessorHandledScreen screen)) { + if (!(Minecraft.getInstance().screen instanceof AccessorAbstractContainerScreen screen)) { return Optional.empty(); } @@ -76,9 +76,9 @@ public static Optional getScreenDimensions(ScreenType... return Optional.empty(); } - int x = screen.getX(); - int y = screen.getY(); - int backgroundWidth = screen.getBackgroundWidth(); + int x = screen.getLeftPos(); + int y = screen.getTopPos(); + int backgroundWidth = screen.getImageWidth(); if (backgroundWidth <= 0) { PlayerActionUtil.notifyAll("BackgroundWidth not yet initialized for " + ContainerManager.getContainerName(), NotificationType.GUI); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemBuilder.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemBuilder.java index b4fdb3fe..ad7e4258 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemBuilder.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemBuilder.java @@ -2,16 +2,16 @@ import com.github.mkram17.bazaarutils.utils.minecraft.components.CustomDataComponents; import it.unimi.dsi.fastutil.objects.ReferenceSortedSets; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.TooltipDisplayComponent; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.TooltipDisplay; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; public final class ItemBuilder { private final Item item; private int count = 1; - private Text name = null; + private Component name = null; private boolean locked = false; private boolean hideTooltip = false; @@ -33,10 +33,10 @@ public ItemBuilder count(int count) { } public ItemBuilder named(String name) { - return named(Text.literal(name)); + return named(Component.literal(name)); } - public ItemBuilder named(Text name) { + public ItemBuilder named(Component name) { this.name = name; return this; } @@ -55,17 +55,17 @@ public ItemStack build() { var stack = new ItemStack(item, count); if (name != null) { - stack.set(DataComponentTypes.CUSTOM_NAME, name); + stack.set(DataComponents.CUSTOM_NAME, name); } if (locked) { stack.set(CustomDataComponents.SLOT_SELECTOR_LOCKED, true); } - TooltipDisplayComponent tooltip = hideTooltip - ? new TooltipDisplayComponent(true, ReferenceSortedSets.emptySet()) - : stack.getOrDefault(DataComponentTypes.TOOLTIP_DISPLAY, TooltipDisplayComponent.DEFAULT); + TooltipDisplay tooltip = hideTooltip + ? new TooltipDisplay(true, ReferenceSortedSets.emptySet()) + : stack.getOrDefault(DataComponents.TOOLTIP_DISPLAY, TooltipDisplay.DEFAULT); - stack.set(DataComponentTypes.TOOLTIP_DISPLAY, tooltip.with(DataComponentTypes.ATTRIBUTE_MODIFIERS, true)); + stack.set(DataComponents.TOOLTIP_DISPLAY, tooltip.withHidden(DataComponents.ATTRIBUTE_MODIFIERS, true)); return stack; } diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemButton.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemButton.java index 48c58c10..360ec074 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemButton.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemButton.java @@ -4,18 +4,18 @@ import com.github.mkram17.bazaarutils.events.ReplaceItemEvent; import com.github.mkram17.bazaarutils.events.SlotClickEvent; import com.github.mkram17.bazaarutils.utils.minecraft.item.groups.StateItemGroup; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.core.Holder; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; public interface ItemButton { Item DEFAULT_ITEM = Items.BARRIER; float BUTTON_VOLUME = 0.2f; - RegistryEntry BUTTON_SOUND = SoundEvents.UI_BUTTON_CLICK; + Holder BUTTON_SOUND = SoundEvents.UI_BUTTON_CLICK; int getSlotIndex(); ItemRef getItemRef(); diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemRef.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemRef.java index c8d2df72..77231ae1 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemRef.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/ItemRef.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.utils.minecraft.item; import com.github.mkram17.bazaarutils.utils.minecraft.item.groups.StateItemGroup; -import net.minecraft.item.Item; +import net.minecraft.world.item.Item; import java.util.List; import java.util.Optional; diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/StateItem.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/StateItem.java index 3db139df..4c61e1ef 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/StateItem.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/StateItem.java @@ -1,6 +1,6 @@ package com.github.mkram17.bazaarutils.utils.minecraft.item; -import net.minecraft.item.Item; +import net.minecraft.world.item.Item; public sealed interface StateItem { record Fixed(Item item) implements StateItem {} diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/ItemGroups.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/ItemGroups.java index 985bea73..21e78105 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/ItemGroups.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/ItemGroups.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.utils.minecraft.item.groups; -import net.minecraft.item.Item; -import net.minecraft.item.Items; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; import java.util.Set; diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/StateItemGroup.java b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/StateItemGroup.java index edb791d4..6da45706 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/StateItemGroup.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/minecraft/item/groups/StateItemGroup.java @@ -1,7 +1,7 @@ package com.github.mkram17.bazaarutils.utils.minecraft.item.groups; import com.github.mkram17.bazaarutils.utils.minecraft.item.StateItem; -import net.minecraft.item.Item; +import net.minecraft.world.item.Item; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/main/java/com/github/mkram17/bazaarutils/data/BazaarLimitsStorage.java b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/BazaarLimitsStorage.java similarity index 83% rename from src/main/java/com/github/mkram17/bazaarutils/data/BazaarLimitsStorage.java rename to src/main/java/com/github/mkram17/bazaarutils/utils/storage/BazaarLimitsStorage.java index a7596c06..166c4b06 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/data/BazaarLimitsStorage.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/BazaarLimitsStorage.java @@ -1,7 +1,6 @@ -package com.github.mkram17.bazaarutils.data; +package com.github.mkram17.bazaarutils.utils.storage; import com.github.mkram17.bazaarutils.features.gui.overlays.BazaarLimitsVisualizer; -import com.github.mkram17.bazaarutils.utils.storage.DataStorage; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; diff --git a/src/main/java/com/github/mkram17/bazaarutils/data/BookmarksStorage.java b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/BookmarksStorage.java similarity index 81% rename from src/main/java/com/github/mkram17/bazaarutils/data/BookmarksStorage.java rename to src/main/java/com/github/mkram17/bazaarutils/utils/storage/BookmarksStorage.java index 504c436f..14b3b70f 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/data/BookmarksStorage.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/BookmarksStorage.java @@ -1,7 +1,6 @@ -package com.github.mkram17.bazaarutils.data; +package com.github.mkram17.bazaarutils.utils.storage; import com.github.mkram17.bazaarutils.features.gui.buttons.bookmarks.Bookmark; -import com.github.mkram17.bazaarutils.utils.storage.DataStorage; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; diff --git a/src/main/java/com/github/mkram17/bazaarutils/utils/storage/DataStorage.java b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/DataStorage.java index 1172b2e2..3df03bbb 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/utils/storage/DataStorage.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/DataStorage.java @@ -9,7 +9,7 @@ import com.google.gson.*; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.ItemStack; import java.io.IOException; import java.lang.reflect.Type; diff --git a/src/main/java/com/github/mkram17/bazaarutils/data/UserOrdersStorage.java b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/UserOrdersStorage.java similarity index 81% rename from src/main/java/com/github/mkram17/bazaarutils/data/UserOrdersStorage.java rename to src/main/java/com/github/mkram17/bazaarutils/utils/storage/UserOrdersStorage.java index 018b605c..13b5c18d 100644 --- a/src/main/java/com/github/mkram17/bazaarutils/data/UserOrdersStorage.java +++ b/src/main/java/com/github/mkram17/bazaarutils/utils/storage/UserOrdersStorage.java @@ -1,7 +1,6 @@ -package com.github.mkram17.bazaarutils.data; +package com.github.mkram17.bazaarutils.utils.storage; import com.github.mkram17.bazaarutils.utils.bazaar.market.order.Order; -import com.github.mkram17.bazaarutils.utils.storage.DataStorage; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; diff --git a/src/main/resources/bazaarutils.mixins.json b/src/main/resources/bazaarutils.mixins.json index 5906ad05..8e53bd21 100644 --- a/src/main/resources/bazaarutils.mixins.json +++ b/src/main/resources/bazaarutils.mixins.json @@ -7,14 +7,14 @@ "defaultRequire": 1 }, "client": [ - "MinecraftClientMixin", - "AccessorHandledScreen", + "MinecraftMixin", + "AccessorAbstractContainerScreen", "AccessorScreen", "AccessorSignEditScreen", "DrawContentMixin", - "MixinHandledScreen", + "MixinAbstractContainerScreen", "MixinSignEditScreen", - "MixinSimpleInventory", + "MixinSimpleContainer", "AccessorSkyBlockBazaarReply" ] } \ No newline at end of file diff --git a/versions/1.21.11/gradle.properties b/versions/1.21.11/gradle.properties index d77fc47a..ebc383ea 100644 --- a/versions/1.21.11/gradle.properties +++ b/versions/1.21.11/gradle.properties @@ -2,7 +2,6 @@ deps.core.mcVersion=1.21.11 deps.core.maxMcVersion=1.21.11 deps.fabric_api= 0.141.2+1.21.11 -deps.yarn_build = 4 deps.api.architectury= 13.0.6 deps.resourcefulconfig_version = 1.21.11:3.11.3 deps.skyblocker_version = 6.0.0-beta.2+1.21.11