aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-04-10 14:28:46 +0800
committershedaniel <daniel@shedaniel.me>2021-04-10 14:28:46 +0800
commit0e96125db3f91890657d1026feb0879bbf761dc7 (patch)
treeaadd503779f7f84981cded924ec5072f3907a526
parent188066bfd4817c1c160061d61e7a0130e9377e98 (diff)
downloadRoughlyEnoughItems-0e96125db3f91890657d1026feb0879bbf761dc7.tar.gz
RoughlyEnoughItems-0e96125db3f91890657d1026feb0879bbf761dc7.tar.bz2
RoughlyEnoughItems-0e96125db3f91890657d1026feb0879bbf761dc7.zip
BatchEntryRenderer -> BatchedEntryRenderer
Signed-off-by: shedaniel <daniel@shedaniel.me>
-rw-r--r--api/build.gradle2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchedEntryRenderer.java (renamed from api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchEntryRenderer.java)42
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java7
-rwxr-xr-xbuild.gradle4
-rw-r--r--gradle.properties1
-rw-r--r--runtime/build.gradle2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchEntryRendererManager.java)17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchFieldSyntaxHighlighter.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/IntRange.java38
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/result/ArgumentApplicableResult.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java6
16 files changed, 107 insertions, 32 deletions
diff --git a/api/build.gradle b/api/build.gradle
index 3a332c299..44fe15010 100644
--- a/api/build.gradle
+++ b/api/build.gradle
@@ -5,7 +5,7 @@ dependencies {
}
architectury {
- common()
+ common(forgeEnabled.toBoolean())
}
remapJar {
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchEntryRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchedEntryRenderer.java
index ba7e5d150..400ef727c 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchEntryRenderer.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchedEntryRenderer.java
@@ -29,28 +29,54 @@ import me.shedaniel.rei.api.common.entry.EntryStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
-public interface BatchEntryRenderer<T> extends EntryRenderer<T> {
- static <T> int getBatchIdFrom(EntryStack<T> entry) {
- EntryRenderer<T> renderer = entry.getRenderer();
- if (renderer instanceof BatchEntryRenderer) return ((BatchEntryRenderer<T>) renderer).getBatchId(entry);
- return renderer.getClass().hashCode();
+public interface BatchedEntryRenderer<T> extends EntryRenderer<T> {
+ /**
+ * Returns a batch identifier, stacks with the same batch identifier will be grouped together
+ * into a batch.
+ *
+ * @param entry the stack
+ * @param bounds the bounds of the entry
+ * @return the batch identifier
+ */
+ default int getBatchIdentifier(EntryStack<T> entry, Rectangle bounds) {
+ return getClass().hashCode();
}
- default int getBatchId(EntryStack<T> entry) {
- return getClass().hashCode();
+ /**
+ * Modifies the {@link PoseStack} passed tp various batch rendering methods.
+ *
+ * @param matrices the matrix stack
+ * @return the modified matrix stack, could be an entirely different stack
+ */
+ default PoseStack batchModifyMatrices(PoseStack matrices) {
+ return matrices;
}
+ /**
+ * Starts the batch rendering, used to setup states, only called once with every batch.
+ *
+ * @param entry the first entry in the batch
+ * @param matrices the matrix stack
+ * @param delta the tick delta
+ */
void startBatch(EntryStack<T> entry, PoseStack matrices, float delta);
void renderBase(EntryStack<T> entry, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta);
void renderOverlay(EntryStack<T> entry, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta);
+ /**
+ * Ends the batch rendering, used to setup states, only called once with every batch.
+ *
+ * @param entry the first entry in the batch
+ * @param matrices the matrix stack
+ * @param delta the tick delta
+ */
void endBatch(EntryStack<T> entry, PoseStack matrices, float delta);
- @Deprecated
@Override
default void render(EntryStack<T> entry, PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
+ matrices = batchModifyMatrices(matrices);
startBatch(entry, matrices, delta);
MultiBufferSource.BufferSource immediate = Minecraft.getInstance().renderBuffers().bufferSource();
renderBase(entry, matrices, immediate, bounds, mouseX, mouseY, delta);
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java
index 9ee60c5f8..e5b78b788 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java
@@ -34,6 +34,13 @@ import net.fabricmc.api.Environment;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
+/**
+ * A renderer to render a {@link EntryStack}.
+ * Use {@link me.shedaniel.rei.api.client.util.ClientEntryStacks#setRenderer} to change the {@link EntryRenderer} for a {@link EntryStack}.
+ *
+ * @param <T> the entry type
+ * @see BatchedEntryRenderer
+ */
public interface EntryRenderer<T> {
static <T> EntryRenderer<T> empty() {
return ClientInternals.getEmptyEntryRenderer();
diff --git a/build.gradle b/build.gradle
index b82f547f9..4cbfbd082 100755
--- a/build.gradle
+++ b/build.gradle
@@ -148,7 +148,9 @@ task releaseOnCf {
}
proc.waitFor()
releaseChangelog = changes.toString()
- dependsOn project("forge").tasks.getByName("curseforge")
+ if (subprojects.any { it.name == "forge" }) {
+ dependsOn project("forge").tasks.getByName("curseforge")
+ }
}
/*project {
diff --git a/gradle.properties b/gradle.properties
index 4e9ed76c7..50ac8bcac 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,6 +3,7 @@ base_version=6.0.0
unstable=true
supported_version=1.16.2/3/4/5
minecraft_version=1.16.5
+forgeEnabled=true
forge_version=36.0.43
fabricloader_version=0.11.1
cloth_config_version=4.11.18
diff --git a/runtime/build.gradle b/runtime/build.gradle
index 53c1100d7..3048fb3b7 100644
--- a/runtime/build.gradle
+++ b/runtime/build.gradle
@@ -1,5 +1,5 @@
architectury {
- common()
+ common(forgeEnabled.toBoolean())
}
repositories {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
index 7a6e9f32d..9717f1cf1 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
@@ -46,7 +46,7 @@ import me.shedaniel.rei.api.client.search.SearchFilter;
import me.shedaniel.rei.api.client.search.SearchProvider;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay;
-import me.shedaniel.rei.impl.client.gui.widget.BatchEntryRendererManager;
+import me.shedaniel.rei.impl.client.gui.widget.BatchedEntryRendererManager;
import me.shedaniel.rei.impl.client.gui.widget.EntryWidget;
import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField;
import net.minecraft.client.Minecraft;
@@ -222,7 +222,7 @@ public class FilteringScreen extends Screen {
int skip = Math.max(0, Mth.floor(scrolling.scrollAmount / (float) entrySize()));
int nextIndex = skip * innerBounds.width / entrySize();
int i = nextIndex;
- BatchEntryRendererManager manager = new BatchEntryRendererManager();
+ BatchedEntryRendererManager manager = new BatchedEntryRendererManager();
for (; i < entryStacks.size(); i++) {
EntryStack<?> stack = entryStacks.get(i);
EntryListEntry entry = entries.get(nextIndex);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchEntryRendererManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java
index 6cafecb90..a410a24a3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchEntryRendererManager.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java
@@ -28,7 +28,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import me.shedaniel.rei.api.client.config.ConfigObject;
-import me.shedaniel.rei.api.client.entry.renderer.BatchEntryRenderer;
+import me.shedaniel.rei.api.client.entry.renderer.BatchedEntryRenderer;
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer;
import me.shedaniel.rei.api.common.entry.EntryStack;
import net.minecraft.client.Minecraft;
@@ -40,15 +40,15 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-public class BatchEntryRendererManager {
+public class BatchedEntryRendererManager {
private boolean fastEntryRendering = ConfigObject.getInstance().doesFastEntryRendering();
private Int2ObjectMap<List<EntryWidget>> grouping = new Int2ObjectOpenHashMap<>();
private List<EntryWidget> toRender = new ArrayList<>();
- public BatchEntryRendererManager() {
+ public BatchedEntryRendererManager() {
}
- public BatchEntryRendererManager(Collection<? extends EntryWidget> widgets) {
+ public BatchedEntryRendererManager(Collection<? extends EntryWidget> widgets) {
addAll(widgets);
}
@@ -66,8 +66,8 @@ public class BatchEntryRendererManager {
if (fastEntryRendering) {
EntryStack<?> currentEntry = widget.getCurrentEntry();
EntryRenderer<?> renderer = currentEntry.getRenderer();
- if (renderer instanceof BatchEntryRenderer) {
- int hash = ((BatchEntryRenderer<Object>) renderer).getBatchId(currentEntry.cast());
+ if (renderer instanceof BatchedEntryRenderer) {
+ int hash = ((BatchedEntryRenderer<Object>) renderer).getBatchIdentifier(currentEntry.cast(), widget.getBounds());
List<EntryWidget> entries = grouping.get(hash);
if (entries == null) {
grouping.put(hash, entries = new ArrayList<>());
@@ -101,8 +101,9 @@ public class BatchEntryRendererManager {
@SuppressWarnings("rawtypes")
EntryStack first = firstWidget.getCurrentEntry();
EntryRenderer<?> renderer = first.getRenderer();
- if (fastEntryRendering && renderer instanceof BatchEntryRenderer) {
- BatchEntryRenderer<?> firstRenderer = (BatchEntryRenderer<?>) renderer;
+ if (fastEntryRendering && renderer instanceof BatchedEntryRenderer) {
+ BatchedEntryRenderer<?> firstRenderer = (BatchedEntryRenderer<?>) renderer;
+ matrices = firstRenderer.batchModifyMatrices(matrices);
firstRenderer.startBatch(first, matrices, delta);
long l = debugTime ? System.nanoTime() : 0;
MultiBufferSource.BufferSource immediate = Minecraft.getInstance().renderBuffers().bufferSource();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java
index ec57bf1d1..44e0589d9 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListWidget.java
@@ -220,7 +220,7 @@ public class EntryListWidget extends WidgetWithBounds {
int skip = Math.max(0, Mth.floor(scrolling.scrollAmount / (float) entrySize()));
int nextIndex = skip * innerBounds.width / entrySize();
this.blockedCount = 0;
- BatchEntryRendererManager helper = new BatchEntryRendererManager();
+ BatchedEntryRendererManager helper = new BatchedEntryRendererManager();
int i = nextIndex;
for (int cont = nextIndex; cont < entries.size(); cont++) {
@@ -253,7 +253,7 @@ public class EntryListWidget extends WidgetWithBounds {
for (Widget widget : renders) {
widget.render(matrices, mouseX, mouseY, delta);
}
- new BatchEntryRendererManager(entries).render(debugTime, size, time, matrices, mouseX, mouseY, delta);
+ new BatchedEntryRendererManager(entries).render(debugTime, size, time, matrices, mouseX, mouseY, delta);
}
if (debugTime) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
index 57ccd0b6a..1433c65de 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
@@ -251,7 +251,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt
Stream<EntryListEntry> entryStream = this.entriesList.stream()
.filter(entry -> entry.getBounds().getMaxY() >= this.currentBounds.getY() && entry.getBounds().y <= this.currentBounds.getMaxY());
- new BatchEntryRendererManager(entryStream.collect(Collectors.toList()))
+ new BatchedEntryRendererManager(entryStream.collect(Collectors.toList()))
.render(matrices, mouseX, mouseY, delta);
updatePosition(delta);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchFieldSyntaxHighlighter.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchFieldSyntaxHighlighter.java
index 42308f678..0af21de72 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchFieldSyntaxHighlighter.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchFieldSyntaxHighlighter.java
@@ -23,9 +23,9 @@
package me.shedaniel.rei.impl.client.gui.widget.search;
+import me.shedaniel.rei.impl.client.search.IntRange;
import me.shedaniel.rei.impl.client.search.argument.Argument;
import me.shedaniel.rei.impl.client.search.argument.type.ArgumentTypesRegistry;
-import net.minecraft.util.IntRange;
import org.jetbrains.annotations.ApiStatus;
import java.util.Collection;
@@ -63,7 +63,7 @@ public class OverlaySearchFieldSyntaxHighlighter implements Consumer<String> {
highlighted[i] = (byte) argIndex;
}
for (IntRange grammarRange : grammarRanges) {
- for (int i = grammarRange.getMinInclusive(); i <= grammarRange.getMaxInclusive(); i++) {
+ for (int i = grammarRange.min(); i <= grammarRange.max(); i++) {
highlighted[i + index] = (byte) (argIndex + 1);
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/IntRange.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/IntRange.java
new file mode 100644
index 000000000..05c5e1ca4
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/IntRange.java
@@ -0,0 +1,38 @@
+package me.shedaniel.rei.impl.client.search;
+
+import java.util.Objects;
+
+public class IntRange {
+ private final int min;
+ private final int max;
+
+ private IntRange(int min, int max) {
+ this.min = min;
+ this.max = max;
+ }
+
+ public static IntRange of(int min, int max) {
+ return new IntRange(min, max);
+ }
+
+ public int min() {
+ return min;
+ }
+
+ public int max() {
+ return max;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ IntRange intRange = (IntRange) o;
+ return min == intRange.min && max == intRange.max;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(min, max);
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java
index 67520b666..dcabfbdf2 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java
@@ -27,13 +27,13 @@ import com.google.common.base.MoreObjects;
import com.google.common.collect.Lists;
import me.shedaniel.rei.api.client.gui.config.SearchMode;
import me.shedaniel.rei.api.common.entry.EntryStack;
+import me.shedaniel.rei.impl.client.search.IntRange;
import me.shedaniel.rei.impl.client.search.argument.type.AlwaysMatchingArgumentType;
import me.shedaniel.rei.impl.client.search.argument.type.ArgumentType;
import me.shedaniel.rei.impl.client.search.argument.type.ArgumentTypesRegistry;
import me.shedaniel.rei.impl.client.search.result.ArgumentApplicableResult;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
-import net.minecraft.util.IntRange;
import net.minecraft.util.Unit;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.mutable.Mutable;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/result/ArgumentApplicableResult.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/result/ArgumentApplicableResult.java
index e25b89326..3014c9771 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/result/ArgumentApplicableResult.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/result/ArgumentApplicableResult.java
@@ -23,8 +23,8 @@
package me.shedaniel.rei.impl.client.search.result;
+import me.shedaniel.rei.impl.client.search.IntRange;
import me.shedaniel.rei.impl.client.search.argument.type.MatchType;
-import net.minecraft.util.IntRange;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java
index 618674152..3cbf8d511 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java
@@ -154,7 +154,7 @@ public abstract class AbstractEntryStack<A> extends AbstractRenderer implements
@Override
@Nullable
public Tooltip getTooltip(Point mouse, boolean appendModName) {
- Mutable<Tooltip> tooltip = new MutableObject<>(this.get(Settings.RENDER).apply(this).<A>cast().getTooltip(this, mouse));
+ Mutable<Tooltip> tooltip = new MutableObject<>(this.get(Settings.RENDERER).apply(this).<A>cast().getTooltip(this, mouse));
if (tooltip.getValue() == null) return null;
tooltip.getValue().getText().addAll(get(EntryStack.Settings.TOOLTIP_APPEND_EXTRA).apply(this));
tooltip.setValue(get(Settings.TOOLTIP_PROCESSOR).apply(this, tooltip.getValue()));
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
index 453df00c3..a6a102ea8 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
@@ -33,7 +33,7 @@ import it.unimi.dsi.fastutil.objects.ReferenceSet;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.entry.renderer.AbstractEntryRenderer;
-import me.shedaniel.rei.api.client.entry.renderer.BatchEntryRenderer;
+import me.shedaniel.rei.api.client.entry.renderer.BatchedEntryRenderer;
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer;
import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
import me.shedaniel.rei.api.common.entry.EntrySerializer;
@@ -185,9 +185,9 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
}
@SuppressWarnings("deprecation")
- public class ItemEntryRenderer extends AbstractEntryRenderer<ItemStack> implements BatchEntryRenderer<ItemStack> {
+ public class ItemEntryRenderer extends AbstractEntryRenderer<ItemStack> implements BatchedEntryRenderer<ItemStack> {
@Override
- public int getBatchId(EntryStack<ItemStack> entry) {
+ public int getBatchIdentifier(EntryStack<ItemStack> entry, Rectangle bounds) {
return 1738923 + (getModelFromStack(entry.getValue()).usesBlockLight() ? 1 : 0);
}