From 718819763bbea23cc11f037b358647952ef23213 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 9 Apr 2021 12:23:16 +0800 Subject: Fix draggable stacks & Fix stretched fluids & Fix #508 Signed-off-by: shedaniel --- .../rei/impl/client/ClientHelperImpl.java | 1 + .../client/registry/screen/ScreenRegistryImpl.java | 5 ++-- .../rei/impl/common/entry/AbstractEntryStack.java | 14 +++++---- .../plugin/client/entry/FluidEntryDefinition.java | 35 ++++++++++++---------- 4 files changed, 31 insertions(+), 24 deletions(-) (limited to 'runtime/src/main/java/me') 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 extends AbstractRenderer implements @Override public EntryStack copy() { - return wrap(getDefinition().copy(this, getValue())); + return wrap(getDefinition().copy(this, getValue()), true); } @Override public EntryStack rewrap() { - return wrap(getValue()); + return wrap(getValue(), true); } @Override public EntryStack normalize() { - return wrap(getDefinition().normalize(this, getValue())); + return wrap(getDefinition().normalize(this, getValue()), false); } - public EntryStack wrap(A value) { + protected EntryStack wrap(A value, boolean copySettings) { TypedEntryStack stack = new TypedEntryStack<>(getDefinition(), value); - for (Short2ObjectMap.Entry entry : getSettings().short2ObjectEntrySet()) { - stack.setting(EntryStack.Settings.getById(entry.getShortKey()), entry.getValue()); + if (copySettings) { + for (Short2ObjectMap.Entry 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, 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 -- cgit