Skip to content

Commit 04c70fd

Browse files
committed
feat: 补全配方,删除重复配方
1 parent ef03d66 commit 04c70fd

6 files changed

Lines changed: 180 additions & 2 deletions

File tree

src/main/java/io/github/cpearl0/ctnhcore/CTNHCoreGTAddon.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ public void addRecipes(Consumer<FinishedRecipe> provider) {
128128
FunctionalStorageRecipes.init(provider);
129129
CafeRecipes.init(provider);
130130
SunRecipes.init(provider);
131-
TinkersRecipes.init(provider);
132131
SophisticatedStorageRecipes.init(provider);
133132
ImmersiveAircraftRecipes.init(provider);
134133
NaquadahReactorRecipes.init(provider);

src/main/java/io/github/cpearl0/ctnhcore/data/recipe/RecipeRemoval.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public static void init(Consumer<ResourceLocation> registry) {
2828
biomancyRemovals();
2929
functionalStorageRemovals();
3030
dieselGeneratorRemovals();
31+
vintageRemovals();
3132
tconstructRecipeRemovals();
3233
migratedModRecipeRemovals();
3334
// 放最后
@@ -143,7 +144,10 @@ public static void dieselGeneratorRemovals() {
143144
"createdieselgenerators:crafting/engine_piston_from_rods",
144145
"createdieselgenerators:mixing/asphalt_block",
145146
"createdieselgenerators:crafting/asphalt_block",
146-
"createdieselgenerators:mixing/biodiesel"));
147+
"createdieselgenerators:mixing/biodiesel",
148+
// 迁移自 kubejs:replaceInput pumpjack_crank + replaceOutput plant_oil
149+
"createdieselgenerators:mechanical_crafting/pumpjack_crank",
150+
"createdieselgenerators:compacting/plant_oil"));
147151
}
148152

149153
public static void functionalStorageRemovals() {
@@ -159,6 +163,27 @@ public static void functionalStorageRemovals() {
159163
"functionalstorage:oak_drawer_alternate_x4"));
160164
}
161165

