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
35 changes: 16 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,58 +3,55 @@

## 功能列表

**复制准星目标 ID**
- **复制准星目标 ID**

复制准星所指的方块或实体 ID

**实体高亮边框**
- **实体高亮边框**

为名单中的实体类型添加原版发光描边效果

**实体高亮边框-选择列表**
- **实体高亮边框-选择列表**

每行一个实体 ID

**实体高亮边框-颜色**
- **实体高亮边框-颜色**

设置名单中实体的描边颜色

**实体渲染黑名单开关**
- **实体渲染黑名单开关**

跳过名单中实体的客户端渲染

**实体渲染黑名单-列表**
- **实体渲染黑名单-列表**

每行一个实体 ID

**实体渲染黑名单-范围**
- **实体渲染黑名单-范围**

黑名单实体在该三维范围内会重新渲染,0 为始终不渲染

**掏炉灰助手-开关**
- **掏炉灰助手-开关**

高亮输入槽含有无法烧制物品的普通熔炉

**掏炉灰助手-范围设置**
- **掏炉灰助手-范围设置**

以玩家所在区块为中心,区块为范围的扫描半径

**TNT爆炸预览**
- **TNT爆炸预览**

以TNT当前实时位置预览方块破坏范围,红色为保守范围,黄色为额外可能范围

**TNT爆炸预览-显示模式**
- **TNT爆炸预览-显示模式**

选择是否显示可能被炸坏的方块

**玩家追踪线**
- **投射物落点预测**

连线到附近玩家

**玩家追踪线颜色**

设置追踪线的颜色
显示支持投射物的预测落点

**投射物落点预测**
- **投影实时预览**

显示支持投射物的预测落点
在投影文件选择界面新增原理图预览窗口,实时显示当前选中的原理图
![](docs/new.jpg)
Binary file added docs/new.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ org.gradle.jvmargs=-Xmx1G

org.gradle.configuration-cache=false

mod_version=1.0.0
mod_version=1.0.5
archives_base_name=ListMore-Fabric
maven_group=com.listmore
loom_version=1.17-SNAPSHOT
preprocessor_version=c5abb4fb12
conditionalmixin_version=0.6.4
21 changes: 19 additions & 2 deletions src/main/java/com/listmore/config/ListMoreConfigGui.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import fi.dy.masa.malilib.gui.button.ButtonGeneric;
import fi.dy.masa.malilib.gui.button.IButtonActionListener;
import fi.dy.masa.malilib.util.StringUtils;
import net.fabricmc.loader.api.FabricLoader;

