Skip to content
2 changes: 1 addition & 1 deletion docs/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ FPSMaster v4将会在此列表任务大部分完成后发布
- [ ] 添加异步光照性能优化
- [ ] 添加自定义迷雾(颜色,距离等)
- [ ] 为客户端的组件颜色选择添加彩色选项
- [ ] 在聊天栏显示头像
- [x] 在聊天栏显示头像
- [ ] HypixelMod(合并AutoGG,AutoPlay以及聊天栏实用功能等)
- [ ] 添加其他版本的支持(1.21.4 等)
- [ ] 允许将正版账号绑定到FPSMaster账号上,并通过正版验证自动登录
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/top/fpsmaster/event/EventDispatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static void registerListener(Object listener) {
if (Event.class.isAssignableFrom(parameterType)) {
Class<? extends Event> eventType = (Class<? extends Event>) parameterType;
List<Handler> listeners = eventListeners.computeIfAbsent(eventType, k -> new CopyOnWriteArrayList<>());
listeners.add(new ReflectHandler(listener, method));
listeners.add(new MethodHandleHandler(listener, method));
}
}
}
Expand Down
43 changes: 43 additions & 0 deletions src/main/java/top/fpsmaster/event/MethodHandleHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package top.fpsmaster.event;

import top.fpsmaster.modules.logger.ClientLogger;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Method;

public class MethodHandleHandler extends Handler {
private final MethodHandle handle;

public MethodHandleHandler(Object listener, Method method) {
super(listener, method);
try {
method.setAccessible(true);
this.handle = MethodHandles.lookup()
.unreflect(method)
.bindTo(listener)
.asType(MethodType.methodType(void.class, Event.class));
} catch (IllegalAccessException exception) {
throw new RuntimeException("Failed to create event handler for " + getLog(), exception);
}
}

@Override
public void invoke(Event event) {
try {
handle.invokeExact(event);
} catch (Throwable throwable) {
ClientLogger.error("Error when invoking event " + getLog());
if (throwable instanceof RuntimeException) {
throw (RuntimeException) throwable;
}
throw new RuntimeException(throwable);
}
}

@Override
public String getLog() {
return listener.getClass().getSimpleName() + " -> " + method.getName();
}
}
2 changes: 1 addition & 1 deletion src/main/java/top/fpsmaster/features/GlobalListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public void onRender(EventRender2D e) {
if (ClientSettings.blur.getValue()) {
StencilUtil.initStencilToWrite();
EventDispatcher.dispatchEvent(new EventShader());
FPSMaster.componentsManager.draw((int) mouseX, (int) mouseY);
FPSMaster.componentsManager.drawBackgroundMasks();
StencilUtil.readStencilBuffer(1);
KawaseBlur.renderBlur(3, 3);
StencilUtil.uninitStencilBuffer();
Expand Down
Loading
Loading