Skip to content

Commit 036abf3

Browse files
author
Circulate233
committed
重置MM血之祭坛的配方系统,改为动态注册所有血之祭坛配方
1 parent c89313a commit 036abf3

File tree

4 files changed

+133
-9
lines changed

4 files changed

+133
-9
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ dependencies {
294294
implementation(rfg.deobf("curse.maven:betterer-p2p-943734:4928154"))
295295
implementation(rfg.deobf("curse.maven:nuclearcraft-overhauled-336895:6160826"))
296296
implementation(rfg.deobf("curse.maven:Loot-Overhaul-299389:2711740"))
297+
implementation(rfg.deobf("curse.maven:BloodMagic-224791:2822288"))
297298
implementation(kotlin("stdlib-jdk8"))
298299
}
299300

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ public void postInit() {
115115
MachineCoolants.INSTANCE.init();
116116
HyperNetMachineEventHandler.registerHandler();
117117
RawOreHandler.registry();
118+
MMAltar.INSTANCE.postInit();
118119
}
119120

120121
public void loadComplete() {

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
@ZenRegister
3131
@ZenClass("novaeng.DreamEnergyCore")
3232
public class DreamEnergyCore implements MachineSpecial{
33-
private static final String MachineID = "dream_energy_core";
34-
private static final ResourceLocation REGISTRY_NAME = new ResourceLocation(ModularMachinery.MODID, MachineID);
33+
public static final String MachineID = "dream_energy_core";
34+
public static final ResourceLocation REGISTRY_NAME = new ResourceLocation(ModularMachinery.MODID, MachineID);
3535
public static final DreamEnergyCore INSTANCE = new DreamEnergyCore();
3636
private static final Map<World,Map<BlockPos, FixedSizeDeque<String>>> map = new ConcurrentHashMap<>();
3737
private static final ThreadLocal<Map<String, BigInteger>> ENERGY_STORED_CACHE =
@@ -41,9 +41,9 @@ public class DreamEnergyCore implements MachineSpecial{
4141
//最小传输速度,按倍计。
4242
private static float minSpeed = 0.01f;
4343
//最大传输速度,按倍计。
44-
private static int maxSpeed = 40000;
44+
private static int maxSpeed = 100000;
4545
//基础输入输出速度。能量输入输出速度计算方法为:defaultTransferAmount * speed,其中 speed 可由玩家控制。
46-
private static long defaultTransferAmount = 10000000;
46+
private static long defaultTransferAmount = 100000000;
4747

4848
@ZenMethod
4949
public static long setDefaultTransferAmount(long varue){
@@ -248,8 +248,9 @@ private String change(TileMultiblockMachineController ctrl){
248248
if (newbig.equals(oldbig)) {
249249
return "0";
250250
} else {
251-
var changel = newbig.subtract(oldbig);
252-
return formatNumber(newbig.subtract(oldbig));
251+
var changel = newbig.subtract(oldbig).longValue();
252+
var denominator = 1200L / MinuteScale * energy.size();
253+
return formatNumber(changel / denominator);
253254
}
254255
}
255256

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

Lines changed: 124 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package github.kasuminova.novaeng.common.machine;
22

3+
import WayofTime.bloodmagic.api.impl.BloodMagicAPI;
4+
import WayofTime.bloodmagic.api.impl.recipe.RecipeBloodAltar;
5+
import crafttweaker.annotations.ZenRegister;
6+
import crafttweaker.api.item.IIngredient;
7+
import crafttweaker.api.minecraft.CraftTweakerMC;
38
import github.kasuminova.mmce.common.event.machine.MachineStructureUpdateEvent;
49
import hellfirepvp.modularmachinery.ModularMachinery;
10+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeBuilder;
511
import hellfirepvp.modularmachinery.common.machine.DynamicMachine;
612
import hellfirepvp.modularmachinery.common.modifier.MultiBlockModifierReplacement;
713
import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController;
@@ -12,13 +18,18 @@
1218
import net.minecraft.util.ResourceLocation;
1319
import net.minecraft.util.math.BlockPos;
1420
import net.minecraftforge.fml.common.registry.GameRegistry;
21+
import stanhebben.zenscript.annotations.ZenClass;
22+
import stanhebben.zenscript.annotations.ZenMethod;
1523

1624
import java.util.Arrays;
1725
import java.util.Collections;
1826
import java.util.List;
1927

28+
@ZenRegister
29+
@ZenClass("novaeng.MMAltar")
2030
public class MMAltar implements MachineSpecial {
21-
public static final ResourceLocation REGISTRY_NAME = new ResourceLocation(ModularMachinery.MODID, "mm_altar");
31+
public static final String MachineID = "mm_altar";
32+
public static final ResourceLocation REGISTRY_NAME = new ResourceLocation(ModularMachinery.MODID, MachineID);
2233
public static final MMAltar INSTANCE = new MMAltar();
2334

2435
public static final List<BlockPos> posSet1 = Arrays.asList(
@@ -42,8 +53,7 @@ public class MMAltar implements MachineSpecial {
4253
public static Block BLOCKSJ2 = getOtherModsBlock("contenttweaker","fallenstarforcefieldcontrolblock");
4354
public static Block BLOCKSJ3 = getOtherModsBlock("contenttweaker","universalforcefieldcontrolblock");
4455

45-
protected MMAltar() {
46-
}
56+
protected MMAltar() {}
4757

4858
protected static Block getOtherModsBlock(String modId, String blockName) {
4959
return GameRegistry.findRegistry(Block.class).getValue(new ResourceLocation(modId, blockName));
@@ -85,6 +95,18 @@ public void init(final DynamicMachine machine) {
8595
StackUtils.getStackFromBlockState(BLOCKSJ3.getDefaultState())));
8696
}
8797

98+
public void postInit(){
99+
for (RecipeBloodAltar recipe : BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes()) {
100+
registerRecipe(
101+
recipe.getInput().getMatchingStacks()[0].getItem().getRegistryName().toString(),
102+
recipe.getConsumeRate(),
103+
recipe.getSyphon(),
104+
recipe.getMinimumTier().toInt(),
105+
CraftTweakerMC.getIIngredient(recipe.getInput()),
106+
CraftTweakerMC.getIIngredient(recipe.getOutput())
107+
);
108+
}
109+
}
88110

89111
@Override
90112
public ResourceLocation getRegistryName() {
@@ -97,4 +119,103 @@ protected static BlockArray buildModifierReplacementBlockArray(final Block block
97119
posSet.forEach(pos -> blockArray.addBlock(pos, new BlockArray.BlockInformation(Collections.singletonList(descriptor))));
98120
return blockArray;
99121
}
122+
123+
/**
124+
* 合成配方
125+
* @param need 最低血液需求
126+
* @param Maxneed 总血液需求
127+
* @param AltarTier 祭坛等级需求
128+
* @param Inputs 输入物品
129+
* @param Output 输出物品
130+
*/
131+
@ZenMethod
132+
public static void registerRecipe(String Name, int need, int Maxneed, int AltarTier, IIngredient Inputs,IIngredient Output) {
133+
var time = Maxneed / need;
134+
RecipeBuilder.newBuilder(Name, MachineID, time)
135+
.addItemInputs(Inputs)
136+
.addPreCheckHandler(event -> {
137+
var ctrl = event.getController();
138+
var data = ctrl.getCustomDataTag();
139+
var xycc = data.getLong("xycc");
140+
var jtdj = data.getInteger("jtdj");
141+
var sdfw = data.getInteger("sdfw");
142+
var cpdj = data.getInteger("cpdj");
143+
var ccjx = data.getInteger("ccjx");
144+
var yzfb = Math.pow(0.95, cpdj);
145+
var sjneed = (0.2 * sdfw + 1.00) * (need * 1.00);
146+
var bx = Math.min(Math.pow(4, cpdj), ((double) ccjx / need));
147+
148+
if (xycc < need) {
149+
event.setFailed("§4缓存的生命源质无法启动配方!");
150+
return;
151+
}
152+
if (jtdj < AltarTier) {
153+
event.setFailed("§4祭坛等级不足以运行配方!");
154+
return;
155+
}
156+
event.getActiveRecipe().setMaxParallelism((int) bx);
157+
})
158+
.addFactoryStartHandler(event -> {
159+
var ctrl = event.getController();
160+
var data = ctrl.getCustomDataTag();
161+
var bx = event.getFactoryRecipeThread().getActiveRecipe().getParallelism();
162+
163+
data.setLong("hcjd",0);
164+
data.setLong("hcjdmax", (long) bx * Maxneed);
165+
})
166+
.addFactoryPreTickHandler(event -> {
167+
var ctrl = event.getController();
168+
var data = ctrl.getCustomDataTag();
169+
var xycc = data.getLong("xycc");
170+
var jtdj = data.getInteger("jtdj");
171+
var hcjd = data.getInteger("hcjd");
172+
var hcjdmax = data.getInteger("hcjdmax");
173+
var sdfwxg = 0.2 * data.getInteger("sdfw");
174+
var cpdj = data.getInteger("cpdj");
175+
var yzfb = Math.pow(0.95, cpdj);
176+
var thread = event.getFactoryRecipeThread();
177+
var bx = thread.getActiveRecipe().getParallelism();
178+
var tick = thread.getActiveRecipe().getTick();
179+
var totalTick = thread.getActiveRecipe().getTotalTick();
180+
var sjneed = need * bx;
181+
182+
if (xycc > sjneed) {
183+
if (hcjd < hcjdmax) {
184+
thread.getActiveRecipe().setTick((totalTick / 2));
185+
event.preventProgressing("§6合成中,还差§a" + (hcjdmax - hcjd) + "生命源质§6完成合成");
186+
}
187+
if (xycc <= (1 + sdfwxg) * sjneed) {
188+
if (hcjd + xycc <= hcjdmax) {
189+
data.setLong("hcjd",hcjd + xycc);
190+
data.setLong("xycc",0);
191+
} else {
192+
data.setLong("hcjd",hcjdmax);
193+
data.setLong("xycc",xycc - (hcjdmax - hcjd));
194+
thread.getActiveRecipe().setTick(totalTick);
195+
}
196+
} else {
197+
if (hcjd + ((1 + sdfwxg) * sjneed) <= hcjdmax) {
198+
data.setLong("hcjd", (long) (hcjd + ((1 + sdfwxg) * sjneed)));
199+
data.setLong("xycc", (long) (xycc - ((1 + sdfwxg) * sjneed)));
200+
} else {
201+
data.setLong("hcjd",hcjdmax);
202+
data.setLong("xycc",xycc - (hcjdmax - hcjd));
203+
thread.getActiveRecipe().setTick(totalTick);
204+
}
205+
}
206+
} else {
207+
event.preventProgressing("§6剩余的生命源质不足最低值§a" + (sjneed));
208+
}
209+
})
210+
.addOutput(Output)
211+
.setThreadName("血之合成")
212+
.addRecipeTooltip(
213+
"§4所需基础生命源质" + need,
214+
"§4所需生命源质总量" + Maxneed,
215+
"§4配方所要求最低层级:" + AltarTier,
216+
"§6实际速度与消耗将取决于速度符文",
217+
"§6并行状态每次需要消耗的血量会乘并行数"
218+
)
219+
.build();
220+
}
100221
}

0 commit comments

Comments
 (0)