Skip to content

Commit 13650b6

Browse files
authored
Add a struct for research data to replace the generic pair (#3209)
1 parent 0200171 commit 13650b6

5 files changed

Lines changed: 27 additions & 26 deletions

File tree

src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import net.minecraftforge.items.IItemHandlerModifiable;
5050
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
5151

52-
import com.mojang.datafixers.util.Pair;
5352
import it.unimi.dsi.fastutil.objects.*;
5453
import org.jetbrains.annotations.NotNull;
5554
import org.jetbrains.annotations.Nullable;
@@ -410,14 +409,14 @@ private Object2IntMap<ItemStack> getIngredientStacks(IRecipeCapabilityHolder hol
410409
if (io == IO.OUT && recipe.recipeType.isScanner()) {
411410
scannerPossibilities = new ArrayList<>();
412411
// Scanner Output replacing, used for cycling research outputs
413-
Pair<GTRecipeType, String> researchData = null;
412+
ResearchManager.ResearchItem researchData = null;
414413
for (Content stack : recipe.getOutputContents(ItemRecipeCapability.CAP)) {
415414
researchData = ResearchManager.readResearchId(ItemRecipeCapability.CAP.of(stack.content).getItems()[0]);
416415
if (researchData != null) break;
417416
}
418417
if (researchData != null) {
419-
Collection<GTRecipe> possibleRecipes = researchData.getFirst()
420-
.getDataStickEntry(researchData.getSecond());
418+
Collection<GTRecipe> possibleRecipes = researchData.recipeType()
419+
.getDataStickEntry(researchData.researchId());
421420
Set<ItemStack> cache = new ObjectOpenCustomHashSet<>(ItemStackHashStrategy.comparingItem());
422421
if (possibleRecipes != null) {
423422
for (GTRecipe r : possibleRecipes) {

src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.gregtechceu.gtceu.api.item.component.IInteractionItem;
88
import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable;
99
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
10-
import com.gregtechceu.gtceu.api.recipe.GTRecipeType;
1110
import com.gregtechceu.gtceu.common.machine.owner.MachineOwner;
1211
import com.gregtechceu.gtceu.utils.ResearchManager;
1312

@@ -20,7 +19,6 @@
2019
import net.minecraft.world.item.context.UseOnContext;
2120
import net.minecraft.world.level.Level;
2221

23-
import com.mojang.datafixers.util.Pair;
2422
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
2523
import org.jetbrains.annotations.Nullable;
2624

@@ -47,7 +45,7 @@ public boolean requireDataBank() {
4745
@Override
4846
public void appendHoverText(ItemStack stack, @Nullable Level level, List<Component> tooltipComponents,
4947
TooltipFlag isAdvanced) {
50-
Pair<GTRecipeType, String> researchData = ResearchManager.readResearchId(stack);
48+
ResearchManager.ResearchItem researchData = ResearchManager.readResearchId(stack);
5149
if (researchData == null) {
5250
if (stack.getOrCreateTag().contains("pos", Tag.TAG_INT_ARRAY) && stack.hasTag()) {
5351
int[] posArray = stack.getOrCreateTag().getIntArray("pos");
@@ -58,7 +56,7 @@ public void appendHoverText(ItemStack stack, @Nullable Level level, List<Compone
5856
Component.literal("" + posArray[2]).withStyle(ChatFormatting.LIGHT_PURPLE)));
5957
}
6058
} else {
61-
Collection<GTRecipe> recipes = researchData.getFirst().getDataStickEntry(researchData.getSecond());
59+
Collection<GTRecipe> recipes = researchData.recipeType().getDataStickEntry(researchData.researchId());
6260
if (recipes != null && !recipes.isEmpty()) {
6361
tooltipComponents.add(Component.translatable("behavior.data_item.assemblyline.title"));
6462
Collection<ItemStack> added = new ObjectOpenHashSet<>();

src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine;
1515
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
1616
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
17-
import com.gregtechceu.gtceu.api.recipe.GTRecipeType;
1817
import com.gregtechceu.gtceu.common.item.PortableScannerBehavior;
1918
import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.DataBankMachine;
2019
import com.gregtechceu.gtceu.common.recipe.condition.ResearchCondition;
@@ -33,7 +32,6 @@
3332
import net.minecraft.world.item.ItemStack;
3433
import net.minecraft.world.phys.BlockHitResult;
3534

36-
import com.mojang.datafixers.util.Pair;
3735
import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet;
3836
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
3937
import lombok.Getter;
@@ -123,10 +121,11 @@ private void rebuildData(boolean isDataBank) {
123121
recipes.clear();
124122
for (int i = 0; i < this.importItems.getSlots(); i++) {
125123
ItemStack stack = this.importItems.getStackInSlot(i);
126-
Pair<GTRecipeType, String> researchData = ResearchManager.readResearchId(stack);
124+
ResearchManager.ResearchItem researchData = ResearchManager.readResearchId(stack);
127125
boolean isValid = ResearchManager.isStackDataItem(stack, isDataBank);
128126
if (researchData != null && isValid) {
129-
Collection<GTRecipe> collection = researchData.getFirst().getDataStickEntry(researchData.getSecond());
127+
Collection<GTRecipe> collection = researchData.recipeType()
128+
.getDataStickEntry(researchData.researchId());
130129
if (collection != null) {
131130
recipes.addAll(collection);
132131
}

src/main/java/com/gregtechceu/gtceu/core/mixins/GuiGraphicsMixin.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability;
44
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
5-
import com.gregtechceu.gtceu.api.recipe.GTRecipeType;
65
import com.gregtechceu.gtceu.utils.ResearchManager;
76

87
import net.minecraft.client.gui.GuiGraphics;
@@ -11,7 +10,6 @@
1110
import net.minecraft.world.item.ItemStack;
1211
import net.minecraft.world.level.Level;
1312

14-
import com.mojang.datafixers.util.Pair;
1513
import org.jetbrains.annotations.Nullable;
1614
import org.spongepowered.asm.mixin.Mixin;
1715
import org.spongepowered.asm.mixin.Shadow;
@@ -40,13 +38,13 @@ private void renderItem(@Nullable LivingEntity entity, @Nullable Level level, It
4038
cancellable = true)
4139
protected void gtceu$renderItem(@Nullable LivingEntity livingEntity, @Nullable Level level, ItemStack stack,
4240
int x, int y, int seed, int z, CallbackInfo ci) {
43-
if (GTCEU$OVERRIDING_FOR.get() != null) {
41+
if (GTCEU$OVERRIDING_FOR.get() != null || !Screen.hasShiftDown()) {
4442
return;
4543
}
4644

47-
Pair<GTRecipeType, String> researchData = ResearchManager.readResearchId(stack);
48-
if (Screen.hasShiftDown() && researchData != null) {
49-
Collection<GTRecipe> recipes = researchData.getFirst().getDataStickEntry(researchData.getSecond());
45+
ResearchManager.ResearchItem researchData = ResearchManager.readResearchId(stack);
46+
if (researchData != null) {
47+
Collection<GTRecipe> recipes = researchData.recipeType().getDataStickEntry(researchData.researchId());
5048
if (recipes != null && !recipes.isEmpty()) {
5149
for (var recipe : recipes) {
5250
ItemStack output = ItemRecipeCapability.CAP

src/main/java/com/gregtechceu/gtceu/utils/ResearchManager.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616

1717
import net.minecraft.data.recipes.FinishedRecipe;
1818
import net.minecraft.nbt.CompoundTag;
19+
import net.minecraft.nbt.NbtOps;
1920
import net.minecraft.nbt.Tag;
2021
import net.minecraft.network.chat.Component;
21-
import net.minecraft.resources.ResourceLocation;
2222
import net.minecraft.world.item.ItemStack;
2323
import net.minecraftforge.items.IItemHandlerModifiable;
2424
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
2525

26-
import com.mojang.datafixers.util.Pair;
26+
import com.mojang.serialization.Codec;
27+
import com.mojang.serialization.codecs.RecordCodecBuilder;
2728
import org.jetbrains.annotations.NotNull;
2829
import org.jetbrains.annotations.Nullable;
2930

@@ -67,16 +68,12 @@ public static void writeResearchToNBT(@NotNull CompoundTag stackCompound, @NotNu
6768
* @return the research id
6869
*/
6970
@Nullable
70-
public static Pair<GTRecipeType, String> readResearchId(@NotNull ItemStack stack) {
71+
public static ResearchItem readResearchId(@NotNull ItemStack stack) {
7172
CompoundTag compound = stack.getTag();
7273
if (!hasResearchTag(compound)) return null;
7374

7475
CompoundTag researchCompound = compound.getCompound(RESEARCH_NBT_TAG);
75-
String researchId = researchCompound.getString(RESEARCH_ID_NBT_TAG);
76-
ResourceLocation researchRecipeType = ResourceLocation
77-
.tryParse(researchCompound.getString(RESEARCH_TYPE_NBT_TAG));
78-
return researchId.isEmpty() || researchRecipeType == null ? null :
79-
Pair.of(GTRegistries.RECIPE_TYPES.get(researchRecipeType), researchId);
76+
return ResearchItem.CODEC.parse(NbtOps.INSTANCE, researchCompound).result().orElse(null);
8077
}
8178

8279
/**
@@ -156,6 +153,16 @@ public static void createDefaultResearchRecipe(@NotNull GTRecipeType recipeType,
156153
}
157154
}
158155

156+
public record ResearchItem(@NotNull String researchId, @NotNull GTRecipeType recipeType) {
157+
158+
// spotless:off
159+
public static final Codec<ResearchItem> CODEC = RecordCodecBuilder.create(instance -> instance.group(
160+
Codec.STRING.fieldOf("research_id").forGetter(ResearchItem::researchId),
161+
GTRegistries.RECIPE_TYPES.codec().fieldOf("research_type").forGetter(ResearchItem::recipeType)
162+
).apply(instance, ResearchItem::new));
163+
// spotless:on
164+
}
165+
159166
public static class DataStickCopyScannerLogic implements GTRecipeType.ICustomRecipeLogic {
160167

161168
private static final int EUT = 2;

0 commit comments

Comments
 (0)