移植cloth config适配

This commit is contained in:
17146 2025-04-12 03:01:46 +08:00
parent 32a5b41cca
commit 8b50a729b8
10 changed files with 252 additions and 19 deletions

View file

@ -133,9 +133,9 @@ dependencies {
runtimeOnly "mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}"
implementation "curse.maven:jade-324717:6291517"
// // Cloth Config相关
// implementation fg.deobf("me.shedaniel.cloth:cloth-config-forge:${cloth_config_version}")
//
// Cloth Config相关
implementation "me.shedaniel.cloth:cloth-config-neoforge:15.0.140"
// // mod
// implementation fg.deobf("curse.maven:oculus-581495:6020952")
// implementation fg.deobf("curse.maven:embeddium-908741:5681725")

View file

@ -1,6 +1,8 @@
package com.atsuishio.superbwarfare;
import com.atsuishio.superbwarfare.client.MouseMovementHandler;
import com.atsuishio.superbwarfare.compat.CompatHolder;
import com.atsuishio.superbwarfare.compat.clothconfig.ClothConfigHelper;
import com.atsuishio.superbwarfare.component.ModDataComponents;
import com.atsuishio.superbwarfare.config.ClientConfig;
import com.atsuishio.superbwarfare.config.CommonConfig;
@ -8,11 +10,13 @@ import com.atsuishio.superbwarfare.config.ServerConfig;
import com.atsuishio.superbwarfare.init.*;
import com.atsuishio.superbwarfare.network.NetworkRegistry;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.fml.loading.FMLEnvironment;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.tick.ServerTickEvent;
@ -58,12 +62,15 @@ public class Mod {
ModCriteriaTriggers.REGISTRY.register(bus);
ModAttachments.ATTACHMENT_TYPES.register(bus);
// bus.addListener(this::onCommonSetup);
bus.addListener(this::onClientSetup);
bus.addListener(ModItems::registerDispenserBehavior);
bus.addListener(NetworkRegistry::register);
if (FMLEnvironment.dist == Dist.CLIENT) {
CompatHolder.hasMod(CompatHolder.CLOTH_CONFIG, ClothConfigHelper::registerScreen);
}
NeoForge.EVENT_BUS.register(this);
}

View file

@ -1,5 +1,7 @@
package com.atsuishio.superbwarfare.client;
import com.atsuishio.superbwarfare.compat.CompatHolder;
import com.atsuishio.superbwarfare.compat.clothconfig.ClothConfigHelper;
import com.atsuishio.superbwarfare.config.client.ReloadConfig;
import com.atsuishio.superbwarfare.entity.MortarEntity;
import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity;
@ -15,6 +17,7 @@ import com.atsuishio.superbwarfare.tools.NBTTool;
import com.atsuishio.superbwarfare.tools.SeekTool;
import com.atsuishio.superbwarfare.tools.TraceTool;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.component.DataComponents;
@ -29,6 +32,7 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModList;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.InputEvent;
import net.neoforged.neoforge.client.settings.KeyConflictContext;
@ -204,10 +208,9 @@ public class ClickHandler {
}
}
// TODO do we need cloth config?
// if (key == ModKeyMappings.CONFIG.getKey().getValue() && ModKeyMappings.CONFIG.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
// handleConfigScreen(player);
// }
if (key == ModKeyMappings.CONFIG.getKey().getValue() && ModKeyMappings.CONFIG.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
handleConfigScreen(player);
}
if (key == ModKeyMappings.RELOAD.getKey().getValue()) {
ClientEventHandler.burstFireAmount = 0;
@ -423,6 +426,14 @@ public class ClickHandler {
}
}
private static void handleConfigScreen(Player player) {
if (ModList.get().isLoaded(CompatHolder.CLOTH_CONFIG)) {
CompatHolder.hasMod(CompatHolder.CLOTH_CONFIG, () -> Minecraft.getInstance().setScreen(ClothConfigHelper.getConfigScreen(null)));
} else {
player.displayClientMessage(Component.translatable("tips.superbwarfare.no_cloth_config").withStyle(ChatFormatting.RED), true);
}
}
private static void handleDismountPress(Player player) {
var vehicle = player.getVehicle();
if (!(vehicle instanceof VehicleEntity)) return;

View file

@ -1,6 +1,7 @@
package com.atsuishio.superbwarfare.compat;
//@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
import net.neoforged.fml.ModList;
public class CompatHolder {
public static final String DMV = "dreamaticvoyage";
@ -16,14 +17,9 @@ public class CompatHolder {
// @ObjectHolder(registryName = "minecraft:entity_type", value = VRC + ":rain_shower_butterfly")
// public static final EntityType<? extends Projectile> VRC_RAIN_SHOWER_BUTTERFLY = null;
// @SubscribeEvent
// public static void onInterModEnqueue(final InterModEnqueueEvent event) {
// event.enqueueWork(() -> hasMod(CLOTH_CONFIG, () -> DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> ClothConfigHelper::registerScreen)));
// }
// public static void hasMod(String modid, Runnable runnable) {
// if (ModList.get().isLoaded(modid)) {
// runnable.run();
// }
// }
public static void hasMod(String modid, Runnable runnable) {
if (ModList.get().isLoaded(modid)) {
runnable.run();
}
}
}

View file

@ -0,0 +1,42 @@
package com.atsuishio.superbwarfare.compat.clothconfig;
import com.atsuishio.superbwarfare.compat.clothconfig.client.DisplayClothConfig;
import com.atsuishio.superbwarfare.compat.clothconfig.client.KillMessageClothConfig;
import com.atsuishio.superbwarfare.compat.clothconfig.client.ReloadClothConfig;
import com.atsuishio.superbwarfare.compat.clothconfig.client.VehicleControlClothConfig;
import com.atsuishio.superbwarfare.compat.clothconfig.common.GameplayClothConfig;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
import net.neoforged.fml.ModLoadingContext;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import org.jetbrains.annotations.Nullable;
public class ClothConfigHelper {
public static ConfigBuilder getConfigBuilder() {
ConfigBuilder root = ConfigBuilder.create().setTitle(Component.translatable("config.superbwarfare.title"));
root.setGlobalized(true);
root.setGlobalizedExpanded(false);
ConfigEntryBuilder entryBuilder = root.entryBuilder();
ReloadClothConfig.init(root, entryBuilder);
KillMessageClothConfig.init(root, entryBuilder);
DisplayClothConfig.init(root, entryBuilder);
VehicleControlClothConfig.init(root, entryBuilder);
GameplayClothConfig.init(root, entryBuilder);
return root;
}
public static void registerScreen() {
ModLoadingContext.get().registerExtensionPoint(IConfigScreenFactory.class, () ->
(client, parent) -> getConfigScreen(parent));
}
public static Screen getConfigScreen(@Nullable Screen parent) {
return ClothConfigHelper.getConfigBuilder().setParentScreen(parent).build();
}
}

View file

@ -0,0 +1,62 @@
package com.atsuishio.superbwarfare.compat.clothconfig.client;
import com.atsuishio.superbwarfare.config.client.DisplayConfig;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.network.chat.Component;
public class DisplayClothConfig {
public static void init(ConfigBuilder root, ConfigEntryBuilder entryBuilder) {
ConfigCategory category = root.getOrCreateCategory(Component.translatable("config.superbwarfare.client.display"));
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.display.kill_indication"), DisplayConfig.KILL_INDICATION.get())
.setDefaultValue(true)
.setSaveConsumer(DisplayConfig.KILL_INDICATION::set)
.setTooltip(Component.translatable("config.superbwarfare.client.display.kill_indication.des"))
.build()
);
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.display.ammo_hud"), DisplayConfig.AMMO_HUD.get())
.setDefaultValue(true)
.setSaveConsumer(DisplayConfig.AMMO_HUD::set)
.setTooltip(Component.translatable("config.superbwarfare.client.display.ammo_hud.des"))
.build()
);
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.display.float_cross_hair"), DisplayConfig.FLOAT_CROSS_HAIR.get())
.setDefaultValue(true)
.setSaveConsumer(DisplayConfig.FLOAT_CROSS_HAIR::set)
.setTooltip(Component.translatable("config.superbwarfare.client.display.float_cross_hair.des"))
.build()
);
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.display.camera_rotate"), DisplayConfig.CAMERA_ROTATE.get())
.setDefaultValue(true)
.setSaveConsumer(DisplayConfig.CAMERA_ROTATE::set)
.setTooltip(Component.translatable("config.superbwarfare.client.display.camera_rotate.des"))
.build()
);
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.display.armor_plate_hud"), DisplayConfig.ARMOR_PLATE_HUD.get())
.setDefaultValue(true)
.setSaveConsumer(DisplayConfig.ARMOR_PLATE_HUD::set)
.setTooltip(Component.translatable("config.superbwarfare.client.display.armor_plate_hud.des"))
.build()
);
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.display.stamina_hud"), DisplayConfig.STAMINA_HUD.get())
.setDefaultValue(true)
.setSaveConsumer(DisplayConfig.STAMINA_HUD::set)
.setTooltip(Component.translatable("config.superbwarfare.client.display.stamina_hud.des"))
.build()
);
}
}

