Skip to content

Commit

Permalink
Fix Issues with Changing Modes on GCYM Multiblocks
Browse files Browse the repository at this point in the history
  • Loading branch information
IntegerLimit committed Aug 27, 2024
1 parent e86bb33 commit 42a6735
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.nomiceu.nomilabs.mixin.gregtech;

import net.minecraft.util.ResourceLocation;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import gregtech.api.capability.impl.MultiblockRecipeLogic;
import gregtech.api.metatileentity.multiblock.MultiMapMultiblockController;
import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController;
import gregtech.api.recipes.RecipeMap;

/**
* Fixes Recipes not being Rechecked when Mode Changed in GUI.
* <p>
* Allows Changing Modes with Screwdriver when Machine Active.
*/
@Mixin(value = MultiMapMultiblockController.class, remap = false)
public abstract class MultiMapMultiblockControllerMixin extends RecipeMapMultiblockController {

/**
* Mandatory Ignored Constructor
*/
public MultiMapMultiblockControllerMixin(ResourceLocation metaTileEntityId, RecipeMap<?> recipeMap) {
super(metaTileEntityId, recipeMap);
}

@Redirect(method = "onScrewdriverClick",
at = @At(value = "INVOKE", target = "Lgregtech/api/capability/impl/MultiblockRecipeLogic;isActive()Z"),
require = 1)
private boolean allowModeChangeWhenActive(MultiblockRecipeLogic instance) {
return false;
}

/**
* Cancel original recipe recheck in on screwdriver click, prevent double recheck
*/
@Redirect(method = "onScrewdriverClick",
at = @At(value = "INVOKE",
target = "Lgregtech/api/capability/impl/MultiblockRecipeLogic;forceRecipeRecheck()V"),
require = 1)
private void cancelOriginalRecheck(MultiblockRecipeLogic instance) {}

@Inject(method = "setRecipeMapIndex", at = @At("RETURN"))
private void forceRecheck(int index, CallbackInfo ci) {
if (!getWorld().isRemote) recipeMapWorkable.forceRecipeRecheck();
}
}
1 change: 1 addition & 0 deletions src/main/resources/mixins.nomilabs.gregtech.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"MetaTileEntityMEStockingHatchMixin",
"MetaTileEntityProcessingArrayMixin",
"MultiblockInfoCategoryMixin",
"MultiMapMultiblockControllerMixin",
"OreDictUnifierAccessor",
"OverlayedItemHandlerMixin",
"ProcessingArrayWorkableMixin",
Expand Down

0 comments on commit 42a6735

Please sign in to comment.