Compare commits

..

No commits in common. "main" and "v0.1.0" have entirely different histories.
main ... v0.1.0

96 changed files with 403 additions and 1416 deletions

View file

@ -1,3 +1,8 @@
# 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 name: build
on: [pull_request, push] on: [pull_request, push]
@ -5,11 +10,12 @@ jobs:
build: build:
strategy: strategy:
matrix: matrix:
# Use these Java versions
java: [ java: [
21, # java version used since 1.20.5 17, # Current Java LTS & minimum supported by Minecraft
] ]
# only linux # and run on both Linux and Windows
os: [ubuntu-latest] os: [ubuntu-22.04]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- name: checkout repository - name: checkout repository
@ -22,10 +28,12 @@ jobs:
java-version: ${{ matrix.java }} java-version: ${{ matrix.java }}
distribution: 'microsoft' distribution: 'microsoft'
- name: make gradle wrapper executable - name: make gradle wrapper executable
if: ${{ runner.os != 'Windows' }}
run: chmod +x ./gradlew run: chmod +x ./gradlew
- name: build - name: build
run: ./gradlew build run: ./gradlew build
- name: capture build artifacts - 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 uses: actions/upload-artifact@v3
with: with:
name: Artifacts name: Artifacts

View file

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

View file

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

View file

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

Binary file not shown.

View file

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

29
gradlew vendored
View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 KiB

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 KiB

After

Width:  |  Height:  |  Size: 555 KiB

View file

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

View file

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

View file

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

View file

@ -1,43 +0,0 @@
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

@ -14,19 +14,19 @@ public class Help extends Command
{ {
super("help", "Gives you a list of all of the commands"); super("help", "Gives you a list of all of the commands");
} }
@Override @Override
public void build(LiteralArgumentBuilder<CommandSource> builder) public void build(LiteralArgumentBuilder<CommandSource> builder)
{ {
builder.executes(context -> 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.aqua + "Command: " + ColorUtils.gray + cmd.getName());
ChatUtils.sendMsg(ColorUtils.gray + cmd.getDescription()); ChatUtils.sendMsg(ColorUtils.gray + cmd.getDescription());
ChatUtils.sendMsg(ColorUtils.gray + "");
} }
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
}); });
} }
} }

View file

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

View file

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

View file

