From b0505da3420c4e42b672a065eb7b8143bd6cfa45 Mon Sep 17 00:00:00 2001 From: LeeQianXi Date: Sun, 12 Jul 2026 00:02:26 +0800 Subject: [PATCH 01/13] Edit --- dependencies.gradle | 2 +- docs/{quick-start.md => 1-quick-start.md} | 4 ++-- docs/{api-reference.md => 2-api-reference.md} | 4 ++-- docs/{world-gen.md => 3-world-gen.md} | 4 ++-- docs/index.md | 14 ++++++++------ .../{phase-energy.md => machine/1-phase-energy.md} | 2 +- .../multiblock/0-multiblock.md} | 2 +- docs/material/index.md | 2 +- gradle.properties | 12 ++++++------ 9 files changed, 24 insertions(+), 22 deletions(-) rename docs/{quick-start.md => 1-quick-start.md} (96%) rename docs/{api-reference.md => 2-api-reference.md} (97%) rename docs/{world-gen.md => 3-world-gen.md} (89%) rename docs/{phase-energy.md => machine/1-phase-energy.md} (98%) rename docs/{multiblock.md => machine/multiblock/0-multiblock.md} (99%) diff --git a/dependencies.gradle b/dependencies.gradle index 37fb132..569f771 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -19,7 +19,7 @@ dependencies { compileOnly("top.theillusivec4.curios:curios-neoforge:${curios_version}+26.1.2:api") compileOnly("mezz.jei:jei-26.1.2-neoforge-api:${jei_version}") // - implementation("curse.maven:jade-324717:8068368") + implementation("curse.maven:jade-324717:8326300") implementation("dev.toma.configuration:configuration-neoforge:${configuration_version}+26.1.2") // 运行时 runtimeOnly("org.appliedenergistics:guideme:${guideme_version}") diff --git a/docs/quick-start.md b/docs/1-quick-start.md similarity index 96% rename from docs/quick-start.md rename to docs/1-quick-start.md index dd1e011..067c114 100644 --- a/docs/quick-start.md +++ b/docs/1-quick-start.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 1 --- # 快速开始 @@ -83,4 +83,4 @@ public class YourDLC implements IBreaAddon { - [通用材料系统](material/index.md) — 定义你的材料 - [机器系统](multiblock.md) — 创建自定义机器 -- [API 参考](api-reference.md) — 完整接口速查 +- [API 参考](2-api-reference.md) — 完整接口速查 diff --git a/docs/api-reference.md b/docs/2-api-reference.md similarity index 97% rename from docs/api-reference.md rename to docs/2-api-reference.md index 732b86d..98f1ae1 100644 --- a/docs/api-reference.md +++ b/docs/2-api-reference.md @@ -1,5 +1,5 @@ --- -sidebar_position: 6 +sidebar_position: 2 --- # API 参考 @@ -57,6 +57,6 @@ public class YourDLC implements IBreaAddon { ## 相关页面 -- [快速开始](quick-start.md) +- [快速开始](1-quick-start.md) - [通用材料系统](material/index.md) - [机器与多方块系统](multiblock.md) diff --git a/docs/world-gen.md b/docs/3-world-gen.md similarity index 89% rename from docs/world-gen.md rename to docs/3-world-gen.md index d87bb17..8196c1e 100644 --- a/docs/world-gen.md +++ b/docs/3-world-gen.md @@ -1,5 +1,5 @@ --- -sidebar_position: 5 +sidebar_position: 3 --- # 世界生成 @@ -21,4 +21,4 @@ BreakdownKernel 的世界生成系统负责矿石放置、结构生成和生物 ## 相关页面 - [机器与多方块系统](multiblock.md) — 多方块结构 -- [API 参考](api-reference.md) — 世界生成 API +- [API 参考](2-api-reference.md) — 世界生成 API diff --git a/docs/index.md b/docs/index.md index 257afda..49c1e14 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,5 +1,7 @@ --- -sidebar_position: 1 +slug: / +sidebar_position: 0 +title: BreakdownKernel(瓦解核心) --- # BreakdownKernel(瓦解核心) @@ -49,7 +51,7 @@ Material aluminium = new Material.Builder("aluminium") | [通用材料系统](material/index.md) | Material / MaterialAttribute / MaterialVariant 核心 API | | [机器与多方块系统](multiblock.md) | MachineDefinition / MetaMachine / MachineTrait | | [相变能量系统](phase-energy.md) | 统一能量单位 PE,能量网络与传输 | -| [世界生成](world-gen.md) | 异步矿石/结构生成与 Biome Modifier | +| [世界生成](3-world-gen.md) | 异步矿石/结构生成与 Biome Modifier | | BreaLib | 日志、环境检测、线程安全等基础工具库 | ## 进行中任务 @@ -58,14 +60,14 @@ Material aluminium = new Material.Builder("aluminium") - [x] [机器系统](multiblock.md) - [ ] 配方系统 - [ ] [能量系统](phase-energy.md) -- [ ] [世界生成](world-gen.md) +- [ ] [世界生成](3-world-gen.md) - [ ] 多方块结构 ## 文档导航 -- [快速开始](quick-start.md) — DLC 开发环境搭建与入门 +- [快速开始](1-quick-start.md) — DLC 开发环境搭建与入门 - [通用材料系统](material/index.md) — 材料定义与自动生成 - [机器与多方块系统](multiblock.md) — 机器定义与特性 - [相变能量系统](phase-energy.md) — 能量 API 设计 -- [世界生成](world-gen.md) — 矿石与结构生成 -- [API 参考](api-reference.md) — 接口速查 +- [世界生成](3-world-gen.md) — 矿石与结构生成 +- [API 参考](2-api-reference.md) — 接口速查 diff --git a/docs/phase-energy.md b/docs/machine/1-phase-energy.md similarity index 98% rename from docs/phase-energy.md rename to docs/machine/1-phase-energy.md index 7331d61..d2eafdf 100644 --- a/docs/phase-energy.md +++ b/docs/machine/1-phase-energy.md @@ -1,5 +1,5 @@ --- -sidebar_position: 4 +sidebar_position: 21 --- # 相变能量系统 diff --git a/docs/multiblock.md b/docs/machine/multiblock/0-multiblock.md similarity index 99% rename from docs/multiblock.md rename to docs/machine/multiblock/0-multiblock.md index 2a171b0..1d1969b 100644 --- a/docs/multiblock.md +++ b/docs/machine/multiblock/0-multiblock.md @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +sidebar_position: 200 --- # 机器与多方块系统 diff --git a/docs/material/index.md b/docs/material/index.md index 7f4c4d8..af888f1 100644 --- a/docs/material/index.md +++ b/docs/material/index.md @@ -1,5 +1,5 @@ --- -sidebar_position: 1 +sidebar_position: 10 --- # 通用材料系统 diff --git a/gradle.properties b/gradle.properties index 5b66f23..66cfc6f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,8 +14,8 @@ minecraft_version=26.1.2 # as they do not follow standard versioning conventions. minecraft_version_range=[26.1, 27) # https://files.neoforged.neoforge.net/net/neoforged.neoforge/forge/ -neo_version=26.1.2.54-beta -neo_version_range=[26.1.0.8-beta,) +neo_version=26.1.2.71 +neo_version_range=[26.1.0.71,) loader_version_range=[4,) ## Mod Properties @@ -30,11 +30,11 @@ mod_url=https://github.com/PhasetransCrystal/BreakdownCore # Dependency Properties brealib_version=26.7.11 guideme_version=26.1.12-beta -ae2_version=26.1.9-alpha +ae2_version=26.1.10-beta curios_version=15.0.0-beta.2 -ldlib2_version=26.1.2.19 +ldlib2_version=26.1.2.28 registry_lib_version=8.0.14 -jei_version=29.6.2.31 +jei_version=29.16.0.46 jade_version=15 configuration_version=4.1.2 -modern_ui_version=3.13.0.4 \ No newline at end of file +modern_ui_version=3.13.0.5 \ No newline at end of file From 46a1433a4a130dec2bcf1b2cee2c2da703965919 Mon Sep 17 00:00:00 2001 From: LeeQianXi Date: Sun, 12 Jul 2026 03:24:49 +0800 Subject: [PATCH 02/13] Lang --- build.gradle | 5 +- .../annotation/TranslationKeyProvider.java | 22 ++++- .../breacore/api/item/ComponentItem.java | 44 --------- .../breacore/api/item/IComponentItem.java | 29 ------ .../breacore/api/item/MaterialItem.java | 6 +- .../breacore/api/item/MetaMachineItem.java | 8 -- .../item/component/IComponentCapability.java | 9 -- .../api/item/component/IItemComponent.java | 14 --- .../breacore/api/lang/CNEN.java | 4 +- .../material/register/RegisterActions.java | 2 +- .../breacore/api/misc/AutoInitialize.kt | 4 +- .../breacore/api/perk/IPerkProvider.java | 4 +- .../breacore/common/CommonProxy.java | 7 ++ .../common/data/translation/TooltipsStyles.kt | 4 +- .../breacore/data/Datagen.java | 20 ++++ .../breacore/data/blocks/DebugBlocks.java | 2 + .../breacore/data/lang/BlockLang.java | 6 ++ .../breacore/data/lang/ItemLang.java | 10 ++ .../breacore/data/lang/LangHandler.java | 53 +++++++++++ .../breacore/data/lang/MachineLang.java | 11 +++ .../breacore/utils/StringUtils.java | 92 ++++++++++++++++--- .../breacore/utils/TooltipHelper.java | 26 +++--- 22 files changed, 231 insertions(+), 151 deletions(-) delete mode 100644 src/main/java/net/phasetranscrystal/breacore/api/item/ComponentItem.java delete mode 100644 src/main/java/net/phasetranscrystal/breacore/api/item/IComponentItem.java delete mode 100644 src/main/java/net/phasetranscrystal/breacore/api/item/component/IComponentCapability.java delete mode 100644 src/main/java/net/phasetranscrystal/breacore/api/item/component/IItemComponent.java create mode 100644 src/main/java/net/phasetranscrystal/breacore/data/Datagen.java create mode 100644 src/main/java/net/phasetranscrystal/breacore/data/lang/BlockLang.java create mode 100644 src/main/java/net/phasetranscrystal/breacore/data/lang/ItemLang.java create mode 100644 src/main/java/net/phasetranscrystal/breacore/data/lang/LangHandler.java create mode 100644 src/main/java/net/phasetranscrystal/breacore/data/lang/MachineLang.java diff --git a/build.gradle b/build.gradle index a68d939..b8403d2 100644 --- a/build.gradle +++ b/build.gradle @@ -75,10 +75,7 @@ publishing { repositories { maven { name = "reposilite" - // 根据版本类型选择 URL - def releasesRepoUrl = 'https://maven.nilarea.cn/releases' - def snapshotsRepoUrl = 'https://maven.nilarea.cn/snapshots' - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl + url = 'https://maven.nilarea.cn/releases' // 认证信息在此配置 credentials { username = project.findProperty('reposiliteUsername') diff --git a/src/main/java/net/phasetranscrystal/breacore/api/annotation/TranslationKeyProvider.java b/src/main/java/net/phasetranscrystal/breacore/api/annotation/TranslationKeyProvider.java index 2194587..1fde323 100644 --- a/src/main/java/net/phasetranscrystal/breacore/api/annotation/TranslationKeyProvider.java +++ b/src/main/java/net/phasetranscrystal/breacore/api/annotation/TranslationKeyProvider.java @@ -1,12 +1,26 @@ package net.phasetranscrystal.breacore.api.annotation; +import net.phasetranscrystal.brealib.BreaLib; + +import net.phasetranscrystal.breacore.api.lang.CNEN; + +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; + public final class TranslationKeyProvider { - public TranslationKeyProvider() { - throw new UnsatisfiedLinkError("Not Impl"); + public static final Object2ObjectOpenHashMap LANG = BreaLib.isDataGen() ? new Object2ObjectOpenHashMap<>() : null; + + public static String getTranslationKey(String var0, String var1) { + return getTranslationKey(var0, var1, "breacore.lang"); } - public static native String getTranslationKey(String var0, String var1); + public static String getTranslationKey(String var0, String var1, String var2) { + String var3 = (var2 != null ? var2 : "") + "." + var1.hashCode(); + var3 = var3.replace("..", "."); + if (LANG != null) { + LANG.put(var3, new CNEN(var0, var1)); + } - public static native String getTranslationKey(String var0, String var1, String var2); + return var3; + } } diff --git a/src/main/java/net/phasetranscrystal/breacore/api/item/ComponentItem.java b/src/main/java/net/phasetranscrystal/breacore/api/item/ComponentItem.java deleted file mode 100644 index 68a6fea..0000000 --- a/src/main/java/net/phasetranscrystal/breacore/api/item/ComponentItem.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.phasetranscrystal.breacore.api.item; - -import net.phasetranscrystal.breacore.api.item.component.IItemComponent; - -import net.minecraft.world.item.Item; - -import lombok.Getter; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class ComponentItem extends Item implements IComponentItem { - - protected int burnTime = -1; - - @Getter - protected List components; - - public ComponentItem(Properties properties) { - super(properties); - components = new ArrayList<>(); - } - - public void attachComponents(IItemComponent component) { - this.components.add(component); - component.onAttached(this); - } - - public void attachComponents(IItemComponent... components) { - this.components.addAll(Arrays.asList(components)); - for (IItemComponent component : components) { - component.onAttached(this); - } - } - - public int getBurnTime() { - return burnTime; - } - - public void burnTime(int burnTime) { - this.burnTime = burnTime; - } -} diff --git a/src/main/java/net/phasetranscrystal/breacore/api/item/IComponentItem.java b/src/main/java/net/phasetranscrystal/breacore/api/item/IComponentItem.java deleted file mode 100644 index e01106c..0000000 --- a/src/main/java/net/phasetranscrystal/breacore/api/item/IComponentItem.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.phasetranscrystal.breacore.api.item; - -import net.phasetranscrystal.breacore.api.item.component.IComponentCapability; -import net.phasetranscrystal.breacore.api.item.component.IItemComponent; - -import net.minecraft.core.NonNullList; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.ItemLike; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; - -import java.util.List; - -public interface IComponentItem extends ItemLike { - - List getComponents(); - - void attachComponents(IItemComponent... components); - - default void attachCapabilities(RegisterCapabilitiesEvent event) { - for (IItemComponent component : getComponents()) { - if (component instanceof IComponentCapability componentCapability) { - componentCapability.attachCapabilities(event, this.asItem()); - } - } - } - - default void fillItemCategory(CreativeModeTab category, NonNullList items) {} -} diff --git a/src/main/java/net/phasetranscrystal/breacore/api/item/MaterialItem.java b/src/main/java/net/phasetranscrystal/breacore/api/item/MaterialItem.java index 7830893..c93b4e8 100644 --- a/src/main/java/net/phasetranscrystal/breacore/api/item/MaterialItem.java +++ b/src/main/java/net/phasetranscrystal/breacore/api/item/MaterialItem.java @@ -1,13 +1,13 @@ package net.phasetranscrystal.breacore.api.item; +import net.phasetranscrystal.registrylib.composite.ComponentItem; + import net.phasetranscrystal.breacore.api.material.Material; import net.phasetranscrystal.breacore.api.material.register.MaterialVariant; -import net.minecraft.world.item.Item; - import lombok.Getter; -public class MaterialItem extends Item { +public class MaterialItem extends ComponentItem { @Getter private final MaterialVariant variant; diff --git a/src/main/java/net/phasetranscrystal/breacore/api/item/MetaMachineItem.java b/src/main/java/net/phasetranscrystal/breacore/api/item/MetaMachineItem.java index 9b39a76..c95318b 100644 --- a/src/main/java/net/phasetranscrystal/breacore/api/item/MetaMachineItem.java +++ b/src/main/java/net/phasetranscrystal/breacore/api/item/MetaMachineItem.java @@ -5,8 +5,6 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.block.state.BlockState; import com.lowdragmc.lowdraglib2.client.renderer.IItemRendererProvider; import com.lowdragmc.lowdraglib2.client.renderer.IRenderer; @@ -27,10 +25,4 @@ public MachineDefinition getDefinition() { public IRenderer getRenderer(ItemStack stack) { return ((IMachineBlock) getBlock()).getDefinition().getRenderer(); } - - @Override - @SuppressWarnings({ "rawtypes", "unchecked" }) - protected boolean placeBlock(BlockPlaceContext context, BlockState state) { - return super.placeBlock(context, state); - } } diff --git a/src/main/java/net/phasetranscrystal/breacore/api/item/component/IComponentCapability.java b/src/main/java/net/phasetranscrystal/breacore/api/item/component/IComponentCapability.java deleted file mode 100644 index 942d020..0000000 --- a/src/main/java/net/phasetranscrystal/breacore/api/item/component/IComponentCapability.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.phasetranscrystal.breacore.api.item.component; - -import net.minecraft.world.item.Item; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; - -public interface IComponentCapability { - - void attachCapabilities(RegisterCapabilitiesEvent event, Item item); -} diff --git a/src/main/java/net/phasetranscrystal/breacore/api/item/component/IItemComponent.java b/src/main/java/net/phasetranscrystal/breacore/api/item/component/IItemComponent.java deleted file mode 100644 index 3e64ceb..0000000 --- a/src/main/java/net/phasetranscrystal/breacore/api/item/component/IItemComponent.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.phasetranscrystal.breacore.api.item.component; - -import net.phasetranscrystal.breacore.api.item.IComponentItem; - -import net.minecraft.world.item.Item; - -/** - * 描述可附加到{@link IComponentItem}的通用组件 - * 一个项目可以连接多个组件 - */ -public interface IItemComponent { - - default void onAttached(Item item) {} -} diff --git a/src/main/java/net/phasetranscrystal/breacore/api/lang/CNEN.java b/src/main/java/net/phasetranscrystal/breacore/api/lang/CNEN.java index cd63349..1c0936a 100644 --- a/src/main/java/net/phasetranscrystal/breacore/api/lang/CNEN.java +++ b/src/main/java/net/phasetranscrystal/breacore/api/lang/CNEN.java @@ -31,7 +31,7 @@ public record CNEN(String cn, String en) { en = "Tiered Block") public static final String TIER = "breacore.auto_build.tier"; - public static CNEN create(String var0, String var1) { - return new CNEN(var0, var1); + public static CNEN create(String cn, String en) { + return new CNEN(cn, en); } } diff --git a/src/main/java/net/phasetranscrystal/breacore/api/material/register/RegisterActions.java b/src/main/java/net/phasetranscrystal/breacore/api/material/register/RegisterActions.java index 29c4fe0..00255a1 100644 --- a/src/main/java/net/phasetranscrystal/breacore/api/material/register/RegisterActions.java +++ b/src/main/java/net/phasetranscrystal/breacore/api/material/register/RegisterActions.java @@ -11,7 +11,7 @@ public class RegisterActions { public static RegisterAction GeneralItem = (registrate, variant, material) -> { var attr = material.getAttribute(AttributeType.GENERAL); - var builder = registrate.item(variant.idPattern().formatted(material.getName()), prop -> new MaterialItem(variant, material, prop)); + var builder = registrate.componentItem(variant.idPattern().formatted(material.getName()), prop -> new MaterialItem(variant, material, prop)); builder.properties(prop -> prop.enchantable(attr.getHarvestLevel())); builder.register(); }; diff --git a/src/main/java/net/phasetranscrystal/breacore/api/misc/AutoInitialize.kt b/src/main/java/net/phasetranscrystal/breacore/api/misc/AutoInitialize.kt index 5841a48..a57465a 100644 --- a/src/main/java/net/phasetranscrystal/breacore/api/misc/AutoInitialize.kt +++ b/src/main/java/net/phasetranscrystal/breacore/api/misc/AutoInitialize.kt @@ -7,8 +7,8 @@ import kotlin.reflect.KProperty1 open class AutoInitialize { fun originInit() { - // ComponentSlang.init() - // MachineSlang.init() + ComponentSlang.init() + MachineSlang.init() } open fun init() {} init { diff --git a/src/main/java/net/phasetranscrystal/breacore/api/perk/IPerkProvider.java b/src/main/java/net/phasetranscrystal/breacore/api/perk/IPerkProvider.java index badc640..0951520 100644 --- a/src/main/java/net/phasetranscrystal/breacore/api/perk/IPerkProvider.java +++ b/src/main/java/net/phasetranscrystal/breacore/api/perk/IPerkProvider.java @@ -1,13 +1,13 @@ package net.phasetranscrystal.breacore.api.perk; -import net.phasetranscrystal.breacore.api.item.component.IItemComponent; +import net.phasetranscrystal.registrylib.composite.IComponentItem; import net.minecraft.world.entity.EquipmentSlotGroup; import java.util.List; import java.util.Map; -public interface IPerkProvider extends IItemComponent { +public interface IPerkProvider> extends IComponentItem { Map> getPerkStacks(); } diff --git a/src/main/java/net/phasetranscrystal/breacore/common/CommonProxy.java b/src/main/java/net/phasetranscrystal/breacore/common/CommonProxy.java index ee129b5..4bce877 100644 --- a/src/main/java/net/phasetranscrystal/breacore/common/CommonProxy.java +++ b/src/main/java/net/phasetranscrystal/breacore/common/CommonProxy.java @@ -10,10 +10,12 @@ import net.phasetranscrystal.breacore.api.registry.BreaRegistries; import net.phasetranscrystal.breacore.common.data.*; import net.phasetranscrystal.breacore.config.ConfigHolder; +import net.phasetranscrystal.breacore.data.Datagen; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.ModLoader; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.event.lifecycle.FMLConstructModEvent; import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent; import net.neoforged.neoforge.event.AddPackFindersEvent; import net.neoforged.neoforge.event.BlockEntityTypeAddBlocksEvent; @@ -31,6 +33,7 @@ public CommonProxy() { init(); BreaRegistries.init(modBus); + modBus.addListener(CommonProxy::modConstruct); } public static void init() { @@ -78,6 +81,10 @@ private static void initMaterials() { } } + private static void modConstruct(FMLConstructModEvent event) { + Datagen.init(); + } + @SubscribeEvent public static void commonSetup(FMLCommonSetupEvent event) {} diff --git a/src/main/java/net/phasetranscrystal/breacore/common/data/translation/TooltipsStyles.kt b/src/main/java/net/phasetranscrystal/breacore/common/data/translation/TooltipsStyles.kt index cc992ed..daf00ea 100644 --- a/src/main/java/net/phasetranscrystal/breacore/common/data/translation/TooltipsStyles.kt +++ b/src/main/java/net/phasetranscrystal/breacore/common/data/translation/TooltipsStyles.kt @@ -27,8 +27,8 @@ fun ComponentListSupplier.ok(info: ComponentSupplier) { content(info, { green() }, ComponentSlang.Right(2)) } -fun ComponentListSupplier.error(info: ComponentSupplier) { - content(info, { red() }, ComponentSlang.Wrong(2)) +fun ComponentListSupplier.error(info: ComponentSupplier, tab: Int = 2) { + content(info, { red() }, ComponentSlang.Wrong(tab)) } fun ComponentListSupplier.command(info: ComponentSupplier) { diff --git a/src/main/java/net/phasetranscrystal/breacore/data/Datagen.java b/src/main/java/net/phasetranscrystal/breacore/data/Datagen.java new file mode 100644 index 0000000..7ce319b --- /dev/null +++ b/src/main/java/net/phasetranscrystal/breacore/data/Datagen.java @@ -0,0 +1,20 @@ +package net.phasetranscrystal.breacore.data; + +import net.phasetranscrystal.brealib.BreaLib; + +import net.phasetranscrystal.registrylib.datagen.ProviderType; + +import net.phasetranscrystal.breacore.api.registry.registrate.BreaRegistryCore; +import net.phasetranscrystal.breacore.data.lang.LangHandler; + +import static net.phasetranscrystal.breacore.common.BreaRegistration.REGISTRATE; + +public class Datagen { + + public static void init() { + if (BreaLib.isDataGen()) { + REGISTRATE.addDataGenerator(ProviderType.LANG, LangHandler::enInitialize); + REGISTRATE.addDataGenerator(BreaRegistryCore.LANG_ZH_CN, LangHandler::cnInitialize); + } + } +} diff --git a/src/main/java/net/phasetranscrystal/breacore/data/blocks/DebugBlocks.java b/src/main/java/net/phasetranscrystal/breacore/data/blocks/DebugBlocks.java index b1589d6..96f185e 100644 --- a/src/main/java/net/phasetranscrystal/breacore/data/blocks/DebugBlocks.java +++ b/src/main/java/net/phasetranscrystal/breacore/data/blocks/DebugBlocks.java @@ -4,6 +4,7 @@ import net.phasetranscrystal.breacore.common.block.debug.CheckMatBlock; import net.phasetranscrystal.breacore.common.data.BreaCreativeModeTabs; import net.phasetranscrystal.breacore.common.data.BreaTooltips; +import net.phasetranscrystal.breacore.common.data.translation.ComponentSlang; import static net.phasetranscrystal.breacore.common.BreaRegistration.DEBUG_REGISTRATE; import static net.phasetranscrystal.breacore.common.BreaRegistration.REGISTRATE; @@ -18,6 +19,7 @@ public class DebugBlocks { public static void init() { MatCheckBlock = DEBUG_REGISTRATE.block("mat_check", CheckMatBlock::new) .item((builder) -> builder + .addTooltip(ComponentSlang.INSTANCE.getInfinite().get()) .addTooltip(BreaTooltips.DebugItem)) .lang("Material Check Block") .lang(BreaRegistryCore.LANG_ZH_CN, "材料检测方块") diff --git a/src/main/java/net/phasetranscrystal/breacore/data/lang/BlockLang.java b/src/main/java/net/phasetranscrystal/breacore/data/lang/BlockLang.java new file mode 100644 index 0000000..5953a5e --- /dev/null +++ b/src/main/java/net/phasetranscrystal/breacore/data/lang/BlockLang.java @@ -0,0 +1,6 @@ +package net.phasetranscrystal.breacore.data.lang; + +public class BlockLang { + + public static void init() {} +} diff --git a/src/main/java/net/phasetranscrystal/breacore/data/lang/ItemLang.java b/src/main/java/net/phasetranscrystal/breacore/data/lang/ItemLang.java new file mode 100644 index 0000000..049594d --- /dev/null +++ b/src/main/java/net/phasetranscrystal/breacore/data/lang/ItemLang.java @@ -0,0 +1,10 @@ +package net.phasetranscrystal.breacore.data.lang; + +import static net.phasetranscrystal.breacore.data.lang.LangHandler.addCNEN; + +public class ItemLang { + + public static void init() { + addCNEN("breacore.item.deprecated", "该物品已弃用", "This item has been deprecated"); + } +} diff --git a/src/main/java/net/phasetranscrystal/breacore/data/lang/LangHandler.java b/src/main/java/net/phasetranscrystal/breacore/data/lang/LangHandler.java new file mode 100644 index 0000000..6c2d6ee --- /dev/null +++ b/src/main/java/net/phasetranscrystal/breacore/data/lang/LangHandler.java @@ -0,0 +1,53 @@ +package net.phasetranscrystal.breacore.data.lang; + +import net.phasetranscrystal.registrylib.datagen.provider.RegistryLibLangProvider; + +import net.phasetranscrystal.breacore.api.annotation.TranslationKeyProvider; +import net.phasetranscrystal.breacore.api.lang.CNEN; + +import net.neoforged.neoforge.common.data.LanguageProvider; + +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; + +import java.util.Map; + +public class LangHandler { + + private static final Map LANGS = new Object2ObjectOpenHashMap<>(); + + private static void addCNEN(String key, CNEN CNEN) { + if (LANGS.containsKey(key)) throw new IllegalArgumentException("Duplicate key: " + key); + LANGS.put(key, CNEN); + } + + public static void addCNEN(String key, String cn, String en) { + addCNEN(key, new CNEN(cn, en)); + } + + public static void addCN(String key, String cn) { + addCNEN(key, cn, null); + } + + public static void init() { + TranslationKeyProvider.LANG.forEach(LangHandler::addCNEN); + addCNEN("key.breacore.nightvision", "夜视开关", "Night Vision Toggle"); + } + + public static void enInitialize(LanguageProvider provider) { + init(); + MachineLang.init(); + BlockLang.init(); + ItemLang.init(); + LANGS.forEach((k, v) -> { + if (v.en() == null) return; + provider.add(k, v.en()); + }); + } + + public static void cnInitialize(RegistryLibLangProvider provider) { + LANGS.forEach((k, v) -> { + if (v.cn() == null) return; + provider.add(k, v.cn()); + }); + } +} diff --git a/src/main/java/net/phasetranscrystal/breacore/data/lang/MachineLang.java b/src/main/java/net/phasetranscrystal/breacore/data/lang/MachineLang.java new file mode 100644 index 0000000..5eeae7c --- /dev/null +++ b/src/main/java/net/phasetranscrystal/breacore/data/lang/MachineLang.java @@ -0,0 +1,11 @@ +package net.phasetranscrystal.breacore.data.lang; + +import static net.phasetranscrystal.breacore.data.lang.LangHandler.addCNEN; + +public class MachineLang { + + public static void init() { + addCNEN("gui.tooltips.redstone_mode.enabled", "启用红石模式,机器接收红石信号", "Enable redstone mode, the machine will receive redstone signals"); + addCNEN("gui.tooltips.redstone_mode.disabled", "禁用红石模式,机器无视红石信号", "Disable redstone mode, the machine will ignore redstone signals"); + } +} diff --git a/src/main/java/net/phasetranscrystal/breacore/utils/StringUtils.java b/src/main/java/net/phasetranscrystal/breacore/utils/StringUtils.java index c453a66..160b64f 100644 --- a/src/main/java/net/phasetranscrystal/breacore/utils/StringUtils.java +++ b/src/main/java/net/phasetranscrystal/breacore/utils/StringUtils.java @@ -2,35 +2,99 @@ import net.minecraft.ChatFormatting; +import java.util.regex.Pattern; + public final class StringUtils { public static final String EMPTY = ""; + private static final String[] ChineseNumbers = new String[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; + + private StringUtils() {} - private StringUtils() { - throw new UnsatisfiedLinkError("Not Impl"); + public static String numberToChinese(int var0) { + if (var0 >= 0 && var0 <= 9) { + return ChineseNumbers[var0]; + } else { + throw new IllegalArgumentException("Number must be between 0 and 9"); + } } - public static native String numberToChinese(int var0); + public static String[] decompose(String var0) { + return internalDecompose(':', var0); + } - public static native String[] decompose(String var0); + private static String[] internalDecompose(char var0, String var1) { + String[] var2 = new String[] { var1, "" }; + int var3 = var1.indexOf(var0); + if (var3 >= 0) { + var2[1] = var1.substring(var3 + 1); + if (var3 >= 1) { + var2[0] = var1.substring(0, var3); + } + } + + return var2; + } - private static native String[] ㅤࣨࣳࣻ(char var0, String var1); + public static String[] lastDecompose(char var0, String var1) { + String[] var2 = new String[] { var1, "" }; + int var3 = var1.lastIndexOf(var0); + if (var3 >= 0) { + var2[1] = var1.substring(var3 + 1); + var2[0] = var1.substring(0, var3); + } - public static native String[] lastDecompose(char var0, String var1); + return var2; + } - public static native boolean containsWithWildcard(String[] var0, String var1); + public static boolean containsWithWildcard(String[] var0, String var1) { + for (String var5 : var0) { + if (Pattern.matches(var5, var1)) { + return true; + } + } - public static native String full_color(String var0); + return false; + } - public static native String dark_purplish_red(String var0); + public static String full_color(String var0) { + return internalDecompose(var0, new ChatFormatting[] { ChatFormatting.RED, ChatFormatting.GOLD, ChatFormatting.YELLOW, ChatFormatting.GREEN, ChatFormatting.AQUA, ChatFormatting.BLUE, ChatFormatting.LIGHT_PURPLE }, (double) 80.0F); + } - public static native String white_blue(String var0); + public static String dark_purplish_red(String var0) { + return internalDecompose(var0, new ChatFormatting[] { ChatFormatting.DARK_PURPLE, ChatFormatting.DARK_RED }, (double) 160.0F); + } - public static native String purplish_red(String var0); + public static String white_blue(String var0) { + return internalDecompose(var0, new ChatFormatting[] { ChatFormatting.BLUE, ChatFormatting.BLUE, ChatFormatting.BLUE, ChatFormatting.BLUE, ChatFormatting.WHITE, ChatFormatting.BLUE, ChatFormatting.WHITE, ChatFormatting.WHITE, ChatFormatting.BLUE, ChatFormatting.WHITE, ChatFormatting.WHITE, ChatFormatting.BLUE, ChatFormatting.RED, ChatFormatting.WHITE }, (double) 80.0F); + } - public static native String golden(String var0); + public static String purplish_red(String var0) { + return internalDecompose(var0, new ChatFormatting[] { ChatFormatting.LIGHT_PURPLE, ChatFormatting.DARK_PURPLE }, (double) 160.0F); + } + + public static String golden(String var0) { + return internalDecompose(var0, new ChatFormatting[] { ChatFormatting.YELLOW, ChatFormatting.GOLD }, (double) 160.0F); + } + + public static String dark_green(String var0) { + return internalDecompose(var0, new ChatFormatting[] { ChatFormatting.GREEN, ChatFormatting.DARK_GREEN }, (double) 160.0F); + } + + private static String internalDecompose(String var0, ChatFormatting[] var1, double var2) { + StringBuilder var4 = new StringBuilder(var0.length() * 3); + if (var2 <= (double) 0.0F) { + var2 = 0.001; + } - public static native String dark_green(String var0); + int var5 = (int) Math.floor((double) (System.currentTimeMillis() & 16383L) / var2) % var1.length; - private static native String ㅤࣨࣳࣻ(String var0, ChatFormatting[] var1, double var2); + for (int var6 = 0; var6 < var0.length(); ++var6) { + char var7 = var0.charAt(var6); + var4.append(var1[(var1.length + var6 - var5) % var1.length].toString()); + var4.append(var7); + } + + return var4.toString(); + } } diff --git a/src/main/java/net/phasetranscrystal/breacore/utils/TooltipHelper.java b/src/main/java/net/phasetranscrystal/breacore/utils/TooltipHelper.java index 344db68..33a1f12 100644 --- a/src/main/java/net/phasetranscrystal/breacore/utils/TooltipHelper.java +++ b/src/main/java/net/phasetranscrystal/breacore/utils/TooltipHelper.java @@ -19,26 +19,26 @@ public class TooltipHelper { public static final UnaryOperator