Compare commits

..

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

114 changed files with 569 additions and 3251 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, windows-2022]
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,24 +1 @@
# Moonlight Meadows Utility Mod for Modern versions of Minecraft # Moonlight Meadows Utility Mod for Minecraft 1.19.3
Requires Fabric, Fabric API, and Minecraft 1.21
Default ClickGUI Key is Right Alt.
Grab the latest release build [here](https://github.com/kawaiizenbo/MoonlightMeadows/releases)
Grab the latest nightly build [here](https://nightly.link/kawaiizenbo/MoonlightMeadows/workflows/build/main/Artifacts.zip)
## Screenshots
![Title Screen](./readme-assets/title.png)
*Title Screen*
![In-Game HUD](./readme-assets/ingame.png)
*In-Game HUD*
![ClickGUI](./readme-assets/clickgui.png)
*ClickGUI*
## Disclaimer
Please use this mod at your own risk, we are not responsible for any serious injury or death caused by this mod.
Do not use while operating heavy machinery.
This project is not affiliated with Mojang or Microsoft.

View file

@ -1,10 +1,10 @@
plugins { 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.19.3
yarn_mappings=1.21.4+build.8 yarn_mappings=1.19.3+build.5
loader_version=0.16.10 loader_version=0.14.17
# Mod Properties # Mod Properties
mod_version = 0.4.0 mod_version = dev
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.75.1+1.19.3

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 KiB

View file

@ -1,175 +0,0 @@
package me.kawaiizenbo.moonlight;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
import net.minecraft.client.MinecraftClient;
public class Config
{
MinecraftClient mc = MinecraftClient.getInstance();
public File configDir = new File(mc.runDirectory.getPath() + "/moonlight");
public File configFile = new File(configDir, "config.json");
public Map<String, Object> config = new HashMap<>();
protected static Gson gson = new Gson();
public Config()
{
configDir.mkdirs();
}
public boolean doesConfigExist()
{
return !Files.exists(configFile.toPath());
}
public void loadDefaultConfig()
{
ModuleManager.INSTANCE = new ModuleManager();
config.put("theme", 2);
Map<String, Object> mi = new HashMap<>();
for (Module m : ModuleManager.INSTANCE.modules)
{
Map<String, Object> mo = new HashMap<>();
mo.put("enabled", m.enabled);
Map<String, Object> ms = new HashMap<>();
for (Setting s : m.settings)
{
if (s instanceof BooleanSetting)
{
ms.put(s.name, ((BooleanSetting)s).value);
}
else if (s instanceof DoubleSetting)
{
ms.put(s.name, ((DoubleSetting)s).value);
}
else if (s instanceof StringSetting)
{
ms.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
ms.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
ms.put(s.name, ((IndexSetting)s).index);
}
}
mo.put("settings", ms);
mi.put(m.name, mo);
}
config.put("modules", mi);
HUDModuleManager.INSTANCE = new HUDModuleManager();
Map<String, Object> hi = new HashMap<>();
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
{
Map<String, Object> ho = new HashMap<>();
ho.put("enabled", h.enabled);
Map<String, Object> hs = new HashMap<>();
for (Setting s : h.settings)
{
if (s instanceof BooleanSetting)
{
hs.put(s.name, ((BooleanSetting)s).value);
}
else if (s instanceof DoubleSetting)
{
hs.put(s.name, ((DoubleSetting)s).value);
}
else if (s instanceof StringSetting)
{
hs.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
hs.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
hs.put(s.name, ((IndexSetting)s).index);
}
}
ho.put("settings", hs);
ho.put("x", h.x);
ho.put("y", h.y);
hi.put(h.name, ho);
}
config.put("hud", hi);
int xOffset = 4;
int yOffset = 4;
Map<String, Object> pi = new HashMap<>();
for (Category category : Category.values())
{
Map<String, Object> po = new HashMap<>();
if (xOffset > 400)
{
xOffset = 4;
yOffset = 128;
}
po.put("x", xOffset);
po.put("y", yOffset);
po.put("collapsed", false);
pi.put(category.name, po);
xOffset += 100;
}
config.put("panes", pi);
ClickGUIScreen.INSTANCE = new ClickGUIScreen();
}
@SuppressWarnings("unchecked")
public void load() throws IOException
{
try
{
String configText = new String(Files.readAllBytes(configFile.toPath()));
config = (Map<String, Object>)gson.fromJson(configText, Map.class);
}
catch (Exception e)
{
throw new IOException("Failed to load config file.");
}
}
public void save()
{
try
{
if (!doesConfigExist()) configFile.createNewFile();
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
String configText = gson.toJson(config);
FileWriter writer = new FileWriter(configFile);
writer.write(configText);
writer.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

View file

@ -1,26 +1,9 @@
package me.kawaiizenbo.moonlight; package me.kawaiizenbo.moonlight;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import org.slf4j.Logger; import org.slf4j.Logger;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
import me.kawaiizenbo.moonlight.theme.Theme;
import me.kawaiizenbo.moonlight.ui.clickgui.CategoryPane;
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
import me.kawaiizenbo.moonlight.util.ColorUtils; import me.kawaiizenbo.moonlight.util.ColorUtils;
public class Moonlight implements ModInitializer public class Moonlight implements ModInitializer
@ -28,177 +11,11 @@ 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.dev";
public static Theme THEME = Theme.DARK;
public static int THEME_IDX = 2;
public static Config CONFIG = new Config();
@Override @Override
public void onInitialize() public void onInitialize()
{ {
LOGGER.info("Moonlight loading..."); LOGGER.info("Moonlight loading...");
loadConfig();
}
@SuppressWarnings("unchecked")
public void loadConfig()
{
try
{
LOGGER.info("Loading config...");
CONFIG.load();
THEME_IDX = ((Double)CONFIG.config.get("theme")).intValue();
THEME = Theme.THEME_LIST[THEME_IDX];
for (Module m : ModuleManager.INSTANCE.modules)
{
m.enabled = (boolean)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("enabled");
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("modules")).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("modules")).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("modules")).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("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();
}
}
}
}
catch(Exception e)
{
LOGGER.warn("Config Error: " + e.getMessage());
LOGGER.info("Loading default config...");
CONFIG.loadDefaultConfig();
CONFIG.save();
}
}
public void saveConfig()
{
LOGGER.info("Saving config...");
CONFIG.config.put("theme", THEME_IDX);
Map<String, Object> mi = new HashMap<>();
for (Module m : ModuleManager.INSTANCE.modules)
{
Map<String, Object> mo = new HashMap<>();
mo.put("enabled", m.enabled);
Map<String, Object> ms = new HashMap<>();
for (Setting s : m.settings)
{
if (s instanceof BooleanSetting)
{
ms.put(s.name, ((BooleanSetting)s).value);
}
else if (s instanceof DoubleSetting)
{
ms.put(s.name, ((DoubleSetting)s).value);
}
else if (s instanceof StringSetting)
{
ms.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
ms.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
ms.put(s.name, ((IndexSetting)s).index);
}
}
mo.put("settings", ms);
mi.put(m.name, mo);
}
CONFIG.config.put("modules", mi);
Map<String, Object> hi = new HashMap<>();
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
{
Map<String, Object> ho = new HashMap<>();
ho.put("enabled", h.enabled);
Map<String, Object> hs = new HashMap<>();
for (Setting s : h.settings)
{
if (s instanceof BooleanSetting)
{
hs.put(s.name, ((BooleanSetting)s).value);
}
else if (s instanceof DoubleSetting)
{
hs.put(s.name, ((DoubleSetting)s).value);
}
else if (s instanceof StringSetting)
{
hs.put(s.name, ((StringSetting)s).value);
}
else if (s instanceof KeycodeSetting)
{
hs.put(s.name, ((KeycodeSetting)s).value);
}
else if (s instanceof IndexSetting)
{
hs.put(s.name, ((IndexSetting)s).index);
}
}
ho.put("settings", hs);
ho.put("x", h.x);
ho.put("y", h.y);
hi.put(h.name, ho);
}
CONFIG.config.put("hud", hi);
Map<String, Object> pi = new HashMap<>();
for (CategoryPane c : ClickGUIScreen.INSTANCE.categoryPanes)
{
Map<String, Object> po = new HashMap<>();
po.put("x", c.x);
po.put("y", c.y);
po.put("collapsed", c.collapsed);
pi.put(c.category.name, po);
}
CONFIG.config.put("panes", pi);
CONFIG.save();
} }
} }

