Compare commits

...

32 commits
v0.1.0 ... main

Author SHA1 Message Date
KawaiiZenbo
995f452c2f
Merge pull request #4 from kawaiizenbo/v0.4.0
V0.4.0
2025-01-25 11:31:23 -07:00
kawaiizenbo
faf56e1e16 1.21.4 2025-01-25 11:26:20 -07:00
kawaiizenbo
72ec2869b8 fix the shit that broke 2024-11-09 19:10:46 -07:00
KawaiiZenbo
75c83f0ca7
fuck it we ball
1.21.3 for 0.4.0
2024-11-09 18:09:27 -08:00
KawaiiZenbo
8abcd7341e
Merge branch 'v0.4.0' into v0.4.0-1.21.3 2024-11-09 18:07:54 -08:00
kawaiizenbo
2e01a65ab4 clean up ci 2024-11-09 18:55:24 -07:00
kawaiizenbo
8f9a6005f5 1.21.3 support 2024-11-09 18:47:28 -07:00
KawaiiZenbo
1b0729658d
Merge pull request #2 from kawaiizenbo/theme-test
make indexsetting visually distinct from stringsetting
2024-09-09 19:15:37 -07:00
kawaiizenbo
fd96ca5d42 make indexsetting visually distinct from stringsetting 2024-09-09 19:13:25 -07:00
kawaiizenbo
bd5573c48f many major changes, see store for details
- bump version to v0.4.0
- add theme support
- add high contrast and light themes
- remove settingcommand (broken)
- add icon variants for certain themes
- remove text shadows from interfaces other than the hud
2024-09-09 18:04:47 -07:00
KawaiiZenbo
854ce7201c
Merge pull request #1 from kawaiizenbo/v0.3.0
v0.3.0
2024-09-09 13:14:31 -07:00
kawaiizenbo
ccbb4c00ce and one more thing 2024-09-09 13:10:24 -07:00
kawaiizenbo
a055d56084 totem counter and armor on hud 2024-09-09 12:30:56 -07:00
kawaiizenbo
206d076fbb hud modules now save state to config 2024-09-09 09:56:53 -07:00
kawaiizenbo
b8bb14081e new setting and make modular hud the default 2024-09-08 16:34:13 -07:00
kawaiizenbo
e5d1d3ef73 add settings to hud modules 2024-09-08 11:45:05 -07:00
kawaiizenbo
90347f7476 now able to toggle hud modules 2024-09-07 21:21:22 -07:00
kawaiizenbo
8f6646b7e0 implement legacy hud elements as modules 2024-09-07 20:40:47 -07:00
kawaiizenbo
31ecdd4f04 bare minimum function hud editor 2024-09-07 19:24:06 -07:00
kawaiizenbo
9ab102a648 start of hud rework 2024-09-07 16:14:08 -07:00
kawaiizenbo
a3e7e885ac auto toteme 2024-09-07 14:52:38 -07:00
kawaiizenbo
00e91b98aa fix hud bug, update to 1.21.1 2024-08-27 19:00:37 -07:00
kawaiizenbo
253ee1d5be kleanup crew 2024-08-27 12:10:37 -07:00
kawaiizenbo
92a2db9d89 update readme 2024-06-16 15:17:41 -07:00
kawaiizenbo
42eef68a66 timer is officially removed 2024-06-16 15:08:34 -07:00
kawaiizenbo
eb50de42e0 cleanup 2024-06-15 21:02:40 -07:00
kawaiizenbo
507ed6b7e5 inventive uses of attributes 2024-06-15 20:10:59 -07:00
kawaiizenbo
6cd03fab06 fix ci 2024-06-15 16:45:50 -07:00
kawaiizenbo
69b444c3c2 1.21 update
update to 1.21, remove timer
2024-06-15 16:38:24 -07:00
kawaiizenbo
c68631010d 0.2.0 work in progress 2024-01-14 11:27:19 -07:00
kawaiizenbo
08031c32ba 1.20.4 2023-12-12 18:38:02 -07:00
kawaiizenbo
b84aac97b2 Update README.md 2023-10-12 15:53:25 -07:00
96 changed files with 1416 additions and 403 deletions

View file

@ -1,8 +1,3 @@
# Automatically build the project and run any configured tests for every push
# and submitted pull request. This can help catch issues that only occur on
# certain platforms or Java versions, and provides a first line of defence
# against bad commits.
name: build
on: [pull_request, push]
@ -10,12 +5,11 @@ jobs:
build:
strategy:
matrix:
# Use these Java versions
java: [
17, # Current Java LTS & minimum supported by Minecraft
21, # java version used since 1.20.5
]
# and run on both Linux and Windows
os: [ubuntu-22.04]
# only linux
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- name: checkout repository
@ -28,12 +22,10 @@ jobs:
java-version: ${{ matrix.java }}
distribution: 'microsoft'
- name: make gradle wrapper executable
if: ${{ runner.os != 'Windows' }}
run: chmod +x ./gradlew
- name: build
run: ./gradlew build
- name: capture build artifacts
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS
uses: actions/upload-artifact@v3
with:
name: Artifacts

View file

