diff --git a/dependencies.gradle b/dependencies.gradle index 67a063a..0a01398 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -30,6 +30,9 @@ dependencies { exclude module: 'Baubles' } implementation("com.github.GTNewHorizons:Baubles-Expanded:2.1.9-GTNH:dev") + implementation("com.github.GTNewHorizons:InventoryBogoSorter:1.3.51-GTNH:dev") + // GTNHLib (needed by bogo) declares fastutil as compileOnlyApi, so it's never pulled in transitively at runtime + runtimeOnlyNonPublishable("it.unimi.dsi:fastutil:8.5.18") // for convenience of debug runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.7.74-GTNH:dev") diff --git a/src/main/java/net/glease/structurecompat/CompatBogoSorter.java b/src/main/java/net/glease/structurecompat/CompatBogoSorter.java new file mode 100644 index 0000000..edef090 --- /dev/null +++ b/src/main/java/net/glease/structurecompat/CompatBogoSorter.java @@ -0,0 +1,43 @@ +package net.glease.structurecompat; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; + +import com.cleanroommc.bogosorter.api.BeforeSortEvent; +import com.gtnewhorizon.structurelib.item.ItemConstructableTrigger; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@Compat("bogosorter") +public class CompatBogoSorter { + + private static final int MOUSE_MIDDLE = -98; + + public CompatBogoSorter() { + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onBeforeSortInGui(final BeforeSortEvent event) { + // Cancel Bogo inventory sort if projector is picked-up/held. + // Bogo sort is usually bound to middle-click. + // This is just to avoid annoying player experience. + if (!event.isFromKeybind()) return; + + final boolean isInGui = event.isInGui(); + if (event.getSortKeyCode() != MOUSE_MIDDLE) return; + + ItemStack item = null; + + if (isInGui) item = event.getPlayer().inventory.getItemStack(); + else item = event.getPlayer().getHeldItem(); + + if (item == null || !(item.getItem() instanceof ItemConstructableTrigger)) return; + + // Cancel sort + event.setCanceled(true); + } +}