Compare commits
23 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
995f452c2f | ||
![]() |
faf56e1e16 | ||
![]() |
72ec2869b8 | ||
![]() |
75c83f0ca7 | ||
![]() |
8abcd7341e | ||
![]() |
2e01a65ab4 | ||
![]() |
8f9a6005f5 | ||
![]() |
1b0729658d | ||
![]() |
fd96ca5d42 | ||
![]() |
bd5573c48f | ||
![]() |
854ce7201c | ||
![]() |
ccbb4c00ce | ||
![]() |
a055d56084 | ||
![]() |
206d076fbb | ||
![]() |
b8bb14081e | ||
![]() |
e5d1d3ef73 | ||
![]() |
90347f7476 | ||
![]() |
8f6646b7e0 | ||
![]() |
31ecdd4f04 | ||
![]() |
9ab102a648 | ||
![]() |
a3e7e885ac | ||
![]() |
00e91b98aa | ||
![]() |
253ee1d5be |
14
.github/workflows/build.yml
vendored
|
@ -1,8 +1,3 @@
|
||||||
# Automatically build the project and run any configured tests for every push
|
|
||||||
# and submitted pull request. This can help catch issues that only occur on
|
|
||||||
# certain platforms or Java versions, and provides a first line of defence
|
|
||||||
# against bad commits.
|
|
||||||
|
|
||||||
name: build
|
name: build
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
@ -10,12 +5,11 @@ jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
# Use these Java versions
|
|
||||||
java: [
|
java: [
|
||||||
21, # Current Java LTS & minimum supported by Minecraft
|
21, # java version used since 1.20.5
|
||||||
]
|
]
|
||||||
# and run on both Linux and Windows
|
# only linux
|
||||||
os: [ubuntu-22.04]
|
os: [ubuntu-latest]
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- name: checkout repository
|
- name: checkout repository
|
||||||
|
@ -28,12 +22,10 @@ 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 == '21' }} # 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
|
||||||
|
|
|
@ -4,8 +4,8 @@ Requires Fabric, Fabric API, and Minecraft 1.21
|
||||||
|
|
||||||
Default ClickGUI Key is Right Alt.
|
Default ClickGUI Key is Right Alt.
|
||||||
|
|
||||||
Grab the latest release build [here](https://github.com/kawaiizenbo/MoonlightMeadows/releases)
|
Grab the latest release build [here](https://github.com/kawaiizenbo/MoonlightMeadows/releases)
|
||||||
Grab the latest nightly build [here](https://nightly.link/kawaiizenbo/MoonlightMeadows/workflows/build/main/Artifacts.zip)
|
Grab the latest nightly build [here](https://nightly.link/kawaiizenbo/MoonlightMeadows/workflows/build/main/Artifacts.zip)
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||

|

|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'fabric-loom' version '1.6-SNAPSHOT'
|
id 'fabric-loom' version '1.8-SNAPSHOT'
|
||||||
id 'maven-publish'
|
id 'maven-publish'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
minecraft_version=1.21.4
|
||||||
yarn_mappings=1.21+build.2
|
yarn_mappings=1.21.4+build.8
|
||||||
loader_version=0.15.11
|
loader_version=0.16.10
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 0.2.0
|
mod_version = 0.4.0
|
||||||
maven_group = me.kawaiizenbo
|
maven_group = me.kawaiizenbo
|
||||||
archives_base_name = moonlight
|
archives_base_name = moonlight
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
fabric_version=0.100.1+1.21
|
fabric_version=0.115.0+1.21.4
|
||||||
|
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
|
@ -14,10 +14,13 @@ import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
import me.kawaiizenbo.moonlight.module.Module;
|
import me.kawaiizenbo.moonlight.module.Module;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
|
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
|
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
|
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
|
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
|
||||||
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
|
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
|
||||||
public class Config
|
public class Config
|
||||||
|
@ -41,6 +44,7 @@ public class Config
|
||||||
public void loadDefaultConfig()
|
public void loadDefaultConfig()
|
||||||
{
|
{
|
||||||
ModuleManager.INSTANCE = new ModuleManager();
|
ModuleManager.INSTANCE = new ModuleManager();
|
||||||
|
config.put("theme", 2);
|
||||||
Map<String, Object> mi = new HashMap<>();
|
Map<String, Object> mi = new HashMap<>();
|
||||||
for (Module m : ModuleManager.INSTANCE.modules)
|
for (Module m : ModuleManager.INSTANCE.modules)
|
||||||
{
|
{
|
||||||
|
@ -49,7 +53,6 @@ public class Config
|
||||||
Map<String, Object> ms = new HashMap<>();
|
Map<String, Object> ms = new HashMap<>();
|
||||||
for (Setting s : m.settings)
|
for (Setting s : m.settings)
|
||||||
{
|
{
|
||||||
// sometimes i wish i were a nymphet instead of a massive nerd
|
|
||||||
if (s instanceof BooleanSetting)
|
if (s instanceof BooleanSetting)
|
||||||
{
|
{
|
||||||
ms.put(s.name, ((BooleanSetting)s).value);
|
ms.put(s.name, ((BooleanSetting)s).value);
|
||||||
|
@ -58,19 +61,60 @@ public class Config
|
||||||
{
|
{
|
||||||
ms.put(s.name, ((DoubleSetting)s).value);
|
ms.put(s.name, ((DoubleSetting)s).value);
|
||||||
}
|
}
|
||||||
if (s instanceof StringSetting)
|
else if (s instanceof StringSetting)
|
||||||
{
|
{
|
||||||
ms.put(s.name, ((StringSetting)s).value);
|
ms.put(s.name, ((StringSetting)s).value);
|
||||||
}
|
}
|
||||||
else if (s instanceof KeycodeSetting)
|
else if (s instanceof KeycodeSetting)
|
||||||
{
|
{
|
||||||
ms.put(s.name, ((KeycodeSetting)s).value);
|
ms.put(s.name, ((KeycodeSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof IndexSetting)
|
||||||
|
{
|
||||||
|
ms.put(s.name, ((IndexSetting)s).index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mo.put("settings", ms);
|
mo.put("settings", ms);
|
||||||
mi.put(m.name, mo);
|
mi.put(m.name, mo);
|
||||||
}
|
}
|
||||||
config.put("modules", mi);
|
config.put("modules", mi);
|
||||||
|
|
||||||
|
HUDModuleManager.INSTANCE = new HUDModuleManager();
|
||||||
|
Map<String, Object> hi = new HashMap<>();
|
||||||
|
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
Map<String, Object> ho = new HashMap<>();
|
||||||
|
ho.put("enabled", h.enabled);
|
||||||
|
Map<String, Object> hs = new HashMap<>();
|
||||||
|
for (Setting s : h.settings)
|
||||||
|
{
|
||||||
|
if (s instanceof BooleanSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((BooleanSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof DoubleSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((DoubleSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof StringSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((StringSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof KeycodeSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((KeycodeSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof IndexSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((IndexSetting)s).index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ho.put("settings", hs);
|
||||||
|
ho.put("x", h.x);
|
||||||
|
ho.put("y", h.y);
|
||||||
|
hi.put(h.name, ho);
|
||||||
|
}
|
||||||
|
config.put("hud", hi);
|
||||||
int xOffset = 4;
|
int xOffset = 4;
|
||||||
int yOffset = 4;
|
int yOffset = 4;
|
||||||
Map<String, Object> pi = new HashMap<>();
|
Map<String, Object> pi = new HashMap<>();
|
||||||
|
@ -92,7 +136,8 @@ public class Config
|
||||||
ClickGUIScreen.INSTANCE = new ClickGUIScreen();
|
ClickGUIScreen.INSTANCE = new ClickGUIScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load() throws IOException
|
@SuppressWarnings("unchecked")
|
||||||
|
public void load() throws IOException
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,11 +12,15 @@ import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
import me.kawaiizenbo.moonlight.module.Module;
|
import me.kawaiizenbo.moonlight.module.Module;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
|
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
|
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
|
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
||||||
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
|
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
|
||||||
|
import me.kawaiizenbo.moonlight.theme.Theme;
|
||||||
import me.kawaiizenbo.moonlight.ui.clickgui.CategoryPane;
|
import me.kawaiizenbo.moonlight.ui.clickgui.CategoryPane;
|
||||||
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
|
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
|
||||||
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
|
||||||
public class Moonlight implements ModInitializer
|
public class Moonlight implements ModInitializer
|
||||||
|
@ -24,10 +28,10 @@ public class Moonlight implements ModInitializer
|
||||||
public static final Moonlight INSTANCE = new Moonlight();
|
public static final Moonlight INSTANCE = new Moonlight();
|
||||||
public static final Logger LOGGER = LoggerFactory.getLogger("Moonlight");
|
public static final Logger LOGGER = LoggerFactory.getLogger("Moonlight");
|
||||||
public static final String clientTag = ColorUtils.aqua + "Moonlight Meadows";
|
public static final String clientTag = ColorUtils.aqua + "Moonlight Meadows";
|
||||||
public static final String versionTag = ColorUtils.magenta + "v0.2.0";
|
public static final String versionTag = ColorUtils.magenta + "v0.4.0";
|
||||||
|
public static Theme THEME = Theme.DARK;
|
||||||
|
public static int THEME_IDX = 2;
|
||||||
public static Config CONFIG = new Config();
|
public static Config CONFIG = new Config();
|
||||||
public static int uiColorA = 0xFF55FFFF;
|
|
||||||
public static int uiColor = 0x55FFFF;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize()
|
public void onInitialize()
|
||||||
|
@ -36,12 +40,15 @@ public class Moonlight implements ModInitializer
|
||||||
loadConfig();
|
loadConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public void loadConfig()
|
public void loadConfig()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LOGGER.info("Loading config...");
|
LOGGER.info("Loading config...");
|
||||||
CONFIG.load();
|
CONFIG.load();
|
||||||
|
THEME_IDX = ((Double)CONFIG.config.get("theme")).intValue();
|
||||||
|
THEME = Theme.THEME_LIST[THEME_IDX];
|
||||||
for (Module m : ModuleManager.INSTANCE.modules)
|
for (Module m : ModuleManager.INSTANCE.modules)
|
||||||
{
|
{
|
||||||
m.enabled = (boolean)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("enabled");
|
m.enabled = (boolean)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("enabled");
|
||||||
|
@ -62,6 +69,39 @@ public class Moonlight implements ModInitializer
|
||||||
else if (s instanceof KeycodeSetting)
|
else if (s instanceof KeycodeSetting)
|
||||||
{
|
{
|
||||||
((KeycodeSetting)s).value = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("settings")).get(s.name)).intValue();
|
((KeycodeSetting)s).value = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("settings")).get(s.name)).intValue();
|
||||||
|
}
|
||||||
|
else if (s instanceof IndexSetting)
|
||||||
|
{
|
||||||
|
((IndexSetting)s).index = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("settings")).get(s.name)).intValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (HUDModule m : HUDModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
m.enabled = (boolean)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("enabled");
|
||||||
|
m.x = ((Double)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("x")).intValue();
|
||||||
|
m.y = ((Double)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("y")).intValue();
|
||||||
|
for (Setting s : m.settings)
|
||||||
|
{
|
||||||
|
if (s instanceof BooleanSetting)
|
||||||
|
{
|
||||||
|
((BooleanSetting)s).value = (boolean)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name);
|
||||||
|
}
|
||||||
|
else if (s instanceof DoubleSetting)
|
||||||
|
{
|
||||||
|
((DoubleSetting)s).value = (Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name);
|
||||||
|
}
|
||||||
|
else if (s instanceof StringSetting)
|
||||||
|
{
|
||||||
|
((StringSetting)s).value = (String)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name);
|
||||||
|
}
|
||||||
|
else if (s instanceof KeycodeSetting)
|
||||||
|
{
|
||||||
|
((KeycodeSetting)s).value = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name)).intValue();
|
||||||
|
}
|
||||||
|
else if (s instanceof IndexSetting)
|
||||||
|
{
|
||||||
|
((IndexSetting)s).index = ((Double)((Map<String, Object>)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("hud")).get(m.name)).get("settings")).get(s.name)).intValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,6 +118,7 @@ public class Moonlight implements ModInitializer
|
||||||
public void saveConfig()
|
public void saveConfig()
|
||||||
{
|
{
|
||||||
LOGGER.info("Saving config...");
|
LOGGER.info("Saving config...");
|
||||||
|
CONFIG.config.put("theme", THEME_IDX);
|
||||||
Map<String, Object> mi = new HashMap<>();
|
Map<String, Object> mi = new HashMap<>();
|
||||||
for (Module m : ModuleManager.INSTANCE.modules)
|
for (Module m : ModuleManager.INSTANCE.modules)
|
||||||
{
|
{
|
||||||
|
@ -94,19 +135,60 @@ public class Moonlight implements ModInitializer
|
||||||
{
|
{
|
||||||
ms.put(s.name, ((DoubleSetting)s).value);
|
ms.put(s.name, ((DoubleSetting)s).value);
|
||||||
}
|
}
|
||||||
if (s instanceof StringSetting)
|
else if (s instanceof StringSetting)
|
||||||
{
|
{
|
||||||
ms.put(s.name, ((StringSetting)s).value);
|
ms.put(s.name, ((StringSetting)s).value);
|
||||||
}
|
}
|
||||||
else if (s instanceof KeycodeSetting)
|
else if (s instanceof KeycodeSetting)
|
||||||
{
|
{
|
||||||
ms.put(s.name, ((KeycodeSetting)s).value);
|
ms.put(s.name, ((KeycodeSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof IndexSetting)
|
||||||
|
{
|
||||||
|
ms.put(s.name, ((IndexSetting)s).index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mo.put("settings", ms);
|
mo.put("settings", ms);
|
||||||
mi.put(m.name, mo);
|
mi.put(m.name, mo);
|
||||||
}
|
}
|
||||||
CONFIG.config.put("modules", mi);
|
CONFIG.config.put("modules", mi);
|
||||||
|
|
||||||
|
Map<String, Object> hi = new HashMap<>();
|
||||||
|
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
Map<String, Object> ho = new HashMap<>();
|
||||||
|
ho.put("enabled", h.enabled);
|
||||||
|
Map<String, Object> hs = new HashMap<>();
|
||||||
|
for (Setting s : h.settings)
|
||||||
|
{
|
||||||
|
if (s instanceof BooleanSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((BooleanSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof DoubleSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((DoubleSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof StringSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((StringSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof KeycodeSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((KeycodeSetting)s).value);
|
||||||
|
}
|
||||||
|
else if (s instanceof IndexSetting)
|
||||||
|
{
|
||||||
|
hs.put(s.name, ((IndexSetting)s).index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ho.put("settings", hs);
|
||||||
|
ho.put("x", h.x);
|
||||||
|
ho.put("y", h.y);
|
||||||
|
hi.put(h.name, ho);
|
||||||
|
}
|
||||||
|
CONFIG.config.put("hud", hi);
|
||||||
|
|
||||||
Map<String, Object> pi = new HashMap<>();
|
Map<String, Object> pi = new HashMap<>();
|
||||||
for (CategoryPane c : ClickGUIScreen.INSTANCE.categoryPanes)
|
for (CategoryPane c : ClickGUIScreen.INSTANCE.categoryPanes)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,7 +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 SettingCommand());
|
|
||||||
add(new Reset());
|
add(new Reset());
|
||||||
add(new DeathPos());
|
add(new DeathPos());
|
||||||
commands.sort(Comparator.comparing(Command::getName));
|
commands.sort(Comparator.comparing(Command::getName));
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
package me.kawaiizenbo.moonlight.command.commands;
|
|
||||||
|
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.command.Command;
|
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
|
||||||
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
|
|
||||||
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
|
|
||||||
import me.kawaiizenbo.moonlight.module.settings.KeycodeSetting;
|
|
||||||
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
|
||||||
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
|
|
||||||
import me.kawaiizenbo.moonlight.util.ChatUtils;
|
|
||||||
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
|
||||||
import me.kawaiizenbo.moonlight.module.Module;
|
|
||||||
import net.minecraft.command.CommandSource;
|
|
||||||
|
|
||||||
public class SettingCommand extends Command
|
|
||||||
{
|
|
||||||
public SettingCommand()
|
|
||||||
{
|
|
||||||
super("setting", "Change a setting of a module.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(LiteralArgumentBuilder<CommandSource> builder)
|
|
||||||
{
|
|
||||||
builder
|
|
||||||
.then(argument("module", StringArgumentType.string())
|
|
||||||
.then(argument("setting", StringArgumentType.string())
|
|
||||||
.then(argument("value", StringArgumentType.string())
|
|
||||||
.executes(context ->
|
|
||||||
{
|
|
||||||
String m = context.getArgument("module", String.class);
|
|
||||||
String s = context.getArgument("setting", String.class);
|
|
||||||
String v = context.getArgument("value", String.class);
|
|
||||||
|
|
||||||
Module module = ModuleManager.INSTANCE.getModuleByName(m);
|
|
||||||
if (module == null)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Invalid Module Name");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Setting setting = module.getSettingByName(s);
|
|
||||||
if (setting == null)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Invalid Setting Name");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setting instanceof BooleanSetting)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
((BooleanSetting)setting).value = Boolean.parseBoolean(v);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected boolean");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (setting instanceof DoubleSetting)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
((DoubleSetting)setting).value = Double.parseDouble(v);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected Double");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (setting instanceof StringSetting)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
((StringSetting)setting).value = v;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected String");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (setting instanceof KeycodeSetting)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
int kv = Integer.parseInt(v);
|
|
||||||
if (kv > 348)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Keycode Value is too high, maximum is 348 (Menu)");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (kv < 0)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Keycode Value must be positive");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
((KeycodeSetting)setting).value = kv;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected Keycode (integer)");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return SINGLE_SUCCESS;
|
|
||||||
}))));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -24,7 +24,8 @@ public class ClientPlayerEntityMixin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true)
|
@SuppressWarnings("resource")
|
||||||
|
@Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true)
|
||||||
public void onTick(CallbackInfo ci)
|
public void onTick(CallbackInfo ci)
|
||||||
{
|
{
|
||||||
for (Module m : ModuleManager.INSTANCE.getEnabledModules())
|
for (Module m : ModuleManager.INSTANCE.getEnabledModules())
|
||||||
|
|
|
@ -6,8 +6,10 @@ 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.ui.HUDOverlay;
|
import me.kawaiizenbo.moonlight.module.modules.HUDEnabler;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.LegacyHUD;
|
||||||
import me.kawaiizenbo.moonlight.ui.ModulesListOverlay;
|
import me.kawaiizenbo.moonlight.ui.ModulesListOverlay;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.hud.InGameHud;
|
import net.minecraft.client.gui.hud.InGameHud;
|
||||||
import net.minecraft.client.render.RenderTickCounter;
|
import net.minecraft.client.render.RenderTickCounter;
|
||||||
|
@ -18,7 +20,12 @@ public class InGameHudMixin {
|
||||||
@Inject(at = @At("TAIL"), method = "render")
|
@Inject(at = @At("TAIL"), method = "render")
|
||||||
public void onRender (DrawContext drawContext, RenderTickCounter tickCounter, CallbackInfo info)
|
public void onRender (DrawContext drawContext, RenderTickCounter tickCounter, CallbackInfo info)
|
||||||
{
|
{
|
||||||
if (ModuleManager.INSTANCE.getModuleByName("HUD").enabled) HUDOverlay.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
|
HUDEnabler hudModule = (HUDEnabler)ModuleManager.INSTANCE.getModuleByName("HUD");
|
||||||
|
if (hudModule.enabled)
|
||||||
|
{
|
||||||
|
if (hudModule.mode.index == 1) LegacyHUD.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
|
||||||
|
else HUDRenderer.INSTANCE.render(drawContext);
|
||||||
|
}
|
||||||
if (ModuleManager.INSTANCE.getModuleByName("ModulesList").enabled) ModulesListOverlay.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
|
if (ModuleManager.INSTANCE.getModuleByName("ModulesList").enabled) ModulesListOverlay.INSTANCE.render(drawContext, drawContext.getScaledWindowWidth(), drawContext.getScaledWindowHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ public abstract class Module
|
||||||
public Category category;
|
public Category category;
|
||||||
public boolean enabled;
|
public boolean enabled;
|
||||||
public ArrayList<Setting> settings;
|
public ArrayList<Setting> settings;
|
||||||
|
public boolean showEditButton;
|
||||||
|
|
||||||
public BooleanSetting showInModulesList = new BooleanSetting("Show in Modules List", true);
|
public BooleanSetting showInModulesList = new BooleanSetting("Show in Modules List", true);
|
||||||
public KeycodeSetting keybind = new KeycodeSetting("Keybind", 0);
|
public KeycodeSetting keybind = new KeycodeSetting("Keybind", 0);
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class ModuleManager
|
||||||
registerModules(
|
registerModules(
|
||||||
new Fly(),
|
new Fly(),
|
||||||
new NoFall(),
|
new NoFall(),
|
||||||
new HUDModule(),
|
new HUDEnabler(),
|
||||||
new Step(),
|
new Step(),
|
||||||
new Fullbright(),
|
new Fullbright(),
|
||||||
new Speed(),
|
new Speed(),
|
||||||
|
@ -23,7 +23,9 @@ public class ModuleManager
|
||||||
new Rotation(),
|
new Rotation(),
|
||||||
new AutoJump(),
|
new AutoJump(),
|
||||||
new Reach(),
|
new Reach(),
|
||||||
new AntiPowderSnow()
|
new AntiPowderSnow(),
|
||||||
|
new AutoTotem(),
|
||||||
|
new AutoWalk()
|
||||||
/*new Timer()*/
|
/*new Timer()*/
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package me.kawaiizenbo.moonlight.module.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
|
import me.kawaiizenbo.moonlight.module.Module;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.screen.slot.SlotActionType;
|
||||||
|
|
||||||
|
public class AutoTotem extends Module
|
||||||
|
{
|
||||||
|
public BooleanSetting overrideItems = new BooleanSetting("Override other items", false);
|
||||||
|
|
||||||
|
public AutoTotem()
|
||||||
|
{
|
||||||
|
super("Auto Totem", "Automatically puts totems in offhand.", Category.COMBAT);
|
||||||
|
settings.add(overrideItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick()
|
||||||
|
{
|
||||||
|
if (mc.player.getInventory().offHand.get(0).getItem() != Items.TOTEM_OF_UNDYING)
|
||||||
|
{
|
||||||
|
if((!mc.player.getInventory().offHand.isEmpty()) && !overrideItems.value) return;
|
||||||
|
for (int i = 0; i <= 35; i++)
|
||||||
|
{
|
||||||
|
if (mc.player.getInventory().getStack(i).getItem() == Items.TOTEM_OF_UNDYING)
|
||||||
|
{
|
||||||
|
mc.interactionManager.clickSlot(0, i, 8, SlotActionType.SWAP, mc.player);
|
||||||
|
mc.interactionManager.clickSlot(0, 45, 8, SlotActionType.SWAP, mc.player);
|
||||||
|
mc.interactionManager.clickSlot(0, i, 8, SlotActionType.SWAP, mc.player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package me.kawaiizenbo.moonlight.module.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
|
import me.kawaiizenbo.moonlight.module.Module;
|
||||||
|
|
||||||
|
public class AutoWalk extends Module
|
||||||
|
{
|
||||||
|
|
||||||
|
public AutoWalk()
|
||||||
|
{
|
||||||
|
super("Auto Walk", "Automatically moves forward.", Category.MOVEMENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick()
|
||||||
|
{
|
||||||
|
mc.options.forwardKey.setPressed(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable()
|
||||||
|
{
|
||||||
|
super.onDisable();
|
||||||
|
mc.options.forwardKey.setPressed(false);
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,8 @@ public class Fullbright extends Module
|
||||||
super("Fullbright", "Allows you to see in the dark.", Category.RENDER);
|
super("Fullbright", "Allows you to see in the dark.", Category.RENDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
public void onEnable()
|
public void onEnable()
|
||||||
{
|
{
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package me.kawaiizenbo.moonlight.module.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
|
import me.kawaiizenbo.moonlight.module.Module;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.IndexSetting;
|
||||||
|
|
||||||
|
public class HUDEnabler extends Module
|
||||||
|
{
|
||||||
|
public IndexSetting mode = new IndexSetting("Mode", 0, "Modular", "Legacy");
|
||||||
|
|
||||||
|
public HUDEnabler()
|
||||||
|
{
|
||||||
|
super("HUD", "The Moonlight HUD.", Category.RENDER);
|
||||||
|
this.enabled = true;
|
||||||
|
this.showInModulesList.value = false;
|
||||||
|
this.showEditButton = true;
|
||||||
|
settings.add(mode);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,51 +0,0 @@
|
||||||
package me.kawaiizenbo.moonlight.module.modules;
|
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.Moonlight;
|
|
||||||
import me.kawaiizenbo.moonlight.module.Category;
|
|
||||||
import me.kawaiizenbo.moonlight.module.Module;
|
|
||||||
import me.kawaiizenbo.moonlight.module.settings.BooleanSetting;
|
|
||||||
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
|
|
||||||
import me.kawaiizenbo.moonlight.ui.HUDOverlay;
|
|
||||||
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
|
||||||
|
|
||||||
public class HUDModule extends Module
|
|
||||||
{
|
|
||||||
public BooleanSetting clientTag = new BooleanSetting("Client Tag", true);
|
|
||||||
public DoubleSetting r = new DoubleSetting("Red", 0x55, 0, 255, 0);
|
|
||||||
public DoubleSetting g = new DoubleSetting("Green", 255, 0, 255, 0);
|
|
||||||
public DoubleSetting b = new DoubleSetting("Blue", 255, 0, 255, 0);
|
|
||||||
//public ColorSetting color = new ColorSetting("Color", 0x55FFFF, ReflectionUtils.tryGetMethod("updateHUD", getClass()));
|
|
||||||
|
|
||||||
public HUDModule()
|
|
||||||
{
|
|
||||||
super("HUD", "The Moonlight HUD. Toggle to update.", Category.RENDER);
|
|
||||||
this.enabled = true;
|
|
||||||
this.showInModulesList.value = false;
|
|
||||||
|
|
||||||
settings.add(clientTag);
|
|
||||||
settings.add(r);
|
|
||||||
settings.add(g);
|
|
||||||
settings.add(b);
|
|
||||||
//settings.add(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEnable()
|
|
||||||
{
|
|
||||||
super.onEnable();
|
|
||||||
HUDOverlay.INSTANCE.showClientTag = clientTag.value;
|
|
||||||
Moonlight.uiColorA =
|
|
||||||
ColorUtils.rgbaToInt(
|
|
||||||
(int)r.value,
|
|
||||||
(int)g.value,
|
|
||||||
(int)b.value,
|
|
||||||
255
|
|
||||||
);
|
|
||||||
Moonlight.uiColor =
|
|
||||||
ColorUtils.rgbToInt(
|
|
||||||
(int)r.value,
|
|
||||||
(int)g.value,
|
|
||||||
(int)b.value
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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));
|
if(mc.player.fallDistance >= 2.5) mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(true, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,22 +23,22 @@ public class Reach extends Module
|
||||||
public void onEnable()
|
public void onEnable()
|
||||||
{
|
{
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
oldBe = mc.player.getAttributeInstance(EntityAttributes.PLAYER_BLOCK_INTERACTION_RANGE).getBaseValue();
|
oldBe = mc.player.getAttributeInstance(EntityAttributes.BLOCK_INTERACTION_RANGE).getBaseValue();
|
||||||
oldEe = mc.player.getAttributeInstance(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE).getBaseValue();
|
oldEe = mc.player.getAttributeInstance(EntityAttributes.ENTITY_INTERACTION_RANGE).getBaseValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick()
|
public void tick()
|
||||||
{
|
{
|
||||||
mc.player.getAttributeInstance(EntityAttributes.PLAYER_BLOCK_INTERACTION_RANGE).setBaseValue(blockRange.value);
|
mc.player.getAttributeInstance(EntityAttributes.BLOCK_INTERACTION_RANGE).setBaseValue(blockRange.value);
|
||||||
mc.player.getAttributeInstance(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE).setBaseValue(entityRange.value);
|
mc.player.getAttributeInstance(EntityAttributes.ENTITY_INTERACTION_RANGE).setBaseValue(entityRange.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable()
|
public void onDisable()
|
||||||
{
|
{
|
||||||
super.onDisable();
|
super.onDisable();
|
||||||
mc.player.getAttributeInstance(EntityAttributes.PLAYER_BLOCK_INTERACTION_RANGE).setBaseValue(oldBe);
|
mc.player.getAttributeInstance(EntityAttributes.BLOCK_INTERACTION_RANGE).setBaseValue(oldBe);
|
||||||
mc.player.getAttributeInstance(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE).setBaseValue(oldEe);
|
mc.player.getAttributeInstance(EntityAttributes.ENTITY_INTERACTION_RANGE).setBaseValue(oldEe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,20 +20,20 @@ public class Speed extends Module
|
||||||
public void onEnable()
|
public void onEnable()
|
||||||
{
|
{
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
old = mc.player.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED).getBaseValue();
|
old = mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).getBaseValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick()
|
public void tick()
|
||||||
{
|
{
|
||||||
mc.player.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED).setBaseValue(speed.value/10d);
|
mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).setBaseValue(speed.value/10d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable()
|
public void onDisable()
|
||||||
{
|
{
|
||||||
super.onDisable();
|
super.onDisable();
|
||||||
mc.player.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED).setBaseValue(old);
|
mc.player.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED).setBaseValue(old);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,19 +20,19 @@ public class Step extends Module
|
||||||
public void onEnable()
|
public void onEnable()
|
||||||
{
|
{
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
old = mc.player.getAttributeInstance(EntityAttributes.GENERIC_STEP_HEIGHT).getBaseValue();
|
old = mc.player.getAttributeInstance(EntityAttributes.STEP_HEIGHT).getBaseValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick()
|
public void tick()
|
||||||
{
|
{
|
||||||
mc.player.getAttributeInstance(EntityAttributes.GENERIC_STEP_HEIGHT).setBaseValue(stepHeight.value);
|
mc.player.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(stepHeight.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable()
|
public void onDisable()
|
||||||
{
|
{
|
||||||
super.onDisable();
|
super.onDisable();
|
||||||
mc.player.getAttributeInstance(EntityAttributes.GENERIC_STEP_HEIGHT).setBaseValue(old);
|
mc.player.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(old);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package me.kawaiizenbo.moonlight.module.settings;
|
package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
@ -18,10 +19,10 @@ public class BooleanSetting extends Setting
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
|
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
drawContext.fill(x+180, y+7, x+190, y+17, 0xFFFFFFFF);
|
drawContext.fill(x+180, y+7, x+190, y+17, Moonlight.THEME.border.getRGB());
|
||||||
drawContext.fill(x+181, y+8, x+189, y+16, 0xFF222222);
|
drawContext.fill(x+181, y+8, x+189, y+16, Moonlight.THEME.background.getRGB());
|
||||||
drawContext.fill(x+182, y+9, x+188, y+15, value ? 0xFF55FFFF : 0xFF222222);
|
drawContext.fill(x+182, y+9, x+188, y+15, value ? Moonlight.THEME.accent.getRGB() : Moonlight.THEME.background.getRGB());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package me.kawaiizenbo.moonlight.module.settings;
|
package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import me.kawaiizenbo.moonlight.util.MathUtils;
|
import me.kawaiizenbo.moonlight.util.MathUtils;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
@ -26,7 +27,7 @@ public class DoubleSetting extends Setting
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+4, 0xFFFFFF);
|
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+4, Moonlight.THEME.text.getRGB(), false);
|
||||||
double diff = Math.min(100, Math.max(0, (mouseX - x)/1.9));
|
double diff = Math.min(100, Math.max(0, (mouseX - x)/1.9));
|
||||||
|
|
||||||
if (sliding)
|
if (sliding)
|
||||||
|
@ -43,11 +44,11 @@ public class DoubleSetting extends Setting
|
||||||
}
|
}
|
||||||
|
|
||||||
String valueString = ""+MathUtils.round(value, roundingPlace);
|
String valueString = ""+MathUtils.round(value, roundingPlace);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(valueString), (x+190)-textRenderer.getWidth(valueString), y+4, 0xFFFFFF);
|
drawContext.drawText(textRenderer, Text.literal(valueString), (x+190)-textRenderer.getWidth(valueString), y+4, Moonlight.THEME.text.getRGB(), false);
|
||||||
drawContext.fill(x+2, y+16, x+190, y+18, 0xFF666666);
|
drawContext.fill(x+2, y+16, x+190, y+18, 0xFF777777);
|
||||||
int scaledValue = (int)((value/max)*190);
|
int scaledValue = (int)((value/max)*190);
|
||||||
drawContext.fill(x+2, y+16, (x+2)+scaledValue, y+18, 0xFF55FFFF);
|
drawContext.fill(x+2, y+16, (x+2)+scaledValue, y+18, Moonlight.THEME.accent.getRGB());
|
||||||
drawContext.fill(x+2+(scaledValue-1), y+14, x+2+(scaledValue+1), y+20, 0xFFFFFFFF);
|
drawContext.fill(x+2+(scaledValue-1), y+14, x+2+(scaledValue+1), y+20, Moonlight.THEME.border.getRGB());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.util.DrawUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
public class IndexSetting extends Setting
|
||||||
|
{
|
||||||
|
public int index;
|
||||||
|
public String[] elements;
|
||||||
|
|
||||||
|
public IndexSetting(String name, int index, String... elements)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.index = index;
|
||||||
|
this.elements = elements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
|
{
|
||||||
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
|
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
|
drawContext.fill(x+96, y+5, x+190, y+19, Moonlight.THEME.border.getRGB());
|
||||||
|
drawContext.fill(x+97, y+6, x+189, y+18, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
|
||||||
|
drawContext.drawText(textRenderer, elements[index], x+98, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
|
drawContext.drawGuiTexture(RenderLayer::getGuiTextured, DrawUtils.getThemedGUIIcon("updown", Moonlight.THEME.background), x+177, y+6, 12, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(double mouseX, double mouseY, int button)
|
||||||
|
{
|
||||||
|
if (hovered((int)mouseX, (int)mouseY) && button == 0)
|
||||||
|
{
|
||||||
|
if (index >= elements.length-1) index = 0;
|
||||||
|
else index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import me.kawaiizenbo.moonlight.util.KeycodeUtils;
|
import me.kawaiizenbo.moonlight.util.KeycodeUtils;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
@ -36,19 +37,19 @@ public class KeycodeSetting extends Setting
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
|
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
if (isWaiting)
|
if (isWaiting)
|
||||||
{
|
{
|
||||||
String waiting = "Press any key.";
|
String waiting = "Press any key.";
|
||||||
int twwidth = textRenderer.getWidth(waiting);
|
int twwidth = textRenderer.getWidth(waiting);
|
||||||
drawContext.drawTextWithShadow(textRenderer, waiting, x+190-twwidth, y+8, 0xFFFFFF);
|
drawContext.drawText(textRenderer, waiting, x+190-twwidth, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String key = KeycodeUtils.keyTable[value];
|
String key = KeycodeUtils.keyTable[value];
|
||||||
if (value == GLFW.GLFW_KEY_UNKNOWN) key = "";
|
if (value == GLFW.GLFW_KEY_UNKNOWN) key = "";
|
||||||
int twidth = textRenderer.getWidth(key);
|
int twidth = textRenderer.getWidth(key);
|
||||||
drawContext.drawTextWithShadow(textRenderer, key, x+190-twidth, y+8, 0xFFFFFF);
|
drawContext.drawText(textRenderer, key, x+190-twidth, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package me.kawaiizenbo.moonlight.module.settings;
|
package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
@ -12,7 +13,7 @@ public class Setting
|
||||||
{
|
{
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
drawContext.fill(x, y, x+192, y+24, hovered(mouseX, mouseY) ? 0xFF444444: 0xFF222222);
|
drawContext.fill(x, y, x+192, y+24, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB(): Moonlight.THEME.background.getRGB());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +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 me.kawaiizenbo.moonlight.util.KeycodeUtils;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
@ -20,13 +21,13 @@ public class StringSetting extends Setting
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
|
drawContext.drawText(textRenderer, Text.literal(name), x+2, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
int twidth = textRenderer.getWidth(value);
|
int twidth = textRenderer.getWidth(value);
|
||||||
drawContext.fill(x+96, y+5, x+190, y+19, 0xFFFFFFFF);
|
drawContext.fill(x+96, y+5, x+190, y+19, Moonlight.THEME.border.getRGB());
|
||||||
drawContext.fill(x+97, y+6, x+189, y+18, 0xFF222222);
|
drawContext.fill(x+97, y+6, x+189, y+18, Moonlight.THEME.background.getRGB());
|
||||||
int cursorPos = x+98+twidth;
|
int cursorPos = x+98+twidth;
|
||||||
if (focused) drawContext.fill(cursorPos, y+7, cursorPos+1, y+17, 0xFF55FFFF);
|
if (focused) drawContext.fill(cursorPos, y+7, cursorPos+1, y+17, Moonlight.THEME.accent.getRGB());
|
||||||
drawContext.drawTextWithShadow(textRenderer, value, x+98, y+8, 0xFFFFFF);
|
drawContext.drawText(textRenderer, value, x+98, y+8, Moonlight.THEME.text.getRGB(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
81
src/main/java/me/kawaiizenbo/moonlight/theme/Theme.java
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
package me.kawaiizenbo.moonlight.theme;
|
||||||
|
|
||||||
|
public class Theme
|
||||||
|
{
|
||||||
|
public static final Theme LIGHT = new Theme(
|
||||||
|
"Light",
|
||||||
|
new ThemeColor(0x222222),
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
new ThemeColor(0xDDDDDD),
|
||||||
|
new ThemeColor(0x00AAAA),
|
||||||
|
new ThemeColor(0x55FFFF),
|
||||||
|
new ThemeColor(0x222222),
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
public static final Theme HIGHCONTRAST = new Theme(
|
||||||
|
"High Contrast",
|
||||||
|
new ThemeColor(0x000000),
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
new ThemeColor(0x777777),
|
||||||
|
new ThemeColor(0x00AAAA),
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
new ThemeColor(0x000000),
|
||||||
|
false,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
public static final Theme DARK = new Theme(
|
||||||
|
"Dark",
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
new ThemeColor(0x222222),
|
||||||
|
new ThemeColor(0x333333),
|
||||||
|
new ThemeColor(0x55FFFF),
|
||||||
|
new ThemeColor(0x55FFFF),
|
||||||
|
new ThemeColor(0xFFFFFF),
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
public static final Theme[] THEME_LIST =
|
||||||
|
{
|
||||||
|
LIGHT, HIGHCONTRAST, DARK
|
||||||
|
};
|
||||||
|
|
||||||
|
public String name;
|
||||||
|
public ThemeColor text;
|
||||||
|
public ThemeColor headerText;
|
||||||
|
public ThemeColor background;
|
||||||
|
public ThemeColor hover;
|
||||||
|
public ThemeColor accent;
|
||||||
|
public ThemeColor hudAccent;
|
||||||
|
public ThemeColor border;
|
||||||
|
public boolean useDarkIcons;
|
||||||
|
public boolean themedWindowBorders;
|
||||||
|
|
||||||
|
public Theme(
|
||||||
|
String name,
|
||||||
|
ThemeColor text,
|
||||||
|
ThemeColor headerText,
|
||||||
|
ThemeColor background,
|
||||||
|
ThemeColor hover,
|
||||||
|
ThemeColor accent,
|
||||||
|
ThemeColor hudAccent,
|
||||||
|
ThemeColor border,
|
||||||
|
boolean useDarkIcons,
|
||||||
|
boolean themedWindowBorders
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.text = text;
|
||||||
|
this.headerText = headerText;
|
||||||
|
this.background = background;
|
||||||
|
this.hover = hover;
|
||||||
|
this.accent = accent;
|
||||||
|
this.hudAccent = hudAccent;
|
||||||
|
this.border = border;
|
||||||
|
this.useDarkIcons = useDarkIcons;
|
||||||
|
this.themedWindowBorders = themedWindowBorders;
|
||||||
|
}
|
||||||
|
}
|
32
src/main/java/me/kawaiizenbo/moonlight/theme/ThemeColor.java
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
package me.kawaiizenbo.moonlight.theme;
|
||||||
|
|
||||||
|
public class ThemeColor
|
||||||
|
{
|
||||||
|
public int r, g, b;
|
||||||
|
|
||||||
|
public ThemeColor(int r, int g, int b)
|
||||||
|
{
|
||||||
|
this.r = r;
|
||||||
|
this.g = g;
|
||||||
|
this.b = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ThemeColor(int RGBcolor)
|
||||||
|
{
|
||||||
|
this.r = (RGBcolor&0x00FF0000)>>16;
|
||||||
|
this.g = (RGBcolor&0x0000FF00)>>8;
|
||||||
|
this.b = (RGBcolor&0x000000FF)>>0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRGB()
|
||||||
|
{
|
||||||
|
return ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRGB(int RGBcolor)
|
||||||
|
{
|
||||||
|
this.r = RGBcolor&0x00FF0000;
|
||||||
|
this.g = RGBcolor&0x0000FF00;
|
||||||
|
this.b = RGBcolor&0x000000FF;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,55 +0,0 @@
|
||||||
package me.kawaiizenbo.moonlight.ui;
|
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.Moonlight;
|
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
|
||||||
import me.kawaiizenbo.moonlight.module.modules.HUDModule;
|
|
||||||
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
|
||||||
import me.kawaiizenbo.moonlight.util.MathUtils;
|
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.gui.DrawContext;
|
|
||||||
import net.minecraft.util.math.Vec3d;
|
|
||||||
|
|
||||||
public class HUDOverlay
|
|
||||||
{
|
|
||||||
public static HUDOverlay INSTANCE = new HUDOverlay();
|
|
||||||
private MinecraftClient mc = MinecraftClient.getInstance();
|
|
||||||
public boolean showClientTag = ((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).clientTag.value;
|
|
||||||
public int hudColor = ColorUtils.rgbaToInt(
|
|
||||||
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).r.value,
|
|
||||||
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).g.value,
|
|
||||||
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).b.value,
|
|
||||||
255 );
|
|
||||||
|
|
||||||
public void render(DrawContext drawContext, int scaledWidth, int scaledHeight)
|
|
||||||
{
|
|
||||||
// do not draw if F3 enabled
|
|
||||||
if (mc.getDebugHud().shouldShowDebugHud()) return;
|
|
||||||
|
|
||||||
// draw stats
|
|
||||||
drawContext.drawTextWithShadow(mc.textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 2, Moonlight.uiColorA);
|
|
||||||
drawContext.drawTextWithShadow(mc.textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 12, Moonlight.uiColorA);
|
|
||||||
drawContext.drawTextWithShadow(mc.textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, Moonlight.uiColorA);
|
|
||||||
|
|
||||||
// draw coordinates
|
|
||||||
drawContext.drawTextWithShadow(mc.textRenderer,
|
|
||||||
"X: " + ColorUtils.gray + MathUtils.round(mc.player.getX(), 1) + ColorUtils.reset +
|
|
||||||
" Y: " + ColorUtils.gray + MathUtils.round(mc.player.getY(), 1) + ColorUtils.reset +
|
|
||||||
" Z: " + ColorUtils.gray + MathUtils.round(mc.player.getZ(), 1), 2, scaledHeight - 10, Moonlight.uiColorA
|
|
||||||
);
|
|
||||||
|
|
||||||
// draw client tag (if enabled)
|
|
||||||
if (showClientTag)
|
|
||||||
{
|
|
||||||
drawContext.drawTextWithShadow(mc.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag,
|
|
||||||
scaledWidth - mc.textRenderer.getWidth(Moonlight.clientTag + " " + Moonlight.versionTag) - 2, scaledHeight - 10, 16777215);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private double moveSpeed()
|
|
||||||
{
|
|
||||||
Vec3d move = new Vec3d(mc.player.getX() - mc.player.prevX, 0, mc.player.getZ() - mc.player.prevZ).multiply(20);
|
|
||||||
|
|
||||||
return Math.abs(MathUtils.length2D(move)) ;
|
|
||||||
}
|
|
||||||
}
|
|
45
src/main/java/me/kawaiizenbo/moonlight/ui/LegacyHUD.java
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
import me.kawaiizenbo.moonlight.util.MathUtils;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class LegacyHUD
|
||||||
|
{
|
||||||
|
// This is deprecated and will be removed in a later version
|
||||||
|
public static LegacyHUD INSTANCE = new LegacyHUD();
|
||||||
|
private MinecraftClient mc = MinecraftClient.getInstance();
|
||||||
|
|
||||||
|
public void render(DrawContext drawContext, int scaledWidth, int scaledHeight)
|
||||||
|
{
|
||||||
|
// do not draw if F3 enabled
|
||||||
|
if (mc.getDebugHud().shouldShowDebugHud()) return;
|
||||||
|
|
||||||
|
// draw stats
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 2, 0xFF55FFFF);
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 12, 0xFF55FFFF);
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, 0xFF55FFFF);
|
||||||
|
|
||||||
|
// draw coordinates
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer,
|
||||||
|
"X: " + ColorUtils.gray + String.format("%.1f", mc.player.getX()) + ColorUtils.reset +
|
||||||
|
" Y: " + ColorUtils.gray + String.format("%.1f", mc.player.getY()) + ColorUtils.reset +
|
||||||
|
" Z: " + ColorUtils.gray + String.format("%.1f", mc.player.getZ()), 2, scaledHeight - 10, 0xFF55FFFF
|
||||||
|
);
|
||||||
|
|
||||||
|
// draw client tag
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag,
|
||||||
|
scaledWidth - mc.textRenderer.getWidth(Moonlight.clientTag + " " + Moonlight.versionTag) - 2, scaledHeight - 10, 16777215);
|
||||||
|
}
|
||||||
|
|
||||||
|
private double moveSpeed()
|
||||||
|
{
|
||||||
|
Vec3d move = new Vec3d(mc.player.getX() - mc.player.prevX, 0, mc.player.getZ() - mc.player.prevZ).multiply(20);
|
||||||
|
|
||||||
|
return Math.abs(MathUtils.length2D(move)) ;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,6 @@ package me.kawaiizenbo.moonlight.ui;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.Moonlight;
|
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
import me.kawaiizenbo.moonlight.module.Module;
|
import me.kawaiizenbo.moonlight.module.Module;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
@ -11,6 +10,8 @@ import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
public class ModulesListOverlay
|
public class ModulesListOverlay
|
||||||
{
|
{
|
||||||
|
// this will be replaced with a new hud version at some point
|
||||||
|
|
||||||
public static ModulesListOverlay INSTANCE = new ModulesListOverlay();
|
public static ModulesListOverlay INSTANCE = new ModulesListOverlay();
|
||||||
private MinecraftClient mc = MinecraftClient.getInstance();
|
private MinecraftClient mc = MinecraftClient.getInstance();
|
||||||
private ArrayList<Module> enabledModules = ModuleManager.INSTANCE.getEnabledModules();
|
private ArrayList<Module> enabledModules = ModuleManager.INSTANCE.getEnabledModules();
|
||||||
|
@ -26,7 +27,7 @@ public class ModulesListOverlay
|
||||||
if (!m.showInModulesList.value) continue;
|
if (!m.showInModulesList.value) continue;
|
||||||
int nameWidth = mc.textRenderer.getWidth(m.name);
|
int nameWidth = mc.textRenderer.getWidth(m.name);
|
||||||
drawContext.fill(scaledWidth - nameWidth - 8, yOffset, scaledWidth, yOffset+12, 0x77222222);
|
drawContext.fill(scaledWidth - nameWidth - 8, yOffset, scaledWidth, yOffset+12, 0x77222222);
|
||||||
drawContext.fill(scaledWidth - 2, yOffset, scaledWidth, yOffset+12, Moonlight.uiColorA);
|
drawContext.fill(scaledWidth - 2, yOffset, scaledWidth, yOffset+12, 0xFF55FFFF);
|
||||||
drawContext.drawText(mc.textRenderer, m.name, scaledWidth - nameWidth - 4, yOffset + 2, 0xFFFFFFFF, false);
|
drawContext.drawText(mc.textRenderer, m.name, scaledWidth - nameWidth - 4, yOffset + 2, 0xFFFFFFFF, false);
|
||||||
yOffset += 12;
|
yOffset += 12;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,33 @@
|
||||||
package me.kawaiizenbo.moonlight.ui;
|
package me.kawaiizenbo.moonlight.ui;
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
public class TextButton
|
public class SetScreenButton
|
||||||
{
|
{
|
||||||
String text;
|
String text;
|
||||||
int x, y, color, width;
|
Screen screen;
|
||||||
|
int x, y, width;
|
||||||
|
|
||||||
public TextButton(String text, int x, int y, int color)
|
public SetScreenButton(String text, int x, int y, Screen screen)
|
||||||
{
|
{
|
||||||
this.text = text;
|
this.text = text;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.color = color;
|
this.screen = screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY)
|
public void render(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY, int x, int y)
|
||||||
{
|
{
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
width = textRenderer.getWidth(text);
|
width = textRenderer.getWidth(text);
|
||||||
drawContext.fill(x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0x55FFFFFF : 0);
|
drawContext.fill(x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0x22222222 : 0);
|
||||||
drawContext.drawText(textRenderer, Text.literal(text), x, y, color, true);
|
drawContext.drawText(textRenderer, Text.literal(text), x, y, Moonlight.THEME.headerText.getRGB(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hovered(int mouseX, int mouseY)
|
public boolean hovered(int mouseX, int mouseY)
|
||||||
|
@ -35,8 +39,7 @@ public class TextButton
|
||||||
{
|
{
|
||||||
if (hovered(mouseX, mouseY))
|
if (hovered(mouseX, mouseY))
|
||||||
{
|
{
|
||||||
// i have no clue how to pass a method so this is kind of stupid
|
MinecraftClient.getInstance().setScreen(screen);
|
||||||
MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,11 +2,14 @@ package me.kawaiizenbo.moonlight.ui.clickgui;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import me.kawaiizenbo.moonlight.module.Category;
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
|
import me.kawaiizenbo.moonlight.util.DrawUtils;
|
||||||
import me.kawaiizenbo.moonlight.module.Module;
|
import me.kawaiizenbo.moonlight.module.Module;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
public class CategoryPane
|
public class CategoryPane
|
||||||
|
@ -26,7 +29,7 @@ public class CategoryPane
|
||||||
this.y = initialY;
|
this.y = initialY;
|
||||||
this.collapsed = collapsed;
|
this.collapsed = collapsed;
|
||||||
moduleButtons = new ArrayList<ModuleButton>();
|
moduleButtons = new ArrayList<ModuleButton>();
|
||||||
icon = Identifier.of("moonlight", category.name.toLowerCase());
|
icon = DrawUtils.getThemedGUIIcon(category.name.toLowerCase());
|
||||||
for (Module m : ModuleManager.INSTANCE.getModulesByCategory(category))
|
for (Module m : ModuleManager.INSTANCE.getModulesByCategory(category))
|
||||||
{
|
{
|
||||||
moduleButtons.add(new ModuleButton(m));
|
moduleButtons.add(new ModuleButton(m));
|
||||||
|
@ -42,10 +45,10 @@ public class CategoryPane
|
||||||
x = mouseX - startX;
|
x = mouseX - startX;
|
||||||
y = mouseY - startY;
|
y = mouseY - startY;
|
||||||
}
|
}
|
||||||
drawContext.fill(x, y, x+width, collapsed ? y+16 : y+height, category.color);
|
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) ? 0xFF333333 : 0xFF222222);
|
//drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
|
||||||
drawContext.drawGuiTexture(icon, x+2, y+2, 12, 12);
|
drawContext.drawGuiTexture(RenderLayer::getGuiTextured, icon, x+2, y+2, 12, 12);
|
||||||
drawContext.drawText(textRenderer, category.name, x+16, y+4, 0xFFFFFFFF, false);
|
drawContext.drawText(textRenderer, category.name, x+16, y+4, Moonlight.THEME.headerText.getRGB(), false);
|
||||||
if (!collapsed)
|
if (!collapsed)
|
||||||
{
|
{
|
||||||
int buttonYOffset = y+16;
|
int buttonYOffset = y+16;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.Moonlight;
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import me.kawaiizenbo.moonlight.module.Category;
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
|
import me.kawaiizenbo.moonlight.theme.Theme;
|
||||||
import me.kawaiizenbo.moonlight.util.MathUtils;
|
import me.kawaiizenbo.moonlight.util.MathUtils;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
@ -15,6 +16,7 @@ public class ClickGUIScreen extends Screen
|
||||||
public static ClickGUIScreen INSTANCE = new ClickGUIScreen();
|
public static ClickGUIScreen INSTANCE = new ClickGUIScreen();
|
||||||
public ArrayList<CategoryPane> categoryPanes;
|
public ArrayList<CategoryPane> categoryPanes;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public ClickGUIScreen()
|
public ClickGUIScreen()
|
||||||
{
|
{
|
||||||
super(Text.literal("ClickGUI"));
|
super(Text.literal("ClickGUI"));
|
||||||
|
@ -34,6 +36,9 @@ public class ClickGUIScreen extends Screen
|
||||||
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
|
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
|
||||||
{
|
{
|
||||||
this.renderBackground(drawContext, mouseX, mouseY, delta);
|
this.renderBackground(drawContext, mouseX, mouseY, delta);
|
||||||
|
drawContext.fill(width-80, height-16, width, height, Moonlight.THEME.border.getRGB());
|
||||||
|
drawContext.fill(width-78, height-14, width-2, height-2, (mouseX > width-80 && mouseY > height-16) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
|
||||||
|
drawContext.drawText(textRenderer, "Change Theme", width-75, height-12, Moonlight.THEME.text.getRGB(), false);
|
||||||
for (CategoryPane category : categoryPanes)
|
for (CategoryPane category : categoryPanes)
|
||||||
{
|
{
|
||||||
category.render(drawContext, mouseX, mouseY, delta, textRenderer);
|
category.render(drawContext, mouseX, mouseY, delta, textRenderer);
|
||||||
|
@ -47,6 +52,12 @@ public class ClickGUIScreen extends Screen
|
||||||
{
|
{
|
||||||
category.mouseClicked((int) mouseX, (int) mouseY, button);
|
category.mouseClicked((int) mouseX, (int) mouseY, button);
|
||||||
}
|
}
|
||||||
|
if (mouseX > width-80 && mouseY > height-16)
|
||||||
|
{
|
||||||
|
if (Moonlight.THEME_IDX >= Theme.THEME_LIST.length-1) Moonlight.THEME_IDX = 0;
|
||||||
|
else Moonlight.THEME_IDX++;
|
||||||
|
Moonlight.THEME = Theme.THEME_LIST[Moonlight.THEME_IDX];
|
||||||
|
}
|
||||||
return super.mouseClicked(mouseX, mouseY, button);
|
return super.mouseClicked(mouseX, mouseY, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,8 @@ public class ModuleButton
|
||||||
{
|
{
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
drawContext.fill(x, y, x + width, y + height, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
|
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.uiColor : 0xFFFFFF, false);
|
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.THEME.accent.getRGB() : Moonlight.THEME.text.getRGB(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hovered(int mouseX, int mouseY)
|
public boolean hovered(int mouseX, int mouseY)
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
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.TextButton;
|
import me.kawaiizenbo.moonlight.ui.SetScreenButton;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.editor.HUDEditorScreen;
|
||||||
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
@ -11,7 +13,8 @@ import net.minecraft.text.Text;
|
||||||
public class SettingsScreen extends Screen
|
public class SettingsScreen extends Screen
|
||||||
{
|
{
|
||||||
private Module module;
|
private Module module;
|
||||||
private TextButton backButton;
|
private SetScreenButton backButton;
|
||||||
|
private SetScreenButton editButton;
|
||||||
|
|
||||||
boolean dragging = false;
|
boolean dragging = false;
|
||||||
int startX, startY, x = (ClickGUIScreen.INSTANCE.width/2)-112, y = (ClickGUIScreen.INSTANCE.height/2)-96, windowWidth = 224, windowHeight = 192;
|
int startX, startY, x = (ClickGUIScreen.INSTANCE.width/2)-112, y = (ClickGUIScreen.INSTANCE.height/2)-96, windowWidth = 224, windowHeight = 192;
|
||||||
|
@ -19,6 +22,8 @@ public class SettingsScreen extends Screen
|
||||||
public SettingsScreen(Module module)
|
public SettingsScreen(Module module)
|
||||||
{
|
{
|
||||||
super(Text.literal("Settings"));
|
super(Text.literal("Settings"));
|
||||||
|
backButton = new SetScreenButton(ColorUtils.underline + "< Back", x+4, y+4, ClickGUIScreen.INSTANCE);
|
||||||
|
editButton = new SetScreenButton(ColorUtils.underline + "Edit", x+windowWidth-22, y+4, HUDEditorScreen.INSTANCE);
|
||||||
this.module = module;
|
this.module = module;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,13 +38,14 @@ public class SettingsScreen extends Screen
|
||||||
x = mouseX - startX;
|
x = mouseX - startX;
|
||||||
y = mouseY - startY;
|
y = mouseY - startY;
|
||||||
}
|
}
|
||||||
drawContext.fill(x, y, x+windowWidth, y+windowHeight, 0xFF222222);
|
drawContext.fill(x, y, x+windowWidth, y+windowHeight, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : module.category.color);
|
||||||
drawContext.fill(x, y, x+windowWidth, y+16, module.category.color);
|
drawContext.fill(x+2, y+2, x+windowWidth-2, y+windowHeight-2, Moonlight.THEME.background.getRGB());
|
||||||
drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, 0xFF222222);
|
drawContext.fill(x, y, x+windowWidth, y+16, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : module.category.color);
|
||||||
drawContext.drawCenteredTextWithShadow(textRenderer, module.name, x+(windowWidth/2), y+4, 0xFFFFFF);
|
//drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, Moonlight.THEME.background.getRGB());
|
||||||
drawContext.drawText(textRenderer, module.description, x+8, y+24, 0xFFFFFF, true);
|
drawContext.drawText(textRenderer, module.name, x+((windowWidth/2)-(textRenderer.getWidth(module.name)/2)), y+4, Moonlight.THEME.headerText.getRGB(), false);
|
||||||
backButton = new TextButton(ColorUtils.underline + "< Back", x+4, y+4, 0xFFFFFF);
|
drawContext.drawText(textRenderer, module.description, x+8, y+24, Moonlight.THEME.text.getRGB(), false);
|
||||||
backButton.render(drawContext, textRenderer, mouseX, mouseY);
|
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;
|
int yOffset = y+40;
|
||||||
for (Setting setting : module.settings)
|
for (Setting setting : module.settings)
|
||||||
{
|
{
|
||||||
|
@ -69,6 +75,7 @@ public class SettingsScreen extends Screen
|
||||||
dragging = true;
|
dragging = true;
|
||||||
}
|
}
|
||||||
backButton.mouseClicked((int)mouseX, (int)mouseY);
|
backButton.mouseClicked((int)mouseX, (int)mouseY);
|
||||||
|
editButton.mouseClicked((int)mouseX, (int)mouseY);
|
||||||
for (Setting setting : module.settings)
|
for (Setting setting : module.settings)
|
||||||
{
|
{
|
||||||
setting.mouseClicked(mouseX, mouseY, button);
|
setting.mouseClicked(mouseX, mouseY, button);
|
||||||
|
|
68
src/main/java/me/kawaiizenbo/moonlight/ui/hud/HUDModule.java
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public abstract class HUDModule
|
||||||
|
{
|
||||||
|
public int x, y, height, width;
|
||||||
|
public String name;
|
||||||
|
int startX, startY;
|
||||||
|
boolean dragging = false;
|
||||||
|
public boolean enabled = false;
|
||||||
|
public ArrayList<Setting> settings;
|
||||||
|
|
||||||
|
protected static MinecraftClient mc = MinecraftClient.getInstance();
|
||||||
|
|
||||||
|
public HUDModule(String name, int x, int y)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
settings = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
if (editMode)
|
||||||
|
{
|
||||||
|
if (dragging)
|
||||||
|
{
|
||||||
|
x = mouseX - startX;
|
||||||
|
y = mouseY - startY;
|
||||||
|
}
|
||||||
|
drawContext.fill(x-1, y-1, x+width+1, y+height+1, enabled ? Moonlight.THEME.accent.getRGB() : 0xFF555555);
|
||||||
|
drawContext.fill(x, y, x+width, y+height, 0xFF222222);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hovered(int mouseX, int mouseY)
|
||||||
|
{
|
||||||
|
return mouseX >= x && mouseX <= x+width && mouseY >= y && mouseY <= y+height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseClicked(int mouseX, int mouseY, int button)
|
||||||
|
{
|
||||||
|
if (hovered(mouseX, mouseY) && button == 0)
|
||||||
|
{
|
||||||
|
startX = (int)mouseX-x;
|
||||||
|
startY = (int)mouseY-y;
|
||||||
|
dragging = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseReleased(int mouseX, int mouseY, int button)
|
||||||
|
{
|
||||||
|
dragging = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void toggle()
|
||||||
|
{
|
||||||
|
enabled = !enabled;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.modules.*;
|
||||||
|
|
||||||
|
public class HUDModuleManager
|
||||||
|
{
|
||||||
|
public static HUDModuleManager INSTANCE = new HUDModuleManager();
|
||||||
|
public ArrayList<HUDModule> modules = new ArrayList<>();
|
||||||
|
|
||||||
|
public HUDModuleManager()
|
||||||
|
{
|
||||||
|
registerModules(
|
||||||
|
new ClientTag(2, 2),
|
||||||
|
new FPS(2, 12),
|
||||||
|
new Ping(2, 22),
|
||||||
|
new MovementSpeed(2, 32),
|
||||||
|
new Coordinates(2, 42),
|
||||||
|
new ArmorDisplay(2, 52),
|
||||||
|
new TotemCounter(20, 52)
|
||||||
|
//new TestModuleHUD(20, 50)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerModules(HUDModule... modules)
|
||||||
|
{
|
||||||
|
for (HUDModule module : modules) {
|
||||||
|
this.modules.add(module);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public HUDModule getModuleByName(String moduleName)
|
||||||
|
{
|
||||||
|
for(HUDModule module : modules)
|
||||||
|
{
|
||||||
|
if ((module.name.trim().equalsIgnoreCase(moduleName)))
|
||||||
|
{
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<HUDModule> getEnabledModules()
|
||||||
|
{
|
||||||
|
ArrayList<HUDModule> enabledModules = new ArrayList<>();
|
||||||
|
for (HUDModule module : modules)
|
||||||
|
{
|
||||||
|
if (!module.enabled)
|
||||||
|
continue;
|
||||||
|
enabledModules.add(module);
|
||||||
|
}
|
||||||
|
return enabledModules;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public class HUDRenderer
|
||||||
|
{
|
||||||
|
public static HUDRenderer INSTANCE = new HUDRenderer();
|
||||||
|
private MinecraftClient mc = MinecraftClient.getInstance();
|
||||||
|
|
||||||
|
public void render(DrawContext drawContext)
|
||||||
|
{
|
||||||
|
// do not draw if F3 enabled
|
||||||
|
if (mc.getDebugHud().shouldShowDebugHud()) return;
|
||||||
|
|
||||||
|
for (HUDModule h : HUDModuleManager.INSTANCE.getEnabledModules())
|
||||||
|
{
|
||||||
|
// mouse coords are not needed when not in edit mode
|
||||||
|
h.render(drawContext, 0, 0, mc.textRenderer, false, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.editor;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
public class HUDEditorScreen extends Screen
|
||||||
|
{
|
||||||
|
public static HUDEditorScreen INSTANCE = new HUDEditorScreen();
|
||||||
|
HUDModuleList moduleList;
|
||||||
|
|
||||||
|
public HUDEditorScreen()
|
||||||
|
{
|
||||||
|
super(Text.literal("HUD Editor"));
|
||||||
|
moduleList = new HUDModuleList(256, 2, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
|
||||||
|
{
|
||||||
|
this.renderBackground(drawContext, mouseX, mouseY, delta);
|
||||||
|
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
h.render(drawContext, mouseX, mouseY, textRenderer, true, h.enabled);
|
||||||
|
}
|
||||||
|
moduleList.render(drawContext, mouseX, mouseY, delta, textRenderer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseClicked(double mouseX, double mouseY, int button)
|
||||||
|
{
|
||||||
|
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
h.mouseClicked((int)mouseX, (int)mouseY, button);
|
||||||
|
}
|
||||||
|
moduleList.mouseClicked((int)mouseX, (int)mouseY, button);
|
||||||
|
return super.mouseClicked(mouseX, mouseY, button);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseReleased(double mouseX, double mouseY, int button)
|
||||||
|
{
|
||||||
|
for (HUDModule h : HUDModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
h.mouseReleased((int)mouseX, (int)mouseY, button);
|
||||||
|
}
|
||||||
|
moduleList.mouseReleased((int)mouseX, (int)mouseY, button);
|
||||||
|
return super.mouseReleased(mouseX, mouseY, button);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldPause()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.editor;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
public class HUDModuleButton
|
||||||
|
{
|
||||||
|
public HUDModule module;
|
||||||
|
public int x, y, width, height = 0;
|
||||||
|
|
||||||
|
public HUDModuleButton(HUDModule module)
|
||||||
|
{
|
||||||
|
this.module = module;
|
||||||
|
this.width = 124;
|
||||||
|
this.height = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, int x, int y, TextRenderer textRenderer)
|
||||||
|
{
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
drawContext.fill(x, y, x + width, y + height, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
|
||||||
|
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.THEME.accent.getRGB() : Moonlight.THEME.text.getRGB(), false);
|
||||||
|
if (!module.settings.isEmpty()) drawContext.drawGuiTexture(RenderLayer::getGuiTextured, Identifier.of("moonlight", "settings"), x+width-12, y, 12, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hovered(int mouseX, int mouseY)
|
||||||
|
{
|
||||||
|
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean mouseClicked(int mouseX, int mouseY, int button)
|
||||||
|
{
|
||||||
|
if (hovered(mouseX, mouseY))
|
||||||
|
{
|
||||||
|
if (button == 0)
|
||||||
|
{
|
||||||
|
module.toggle();
|
||||||
|
}
|
||||||
|
else if (button == 1)
|
||||||
|
{
|
||||||
|
if (!module.settings.isEmpty()) MinecraftClient.getInstance().setScreen(new HUDModuleSettingsScreen(module));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.editor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModuleManager;
|
||||||
|
import me.kawaiizenbo.moonlight.util.DrawUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
public class HUDModuleList
|
||||||
|
{
|
||||||
|
public int x, y, height, width = 128;
|
||||||
|
int startX, startY;
|
||||||
|
boolean dragging = false;
|
||||||
|
public boolean collapsed = false;
|
||||||
|
ArrayList<HUDModuleButton> buttons;
|
||||||
|
|
||||||
|
public HUDModuleList(int initialX, int initialY, boolean collapsed)
|
||||||
|
{
|
||||||
|
this.x = initialX;
|
||||||
|
this.y = initialY;
|
||||||
|
this.collapsed = collapsed;
|
||||||
|
buttons = new ArrayList<HUDModuleButton>();
|
||||||
|
for (HUDModule m : HUDModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
buttons.add(new HUDModuleButton(m));
|
||||||
|
}
|
||||||
|
if (buttons.size() == 0) collapsed = true;
|
||||||
|
height = (buttons.size()*12) + 18;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta, TextRenderer textRenderer)
|
||||||
|
{
|
||||||
|
if (dragging)
|
||||||
|
{
|
||||||
|
x = mouseX - startX;
|
||||||
|
y = mouseY - startY;
|
||||||
|
}
|
||||||
|
drawContext.fill(x, y, x+width, collapsed ? y+16 : y+height, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : Moonlight.THEME.accent.getRGB());
|
||||||
|
//drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? Moonlight.THEME.hover.getRGB() : Moonlight.THEME.background.getRGB());
|
||||||
|
drawContext.drawGuiTexture(RenderLayer::getGuiTextured, DrawUtils.getThemedGUIIcon("hud"), x+2, y+2, 12, 12);
|
||||||
|
drawContext.drawText(textRenderer, "HUD Modules", x+16, y+4, Moonlight.THEME.headerText.getRGB(), false);
|
||||||
|
if (!collapsed)
|
||||||
|
{
|
||||||
|
int buttonYOffset = y+16;
|
||||||
|
for (HUDModuleButton m : buttons)
|
||||||
|
{
|
||||||
|
m.render(drawContext, mouseX, mouseY, x+2, buttonYOffset, textRenderer);
|
||||||
|
buttonYOffset += 12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hovered(int mouseX, int mouseY)
|
||||||
|
{
|
||||||
|
return mouseX >= x+2 && mouseX <= x+(width-2) && mouseY >= y+2 && mouseY <= y+14;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseClicked(int mouseX, int mouseY, int button)
|
||||||
|
{
|
||||||
|
for (HUDModuleButton moduleButton : buttons)
|
||||||
|
{
|
||||||
|
if (moduleButton.mouseClicked(mouseX, mouseY, button)) return;
|
||||||
|
}
|
||||||
|
if (hovered(mouseX, mouseY) && button == 1) collapsed = !collapsed;
|
||||||
|
else if (hovered(mouseX, mouseY) && button == 0)
|
||||||
|
{
|
||||||
|
startX = (int)mouseX-x;
|
||||||
|
startY = (int)mouseY-y;
|
||||||
|
dragging = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseReleased(int mouseX, int mouseY, int button)
|
||||||
|
{
|
||||||
|
dragging = false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.editor;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.SetScreenButton;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
public class HUDModuleSettingsScreen extends Screen
|
||||||
|
{
|
||||||
|
// adapted for hud modules
|
||||||
|
private HUDModule module;
|
||||||
|
private SetScreenButton backButton;
|
||||||
|
|
||||||
|
boolean dragging = false;
|
||||||
|
int startX, startY, x = (HUDEditorScreen.INSTANCE.width/2)-112, y = (HUDEditorScreen.INSTANCE.height/2)-96, windowWidth = 224, windowHeight = 192;
|
||||||
|
|
||||||
|
public HUDModuleSettingsScreen(HUDModule module)
|
||||||
|
{
|
||||||
|
super(Text.literal("Settings"));
|
||||||
|
backButton = new SetScreenButton(ColorUtils.underline + "< Back", x+4, y+4, HUDEditorScreen.INSTANCE);
|
||||||
|
this.module = module;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
|
||||||
|
{
|
||||||
|
this.renderBackground(drawContext, mouseX, mouseY, delta);
|
||||||
|
|
||||||
|
// move window if dragging
|
||||||
|
if (dragging)
|
||||||
|
{
|
||||||
|
x = mouseX - startX;
|
||||||
|
y = mouseY - startY;
|
||||||
|
}
|
||||||
|
drawContext.fill(x, y, x+windowWidth, y+windowHeight, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : Moonlight.THEME.accent.getRGB());
|
||||||
|
drawContext.fill(x+2, y+2, x+windowWidth-2, y+windowHeight-2, Moonlight.THEME.background.getRGB());
|
||||||
|
drawContext.fill(x, y, x+windowWidth, y+16, Moonlight.THEME.themedWindowBorders ? Moonlight.THEME.border.getRGB() : Moonlight.THEME.accent.getRGB());
|
||||||
|
//drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, Moonlight.THEME.background.getRGB());
|
||||||
|
drawContext.drawText(textRenderer, module.name, x+((windowWidth/2)-(textRenderer.getWidth(module.name)/2)), y+4, Moonlight.THEME.headerText.getRGB(), false);
|
||||||
|
backButton.render(drawContext, textRenderer, mouseX, mouseY, x+4, y+4);
|
||||||
|
int yOffset = y+24;
|
||||||
|
for (Setting setting : module.settings)
|
||||||
|
{
|
||||||
|
setting.render(drawContext, x+16, yOffset, mouseX, mouseY, textRenderer);
|
||||||
|
yOffset += 25;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean barHovered(int mouseX, int mouseY)
|
||||||
|
{
|
||||||
|
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldPause()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseClicked(double mouseX, double mouseY, int button)
|
||||||
|
{
|
||||||
|
if (barHovered((int)mouseX, (int)mouseY))
|
||||||
|
{
|
||||||
|
startX = (int)mouseX-x;
|
||||||
|
startY = (int)mouseY-y;
|
||||||
|
dragging = true;
|
||||||
|
}
|
||||||
|
backButton.mouseClicked((int)mouseX, (int)mouseY);
|
||||||
|
for (Setting setting : module.settings)
|
||||||
|
{
|
||||||
|
setting.mouseClicked(mouseX, mouseY, button);
|
||||||
|
}
|
||||||
|
return super.mouseClicked(mouseX, mouseY, button);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseReleased(double mouseX, double mouseY, int button)
|
||||||
|
{
|
||||||
|
dragging = false;
|
||||||
|
for (Setting setting : module.settings)
|
||||||
|
{
|
||||||
|
setting.mouseReleased(mouseX, mouseY, button);
|
||||||
|
}
|
||||||
|
return super.mouseReleased(mouseX, mouseY, button);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean keyPressed(int keyCode, int scanCode, int modifiers)
|
||||||
|
{
|
||||||
|
for (Setting setting : module.settings)
|
||||||
|
{
|
||||||
|
setting.keyPressed(keyCode, scanCode, modifiers);
|
||||||
|
}
|
||||||
|
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
public class ArmorDisplay extends HUDModule
|
||||||
|
{
|
||||||
|
|
||||||
|
public ArmorDisplay(int x, int y)
|
||||||
|
{
|
||||||
|
super("Armor Display", x, y);
|
||||||
|
this.width = 16;
|
||||||
|
this.height = 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
int yOffset = 0;
|
||||||
|
for (int i = 39; i >= 36; i--)
|
||||||
|
{
|
||||||
|
ItemStack piece = mc.player.getInventory().getStack(i);
|
||||||
|
drawContext.drawItem(piece, x, y+yOffset);
|
||||||
|
drawContext.drawStackOverlay(textRenderer, piece, x, y+yOffset);
|
||||||
|
yOffset += 16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public class ClientTag extends HUDModule
|
||||||
|
{
|
||||||
|
public ClientTag(int x, int y)
|
||||||
|
{
|
||||||
|
super("Client Tag", x, y);
|
||||||
|
this.width = 128;
|
||||||
|
this.height = 8;
|
||||||
|
this.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag, x, y, 16777215);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public class Coordinates extends HUDModule
|
||||||
|
{
|
||||||
|
public Coordinates(int x, int y)
|
||||||
|
{
|
||||||
|
super("Coordinates", x, y);
|
||||||
|
this.width = 128;
|
||||||
|
this.height = 8;
|
||||||
|
this.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer,
|
||||||
|
"X: " + ColorUtils.gray + String.format("%.1f", mc.player.getX()) + ColorUtils.reset +
|
||||||
|
" Y: " + ColorUtils.gray + String.format("%.1f", mc.player.getY()) + ColorUtils.reset +
|
||||||
|
" Z: " + ColorUtils.gray + String.format("%.1f", mc.player.getZ()), x, y, Moonlight.THEME.hudAccent.getRGB()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public class FPS extends HUDModule
|
||||||
|
{
|
||||||
|
public FPS(int x, int y)
|
||||||
|
{
|
||||||
|
super("FPS", x, y);
|
||||||
|
this.width = 48;
|
||||||
|
this.height = 8;
|
||||||
|
this.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], x, y, Moonlight.THEME.hudAccent.getRGB());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
import me.kawaiizenbo.moonlight.util.MathUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class MovementSpeed extends HUDModule
|
||||||
|
{
|
||||||
|
public MovementSpeed(int x, int y)
|
||||||
|
{
|
||||||
|
super("Movement Speed", x, y);
|
||||||
|
this.width = 72;
|
||||||
|
this.height = 8;
|
||||||
|
this.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), x, y, Moonlight.THEME.hudAccent.getRGB());
|
||||||
|
}
|
||||||
|
|
||||||
|
private double moveSpeed()
|
||||||
|
{
|
||||||
|
Vec3d move = new Vec3d(mc.player.getX() - mc.player.prevX, 0, mc.player.getZ() - mc.player.prevZ).multiply(20);
|
||||||
|
return Math.abs(MathUtils.length2D(move)) ;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public class Ping extends HUDModule
|
||||||
|
{
|
||||||
|
public Ping(int x, int y)
|
||||||
|
{
|
||||||
|
super("Ping", x, y);
|
||||||
|
this.width = 48;
|
||||||
|
this.height = 8;
|
||||||
|
this.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
drawContext.drawTextWithShadow(mc.textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), x, y, Moonlight.THEME.hudAccent.getRGB());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.DoubleSetting;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.StringSetting;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
|
public class TestModuleHUD extends HUDModule
|
||||||
|
{
|
||||||
|
public StringSetting text = new StringSetting("Text", "hii :3");
|
||||||
|
public DoubleSetting number = new DoubleSetting("test", 1, 0, 10, 0);
|
||||||
|
|
||||||
|
public TestModuleHUD(int x, int y)
|
||||||
|
{
|
||||||
|
super("Test HUD Module", x, y);
|
||||||
|
this.width = 96;
|
||||||
|
this.height = 8;
|
||||||
|
settings.add(text);
|
||||||
|
settings.add(number);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
drawContext.drawText(textRenderer, text.value, x, y, 0xFFFFFF, false);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package me.kawaiizenbo.moonlight.ui.hud.modules;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.ui.hud.HUDModule;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
|
||||||
|
public class TotemCounter extends HUDModule
|
||||||
|
{
|
||||||
|
|
||||||
|
public TotemCounter(int x, int y)
|
||||||
|
{
|
||||||
|
super("Totem Counter", x, y);
|
||||||
|
this.width = 24;
|
||||||
|
this.height = 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DrawContext drawContext, int mouseX, int mouseY, TextRenderer textRenderer, boolean editMode, boolean enabled)
|
||||||
|
{
|
||||||
|
super.render(drawContext, mouseX, mouseY, textRenderer, editMode, enabled);
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; i < 36; i++)
|
||||||
|
{
|
||||||
|
ItemStack stack = mc.player.getInventory().getStack(i);
|
||||||
|
if (stack.getItem() == Items.TOTEM_OF_UNDYING) count += stack.getCount();
|
||||||
|
}
|
||||||
|
drawContext.drawItem(Items.TOTEM_OF_UNDYING.getDefaultStack(), x, y);
|
||||||
|
drawContext.drawTextWithShadow(textRenderer, count+"", x+16, y+8, 16777215);
|
||||||
|
}
|
||||||
|
}
|
21
src/main/java/me/kawaiizenbo/moonlight/util/DrawUtils.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package me.kawaiizenbo.moonlight.util;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.theme.ThemeColor;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
public class DrawUtils
|
||||||
|
{
|
||||||
|
public static Identifier getThemedGUIIcon(String textureName, ThemeColor invert)
|
||||||
|
{
|
||||||
|
boolean mode = ((invert.r + invert.g + invert.b) / 3) > 77;
|
||||||
|
String addition = mode ? "_light" : "";
|
||||||
|
return Identifier.of("moonlight", textureName+addition);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Identifier getThemedGUIIcon(String textureName)
|
||||||
|
{
|
||||||
|
String addition = Moonlight.THEME.useDarkIcons ? "_light" : "";
|
||||||
|
return Identifier.of("moonlight", textureName+addition);
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 366 B |
After Width: | Height: | Size: 382 B |
BIN
src/main/resources/assets/moonlight/textures/gui/sprites/hud.png
Normal file
After Width: | Height: | Size: 354 B |
After Width: | Height: | Size: 358 B |
After Width: | Height: | Size: 371 B |
After Width: | Height: | Size: 372 B |
After Width: | Height: | Size: 379 B |
After Width: | Height: | Size: 366 B |
After Width: | Height: | Size: 376 B |
After Width: | Height: | Size: 355 B |
After Width: | Height: | Size: 350 B |
After Width: | Height: | Size: 379 B |
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "moonlight",
|
"id": "moonlight",
|
||||||
"version": "v0.2.0",
|
"version": "v0.4.0",
|
||||||
|
|
||||||
"name": "Moonlight Meadows",
|
"name": "Moonlight Meadows",
|
||||||
"description": "Utility mod with a focus on stability.",
|
"description": "Utility mod with a focus on stability.",
|
||||||
"authors": [
|
"authors": [
|
||||||
"KawaiiZenbo",
|
"KawaiiZenbo",
|
||||||
|
"madeline1805",
|
||||||
"BadGamesInc (re-used Hypnotic Code)"
|
"BadGamesInc (re-used Hypnotic Code)"
|
||||||
],
|
],
|
||||||
"contact": {
|
"contact": {
|
||||||
|
@ -29,9 +29,9 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": ">=0.15.11",
|
"fabricloader": ">=0.16.9",
|
||||||
"fabric-api": "*",
|
"fabric-api": "*",
|
||||||
"minecraft": "~1.21",
|
"minecraft": "~1.21.3",
|
||||||
"java": ">=21"
|
"java": ">=21"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|