package moe.nea.ledger.mixin; import com.google.common.eventbus.EventBus; import net.minecraftforge.fml.client.FMLFileResourcePack; import net.minecraftforge.fml.common.DummyModContainer; import net.minecraftforge.fml.common.LoadController; import net.minecraftforge.fml.common.ModContainer; import net.minecraftforge.fml.common.ModMetadata; import net.minecraftforge.fml.common.discovery.ASMDataTable; import net.minecraftforge.fml.common.discovery.ContainerType; import net.minecraftforge.fml.common.discovery.ModCandidate; import net.minecraftforge.fml.common.discovery.ModDiscoverer; 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.CallbackInfoReturnable; import java.io.File; import java.util.Collections; import java.util.List; @Mixin(value = ModDiscoverer.class, remap = false) public class RegisterModResourcesPatch { @Shadow private List candidates; @Inject(method = "identifyMods", at = @At("HEAD"), remap = false) private void addCandidate(CallbackInfoReturnable> cir) { String bonusResourceMod = System.getProperty("ledger.bonusresourcemod"); if (bonusResourceMod == null) return; File file = new File(bonusResourceMod); if (!file.isDirectory()) return; ModMetadata modMetadata = new ModMetadata(); modMetadata.modId = "ledger-bonus"; modMetadata.name = "Ledger Bonus Resources"; modMetadata.autogenerated = true; ModContainer container = new DummyModContainer(modMetadata) { @Override public Object getMod() { return new Object(); } @Override public boolean registerBus(EventBus bus, LoadController controller) { return true; } @Override public File getSource() { return file; } @Override public Class getCustomResourcePackClass() { return FMLFileResourcePack.class; } }; candidates.add(new ModCandidate(file, file, ContainerType.DIR) { @Override public List explore(ASMDataTable table) { return Collections.singletonList(container); } }); } }