Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package top.fpsmaster.features.impl.interfaces;

import top.fpsmaster.features.impl.InterfaceModule;
import top.fpsmaster.features.manager.Category;
import top.fpsmaster.features.settings.impl.BooleanSetting;
import top.fpsmaster.features.settings.impl.ColorSetting;
import top.fpsmaster.features.settings.impl.TextSetting;

import java.awt.Color;

public class ClockDisplay extends InterfaceModule {
public final BooleanSetting showSeconds = new BooleanSetting("ShowSeconds", true);
public final BooleanSetting hour24Mode = new BooleanSetting("Hour24", true);
public final TextSetting label = new TextSetting("Label", "");
public final ColorSetting textColor = new ColorSetting("TextColor", new Color(255, 255, 255, 255));

public ClockDisplay() {
super("ClockDisplay", Category.Interface);
backgroundColor.setColor(new Color(18, 20, 26, 160));
addSettings(showSeconds, hour24Mode, label, textColor, betterFont, fontShadow, bg, rounded, roundRadius, backgroundColor);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package top.fpsmaster.features.impl.interfaces;

import top.fpsmaster.features.impl.InterfaceModule;
import top.fpsmaster.features.manager.Category;
import top.fpsmaster.features.settings.impl.ColorSetting;
import top.fpsmaster.features.settings.impl.TextSetting;

import java.awt.Color;

public class ServerAddressDisplay extends InterfaceModule {
public final TextSetting label = new TextSetting("Label", "");
public final ColorSetting textColor = new ColorSetting("TextColor", new Color(255, 255, 255, 255));

public ServerAddressDisplay() {
super("ServerAddressDisplay", Category.Interface);
backgroundColor.setColor(new Color(18, 20, 26, 160));
addSettings(label, textColor, betterFont, fontShadow, bg, rounded, roundRadius, backgroundColor);
}
}
59 changes: 59 additions & 0 deletions src/main/java/top/fpsmaster/features/impl/utility/ToggleSneak.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package top.fpsmaster.features.impl.utility;

import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import top.fpsmaster.event.Subscribe;
import top.fpsmaster.event.events.EventKey;
import top.fpsmaster.event.events.EventUpdate;
import top.fpsmaster.features.impl.InterfaceModule;
import top.fpsmaster.features.manager.Category;
import top.fpsmaster.features.settings.impl.BindSetting;
import top.fpsmaster.features.settings.impl.BooleanSetting;

public class ToggleSneak extends InterfaceModule {
private final BooleanSetting toggleSneak = new BooleanSetting("ToggleSneak", true);
private final BindSetting toggleKey = new BindSetting("ToggleKey", Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode());
public static boolean using = false;
public static boolean sneak = false;

public ToggleSneak() {
super("ToggleSneak", Category.Utility);
addSettings(toggleSneak, toggleKey, betterFont);
}

@Override
public void onEnable() {
super.onEnable();
using = true;
}

@Subscribe
public void onUpdate(EventUpdate e) {
if (!toggleSneak.getValue()) {
sneak = false;
}
}

@Subscribe
public void onKey(EventKey e) {
if (toggleSneak.getValue() && e.key == toggleKey.getValue()) {
sneak = !sneak;
if (!sneak) {
if (Minecraft.getMinecraft().thePlayer != null) {
Minecraft.getMinecraft().thePlayer.setSneaking(false);
}
}
}
}

@Override
public void onDisable() {
super.onDisable();
KeyBinding.setKeyBindState(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode(), false);
if (Minecraft.getMinecraft().thePlayer != null) {
Minecraft.getMinecraft().thePlayer.setSneaking(false);
}
using = false;
sneak = false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public void init() {
modules.add(new ClientSettings());
modules.add(new BetterScreen());
modules.add(new Sprint());
modules.add(new ToggleSneak());
modules.add(new Performance());
modules.add(new MotionBlur());
modules.add(new SmoothZoom());
Expand All @@ -93,6 +94,8 @@ public void init() {
modules.add(new ArmorDisplay());
modules.add(new BetterChat());
modules.add(new BlockIndicator());
modules.add(new ClockDisplay());
modules.add(new ServerAddressDisplay());
modules.add(new PlayTime());
modules.add(new BetterFishingRod());
modules.add(new ComboDisplay());
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/top/fpsmaster/forge/mixin/MixinKeybinding.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import top.fpsmaster.features.impl.utility.Sprint;
import top.fpsmaster.features.impl.utility.ToggleSneak;
import top.fpsmaster.forge.api.IKeyBinding;

@Mixin(KeyBinding.class)
Expand All @@ -29,6 +30,8 @@ public void setPressed(boolean pressed) {
public void keyDown(CallbackInfoReturnable<Boolean> cir) {
if (Sprint.using && keyCode == net.minecraft.client.Minecraft.getMinecraft().gameSettings.keyBindSprint.getKeyCode())
cir.setReturnValue(Sprint.sprint);
if (ToggleSneak.using && keyCode == net.minecraft.client.Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode())
cir.setReturnValue(ToggleSneak.sneak);
}
}

Expand Down
3 changes: 3 additions & 0 deletions src/main/java/top/fpsmaster/ui/custom/ComponentsManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,11 @@ public void init() {
addComponentSafely("ModsListComponent", ModsListComponent::new);
addComponentSafely("MiniMapComponent", MiniMapComponent::new);
addComponentSafely("SprintComponent", SprintComponent::new);
addComponentSafely("ToggleSneakComponent", ToggleSneakComponent::new);
addComponentSafely("BlockIndicatorComponent", BlockIndicatorComponent::new);
addComponentSafely("PlayTimeComponent", PlayTimeComponent::new);
addComponentSafely("ClockDisplayComponent", ClockDisplayComponent::new);
addComponentSafely("ServerAddressDisplayComponent", ServerAddressDisplayComponent::new);
addComponentSafely("ItemCountDisplayComponent", ItemCountDisplayComponent::new);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package top.fpsmaster.ui.custom.impl;

import top.fpsmaster.FPSMaster;
import top.fpsmaster.features.impl.interfaces.ClockDisplay;
import top.fpsmaster.ui.custom.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

public class ClockDisplayComponent extends Component {
public ClockDisplayComponent() {
super(ClockDisplay.class);
x = 0.60f;
y = 0.05f;
allowScale = true;
}

@Override
public void draw(float x, float y) {
super.draw(x, y);
ClockDisplay module = getModule();

String pattern = module.hour24Mode.getValue() ? "HH:mm" : "hh:mm";
if (module.showSeconds.getValue()) {
pattern += ":ss";
}
if (!module.hour24Mode.getValue()) {
pattern += " a";
}

String timeStr = new SimpleDateFormat(pattern).format(new Date());
String text = getLabel(module) + timeStr;

width = getStringWidth(16, text) + 8;
height = 16f;

drawRect(x - 2, y, width, height, mod.backgroundColor.getColor());
drawString(16, text, x + 2, y + 3, module.textColor.getRGB());
}

private String getLabel(ClockDisplay module) {
String label = module.label.getValue();
if (label == null || label.trim().isEmpty()) {
label = FPSMaster.i18n.get("clockdisplay.defaultlabel");
if ("clockdisplay.defaultlabel".equals(label)) {
label = "Time: ";
}
module.label.setValue(label);
}
if (!label.endsWith(":") && !label.endsWith(":") && !label.endsWith(" ")) {
label += ": ";
}
return label;
}

private ClockDisplay getModule() {
return (ClockDisplay) mod;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package top.fpsmaster.ui.custom.impl;

import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ServerData;
import top.fpsmaster.FPSMaster;
import top.fpsmaster.features.impl.interfaces.ServerAddressDisplay;
import top.fpsmaster.ui.custom.Component;

public class ServerAddressDisplayComponent extends Component {
public ServerAddressDisplayComponent() {
super(ServerAddressDisplay.class);
x = 0.02f;
y = 0.05f;
allowScale = true;
}

@Override
public void draw(float x, float y) {
super.draw(x, y);
ServerAddressDisplay module = getModule();

String address = getServerAddress();
if (address == null) {
return;
}

String text = getLabel(module) + address;
width = getStringWidth(16, text) + 8;
height = 16f;

drawRect(x - 2, y, width, height, mod.backgroundColor.getColor());
drawString(16, text, x + 2, y + 3, module.textColor.getRGB());
}

@Override
public boolean shouldDisplay() {
return mod.isEnabled() && getServerAddress() != null;
}

private String getServerAddress() {
Minecraft mc = Minecraft.getMinecraft();
if (mc == null) return null;

if (mc.isIntegratedServerRunning()) {
return FPSMaster.i18n.get("serveraddressdisplay.singleplayer");
}

ServerData serverData = mc.getCurrentServerData();
if (serverData != null && serverData.serverIP != null && !serverData.serverIP.isEmpty()) {
return serverData.serverIP;
}

return null;
}

private String getLabel(ServerAddressDisplay module) {
String label = module.label.getValue();
if (label == null || label.trim().isEmpty()) {
label = FPSMaster.i18n.get("serveraddressdisplay.defaultlabel");
if ("serveraddressdisplay.defaultlabel".equals(label)) {
label = "Server: ";
}
module.label.setValue(label);
}
if (!label.endsWith(":") && !label.endsWith(":") && !label.endsWith(" ")) {
label += ": ";
}
return label;
}

private ServerAddressDisplay getModule() {
return (ServerAddressDisplay) mod;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package top.fpsmaster.ui.custom.impl;

import top.fpsmaster.features.impl.utility.ToggleSneak;
import top.fpsmaster.ui.custom.Component;

import static top.fpsmaster.utils.core.Utility.mc;

public class ToggleSneakComponent extends Component {
public ToggleSneakComponent() {
super(ToggleSneak.class);
allowScale = true;
}

@Override
public void draw(float x, float y) {
super.draw(x, y);
String text;
if (ToggleSneak.sneak) {
text = "[Sneaking (Toggled)]";
} else {
text = "";
if (mc.thePlayer != null && mc.thePlayer.isSneaking()) {
text = "[Sneaking (Vanilla)]";
}
}
drawString(16, text, x, y, -1);
this.width = getStringWidth(16, text);
this.height = 12;
}
}
33 changes: 33 additions & 0 deletions src/main/resources/assets/minecraft/client/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,12 @@ sprint.desc=Stay sprinting at all times
sprint.togglesprint=Toggle Sprint
sprint.betterfont=Clean Font

togglesneak=Toggle Sneak
togglesneak.desc=Press the toggle key once to keep sneaking
togglesneak.togglesneak=Toggle Sneak
togglesneak.togglekey=Toggle Key
togglesneak.betterfont=Clean Font

autogg=AutoGG
autogg.desc=Automatically send a custom message after a game has ended.
autogg.servers=Servers
Expand Down Expand Up @@ -540,6 +546,33 @@ playtime.unit.seconds=s
playtime.unit.minutes=min
playtime.unit.hours=h

clockdisplay=Clock Display
clockdisplay.desc=Display the current system time on screen
clockdisplay.showseconds=Show Seconds
clockdisplay.hour24=24-Hour Format
clockdisplay.label=Display Text
clockdisplay.textcolor=Text Color
clockdisplay.betterfont=Better Font
clockdisplay.fontshadow=Font Shadow
clockdisplay.defaultlabel=Time:
clockdisplay.background=Show Background
clockdisplay.backgroundcolor=Background Color
clockdisplay.round=Rounded Corners
clockdisplay.roundradius=Corner Radius

serveraddressdisplay=Server Address
serveraddressdisplay.desc=Display the current server IP or world name on screen
serveraddressdisplay.label=Display Text
serveraddressdisplay.textcolor=Text Color
serveraddressdisplay.betterfont=Better Font
serveraddressdisplay.fontshadow=Font Shadow
serveraddressdisplay.defaultlabel=Server:
serveraddressdisplay.singleplayer=Singleplayer
serveraddressdisplay.background=Show Background
serveraddressdisplay.backgroundcolor=Background Color
serveraddressdisplay.round=Rounded Corners
serveraddressdisplay.roundradius=Corner Radius

hitboxes=Hitboxes
hitboxes.desc=Show hitboxes
hitboxes.color=Color
Expand Down
Loading
Loading