@ -1,10 +1,10 @@
# Moonlight Meadows Utility Mod for Modern versions of Minecraft
Requires Fabric API and Minecraft 1.20.2
Requires Fabric, Fabric API, and Minecraft 1.21
Default ClickGUI Key is Right Alt.
~~Grab the latest release build [here](https://github.com/kawaiizenbo/MoonlightMeadows/releases)~~ These will be available soon.
Grab the latest release build [here](https://github.com/kawaiizenbo/MoonlightMeadows/releases)
Grab the latest nightly build [here](https://nightly.link/kawaiizenbo/MoonlightMeadows/workflows/build/main/Artifacts.zip)
## Screenshots
@ -19,5 +19,6 @@ Grab the latest nightly build [here](https://nightly.link/kawaiizenbo/MoonlightM
## Disclaimer
Please use this mod at your own risk, we are not responsible for any injury or death caused by this mod.
Please use this mod at your own risk, we are not responsible for any serious injury or death caused by this mod.
Do not use while operating heavy machinery.
This project is not affiliated with Mojang or Microsoft.

View file

@ -1,10 +1,10 @@
plugins {
id 'fabric-loom' version '1.0-SNAPSHOT'
id 'fabric-loom' version '1.8-SNAPSHOT'
id 'maven-publish'
}
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
archivesBaseName = project.archives_base_name
version = project.mod_version
@ -46,8 +46,8 @@ processResources {
}
tasks.withType(JavaCompile).configureEach {
// Minecraft 1.18 (1.18-pre2) upwards uses Java 17.
it.options.release = 17
// Minecraft 1.20.5 (24w14a) upwards uses Java 21.
it.options.release = 21
}
java {

View file

@ -4,14 +4,14 @@ org.gradle.parallel=true
# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_version=1.20.2
yarn_mappings=1.20.2+build.4
loader_version=0.14.22
minecraft_version=1.21.4
yarn_mappings=1.21.4+build.8
loader_version=0.16.10
# Mod Properties
mod_version = 0.1.0
mod_version = 0.4.0
maven_group = me.kawaiizenbo
archives_base_name = moonlight
# Dependencies
fabric_version=0.90.0+1.20.2
fabric_version=0.115.0+1.21.4

Binary file not shown.

View file

@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

29
gradlew vendored
View file

@ -83,10 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -133,10 +131,13 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 405 KiB

BIN
readme-assets/title-old.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 KiB

After

Width:  |  Height:  |  Size: 556 KiB

View file

@ -14,10 +14,13 @@ import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
import net.minecraft.client.MinecraftClient;
public class Config
@ -41,6 +44,7 @@ public class Config
public void loadDefaultConfig()
{
ModuleManager.INSTANCE = new ModuleManager();
config.put("theme", 2);
Map<String, Object> mi = new HashMap<>();
for (Module m : ModuleManager.INSTANCE.modules)
{
@ -49,7 +53,6 @@ public class Config
Map<String, Object> ms = new HashMap<>();
for (Setting s : m.settings)
{
// sometimes i wish i were a nymphet instead of a massive nerd
if (s instanceof BooleanSetting)
{
ms.put(s.name, ((BooleanSetting)s).value);
@ -58,19 +61,60 @@ public class Config
{
ms.put(s.name, ((DoubleSetting)s).value);
}
if (s instanceof StringSetting)
else if (s instanceof StringSetting)
{
ms.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
ms.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
ms.put(s.name, ((IndexSetting)s).index);
}
}
mo.put("settings", ms);
mi.put(m.name, mo);
}
config.put("modules", mi);
HUDModuleManager.INSTANCE = new HUDModuleManager();
Map<String, Object> hi = new HashMap<>();
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
{
Map<String, Object> ho = new HashMap<>();
ho.put("enabled", h.enabled);
Map<String, Object> hs = new HashMap<>();
for (Setting s : h.settings)
{
if (s instanceof BooleanSetting)
{
hs.put(s.name, ((BooleanSetting)s).value);
}
else if (s instanceof DoubleSetting)
{
hs.put(s.name, ((DoubleSetting)s).value);
}
else if (s instanceof StringSetting)
{
hs.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
hs.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
hs.put(s.name, ((IndexSetting)s).index);
}
}
ho.put("settings", hs);
ho.put("x", h.x);
ho.put("y", h.y);
hi.put(h.name, ho);
}
config.put("hud", hi);
int xOffset = 4;
int yOffset = 4;
Map<String, Object> pi = new HashMap<>();
@ -92,7 +136,8 @@ public class Config
ClickGUIScreen.INSTANCE = new ClickGUIScreen();
}
public void load() throws IOException
@SuppressWarnings("unchecked")
public void load() throws IOException
{
try
{

View file

@ -12,11 +12,15 @@ import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
import me.kawaiizenbo.moonlight.theme.Theme;
import me.kawaiizenbo.moonlight.ui.clickgui.CategoryPane;
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
import me.kawaiizenbo.moonlight.util.ColorUtils;
public class Moonlight implements ModInitializer
@ -24,10 +28,10 @@ public class Moonlight implements ModInitializer
public static final Moonlight INSTANCE = new Moonlight();
public static final Logger LOGGER = LoggerFactory.getLogger("Moonlight");
public static final String clientTag = ColorUtils.aqua + "Moonlight Meadows";
public static final String versionTag = ColorUtils.magenta + "v0.1.0";
public static final String versionTag = ColorUtils.magenta + "v0.4.0";
public static Theme THEME = Theme.DARK;
public static int THEME_IDX = 2;
public static Config CONFIG = new Config();
public static int uiColorA = 0xFF55FFFF;
public static int uiColor = 0x55FFFF;
@Override
public void onInitialize()
@ -36,12 +40,15 @@ public class Moonlight implements ModInitializer
loadConfig();
}
@SuppressWarnings("unchecked")
public void loadConfig()
{
try
{
LOGGER.info("Loading config...");
CONFIG.load();
THEME_IDX = ((Double)CONFIG.config.get("theme")).intValue();
THEME = Theme.THEME_LIST[THEME_IDX];
for (Module m : ModuleManager.INSTANCE.modules)
{
m.enabled = (boolean)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("enabled");
@ -62,6 +69,39 @@ public class Moonlight implements ModInitializer
else if (s instanceof KeycodeSetting)
{
((KeycodeSetting)s).value = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("settings")).get(s.name)).intValue();
}
else if (s instanceof IndexSetting)
{
((IndexSetting)s).index = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("settings")).get(s.name)).intValue();
}
}
}
for (HUDModule m : HUDModuleManager.INSTANCE.modules)
{
m.enabled = (boolean)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("enabled");
m.x = ((Double)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("x")).intValue();
m.y = ((Double)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("y")).intValue();
for (Setting s : m.settings)
{
if (s instanceof BooleanSetting)
{
((BooleanSetting)s).value = (boolean)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name);
}
else if (s instanceof DoubleSetting)
{
((DoubleSetting)s).value = (Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name);
}
else if (s instanceof StringSetting)
{
((StringSetting)s).value = (String)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name);
}
else if (s instanceof KeycodeSetting)
{
((KeycodeSetting)s).value = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name)).intValue();
}
else if (s instanceof IndexSetting)
{
((IndexSetting)s).index = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name)).intValue();
}
}
}
@ -78,6 +118,7 @@ public class Moonlight implements ModInitializer
public void saveConfig()
{
LOGGER.info("Saving config...");
CONFIG.config.put("theme", THEME_IDX);
Map<String, Object> mi = new HashMap<>();
for (Module m : ModuleManager.INSTANCE.modules)
{
@ -94,19 +135,60 @@ public class Moonlight implements ModInitializer
{
ms.put(s.name, ((DoubleSetting)s).value);
}
if (s instanceof StringSetting)
else if (s instanceof StringSetting)
{
ms.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
ms.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
ms.put(s.name, ((IndexSetting)s).index);
}
}
mo.put("settings", ms);
mi.put(m.name, mo);
}
CONFIG.config.put("modules", mi);
Map<String, Object> hi = new HashMap<>();
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
{
Map<String, Object> ho = new HashMap<>();
ho.put("enabled", h.enabled);
Map<String, Object> hs = new HashMap<>();
for (Setting s : h.settings)
{
if (s instanceof BooleanSetting)
{
hs.put(s.name, ((BooleanSetting)s).value);
}
else if (s instanceof DoubleSetting)
{
hs.put(s.name, ((DoubleSetting)s).value);
}
else if (s instanceof StringSetting)
{
hs.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
hs.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
hs.put(s.name, ((IndexSetting)s).index);
}
}
ho.put("settings", hs);
ho.put("x", h.x);
ho.put("y", h.y);
hi.put(h.name, ho);
}
CONFIG.config.put("hud", hi);
Map<String, Object> pi = new HashMap<>();
for (CategoryPane c : ClickGUIScreen.INSTANCE.categoryPanes)
{

View file

@ -29,7 +29,8 @@ public class CommandManager
add(new Help());
add(new Toggle());
add(new Teleport());
add(new SettingCommand());
add(new Reset());
add(new DeathPos());
commands.sort(Comparator.comparing(Command::getName));
}

View file

@ -0,0 +1,43 @@
package me.kawaiizenbo.moonlight.command.commands;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import me.kawaiizenbo.moonlight.command.Command;
import me.kawaiizenbo.moonlight.util.ChatUtils;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import net.minecraft.command.CommandSource;
import net.minecraft.util.math.GlobalPos;
public class DeathPos extends Command
{
public DeathPos()
{
super("deathpos", "Shows your last death position.");
}
@Override
public void build(LiteralArgumentBuilder<CommandSource> builder)
{
builder.executes(context ->
{
GlobalPos pos = null;
try
{
pos = mc.player.getLastDeathPos().get();
if (pos == null) throw new Exception();
}
catch (Exception e)
{
ChatUtils.sendMsg(ColorUtils.reset + "You have not died in this world.");
return SINGLE_SUCCESS;
}
ChatUtils.sendMsg(ColorUtils.reset + "You last died at: " +
ColorUtils.aqua + " X: " + ColorUtils.gray + pos.pos().getX() +
ColorUtils.aqua + " Y: " + ColorUtils.gray + pos.pos().getY() +
ColorUtils.aqua + " Z: " + ColorUtils.gray + pos.pos().getZ()
);
return SINGLE_SUCCESS;
});
}
}

View file

@ -20,13 +20,13 @@ public class Help extends Command
{
builder.executes(context ->
{
for (Command cmd : CommandManager.get().getAll()) {
for (Command cmd : CommandManager.get().getAll())
{
ChatUtils.sendMsg(ColorUtils.aqua + "Command: " + ColorUtils.gray + cmd.getName());
ChatUtils.sendMsg(ColorUtils.gray + cmd.getDescription());
ChatUtils.sendMsg(ColorUtils.gray + "");
}
return SINGLE_SUCCESS;
});
}
}

View file

@ -1,115 +0,0 @@
package me.kawaiizenbo.moonlight.command.commands;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import me.kawaiizenbo.moonlight.command.Command;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
import me.kawaiizenbo.moonlight.util.ChatUtils;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import me.kawaiizenbo.moonlight.module.Module;
import net.minecraft.command.CommandSource;
public class SettingCommand extends Command
{
public SettingCommand()
{
super("setting", "Change a setting of a module.");
}
@Override
public void build(LiteralArgumentBuilder<CommandSource> builder)
{
builder
.then(argument("module", StringArgumentType.string())
.then(argument("setting", StringArgumentType.string())
.then(argument("value", StringArgumentType.string())
.executes(context ->
{
String m = context.getArgument("module", String.class);
String s = context.getArgument("setting", String.class);
String v = context.getArgument("value", String.class);
Module module = ModuleManager.INSTANCE.getModuleByName(m);
if (module == null)
{
ChatUtils.sendMsg(ColorUtils.red + "Invalid Module Name");
return 0;
}
Setting setting = module.getSettingByName(s);
if (setting == null)
{
ChatUtils.sendMsg(ColorUtils.red + "Invalid Setting Name");
return 0;
}
if (setting instanceof BooleanSetting)
{
try
{
((BooleanSetting)setting).value = Boolean.parseBoolean(v);
}
catch (Exception e)
{
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected boolean");
return 0;
}
}
else if (setting instanceof DoubleSetting)
{
try
{
((DoubleSetting)setting).value = Double.parseDouble(v);
}
catch (Exception e)
{
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected Double");
return 0;
}
}
else if (setting instanceof StringSetting)
{
try
{
((StringSetting)setting).value = v;
}
catch (Exception e)
{
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected String");
return 0;
}
}
else if (setting instanceof KeycodeSetting)
{
try
{
int kv = Integer.parseInt(v);
if (kv > 348)
{
ChatUtils.sendMsg(ColorUtils.red + "Keycode Value is too high, maximum is 348 (Menu)");
return 0;
}
if (kv < 0)
{
ChatUtils.sendMsg(ColorUtils.red + "Keycode Value must be positive");
return 0;
}
((KeycodeSetting)setting).value = kv;
}
catch (Exception e)
{
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected Keycode (integer)");
return 0;
}
}
return SINGLE_SUCCESS;
}))));
}
}