166+
public static void vintageRemovals() {
167+
// 迁移自 kubejs/server_scripts/src/create/createFallen.js:remove_recipes_id + remove_recipes_type
168+
removePaths.addAll(List.of(
169+
"vintageimprovements:craft/centrifuge",
170+
"vintageimprovements:craft/spring_coiling_machine",
171+
"vintageimprovements:craft/vacuum_chamber",
172+
"vintageimprovements:craft/vibrating_table",
173+
"vintageimprovements:craft/curving_press",
174+
"vintageimprovements:craft/laser",
175+
"vintageimprovements:mechanical_crafting/helve_hammer",
176+
// 原版 coiling 配方(remove_recipes_type "vintageimprovements:coiling")
177+
"vintageimprovements:coiling/iron_spring",
178+
"vintageimprovements:coiling/gold_spring",
179+
"vintageimprovements:coiling/steel_spring",
180+
"vintageimprovements:coiling/copper_spring"));
181+
// 迁移自 kubejs:remove_recipes_id 移除电路板工作台合成
182+
removePaths.addAll(List.of(
183+
"gtceu:shaped/basic_circuit_board",
184+
"gtceu:shaped/good_circuit_board"));
185+
}
186+
162187
public static void migratedModRecipeRemovals() {
163188
removePaths.addAll(List.of(
164189
// 迁移来源:Z:/Git/Create-New-Horizon/kubejs/server_scripts/src/apothesis/spawner.js

src/main/java/io/github/cpearl0/ctnhcore/data/recipe/create/DieselGeneratorRecipes.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,14 @@
1010
import com.gregtechceu.gtceu.common.data.GTMaterials;
1111
import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper;
1212

13+
import net.minecraft.core.registries.Registries;
1314
import net.minecraft.data.recipes.FinishedRecipe;
15+
import net.minecraft.resources.ResourceLocation;
16+
import net.minecraft.tags.TagKey;
17+
import net.minecraft.world.item.Item;
1418
import net.minecraft.world.item.ItemStack;
1519
import net.minecraft.world.item.Items;
20+
import net.minecraft.world.item.crafting.Ingredient;
1621

1722
import com.jesz.createdieselgenerators.CDGBlocks;
1823
import com.jesz.createdieselgenerators.CDGItems;
@@ -38,6 +43,7 @@ public class DieselGeneratorRecipes {
3843

3944
public static void init(Consumer<FinishedRecipe> provider) {
4045
shapedRecipes(provider);
46+
mechanicalCraftingRecipes(provider);
4147
itemApplicationRecipes(provider);
4248
mixingRecipes(provider);
4349
compactingRecipes(provider);
@@ -83,6 +89,19 @@ private static void shapedRecipes(Consumer<FinishedRecipe> provider) {
8389
'D', new ItemStack(Items.CLOCK));
8490
}
8591

92+
private static void mechanicalCraftingRecipes(Consumer<FinishedRecipe> provider) {
93+
// 迁移自 kubejs/server_scripts/src/dieselgenerator.js:replaceInput pumpjack_crank
94+
// 原版配方:andesite_alloy_ingot → andesite_alloy_plate、iron_plate → steel_plate、zinc_ingot → zinc_plate
95+
MechanicalCraftingRecipeBuilder.builder(CTNHCore.id("diesel/pumpjack_crank"))
96+
.pattern("AIA", " S ", "AIA", "ZSZ", "AZA")
97+
.key('A', ChemicalHelper.get(TagPrefix.plate, CTPPMaterials.AndesiteAlloy))
98+
.key('I', ChemicalHelper.get(TagPrefix.plate, GTMaterials.Steel))
99+
.key('Z', ChemicalHelper.get(TagPrefix.plate, GTMaterials.Zinc))
100+
.key('S', AllBlocks.SHAFT.asStack())
101+
.result(new ItemStack(CDGItems.PUMPJACK_CRANK.get()))
102+
.save(provider);
103+
}
104+
86105
private static void itemApplicationRecipes(Consumer<FinishedRecipe> provider) {
87106
// steel_casing: treated_wood_planks + wrought_iron_plate -> steel_casing
88107
ItemApplicationRecipeBuilder.builder("steel_casing")
@@ -152,6 +171,13 @@ private static void compactingRecipes(Consumer<FinishedRecipe> provider) {
152171
.inputFluid(BiodieselFertileSoilMaterials.PETROLEUM_COKE.getFluid(144))
153172
.result(ChemicalHelper.get(TagPrefix.gem, BiodieselFertileSoilMaterials.PETROLEUM_COKE))
154173
.save(provider);
174+
// 迁移自 kubejs/server_scripts/src/dieselgenerator.js:replaceOutput plant_oil → seed_oil
175+
TagKey<Item> SEEDS_TAG = TagKey.create(Registries.ITEM,
176+
ResourceLocation.parse("forge:seeds"));
177+
CompactingRecipeBuilder.builder("plant_oil")
178+
.input(Ingredient.of(SEEDS_TAG))
179+
.resultFluid(GTMaterials.SeedOil.getFluid(100))
180+
.save(provider);
155181
}
156182

157183
private static void crushingRecipes(Consumer<FinishedRecipe> provider) {

src/main/java/io/github/cpearl0/ctnhcore/data/tags/FluidTypeTags.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,31 @@
99
import com.tterrag.registrate.providers.RegistrateTagsProvider;
1010
import fr.lucreeper74.createmetallurgy.registries.CMFluids;
1111

12+
import java.util.List;
1213
import java.util.Objects;
1314

1415
public class FluidTypeTags {
1516

17+
/** 迁移自 kubejs:需要从 tconstruct 标签中移除的 GTCEu 流体材料列表 */
18+
private static final List<String> TCONSTRUCT_MATERIALS = List.of(
19+
"precious_alloy", "tin", "silver", "zinc", "nickel", "lead", "beryllium",
20+
"molybdenum", "brass", "gold", "iron", "bronze", "copper", "cobalt",
21+
"manganese", "slag", "steel", "aluminium", "uranium", "osmium", "invar",
22+
"electrum", "platinum", "tungsten", "rose_gold", "glass");
23+
1624
public static void init(RegistrateTagsProvider<Fluid> provider) {
25+
// 迁移自 kubejs:event.add('forge:steel','createmetallurgy:molten_steel')
1726
create(provider, fluidTag("forge", "steel"), CMFluids.MOLTEN_STEEL.get());
27+
// 迁移自 kubejs:event.removeAll('tconstruct:<material>') + event.remove('tconstruct:glass','tconstruct:glass')
28+
clearTConstructTags(provider);
29+
}
30+
31+
private static void clearTConstructTags(RegistrateTagsProvider<Fluid> provider) {
32+
for (String material : TCONSTRUCT_MATERIALS) {
33+
TagClearHelper.clear(provider,
34+
TagKey.create(Registries.FLUID,
35+
ResourceLocation.fromNamespaceAndPath("tconstruct", material)));
36+
}
1837
}
1938

2039
private static TagKey<Fluid> fluidTag(String namespace, String path) {

src/main/java/io/github/cpearl0/ctnhcore/data/tags/ItemTags.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.gregtechceu.gtceu.api.data.tag.TagUtil;
44

5+
import net.minecraft.core.registries.Registries;
6+
import net.minecraft.resources.ResourceLocation;
7+
import net.minecraft.tags.TagKey;
58
import net.minecraft.world.item.Item;
69

710
import appeng.api.features.P2PTunnelAttunement;
@@ -13,5 +16,14 @@ public class ItemTags {
1316
public static void init(RegistrateTagsProvider<Item> provider) {
1417
provider.addTag(P2PTunnelAttunement.getAttunementTag(CEItems.EU_P2P))
1518
.addTag(TagUtil.createModItemTag("batteries"));
19+
// 迁移自 kubejs:添加 GTCEu 挤出模具到 vintageimprovements 冲压头标签
20+
provider.addTag(curvingHeadsTag())
21+
.add(TagUtil.createModItemTag("small_gear_extruder_mold"))
22+
.add(TagUtil.createModItemTag("gear_extruder_mold"));
23+
}
24+
25+
private static TagKey<Item> curvingHeadsTag() {
26+
return TagKey.create(Registries.ITEM,
27+
ResourceLocation.fromNamespaceAndPath("vintageimprovements", "curving_heads"));
1628
}
1729
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package io.github.cpearl0.ctnhcore.data.tags;
2+
3+
import net.minecraft.data.tags.TagsProvider;
4+
import net.minecraft.tags.TagBuilder;
5+
import net.minecraft.tags.TagKey;
6+
7+
import com.tterrag.registrate.providers.RegistrateTagsProvider;
8+
9+
import java.lang.reflect.Field;
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
/**
14+
* Tag 清空工具。
15+
* 生成 {@code {"replace": true, "values": []}} 覆盖下游数据包/模组的标签,
16+
* 等效于 KubeJS 的 {@code event.removeAll(tag)}。
17+
*/
18+
public class TagClearHelper {
19+
20+
/**
21+
* 清空(覆盖为空)一个标签。
22+
*
23+
* @param provider Registrate 标签数据生成器
24+
* @param tagKey 要清空的标签
25+
* @param <T> 注册表类型(Item / Fluid / Block …)
26+
*/
27+
public static <T> void clear(RegistrateTagsProvider<T> provider, TagKey<T> tagKey) {
28+
var appender = provider.addTag(tagKey);
29+
TagBuilder builder = extractBuilder(appender);
30+
builder.replace(true);
31+
}
32+
33+
/**
34+
* 批量清空多个标签。
35+
*/
36+
@SafeVarargs
37+
public static <T> void clearAll(RegistrateTagsProvider<T> provider, TagKey<T>... tagKeys) {
38+
for (var key : tagKeys) {
39+
clear(provider, key);
40+
}
41+
}
42+
43+
// -----------------------------------------------------------
44+
// 反射:从 TagAppender 中取出 TagBuilder 实例
45+
// -----------------------------------------------------------
46+
private static final Class<?> TAG_APPENDER_CLASS;
47+
private static final List<Field> BUILDER_FIELDS = new ArrayList<>();
48+
49+
static {
50+
// RegistrateTagsProvider.addTag() 返回的对象类型取决于 registrate 版本。
51+
// 可能直接返回 net.minecraft.data.tags.TagsProvider.TagAppender,
52+
// 也可能是 registrate 自己的包装类。两者内部都持有 TagBuilder 字段。
53+
Class<?> clazz = null;
54+
try {
55+
clazz = Class.forName("com.tterrag.registrate.providers.RegistrateTagsProvider$TagAppender");
56+
} catch (ClassNotFoundException ignored) {
57+
// 老版本 registrate 可能没有内部 TagAppender,回退到 TagsProvider.TagAppender
58+
}
59+
if (clazz == null) {
60+
clazz = TagsProvider.TagAppender.class;
61+
}
62+
TAG_APPENDER_CLASS = clazz;
63+
64+
// 缓存所有类型为 TagBuilder 的字段
65+
for (var field : clazz.getDeclaredFields()) {
66+
if (TagBuilder.class.isAssignableFrom(field.getType())) {
67+
field.setAccessible(true);
68+
BUILDER_FIELDS.add(field);
69+
}
70+
}
71+
// 也查父类
72+
Class<?> superClazz = clazz.getSuperclass();
73+
while (superClazz != null && superClazz != Object.class) {
74+
for (var field : superClazz.getDeclaredFields()) {
75+
if (TagBuilder.class.isAssignableFrom(field.getType())) {
76+
field.setAccessible(true);
77+
BUILDER_FIELDS.add(field);
78+
}
79+
}
80+
superClazz = superClazz.getSuperclass();
81+
}
82+
}
83+
84+
private static TagBuilder extractBuilder(Object appender) {
85+
if (BUILDER_FIELDS.isEmpty()) {
86+
// 如果反射没找到字段,尝试通过 TagsProvider 的 builders map 来设置
87+
throw new IllegalStateException(
88+
"Cannot find TagBuilder field in " + appender.getClass().getName()
89+
+ ". TagClearHelper requires a compatible TagsProvider implementation.");
90+
}
91+
try {
92+
return (TagBuilder) BUILDER_FIELDS.get(0).get(appender);
93+
} catch (IllegalAccessException e) {
94+
throw new RuntimeException("Failed to access TagBuilder via reflection", e);
95+
}
96+
}
97+
}

0 commit comments

Comments
 (0)