Skip to content

Commit

Permalink
Fixed shift-click crashing. Closes #895
Browse files Browse the repository at this point in the history
  • Loading branch information
Adubbz committed Dec 27, 2024
1 parent d53b5cf commit 2cb6a8b
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
******************************************************************************/
package toughasnails.container;

import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.Container;
import net.minecraft.world.SimpleContainer;
Expand All @@ -20,13 +21,14 @@
import toughasnails.api.container.TANContainerTypes;
import toughasnails.block.entity.WaterPurifierBlockEntity;
import toughasnails.crafting.WaterPurifierRecipe;
import toughasnails.init.ModRecipePropertySets;

public class WaterPurifierMenu extends AbstractContainerMenu
{
private final Container container;
private final ContainerData data;
private final Level level;
private final RecipeManager.CachedCheck<SingleRecipeInput, ? extends Recipe<SingleRecipeInput>> quickCheck;
private final RecipePropertySet acceptedInputs;

public WaterPurifierMenu(int id, Inventory playerInventory)
{
Expand All @@ -39,7 +41,7 @@ public WaterPurifierMenu(int id, Inventory playerInventory, Container container,
this.container = container;
this.data = data;
this.level = playerInventory.player.level();
this.quickCheck = RecipeManager.createCheck(TANRecipeTypes.WATER_PURIFYING);
this.acceptedInputs = this.level.recipeAccess().propertySet(ModRecipePropertySets.WATER_PURIFYING);

// Add input item slot
this.addSlot(new Slot(container, 0, 56, 17));
Expand Down Expand Up @@ -149,7 +151,7 @@ else if (!this.moveItemStackTo(slotItem, 3, 39, false)) // Move from purifier to

protected boolean canPurify(ItemStack stack)
{
return this.quickCheck.getRecipeFor(new SingleRecipeInput(stack), (ServerLevel)this.level).isPresent();
return this.acceptedInputs.test(stack);
}

protected boolean isFilter(ItemStack stack)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ public ItemStack assemble(SingleRecipeInput var1, HolderLookup.Provider var2)
return this.result.copy();
}

public ItemStack input()
{
return this.input;
}

protected ItemStack result()
{
return this.result;
Expand Down
20 changes: 20 additions & 0 deletions common/src/main/java/toughasnails/init/ModRecipePropertySets.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*******************************************************************************
* Copyright 2024, the Glitchfiend Team.
* All rights reserved.
******************************************************************************/
package toughasnails.init;

import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.RecipePropertySet;
import toughasnails.core.ToughAsNails;

public class ModRecipePropertySets
{
public static final ResourceKey<RecipePropertySet> WATER_PURIFYING = register("water_purifying");

private static ResourceKey<RecipePropertySet> register(String name)
{
return ResourceKey.create(RecipePropertySet.TYPE_KEY, ResourceLocation.fromNamespaceAndPath(ToughAsNails.MOD_ID, name));
}
}
35 changes: 35 additions & 0 deletions common/src/main/java/toughasnails/mixin/MixinRecipeManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*******************************************************************************
* Copyright 2024, the Glitchfiend Team.
* All rights reserved.
******************************************************************************/
package toughasnails.mixin;

import com.google.common.collect.ImmutableMap;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraft.world.item.crafting.RecipePropertySet;
import net.minecraft.world.item.crafting.SmithingRecipe;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import toughasnails.crafting.WaterPurifierRecipe;
import toughasnails.init.ModRecipePropertySets;

import java.util.Map;
import java.util.Optional;

@Mixin(RecipeManager.class)
public class MixinRecipeManager
{
@Shadow private static Map<ResourceKey<RecipePropertySet>, RecipeManager.IngredientExtractor> RECIPE_PROPERTY_SETS;

@Inject(method = "<clinit>", at = @At("TAIL"))
private static void onInit(CallbackInfo ci)
{
RECIPE_PROPERTY_SETS = ImmutableMap.<ResourceKey<RecipePropertySet>, RecipeManager.IngredientExtractor>builder().putAll(RECIPE_PROPERTY_SETS).put(ModRecipePropertySets.WATER_PURIFYING, recipe -> recipe instanceof WaterPurifierRecipe waterPurifierRecipe ? Optional.of(Ingredient.of(waterPurifierRecipe.input().getItem())) : Optional.empty()).build();
}
}
4 changes: 3 additions & 1 deletion common/src/main/resources/toughasnails.accesswidener
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,6 @@ mutable field net/minecraft/world/level/levelgen/structure/pools/StructureTempla
accessible field net/minecraft/world/level/levelgen/structure/pools/StructureTemplatePool templates Lit/unimi/dsi/fastutil/objects/ObjectArrayList;
accessible method net/minecraft/world/entity/ai/village/poi/PoiTypes registerBlockStates (Lnet/minecraft/core/Holder;Ljava/util/Set;)V

accessible method net/minecraft/world/level/block/entity/BlockEntityType <init> (Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V
accessible method net/minecraft/world/level/block/entity/BlockEntityType <init> (Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V

mutable field net/minecraft/world/item/crafting/RecipeManager RECIPE_PROPERTY_SETS Ljava/util/Map;
1 change: 1 addition & 0 deletions common/src/main/resources/toughasnails.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"MixinLivingEntity",
"MixinPlayer",
"MixinPotionBrewing",
"MixinRecipeManager",
"MixinServerLevel",
"MixinServerPlayer"
],
Expand Down
4 changes: 3 additions & 1 deletion forge/src/main/resources/META-INF/accesstransformer.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ public-f net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePoo
public net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool f_210560_ #templates
public net.minecraft.world.entity.ai.village.poi.PoiTypes m_246216_(Lnet/minecraft/core/Holder;Ljava/util/Set;)V #registerBlockStates

public net.minecraft.world.level.block.entity.BlockEntityType <init>(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V
public net.minecraft.world.level.block.entity.BlockEntityType <init>(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V

public-f net.minecraft.world.item.crafting.RecipeManager f_347382_ #RECIPE_PROPERTY_SETS
2 changes: 2 additions & 0 deletions neoforge/src/main/resources/META-INF/accesstransformer.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,5 @@ public net.minecraft.world.level.block.entity.BlockEntityType <init>(Lnet/minecr
public net.minecraft.client.data.models.ItemModelGenerators *()
public net.minecraft.client.data.models.ItemModelGenerators$TrimMaterialData
public net.minecraft.client.data.models.ItemModelGenerators TRIM_MATERIAL_MODELS

public-f net.minecraft.world.item.crafting.RecipeManager RECIPE_PROPERTY_SETS

0 comments on commit 2cb6a8b

Please sign in to comment.