View file

@ -6,6 +6,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import me.kawaiizenbo.moonlight.command.Command;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import net.minecraft.client.MinecraftClient;
import net.minecraft.command.CommandSource;
public class Toggle extends Command
@ -13,7 +14,7 @@ public class Toggle extends Command
public Toggle()
{
super("toggle", "Toggle a module.");
super("toggle", "Toggle a module on or off.");
}
@Override
@ -24,7 +25,7 @@ public class Toggle extends Command
{
String m = context.getArgument("module", String.class);
Module module = ModuleManager.INSTANCE.getModuleByName(m);
module.toggle();
MinecraftClient.getInstance().send(() -> module.toggle());
return SINGLE_SUCCESS;
}));

View file

@ -24,7 +24,8 @@ public class ClientPlayerEntityMixin
}
}
@Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true)
@SuppressWarnings("resource")
@Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true)
public void onTick(CallbackInfo ci)
{
for (Module m : ModuleManager.INSTANCE.getEnabledModules())

View file

@ -1,28 +1,32 @@
package me.kawaiizenbo.moonlight.mixin;
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.CallbackInfo;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.ui.HUDOverlay;
import me.kawaiizenbo.moonlight.module.modules.HUDEnabler;
import me.kawaiizenbo.moonlight.ui.LegacyHUD;
import me.kawaiizenbo.moonlight.ui.ModulesListOverlay;
import me.kawaiizenbo.moonlight.ui.hud.HUDRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.render.RenderTickCounter;
@Mixin(InGameHud.class)
public class InGameHudMixin {
@Shadow private int scaledWidth;
@Shadow private int scaledHeight;
@Inject(at = @At("TAIL"), method = "render")
public void onRender (DrawContext drawContext, float tickDelta, CallbackInfo info)
public void onRender (DrawContext drawContext, RenderTickCounter tickCounter, CallbackInfo info)
{
if (ModuleManager.INSTANCE.getModuleByName("HUD").enabled) HUDOverlay.INSTANCE.render(drawContext, scaledWidth, scaledHeight);
if (ModuleManager.INSTANCE.getModuleByName("ModulesList").enabled) ModulesListOverlay.INSTANCE.render(drawContext, scaledWidth, scaledHeight);
HUDEnabler hudModule = (HUDEnabler)ModuleManager.INSTANCE.getModuleByName("HUD");
if (hudModule.enabled)
{
if (hudModule.mode.index == 1) LegacyHUD.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
else HUDRenderer.INSTANCE.render(drawContext);
}
if (ModuleManager.INSTANCE.getModuleByName("ModulesList").enabled) ModulesListOverlay.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
}
}

View file

@ -25,7 +25,7 @@ public abstract class KeyboardMixin
if (key == GLFW.GLFW_KEY_RIGHT_ALT) MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE);
for (Module m : ModuleManager.INSTANCE.modules)
{
if (key == m.keybind.value && action == GLFW.GLFW_PRESS)
if (key == m.keybind.value && action == GLFW.GLFW_PRESS && MinecraftClient.getInstance().currentScreen == null)
{
m.toggle();
}

View file

@ -0,0 +1,21 @@
package me.kawaiizenbo.moonlight.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import net.minecraft.block.PowderSnowBlock;
import net.minecraft.entity.Entity;
@Mixin(PowderSnowBlock.class)
public class PowderSnowBlockMixin
{
@Inject(at = @At("HEAD"), method = "canWalkOnPowderSnow", cancellable = true)
private static void canWalkOnPowderSnow(Entity entity, CallbackInfoReturnable<Boolean> cir)
{
if (ModuleManager.INSTANCE.getModuleByName("Anti Powder Snow").enabled) cir.setReturnValue(true);
}
}

View file

@ -7,7 +7,8 @@ public enum Category
RENDER("Render", 0xFF5555FF),
WORLD("World", 0xFF55FF55),
PLAYER("Player", 0xFF00AAAA),
CHAT("Chat", 0xFFFFAA00);
CHAT("Chat", 0xFFFFAA00),
SPECIAL("Special", 0xFFFFFFFF);
public String name;
public int color;

View file

@ -18,6 +18,7 @@ public abstract class Module
public Category category;
public boolean enabled;
public ArrayList<Setting> settings;
public boolean showEditButton;
public BooleanSetting showInModulesList = new BooleanSetting("Show in Modules List", true);
public KeycodeSetting keybind = new KeycodeSetting("Keybind", 0);

View file

@ -14,7 +14,7 @@ public class ModuleManager
registerModules(
new Fly(),
new NoFall(),
new HUDModule(),
new HUDEnabler(),
new Step(),
new Fullbright(),
new Speed(),
@ -22,7 +22,11 @@ public class ModuleManager
new ChatSpammer(),
new Rotation(),
new AutoJump(),
new Timer()
new Reach(),
new AntiPowderSnow(),
new AutoTotem(),
new AutoWalk()
/*new Timer()*/
);
}

View file

@ -0,0 +1,12 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
public class AntiPowderSnow extends Module
{
public AntiPowderSnow()
{
super("Anti Powder Snow", "Allows the player to walk on powder snow.", Category.PLAYER);
}
}

View file

@ -0,0 +1,36 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import net.minecraft.item.Items;
import net.minecraft.screen.slot.SlotActionType;
public class AutoTotem extends Module
{
public BooleanSetting overrideItems = new BooleanSetting("Override other items", false);
public AutoTotem()
{
super("Auto Totem", "Automatically puts totems in offhand.", Category.COMBAT);
settings.add(overrideItems);
}
@Override
public void tick()
{
if (mc.player.getInventory().offHand.get(0).getItem() != Items.TOTEM_OF_UNDYING)
{
if((!mc.player.getInventory().offHand.isEmpty()) && !overrideItems.value) return;
for (int i = 0; i <= 35; i++)
{
if (mc.player.getInventory().getStack(i).getItem() == Items.TOTEM_OF_UNDYING)
{
mc.interactionManager.clickSlot(0, i, 8, SlotActionType.SWAP, mc.player);
mc.interactionManager.clickSlot(0, 45, 8, SlotActionType.SWAP, mc.player);
mc.interactionManager.clickSlot(0, i, 8, SlotActionType.SWAP, mc.player);
}
}
}
}
}

View file

@ -0,0 +1,26 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
public class AutoWalk extends Module
{
public AutoWalk()
{
super("Auto Walk", "Automatically moves forward.", Category.MOVEMENT);
}
@Override
public void tick()
{
mc.options.forwardKey.setPressed(true);
}
@Override
public void onDisable()
{
super.onDisable();
mc.options.forwardKey.setPressed(false);
}
}

View file

@ -11,7 +11,8 @@ public class Fullbright extends Module
super("Fullbright", "Allows you to see in the dark.", Category.RENDER);
}
@Override
@SuppressWarnings("unchecked")
@Override
public void onEnable()
{
super.onEnable();

View file

@ -0,0 +1,19 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
public class HUDEnabler extends Module
{
public IndexSetting mode = new IndexSetting("Mode", 0, "Modular", "Legacy");
public HUDEnabler()
{
super("HUD", "The Moonlight HUD.", Category.RENDER);
this.enabled = true;
this.showInModulesList.value = false;
this.showEditButton = true;
settings.add(mode);
}
}

View file

@ -1,51 +0,0 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.ui.HUDOverlay;
import me.kawaiizenbo.moonlight.util.ColorUtils;
public class HUDModule extends Module
{
public BooleanSetting clientTag = new BooleanSetting("Client Tag", true);
public DoubleSetting r = new DoubleSetting("Red", 0x55, 0, 255, 0);
public DoubleSetting g = new DoubleSetting("Green", 255, 0, 255, 0);
public DoubleSetting b = new DoubleSetting("Blue", 255, 0, 255, 0);
//public ColorSetting color = new ColorSetting("Color", 0x55FFFF, ReflectionUtils.tryGetMethod("updateHUD", getClass()));
public HUDModule()
{
super("HUD", "The Moonlight HUD. Toggle to update.", Category.RENDER);
this.enabled = true;
this.showInModulesList.value = false;
settings.add(clientTag);
settings.add(r);
settings.add(g);
settings.add(b);
//settings.add(color);
}
@Override
public void onEnable()
{
super.onEnable();
HUDOverlay.INSTANCE.showClientTag = clientTag.value;
Moonlight.uiColorA =
ColorUtils.rgbaToInt(
(int)r.value,
(int)g.value,
(int)b.value,
255
);
Moonlight.uiColor =
ColorUtils.rgbToInt(
(int)r.value,
(int)g.value,
(int)b.value
);
}
}

View file

@ -14,6 +14,6 @@ public class NoFall extends Module
@Override
public void tick()
{
if(mc.player.fallDistance >= 2.5) mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(true));
if(mc.player.fallDistance >= 2.5) mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(true, false));
}
}