View file

@ -29,8 +29,6 @@ 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 DeathPos());
commands.sort(Comparator.comparing(Command::getName)); commands.sort(Comparator.comparing(Command::getName));
} }

View file

@ -0,0 +1,63 @@
package me.kawaiizenbo.moonlight.command;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.arguments.ArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import me.kawaiizenbo.moonlight.module.Module_;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import net.minecraft.command.CommandSource;
import net.minecraft.text.Text;
public class ModuleArgumentType implements ArgumentType<Module_>
{
private static final Collection<String> EXAMPLES = ModuleManager.INSTANCE.modules
.stream()
.limit(3)
.map(module -> module.name)
.collect(Collectors.toList());
private static final DynamicCommandExceptionType NO_SUCH_MODULE = new DynamicCommandExceptionType(o ->
Text.literal("Module with name " + o + " doesn't exist."));
public static ModuleArgumentType module()
{
return new ModuleArgumentType();
}
public static Module_ getModule(final CommandContext<?> context, final String name)
{
return context.getArgument(name, Module_.class);
}
@Override
public Module_ parse(StringReader reader) throws CommandSyntaxException
{
String argument = reader.readString();
Module_ module = ModuleManager.INSTANCE.getModuleByName(argument);
if (module == null) throw NO_SUCH_MODULE.create(argument);
return module;
}
@Override
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder)
{
return CommandSource.suggestMatching(ModuleManager.INSTANCE.modules.stream().map(module -> module.name), builder);
}
@Override
public Collection<String> getExamples()
{
return EXAMPLES;
}
}

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

@ -1,25 +0,0 @@
package me.kawaiizenbo.moonlight.command.commands;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.command.Command;
import net.minecraft.command.CommandSource;
public class Reset extends Command
{
public Reset()
{
super("reset", "Resets all config options.");
}
@Override
public void build(LiteralArgumentBuilder<CommandSource> builder)
{
builder.executes(context ->
{
Moonlight.CONFIG.loadDefaultConfig();
return SINGLE_SUCCESS;
});
}
}

View file

