Skip to content
Merged
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
73 changes: 73 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Contributor Covenant Code of Conduct

## Our Pledge

A non-negotiable agreement you make as a contributor to this project, is to
welcome everyone, regardless of age, body size, disability, ethnicity, gender identity
and expression, level of experience, education, socio-economic status, nationality,
personal appearance, race, religion, or sexual identity and orientation.

If you cannot agree to this agreement, stuff it.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at {{ email }}. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org
41 changes: 41 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
## Before getting started

Thank you for your interest in contributing to Alya Client!

# Guidelines

This is a safe space for people to contribute to the project.

# How to contribute

1. **Find an issue** that you want to work on.
2. **Fork** the repository.
3. **Create a branch** for your changes.
4. **Make your changes**.
5. **Submit a pull request**.
6. **Wait for the review**.

If you need further guidance, you can find us on the following platforms:

- Discord (https://discord.gg/J3XUnGaZjQ)

## Getting started

> Here you should address guidelines about future functionalities, milestone
labels, bugs and unlisted features, issued assignments, etc. Since now we have
an `Issue` and a `Pull Request` template, you can reference them directly:

> **ProTip:** It's important people know the rules for contributing in the
project. It's irritating for people trying to help when they are pushed back
because they didn't follow some process that they didn't know existed. This file
is the place for these processes and it will lower the barrier to entry for
contribution.

## Coding conventions

In order to sanitize coding standards, please follow [this style
guide](STYLE_GUIDE.md).

## Code of Conduct

See the [code of conduct](CODE_OF_CONDUCT.md) for more details.
67 changes: 56 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,67 @@ Open the project in IntelliJ, import it and run the `Start` or `Start (macOS)` r
### I am the IDE (manual)

#### Prerequisites

- Java 25
- Gradle (Optional, will be downloaded by wrapper)

1. Init the Gradle wrapper and package libraries
1. Init the Gradle wrapper and package libraries: `./scripts/init.sh`
2. Build the project: `./gradlew jar shadowJar`
3. Run the project: `./scripts/run.sh`

```sh
./scripts/init.sh
```
## Project Structure

Packages
- `bypass`: The package holding all of Alya Client's base code.
- `net.minecraft`, `net.minecraftforge` and `net.optifine`: Contains all of Minecraft + Optifines source.
- `de.florianmichael`: ViaMCP for protocol switching
- `resources/lua`: Contains most of Alya client's bypasses and modules.

2. Build the project
You will mainly need to look at `bypass` and `resources/lua` while developing. If you need to hook into Minecraft,
you will (obviously) be digging through `net.minecraft`.

```sh
./gradlew jar shadowJar
### Project Tree

```aiignore
.
├── src/main/java
│ ├── bypass # Alya base code
│ ├── de.florianmichael # ViaMCP
│ ├── net.minecraft / net.minecraftforge / net.optifine
│ └── start
├── src/main/resources
│ └── lua # bypasses and modules
├── jars # runtime working directory
├── scripts # utilities
└── build.gradle.kts
```

3. Run the project
## Support

If you have trouble, please feel free to join our [Discord](https://discord.gg/J3XUnGaZjQ)
or DM `@thoqx` on Discord.

## License

This project uses the GPL-2.0-only license.

PERMISSIONS
- Use the software for any purpose
- Study and read the source code
- Modify the source code
- Distribute original copies
- Distribute modified copies, under the same license

CONDITIONS
- Copyleft: any distributed version must also be licensed under GPL-2.0
- Source code must be made available when distributing
- Original license and copyright notices must be preserved
- No additional restrictions may be imposed on recipients

RESTRICTIONS
- Cannot be relicensed under a different or more restrictive license
- Cannot be distributed as closed-source without providing source
- Cannot be upgraded to GPL-3.0 or any other version
(the "-only" suffix locks it strictly to version 2)

```shell
./scripts/run.sh
```
See the [LICENSE](LICENSE) file for more information.
77 changes: 77 additions & 0 deletions STYLE_GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Alya Client Code Style Guide

## Control Flow

Do NOT put a space between the keyword and the opening parenthesis.

```java
// wrong
if (condition) { ... }
while (condition) { ... }
for (int i = 0; i < n; i++) { ... }
switch (value) { ... }

// correct
if(condition) { ... }
while(condition) { ... }
for(int i = 0; i < n; i++) { ... }
switch(value) { ... }
```

This applies to: `if`, `while`, `for`, `switch`, `catch`, and all other control flow statements.

---

## Variable Names

Variable names must be fully descriptive. Abbreviations are not allowed.

```java
// wrong
int btn;
String usr;
boolean isConn;
int idx;

// correct
int button;
String user;
boolean isConnected;
int index;
```

Single-letter variable names are only permitted as loop counters (e.g. `i`,
`j`, `k`).

---

## Immutability

Declare classes, variables, parameters, and fields as `final` wherever possible.

```java
// wrong
int count = getCount();
String name = getName();

// correct
final int count = getCount();
final String name = getName();
```

This includes:
- Local variables that are not reassigned
- Method parameters that are not reassigned
- Methods not inside a final class
- Fields that are only assigned once (in the constructor or at declaration)
- Classes that are not extended or abstract

```java
// wrong
public void doSomething(String input) { ... }
public class MyClass { ... }

// correct
public void doSomething(final String input) { ... }
public final class MyClass { ... }
```
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,15 @@ val generateBuildConfig by tasks.registering {
}

val outputDir = generatedSrcDir.get().asFile
val packageDir = File(outputDir, "dev/thoq/alya")
val packageDir = File(outputDir, "bypass")

outputs.dir(outputDir)

doLast {
packageDir.mkdirs()
File(packageDir, "BuildConfig.java").writeText(
"""
package dev.thoq.alya;
package bypass;

public class BuildConfig {
public static final String GIT_HASH = "$gitHash";
Expand Down
22 changes: 1 addition & 21 deletions jars/run_config/Start (macOS).run.xml
Original file line number Diff line number Diff line change
@@ -1,27 +1,7 @@
<!--
~ Copyright (c) 2026 Alya Client.
~
~ Alya Client is a free, open-source Minecraft hacked client.
~
~ This program is free software; you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation; either version 2 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program; if not, write to the Free Software Foundation, Inc.,
~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-->

<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Start (macOS)" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="start.Main" />
<module name="dev.thoq.Alya.main" />
<module name="Alya.main" />
<option name="VM_PARAMETERS" value="-XstartOnFirstThread -Xms2G -Xmx4G --sun-misc-unsafe-memory-access=allow --enable-native-access=ALL-UNNAMED -Dalya.dev.resources=$PROJECT_DIR$/src/main/resources" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/jars" />
<method v="2">
Expand Down
37 changes: 19 additions & 18 deletions src/main/java/dev/thoq/Alya.java → src/main/java/bypass/Alya.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,25 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

package dev.thoq;

import dev.thoq.backend.BackendConnector;
import dev.thoq.command.CommandManager;
import dev.thoq.command.commands.*;
import dev.thoq.config.ConfigManager;
import dev.thoq.event.EventBus;
import dev.thoq.lua.LuaEngine;
import dev.thoq.lua.Script;
import dev.thoq.lua.ScriptsUtil;
import dev.thoq.lua.api.LuaFontApi;
import dev.thoq.lua.api.LuaMinecraftApi;
import dev.thoq.module.Category;
import dev.thoq.module.ModuleManager;
import dev.thoq.module.modules.clickgui.ClickGUI;
import dev.thoq.module.modules.render.HUDModule;
import dev.thoq.module.modules.render.KeystrokesModule;
import dev.thoq.util.font.AlyaFontRenderer;
package bypass;

import bypass.backend.BackendConnector;
import bypass.command.CommandManager;
import bypass.command.commands.*;
import bypass.command.commands.*;
import bypass.config.ConfigManager;
import bypass.event.EventBus;
import bypass.lua.LuaEngine;
import bypass.lua.Script;
import bypass.lua.ScriptsUtil;
import bypass.lua.api.LuaFontApi;
import bypass.lua.api.LuaMinecraftApi;
import bypass.module.Category;
import bypass.module.ModuleManager;
import bypass.module.modules.clickgui.ClickGUI;
import bypass.module.modules.render.HUDModule;
import bypass.module.modules.render.KeystrokesModule;
import bypass.util.font.AlyaFontRenderer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.florianmichael.viamcp.ViaMCP;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

package dev.thoq.backend;
package bypass.backend;

import dev.thoq.Alya;
import bypass.Alya;
import net.minecraft.client.Minecraft;

import java.io.IOException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

package dev.thoq.command;
package bypass.command;

import net.minecraft.client.Minecraft;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

package dev.thoq.command;
package bypass.command;

import dev.thoq.util.player.ChatUtil;
import bypass.util.player.ChatUtil;

import java.util.*;
import java.util.stream.Collectors;
Expand Down
Loading
Loading