@ -1,32 +1,28 @@
package me.kawaiizenbo.moonlight.mixin; package me.kawaiizenbo.moonlight.mixin;
import org.spongepowered.asm.mixin.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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import me.kawaiizenbo.moonlight.module.ModuleManager; import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.modules.HUDEnabler; import me.kawaiizenbo.moonlight.ui.HUDOverlay;
import me.kawaiizenbo.moonlight.ui.LegacyHUD;
import me.kawaiizenbo.moonlight.ui.ModulesListOverlay; import me.kawaiizenbo.moonlight.ui.ModulesListOverlay;
import me.kawaiizenbo.moonlight.ui.hud.HUDRenderer;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.render.RenderTickCounter;
@Mixin(InGameHud.class) @Mixin(InGameHud.class)
public class InGameHudMixin { public class InGameHudMixin {
@Shadow private int scaledWidth;
@Shadow private int scaledHeight;
@Inject(at = @At("TAIL"), method = "render") @Inject(at = @At("TAIL"), method = "render")
public void onRender (DrawContext drawContext, RenderTickCounter tickCounter, CallbackInfo info) public void onRender (DrawContext drawContext, float tickDelta, CallbackInfo info)
{ {
HUDEnabler hudModule = (HUDEnabler)ModuleManager.INSTANCE.getModuleByName("HUD"); if (ModuleManager.INSTANCE.getModuleByName("HUD").enabled) HUDOverlay.INSTANCE.render(drawContext, scaledWidth, scaledHeight);
if (hudModule.enabled) if (ModuleManager.INSTANCE.getModuleByName("ModulesList").enabled) ModulesListOverlay.INSTANCE.render(drawContext, scaledWidth, scaledHeight);
{
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); if (key == GLFW.GLFW_KEY_RIGHT_ALT) MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE);
for (Module m : ModuleManager.INSTANCE.modules) for (Module m : ModuleManager.INSTANCE.modules)
{ {
if (key == m.keybind.value && action == GLFW.GLFW_PRESS && MinecraftClient.getInstance().currentScreen == null) if (key == m.keybind.value && action == GLFW.GLFW_PRESS)
{ {
m.toggle(); m.toggle();
} }

View file

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

View file

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

View file

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

View file

@ -1,12 +0,0 @@
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

@ -1,36 +0,0 @@
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

@ -1,26 +0,0 @@
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,8 +11,7 @@ public class Fullbright extends Module
super("Fullbright", "Allows you to see in the dark.", Category.RENDER); super("Fullbright", "Allows you to see in the dark.", Category.RENDER);
} }
@SuppressWarnings("unchecked") @Override
@Override
public void onEnable() public void onEnable()
{ {
super.onEnable(); super.onEnable();

View file

@ -1,19 +0,0 @@
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

@ -0,0 +1,51 @@
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 @Override
public void tick() public void tick()
{ {
if(mc.player.fallDistance >= 2.5) mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(true, false)); if(mc.player.fallDistance >= 2.5) mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(true));
} }
} }

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,81 +0,0 @@
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

@ -1,32 +0,0 @@
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

@ -0,0 +1,55 @@
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

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

View file

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

View file

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

View file

@ -5,7 +5,6 @@ import java.util.Map;
import me.kawaiizenbo.moonlight.Moonlight; import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.Category; import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.theme.Theme;
import me.kawaiizenbo.moonlight.util.MathUtils; import me.kawaiizenbo.moonlight.util.MathUtils;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
@ -16,7 +15,6 @@ public class ClickGUIScreen extends Screen
public static ClickGUIScreen INSTANCE = new ClickGUIScreen(); public static ClickGUIScreen INSTANCE = new ClickGUIScreen();
public ArrayList<CategoryPane> categoryPanes; public ArrayList<CategoryPane> categoryPanes;
@SuppressWarnings("unchecked")
public ClickGUIScreen() public ClickGUIScreen()
{ {
super(Text.literal("ClickGUI")); super(Text.literal("ClickGUI"));
@ -24,7 +22,6 @@ public class ClickGUIScreen extends Screen
Map<String, Object> panePos = ((Map<String, Object>)Moonlight.CONFIG.config.get("panes")); Map<String, Object> panePos = ((Map<String, Object>)Moonlight.CONFIG.config.get("panes"));
for (Category category : Category.values()) for (Category category : Category.values())
{ {
if(category.name == "Special") continue;
int xOffset = MathUtils.d2iSafe(((Map<String, Object>)panePos.get(category.name)).get("x")); 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")); 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"); boolean collapsed = (boolean)((Map<String, Object>)panePos.get(category.name)).get("collapsed");
@ -36,9 +33,6 @@ public class ClickGUIScreen extends Screen
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
{ {
this.renderBackground(drawContext, mouseX, mouseY, 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) for (CategoryPane category : categoryPanes)
{ {
category.render(drawContext, mouseX, mouseY, delta, textRenderer); category.render(drawContext, mouseX, mouseY, delta, textRenderer);
@ -52,12 +46,6 @@ public class ClickGUIScreen extends Screen
{ {
category.mouseClicked((int) mouseX, (int) mouseY, button); 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); return super.mouseClicked(mouseX, mouseY, button);
} }

View file

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

View file

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

View file

@ -1,68 +0,0 @@
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

@ -1,56 +0,0 @@
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

@ -1,22 +0,0 @@
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

@ -1,58 +0,0 @@
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

@ -1,53 +0,0 @@
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

@ -1,82 +0,0 @@
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

@ -1,101 +0,0 @@
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

@ -1,31 +0,0 @@
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

@ -1,24 +0,0 @@
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

@ -1,29 +0,0 @@
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

@ -1,25 +0,0 @@
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

@ -1,33 +0,0 @@
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

@ -1,25 +0,0 @@
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

@ -1,29 +0,0 @@
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

@ -1,32 +0,0 @@
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

@ -1,21 +0,0 @@
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.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

View file

Before

Width:  |  Height:  |  Size: 181 B

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

View file

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

View file

@ -1,2 +1,4 @@
accessWidener v1 named accessWidener v1 named
accessible method net/minecraft/client/gui/DrawContext fillGradient (IIIIIII)V 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,8 +13,7 @@
"KeyboardMixin", "KeyboardMixin",
"SimpleOptionMixin", "SimpleOptionMixin",
"MinecraftClientMixin", "MinecraftClientMixin",
"ClientPlayerEntityMixin", "ClientPlayerEntityMixin"
"PowderSnowBlockMixin"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1