@ -1,12 +1,11 @@
package me.kawaiizenbo.moonlight.command.commands; package me.kawaiizenbo.moonlight.command.commands;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder; 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.command.ModuleArgumentType;
import me.kawaiizenbo.moonlight.module.Module; import me.kawaiizenbo.moonlight.module.Module_;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.command.CommandSource; import net.minecraft.command.CommandSource;
public class Toggle extends Command public class Toggle extends Command
@ -14,18 +13,19 @@ public class Toggle extends Command
public Toggle() public Toggle()
{ {
super("toggle", "Toggle a module on or off."); super("toggle", "Toggle a module.");
} }
@Override @Override
public void build(LiteralArgumentBuilder<CommandSource> builder) public void build(LiteralArgumentBuilder<CommandSource> builder)
{ {
builder.then(argument("module", StringArgumentType.string()) builder.then(argument("module", new ModuleArgumentType()).executes(context ->
.executes(context ->
{ {
String m = context.getArgument("module", String.class); ClientPlayerEntity player = mc.player;
Module module = ModuleManager.INSTANCE.getModuleByName(m); assert player != null;
MinecraftClient.getInstance().send(() -> module.toggle());
Module_ m = context.getArgument("module", Module_.class);
m.toggle();
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
})); }));

View file

@ -10,15 +10,16 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
import me.kawaiizenbo.moonlight.command.CommandManager; import me.kawaiizenbo.moonlight.command.CommandManager;
import me.kawaiizenbo.moonlight.util.ChatUtils; import me.kawaiizenbo.moonlight.util.ChatUtils;
import net.minecraft.network.ClientConnection; import net.minecraft.network.ClientConnection;
import net.minecraft.network.packet.Packet; import net.minecraft.network.Packet;
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket; import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
@Mixin(ClientConnection.class) @Mixin(ClientConnection.class)
public class ClientConnectionMixin public class ClientConnectionMixin
{ {
@Inject(method = "send(Lnet/minecraft/network/packet/Packet;)V", at = @At("HEAD"), cancellable = true) @Inject(method = "send(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
public void send(Packet<?> packet, CallbackInfo ci) public void send(Packet<?> packet, CallbackInfo ci)
{ {
// Call commands if the prefix is sent
if(packet instanceof ChatMessageC2SPacket && ((ChatMessageC2SPacket) packet).chatMessage().startsWith(CommandManager.get().getPrefix())) if(packet instanceof ChatMessageC2SPacket && ((ChatMessageC2SPacket) packet).chatMessage().startsWith(CommandManager.get().getPrefix()))
{ {
try try

View file

@ -1,45 +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.CallbackInfo;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.entity.MovementType;
import net.minecraft.util.math.Vec3d;
@Mixin(ClientPlayerEntity.class)
public class ClientPlayerEntityMixin
{
@Inject(method = "move", at = @At(value = "TAIL"), cancellable = true)
public void onMove(MovementType type, Vec3d movement, CallbackInfo ci)
{
for (Module m : ModuleManager.INSTANCE.getEnabledModules())
{
m.onMotion(type, movement);
}
}
@SuppressWarnings("resource")
@Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true)
public void onTick(CallbackInfo ci)
{
for (Module m : ModuleManager.INSTANCE.getEnabledModules())
{
if (MinecraftClient.getInstance().player != null) m.tick();
}
}
@Inject(method = "init", at = @At(value = "TAIL"), cancellable = true)
public void onInit(CallbackInfo ci)
{
for (Module m : ModuleManager.INSTANCE.getEnabledModules())
{
m.onEnable();
}
}
}

View file

@ -1,32 +1,26 @@
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.HUD;
import me.kawaiizenbo.moonlight.ui.LegacyHUD;
import me.kawaiizenbo.moonlight.ui.ModulesListOverlay;
import me.kawaiizenbo.moonlight.ui.hud.HUDRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.render.RenderTickCounter; import net.minecraft.client.util.math.MatrixStack;
@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 (MatrixStack matrices, float tickDelta, CallbackInfo info)
{ {
HUDEnabler hudModule = (HUDEnabler)ModuleManager.INSTANCE.getModuleByName("HUD"); if (ModuleManager.INSTANCE.getModuleByName("HUD").enabled) HUD.INSTANCE.renderHUD(matrices, scaledWidth, scaledHeight);
if (hudModule.enabled)
{
if (hudModule.mode.index == 1) LegacyHUD.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
else HUDRenderer.INSTANCE.render(drawContext);
}
if (ModuleManager.INSTANCE.getModuleByName("ModulesList").enabled) ModulesListOverlay.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
} }
} }

View file

@ -8,27 +8,16 @@ 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.Module;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen; import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
import net.minecraft.client.Keyboard; import net.minecraft.client.Keyboard;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@Mixin(Keyboard.class) @Mixin(Keyboard.class)
public abstract class KeyboardMixin public abstract class KeyboardMixin {
{
@Shadow @Final private MinecraftClient client; @Shadow @Final private MinecraftClient client;
@Inject(method = "onKey", at = @At("HEAD"), cancellable = true) @Inject(method = "onKey", at = @At("HEAD"), cancellable = true)
public void onKey(long window, int key, int scancode, int action, int modifiers, CallbackInfo info) public void onKey(long window, int key, int scancode, int action, int modifiers, CallbackInfo info) {
{ if (key == GLFW.GLFW_KEY_RIGHT_SHIFT) MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE);
if (key == GLFW.GLFW_KEY_RIGHT_ALT) MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE);
for (Module m : ModuleManager.INSTANCE.modules)
{
if (key == m.keybind.value && action == GLFW.GLFW_PRESS && MinecraftClient.getInstance().currentScreen == null)
{
m.toggle();
}
}
} }
} }

View file

@ -0,0 +1,25 @@
package me.kawaiizenbo.moonlight.mixin;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.LivingEntity;
import me.kawaiizenbo.moonlight.module.Module_;
import me.kawaiizenbo.moonlight.module.ModuleManager;
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.CallbackInfo;
@Mixin(LivingEntity.class)
public class LivingEntityMixin
{
@Inject(at = @At("HEAD"), method = "tick()V")
private void init(CallbackInfo info)
{
for (Module_ mod : ModuleManager.INSTANCE.getEnabledModules())
{
if (MinecraftClient.getInstance().player != null) mod.tick();
}
}
}

View file

@ -1,18 +0,0 @@
package me.kawaiizenbo.moonlight.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.At;
import me.kawaiizenbo.moonlight.Moonlight;
import net.minecraft.client.MinecraftClient;
@Mixin(MinecraftClient.class)
public class MinecraftClientMixin
{
@Inject(at = @At("TAIL"), method = "scheduleStop")
public void onShutdown(CallbackInfo ci) {
Moonlight.INSTANCE.saveConfig();
}
}

View file

@ -0,0 +1,36 @@
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.CallbackInfo;
import me.kawaiizenbo.moonlight.ui.altmanager.AltManagerScreen;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;
@Mixin(MultiplayerScreen.class)
public class MultiplayerScreenMixin extends Screen
{
protected MultiplayerScreenMixin(Text title)
{
super(title);
}
@Inject(at = @At("TAIL"), method = "init")
private void altManagerButton(CallbackInfo callbackInfo)
{
this.addDrawableChild(ButtonWidget.builder(Text.literal("Alt Manager"), this::gotoAltManagerScreen)
.position(this.width - 102, 2)
.size(100, 20)
.build());
}
private void gotoAltManagerScreen(ButtonWidget button)
{
MinecraftClient.getInstance().setScreen(AltManagerScreen.INSTANCE);
}
}

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

@ -1,34 +0,0 @@
package me.kawaiizenbo.moonlight.mixin;
import java.util.Objects;
import java.util.function.Consumer;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import me.kawaiizenbo.moonlight.util.ISimpleOption;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.SimpleOption;
@Mixin(SimpleOption.class)
public class SimpleOptionMixin<T> implements ISimpleOption<T>
{
@Shadow T value;
@Shadow @Final private Consumer<T> changeCallback;
@Override
public void setValueUnrestricted(T object)
{
if (!MinecraftClient.getInstance().isRunning())
{
this.value = object;
return;
}
if (!Objects.equals(this.value, object))
{
this.value = object;
this.changeCallback.accept(this.value);
}
}
}

View file

@ -1,6 +1,7 @@
package me.kawaiizenbo.moonlight.mixin; package me.kawaiizenbo.moonlight.mixin;
import me.kawaiizenbo.moonlight.Moonlight; import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.ui.altmanager.AltManagerScreen;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@ -9,9 +10,13 @@ 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 net.minecraft.client.gui.DrawContext; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
@ -32,12 +37,26 @@ public abstract class TitleScreenMixin extends Screen
} }
@Inject(at = @At("TAIL"), method = "render") @Inject(at = @At("TAIL"), method = "render")
private void clientTag(DrawContext drawContext, int mouseX, int mouseY, float delta, CallbackInfo info) private void clientTag(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo info)
{ {
float f = this.doBackgroundFade ? (Util.getMeasuringTimeMs() - this.backgroundFadeStart) / 1000.0F : 1.0F; float f = this.doBackgroundFade ? (Util.getMeasuringTimeMs() - this.backgroundFadeStart) / 1000.0F : 1.0F;
float g = this.doBackgroundFade ? MathHelper.clamp(f - 1.0F, 0.0F, 1.0F) : 1.0F; float g = this.doBackgroundFade ? MathHelper.clamp(f - 1.0F, 0.0F, 1.0F) : 1.0F;
int l = MathHelper.ceil(g * 255.0F) << 24; int l = MathHelper.ceil(g * 255.0F) << 24;
drawContext.drawTextWithShadow(this.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag, 2, 2, 16777215 | l); DrawableHelper.drawStringWithShadow(matrices, this.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag, 2, 2, 16777215 | l);
}
@Inject(at = @At("TAIL"), method = "init")
private void altManagerButton(CallbackInfo callbackInfo)
{
this.addDrawableChild(ButtonWidget.builder(Text.literal("Alt Manager"), this::gotoAltManagerScreen)
.position(this.width - 102, 2)
.size(100, 20)
.build());
}
private void gotoAltManagerScreen(ButtonWidget button)
{
MinecraftClient.getInstance().setScreen(AltManagerScreen.INSTANCE);
} }
} }

View file

@ -2,20 +2,17 @@ package me.kawaiizenbo.moonlight.module;
public enum Category public enum Category
{ {
COMBAT("Combat", 0xFFFF5555), COMBAT("Combat"),
MOVEMENT("Movement", 0xFFFF55FF), MOVEMENT("Movement"),
RENDER("Render", 0xFF5555FF), RENDER("Render"),
WORLD("World", 0xFF55FF55), WORLD("World"),
PLAYER("Player", 0xFF00AAAA), PLAYER("Player"),
CHAT("Chat", 0xFFFFAA00), CHAT("Chat");
SPECIAL("Special", 0xFFFFFFFF);
public String name; public String name;
public int color;
Category(String name, int color) Category(String name)
{ {
this.name = name; this.name = name;
this.color = color;
} }
} }

View file

@ -1,70 +0,0 @@
package me.kawaiizenbo.moonlight.module;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import me.kawaiizenbo.moonlight.ui.ModulesListOverlay;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.MovementType;
import net.minecraft.util.math.Vec3d;
public abstract class Module
{
protected static MinecraftClient mc = MinecraftClient.getInstance();
public String name;
public String description;
public Category category;
public boolean enabled;
public ArrayList<Setting> settings;
public boolean showEditButton;
public BooleanSetting showInModulesList = new BooleanSetting("Show in Modules List", true);
public KeycodeSetting keybind = new KeycodeSetting("Keybind", 0);
public Module(String name, String description, Category category)
{
this.name = name;
this.description = description;
this.category = category;
settings = new ArrayList<>();
settings.add(showInModulesList);
settings.add(keybind);
}
public void onEnable() { ModulesListOverlay.INSTANCE.update(); }
public void onDisable() { ModulesListOverlay.INSTANCE.update(); }
public void onMotion(MovementType type, Vec3d movement) {}
public void tick() {}
public void toggle()
{
enabled = !enabled;
if(enabled) {
onEnable();
} else {
onDisable();
}
}
public Setting getSettingByName(String settingName)
{
for(Setting setting : settings)
{
if ((setting.name.trim().equalsIgnoreCase(settingName)))
{
return setting;
}
}
return null;
}
protected void addSettings(Setting... settings)
{
for(Setting setting : settings)
{
this.settings.add(setting);
}
}
}

