diff options
Diffstat (limited to 'src')
15 files changed, 177 insertions, 148 deletions
diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/EntityWidget.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/EntityWidget.kt index 1097654..cc55fb8 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/EntityWidget.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/EntityWidget.kt @@ -5,9 +5,9 @@ import me.shedaniel.math.FloatingDimension import me.shedaniel.math.Point import me.shedaniel.math.Rectangle import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds -import net.minecraft.client.gui.DrawContext -import net.minecraft.client.gui.Element -import net.minecraft.entity.LivingEntity +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.gui.components.events.GuiEventListener +import net.minecraft.world.entity.LivingEntity import moe.nea.firmament.gui.entity.EntityRenderer import moe.nea.firmament.util.ErrorUtil @@ -17,13 +17,13 @@ class EntityWidget( val point: Point, val size: FloatingDimension = FloatingDimension(defaultSize) ) : WidgetWithBounds() { - override fun children(): List<Element> { + override fun children(): List<GuiEventListener> { return emptyList() } var hasErrored = false - override fun render(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) { + override fun render(context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float) { try { if (!hasErrored) { EntityRenderer.renderEntity( diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/FirmamentReiPlugin.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/FirmamentReiPlugin.kt index 1c97738..ad0da89 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/FirmamentReiPlugin.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/FirmamentReiPlugin.kt @@ -13,13 +13,14 @@ import me.shedaniel.rei.api.client.registry.transfer.TransferHandler import me.shedaniel.rei.api.client.registry.transfer.TransferHandlerRegistry import me.shedaniel.rei.api.common.entry.EntryStack import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes -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.item.ItemStack -import net.minecraft.text.Text -import net.minecraft.util.ActionResult -import net.minecraft.util.Identifier +import net.minecraft.client.gui.screens.Screen +import net.minecraft.client.gui.screens.inventory.ContainerScreen +import net.minecraft.client.gui.screens.inventory.MenuAccess +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen +import net.minecraft.world.item.ItemStack +import net.minecraft.network.chat.Component +import net.minecraft.world.InteractionResult +import net.minecraft.resources.ResourceLocation import moe.nea.firmament.compat.rei.recipes.GenericREIRecipeCategory import moe.nea.firmament.compat.rei.recipes.SBKatRecipe import moe.nea.firmament.compat.rei.recipes.SBMobDropRecipe @@ -50,7 +51,7 @@ class FirmamentReiPlugin : REIClientPlugin { return EntryStack.of(VanillaEntryTypes.ITEM, value.asImmutableItemStack()) } - val SKYBLOCK_ITEM_TYPE_ID = Identifier.of("firmament", "skyblockitems") + val SKYBLOCK_ITEM_TYPE_ID = ResourceLocation.fromNamespaceAndPath("firmament", "skyblockitems") } @OptIn(ExpensiveItemCacheApi::class) @@ -66,14 +67,14 @@ class FirmamentReiPlugin : REIClientPlugin { ?: error("Could not find neu item ${recipe.output.itemId} which is used in a recipe output") val useSuperCraft = context.isStackedCrafting || RepoManager.TConfig.alwaysSuperCraft if (neuItem.isVanilla && useSuperCraft) return@TransferHandler TransferHandler.Result.createFailed( - Text.translatable( + Component.translatable( "firmament.recipe.novanilla" ) ) var shouldReturn = true if (context.isActuallyCrafting && !useSuperCraft) { - val craftingScreen = (screen as? GenericContainerScreen) - ?.takeIf { it.title?.unformattedString == CraftingOverlay.CRAFTING_SCREEN_NAME } + val craftingScreen = (screen as? ContainerScreen) + ?.takeIf { it.title?.string == CraftingOverlay.CRAFTING_SCREEN_NAME } if (craftingScreen == null) { MC.sendCommand("craft") shouldReturn = false @@ -107,7 +108,7 @@ class FirmamentReiPlugin : REIClientPlugin { } override fun registerExclusionZones(zones: ExclusionZones) { - zones.register(HandledScreen::class.java) { HandledScreenPushREIEvent.publish(HandledScreenPushREIEvent(it)).rectangles } + zones.register(AbstractContainerScreen::class.java) { HandledScreenPushREIEvent.publish(HandledScreenPushREIEvent(it)).rectangles } zones.register(StorageOverlayScreen::class.java) { it.getBounds() } } @@ -143,7 +144,7 @@ class FirmamentReiPlugin : REIClientPlugin { .forEach { (parent, children) -> registry.group( SkyblockId(parent).identifier, - Text.literal(RepoManager.getNEUItem(SkyblockId(parent))?.displayName ?: parent), + Component.literal(RepoManager.getNEUItem(SkyblockId(parent))?.displayName ?: parent), (children + parent).map { SBItemEntryDefinition.getEntry(SkyblockId(it)) }) } } @@ -154,8 +155,8 @@ class FirmamentReiPlugin : REIClientPlugin { return screen == StorageOverlayScreen::class.java } - override fun <R : Screen?> shouldScreenBeOverlaid(screen: R): ActionResult { - return ActionResult.SUCCESS + override fun <R : Screen?> shouldScreenBeOverlaid(screen: R): InteractionResult { + return InteractionResult.SUCCESS } }) registry.registerFocusedStack(SkyblockItemIdFocusedStackProvider) diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/HoveredItemStackProvider.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/HoveredItemStackProvider.kt index b917c3e..a19355b 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/HoveredItemStackProvider.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/HoveredItemStackProvider.kt @@ -5,17 +5,18 @@ import me.shedaniel.math.impl.PointHelper import me.shedaniel.rei.api.client.REIRuntime import me.shedaniel.rei.api.client.gui.widgets.Slot import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry -import net.minecraft.client.gui.Element -import net.minecraft.client.gui.ParentElement -import net.minecraft.client.gui.screen.ingame.HandledScreen -import net.minecraft.item.ItemStack +import net.minecraft.client.gui.components.events.GuiEventListener +import net.minecraft.client.gui.components.events.ContainerEventHandler +import net.minecraft.client.gui.screens.Screen +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen +import net.minecraft.world.item.ItemStack import moe.nea.firmament.util.HoveredItemStackProvider import moe.nea.firmament.util.compatloader.CompatLoader @AutoService(HoveredItemStackProvider::class) @CompatLoader.RequireMod("roughlyenoughitems") class ScreenRegistryHoveredItemStackProvider : HoveredItemStackProvider { - override fun provideHoveredItemStack(screen: HandledScreen<*>): ItemStack? { + override fun provideHoveredItemStack(screen: Screen): ItemStack? { val entryStack = ScreenRegistry.getInstance().getFocusedStack(screen, PointHelper.ofMouse()) ?: return null return entryStack.value as? ItemStack ?: entryStack.cheatsAs().value @@ -25,14 +26,14 @@ class ScreenRegistryHoveredItemStackProvider : HoveredItemStackProvider { @AutoService(HoveredItemStackProvider::class) @CompatLoader.RequireMod("roughlyenoughitems") class OverlayHoveredItemStackProvider : HoveredItemStackProvider { - override fun provideHoveredItemStack(screen: HandledScreen<*>): ItemStack? { - var baseElement: Element? = REIRuntime.getInstance().overlay.orElse(null) + override fun provideHoveredItemStack(screen: Screen): ItemStack? { + var baseElement: GuiEventListener? = REIRuntime.getInstance().overlay.orElse(null) val mx = PointHelper.getMouseFloatingX() val my = PointHelper.getMouseFloatingY() while (true) { if (baseElement is Slot) return baseElement.currentEntry.cheatsAs().value - if (baseElement !is ParentElement) return null - baseElement = baseElement.hoveredElement(mx, my).orElse(null) + if (baseElement !is ContainerEventHandler) return null + baseElement = baseElement.getChildAt(mx, my).orElse(null) } } } diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntryRenderer.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntryRenderer.kt index e273020..0e24f4e 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntryRenderer.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntryRenderer.kt @@ -15,12 +15,12 @@ import me.shedaniel.rei.api.client.gui.widgets.Tooltip import me.shedaniel.rei.api.client.gui.widgets.TooltipContext import me.shedaniel.rei.api.common.entry.EntryStack import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback -import net.minecraft.client.MinecraftClient -import net.minecraft.client.gui.DrawContext -import net.minecraft.item.ItemStack -import net.minecraft.item.Items -import net.minecraft.item.tooltip.TooltipType -import net.minecraft.text.Text +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.Items +import net.minecraft.world.item.TooltipFlag +import net.minecraft.network.chat.Component import moe.nea.firmament.events.ItemTooltipEvent import moe.nea.firmament.repo.ExpensiveItemCacheApi import moe.nea.firmament.repo.ItemCache @@ -28,6 +28,7 @@ import moe.nea.firmament.repo.RepoManager import moe.nea.firmament.repo.SBItemStack import moe.nea.firmament.util.ErrorUtil import moe.nea.firmament.util.FirmFormatters +import moe.nea.firmament.util.MC import moe.nea.firmament.util.darkGrey import moe.nea.firmament.util.mc.displayNameAccordingToNbt import moe.nea.firmament.util.mc.loreAccordingToNbt @@ -38,7 +39,7 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> { @OptIn(ExpensiveItemCacheApi::class) override fun render( entry: EntryStack<SBItemStack>, - context: DrawContext, + context: GuiGraphics, bounds: Rectangle, mouseX: Int, mouseY: Int, @@ -52,22 +53,22 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> { entry.value.asImmutableItemStack() } - context.matrices.pushMatrix() - context.matrices.translate(bounds.centerX.toFloat(), bounds.centerY.toFloat(), ) - context.matrices.scale(bounds.width.toFloat() / 16F, bounds.height.toFloat() / 16F, ) - context.drawItemWithoutEntity(itemToRender, -8, -8) - context.drawStackOverlay( - minecraft.textRenderer, itemToRender, -8, -8, + context.pose().pushMatrix() + context.pose().translate(bounds.centerX.toFloat(), bounds.centerY.toFloat()) + context.pose().scale(bounds.width.toFloat() / 16F, bounds.height.toFloat() / 16F) + context.renderItem(itemToRender, -8, -8) + context.renderItemDecorations( + MC.font, itemToRender, -8, -8, if (entry.value.getStackSize() > 1000) FirmFormatters.shortFormat( entry.value.getStackSize() .toDouble() ) else null ) - context.matrices.popMatrix() + context.pose().popMatrix() } - val minecraft = MinecraftClient.getInstance() + val minecraft = Minecraft.getInstance() var canUseVanillaTooltipEvents = true @OptIn(ExpensiveItemCacheApi::class) @@ -75,9 +76,9 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> { if (!entry.value.isWarm() && !RepoManager.TConfig.perfectRenders.rendersPerfectText()) { val neuItem = entry.value.neuItem if (neuItem != null) { - val lore = mutableListOf<Text>() - lore.add(Text.literal(neuItem.displayName)) - neuItem.lore.mapTo(mutableListOf()) { Text.literal(it) } + val lore = mutableListOf<Component>() + lore.add(Component.literal(neuItem.displayName)) + neuItem.lore.mapTo(mutableListOf()) { Component.literal(it) } return Tooltip.create(lore) } } @@ -89,7 +90,7 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> { if (canUseVanillaTooltipEvents) { try { ItemTooltipCallback.EVENT.invoker().getTooltip( - stack, tooltipContext.vanillaContext(), TooltipType.BASIC, lore + stack, tooltipContext.vanillaContext(), TooltipFlag.Default.NORMAL, lore ) } catch (ex: Exception) { canUseVanillaTooltipEvents = false @@ -100,13 +101,13 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> { ItemTooltipEvent( stack, tooltipContext.vanillaContext(), - TooltipType.BASIC, + TooltipFlag.Default.NORMAL, lore ) ) } if (entry.value.getStackSize() > 1000 && lore.isNotEmpty()) - lore.add(1, Text.literal("${entry.value.getStackSize()}x").darkGrey()) + lore.add(1, Component.literal("${entry.value.getStackSize()}x").darkGrey()) // TODO: tags aren't sent as early now so some tooltip components that use tags will crash the game // stack.getTooltip( // Item.TooltipContext.create( @@ -114,7 +115,7 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> { // ?: MC.defaultRegistries // ), // MC.player, -// TooltipType.BASIC +// TooltipFlag.Default.NORMAL // ) return Tooltip.create(lore) } diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntrySerializer.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntrySerializer.kt index 724d193..9f32472 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntrySerializer.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/NEUItemEntrySerializer.kt @@ -2,8 +2,8 @@ package moe.nea.firmament.compat.rei import com.mojang.serialization.Codec import me.shedaniel.rei.api.common.entry.EntrySerializer -import net.minecraft.network.RegistryByteBuf -import net.minecraft.network.codec.PacketCodec +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec import moe.nea.firmament.repo.SBItemStack object NEUItemEntrySerializer : EntrySerializer<SBItemStack> { @@ -11,7 +11,7 @@ object NEUItemEntrySerializer : EntrySerializer<SBItemStack> { return SBItemStack.CODEC } - override fun streamCodec(): PacketCodec<RegistryByteBuf, SBItemStack> { + override fun streamCodec(): StreamCodec<RegistryFriendlyByteBuf, SBItemStack> { return SBItemStack.PACKET_CODEC.cast() } } diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/REIRecipeLayouter.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/REIRecipeLayouter.kt index 8e39f28..54bc7f0 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/REIRecipeLayouter.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/REIRecipeLayouter.kt @@ -2,11 +2,13 @@ package moe.nea.firmament.compat.rei import io.github.notenoughupdates.moulconfig.gui.GuiComponent import me.shedaniel.math.Dimension +import me.shedaniel.math.FloatingDimension import me.shedaniel.math.Point import me.shedaniel.math.Rectangle import me.shedaniel.rei.api.client.gui.widgets.Widget import me.shedaniel.rei.api.client.gui.widgets.Widgets -import net.minecraft.text.Text +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.LivingEntity import moe.nea.firmament.compat.rei.recipes.wrapWidget import moe.nea.firmament.repo.SBItemStack import moe.nea.firmament.repo.recipes.RecipeLayouter @@ -15,15 +17,15 @@ class REIRecipeLayouter : RecipeLayouter { val container: MutableList<Widget> = mutableListOf() fun <T: Widget> add(t: T): T = t.also(container::add) - override fun createItemSlot( + override fun createCyclingItemSlot( x: Int, y: Int, - content: SBItemStack?, + content: List<SBItemStack>, slotKind: RecipeLayouter.SlotKind - ) { + ): RecipeLayouter.CyclingItemSlot { val slot = Widgets.createSlot(Point(x, y)) - if (content != null) - slot.entry(SBItemEntryDefinition.getEntry(content)) + if (content.isNotEmpty()) + slot.entries(content.map { SBItemEntryDefinition.getEntry(it) }) when (slotKind) { RecipeLayouter.SlotKind.SMALL_INPUT -> slot.markInput() RecipeLayouter.SlotKind.SMALL_OUTPUT -> slot.markOutput() @@ -31,16 +33,30 @@ class REIRecipeLayouter : RecipeLayouter { slot.markOutput().disableBackground() add(Widgets.createResultSlotBackground(Point(x, y))) } + RecipeLayouter.SlotKind.DISPLAY -> { + slot.disableBackground() + slot.disableHighlight() + } } add(slot) + return object : RecipeLayouter.CyclingItemSlot { + override fun current(): SBItemStack = content.firstOrNull() ?: SBItemStack.EMPTY + override fun update(newValue: SBItemStack) {} + override fun onUpdate(action: () -> Unit) {} + } } - override fun createTooltip(rectangle: Rectangle, label: Text) { - add(Widgets.createTooltip(rectangle, label)) + override fun createTooltip(rectangle: Rectangle, label: List<Component>) { + add(Widgets.createTooltip(rectangle, *label.toTypedArray())) } - override fun createLabel(x: Int, y: Int, text: Text) { - add(Widgets.createLabel(Point(x, y), text)) + override fun createLabel(x: Int, y: Int, text: Component): RecipeLayouter.Updater<Component> { + val label = add(Widgets.createLabel(Point(x, y), text)) + return object : RecipeLayouter.Updater<Component> { + override fun update(newValue: Component) { + label.message = newValue + } + } } override fun createArrow(x: Int, y: Int) = @@ -56,7 +72,11 @@ class REIRecipeLayouter : RecipeLayouter { add(wrapWidget(Rectangle(Point(x, y), Dimension(w, h)), component)) } - override fun createFire(ingredientsCenter: Point, animationTicks: Int) { - add(Widgets.createBurningFire(ingredientsCenter).animationDurationTicks(animationTicks.toDouble())) + override fun createFire(point: Point, animationTicks: Int) { + add(Widgets.createBurningFire(point).animationDurationTicks(animationTicks.toDouble())) + } + + override fun createEntity(rectangle: Rectangle, entity: LivingEntity) { + add(EntityWidget(entity, rectangle.location, FloatingDimension(rectangle.size))) } } diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/SBItemEntryDefinition.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/SBItemEntryDefinition.kt index 1027ece..fde3e3d 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/SBItemEntryDefinition.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/SBItemEntryDefinition.kt @@ -9,11 +9,11 @@ import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext import me.shedaniel.rei.api.common.entry.type.EntryDefinition import me.shedaniel.rei.api.common.entry.type.EntryType import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes -import net.minecraft.item.ItemConvertible -import net.minecraft.item.ItemStack -import net.minecraft.registry.tag.TagKey -import net.minecraft.text.Text -import net.minecraft.util.Identifier +import net.minecraft.world.level.ItemLike +import net.minecraft.world.item.ItemStack +import net.minecraft.tags.TagKey +import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation import moe.nea.firmament.compat.rei.FirmamentReiPlugin.Companion.asItemEntry import moe.nea.firmament.repo.ExpensiveItemCacheApi import moe.nea.firmament.repo.RepoManager @@ -44,12 +44,12 @@ object SBItemEntryDefinition : EntryDefinition<SBItemStack> { } @OptIn(ExpensiveItemCacheApi::class) - override fun asFormattedText(entry: EntryStack<SBItemStack>, value: SBItemStack): Text { + override fun asFormattedText(entry: EntryStack<SBItemStack>, value: SBItemStack): Component { val neuItem = entry.value.neuItem return if (!RepoManager.TConfig.perfectRenders.rendersPerfectText() || entry.value.isWarm() || neuItem == null) { VanillaEntryTypes.ITEM.definition.asFormattedText(entry.asItemEntry(), value.asImmutableItemStack()) } else { - Text.literal(neuItem.displayName) + Component.literal(neuItem.displayName) } } @@ -77,7 +77,7 @@ object SBItemEntryDefinition : EntryDefinition<SBItemStack> { return value.getStackSize() == 0 } - override fun getIdentifier(entry: EntryStack<SBItemStack>?, value: SBItemStack): Identifier { + override fun getIdentifier(entry: EntryStack<SBItemStack>?, value: SBItemStack): ResourceLocation { return value.skyblockId.identifier } @@ -90,7 +90,7 @@ object SBItemEntryDefinition : EntryDefinition<SBItemStack> { fun getEntry(ingredient: NEUIngredient): EntryStack<SBItemStack> = getEntry(SkyblockId(ingredient.itemId), count = ingredient.amount.toInt()) - fun getPassthrough(item: ItemConvertible) = getEntry(SBItemStack.passthrough(ItemStack(item.asItem()))) + fun getPassthrough(item: ItemLike) = getEntry(SBItemStack.passthrough(ItemStack(item.asItem()))) fun getEntry(stack: ItemStack): EntryStack<SBItemStack> = getEntry(SBItemStack(stack)) diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/SkyblockItemIdFocusedStackProvider.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/SkyblockItemIdFocusedStackProvider.kt index 7e12fb6..1db0376 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/SkyblockItemIdFocusedStackProvider.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/SkyblockItemIdFocusedStackProvider.kt @@ -6,15 +6,16 @@ import dev.architectury.event.CompoundEventResult import me.shedaniel.math.Point import me.shedaniel.rei.api.client.registry.screen.FocusedStackProvider import me.shedaniel.rei.api.common.entry.EntryStack -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 moe.nea.firmament.mixins.accessor.AccessorHandledScreen object SkyblockItemIdFocusedStackProvider : FocusedStackProvider { override fun provide(screen: Screen?, mouse: Point?): CompoundEventResult<EntryStack<*>> { - if (screen !is HandledScreen<*>) return CompoundEventResult.pass() + if (screen !is AbstractContainerScreen<*>) return CompoundEventResult.pass() + if (screen !is AccessorHandledScreen) return CompoundEventResult.pass() val focusedSlot = screen.focusedSlot_Firmament ?: return CompoundEventResult.pass() - val item = focusedSlot.stack ?: return CompoundEventResult.pass() + val item = focusedSlot.item ?: return CompoundEventResult.pass() return CompoundEventResult.interruptTrue(SBItemEntryDefinition.getEntry(item)) } diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/GenericREIRecipeCategory.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/GenericREIRecipeCategory.kt index 15cb818..aefb37d 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/GenericREIRecipeCategory.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/GenericREIRecipeCategory.kt @@ -9,7 +9,7 @@ import me.shedaniel.rei.api.client.registry.display.DisplayCategory import me.shedaniel.rei.api.client.registry.display.DisplayRegistry import me.shedaniel.rei.api.common.category.CategoryIdentifier import me.shedaniel.rei.api.common.util.EntryStacks -import net.minecraft.text.Text +import net.minecraft.network.chat.Component import moe.nea.firmament.compat.rei.REIRecipeLayouter import moe.nea.firmament.compat.rei.neuDisplayGeneratorWithItem import moe.nea.firmament.repo.SBItemStack @@ -36,7 +36,7 @@ class GenericREIRecipeCategory<T : NEURecipe>( return renderer.displayHeight } - override fun getTitle(): Text? { + override fun getTitle(): Component? { return renderer.title } diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBKatRecipe.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBKatRecipe.kt index 5de315c..2ce27a1 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBKatRecipe.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBKatRecipe.kt @@ -18,11 +18,12 @@ import me.shedaniel.rei.api.client.gui.widgets.Widgets import me.shedaniel.rei.api.client.registry.display.DisplayCategory import me.shedaniel.rei.api.common.category.CategoryIdentifier import kotlin.time.Duration.Companion.seconds -import net.minecraft.client.gui.Click -import net.minecraft.client.gui.DrawContext -import net.minecraft.client.gui.Element -import net.minecraft.item.Items -import net.minecraft.text.Text +import net.minecraft.client.gui.navigation.ScreenDirection +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.gui.components.events.GuiEventListener +import net.minecraft.client.input.MouseButtonEvent +import net.minecraft.world.item.Items +import net.minecraft.network.chat.Component import moe.nea.firmament.Firmament import moe.nea.firmament.compat.rei.SBItemEntryDefinition import moe.nea.firmament.repo.PetData @@ -38,7 +39,7 @@ class SBKatRecipe(override val neuRecipe: NEUKatUpgradeRecipe) : SBRecipe() { override fun getCategoryIdentifier(): CategoryIdentifier<SBKatRecipe> = CategoryIdentifier.of(Firmament.MOD_ID, "kat_recipe") - override fun getTitle(): Text = Text.literal("Kat Pet Upgrade") + override fun getTitle(): Component = Component.literal("Kat Pet Upgrade") override fun getDisplayHeight(): Int { return 100 } @@ -55,12 +56,12 @@ class SBKatRecipe(override val neuRecipe: NEUKatUpgradeRecipe) : SBRecipe() { val inputLevelLabelCenter = Point(bounds.minX + 30 - 18 + 5 + 8, bounds.minY + 25) val inputLevelLabel = Widgets.createLabel( inputLevelLabelCenter, - Text.literal("") + Component.literal("") ).centered() val outputLevelLabelCenter = Point(bounds.maxX - 30 + 8, bounds.minY + 25) val outputLevelLabel = Widgets.createLabel( outputLevelLabelCenter, - Text.literal("") + Component.literal("") ).centered() val coinStack = SBItemStack(SkyblockId.COINS, recipe.coins.toInt()) levelValue.whenChanged { oldValue, newValue -> @@ -71,14 +72,14 @@ class SBKatRecipe(override val neuRecipe: NEUKatUpgradeRecipe) : SBRecipe() { val oldOutput = outputStack.getPetData() ?: return@whenChanged val newOutput = PetData(oldOutput.rarity, oldOutput.petId, newInput.exp) outputStack.setPetData(newOutput) - inputLevelLabel.message = Text.literal(newInput.levelData.currentLevel.toString()) + inputLevelLabel.message = Component.literal(newInput.levelData.currentLevel.toString()) inputLevelLabel.bounds.location = Point( - inputLevelLabelCenter.x - MC.font.getWidth(inputLevelLabel.message) / 2, + inputLevelLabelCenter.x - MC.font.width(inputLevelLabel.message) / 2, inputLevelLabelCenter.y ) - outputLevelLabel.message = Text.literal(newOutput.levelData.currentLevel.toString()) + outputLevelLabel.message = Component.literal(newOutput.levelData.currentLevel.toString()) outputLevelLabel.bounds.location = Point( - outputLevelLabelCenter.x - MC.font.getWidth(outputLevelLabel.message) / 2, + outputLevelLabelCenter.x - MC.font.width(outputLevelLabel.message) / 2, outputLevelLabelCenter.y ) coinStack.setStackSize((recipe.coins * (1 - 0.3 * newValue / 100)).toInt()) @@ -99,7 +100,7 @@ class SBKatRecipe(override val neuRecipe: NEUKatUpgradeRecipe) : SBRecipe() { add( Widgets.withTooltip( Widgets.createArrow(Point(bounds.centerX - arrowWidth / 2, bounds.minY + 40)), - Text.literal("Upgrade time: " + FirmFormatters.formatTimespan(recipe.seconds.seconds)) + Component.literal("Upgrade time: " + FirmFormatters.formatTimespan(recipe.seconds.seconds)) ) ) @@ -140,13 +141,13 @@ fun wrapWidget(bounds: Rectangle, component: GuiComponent): Widget { return bounds } - override fun children(): List<Element> { + override fun children(): List<GuiEventListener> { return listOf() } - override fun render(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) { - context.matrices.pushMatrix() - context.matrices.translate(bounds.minX.toFloat(), bounds.minY.toFloat()) + override fun render(context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float) { + context.pose().pushMatrix() + context.pose().translate(bounds.minX.toFloat(), bounds.minY.toFloat()) component.render( GuiImmediateContext( MoulConfigRenderContext(context), @@ -157,7 +158,7 @@ fun wrapWidget(bounds: Rectangle, component: GuiComponent): Widget { mouseX.toFloat(), mouseY.toFloat() ) ) - context.matrices.popMatrix() + context.pose().popMatrix() } override fun mouseMoved(mouseX: Double, mouseY: Double) { @@ -176,50 +177,50 @@ fun wrapWidget(bounds: Rectangle, component: GuiComponent): Widget { ) } - override fun mouseClicked(click: Click, doubled: Boolean): Boolean { - val mouseXInt = click.x.toInt() - val mouseYInt = click.y.toInt() + override fun mouseClicked(event: MouseButtonEvent, isDoubleClick: Boolean): Boolean { + val mouseXInt = event.x.toInt() + val mouseYInt = event.y.toInt() return component.mouseEvent( - MouseEvent.Click(click.button(), true), + MouseEvent.Click(event.button(), true), GuiImmediateContext( IMinecraft.INSTANCE.provideTopLevelRenderContext(), bounds.minX, bounds.minY, bounds.width, bounds.height, mouseXInt - bounds.minX, mouseYInt - bounds.minY, mouseXInt, mouseYInt, - click.x.toFloat(), click.y.toFloat() + event.x.toFloat(), event.y.toFloat() ) ) } - override fun mouseReleased(click: Click): Boolean { - val mouseXInt = click.x.toInt() - val mouseYInt = click.y.toInt() + override fun mouseReleased(event: MouseButtonEvent): Boolean { + val mouseXInt = event.x.toInt() + val mouseYInt = event.y.toInt() return component.mouseEvent( - MouseEvent.Click(click.button(), false), + MouseEvent.Click(event.button(), false), GuiImmediateContext( IMinecraft.INSTANCE.provideTopLevelRenderContext(), bounds.minX, bounds.minY, bounds.width, bounds.height, mouseXInt - bounds.minX, mouseYInt - bounds.minY, mouseXInt, mouseYInt, - click.x.toFloat(), click.y.toFloat() + event.x.toFloat(), event.y.toFloat() ) ) } - override fun mouseDragged(click: Click, offsetX: Double, offsetY: Double): Boolean { - val mouseXInt = click.x.toInt() - val mouseYInt = click.y.toInt() + override fun mouseDragged(event: MouseButtonEvent, mouseX: Double, mouseY: Double): Boolean { + val mouseXInt = event.x.toInt() + val mouseYInt = event.y.toInt() return component.mouseEvent( - MouseEvent.Move(offsetX.toFloat(), offsetY.toFloat()), + MouseEvent.Move(0f, 0f), GuiImmediateContext( IMinecraft.INSTANCE.provideTopLevelRenderContext(), bounds.minX, bounds.minY, bounds.width, bounds.height, mouseXInt - bounds.minX, mouseYInt - bounds.minY, mouseXInt, mouseYInt, - click.x.toFloat(), click.y.toFloat() + event.x.toFloat(), event.y.toFloat() ) ) diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBMobDropRecipe.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBMobDropRecipe.kt index b595c23..927c199 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBMobDropRecipe.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBMobDropRecipe.kt @@ -9,9 +9,9 @@ import me.shedaniel.rei.api.client.gui.widgets.Widgets import me.shedaniel.rei.api.client.registry.display.DisplayCategory import me.shedaniel.rei.api.common.category.CategoryIdentifier import me.shedaniel.rei.api.common.util.EntryStacks -import net.minecraft.item.Items -import net.minecraft.text.Text -import net.minecraft.util.Identifier +import net.minecraft.world.item.Items +import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation import moe.nea.firmament.Firmament import moe.nea.firmament.compat.rei.EntityWidget import moe.nea.firmament.compat.rei.SBItemEntryDefinition @@ -24,7 +24,7 @@ class SBMobDropRecipe(override val neuRecipe: NEUMobDropRecipe) : SBRecipe() { override fun getCategoryIdentifier(): CategoryIdentifier<SBMobDropRecipe> = CategoryIdentifier.of(Firmament.MOD_ID, "mob_drop_recipe") - override fun getTitle(): Text = Text.literal("Mob Drops") + override fun getTitle(): Component = Component.literal("Mob Drops") override fun getDisplayHeight(): Int { return 100 } @@ -35,23 +35,23 @@ class SBMobDropRecipe(override val neuRecipe: NEUMobDropRecipe) : SBRecipe() { add(Widgets.createRecipeBase(bounds)) val source = display.neuRecipe.render val entity = if (source.startsWith("@")) { - EntityRenderer.constructEntity(Identifier.of(source.substring(1))) + EntityRenderer.constructEntity(ResourceLocation.parse(source.substring(1))) } else { EntityRenderer.applyModifiers(source, listOf()) } val level = display.neuRecipe.level val fullMobName = - if (level > 0) Text.translatable("firmament.recipe.mobs.name", level, display.neuRecipe.name) - else Text.translatable("firmament.recipe.mobs.name.nolevel", display.neuRecipe.name) - val tt = mutableListOf<Text>() + if (level > 0) Component.translatable("firmament.recipe.mobs.name", level, display.neuRecipe.name) + else Component.translatable("firmament.recipe.mobs.name.nolevel", display.neuRecipe.name) + val tt = mutableListOf<Component>() tt.add((fullMobName)) - tt.add(Text.literal("")) + tt.add(Component.literal("")) if (display.neuRecipe.coins > 0) { - tt.add(Text.stringifiedTranslatable("firmament.recipe.mobs.coins", display.neuRecipe.coins)) + tt.add(Component.translatable("firmament.recipe.mobs.coins", display.neuRecipe.coins)) } if (display.neuRecipe.combatExperience > 0) { tt.add( - Text.stringifiedTranslatable( + Component.translatable( "firmament.recipe.mobs.combat", display.neuRecipe.combatExperience ) @@ -59,14 +59,14 @@ class SBMobDropRecipe(override val neuRecipe: NEUMobDropRecipe) : SBRecipe() { } if (display.neuRecipe.enchantingExperience > 0) { tt.add( - Text.stringifiedTranslatable( + Component.translatable( "firmament.recipe.mobs.exp", display.neuRecipe.enchantingExperience ) ) } if (display.neuRecipe.extra != null) - display.neuRecipe.extra.mapTo(tt) { Text.literal(it) } + display.neuRecipe.extra.mapTo(tt) { Component.literal(it) } if (tt.size == 2) tt.removeAt(1) add( @@ -76,15 +76,15 @@ class SBMobDropRecipe(override val neuRecipe: NEUMobDropRecipe) : SBRecipe() { ) ) add( - Widgets.createLabel(Point(bounds.minX + 15, bounds.minY + 5), Text.literal(display.neuRecipe.name)) + Widgets.createLabel(Point(bounds.minX + 15, bounds.minY + 5), Component.literal(display.neuRecipe.name)) .leftAligned() ) var x = bounds.minX + 60 var y = bounds.minY + 20 for (drop in display.neuRecipe.drops) { - val lore = drop.extra.mapTo(mutableListOf()) { Text.literal(it) } + val lore = drop.extra.mapTo(mutableListOf()) { Component.literal(it) } if (drop.chance != null) { - lore += listOf(Text.translatable("firmament.recipe.mobs.drops", drop.chance)) + lore += listOf(Component.translatable("firmament.recipe.mobs.drops", drop.chance)) } val item = SBItemEntryDefinition.getEntry(drop.dropItem) .value.copy(extraLore = lore) diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBRecipe.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBRecipe.kt index de7779f..d6ca3f6 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBRecipe.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBRecipe.kt @@ -6,12 +6,12 @@ import java.util.Optional import me.shedaniel.rei.api.common.display.Display import me.shedaniel.rei.api.common.display.DisplaySerializer import me.shedaniel.rei.api.common.entry.EntryIngredient -import net.minecraft.util.Identifier +import net.minecraft.resources.ResourceLocation import moe.nea.firmament.compat.rei.SBItemEntryDefinition import moe.nea.firmament.util.SkyblockId abstract class SBRecipe : Display { - override fun getDisplayLocation(): Optional<Identifier> { + override fun getDisplayLocation(): Optional<ResourceLocation> { // In theory, we could return a location for the neuRecipe here. (Something along the lines of neurepo:items/item_id.json/0 for the 0th recipe in the items/item_id.json recipes array). return Optional.empty() } diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBReforgeRecipe.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBReforgeRecipe.kt index cc05861..ca69782 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBReforgeRecipe.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBReforgeRecipe.kt @@ -19,12 +19,12 @@ import me.shedaniel.rei.api.common.display.Display import me.shedaniel.rei.api.common.display.DisplaySerializer import me.shedaniel.rei.api.common.entry.EntryIngredient import me.shedaniel.rei.api.common.entry.EntryStack -import net.minecraft.entity.EntityType -import net.minecraft.entity.SpawnReason -import net.minecraft.registry.entry.RegistryEntry -import net.minecraft.text.Text -import net.minecraft.util.Identifier -import net.minecraft.village.VillagerProfession +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.EntitySpawnReason +import net.minecraft.core.Holder +import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.entity.npc.VillagerProfession import moe.nea.firmament.Firmament import moe.nea.firmament.compat.rei.EntityWidget import moe.nea.firmament.compat.rei.SBItemEntryDefinition @@ -60,7 +60,7 @@ class SBReforgeRecipe( return catIdentifier } - override fun getTitle(): Text { + override fun getTitle(): Component { return tr("firmament.recipecategory.reforge", "Reforge") } @@ -108,10 +108,10 @@ class SBReforgeRecipe( Rarity.entries.mapNotNull { rarity -> display.reforge.reforgeCosts?.get(rarity)?.let { rarity to it } }.map { (rarity, cost) -> - Text.literal("") + Component.literal("") .append(rarity.text) .append(": ") - .append(Text.literal("${FirmFormatters.formatCommas(cost, 0)} Coins").gold()) + .append(Component.literal("${FirmFormatters.formatCommas(cost, 0)} Coins").gold()) } )) } else { @@ -120,8 +120,8 @@ class SBReforgeRecipe( FloatingDimension(EntityWidget.defaultSize.width * size, EntityWidget.defaultSize.height * size) list.add(Widgets.withTooltip( EntityWidget( - EntityType.VILLAGER.create(EntityRenderer.fakeWorld, SpawnReason.COMMAND) - ?.also { it.villagerData = it.villagerData.withProfession(MC.currentOrDefaultRegistries.getEntryOrThrow(VillagerProfession.WEAPONSMITH)) }, + EntityType.VILLAGER.create(EntityRenderer.fakeWorld, EntitySpawnReason.COMMAND) + ?.also { it.villagerData = it.villagerData.withProfession(MC.currentOrDefaultRegistries, VillagerProfession.WEAPONSMITH) }, Point(bounds.minX + 10 + 24 + 8 - dimension.width / 2, bounds.centerY - dimension.height / 2), dimension ), @@ -207,8 +207,8 @@ class SBReforgeRecipe( return catIdentifier } - override fun getDisplayLocation(): Optional<Identifier> { - return Optional.empty() + override fun getDisplayLocation(): Optional<ResourceLocation> { + return Optional.empty<ResourceLocation>() } override fun getSerializer(): DisplaySerializer<out Display>? { diff --git a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBShopRecipe.kt b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBShopRecipe.kt index a252802..87d8bdf 100644 --- a/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBShopRecipe.kt +++ b/src/compat/rei/java/moe/nea/firmament/compat/rei/recipes/SBShopRecipe.kt @@ -9,8 +9,8 @@ import me.shedaniel.rei.api.client.gui.widgets.Widgets import me.shedaniel.rei.api.client.registry.display.DisplayCategory import me.shedaniel.rei.api.common.category.CategoryIdentifier import me.shedaniel.rei.api.common.entry.EntryIngredient -import net.minecraft.item.Items -import net.minecraft.text.Text +import net.minecraft.world.item.Items +import net.minecraft.network.chat.Component import moe.nea.firmament.Firmament import moe.nea.firmament.compat.rei.SBItemEntryDefinition import moe.nea.firmament.util.skyblockId @@ -26,7 +26,7 @@ class SBShopRecipe(override val neuRecipe: NEUNpcShopRecipe) : SBRecipe() { val catIdentifier = CategoryIdentifier.of<SBShopRecipe>(Firmament.MOD_ID, "npc_shopping") override fun getCategoryIdentifier(): CategoryIdentifier<SBShopRecipe> = catIdentifier - override fun getTitle(): Text = Text.literal("SkyBlock NPC Shopping") + override fun getTitle(): Component = Component.literal("SkyBlock NPC Shopping") override fun getIcon(): Renderer = SBItemEntryDefinition.getPassthrough(Items.EMERALD) override fun setupDisplay(display: SBShopRecipe, bounds: Rectangle): List<Widget> { diff --git a/src/main/kotlin/features/items/recipes/ItemList.kt b/src/main/kotlin/features/items/recipes/ItemList.kt index 9517a0b..340e1c3 100644 --- a/src/main/kotlin/features/items/recipes/ItemList.kt +++ b/src/main/kotlin/features/items/recipes/ItemList.kt @@ -206,8 +206,11 @@ object ItemList { return lastRenderPositions.firstOrNull { it.first.containsPoint(mouseX, mouseY) } } + val isItemListEnabled get() = false + @Subscribe fun onClick(event: HandledScreenClickEvent) { + if(!isItemListEnabled)return val pe = popupElement val me = MouseButtonEvent( event.mouseX, event.mouseY, @@ -235,6 +238,7 @@ object ItemList { @Subscribe fun onRender(event: HandledScreenForegroundEvent) { + if(!isItemListEnabled) return lastHoveredItemStack = null lastRenderPositions = listOf() val exclusions = collectExclusions(event.screen) |