View file

@ -0,0 +1,44 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import net.minecraft.entity.attribute.EntityAttributes;
public class Reach extends Module
{
DoubleSetting blockRange = new DoubleSetting("Block Range", 4.5, 1, 10, 1);
DoubleSetting entityRange = new DoubleSetting("Entity Range", 3.0, 1, 10, 1);
double oldBe = 4.5;
double oldEe = 3.0;
public Reach()
{
super("Reach", "Extends player interaction distance.", Category.MOVEMENT);
settings.add(blockRange);
settings.add(entityRange);
}
@Override
public void onEnable()
{
super.onEnable();
oldBe = mc.player.getAttributeInstance(EntityAttributes.BLOCK_INTERACTION_RANGE).getBaseValue();
oldEe = mc.player.getAttributeInstance(EntityAttributes.ENTITY_INTERACTION_RANGE).getBaseValue();
}
@Override
public void tick()
{
mc.player.getAttributeInstance(EntityAttributes.BLOCK_INTERACTION_RANGE).setBaseValue(blockRange.value);
mc.player.getAttributeInstance(EntityAttributes.ENTITY_INTERACTION_RANGE).setBaseValue(entityRange.value);
}
@Override
public void onDisable()
{
super.onDisable();
mc.player.getAttributeInstance(EntityAttributes.BLOCK_INTERACTION_RANGE).setBaseValue(oldBe);
mc.player.getAttributeInstance(EntityAttributes.ENTITY_INTERACTION_RANGE).setBaseValue(oldEe);
}
}

View file

@ -3,13 +3,13 @@ package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.util.MathUtils;
import net.minecraft.entity.MovementType;
import net.minecraft.util.math.Vec3d;
import net.minecraft.entity.attribute.EntityAttributes;
public class Speed extends Module
{
DoubleSetting speed = new DoubleSetting("Speed", 2, 0.1, 10, 1);
double old = 0.1;
DoubleSetting speed = new DoubleSetting("Speed", 1.4, 0.1, 10, 1);
public Speed()
{
super("Speed", "Allows you to move faster.", Category.MOVEMENT);
@ -17,24 +17,23 @@ public class Speed extends Module
}
@Override
public void onMotion(MovementType type, Vec3d movement)
public void onEnable()
{
// this is a little janky but it works, will find a better solution later
if (mc.player.forwardSpeed == 0 && mc.player.sidewaysSpeed == 0 && mc.player.isOnGround())
{
mc.player.setVelocity(0, 0, 0);
}
Vec3d move = new Vec3d(mc.player.getX() - mc.player.prevX, 0, mc.player.getZ() - mc.player.prevZ).multiply(20);
double mps = Math.abs(MathUtils.length2D(move));
double normal = mc.player.isSprinting() ? 5.61 : 4.31;
if (mps > normal * speed.value)
{
return;
}
if (mc.player.isOnGround())
{
mc.player.setVelocity(mc.player.getVelocity().x * speed.value, 0, mc.player.getVelocity().z * speed.value);
}
super.onEnable();
old = mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).getBaseValue();
}
@Override
public void tick()
{
mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).setBaseValue(speed.value/10d);
}
@Override
public void onDisable()
{
super.onDisable();
mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).setBaseValue(old);
}
}

View file

@ -3,10 +3,12 @@ package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import net.minecraft.entity.attribute.EntityAttributes;
public class Step extends Module
{
DoubleSetting stepHeight = new DoubleSetting("Height", 1, 1, 10, 0);
double old = 0.6;
public Step()
{
@ -14,16 +16,23 @@ public class Step extends Module
settings.add(stepHeight);
}
@Override
public void onEnable()
{
super.onEnable();
old = mc.player.getAttributeInstance(EntityAttributes.STEP_HEIGHT).getBaseValue();
}
@Override
public void tick()
{
mc.player.setStepHeight((float)stepHeight.value);
mc.player.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(stepHeight.value);
}
@Override
public void onDisable()
{
super.onDisable();
mc.player.setStepHeight(0.6f);
mc.player.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(old);
}
}

View file

@ -1,38 +0,0 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import net.minecraft.client.render.RenderTickCounter;
import me.kawaiizenbo.moonlight.module.Category;
public class Timer extends Module
{
public DoubleSetting speed = new DoubleSetting("Speed", 1.5, 0.1, 10, 1);
double current = speed.value;
public Timer()
{
super("Timer", "Changes the number of ticks per second", Category.WORLD);
settings.add(speed);
}
@Override
public void onEnable()
{
super.onEnable();
mc.renderTickCounter = new RenderTickCounter((float)(20.0*speed.value), 0L);
current = speed.value;
}
@Override
public void tick()
{
if (current != speed.value) onEnable();
}
@Override
public void onDisable()
{
super.onDisable();
mc.renderTickCounter = new RenderTickCounter(20.0f, 0L);
}
}

View file

@ -1,5 +1,6 @@
package me.kawaiizenbo.moonlight.module.settings;
import me.kawaiizenbo.moonlight.Moonlight;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text;
@ -18,10 +19,10 @@ public class BooleanSetting extends Setting
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
{
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
drawContext.fill(x+180, y+7, x+190, y+17, 0xFFFFFFFF);
drawContext.fill(x+181, y+8, x+189, y+16, 0xFF222222);
drawContext.fill(x+182, y+9, x+188, y+15, value ? 0xFF55FFFF : 0xFF222222);
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
drawContext.fill(x+180, y+7, x+190, y+17, Moonlight.THEME.border.getRGB());
drawContext.fill(x+181, y+8, x+189, y+16, Moonlight.THEME.background.getRGB());
drawContext.fill(x+182, y+9, x+188, y+15, value ? Moonlight.THEME.accent.getRGB() : Moonlight.THEME.background.getRGB());
}
@Override

View file

@ -1,5 +1,6 @@
package me.kawaiizenbo.moonlight.module.settings;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.util.MathUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@ -26,7 +27,7 @@ public class DoubleSetting extends Setting
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
{
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+4, 0xFFFFFF);
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+4, Moonlight.THEME.text.getRGB(), false);
double diff = Math.min(100, Math.max(0, (mouseX - x)/1.9));
if (sliding)
@ -43,11 +44,11 @@ public class DoubleSetting extends Setting
}
String valueString = ""+MathUtils.round(value, roundingPlace);
drawContext.drawTextWithShadow(textRenderer, Text.literal(valueString), (x+190)-textRenderer.getWidth(valueString), y+4, 0xFFFFFF);
drawContext.fill(x+2, y+16, x+190, y+18, 0xFF666666);
drawContext.drawText(textRenderer, Text.literal(valueString), (x+190)-textRenderer.getWidth(valueString), y+4, Moonlight.THEME.text.getRGB(), false);
drawContext.fill(x+2, y+16, x+190, y+18, 0xFF777777);
int scaledValue = (int)((value/max)*190);
drawContext.fill(x+2, y+16, (x+2)+scaledValue, y+18, 0xFF55FFFF);
drawContext.fill(x+2+(scaledValue-1), y+14, x+2+(scaledValue+1), y+20, 0xFFFFFFFF);
drawContext.fill(x+2, y+16, (x+2)+scaledValue, y+18, Moonlight.THEME.accent.getRGB());
drawContext.fill(x+2+(scaledValue-1), y+14, x+2+(scaledValue+1), y+20, Moonlight.THEME.border.getRGB());
}
@Override

View file