View file

@ -7,39 +7,34 @@ import me.kawaiizenbo.moonlight.module.modules.*;
public class ModuleManager public class ModuleManager
{ {
public static ModuleManager INSTANCE = new ModuleManager(); public static ModuleManager INSTANCE = new ModuleManager();
public ArrayList<Module> modules = new ArrayList<>(); public ArrayList<Module_> modules = new ArrayList<>();
public ModuleManager() public 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 ModulesList(),
new ChatSpammer(),
new Rotation(),
new AutoJump(),
new Reach(),
new AntiPowderSnow(),
new AutoTotem(),
new AutoWalk()
/*new Timer()*/
); );
} }
private void registerModules(Module... modules) public void registerModule(Module_ module)
{ {
for (Module module : modules) { modules.add(module);
}
public void registerModules(Module_... modules)
{
for (Module_ module : modules) {
this.modules.add(module); this.modules.add(module);
} }
} }
public Module getModuleByName(String moduleName) public Module_ getModuleByName(String moduleName)
{ {
for(Module module : modules) for(Module_ module : modules)
{ {
if ((module.name.trim().equalsIgnoreCase(moduleName))) if ((module.name.trim().equalsIgnoreCase(moduleName)))
{ {
@ -49,10 +44,10 @@ public class ModuleManager
return null; return null;
} }
public ArrayList<Module> getModulesByCategory(Category category) public ArrayList<Module_> getModulesByCategory(Category category)
{ {
ArrayList<Module> returnedModules = new ArrayList<>(); ArrayList<Module_> returnedModules = new ArrayList<>();
for(Module module : modules) for(Module_ module : modules)
{ {
if (module.category == category) if (module.category == category)
{ {
@ -62,10 +57,10 @@ public class ModuleManager
return returnedModules; return returnedModules;
} }
public ArrayList<Module> getEnabledModules() public ArrayList<Module_> getEnabledModules()
{ {
ArrayList<Module> enabledModules = new ArrayList<>(); ArrayList<Module_> enabledModules = new ArrayList<>();
for (Module module : modules) for (Module_ module : modules)
{ {
if (!module.enabled) if (!module.enabled)
continue; continue;

View file

@ -0,0 +1,39 @@
package me.kawaiizenbo.moonlight.module;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.module.settings.Setting;
import net.minecraft.client.MinecraftClient;
public abstract class Module_
{
protected static MinecraftClient mc = MinecraftClient.getInstance();
public String name;
public String description;
public Category category;
public boolean enabled;
public ArrayList<Setting> settings;
public int keyBind;
public Module_(String name, String description, Category category)
{
this.name = name;
this.description = description;
this.category = category;
settings = new ArrayList<>();
}
public void onEnable() {}
public void onDisable() {}
public void tick() {}
public void toggle()
{
enabled = !enabled;
if(enabled) {
onEnable();
} else {
onDisable();
}
}
}

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,27 +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 me.kawaiizenbo.moonlight.util.Timer;
public class AutoJump extends Module
{
public DoubleSetting delay = new DoubleSetting("Delay (Seconds)", 1, 0.1, 10, 1);
private Timer timer = new Timer();
public AutoJump()
{
super("Auto Jump", "Automatically jumps on a timer.", Category.MOVEMENT);
settings.add(delay);
}
@Override
public void tick()
{
if (timer.hasTimeElapsed((long)delay.value * 1000, true) && mc.player.isOnGround() && mc.player.hasVehicle() == false)
{
mc.player.jump();
}
}
}

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

@ -1,30 +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 me.kawaiizenbo.moonlight.module.settings.StringSetting;
import me.kawaiizenbo.moonlight.util.Timer;
public class ChatSpammer extends Module
{
public StringSetting message = new StringSetting("Message", "E4PE4J");
public DoubleSetting delay = new DoubleSetting("Delay (Seconds)", 1, 0.1, 10, 1);
private Timer timer = new Timer();
public ChatSpammer()
{
super("Chat Spammer", "Spams a selected message in chat.", Category.CHAT);
settings.add(message);
settings.add(delay);
}
@Override
public void tick()
{
if (timer.hasTimeElapsed((long)delay.value * 1000, true))
{
mc.player.networkHandler.sendChatMessage(message.value);
}
}
}

View file

@ -1,9 +1,9 @@
package me.kawaiizenbo.moonlight.module.modules; 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_;
public class Fly extends Module public class Fly extends Module_
{ {
public Fly() public Fly()
@ -20,7 +20,6 @@ public class Fly extends Module
@Override @Override
public void onDisable() public void onDisable()
{ {
super.onDisable();
mc.player.getAbilities().flying = false; mc.player.getAbilities().flying = false;
} }
} }

View file

@ -1,28 +1,25 @@
package me.kawaiizenbo.moonlight.module.modules; 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.util.ISimpleOption;
public class Fullbright extends Module public class Fullbright extends Module_
{ {
public Fullbright() public Fullbright()
{ {
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(); // i dont know why but this makes it darker than 1.0
((ISimpleOption<Double>)(Object)mc.options.getGamma()).setValueUnrestricted(100.0); mc.options.getGamma().setValue(100.0);
} }
@Override @Override
public void onDisable() public void onDisable()
{ {
super.onDisable();
mc.options.getGamma().setValue(1.0); mc.options.getGamma().setValue(1.0);
} }
} }

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,16 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module_;
import me.kawaiizenbo.moonlight.module.settings.ColorSetting;
public class HUDModule extends Module_
{
public ColorSetting color = new ColorSetting("Color", 0x55FFFF);
public HUDModule()
{
super("HUD", "Enables or disables the Moonlight HUD.", Category.RENDER);
this.enabled = true;
settings.add(color);
}
}

View file

@ -1,14 +0,0 @@
package me.kawaiizenbo.moonlight.module.modules;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.Module;
public class ModulesList extends Module
{
public ModulesList()
{
super("ModulesList", "Shows enabled modules on side of screen", Category.RENDER);
this.enabled = true;
this.showInModulesList.value = false;
}
}

View file

@ -1,10 +1,10 @@
package me.kawaiizenbo.moonlight.module.modules; 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 net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
public class NoFall extends Module public class NoFall extends Module_
{ {
public NoFall() public NoFall()
{ {
@ -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

@ -1,25 +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;
public class Rotation extends Module
{
DoubleSetting pitch = new DoubleSetting("Pitch", 0, 0, 360, 0);
DoubleSetting yaw = new DoubleSetting("Yaw", 0, 0, 360, 0);
public Rotation()
{
super("Rotation", "Locks camera to specified pitch and yaw.", Category.PLAYER);
settings.add(pitch);
settings.add(yaw);
}
@Override
public void tick()
{
mc.player.setPitch((float)pitch.value);
mc.player.setYaw((float)yaw.value);
}
}

View file

@ -1,39 +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 Speed extends Module
{
double old = 0.1;
DoubleSetting speed = new DoubleSetting("Speed", 1.4, 0.1, 10, 1);
public Speed()
{
super("Speed", "Allows you to move faster.", Category.MOVEMENT);
settings.add(speed);
}
@Override
public void onEnable()
{
super.onEnable();
old = mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).getBaseValue();
}
@Override
public void tick()
{
mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).setBaseValue(speed.value/10d);
}
@Override
public void onDisable()
{
super.onDisable();
mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).setBaseValue(old);
}
}

View file

@ -1,38 +1,28 @@
package me.kawaiizenbo.moonlight.module.modules; 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.stepHeight = (float)stepHeight.value;
} }
@Override @Override
public void onDisable() public void onDisable()
{ {
super.onDisable(); mc.player.stepHeight = 0.5f;
mc.player.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(old);
} }
} }

View file

@ -1,48 +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 me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
import net.minecraft.entity.MovementType;
import net.minecraft.util.math.Vec3d;
public class TestModule extends Module
{
public BooleanSetting bs = new BooleanSetting("BooleanSetting", false);
public DoubleSetting ds = new DoubleSetting("DoubleSetting", 1, 0, 10, 10);
public StringSetting ss = new StringSetting("StringSetting", "string");
public TestModule()
{
super("Test Module", "Used for testing module features.", Category.WORLD);
addSettings(bs, ds, ss);
}
@Override
public void onEnable()
{
super.onEnable();
System.out.println("Test Module Enabled");
}
@Override
public void onDisable()
{
super.onDisable();
System.out.println("Test Module Disabled");
}
@Override
public void onMotion(MovementType type, Vec3d movement)
{
System.out.println("Test Module motion");
}
@Override
public void tick()
{
System.out.println("Test Module Tick");
}
}

View file

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

View file

@ -0,0 +1,43 @@
package me.kawaiizenbo.moonlight.module.settings;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
public class ColorSetting extends Setting
{
public int value;
public int r;
public int g;
public int b;
public ColorSetting(String name, int value)
{
this.name = name;
this.value = value;
this.height = 64;
this.r = (value >> 16) & 0xFF;
this.g = (value >> 8) & 0xFF;
this.b = value & 0xFF;
}
@Override
public void render(MatrixStack matrices, int x, int y, int mouseX, int mouseY)
{
super.render(matrices, x, y, mouseX, mouseY);
DrawableHelper.drawTextWithShadow(matrices, textRenderer, Text.literal(name), x+2, y+2, 0xFFFFFF);
int redDisplayStartColor = ((255&0x0ff)<<24)|((0&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
int redDisplayEndColor = ((255&0x0ff)<<24)|((255&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
int greenDisplayStartColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((0&0x0ff)<<8)|(b&0x0ff);
int greenDisplayEndColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((255&0x0ff)<<8)|(b&0x0ff);
int blueDisplayStartColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(0&0x0ff);
int blueDisplayEndColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(255&0x0ff);
DrawableHelper.fillGradient(matrices, x+80, y+2, x+92, y+62, redDisplayEndColor, redDisplayStartColor, 0);
DrawableHelper.fillGradient(matrices, x+95, y+2, x+107, y+62, greenDisplayEndColor, greenDisplayStartColor, 0);
DrawableHelper.fillGradient(matrices, x+110, y+2, x+122, y+62, blueDisplayEndColor, blueDisplayStartColor, 0);
textRenderer.drawWithShadow(matrices, Text.literal("Red: " + r), x+130, y+10, 0xFFFFFFFF);
textRenderer.drawWithShadow(matrices, Text.literal("Green: " + g), x+130, y+26, 0xFFFFFFFF);
textRenderer.drawWithShadow(matrices, Text.literal("Blue: " + b), x+130, y+42, 0xFFFFFFFF);
}
}

View file

@ -1,9 +1,8 @@
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.gui.DrawableHelper;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
public class DoubleSetting extends Setting public class DoubleSetting extends Setting
@ -24,10 +23,10 @@ public class DoubleSetting extends Setting
} }
@Override @Override
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer) public void render(MatrixStack matrices, int x, int y, int mouseX, int mouseY)
{ {
super.render(drawContext, x, y, mouseX, mouseY, textRenderer); super.render(matrices, x, y, mouseX, mouseY);
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+4, Moonlight.THEME.text.getRGB(), false); DrawableHelper.drawTextWithShadow(matrices, textRenderer, Text.literal(name), x+2, y+2, 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); DrawableHelper.drawTextWithShadow(matrices, textRenderer, Text.literal(valueString), (x+190)-textRenderer.getWidth(valueString), y+2, 0xFFFFFF);
drawContext.fill(x+2, y+16, x+190, y+18, 0xFF777777); DrawableHelper.fill(matrices, 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()); DrawableHelper.fill(matrices, 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()); DrawableHelper.fill(matrices, 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

@ -1,71 +0,0 @@
package me.kawaiizenbo.moonlight.module.settings;
import org.lwjgl.glfw.GLFW;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.util.KeycodeUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text;
public class KeycodeSetting extends Setting
{
public int value;
private boolean isWaiting = false;
public KeycodeSetting(String name, int value)
{
this.name = name;
this.value = value;
}
@Override
public void mouseClicked(double mouseX, double mouseY, int button)
{
if (isWaiting)
{
isWaiting = false;
return;
}
if (hovered((int)mouseX, (int)mouseY) && button == 0)
{
isWaiting = true;
}
}
@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);
if (isWaiting)
{
String waiting = "Press any key.";
int twwidth = textRenderer.getWidth(waiting);
drawContext.drawText(textRenderer, waiting, x+190-twwidth, y+8, Moonlight.THEME.text.getRGB(), false);
}
else
{
String key = KeycodeUtils.keyTable[value];
if (value == GLFW.GLFW_KEY_UNKNOWN) key = "";
int twidth = textRenderer.getWidth(key);
drawContext.drawText(textRenderer, key, x+190-twidth, y+8, Moonlight.THEME.text.getRGB(), false);
}
}
@Override
public void keyPressed(int keyCode, int scanCode, int modifiers)
{
if (isWaiting)
{
if (keyCode == 256)
{
// escape was pressed, exit safely
isWaiting = false;
return;
}
value = keyCode;
isWaiting = false;
}
}
}

View file

@ -1,19 +1,22 @@
package me.kawaiizenbo.moonlight.module.settings; package me.kawaiizenbo.moonlight.module.settings;
import me.kawaiizenbo.moonlight.Moonlight; 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.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack;
public class Setting public class Setting
{ {
public String name; public String name;
protected TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
public int height = 24;
int x = 0, y = 0; int x = 0, y = 0;
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer) public void render(MatrixStack matrices, int x, int y, int mouseX, int mouseY)
{ {
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()); DrawableHelper.fill(matrices, x, y, x+192, y+height, hovered(mouseX, mouseY) ? 0xFF444444: 0xFF222222);
} }
@ -25,6 +28,6 @@ public class Setting
protected boolean hovered(int mouseX, int mouseY) protected boolean hovered(int mouseX, int mouseY)
{ {
return mouseX >= x && mouseX <= x + 192 && mouseY >= y && mouseY <= y + 24; return mouseX >= x && mouseX <= x + 192 && mouseY >= y && mouseY <= y + height;
} }
} }

View file

@ -1,72 +1,6 @@
package me.kawaiizenbo.moonlight.module.settings; package me.kawaiizenbo.moonlight.module.settings;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.util.KeycodeUtils;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text;
public class StringSetting extends Setting public class StringSetting extends Setting
{ {
public String value;
private boolean focused = false;
public StringSetting(String name, String value)
{
this.name = name;
this.value = value;
}
@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);
int twidth = textRenderer.getWidth(value);
drawContext.fill(x+96, y+5, x+190, y+19, Moonlight.THEME.border.getRGB());
drawContext.fill(x+97, y+6, x+189, y+18, Moonlight.THEME.background.getRGB());
int cursorPos = x+98+twidth;
if (focused) drawContext.fill(cursorPos, y+7, cursorPos+1, y+17, Moonlight.THEME.accent.getRGB());
drawContext.drawText(textRenderer, value, x+98, y+8, Moonlight.THEME.text.getRGB(), false);
}
@Override
public void mouseClicked(double mouseX, double mouseY, int button)
{
if (focused)
{
focused = false;
return;
}
if (hovered((int)mouseX, (int)mouseY) && button == 0)
{
focused = true;
}
}
@Override
public void keyPressed(int keyCode, int scanCode, int modifiers)
{
if (focused)
{
if (keyCode == 256 || keyCode == 257)
{
// escape or enter was pressed, exit safely
focused = false;
return;
}
if (keyCode == 259)
{
// backspace, remove a character
if (value.length() > 0) value = value.substring(0, value.length() - 1);
return;
}
if (keyCode > 96) return; // not a typing key
String append = KeycodeUtils.keyTable[keyCode];
if (modifiers == 1) append = KeycodeUtils.shiftedKeyTable[keyCode];
if (append == "Unknown") return;
if (append == "Space") append = " ";
value += append;
}
}
} }

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,41 @@
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.font.TextRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.Vec3d;
public class HUD
{
public static HUD INSTANCE = new HUD();
private MinecraftClient mc = MinecraftClient.getInstance();
TextRenderer textRenderer = mc.textRenderer;
public void renderHUD(MatrixStack matrix, int scaledWidth, int scaledHeight)
{
// do not draw if F3 enabled
if (mc.options.debugEnabled) return;
// draw stats
textRenderer.drawWithShadow(matrix, Moonlight.clientTag + " " + Moonlight.versionTag, 2, 2, 16777215);
textRenderer.drawWithShadow(matrix, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 12, 0x55FFFF);
textRenderer.drawWithShadow(matrix, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 22, 0x55FFFF);
textRenderer.drawWithShadow(matrix, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, 0x55FFFF);
// draw coordinates
textRenderer.drawWithShadow(matrix, "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, 0x55FFFF);
}
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

@ -1,40 +0,0 @@
package me.kawaiizenbo.moonlight.ui;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.module.Module;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
public class ModulesListOverlay
{
// this will be replaced with a new hud version at some point
public static ModulesListOverlay INSTANCE = new ModulesListOverlay();
private MinecraftClient mc = MinecraftClient.getInstance();
private ArrayList<Module> enabledModules = ModuleManager.INSTANCE.getEnabledModules();
public void render(DrawContext drawContext, int scaledWidth, int scaledHeight)
{
// do not draw if F3 enabled
if (mc.getDebugHud().shouldShowDebugHud()) return;
int yOffset = 0;
for (Module m : enabledModules)
{
if (!m.showInModulesList.value) continue;
int nameWidth = mc.textRenderer.getWidth(m.name);
drawContext.fill(scaledWidth - nameWidth - 8, yOffset, scaledWidth, yOffset+12, 0x77222222);
drawContext.fill(scaledWidth - 2, yOffset, scaledWidth, yOffset+12, 0xFF55FFFF);
drawContext.drawText(mc.textRenderer, m.name, scaledWidth - nameWidth - 4, yOffset + 2, 0xFFFFFFFF, false);
yOffset += 12;
}
}
public void update()
{
enabledModules = ModuleManager.INSTANCE.getEnabledModules();
}
}

View file

@ -1,45 +0,0 @@
package me.kawaiizenbo.moonlight.ui;
import me.kawaiizenbo.moonlight.Moonlight;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;
public class SetScreenButton
{
String text;
Screen screen;
int x, y, width;
public SetScreenButton(String text, int x, int y, Screen screen)
{
this.text = text;
this.x = x;
this.y = y;
this.screen = screen;
}
public void render(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY, int x, int y)
{
this.x = x;
this.y = y;
width = textRenderer.getWidth(text);
drawContext.fill(x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0x22222222 : 0);
drawContext.drawText(textRenderer, Text.literal(text), x, y, Moonlight.THEME.headerText.getRGB(), false);
}
public boolean hovered(int mouseX, int mouseY)
{
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + 10;
}
public void mouseClicked(int mouseX, int mouseY)
{
if (hovered(mouseX, mouseY))
{
MinecraftClient.getInstance().setScreen(screen);
}
}
}

View file

@ -0,0 +1,43 @@
package me.kawaiizenbo.moonlight.ui;
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
public class TextButton
{
String text;
int x, y, color, width;
public TextButton(String text, int x, int y, int color)
{
this.text = text;
this.x = x;
this.y = y;
this.color = color;
}
public void render(MatrixStack matrices, TextRenderer textRenderer, int mouseX, int mouseY)
{
width = textRenderer.getWidth(text);
DrawableHelper.fill(matrices, x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0xFF444444 : 0xFF222222);
DrawableHelper.drawTextWithShadow(matrices, textRenderer, Text.literal(text), x, y, color);
}
public boolean hovered(int mouseX, int mouseY)
{
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + 10;
}
public void mouseClicked(int mouseX, int mouseY)
{
if (hovered(mouseX, mouseY))
{
// i have no clue how to pass a method so this is kind of stupid
MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE);
}
}
}

View file

@ -0,0 +1,22 @@
package me.kawaiizenbo.moonlight.ui.altmanager;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
public class AltManagerScreen extends Screen
{
public static AltManagerScreen INSTANCE = new AltManagerScreen();
protected AltManagerScreen()
{
super(Text.literal("Alt Manager"));
}
@Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta)
{
renderBackgroundTexture(0);
}
}

View file

@ -1,87 +0,0 @@
package me.kawaiizenbo.moonlight.ui.clickgui;
import java.util.ArrayList;
import me.kawaiizenbo.moonlight.Moonlight;
import me.kawaiizenbo.moonlight.module.Category;
import me.kawaiizenbo.moonlight.module.ModuleManager;
import me.kawaiizenbo.moonlight.util.DrawUtils;
import me.kawaiizenbo.moonlight.module.Module;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
public class CategoryPane
{
public Category category;
public int x, y, height, width = 96;
int startX, startY;
boolean dragging = false;
public boolean collapsed = false;
ArrayList<ModuleButton> moduleButtons;
Identifier icon;
public CategoryPane(Category category, int initialX, int initialY, boolean collapsed)
{
this.category = category;
this.x = initialX;
this.y = initialY;
this.collapsed = collapsed;
moduleButtons = new ArrayList<ModuleButton>();
icon = DrawUtils.getThemedGUIIcon(category.name.toLowerCase());
for (Module m : ModuleManager.INSTANCE.getModulesByCategory(category))
{
moduleButtons.add(new ModuleButton(m));
}
if (moduleButtons.size() == 0) collapsed = true;
height = (moduleButtons.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() : category.color);
//drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
drawContext.drawGuiTexture(RenderLayer::getGuiTextured, icon, x+2, y+2, 12, 12);
drawContext.drawText(textRenderer, category.name, x+16, y+4, Moonlight.THEME.headerText.getRGB(), false);
if (!collapsed)
{
int buttonYOffset = y+16;
for (ModuleButton m : moduleButtons)
{
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 (ModuleButton moduleButton : moduleButtons)
{
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,75 +1,61 @@
package me.kawaiizenbo.moonlight.ui.clickgui; package me.kawaiizenbo.moonlight.ui.clickgui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map;
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.module.ModuleManager;
import me.kawaiizenbo.moonlight.util.MathUtils; import me.kawaiizenbo.moonlight.module.Module_;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
public class ClickGUIScreen extends Screen public class ClickGUIScreen extends Screen
{ {
public static ClickGUIScreen INSTANCE = new ClickGUIScreen(); public static ClickGUIScreen INSTANCE = new ClickGUIScreen();
public ArrayList<CategoryPane> categoryPanes; public static ArrayList<ModuleButton> moduleButtons;
@SuppressWarnings("unchecked")
public ClickGUIScreen() public ClickGUIScreen()
{ {
super(Text.literal("ClickGUI")); super(Text.literal("ClickGUI"));
categoryPanes = new ArrayList<CategoryPane>(); moduleButtons = new ArrayList<>();
Map<String, Object> panePos = ((Map<String, Object>)Moonlight.CONFIG.config.get("panes")); int yOffset;
for (Category category : Category.values()) for (Category category : Category.values())
{ {
if(category.name == "Special") continue; yOffset = 25;
int xOffset = MathUtils.d2iSafe(((Map<String, Object>)panePos.get(category.name)).get("x")); for (Module_ module : ModuleManager.INSTANCE.getModulesByCategory(category))
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"); moduleButtons.add(new ModuleButton(module, 9+(module.category.ordinal()*70), yOffset));
categoryPanes.add(new CategoryPane(category, xOffset, yOffset, collapsed)); yOffset += 14;
}
} }
} }
@Override @Override
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) public void render(MatrixStack matrices, int mouseX, int mouseY, float delta)
{ {
this.renderBackground(drawContext, mouseX, mouseY, delta); this.renderBackground(matrices);
drawContext.fill(width-80, height-16, width, height, Moonlight.THEME.border.getRGB()); int categoryLabelXOffset = 10;
drawContext.fill(width-78, height-14, width-2, height-2, (mouseX > width-80 && mouseY > height-16) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB()); for (Category category : Category.values())
drawContext.drawText(textRenderer, "Change Theme", width-75, height-12, Moonlight.THEME.text.getRGB(), false);
for (CategoryPane category : categoryPanes)
{ {
category.render(drawContext, mouseX, mouseY, delta, textRenderer); textRenderer.draw(matrices, category.name, categoryLabelXOffset, 10, 0xFFFFFF);
categoryLabelXOffset += 70;
}
for (ModuleButton moduleButton : moduleButtons)
{
moduleButton.render(matrices, mouseX, mouseY);
} }
} }
@Override @Override
public boolean mouseClicked(double mouseX, double mouseY, int button) public boolean mouseClicked(double mouseX, double mouseY, int button)
{ {
for (CategoryPane category : categoryPanes) for (ModuleButton modButton : moduleButtons)
{ {
category.mouseClicked((int) mouseX, (int) mouseY, button); modButton.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);
} }
@Override
public boolean mouseReleased(double mouseX, double mouseY, int button)
{
for (CategoryPane category : categoryPanes)
{
category.mouseReleased((int) mouseX, (int) mouseY, button);
}
return super.mouseReleased(mouseX, mouseY, button);
}
@Override @Override
public boolean shouldPause() public boolean shouldPause()

View file

@ -1,29 +1,31 @@
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 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.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack;
public class ModuleButton public class ModuleButton
{ {
public Module module; public Module_ module;
public int x, y, width, height = 0; public int x, y, width, height = 0;
private MinecraftClient mc = MinecraftClient.getInstance();
public ModuleButton(Module module) public ModuleButton(Module_ module, int x, int y)
{ {
this.module = module; this.module = module;
this.width = 92;
this.height = 12;
}
public void render(DrawContext drawContext, int mouseX, int mouseY, int x, int y, TextRenderer textRenderer)
{
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()); this.width = 70;
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.THEME.accent.getRGB() : Moonlight.THEME.text.getRGB(), false); this.height = 14;
}
public void render(MatrixStack matrices, int mouseX, int mouseY)
{
TextRenderer textRenderer = mc.textRenderer;
DrawableHelper.fill(matrices, x, y, x + width, y + height, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
textRenderer.draw(matrices, module.name, x+3, y+3, module.enabled ? 0x55FFFF : 0xFFFFFF);
} }
public boolean hovered(int mouseX, int mouseY) public boolean hovered(int mouseX, int mouseY)
@ -31,7 +33,7 @@ public class ModuleButton
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height; return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height;
} }
public boolean mouseClicked(int mouseX, int mouseY, int button) public void mouseClicked(int mouseX, int mouseY, int button)
{ {
if (hovered(mouseX, mouseY)) if (hovered(mouseX, mouseY))
{ {
@ -43,8 +45,6 @@ public class ModuleButton
{ {
MinecraftClient.getInstance().setScreen(new SettingsScreen(module)); MinecraftClient.getInstance().setScreen(new SettingsScreen(module));
} }
return true;
} }
return false;
} }
} }

View file

@ -1,62 +1,41 @@
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.DrawableHelper;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text; 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; protected SettingsScreen(Module_ module)
int startX, startY, x = (ClickGUIScreen.INSTANCE.width/2)-112, y = (ClickGUIScreen.INSTANCE.height/2)-96, windowWidth = 224, windowHeight = 192;
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;
} }
@Override @Override
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) public void render(MatrixStack matrices, int mouseX, int mouseY, float delta)
{ {
this.renderBackground(drawContext, mouseX, mouseY, delta); this.renderBackground(matrices);
DrawableHelper.fill(matrices, (width/2)-112, (height/2)-96, (width/2)+112, (height/2)+96, 0xFF222222);
// move window if dragging DrawableHelper.drawCenteredText(matrices, textRenderer, module.name, width/2, (height/2)-88, 0xFFFFFF);
if (dragging) DrawableHelper.drawTextWithShadow(matrices, textRenderer, Text.literal(module.description), (width/2)-104, (height/2)-72, 0xFFFFFF);
{ backButton = new TextButton(ColorUtils.underline + "< Back", (width/2)-104, (height/2)-88, 0xFFFFFF);
x = mouseX - startX; backButton.render(matrices, textRenderer, mouseX, mouseY);
y = mouseY - startY; int yOffset = (height/2)-56;
}
drawContext.fill(x, y, x+windowWidth, y+windowHeight, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : module.category.color);
drawContext.fill(x+2, y+2, x+windowWidth-2, y+windowHeight-2, Moonlight.THEME.background.getRGB());
drawContext.fill(x, y, x+windowWidth, y+16, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : module.category.color);
//drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, Moonlight.THEME.background.getRGB());
drawContext.drawText(textRenderer, module.name, x+((windowWidth/2)-(textRenderer.getWidth(module.name)/2)), y+4, Moonlight.THEME.headerText.getRGB(), false);
drawContext.drawText(textRenderer, module.description, x+8, y+24, Moonlight.THEME.text.getRGB(), false);
backButton.render(drawContext, textRenderer, mouseX, mouseY, x+4, y+4);
if (module.showEditButton) editButton.render(drawContext, textRenderer, mouseX, mouseY, x+windowWidth-22, y+4);
int yOffset = y+40;
for (Setting setting : module.settings) for (Setting setting : module.settings)
{ {
setting.render(drawContext, x+16, yOffset, mouseX, mouseY, textRenderer); setting.render(matrices, (width/2)-96, yOffset, mouseX, mouseY);
yOffset += 25; yOffset += setting.height + 1;
} }
} // add keybind setting here eventually
public boolean barHovered(int mouseX, int mouseY)
{
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + 16;
} }
@Override @Override
@ -68,14 +47,7 @@ public class SettingsScreen extends Screen
@Override @Override
public boolean mouseClicked(double mouseX, double mouseY, int button) 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); 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);
@ -86,7 +58,6 @@ public class SettingsScreen extends Screen
@Override @Override
public boolean mouseReleased(double mouseX, double mouseY, int button) public boolean mouseReleased(double mouseX, double mouseY, int button)
{ {
dragging = false;
for (Setting setting : module.settings) for (Setting setting : module.settings)
{ {
setting.mouseReleased(mouseX, mouseY, button); setting.mouseReleased(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,15 +1,29 @@
package me.kawaiizenbo.moonlight.util; package me.kawaiizenbo.moonlight.util;
import org.jetbrains.annotations.Nullable;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
public class ChatUtils public class ChatUtils
{ {
private static MinecraftClient mc = MinecraftClient.getInstance(); private static MinecraftClient mc = MinecraftClient.getInstance();
public static void sendMsg(String message) public static void sendMsg(String message)
{
sendMsg(null, null, Text.literal(message));
}
public static void sendMsg(@Nullable String prefixTitle, @Nullable Formatting prefixColor, Text msg)
{ {
if (mc.world == null) return; if (mc.world == null) return;
mc.inGameHud.getChatHud().addMessage(Text.literal(message));
//Text message = Text.literal("");
//message.append(CommandManager.get().getPrefix());
//if (prefixTitle != null) message.append(CommandManager.get().getPrefix());
//message.append(msg);
mc.inGameHud.getChatHud().addMessage(msg);
} }
} }

View file

@ -27,14 +27,4 @@ public class ColorUtils
public static String strikethrough = "\247m"; public static String strikethrough = "\247m";
public static String obfuscated = "\247k"; public static String obfuscated = "\247k";
public static String reset = "\247r"; public static String reset = "\247r";
public static int rgbaToInt(int r, int g, int b, int a)
{
return ((a&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
}
public static int rgbToInt(int r, int g, int b)
{
return ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
}
} }

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);
}
}

View file

@ -1,6 +0,0 @@
package me.kawaiizenbo.moonlight.util;
public interface ISimpleOption<T>
{
public void setValueUnrestricted(T value);
}

View file

@ -1,710 +0,0 @@
package me.kawaiizenbo.moonlight.util;
public class KeycodeUtils
{
public static String[] keyTable = {
"",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Space",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"'",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
",",
"-",
".",
"/",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"Unknown",
";",
"Unknown",
"=",
"Unknown",
"Unknown",
"Unknown",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"[",
"\\",
"]",
"Unknown",
"Unknown",
"`",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"World 1",
"World 2",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Escape",
"Enter",
"Tab",
"Backspace",
"Insert",
"Delete",
"Right",
"Left",
"Down",
"Up",
"Page Up",
"Page Down",
"Home",
"End",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Caps Lock",
"Scroll Lock",
"Num Lock",
"Print Screen",
"Pause",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"F1",
"F2",
"F3",
"F4",
"F5",
"F6",
"F7",
"F8",
"F9",
"F10",
"F11",
"F12",
"F13",
"F14",
"F15",
"F16",
"F17",
"F18",
"F19",
"F20",
"F21",
"F22",
"F23",
"F24",
"F25",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Num 0",
"Num 1",
"Num 2",
"Num 3",
"Num 4",
"Num 5",
"Num 6",
"Num 7",
"Num 8",
"Num 9",
"Num .",
"Num /",
"Num *",
"Num -",
"Num +",
"Num Enter",
"Num =",
"Unknown",
"Unknown",
"Unknown",
"Left Shift",
"Left Control",
"Left Alt",
"Left Command",
"Right Shift",
"Right Control",
"Right Alt",
"Right Command",
"Menu",
"Last",
};
public static String[] shiftedKeyTable = {
"",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Space",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"\"",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"<",
"_",
">",
"?",
")",
"!",
"@",
"#",
"$",
"%",
"^",
"&",
"*",
"(",
"Unknown",
":",
"Unknown",
"+",
"Unknown",
"Unknown",
"Unknown",
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"{",
"|",
"}",
"Unknown",
"Unknown",
"~",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"World 1",
"World 2",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Escape",
"Enter",
"Tab",
"Backspace",
"Insert",
"Delete",
"Right",
"Left",
"Down",
"Up",
"Page Up",
"Page Down",
"Home",
"End",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Caps Lock",
"Scroll Lock",
"Num Lock",
"Print Screen",
"Pause",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"F1",
"F2",
"F3",
"F4",
"F5",
"F6",
"F7",
"F8",
"F9",
"F10",
"F11",
"F12",
"F13",
"F14",
"F15",
"F16",
"F17",
"F18",
"F19",
"F20",
"F21",
"F22",
"F23",
"F24",
"F25",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Unknown",
"Num 0",
"Num 1",
"Num 2",
"Num 3",
"Num 4",
"Num 5",
"Num 6",
"Num 7",
"Num 8",
"Num 9",
"Num .",
"Num /",
"Num *",
"Num -",
"Num +",
"Num Enter",
"Num =",
"Unknown",
"Unknown",
"Unknown",
"Left Shift",
"Left Control",
"Left Alt",
"Left Command",
"Right Shift",
"Right Control",
"Right Alt",
"Right Command",
"Menu",
"Last",
};
}

View file

@ -17,19 +17,6 @@ public class MathUtils
return bd.doubleValue(); return bd.doubleValue();
} }
public static int d2iSafe(Object value)
{
int out = 0;
try
{
out = (int)Math.floor((double)value);
} catch (Exception e)
{
out = (int)value;
}
return out;
}
public static double length2D(Vec3d vec3d) public static double length2D(Vec3d vec3d)
{ {
return MathHelper.sqrt((float)(vec3d.x * vec3d.x + vec3d.z * vec3d.z)); return MathHelper.sqrt((float)(vec3d.x * vec3d.x + vec3d.z * vec3d.z));

View file

@ -1,35 +0,0 @@
package me.kawaiizenbo.moonlight.util;
import java.lang.reflect.Method;
public class ReflectionUtils
{
public static Method tryGetMethod(String methodName, Class<?> class1)
{
// safety be damned this is my own code i get to control when it crashes
try
{
return class1.getDeclaredMethod(methodName, new Class[1]);
}
catch (Exception e)
{
e.printStackTrace();
return (Method)null;
}
}
public static void tryCallMethod(Method method, Object... parameters)
{
// hope that shits static
try
{
method.invoke(null, parameters);
}
catch (Exception e)
{
// go fuck yourself
e.printStackTrace();
}
}
}

View file

@ -1,32 +0,0 @@
package me.kawaiizenbo.moonlight.util;
public class Timer
{
public long lastMS = System.currentTimeMillis();
public void reset()
{
lastMS = System.currentTimeMillis();
}
public boolean hasTimeElapsed(long time, boolean reset)
{
if (lastMS > System.currentTimeMillis())
{
lastMS = System.currentTimeMillis();
}
if (System.currentTimeMillis()-lastMS > time)
{
if (reset) reset();
return true;
}
else
{
return false;
}
}
}

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: 181 B

Some files were not shown because too many files have changed in this diff Show more