Skip to content

Commit 18c568a

Browse files
author
Circulate233
committed
生物演算的配方运行调整
1 parent 774e17c commit 18c568a

38 files changed

+927
-19
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ dependencies {
212212
// Mod Dependencies
213213
implementation("CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.+")
214214
implementation(rfg.deobf("curse.maven:electroblobs-wizardry-265642:5354477"))
215-
implementation(rfg.deobf("curse.maven:modularmachinery-community-edition-817377:5952626"))
215+
implementation(rfg.deobf("kasuminova:ModularMachinery-CE:2.1.6:dev"))
216216
implementation(rfg.deobf("kasuminova:MMCE-ComponentModelHider:1.1:dev"))
217217
implementation(rfg.deobf("lumien231:resourceloader:1.5.3:main"))
218218
// implementation(rfg.deobf("curse.maven:modularmachinery-community-edition-817377:5255734"))
1.95 MB
Binary file not shown.
-1.75 MB
Binary file not shown.

src/main/java/github/kasuminova/novaeng/common/CommonProxy.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public void init() {
106106
RegistryMachineSpecial.registrySpecialMachine(GeocentricDrill.INSTANCE);
107107
if (Loader.isModLoaded("deepmoblearning")) {
108108
RegistryMachineSpecial.registrySpecialMachine(MaterialSequenceProcessing.INSTANCE);
109+
RegistryMachineSpecial.registrySpecialMachine(BiogenicSimulationComputer.INSTANCE);
109110
}
110111
if (Mods.AE2.isPresent()) {
111112
List<ICellHandler> handlers = ((AccessorCellRegistry) (AEApi.instance().registries().cell())).getHandlers();
Lines changed: 282 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,282 @@
1+
package github.kasuminova.novaeng.common.machine;
2+
3+
import crafttweaker.CraftTweakerAPI;
4+
import crafttweaker.api.item.IItemStack;
5+
import crafttweaker.api.minecraft.CraftTweakerMC;
6+
import github.kasuminova.mmce.common.event.client.ControllerGUIRenderEvent;
7+
import github.kasuminova.mmce.common.helper.IMachineController;
8+
import github.kasuminova.novaeng.common.crafttweaker.hypernet.HyperNetHelper;
9+
import hellfirepvp.modularmachinery.ModularMachinery;
10+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.MachineModifier;
11+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeBuilder;
12+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeModifierBuilder;
13+
import hellfirepvp.modularmachinery.common.machine.DynamicMachine;
14+
import hellfirepvp.modularmachinery.common.machine.factory.FactoryRecipeThread;
15+
import mustapelto.deepmoblearning.common.DMLRegistry;
16+
import mustapelto.deepmoblearning.common.util.DataModelHelper;
17+
import net.minecraft.item.ItemStack;
18+
import net.minecraft.nbt.NBTTagCompound;
19+
import net.minecraft.util.ResourceLocation;
20+
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
24+
import static github.kasuminova.novaeng.common.crafttweaker.expansion.RecipePrimerHyperNet.requireComputationPoint;
25+
import static github.kasuminova.novaeng.common.util.RecipePrimerEx.setLore;
26+
27+
public class BiogenicSimulationComputer implements MachineSpecial {
28+
private static final String MachineID = "biogenic_simulation_computer";
29+
public static final ResourceLocation REGISTRY_NAME = new ResourceLocation(ModularMachinery.MODID, MachineID);
30+
public static final BiogenicSimulationComputer INSTANCE = new BiogenicSimulationComputer();
31+
final IItemStack clay = CraftTweakerMC.getIItemStack(new ItemStack(DMLRegistry.ITEM_POLYMER_CLAY));
32+
33+
private static final String[] inscriberModels = {
34+
"数位演算模块-α",
35+
"数位演算模块-β",
36+
"数位演算模块-δ",
37+
"数位演算模块-Ω"
38+
};
39+
40+
@Override
41+
public void init(final DynamicMachine machine) {
42+
MachineModifier.setMaxThreads(MachineID, 0);
43+
for (String i : inscriberModels) {
44+
MachineModifier.addCoreThread(MachineID, FactoryRecipeThread.createCoreThread(i));
45+
}
46+
HyperNetHelper.proxyMachineForHyperNet(MachineID);
47+
48+
for (int i = 0; i < inscriberModels.length; i++) {
49+
final var ysqname = "ysqname" + i;
50+
final var ysqddcs = "ysqddcs" + i;
51+
final String prepare = "prepare" + i;
52+
53+
var r = RecipeBuilder.newBuilder("moxll" + i, MachineID, 1, 0)
54+
.addItemInput(CraftTweakerAPI.oreDict.get("dataModel")).setTag("dataModel")
55+
.setNBTChecker((ctrl, iitem) -> {
56+
var item = CraftTweakerMC.getItemStack(iitem);
57+
var data = ctrl.getController().getCustomDataTag();
58+
59+
data.setTag(prepare, item.writeToNBT(new NBTTagCompound()));
60+
return true;
61+
})
62+
.addPreCheckHandler(event -> {
63+
var ctrl = event.getController();
64+
var data = ctrl.getCustomDataTag();
65+
66+
if (data.hasKey(ysqname)) {
67+
event.setFailed("数据模块注入完成,可以开始演算");
68+
69+
for (int ii = 0; ii < inscriberModels.length; ii++) {
70+
data.removeTag("prepare" + ii);
71+
}
72+
}
73+
})
74+
.addFactoryStartHandler(event -> {
75+
var ctrl = event.getController();
76+
var data = ctrl.getCustomDataTag();
77+
78+
if (!data.hasKey(ysqname)) {
79+
var itemData = (NBTTagCompound) data.getTag(prepare);
80+
var preItem = new ItemStack(itemData);
81+
int tier = DataModelHelper.getTier(preItem);
82+
int dataCount = DataModelHelper.getCurrentTierDataCount(preItem);
83+
int tierend = (tier <= 1) ? 32 * tier + dataCount : dataCount + (tier - 1) * 10000 + 32;
84+
85+
data.setTag(ysqname, itemData);
86+
data.setLong(ysqddcs, tierend);
87+
88+
for (int ii = 0; ii < inscriberModels.length; ii++) {
89+
data.removeTag("prepare" + ii);
90+
}
91+
}
92+
})
93+
.addOutput(CraftTweakerMC.getIItemStack(new ItemStack(DMLRegistry.ITEM_DATA_MODEL_BLANK)))
94+
.setParallelized(false)
95+
.addRecipeTooltip("将数据模型写入数位演算模块", "请将数据模型放入控制器正上方的微型物品输入仓中")
96+
.setThreadName(inscriberModels[i]);
97+
if (i != 0) {
98+
r.setLoadJEI(false);
99+
}
100+
r.build();
101+
102+
var o = RecipeBuilder.newBuilder("moni" + i, MachineID, 60, 0)
103+
.addEnergyPerTickInput(1000000)
104+
.addItemInput(clay)
105+
.addPreCheckHandler(event -> {
106+
var ctrl = event.getController();
107+
var data = ctrl.getCustomDataTag();
108+
var parallelism = Math.max(data.getInteger("parallelism"), 1);
109+
110+
if (!data.hasKey(ysqname)) {
111+
event.setFailed("没有数据模型!");
112+
return;
113+
}
114+
115+
event.getActiveRecipe().setMaxParallelism(parallelism);
116+
})
117+
.addFactoryStartHandler(event -> {
118+
var ctrl = event.getController();
119+
var data = ctrl.getCustomDataTag();
120+
var ysqddcss = data.getInteger(ysqddcs);
121+
var bl = event.getFactoryRecipeThread();
122+
if (ysqddcss < 32) {
123+
bl.addModifier("duration", RecipeModifierBuilder.create("modularmachinery:duration", "input", 60, 1, false).build());
124+
bl.addModifier("energy", RecipeModifierBuilder.create("modularmachinery:energy", "input", 20, 1, false).build());
125+
}
126+
})
127+
.addItemOutput(CraftTweakerAPI.oreDict.get("pristine")).addItemModifier((ctrl, Item) -> outputPristineMatter(ctrl,ysqname,ysqddcs))
128+
.addItemOutput(CraftTweakerAPI.oreDict.get("livingMatter")).addItemModifier((ctrl, Item) -> outputLivingMatter(ctrl, ysqname))
129+
.addFactoryFinishHandler(event -> {
130+
var ctrl = event.getController();
131+
var data = ctrl.getCustomDataTag();
132+
var bx = event.getFactoryRecipeThread().getActiveRecipe().getParallelism();
133+
134+
data.setLong(ysqddcs, data.getLong(ysqddcs) + bx);
135+
})
136+
.addRecipeTooltip(
137+
"使用数位演算模块进行模拟,并且输出物质",
138+
"概率继承自模拟室,并且每个等级额外提高2%",
139+
"等级为0的模型需要60倍的时间和20倍能量来进行初步推算"
140+
)
141+
.setThreadName(inscriberModels[i]);
142+
if (i != 0) {
143+
o.setLoadJEI(false);
144+
}
145+
requireComputationPoint(o, 100.0F).build();
146+
147+
var d = RecipeBuilder.newBuilder("mxdc" + i, MachineID, 1)
148+
.addItemInput(CraftTweakerMC.getIItemStack(new ItemStack(DMLRegistry.ITEM_DATA_MODEL_BLANK)))
149+
.addPreCheckHandler(event -> {
150+
var ctrl = event.getController();
151+
var data = ctrl.getCustomDataTag();
152+
153+
if (!data.hasKey(ysqname)) {
154+
event.setFailed("没有可以导出的数据");
155+
}
156+
})
157+
.addOutput(CraftTweakerAPI.oreDict.get("dataModel"));
158+
setLore(d, "§6提取出写入的模型")
159+
.addItemModifier((ctrl, Item) -> outputdata(ctrl, ysqname,ysqddcs))
160+
.setParallelized(false)
161+
.addRecipeTooltip("将数据模型从数位演算模块导出", "会先从哪个数据里导出?谁知道呢,试试不就知道了")
162+
.setThreadName(inscriberModels[i]);
163+
if (i > 0) {
164+
d.setLoadJEI(false);
165+
}
166+
d.build();
167+
}
168+
169+
machine.addMachineEventHandler(ControllerGUIRenderEvent.class,event -> {
170+
var ctrl = event.getController();
171+
var data = ctrl.getCustomDataTag();
172+
List<String> info = new ArrayList<>();
173+
174+
for (int i = 0; i < inscriberModels.length; i++) {
175+
var itemData = data.getTag("ysqname" + i);
176+
String ysqname;
177+
if (itemData == null){
178+
ysqname = "暂无";
179+
} else {
180+
var item = new ItemStack((NBTTagCompound) itemData);
181+
ysqname = item.getItem().getItemStackDisplayName(item).replaceAll("[(].*","");
182+
}
183+
var ysqddcs = data.getLong("ysqddcs" + i);
184+
info.add("当前记录模型:" + ysqname);
185+
info.add("当前迭代次数:" + ysqddcs);
186+
}
187+
188+
event.setExtraInfo(info.toArray(new String[0]));
189+
});
190+
}
191+
192+
@Override
193+
public ResourceLocation getRegistryName() {
194+
return REGISTRY_NAME;
195+
}
196+
197+
private IItemStack outputLivingMatter(IMachineController ctrl, String ysqnamess) {
198+
var data = ctrl.getController().getCustomDataTag();
199+
var name = data.getTag(ysqnamess);
200+
var item = DataModelHelper.getDataModelMetadata(new ItemStack((NBTTagCompound) name));
201+
202+
return item.map(dataModel -> CraftTweakerMC.getIItemStack(dataModel.getLivingMatter())).orElse(null);
203+
}
204+
205+
private IItemStack outputPristineMatter(IMachineController ctrl, String ysqnamess,String ysqddcss) {
206+
var data = ctrl.getController().getCustomDataTag();
207+
var name = data.getTag(ysqnamess);
208+
var ysqddcs = data.getLong(ysqddcss);
209+
var world = ctrl.getController().getWorld();
210+
var Random = world.rand.nextInt(99) + 1;
211+
var item = DataModelHelper.getDataModelMetadata(new ItemStack((NBTTagCompound) name));
212+
213+
boolean itemsl;
214+
if (ysqddcs >= 32){
215+
if (ysqddcs < 10032){
216+
itemsl = 6 >= Random;
217+
} else if (ysqddcs < 20032){
218+
itemsl = 12 >= Random;
219+
} else if (ysqddcs < 30032){
220+
itemsl = 14 >= Random;
221+
} else {
222+
itemsl = 20 >= Random;
223+
}
224+
} else {
225+
itemsl = false;
226+
}
227+
228+
if (item.isPresent()){
229+
if (itemsl) {
230+
return CraftTweakerMC.getIItemStack(item.get().getPristineMatter());
231+
} else {
232+
return null;
233+
}
234+
} else {
235+
return clay.amount(1);
236+
}
237+
}
238+
239+
private IItemStack outputdata(IMachineController ctrl, String ysqnamess, String ysqddcss) {
240+
var data = ctrl.getController().getCustomDataTag();
241+
var name = data.getTag(ysqnamess);
242+
var ysqddcs = data.getLong(ysqddcss);
243+
244+
var tiers = 0;
245+
var dataCounts = 0;
246+
247+
if (ysqddcs < 32) {
248+
tiers = 0;
249+
dataCounts = (int) ysqddcs;
250+
} else if (ysqddcs < 10032){
251+
tiers = 1;
252+
dataCounts = (int) (ysqddcs - 32);
253+
} else if (ysqddcs < 20032){
254+
tiers = 2;
255+
dataCounts = (int) (ysqddcs - 10032);
256+
} else if (ysqddcs < 30032){
257+
tiers = 3;
258+
dataCounts = (int) (ysqddcs - 20032);
259+
} else {
260+
tiers = 4;
261+
if (ysqddcs > 2000000000){
262+
dataCounts = 2000000000;
263+
} else {
264+
dataCounts = (int)ysqddcs;
265+
}
266+
}
267+
268+
data.removeTag(ysqnamess);
269+
data.removeTag(ysqddcss);
270+
271+
var item = new ItemStack((NBTTagCompound) name);
272+
if (!item.hasTagCompound()){
273+
item.setTagCompound(new NBTTagCompound());
274+
}
275+
NBTTagCompound nbt = item.getTagCompound();
276+
nbt.setLong("totalSimulationCount",ysqddcs);
277+
nbt.setInteger("tier",tiers);
278+
nbt.setInteger("dataCount",dataCounts);
279+
280+
return CraftTweakerMC.getIItemStack(item);
281+
}
282+
}

src/main/java/github/kasuminova/novaeng/common/machine/MaterialSequenceProcessing.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeModifierBuilder;
88
import hellfirepvp.modularmachinery.common.machine.DynamicMachine;
99
import hellfirepvp.modularmachinery.common.modifier.RecipeModifier;
10+
import mustapelto.deepmoblearning.common.metadata.MetadataDataModel;
1011
import mustapelto.deepmoblearning.common.metadata.MetadataManager;
1112
import net.minecraft.util.ResourceLocation;
1213

@@ -19,41 +20,42 @@ public class MaterialSequenceProcessing implements MachineSpecial {
1920

2021
@Override
2122
public void init(final DynamicMachine machine) {
22-
MetadataManager.getDataModelMetadataList().forEach(model -> {
23+
for (MetadataDataModel model : MetadataManager.getDataModelMetadataList()) {
24+
if (!model.isEnabled()) continue;
2325
var item = model.getPristineMatter();
2426
var loot = model.getLootItems();
25-
if (!loot.isEmpty()){
27+
if (!loot.isEmpty()) {
2628
for (int i = 0; i < loot.size(); i++) {
2729
var item0 = loot.get(i);
2830
var tag = new StringBuilder();
2931
var tagname = new StringBuilder();
30-
if (i < 3){
32+
if (i < 3) {
3133
tag.append("left").append(i + 1);
3234
tagname.append("在左").append(i + 1).append("仓室执行此配方");
3335
} else if (i < 6) {
3436
tag.append("right").append(i - 2);
3537
tagname.append("在右").append(i - 2).append("仓室执行此配方");
36-
} else continue;
37-
var pecipe = RecipeBuilder.newBuilder(MachineID + item.getItem().getRegistryName() + i, MachineID, 20,1)
38+
} else break;
39+
var pecipe = RecipeBuilder.newBuilder(MachineID + item.getItem().getRegistryName() + i, MachineID, 20, 1)
3840
.addEnergyPerTickInput(204800)
3941
.addInputs(CraftTweakerMC.getIItemStack(item)).setTag(tag.toString())
4042
.addCatalystInput(
41-
CraftTweakerAPI.itemUtils.getItem("contenttweaker:hxs",0),
42-
new String[]{"输入核心素催化物质重组,产物增加25%,每并行需要一个", "并不能增加单次产出低于4的产物数量.."},
43-
new RecipeModifier[]{RecipeModifierBuilder.create("modularmachinery:item", "output", 1.25f, 1, false).build()}
43+
CraftTweakerAPI.itemUtils.getItem("contenttweaker:hxs", 0),
44+
new String[]{"输入核心素催化物质重组,产物增加25%,每并行需要一个", "并不能增加单次产出低于4的产物数量.."},
45+
new RecipeModifier[]{RecipeModifierBuilder.create("modularmachinery:item", "output", 1.25f, 1, false).build()}
4446
).setChance(0.01f)
4547
.addOutputs(CraftTweakerMC.getIItemStack(item0));
46-
requireResearch(pecipe,"pristine")
47-
.addRecipeTooltip(tagname.toString(),"核心素可以在任意仓内")
48+
requireResearch(pecipe, "pristine")
49+
.addRecipeTooltip(tagname.toString(), "核心素可以在任意仓内")
4850
.build();
4951
}
5052
}
51-
});
53+
}
5254
}
5355

5456
@Override
5557
public ResourceLocation getRegistryName() {
5658
return REGISTRY_NAME;
5759
}
5860

59-
}
61+
}

0 commit comments

Comments
 (0)