View file

@ -0,0 +1,32 @@
package com.atsuishio.superbwarfare.compat.clothconfig.client;
import com.atsuishio.superbwarfare.config.client.KillMessageConfig;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.network.chat.Component;
public class KillMessageClothConfig {
public static void init(ConfigBuilder root, ConfigEntryBuilder entryBuilder) {
ConfigCategory category = root.getOrCreateCategory(Component.translatable("config.superbwarfare.client.kill_message"));
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.kill_message.show_kill_message"), KillMessageConfig.SHOW_KILL_MESSAGE.get())
.setDefaultValue(false)
.setSaveConsumer(KillMessageConfig.SHOW_KILL_MESSAGE::set)
.setTooltip(Component.translatable("config.superbwarfare.client.kill_message.show_kill_message.des"))
.build()
);
category.addEntry(entryBuilder
.startIntField(Component.translatable("config.superbwarfare.client.kill_message.kill_message_count"), KillMessageConfig.KILL_MESSAGE_COUNT.get())
.setDefaultValue(5)
.setMin(1)
.setMax(20)
.setSaveConsumer(KillMessageConfig.KILL_MESSAGE_COUNT::set)
.setTooltip(Component.translatable("config.superbwarfare.client.kill_message.kill_message_count.des"))
.build()
);
}
}

