aboutsummaryrefslogtreecommitdiff
path: root/runtime/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-04-09 12:23:16 +0800
committershedaniel <daniel@shedaniel.me>2021-04-09 12:23:33 +0800
commit718819763bbea23cc11f037b358647952ef23213 (patch)
tree014c064b5311969888a12f11e6529e90c9382834 /runtime/src
parent966bbd7fe43237f9b1aa6cfd94cf5e34a9bcfddf (diff)
downloadRoughlyEnoughItems-718819763bbea23cc11f037b358647952ef23213.tar.gz
RoughlyEnoughItems-718819763bbea23cc11f037b358647952ef23213.tar.bz2
RoughlyEnoughItems-718819763bbea23cc11f037b358647952ef23213.zip
Fix draggable stacks & Fix stretched fluids & Fix #508
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java1
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java35
4 files changed, 31 insertions, 24 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
index 96c9741c6..9ae8da79e 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
@@ -63,6 +63,7 @@ import org.jetbrains.annotations.Nullable;
import java.time.LocalDateTime;
import java.util.*;
+import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Collectors;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java
index 026cb405e..bb2994d80 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java
@@ -144,9 +144,6 @@ public class ScreenRegistryImpl implements ScreenRegistry {
public void registerDecider(OverlayDecider decider) {
deciders.add(decider);
deciders.sort(Comparator.reverseOrder());
- clickAreas.clear();
- draggableStacksProviders.clear();
- draggableStacksVisitors.clear();
cache.clear();
tmpScreen = null;
registerDraggableStackProvider(DraggableStackProviderWidget.from(context ->
@@ -225,6 +222,8 @@ public class ScreenRegistryImpl implements ScreenRegistry {
deciders.clear();
cache.clear();
focusedStackProviders.clear();
+ draggableStacksProviders.clear();
+ draggableStacksVisitors.clear();
tmpScreen = null;
registerDefault();
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 e525e21ae..618674152 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
@@ -114,23 +114,25 @@ public abstract class AbstractEntryStack<A> extends AbstractRenderer implements
@Override
public EntryStack<A> copy() {
- return wrap(getDefinition().copy(this, getValue()));
+ return wrap(getDefinition().copy(this, getValue()), true);
}
@Override
public EntryStack<A> rewrap() {
- return wrap(getValue());
+ return wrap(getValue(), true);
}
@Override
public EntryStack<A> normalize() {
- return wrap(getDefinition().normalize(this, getValue()));
+ return wrap(getDefinition().normalize(this, getValue()), false);
}
- public EntryStack<A> wrap(A value) {
+ protected EntryStack<A> wrap(A value, boolean copySettings) {
TypedEntryStack<A> stack = new TypedEntryStack<>(getDefinition(), value);
- for (Short2ObjectMap.Entry<Object> entry : getSettings().short2ObjectEntrySet()) {
- stack.setting(EntryStack.Settings.getById(entry.getShortKey()), entry.getValue());
+ if (copySettings) {
+ for (Short2ObjectMap.Entry<Object> entry : getSettings().short2ObjectEntrySet()) {
+ stack.setting(EntryStack.Settings.getById(entry.getShortKey()), entry.getValue());
+ }
}
return stack;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
index f41b70858..7aaf5102c 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
@@ -38,6 +38,7 @@ import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.entry.renderer.AbstractEntryRenderer;
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer;
import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
+import me.shedaniel.rei.api.client.util.SpriteRenderer;
import me.shedaniel.rei.api.common.entry.EntrySerializer;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext;
@@ -47,6 +48,9 @@ import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.EntryStacks;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.MultiBufferSource;
+import net.minecraft.client.renderer.RenderType;
+import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.language.I18n;
@@ -58,6 +62,7 @@ import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagCollection;
import net.minecraft.tags.TagContainer;
+import net.minecraft.world.inventory.InventoryMenu;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.Nullable;
@@ -178,21 +183,21 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
TextureAtlasSprite sprite = FluidStackHooks.getStillTexture(stack);
if (sprite == null) return;
int color = FluidStackHooks.getColor(stack);
- int a = 255;
- int r = (color >> 16 & 255);
- int g = (color >> 8 & 255);
- int b = (color & 255);
- Minecraft.getInstance().getTextureManager().bind(TextureAtlas.LOCATION_BLOCKS);
- Tesselator tesselator = Tesselator.getInstance();
- BufferBuilder builder = tesselator.getBuilder();
- Matrix4f matrix = matrices.last().pose();
- builder.begin(7, DefaultVertexFormat.POSITION_TEX_COLOR);
- int z = entry.getZ();
- builder.vertex(matrix, bounds.getMaxX(), bounds.y, z).uv(sprite.getU1(), sprite.getV0()).color(r, g, b, a).endVertex();
- builder.vertex(matrix, bounds.x, bounds.y, z).uv(sprite.getU0(), sprite.getV0()).color(r, g, b, a).endVertex();
- builder.vertex(matrix, bounds.x, bounds.getMaxY(), z).uv(sprite.getU0(), sprite.getV1()).color(r, g, b, a).endVertex();
- builder.vertex(matrix, bounds.getMaxX(), bounds.getMaxY(), z).uv(sprite.getU1(), sprite.getV1()).color(r, g, b, a).endVertex();
- tesselator.end();
+
+ MultiBufferSource.BufferSource immediate = Minecraft.getInstance().renderBuffers().bufferSource();
+
+ SpriteRenderer.beginPass()
+ .setup(immediate, RenderType.solid())
+ .sprite(sprite)
+ .color(color)
+ .light(0x00f000f0)
+ .overlay(OverlayTexture.NO_OVERLAY)
+ .alpha(0xff)
+ .normal(matrices.last().normal(), 0, 0, 0)
+ .position(matrices.last().pose(), bounds.x, bounds.getMaxY() - bounds.height * entry.get(EntryStack.Settings.FLUID_RENDER_RATIO), bounds.getMaxX(), bounds.getMaxY(), entry.getZ())
+ .next(InventoryMenu.BLOCK_ATLAS);
+
+ immediate.endBatch();
}
@Override