aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: b8e860888559bb54caf391e003d438ddaa194a9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Forge Mod API

This repository contains the implementation of the Hypixel Mod API for the Forge Mod Loader in 1.8.9 for end-users. If you are a developer, and are looking to utilise the API you should look at the core [Hypixel Mod API](https://github.com/HypixelDev/ModAPI) repository.

## Usage

Add the HyPixel Maven repository to your build:

```kotlin
repositories {
    maven("https://repo.hypixel.net/repository/Hypixel/")
}
```

Then depend on the Forge Mod API. This will automatically pull in dependencies too.

```kotlin
val version = "1.0.0.2"
dependencies {
    modImplementation("net.hypixel:mod-api-forge:$version")
    // If you use ForgeGradle 2 you might need to use fg.deobf or deobfCompile instead. Consult your MDK for tips on how
    // to depend on an obfuscated dependency
}
```

From here on out you can use the [HyPixel Mod API](https://github.com/HypixelDev/ModAPI#example-usage) directly.

### Bundling the HyPixel Mod API

When using the HyPixel Mod API you need to instruct your users to
[download](https://modrinth.com/mod/hypixel-mod-api/versions?l=forge) the mod api and put it in their mods folders.

Alternatively you can bundle a loading tweaker instead. This involves a bit more setup, but will result in your mod
containing a copy of the mod api and at runtime selecting the newest available version of the mod api.

First you need to have a shadow plugin in your gradle setup. Note that normal `fileTree` based JAR copying does not
work, since we will need to relocate some files. Instead, use the [shadow plugin](https://github.com/johnrengelman/shadow)
or make use of a [template](https://github.com/nea89o/Forge1.8.9Template) with the plugin already set up.

Once you have your shadow plugin set up you will need to include a new dependency:
```kotlin
dependencies {
    modImplementation("net.hypixel:mod-api-forge:$version") // You should already have this dependency from earlier
    shadowImpl("net.hypixel:mod-api-forge-tweaker:$version") // You need to add this dependency
}
```

Make sure to relocate the `net.hypixel.modapi.tweaker` package to a unique location such as `my.modid.modapitweaker`.

Finally, add a manifest entry to your JAR pointing the `TweakClass` to `my.modid.modapitweaker.HypixelModAPITweaker`
(or otherwise load the tweaker using delegation).

```kotlin
tasks.shadowJar {
	configurations = listOf(shadowImpl)
    relocate("net.hypixel.modapi.tweaker", "my.modid.modapitweaker.HypixelModAPITweaker")
}

tasks.withType(org.gradle.jvm.tasks.Jar::class) {
	manifest.attributes.run {
		this["TweakClass"] = "my.modid.modapitweaker.HypixelModAPITweaker"
	}
}
```

Now your users will automatically use the bundled version of the mod api.


## Contributing

If you wish to contribute to this implementation of the Mod API to offer improvements or fixes, you can do so by forking the repository and creating a pull request.

> [!IMPORTANT]  
> Run `gradlew setupDecompWorkspace` after importing the project to generate the files required to build it

If IntelliJ still shows unknown symbol errors after running the command, you may need to [clear the filesystem cache](https://www.jetbrains.com/help/idea/invalidate-caches.html).

### Testing Your Changes

You can enable DevAuth to log in to the Hypixel server with your Minecraft account. Please see the [DevAuth docs](https://github.com/DJtheRedstoner/DevAuth) for more details.