View file

@ -0,0 +1,21 @@
package com.atsuishio.superbwarfare.compat.clothconfig.client;
import com.atsuishio.superbwarfare.config.client.ReloadConfig;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.network.chat.Component;
public class ReloadClothConfig {
public static void init(ConfigBuilder root, ConfigEntryBuilder entryBuilder) {
ConfigCategory category = root.getOrCreateCategory(Component.translatable("config.superbwarfare.client.reload"));
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.reload.left_click_reload"), ReloadConfig.LEFT_CLICK_RELOAD.get())
.setDefaultValue(true)
.setSaveConsumer(ReloadConfig.LEFT_CLICK_RELOAD::set)
.setTooltip(Component.translatable("config.superbwarfare.client.reload.left_click_reload.des")).build()
);
}
}

View file

@ -0,0 +1,24 @@
package com.atsuishio.superbwarfare.compat.clothconfig.client;
import com.atsuishio.superbwarfare.config.client.VehicleControlConfig;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.network.chat.Component;
public class VehicleControlClothConfig {
public static void init(ConfigBuilder root, ConfigEntryBuilder entryBuilder) {
ConfigCategory category = root.getOrCreateCategory(Component.translatable("config.superbwarfare.client.vehicle"));
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.client.vehicle.invert_aircraft_control"), VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get())
.setDefaultValue(true)
.setSaveConsumer(VehicleControlConfig.INVERT_AIRCRAFT_CONTROL::set)
.setTooltip(Component.translatable("config.superbwarfare.client.vehicle.left_click_reload.des")).build()
);
}
}

View file

@ -0,0 +1,38 @@
package com.atsuishio.superbwarfare.compat.clothconfig.common;
import com.atsuishio.superbwarfare.config.common.GameplayConfig;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.network.chat.Component;
public class GameplayClothConfig {
public static void init(ConfigBuilder root, ConfigEntryBuilder entryBuilder) {
ConfigCategory category = root.getOrCreateCategory(Component.translatable("config.superbwarfare.common.gameplay"));
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.common.gameplay.respawn_reload"), GameplayConfig.RESPAWN_RELOAD.get())
.setDefaultValue(true)
.setSaveConsumer(GameplayConfig.RESPAWN_RELOAD::set)
.setTooltip(Component.translatable("config.superbwarfare.common.gameplay.respawn_reload.des"))
.build()
);
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.common.gameplay.global_indication"), GameplayConfig.GLOBAL_INDICATION.get())
.setDefaultValue(false)
.setSaveConsumer(GameplayConfig.GLOBAL_INDICATION::set)
.setTooltip(Component.translatable("config.superbwarfare.common.gameplay.global_indication.des"))
.build()
);
category.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("config.superbwarfare.common.gameplay.respawn_auto_armor"), GameplayConfig.RESPAWN_AUTO_ARMOR.get())
.setDefaultValue(true)
.setSaveConsumer(GameplayConfig.RESPAWN_AUTO_ARMOR::set)
.setTooltip(Component.translatable("config.superbwarfare.common.gameplay.respawn_auto_armor.des"))
.build()
);
}
}