Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions LICENSE

This file was deleted.

42 changes: 37 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,41 @@
# Ctrl-Q
## DOESN'T WORK!! (1.8)
This **Forge** mod forces CTRL-Q for dropping a stack of items (Helpful for macos users)

CurseForge mod page: https://www.curseforge.com/minecraft/mc-mods/ctrl-q
Client-side mod for Minecraft 1.8.9 Forge that enables CTRL+Q for dropping entire item stacks. Primarily designed for macOS users where CMD+Q quits the application instead of dropping items.

(Basically, it forces the "ctrl" key to be used when dropping a stack of item instead of "cmd" on MacOS)
## Installation

PS: The mod was made and tested in 1.16.5. I think there'll be an error if you go under these versions, so don't do it.
1. Install Minecraft Forge 1.8.9
2. Place the mod JAR in your `mods` folder
3. Launch Minecraft

## Usage

Press CTRL+Q to drop entire item stacks:
- In hotbar (when no GUI is open)
- In inventory containers (chests, furnaces, etc.)

The mod respects your configured drop key binding.

## Technical Implementation

- Uses Forge event system (`InputEvent.KeyInputEvent`, `GuiScreenEvent.KeyboardInputEvent`)
- Implements proper networking via `PlayerController.windowClick()`
- Reflection-based slot access for GUI containers
- Compatible with vanilla servers and anti-cheat plugins

## Limitations

- Creative Mode inventory is not supported
- Requires exactly Minecraft 1.8.9 with Forge

## Building

```bash
JAVA_HOME=/path/to/java8 ./gradlew build
```

Requires Java 8 for compatibility with Minecraft 1.8.9.

## License

MIT License
96 changes: 22 additions & 74 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,111 +1,59 @@
buildscript {
repositories {
maven { url 'https://jitpack.io' }
maven { url 'https://repo.spongepowered.org/maven' }
maven { url 'https://maven.minecraftforge.net/' }
jcenter()
maven { url = 'https://files.minecraftforge.net/maven' }
maven { url = 'https://repo.spongepowered.org/maven' }
}

dependencies {
classpath 'com.github.asbyth:ForgeGradle:8708bf3e01'
classpath 'com.github.xcfrg:MixinGradle:0.6-SNAPSHOT'
classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0'
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
}
}

apply plugin: 'java'
apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'org.spongepowered.mixin'
apply plugin: 'com.github.johnrengelman.shadow'

version = "1.8"
group = "me.polishkrowa"
archivesBaseName = "ctrlq-forge-mc1.8"
String modid = "ctrlq-forge"
version = "1.9.3-1.8.9"
group = "me.polishkrowa.ctrlq"
archivesBaseName = "ctrlq-1.8.9"

sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
compileJava.options.encoding = 'UTF-8'
sourceCompatibility = targetCompatibility = '1.8'
compileJava {
sourceCompatibility = targetCompatibility = '1.8'
}

minecraft {
version = "1.8.9-11.15.1.2318-1.8.9"
runDir = "run"
mappings = "stable_22"

makeObfSourceJar = false

// Optimized for Minecraft 1.8.9 with Forge 11.15.1.2318
replaceIn "me/polishkrowa/ctrlq/CtrlQMod.java"
replace "@VERSION@", project.version
}

configurations {
include
implementation.extendsFrom(include)
}

repositories {
maven { url 'https://jitpack.io' }
maven { url 'https://repo.spongepowered.org/repository/maven-public/' }
maven { url 'https://maven.minecraftforge.net/' }
}

dependencies {
include 'com.github.TheNullicorn:Nedit:2.1.0'

include("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
exclude module: "guava"
exclude module: "commons-io"
exclude module: "gson"
exclude module: "launchwrapper"
}
annotationProcessor "org.spongepowered:mixin:0.7.11-SNAPSHOT"
}

reobf {
shadowJar {
classpath = sourceSets.main.compileClasspath
maven {
name = 'spongepowered-repo'
url = 'https://repo.spongepowered.org/maven/'
}
}

mixin {
add sourceSets.main, "ctrlq-forge.mixins.refmap.json"
}


shadowJar {
archiveFileName = jar.archiveFileName
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
configurations = [project.configurations.include]
}

jar {
manifest.attributes(
"TweakClass": "org.spongepowered.asm.launch.MixinTweaker",
"MixinConfigs": "ctrlq-forge.mixins.json",
"FMLCorePluginContainsFMLMod": true,
"ForceLoadAsMod": true
)

enabled = false
dependencies {
}

tasks.reobfJar.dependsOn(tasks.shadowJar)

processResources {
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version

from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'

expand 'version': project.version, 'mcversion': project.minecraft.version
}

from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
}

task moveResources {
doLast {
ant.move file: "${buildDir}/resources/main",
todir: "${buildDir}/classes/java"
}
}

moveResources.dependsOn processResources
classes.dependsOn moveResources
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
org.gradle.daemon=false
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
3 changes: 2 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading