diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-08-05 01:30:08 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-08-26 10:53:55 +0900 |
| commit | 8c13c015031a0de865d2e767cd8e879754f803e2 (patch) | |
| tree | 2bb6fa6578b63d1c216b863a6c4206295c044b36 /api/src/main/java | |
| parent | 8f5d3ef632f3d1a733c98ce5607c9fd5a0fd7567 (diff) | |
| download | RoughlyEnoughItems-8c13c015031a0de865d2e767cd8e879754f803e2.tar.gz RoughlyEnoughItems-8c13c015031a0de865d2e767cd8e879754f803e2.tar.bz2 RoughlyEnoughItems-8c13c015031a0de865d2e767cd8e879754f803e2.zip | |
More work
Diffstat (limited to 'api/src/main/java')
36 files changed, 557 insertions, 131 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java b/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java index 2e1be6030..6b62994b1 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java @@ -28,7 +28,7 @@ import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.view.ViewSearchBuilder; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.FormattingUtils; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.ChatFormatting; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java b/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java index a17751703..540dcc2ab 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java @@ -134,7 +134,9 @@ public interface REIRuntime extends Reloadable<REIClientPlugin> { * @return the text field used for searching, or {@code null} if none */ @Nullable - TextField getSearchTextField(); + default TextField getSearchTextField() { + return getOverlay().map(ScreenOverlay::getSearchField).orElse(null); + } /** * Queues a tooltip to be displayed. diff --git a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java index 6c5415910..e1f18684d 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java @@ -29,7 +29,7 @@ import me.shedaniel.rei.api.client.entry.region.RegionEntry; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.util.ClientEntryStacks; import me.shedaniel.rei.api.common.entry.EntryStack; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.nbt.CompoundTag; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/BatchedSlots.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/BatchedSlots.java new file mode 100644 index 000000000..6cead07dd --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/BatchedSlots.java @@ -0,0 +1,40 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.api.client.gui.widgets; + +import org.apache.commons.lang3.mutable.MutableInt; +import org.apache.commons.lang3.mutable.MutableLong; + +import java.util.Collection; +import java.util.List; + +public abstract class BatchedSlots extends Widget implements List<Slot> { + public abstract void addUnbatched(Slot slot); + + public abstract void addAllUnbatched(Collection<? extends Slot> slots); + + public abstract boolean isBatched(); + + public abstract void addDebugger(MutableInt size, MutableLong time); +} diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Slot.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Slot.java index f0b2842e6..88220ecf2 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Slot.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Slot.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.api.client.gui.widgets; +import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.common.entry.EntryStack; @@ -30,13 +31,14 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.List; +import java.util.function.UnaryOperator; public abstract class Slot extends WidgetWithBounds { public static final byte UN_MARKED = 0; public static final byte INPUT = 1; public static final byte OUTPUT = 2; - public Slot unmarkInputOrOutput() { + public final Slot unmarkInputOrOutput() { setNoticeMark(UN_MARKED); return this; } @@ -59,7 +61,7 @@ public abstract class Slot extends WidgetWithBounds { public abstract boolean isInteractable(); - public Slot interactable(boolean interactable) { + public final Slot interactable(boolean interactable) { setInteractable(interactable); return this; } @@ -76,7 +78,7 @@ public abstract class Slot extends WidgetWithBounds { public abstract boolean isInteractableFavorites(); - public Slot interactableFavorites(boolean interactableFavorites) { + public final Slot interactableFavorites(boolean interactableFavorites) { setInteractableFavorites(interactableFavorites); return this; } @@ -140,8 +142,22 @@ public abstract class Slot extends WidgetWithBounds { public abstract Rectangle getInnerBounds(); + public abstract void drawBackground(PoseStack matrices, int mouseX, int mouseY, float delta); + @Nullable + @Deprecated(forRemoval = true) public Tooltip getCurrentTooltip(Point point) { + return getCurrentTooltip(TooltipContext.of(point)); + } + + public abstract void drawExtra(PoseStack matrices, int mouseX, int mouseY, float delta); + + @Nullable + public Tooltip getCurrentTooltip(TooltipContext context) { return null; } + + public abstract void drawHighlighted(PoseStack matrices, int mouseX, int mouseY, float delta); + + public abstract void tooltipProcessor(UnaryOperator<Tooltip> operator); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TextField.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TextField.java index 7002ad26f..803502972 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TextField.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TextField.java @@ -23,7 +23,23 @@ package me.shedaniel.rei.api.client.gui.widgets; -public interface TextField { +import com.mojang.blaze3d.vertex.PoseStack; +import it.unimi.dsi.fastutil.booleans.BooleanConsumer; +import me.shedaniel.clothconfig2.api.TickableWidget; +import net.minecraft.network.chat.Style; +import net.minecraft.util.FormattedCharSequence; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; +import java.util.function.Function; + +import static me.shedaniel.rei.api.client.gui.widgets.Widget.mouse; + +public interface TextField extends TickableWidget { + void setFormatter(TextFormatter formatter); + + void setSuggestionRenderer(SuggestionRenderer renderer); + String getText(); void setText(String text); @@ -57,4 +73,37 @@ public interface TextField { boolean isFocused(); void setFocused(boolean focused); + + void setResponder(Consumer<String> responder); + + void setFocusedResponder(BooleanConsumer responder); + + void setTextTransformer(Function<String, String> textTransformer); + + @Nullable + String getSuggestion(); + + void setSuggestion(@Nullable String suggestion); + + void setBorderColorProvider(BorderColorProvider borderColorProvider); + + WidgetWithBounds asWidget(); + + interface TextFormatter { + TextFormatter DEFAULT = (text, index) -> { + return FormattedCharSequence.forward(text, Style.EMPTY); + }; + + FormattedCharSequence format(String text, int index); + } + + interface SuggestionRenderer { + void renderSuggestion(PoseStack matrices, int x, int y, int color); + } + + interface BorderColorProvider { + BorderColorProvider DEFAULT = textField -> textField.asWidget().containsMouse(mouse()) || textField.isFocused() ? 0xffffffff : 0xffa0a0a0; + + int getBorderColor(TextField textField); + } } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java index dad0e9d59..550c9b226 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java @@ -29,7 +29,7 @@ import me.shedaniel.math.Point; import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.CollectionUtils; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java index 598bbc292..cb20f2bd2 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java @@ -25,7 +25,7 @@ package me.shedaniel.rei.api.client.gui.widgets; import me.shedaniel.math.Point; import me.shedaniel.math.impl.PointHelper; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.world.item.TooltipFlag; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widgets.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widgets.java index 028947c34..4e7e2d336 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widgets.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widgets.java @@ -31,7 +31,7 @@ import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.DrawableConsumer; import me.shedaniel.rei.api.client.gui.Renderer; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; @@ -327,6 +327,15 @@ public final class Widgets { return ClientInternals.getWidgetsProvider().wrapPadded(padLeft, padRight, padTop, padBottom, widget); } + public static TextField createTextField(Rectangle bounds) { + return ClientInternals.getWidgetsProvider().createTextField(bounds); + } + + @ApiStatus.Experimental + public static BatchedSlots createBatchedSlots() { + return ClientInternals.getWidgetsProvider().createBatchedSlots(); + } + public static Widget delegate(Supplier<Widget> supplier) { return new DelegateWidget(Widgets.noOp()) { @Override diff --git a/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java b/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java index f7f5c481e..944755f61 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java @@ -23,7 +23,10 @@ package me.shedaniel.rei.api.client.overlay; +import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; +import me.shedaniel.rei.api.client.gui.widgets.TextField; +import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -43,4 +46,8 @@ public abstract class ScreenOverlay extends WidgetWithBounds { public abstract OverlayListWidget getEntryList(); public abstract Optional<OverlayListWidget> getFavoritesList(); + + public abstract TextField getSearchField(); + + public abstract void renderTooltip(PoseStack matrices, Tooltip tooltip); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/PreFilteredEntryList.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/PreFilteredEntryList.java index f9bd53422..f05db2347 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/PreFilteredEntryList.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/PreFilteredEntryList.java @@ -26,8 +26,7 @@ package me.shedaniel.rei.api.client.registry.entry; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.registry.Reloadable; -import me.shedaniel.rei.impl.ClientInternals; -import me.shedaniel.rei.impl.Internals; +import me.shedaniel.rei.impl.client.ClientInternals; import org.jetbrains.annotations.ApiStatus; import java.util.Collection; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java index 3f6803d97..8b6aad935 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java @@ -25,7 +25,7 @@ package me.shedaniel.rei.api.client.registry.screen; import me.shedaniel.math.Point; import me.shedaniel.rei.api.common.category.CategoryIdentifier; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.Screen; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java index ec32d75aa..3945e9c63 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java @@ -27,7 +27,7 @@ import me.shedaniel.math.Point; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.entry.EntryIngredient; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java b/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java index 1afa8f04d..5f7a2c1a4 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java @@ -31,7 +31,7 @@ import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.CollectionUtils; -import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.impl.client.ClientInternals; import me.shedaniel.rei.impl.display.DisplaySpec; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; diff --git a/api/src/main/java/me/shedaniel/rei/api/common/category/CategoryIdentifier.java b/api/src/main/java/me/shedaniel/rei/api/common/category/CategoryIdentifier.java index 8fd2136c0..001517a5c 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/category/CategoryIdentifier.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/category/CategoryIdentifier.java @@ -25,7 +25,7 @@ package me.shedaniel.rei.api.common.category; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.util.Identifiable; -import me.shedaniel.rei.impl.Internals; +import me.shedaniel.rei.impl.common.Internals; import net.minecraft.ResourceLocationException; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.ApiStatus; diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java index fd6302218..27f37f620 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java @@ -24,7 +24,7 @@ package me.shedaniel.rei.api.common.entry; import me.shedaniel.rei.api.common.entry.type.EntryDefinition; -import me.shedaniel.rei.impl.Internals; +import me.shedaniel.rei.impl.common.Internals; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import org.jetbrains.annotations.ApiStatus; diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java index 0dcb10eda..2d2f3ca15 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java @@ -37,7 +37,7 @@ 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.EntryTypeRegistry; import me.shedaniel.rei.api.common.util.TextRepresentable; -import me.shedaniel.rei.impl.Internals; +import me.shedaniel.rei.impl.common.Internals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.nbt.CompoundTag; diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparator.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparator.java index e24d41327..c30fb7aa7 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparator.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparator.java @@ -24,7 +24,7 @@ package me.shedaniel.rei.api.common.entry.comparison; import dev.architectury.fluid.FluidStack; -import me.shedaniel.rei.impl.Internals; +import me.shedaniel.rei.impl.common.Internals; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.item.ItemStack; diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java index 6db72c191..69834c070 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java @@ -25,7 +25,7 @@ package me.shedaniel.rei.api.common.entry.type; import me.shedaniel.rei.api.client.entry.type.BuiltinClientEntryTypes; import me.shedaniel.rei.api.common.util.Identifiable; -import me.shedaniel.rei.impl.Internals; +import me.shedaniel.rei.impl.common.Internals; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.ApiStatus; diff --git a/api/src/main/java/me/shedaniel/rei/api/common/plugins/PluginManager.java b/api/src/main/java/me/shedaniel/rei/api/common/plugins/PluginManager.java index f135fded3..b42a5d8f5 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/plugins/PluginManager.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/plugins/PluginManager.java @@ -28 |