public class ListMoreConfigGui extends GuiConfigsBase {
private static ConfigTab tab = ConfigTab.GENERIC;
Expand All @@ -24,6 +25,9 @@ public void initGui() {

int x = 10;
for (ConfigTab currentTab : ConfigTab.values()) {
if (!currentTab.isAvailable()) {
continue;
}
x += this.createButton(x, 26, -1, currentTab) + 2;
}
}
Expand Down Expand Up @@ -56,7 +60,15 @@ protected boolean useKeybindSearch() {

@Override
public List<ConfigOptionWrapper> getConfigs() {
return ConfigOptionWrapper.createFor(ListMoreConfigs.Generic.OPTIONS);
return ConfigOptionWrapper.createFor(switch (tab) {
case ALL -> FabricLoader.getInstance().isModLoaded("litematica")
? ListMoreConfigs.Generic.OPTIONS
: ListMoreConfigs.Generic.GENERIC_OPTIONS;
case GENERIC -> ListMoreConfigs.Generic.GENERIC_OPTIONS;
case LITEMATICA -> FabricLoader.getInstance().isModLoaded("litematica")
? ListMoreConfigs.Generic.LITEMATICA_OPTIONS
: List.of();
});
}

private record ButtonListener(ConfigTab tab, ListMoreConfigGui parent) implements IButtonActionListener {
Expand All @@ -73,7 +85,8 @@ public void actionPerformedWithButton(ButtonBase button, int mouseButton) {

private enum ConfigTab {
ALL("malilib.gui.title.all"),
GENERIC("listmore.gui.tab.generic");
GENERIC("listmore.gui.tab.generic"),
LITEMATICA("listmore.gui.tab.litematica");

private final String translationKey;

Expand All @@ -84,5 +97,9 @@ private enum ConfigTab {
public String getDisplayName() {
return StringUtils.translate(this.translationKey);
}

public boolean isAvailable() {
return this != LITEMATICA || FabricLoader.getInstance().isModLoaded("litematica");
}
}
}
27 changes: 26 additions & 1 deletion src/main/java/com/listmore/config/ListMoreConfigs.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,9 @@ public static class Generic {
public static final ConfigBoolean TNT_EXPLOSION_PREVIEW = createTntExplosionPreview();
public static final ConfigOptionList TNT_EXPLOSION_PREVIEW_MODE = createTntExplosionPreviewMode();
public static final ConfigBoolean PROJECTILE_LANDING_PREDICTION = createProjectileLandingPrediction();
public static final ConfigBoolean SCHEMATIC_DYNAMIC_PREVIEW = createSchematicDynamicPreview();

public static final ImmutableList<IConfigBase> OPTIONS = ImmutableList.of(
public static final ImmutableList<IConfigBase> GENERIC_OPTIONS = ImmutableList.of(
COPY_TARGET_ID,
ENTITY_HIGHLIGHT_OUTLINE,
ENTITY_HIGHLIGHT_OUTLINE_LIST,
Expand All @@ -64,6 +65,26 @@ public static class Generic {
TNT_EXPLOSION_PREVIEW_MODE,
PROJECTILE_LANDING_PREDICTION
);

public static final ImmutableList<IConfigBase> LITEMATICA_OPTIONS = ImmutableList.of(
SCHEMATIC_DYNAMIC_PREVIEW
);

public static final ImmutableList<IConfigBase> OPTIONS = ImmutableList.of(
COPY_TARGET_ID,
ENTITY_HIGHLIGHT_OUTLINE,
ENTITY_HIGHLIGHT_OUTLINE_LIST,
ENTITY_HIGHLIGHT_OUTLINE_COLOR,
ENTITY_RENDERING_BLACKLIST,
ENTITY_RENDERING_BLACKLIST_LIST,
ENTITY_RENDERING_BLACKLIST_RANGE,
INVALID_FURNACE_INPUT_HIGHLIGHTER,
INVALID_FURNACE_INPUT_HIGHLIGHTER_RANGE,
TNT_EXPLOSION_PREVIEW,
TNT_EXPLOSION_PREVIEW_MODE,
PROJECTILE_LANDING_PREDICTION,
SCHEMATIC_DYNAMIC_PREVIEW
);
}

private static ConfigHotkey createCopyTargetId() {
Expand Down Expand Up @@ -120,6 +141,10 @@ private static ConfigBoolean createProjectileLandingPrediction() {
return createConfig(new ConfigBoolean("projectileLandingPrediction", false));
}

private static ConfigBoolean createSchematicDynamicPreview() {
return createConfig(new ConfigBoolean("schematicDynamicPreview", false));
}

private static <T extends ConfigBase<T>> T createConfig(T config) {
return createConfig(config, value -> INSTANCE.save());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.listmore.mixin.litematica;

import com.listmore.config.ListMoreConfigs;
import fi.dy.masa.litematica.gui.GuiSchematicBrowserBase;
import fi.dy.masa.litematica.gui.widgets.WidgetSchematicBrowser;
import fi.dy.masa.malilib.gui.interfaces.ISelectionListener;
import fi.dy.masa.malilib.gui.widgets.WidgetFileBrowserBase.DirectoryEntry;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Pseudo
@Restriction(require = @Condition("litematica"))
@Mixin(value = GuiSchematicBrowserBase.class, remap = false)
public abstract class GuiSchematicBrowserBaseMixin {
@Shadow protected abstract ISelectionListener<DirectoryEntry> getSelectionListener();

@Inject(method = "createListWidget(II)Lfi/dy/masa/litematica/gui/widgets/WidgetSchematicBrowser;",
at = @At("HEAD"), cancellable = true, remap = false)
private void listmore$createPreviewBrowser(int listX, int listY,
CallbackInfoReturnable<WidgetSchematicBrowser> cir) {
if (!ListMoreConfigs.Generic.SCHEMATIC_DYNAMIC_PREVIEW.getBooleanValue()) {
return;
}
try {
Class<?> browserClass = Class.forName("com.listmore.schematic.ListMoreSchematicBrowser");
Object browser = browserClass.getConstructor(int.class, int.class, int.class, int.class,
GuiSchematicBrowserBase.class, ISelectionListener.class)
.newInstance(listX, listY, 100, 100, (GuiSchematicBrowserBase) (Object) this,
this.getSelectionListener());
cir.setReturnValue((WidgetSchematicBrowser) browser);
} catch (ReflectiveOperationException ignored) {
// The version-specific preview browser is intentionally optional.
}
}
}
Loading
Loading