@ -0,0 +1,42 @@
package me.kawaiizenbo.moonlight.module.settings;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.util.DrawUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.text.Text;
public class IndexSetting extends Setting
{
public int index;
public String[] elements;
public IndexSetting(String name, int index, String... elements)
{
this.name = name;
this.index = index;
this.elements = elements;
}
@Override
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
{
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
drawContext.fill(x+96, y+5, x+190, y+19, Moonlight.THEME.border.getRGB());
drawContext.fill(x+97, y+6, x+189, y+18, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
drawContext.drawText(textRenderer, elements[index], x+98, y+8, Moonlight.THEME.text.getRGB(), false);
drawContext.drawGuiTexture(RenderLayer::getGuiTextured, DrawUtils.getThemedGUIIcon("updown", Moonlight.THEME.background), x+177, y+6, 12, 12);
}
@Override
public void mouseClicked(double mouseX, double mouseY, int button)
{
if (hovered((int)mouseX, (int)mouseY) && button == 0)
{
if (index >= elements.length-1) index = 0;
else index++;
}
}
}

View file

@ -2,6 +2,7 @@ package me.kawaiizenbo.moonlight.module.settings;
import org.lwjgl.glfw.GLFW;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.util.KeycodeUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@ -36,19 +37,19 @@ public class KeycodeSetting extends Setting
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
{
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
if (isWaiting)
{
String waiting = "Press any key.";
int twwidth = textRenderer.getWidth(waiting);
drawContext.drawTextWithShadow(textRenderer, waiting, x+190-twwidth, y+8, 0xFFFFFF);
drawContext.drawText(textRenderer, waiting, x+190-twwidth, y+8, Moonlight.THEME.text.getRGB(), false);
}
else
{
String key = KeycodeUtils.keyTable[value];
if (value == GLFW.GLFW_KEY_UNKNOWN) key = "";
int twidth = textRenderer.getWidth(key);
drawContext.drawTextWithShadow(textRenderer, key, x+190-twidth, y+8, 0xFFFFFF);
drawContext.drawText(textRenderer, key, x+190-twidth, y+8, Moonlight.THEME.text.getRGB(), false);
}
}

View file

@ -1,5 +1,6 @@
package me.kawaiizenbo.moonlight.module.settings;
import me.kawaiizenbo.moonlight.Moonlight;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@ -12,7 +13,7 @@ public class Setting
{
this.x = x;
this.y = y;
drawContext.fill(x, y, x+192, y+24, hovered(mouseX, mouseY) ? 0xFF444444: 0xFF222222);
drawContext.fill(x, y, x+192, y+24, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB(): Moonlight.THEME.background.getRGB());
}

View file

@ -1,5 +1,6 @@
package me.kawaiizenbo.moonlight.module.settings;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.util.KeycodeUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@ -20,13 +21,13 @@ public class StringSetting extends Setting
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
{
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
int twidth = textRenderer.getWidth(value);
drawContext.fill(x+96, y+5, x+190, y+19, 0xFFFFFFFF);
drawContext.fill(x+97, y+6, x+189, y+18, 0xFF222222);
drawContext.fill(x+96, y+5, x+190, y+19, Moonlight.THEME.border.getRGB());
drawContext.fill(x+97, y+6, x+189, y+18, Moonlight.THEME.background.getRGB());
int cursorPos = x+98+twidth;
if (focused) drawContext.fill(cursorPos, y+7, cursorPos+1, y+17, 0xFF55FFFF);
drawContext.drawTextWithShadow(textRenderer, value, x+98, y+8, 0xFFFFFF);
if (focused) drawContext.fill(cursorPos, y+7, cursorPos+1, y+17, Moonlight.THEME.accent.getRGB());
drawContext.drawText(textRenderer, value, x+98, y+8, Moonlight.THEME.text.getRGB(), false);
}
@Override

View file

@ -0,0 +1,81 @@
package me.kawaiizenbo.moonlight.theme;
public class Theme
{
public static final Theme LIGHT = new Theme(
"Light",
new ThemeColor(0x222222),
new ThemeColor(0xFFFFFF),
new ThemeColor(0xFFFFFF),
new ThemeColor(0xDDDDDD),
new ThemeColor(0x00AAAA),
new ThemeColor(0x55FFFF),
new ThemeColor(0x222222),
false,
false
);
public static final Theme HIGHCONTRAST = new Theme(
"High Contrast",
new ThemeColor(0x000000),
new ThemeColor(0xFFFFFF),
new ThemeColor(0xFFFFFF),
new ThemeColor(0x777777),
new ThemeColor(0x00AAAA),
new ThemeColor(0xFFFFFF),
new ThemeColor(0x000000),
false,
true
);
public static final Theme DARK = new Theme(
"Dark",
new ThemeColor(0xFFFFFF),
new ThemeColor(0xFFFFFF),
new ThemeColor(0x222222),
new ThemeColor(0x333333),
new ThemeColor(0x55FFFF),
new ThemeColor(0x55FFFF),
new ThemeColor(0xFFFFFF),
false,
false
);
public static final Theme[] THEME_LIST =
{
LIGHT, HIGHCONTRAST, DARK
};
public String name;
public ThemeColor text;
public ThemeColor headerText;
public ThemeColor background;
public ThemeColor hover;
public ThemeColor accent;
public ThemeColor hudAccent;
public ThemeColor border;
public boolean useDarkIcons;
public boolean themedWindowBorders;
public Theme(
String name,
ThemeColor text,
ThemeColor headerText,
ThemeColor background,
ThemeColor hover,
ThemeColor accent,
ThemeColor hudAccent,
ThemeColor border,
boolean useDarkIcons,
boolean themedWindowBorders
)
{
this.name = name;
this.text = text;
this.headerText = headerText;
this.background = background;
this.hover = hover;
this.accent = accent;
this.hudAccent = hudAccent;
this.border = border;
this.useDarkIcons = useDarkIcons;
this.themedWindowBorders = themedWindowBorders;
}
}

View file

@ -0,0 +1,32 @@
package me.kawaiizenbo.moonlight.theme;
public class ThemeColor
{
public int r, g, b;
public ThemeColor(int r, int g, int b)
{
this.r = r;
this.g = g;
this.b = b;
}
public ThemeColor(int RGBcolor)
{
this.r = (RGBcolor&0x00FF0000)>>16;
this.g = (RGBcolor&0x0000FF00)>>8;
this.b = (RGBcolor&0x000000FF)>>0;
}
public int getRGB()
{
return ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
}
public void setRGB(int RGBcolor)
{
this.r = RGBcolor&0x00FF0000;
this.g = RGBcolor&0x0000FF00;
this.b = RGBcolor&0x000000FF;
}
}

View file

@ -1,55 +0,0 @@
package me.kawaiizenbo.moonlight.ui;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.modules.HUDModule;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import me.kawaiizenbo.moonlight.util.MathUtils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.math.Vec3d;
public class HUDOverlay
{
public static HUDOverlay INSTANCE = new HUDOverlay();
private MinecraftClient mc = MinecraftClient.getInstance();
public boolean showClientTag = ((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).clientTag.value;
public int hudColor = ColorUtils.rgbaToInt(
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).r.value,
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).g.value,
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).b.value,
255 );
public void render(DrawContext drawContext, int scaledWidth, int scaledHeight)
{
// do not draw if F3 enabled
if (mc.getDebugHud().shouldShowDebugHud()) return;
// draw stats
drawContext.drawTextWithShadow(mc.textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 2, Moonlight.uiColorA);
drawContext.drawTextWithShadow(mc.textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 12, Moonlight.uiColorA);
drawContext.drawTextWithShadow(mc.textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, Moonlight.uiColorA);
// draw coordinates
drawContext.drawTextWithShadow(mc.textRenderer,
"X: " + ColorUtils.gray + MathUtils.round(mc.player.getX(), 1) + ColorUtils.reset +
" Y: " + ColorUtils.gray + MathUtils.round(mc.player.getY(), 1) + ColorUtils.reset +
" Z: " + ColorUtils.gray + MathUtils.round(mc.player.getZ(), 1), 2, scaledHeight - 10, Moonlight.uiColorA
);
// draw client tag (if enabled)
if (showClientTag)
{
drawContext.drawTextWithShadow(mc.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag,
scaledWidth - mc.textRenderer.getWidth(Moonlight.clientTag + " " + Moonlight.versionTag) - 2, scaledHeight - 10, 16777215);
}
}
private double moveSpeed()
{
Vec3d move = new Vec3d(mc.player.getX() - mc.player.prevX, 0, mc.player.getZ() - mc.player.prevZ).multiply(20);
return Math.abs(MathUtils.length2D(move)) ;
}
}

View file

@ -0,0 +1,45 @@
package me.kawaiizenbo.moonlight.ui;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import me.kawaiizenbo.moonlight.util.MathUtils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.math.Vec3d;
public class LegacyHUD
{
// This is deprecated and will be removed in a later version
public static LegacyHUD INSTANCE = new LegacyHUD();
private MinecraftClient mc = MinecraftClient.getInstance();
public void render(DrawContext drawContext, int scaledWidth, int scaledHeight)
{
// do not draw if F3 enabled
if (mc.getDebugHud().shouldShowDebugHud()) return;
// draw stats
drawContext.drawTextWithShadow(mc.textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 2, 0xFF55FFFF);
drawContext.drawTextWithShadow(mc.textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 12, 0xFF55FFFF);
drawContext.drawTextWithShadow(mc.textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, 0xFF55FFFF);
// draw coordinates
drawContext.drawTextWithShadow(mc.textRenderer,
"X: " + ColorUtils.gray + String.format("%.1f", mc.player.getX()) + ColorUtils.reset +
" Y: " + ColorUtils.gray + String.format("%.1f", mc.player.getY()) + ColorUtils.reset +
" Z: " + ColorUtils.gray + String.format("%.1f", mc.player.getZ()), 2, scaledHeight - 10, 0xFF55FFFF
);
// draw client tag
drawContext.drawTextWithShadow(mc.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag,
scaledWidth - mc.textRenderer.getWidth(Moonlight.clientTag + " " + Moonlight.versionTag) - 2, scaledHeight - 10, 16777215);
}
private double moveSpeed()
{
Vec3d move = new Vec3d(mc.player.getX() - mc.player.prevX, 0, mc.player.getZ() - mc.player.prevZ).multiply(20);
return Math.abs(MathUtils.length2D(move)) ;
}
}

View file

