From a9bea650261caebb991743412a950581e471cd13 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 16 Dec 2021 19:23:54 +0800 Subject: Adds EntryDefinition.cheatsAs --- .../client/gui/widget/EntryListEntryWidget.java | 21 +++++++-------------- .../rei/impl/client/gui/widget/EntryListWidget.java | 9 +++------ .../rei/impl/common/entry/AbstractEntryStack.java | 12 ++++++++++++ .../plugin/client/entry/FluidEntryDefinition.java | 11 +++++++++++ .../plugin/client/entry/ItemEntryDefinition.java | 6 ++++++ .../client/runtime/DefaultClientRuntimePlugin.java | 10 +++------- 6 files changed, 42 insertions(+), 27 deletions(-) (limited to 'runtime/src') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListEntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListEntryWidget.java index 4ab46773c..2da340fb0 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListEntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryListEntryWidget.java @@ -24,16 +24,15 @@ package me.shedaniel.rei.impl.client.gui.widget; import com.mojang.blaze3d.vertex.PoseStack; -import dev.architectury.fluid.FluidStack; import me.shedaniel.math.Point; import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; import me.shedaniel.rei.api.common.util.EntryStacks; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; public abstract class EntryListEntryWidget extends EntryWidget { @@ -79,12 +78,9 @@ public abstract class EntryListEntryWidget extends EntryWidget { if (!(ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen))) return false; EntryStack entry = getCurrentEntry().copy(); if (!entry.isEmpty()) { - if (entry.getValueType() == FluidStack.class) { - FluidStack value = (FluidStack) entry.getValue(); - Item bucketItem = value.getFluid().getBucket(); - if (bucketItem != null) { - entry = EntryStacks.of(bucketItem); - } + if (entry.getType() != VanillaEntryTypes.ITEM) { + EntryStack cheatsAs = entry.cheatsAs(); + entry = cheatsAs.isEmpty() ? entry : cheatsAs; } if (entry.getValueType() == ItemStack.class) entry.castValue().setCount(button != 1 && !Screen.hasShiftDown() ? 1 : entry.castValue().getMaxStackSize()); @@ -101,12 +97,9 @@ public abstract class EntryListEntryWidget extends EntryWidget { if (ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { EntryStack entry = getCurrentEntry().copy(); if (!entry.isEmpty()) { - if (entry.getValueType() == FluidStack.class) { - FluidStack value = (FluidStack) entry.getValue(); - Item bucketItem = value.getFluid().getBucket(); - if (bucketItem != null) { - entry = EntryStacks.of(bucketItem); - } + if (entry.getType() != VanillaEntryTypes.ITEM) { + EntryStack cheatsAs = entry.cheatsAs(); + entry = cheatsAs.isEmpty() ? entry : cheatsAs; } return EntryStacks.equalsExact(entry, stack); } 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 2faf558d6..4796da9d5 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 @@ -29,7 +29,6 @@ import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.math.Matrix4f; -import dev.architectury.fluid.FluidStack; import me.shedaniel.clothconfig2.ClothConfigInitializer; import me.shedaniel.clothconfig2.api.ScissorsHandler; import me.shedaniel.clothconfig2.api.ScrollingContainer; @@ -323,11 +322,9 @@ public class EntryListWidget extends WidgetWithBounds implements OverlayListWidg if (containsChecked(mouseX, mouseY) && ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen) && !minecraft.player.containerMenu.getCarried().isEmpty() && ClientHelperImpl.getInstance().canDeleteItems()) { EntryStack stack = EntryStacks.of(minecraft.player.containerMenu.getCarried().copy()); - if (stack.getValueType() == FluidStack.class) { - Item bucketItem = ((FluidStack) stack.getValue()).getFluid().getBucket(); - if (bucketItem != null) { - stack = EntryStacks.of(bucketItem); - } + if (stack.getType() != VanillaEntryTypes.ITEM) { + EntryStack cheatsAs = stack.cheatsAs(); + stack = cheatsAs.isEmpty() ? stack : cheatsAs; } for (Widget child : children()) { if (child.containsMouse(mouseX, mouseY) && child instanceof EntryWidget widget) { 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 c31b54cf9..b34530db2 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 @@ -48,6 +48,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.SerializationTags; import net.minecraft.tags.TagContainer; +import net.minecraft.world.item.ItemStack; import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; import org.jetbrains.annotations.ApiStatus; @@ -158,6 +159,17 @@ public abstract class AbstractEntryStack implements EntryStack, Renderer { return wrap(getDefinition().wildcard(this, getValue()), false); } + @Override + public EntryStack cheatsAs() { + ItemStack stack = getDefinition().cheatsAs(this, getValue()); + + if (stack == null) { + return null; + } + + return EntryStacks.of(stack); + } + protected EntryStack wrap(A value, boolean copySettings) { TypedEntryStack stack = new TypedEntryStack<>(getDefinition(), value); if (copySettings) { 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 afb0f3613..6382f79b3 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 @@ -67,6 +67,8 @@ import net.minecraft.tags.TagCollection; import net.minecraft.tags.TagContainer; import net.minecraft.util.Mth; import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.Fluid; import org.jetbrains.annotations.Nullable; @@ -140,6 +142,15 @@ public class FluidEntryDefinition implements EntryDefinition, EntryS return FluidStack.create(fluid, FluidStack.bucketAmount()); } + @Override + @Nullable + public ItemStack cheatsAs(EntryStack entry, FluidStack value) { + if (value.isEmpty()) return ItemStack.EMPTY; + Item bucket = value.getFluid().getBucket(); + if (bucket == null) return ItemStack.EMPTY; + return new ItemStack(bucket); + } + @Override public long hash(EntryStack entry, FluidStack value, ComparisonContext context) { int code = 1; 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 9b34f65d8..ef36c8117 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 @@ -133,6 +133,12 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer return new ItemStack(value.getItem(), 1); } + @Override + @Nullable + public ItemStack cheatsAs(EntryStack entry, ItemStack value) { + return value.copy(); + } + @Override public long hash(EntryStack entry, ItemStack value, ComparisonContext context) { int code = 1; diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java index 2e25cf0bf..d67d8e99e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java @@ -27,7 +27,6 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.serialization.DataResult; import com.mojang.serialization.Lifecycle; -import dev.architectury.fluid.FluidStack; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCoreClient; @@ -73,7 +72,6 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.TextComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionResult; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -242,11 +240,9 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin { if (!(ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen))) return false; EntryStack entry = stack.copy(); if (!entry.isEmpty()) { - if (entry.getValueType() == FluidStack.class) { - Item bucketItem = ((FluidStack) entry.getValue()).getFluid().getBucket(); - if (bucketItem != null) { - entry = EntryStacks.of(bucketItem); - } + if (entry.getType() != VanillaEntryTypes.ITEM) { + EntryStack cheatsAs = entry.cheatsAs(); + entry = cheatsAs.isEmpty() ? entry : cheatsAs; } if (entry.getType() == VanillaEntryTypes.ITEM) entry.castValue().setCount(button != 1 && !Screen.hasShiftDown() ? 1 : entry.castValue().getMaxStackSize()); -- cgit