diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-12-16 19:23:54 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-12-16 19:24:27 +0800 |
| commit | 3ba5c46ef229cd838a1dc9ad3554ee2d1c162b14 (patch) | |
| tree | 7d9b4ef6218a697da9fe6d4aa698721cdee7ed46 /runtime/src/main/java | |
| parent | 17e622d2e25ebb5e9a9e16c4c95e3a80afdd5c67 (diff) | |
| download | RoughlyEnoughItems-3ba5c46ef229cd838a1dc9ad3554ee2d1c162b14.tar.gz RoughlyEnoughItems-3ba5c46ef229cd838a1dc9ad3554ee2d1c162b14.tar.bz2 RoughlyEnoughItems-3ba5c46ef229cd838a1dc9ad3554ee2d1c162b14.zip | |
Adds EntryDefinition.cheatsAs
Diffstat (limited to 'runtime/src/main/java')
6 files changed, 42 insertions, 27 deletions
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 f0f401c06..7820cace0 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 me.shedaniel.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<ItemStack> cheatsAs = entry.cheatsAs(); + entry = cheatsAs.isEmpty() ? entry : cheatsAs; } if (entry.getValueType() == ItemStack.class) entry.<ItemStack>castValue().setCount(button != 1 && !Screen.hasShiftDown() ? 1 : entry.<ItemStack>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<ItemStack> 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 97016c2bc..21b4ba253 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 me.shedaniel.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.inventory.getCarried().isEmpty() && ClientHelperImpl.getInstance().canDeleteItems()) { EntryStack<?> stack = EntryStacks.of(minecraft.player.inventory.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<ItemStack> cheatsAs = stack.cheatsAs(); + stack = cheatsAs.isEmpty() ? stack : cheatsAs; } for (Widget child : children()) { if (child.containsMouse(mouseX, mouseY) && child instanceof EntryWidget) { 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 69240df25..ec2652351 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<A> implements EntryStack<A>, Renderer { return wrap(getDefinition().wildcard(this, getValue()), false); } + @Override + public EntryStack<ItemStack> cheatsAs() { + ItemStack stack = getDefinition().cheatsAs(this, getValue()); + + if (stack == null) { + return null; + } + + return EntryStacks.of(stack); + } + protected EntryStack<A> wrap(A value, boolean copySettings) { TypedEntryStack<A> stack = new TypedEntryStack<>(getDefinition(), value); if (copySettings) { diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java index 52da795c7..9e77ae276 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java @@ -26,7 +26,6 @@ package me.shedaniel.rei.plugin.client; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.serialization.DataResult; import com.mojang.serialization.Lifecycle; -import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCoreClient; @@ -72,7 +71,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<ItemStack> cheatsAs = entry.cheatsAs(); + entry = cheatsAs.isEmpty() ? entry : cheatsAs; } if (entry.getType() == VanillaEntryTypes.ITEM) entry.<ItemStack>castValue().setCount(button != 1 && !Screen.hasShiftDown() ? 1 : entry.<ItemStack>castValue().getMaxStackSize()); 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 82a3a0598..3bee26f2c 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 @@ -68,6 +68,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; @@ -142,6 +144,15 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS } @Override + @Nullable + public ItemStack cheatsAs(EntryStack<FluidStack> 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<FluidStack> entry, FluidStack value, ComparisonContext context) { int code = 1; code = 31 * code + value.getFluid().hashCode(); 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 72ce3a183..19bab4c7b 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 @@ -132,6 +132,12 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer } @Override + @Nullable + public ItemStack cheatsAs(EntryStack<ItemStack> entry, ItemStack value) { + return value.copy(); + } + + @Override public long hash(EntryStack<ItemStack> entry, ItemStack value, ComparisonContext context) { int code = 1; code = 31 * code + System.identityHashCode(value.getItem()); |