@ -2,7 +2,6 @@ package me.kawaiizenbo.moonlight.ui;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import net.minecraft.client.MinecraftClient;
@ -11,6 +10,8 @@ import net.minecraft.client.gui.DrawContext;
public class ModulesListOverlay
{
// this will be replaced with a new hud version at some point
public static ModulesListOverlay INSTANCE = new ModulesListOverlay();
private MinecraftClient mc = MinecraftClient.getInstance();
private ArrayList<Module> enabledModules = ModuleManager.INSTANCE.getEnabledModules();
@ -26,7 +27,7 @@ public class ModulesListOverlay
if (!m.showInModulesList.value) continue;
int nameWidth = mc.textRenderer.getWidth(m.name);
drawContext.fill(scaledWidth - nameWidth - 8, yOffset, scaledWidth, yOffset+12, 0x77222222);
drawContext.fill(scaledWidth - 2, yOffset, scaledWidth, yOffset+12, Moonlight.uiColorA);
drawContext.fill(scaledWidth - 2, yOffset, scaledWidth, yOffset+12, 0xFF55FFFF);
drawContext.drawText(mc.textRenderer, m.name, scaledWidth - nameWidth - 4, yOffset + 2, 0xFFFFFFFF, false);
yOffset += 12;
}

View file

@ -1,29 +1,33 @@
package me.kawaiizenbo.moonlight.ui;
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
import me.kawaiizenbo.moonlight.Moonlight;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;
public class TextButton
public class SetScreenButton
{
String text;
int x, y, color, width;
Screen screen;
int x, y, width;
public TextButton(String text, int x, int y, int color)
public SetScreenButton(String text, int x, int y, Screen screen)
{
this.text = text;
this.x = x;
this.y = y;
this.color = color;
this.screen = screen;
}
public void render(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY)
public void render(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY, int x, int y)
{
this.x = x;
this.y = y;
width = textRenderer.getWidth(text);
drawContext.fill(x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0x55FFFFFF : 0);
drawContext.drawText(textRenderer, Text.literal(text), x, y, color, true);
drawContext.fill(x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0x22222222 : 0);
drawContext.drawText(textRenderer, Text.literal(text), x, y, Moonlight.THEME.headerText.getRGB(), false);
}
public boolean hovered(int mouseX, int mouseY)
@ -35,8 +39,7 @@ public class TextButton
{
if (hovered(mouseX, mouseY))
{
// i have no clue how to pass a method so this is kind of stupid
MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE);
MinecraftClient.getInstance().setScreen(screen);
}
}
}

View file

