ExtendedAE_Plus/src/main/java/com/extendedae_plus/util/PatternProviderUIHelper.java

128 lines
4.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.extendedae_plus.util;
import appeng.client.gui.implementations.PatternProviderScreen;
import appeng.helpers.patternprovider.PatternProviderLogic;
import appeng.menu.implementations.PatternProviderMenu;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
/**
* 样板供应器UI辅助工具类
* 用于在样板供应器界面中获取PatternProviderLogic对象
*/
public class PatternProviderUIHelper {
/**
* 获取当前打开的样板供应器的PatternProviderLogic
*
* @return PatternProviderLogic对象如果当前没有打开样板供应器界面则返回null
*/
public static PatternProviderLogic getCurrentPatternProvider() {
Minecraft mc = Minecraft.getInstance();
Screen currentScreen = mc.screen;
if (currentScreen instanceof PatternProviderScreen patternScreen) {
PatternProviderMenu menu = (PatternProviderMenu) patternScreen.getMenu();
// 通过反射安全地访问protected字段
try {
var logicField = PatternProviderMenu.class.getDeclaredField("logic");
logicField.setAccessible(true);
return (PatternProviderLogic) logicField.get(menu);
} catch (Exception e) {
// 如果反射失败返回null
return null;
}
}
return null;
}
/**
* 检查当前是否打开了样板供应器界面
*
* @return 如果当前打开的是样板供应器界面则返回true
*/
public static boolean isPatternProviderScreenOpen() {
Minecraft mc = Minecraft.getInstance();
return mc.screen instanceof PatternProviderScreen;
}
/**
* 获取当前样板供应器界面的Screen对象
*
* @return PatternProviderScreen对象如果当前没有打开样板供应器界面则返回null
*/
public static PatternProviderScreen getCurrentPatternProviderScreen() {
Minecraft mc = Minecraft.getInstance();
Screen currentScreen = mc.screen;
if (currentScreen instanceof PatternProviderScreen patternScreen) {
return patternScreen;
}
return null;
}
/**
* 在当前样板供应器中执行样板数量倍增
*
* @param multiplier 倍数必须大于0
* @return 缩放操作结果如果当前没有打开样板供应器界面则返回null
*/
public static PatternProviderDataUtil.PatternScalingResult multiplyCurrentPatternAmounts(double multiplier) {
PatternProviderLogic patternProvider = getCurrentPatternProvider();
if (patternProvider == null) {
return null;
}
return PatternProviderDataUtil.multiplyPatternAmounts(patternProvider, multiplier);
}
/**
* ExtendedAE风格的样板复制倍增
* 提供更好的错误处理和恢复机制
*
* @param multiplier 倍数必须大于0
* @return 缩放操作结果如果当前没有打开样板供应器界面则返回null
*/
public static PatternProviderDataUtil.PatternScalingResult duplicateCurrentPatternAmountsExtendedAEStyle(double multiplier) {
PatternProviderLogic patternProvider = getCurrentPatternProvider();
if (patternProvider == null) {
return null;
}
return PatternProviderDataUtil.duplicatePatternAmountsExtendedAEStyle(patternProvider, multiplier);
}
/**
* 在当前样板供应器中执行样板数量倍除
*
* @param divisor 除数必须大于0
* @return 缩放操作结果如果当前没有打开样板供应器界面则返回null
*/
public static PatternProviderDataUtil.PatternScalingResult divideCurrentPatternAmounts(double divisor) {
PatternProviderLogic patternProvider = getCurrentPatternProvider();
if (patternProvider == null) {
return null;
}
return PatternProviderDataUtil.dividePatternAmounts(patternProvider, divisor);
}
/**
* 预览当前样板供应器的缩放效果
*
* @param scaleFactor 缩放因子
* @return 预览结果列表,如果当前没有打开样板供应器界面则返回空列表
*/
public static java.util.List<PatternProviderDataUtil.PatternScalingPreview> previewCurrentPatternScaling(double scaleFactor) {
PatternProviderLogic patternProvider = getCurrentPatternProvider();
if (patternProvider == null) {
return new java.util.ArrayList<>();
}
return PatternProviderDataUtil.previewPatternScaling(patternProvider, scaleFactor);
}
}