@ -2,11 +2,15 @@ package me.kawaiizenbo.moonlight.ui.clickgui;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.util.DrawUtils;
import me.kawaiizenbo.moonlight.module.Module;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
public class CategoryPane
{
@ -16,6 +20,7 @@ public class CategoryPane
boolean dragging = false;
public boolean collapsed = false;
ArrayList<ModuleButton> moduleButtons;
Identifier icon;
public CategoryPane(Category category, int initialX, int initialY, boolean collapsed)
{
@ -24,6 +29,7 @@ public class CategoryPane
this.y = initialY;
this.collapsed = collapsed;
moduleButtons = new ArrayList<ModuleButton>();
icon = DrawUtils.getThemedGUIIcon(category.name.toLowerCase());
for (Module m : ModuleManager.INSTANCE.getModulesByCategory(category))
{
moduleButtons.add(new ModuleButton(m));
@ -39,9 +45,10 @@ public class CategoryPane
x = mouseX - startX;
y = mouseY - startY;
}
drawContext.fill(x, y, x+width, collapsed ? y+16 : y+height, category.color);
drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
drawContext.drawText(textRenderer, category.name, x+4, y+4, 0xFFFFFFFF, false);
drawContext.fill(x, y, x+width, collapsed ? y+16 : y+height, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : category.color);
//drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
drawContext.drawGuiTexture(RenderLayer::getGuiTextured, icon, x+2, y+2, 12, 12);
drawContext.drawText(textRenderer, category.name, x+16, y+4, Moonlight.THEME.headerText.getRGB(), false);
if (!collapsed)
{
int buttonYOffset = y+16;

View file

@ -5,6 +5,7 @@ import java.util.Map;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.theme.Theme;
import me.kawaiizenbo.moonlight.util.MathUtils;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
@ -15,6 +16,7 @@ public class ClickGUIScreen extends Screen
public static ClickGUIScreen INSTANCE = new ClickGUIScreen();
public ArrayList<CategoryPane> categoryPanes;
@SuppressWarnings("unchecked")
public ClickGUIScreen()
{
super(Text.literal("ClickGUI"));
@ -22,6 +24,7 @@ public class ClickGUIScreen extends Screen
Map<String, Object> panePos = ((Map<String, Object>)Moonlight.CONFIG.config.get("panes"));
for (Category category : Category.values())
{
if(category.name == "Special") continue;
int xOffset = MathUtils.d2iSafe(((Map<String, Object>)panePos.get(category.name)).get("x"));
int yOffset = MathUtils.d2iSafe(((Map<String, Object>)panePos.get(category.name)).get("y"));
boolean collapsed = (boolean)((Map<String, Object>)panePos.get(category.name)).get("collapsed");
@ -33,6 +36,9 @@ public class ClickGUIScreen extends Screen
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
{
this.renderBackground(drawContext, mouseX, mouseY, delta);
drawContext.fill(width-80, height-16, width, height, Moonlight.THEME.border.getRGB());
drawContext.fill(width-78, height-14, width-2, height-2, (mouseX > width-80 && mouseY > height-16) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
drawContext.drawText(textRenderer, "Change Theme", width-75, height-12, Moonlight.THEME.text.getRGB(), false);
for (CategoryPane category : categoryPanes)
{
category.render(drawContext, mouseX, mouseY, delta, textRenderer);
@ -46,6 +52,12 @@ public class ClickGUIScreen extends Screen
{
category.mouseClicked((int) mouseX, (int) mouseY, button);
}
if (mouseX > width-80 && mouseY > height-16)
{
if (Moonlight.THEME_IDX >= Theme.THEME_LIST.length-1) Moonlight.THEME_IDX = 0;
else Moonlight.THEME_IDX++;
Moonlight.THEME = Theme.THEME_LIST[Moonlight.THEME_IDX];
}
return super.mouseClicked(mouseX, mouseY, button);
}

View file

@ -22,8 +22,8 @@ public class ModuleButton
{
this.x = x;
this.y = y;
drawContext.fill(x, y, x + width, y + height, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.uiColor : 0xFFFFFF, false);
drawContext.fill(x, y, x + width, y + height, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.THEME.accent.getRGB() : Moonlight.THEME.text.getRGB(), false);
}
public boolean hovered(int mouseX, int mouseY)

View file

@ -1,8 +1,10 @@
package me.kawaiizenbo.moonlight.ui.clickgui;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.ui.TextButton;
import me.kawaiizenbo.moonlight.ui.SetScreenButton;
import me.kawaiizenbo.moonlight.ui.hud.editor.HUDEditorScreen;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
@ -11,7 +13,8 @@ import net.minecraft.text.Text;
public class SettingsScreen extends Screen
{
private Module module;
private TextButton backButton;
private SetScreenButton backButton;
private SetScreenButton editButton;
boolean dragging = false;
int startX, startY, x = (ClickGUIScreen.INSTANCE.width/2)-112, y = (ClickGUIScreen.INSTANCE.height/2)-96, windowWidth = 224, windowHeight = 192;
@ -19,6 +22,8 @@ public class SettingsScreen extends Screen
public SettingsScreen(Module module)
{
super(Text.literal("Settings"));
backButton = new SetScreenButton(ColorUtils.underline + "< Back", x+4, y+4, ClickGUIScreen.INSTANCE);
editButton = new SetScreenButton(ColorUtils.underline + "Edit", x+windowWidth-22, y+4, HUDEditorScreen.INSTANCE);
this.module = module;
}
@ -33,13 +38,14 @@ public class SettingsScreen extends Screen
x = mouseX - startX;
y = mouseY - startY;
}
drawContext.fill(x, y, x+windowWidth, y+windowHeight, 0xFF222222);
drawContext.fill(x, y, x+windowWidth, y+16, module.category.color);
drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, 0xFF222222);
drawContext.drawCenteredTextWithShadow(textRenderer, module.name, x+(windowWidth/2), y+4, 0xFFFFFF);
drawContext.drawText(textRenderer, module.description, x+8, y+24, 0xFFFFFF, true);
backButton = new TextButton(ColorUtils.underline + "< Back", x+4, y+4, 0xFFFFFF);
backButton.render(drawContext, textRenderer, mouseX, mouseY);
drawContext.fill(x, y, x+windowWidth, y+windowHeight, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : module.category.color);
drawContext.fill(x+2, y+2, x+windowWidth-2, y+windowHeight-2, Moonlight.THEME.background.getRGB());
drawContext.fill(x, y, x+windowWidth, y+16, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : module.category.color);
//drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, Moonlight.THEME.background.getRGB());
drawContext.drawText(textRenderer, module.name, x+((windowWidth/2)-(textRenderer.getWidth(module.name)/2)), y+4, Moonlight.THEME.headerText.getRGB(), false);
drawContext.drawText(textRenderer, module.description, x+8, y+24, Moonlight.THEME.text.getRGB(), false);
backButton.render(drawContext, textRenderer, mouseX, mouseY, x+4, y+4);
if (module.showEditButton) editButton.render(drawContext, textRenderer, mouseX, mouseY, x+windowWidth-22, y+4);
int yOffset = y+40;
for (Setting setting : module.settings)
{
@ -69,6 +75,7 @@ public class SettingsScreen extends Screen
dragging = true;
}
backButton.mouseClicked((int)mouseX, (int)mouseY);
editButton.mouseClicked((int)mouseX, (int)mouseY);
for (Setting setting : module.settings)
{
setting.mouseClicked(mouseX, mouseY, button);

View file

@ -0,0 +1,68 @@
package me.kawaiizenbo.moonlight.ui.hud;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
public abstract class HUDModule
{
public int x, y, height, width;
public String name;
int startX, startY;
boolean dragging = false;
public boolean enabled = false;
public ArrayList<Setting> settings;
protected static MinecraftClient mc = MinecraftClient.getInstance();
public HUDModule(String name, int x, int y)
{
this.name = name;
this.x = x;
this.y = y;
settings = new ArrayList<>();
}
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
if (editMode)
{
if (dragging)
{
x = mouseX - startX;
y = mouseY - startY;
}
drawContext.fill(x-1, y-1, x+width+1, y+height+1, enabled ? Moonlight.THEME.accent.getRGB() : 0xFF555555);
drawContext.fill(x, y, x+width, y+height, 0xFF222222);
}
}
public boolean hovered(int mouseX, int mouseY)
{
return mouseX >= x && mouseX <= x+width && mouseY >= y && mouseY <= y+height;
}
public void mouseClicked(int mouseX, int mouseY, int button)
{
if (hovered(mouseX, mouseY) && button == 0)
{
startX = (int)mouseX-x;
startY = (int)mouseY-y;
dragging = true;
}
}
public void mouseReleased(int mouseX, int mouseY, int button)
{
dragging = false;
}
public void toggle()
{
enabled = !enabled;
}
}

View file

@ -0,0 +1,56 @@
package me.kawaiizenbo.moonlight.ui.hud;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.ui.hud.modules.*;
public class HUDModuleManager
{
public static HUDModuleManager INSTANCE = new HUDModuleManager();
public ArrayList<HUDModule> modules = new ArrayList<>();
public HUDModuleManager()
{
registerModules(
new ClientTag(2, 2),
new FPS(2, 12),
new Ping(2, 22),
new MovementSpeed(2, 32),
new Coordinates(2, 42),
new ArmorDisplay(2, 52),
new TotemCounter(20, 52)
//new TestModuleHUD(20, 50)
);
}
private void registerModules(HUDModule... modules)
{
for (HUDModule module : modules) {
this.modules.add(module);
}
}
public HUDModule getModuleByName(String moduleName)
{
for(HUDModule module : modules)
{
if ((module.name.trim().equalsIgnoreCase(moduleName)))
{
return module;
}
}
return null;
}
public ArrayList<HUDModule> getEnabledModules()
{
ArrayList<HUDModule> enabledModules = new ArrayList<>();
for (HUDModule module : modules)
{
if (!module.enabled)
continue;
enabledModules.add(module);
}
return enabledModules;
}
}

View file

@ -0,0 +1,22 @@
package me.kawaiizenbo.moonlight.ui.hud;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
public class HUDRenderer
{
public static HUDRenderer INSTANCE = new HUDRenderer();
private MinecraftClient mc = MinecraftClient.getInstance();
public void render(DrawContext drawContext)
{
// do not draw if F3 enabled
if (mc.getDebugHud().shouldShowDebugHud()) return;
for (HUDModule h : HUDModuleManager.INSTANCE.getEnabledModules())
{
// mouse coords are not needed when not in edit mode
h.render(drawContext, 0, 0, mc.textRenderer, false, true);
}
}
}

View file

@ -0,0 +1,58 @@
package me.kawaiizenbo.moonlight.ui.hud.editor;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;
public class HUDEditorScreen extends Screen
{
public static HUDEditorScreen INSTANCE = new HUDEditorScreen();
HUDModuleList moduleList;
public HUDEditorScreen()
{
super(Text.literal("HUD Editor"));
moduleList = new HUDModuleList(256, 2, false);
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
{
this.renderBackground(drawContext, mouseX, mouseY, delta);
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
{
h.render(drawContext, mouseX, mouseY, textRenderer, true, h.enabled);
}
moduleList.render(drawContext, mouseX, mouseY, delta, textRenderer);
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button)
{
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
{
h.mouseClicked((int)mouseX, (int)mouseY, button);
}
moduleList.mouseClicked((int)mouseX, (int)mouseY, button);
return super.mouseClicked(mouseX, mouseY, button);
}
@Override
public boolean mouseReleased(double mouseX, double mouseY, int button)
{
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
{
h.mouseReleased((int)mouseX, (int)mouseY, button);
}
moduleList.mouseReleased((int)mouseX, (int)mouseY, button);
return super.mouseReleased(mouseX, mouseY, button);
}
@Override
public boolean shouldPause()
{
return false;
}
}

View file

@ -0,0 +1,53 @@
package me.kawaiizenbo.moonlight.ui.hud.editor;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
public class HUDModuleButton
{
public HUDModule module;
public int x, y, width, height = 0;
public HUDModuleButton(HUDModule module)
{
this.module = module;
this.width = 124;
this.height = 12;
}
public void render(DrawContext drawContext, int mouseX, int mouseY, int x, int y, TextRenderer textRenderer)
{
this.x = x;
this.y = y;
drawContext.fill(x, y, x + width, y + height, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.THEME.accent.getRGB() : Moonlight.THEME.text.getRGB(), false);
if (!module.settings.isEmpty()) drawContext.drawGuiTexture(RenderLayer::getGuiTextured, Identifier.of("moonlight", "settings"), x+width-12, y, 12, 12);
}
public boolean hovered(int mouseX, int mouseY)
{
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height;
}
public boolean mouseClicked(int mouseX, int mouseY, int button)
{
if (hovered(mouseX, mouseY))
{
if (button == 0)
{
module.toggle();
}
else if (button == 1)
{
if (!module.settings.isEmpty()) MinecraftClient.getInstance().setScreen(new HUDModuleSettingsScreen(module));
}
return true;
}
return false;
}
}

View file

@ -0,0 +1,82 @@
package me.kawaiizenbo.moonlight.ui.hud.editor;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
import me.kawaiizenbo.moonlight.util.DrawUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
public class HUDModuleList
{
public int x, y, height, width = 128;
int startX, startY;
boolean dragging = false;
public boolean collapsed = false;
ArrayList<HUDModuleButton> buttons;
public HUDModuleList(int initialX, int initialY, boolean collapsed)
{
this.x = initialX;
this.y = initialY;
this.collapsed = collapsed;
buttons = new ArrayList<HUDModuleButton>();
for (HUDModule m : HUDModuleManager.INSTANCE.modules)
{
buttons.add(new HUDModuleButton(m));
}
if (buttons.size() == 0) collapsed = true;
height = (buttons.size()*12) + 18;
}
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta, TextRenderer textRenderer)
{
if (dragging)
{
x = mouseX - startX;
y = mouseY - startY;
}
drawContext.fill(x, y, x+width, collapsed ? y+16 : y+height, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : Moonlight.THEME.accent.getRGB());
//drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
drawContext.drawGuiTexture(RenderLayer::getGuiTextured, DrawUtils.getThemedGUIIcon("hud"), x+2, y+2, 12, 12);
drawContext.drawText(textRenderer, "HUD Modules", x+16, y+4, Moonlight.THEME.headerText.getRGB(), false);
if (!collapsed)
{
int buttonYOffset = y+16;
for (HUDModuleButton m : buttons)
{
m.render(drawContext, mouseX, mouseY, x+2, buttonYOffset, textRenderer);
buttonYOffset += 12;
}
}
}
public boolean hovered(int mouseX, int mouseY)
{
return mouseX >= x+2 && mouseX <= x+(width-2) && mouseY >= y+2 && mouseY <= y+14;
}
public void mouseClicked(int mouseX, int mouseY, int button)
{
for (HUDModuleButton moduleButton : buttons)
{
if (moduleButton.mouseClicked(mouseX, mouseY, button)) return;
}
if (hovered(mouseX, mouseY) && button == 1) collapsed = !collapsed;
else if (hovered(mouseX, mouseY) && button == 0)
{
startX = (int)mouseX-x;
startY = (int)mouseY-y;
dragging = true;
}
}
public void mouseReleased(int mouseX, int mouseY, int button)
{
dragging = false;
}
}

View file

@ -0,0 +1,101 @@
package me.kawaiizenbo.moonlight.ui.hud.editor;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.ui.SetScreenButton;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;
public class HUDModuleSettingsScreen extends Screen
{
// adapted for hud modules
private HUDModule module;
private SetScreenButton backButton;
boolean dragging = false;
int startX, startY, x = (HUDEditorScreen.INSTANCE.width/2)-112, y = (HUDEditorScreen.INSTANCE.height/2)-96, windowWidth = 224, windowHeight = 192;
public HUDModuleSettingsScreen(HUDModule module)
{
super(Text.literal("Settings"));
backButton = new SetScreenButton(ColorUtils.underline + "< Back", x+4, y+4, HUDEditorScreen.INSTANCE);
this.module = module;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
{
this.renderBackground(drawContext, mouseX, mouseY, delta);
// move window if dragging
if (dragging)
{
x = mouseX - startX;
y = mouseY - startY;
}
drawContext.fill(x, y, x+windowWidth, y+windowHeight, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : Moonlight.THEME.accent.getRGB());
drawContext.fill(x+2, y+2, x+windowWidth-2, y+windowHeight-2, Moonlight.THEME.background.getRGB());
drawContext.fill(x, y, x+windowWidth, y+16, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : Moonlight.THEME.accent.getRGB());
//drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, Moonlight.THEME.background.getRGB());
drawContext.drawText(textRenderer, module.name, x+((windowWidth/2)-(textRenderer.getWidth(module.name)/2)), y+4, Moonlight.THEME.headerText.getRGB(), false);
backButton.render(drawContext, textRenderer, mouseX, mouseY, x+4, y+4);
int yOffset = y+24;
for (Setting setting : module.settings)
{
setting.render(drawContext, x+16, yOffset, mouseX, mouseY, textRenderer);
yOffset += 25;
}
}
public boolean barHovered(int mouseX, int mouseY)
{
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + 16;
}
@Override
public boolean shouldPause()
{
return false;
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button)
{
if (barHovered((int)mouseX, (int)mouseY))
{
startX = (int)mouseX-x;
startY = (int)mouseY-y;
dragging = true;
}
backButton.mouseClicked((int)mouseX, (int)mouseY);
for (Setting setting : module.settings)
{
setting.mouseClicked(mouseX, mouseY, button);
}
return super.mouseClicked(mouseX, mouseY, button);
}
@Override
public boolean mouseReleased(double mouseX, double mouseY, int button)
{
dragging = false;
for (Setting setting : module.settings)
{
setting.mouseReleased(mouseX, mouseY, button);
}
return super.mouseReleased(mouseX, mouseY, button);
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers)
{
for (Setting setting : module.settings)
{
setting.keyPressed(keyCode, scanCode, modifiers);
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
}

View file

@ -0,0 +1,31 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.item.ItemStack;
public class ArmorDisplay extends HUDModule
{
public ArmorDisplay(int x, int y)
{
super("Armor Display", x, y);
this.width = 16;
this.height = 64;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
int yOffset = 0;
for (int i = 39; i >= 36; i--)
{
ItemStack piece = mc.player.getInventory().getStack(i);
drawContext.drawItem(piece, x, y+yOffset);
drawContext.drawStackOverlay(textRenderer, piece, x, y+yOffset);
yOffset += 16;
}
}
}

View file

@ -0,0 +1,24 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
public class ClientTag extends HUDModule
{
public ClientTag(int x, int y)
{
super("Client Tag", x, y);
this.width = 128;
this.height = 8;
this.enabled = true;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
drawContext.drawTextWithShadow(mc.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag, x, y, 16777215);
}
}

View file

@ -0,0 +1,29 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
public class Coordinates extends HUDModule
{
public Coordinates(int x, int y)
{
super("Coordinates", x, y);
this.width = 128;
this.height = 8;
this.enabled = true;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
drawContext.drawTextWithShadow(mc.textRenderer,
"X: " + ColorUtils.gray + String.format("%.1f", mc.player.getX()) + ColorUtils.reset +
" Y: " + ColorUtils.gray + String.format("%.1f", mc.player.getY()) + ColorUtils.reset +
" Z: " + ColorUtils.gray + String.format("%.1f", mc.player.getZ()), x, y, Moonlight.THEME.hudAccent.getRGB()
);
}
}

View file

@ -0,0 +1,25 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
public class FPS extends HUDModule
{
public FPS(int x, int y)
{
super("FPS", x, y);
this.width = 48;
this.height = 8;
this.enabled = true;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
drawContext.drawTextWithShadow(mc.textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], x, y, Moonlight.THEME.hudAccent.getRGB());
}
}

View file

@ -0,0 +1,33 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import me.kawaiizenbo.moonlight.util.MathUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.math.Vec3d;
public class MovementSpeed extends HUDModule
{
public MovementSpeed(int x, int y)
{
super("Movement Speed", x, y);
this.width = 72;
this.height = 8;
this.enabled = true;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
drawContext.drawTextWithShadow(mc.textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), x, y, Moonlight.THEME.hudAccent.getRGB());
}
private double moveSpeed()
{
Vec3d move = new Vec3d(mc.player.getX() - mc.player.prevX, 0, mc.player.getZ() - mc.player.prevZ).multiply(20);
return Math.abs(MathUtils.length2D(move)) ;
}
}

View file

@ -0,0 +1,25 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.util.ColorUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
public class Ping extends HUDModule
{
public Ping(int x, int y)
{
super("Ping", x, y);
this.width = 48;
this.height = 8;
this.enabled = true;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
drawContext.drawTextWithShadow(mc.textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), x, y, Moonlight.THEME.hudAccent.getRGB());
}
}

View file

@ -0,0 +1,29 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
public class TestModuleHUD extends HUDModule
{
public StringSetting text = new StringSetting("Text", "hii :3");
public DoubleSetting number = new DoubleSetting("test", 1, 0, 10, 0);
public TestModuleHUD(int x, int y)
{
super("Test HUD Module", x, y);
this.width = 96;
this.height = 8;
settings.add(text);
settings.add(number);
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
drawContext.drawText(textRenderer, text.value, x, y, 0xFFFFFF, false);
}
}

View file

@ -0,0 +1,32 @@
package me.kawaiizenbo.moonlight.ui.hud.modules;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
public class TotemCounter extends HUDModule
{
public TotemCounter(int x, int y)
{
super("Totem Counter", x, y);
this.width = 24;
this.height = 16;
}
@Override
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
{
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
int count = 0;
for (int i = 0; i < 36; i++)
{
ItemStack stack = mc.player.getInventory().getStack(i);
if (stack.getItem() == Items.TOTEM_OF_UNDYING) count += stack.getCount();
}
drawContext.drawItem(Items.TOTEM_OF_UNDYING.getDefaultStack(), x, y);
drawContext.drawTextWithShadow(textRenderer, count+"", x+16, y+8, 16777215);
}
}

View file

@ -0,0 +1,21 @@
package me.kawaiizenbo.moonlight.util;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.theme.ThemeColor;
import net.minecraft.util.Identifier;
public class DrawUtils
{
public static Identifier getThemedGUIIcon(String textureName, ThemeColor invert)
{
boolean mode = ((invert.r + invert.g + invert.b) / 3) > 77;
String addition = mode ? "_light" : "";
return Identifier.of("moonlight", textureName+addition);
}
public static Identifier getThemedGUIIcon(String textureName)
{
String addition = Moonlight.THEME.useDarkIcons ? "_light" : "";
return Identifier.of("moonlight", textureName+addition);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

View file

Before

Width:  |  Height:  |  Size: 181 B

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 B

View file

@ -1,12 +1,12 @@
{
"schemaVersion": 1,
"id": "moonlight",
"version": "${version}",
"version": "v0.4.0",
"name": "Moonlight Meadows",
"description": "Utility mod with a focus on stability.",
"authors": [
"KawaiiZenbo",
"madeline1805",
"BadGamesInc (re-used Hypnotic Code)"
],
"contact": {
@ -29,9 +29,9 @@
],
"depends": {
"fabricloader": ">=0.14.21",
"fabricloader": ">=0.16.9",
"fabric-api": "*",
"minecraft": "~1.20",
"java": ">=17"
"minecraft": "~1.21.3",
"java": ">=21"
}
}

View file

@ -1,4 +1,2 @@
accessWidener v1 named
accessible method net/minecraft/client/gui/DrawContext fillGradient (IIIIIII)V
accessible field net/minecraft/client/MinecraftClient renderTickCounter Lnet/minecraft/client/render/RenderTickCounter;
mutable field net/minecraft/client/MinecraftClient renderTickCounter Lnet/minecraft/client/render/RenderTickCounter;

View file

@ -13,7 +13,8 @@
"KeyboardMixin",
"SimpleOptionMixin",
"MinecraftClientMixin",
"ClientPlayerEntityMixin"
"ClientPlayerEntityMixin",
"PowderSnowBlockMixin"
],
"injectors": {
"defaultRequire": 1