Skip to content

Commit 185dcdc

Browse files
author
Circulate233
committed
批量设置Tag的辅助方法
1 parent ee0ee9d commit 185dcdc

File tree

7 files changed

+163
-17
lines changed

7 files changed

+163
-17
lines changed

src/main/java/github/kasuminova/novaeng/common/handler/WorldLoadedHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ public class WorldLoadedHandler {
3737

3838
private void request(MinecraftServer server) {
3939
if (init){
40-
DimensionManager.getRegisteredDimensions().keySet().forEach(dim -> loadWorld(DimensionManager.getDimensions(dim)));
40+
loadWorld(0,1,-1);
4141
init = false;
4242
} else {
4343
REGISTERED_DIMENSIONS.forEach(WorldLoadedHandler::loadWorld);
4444
}
4545
}
4646

47-
public static void loadWorld(int[] id){
47+
public static void loadWorld(int... id){
4848
for (int i : id) {
4949
loadWorld(i);
5050
}

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

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,28 @@ public void onClientTick(final TileMultiblockMachineController ctrl) {
5454
@Override
5555
public void init(DynamicMachine machine) {
5656
if (isClient) {
57-
machine.addMachineEventHandler(ControllerGUIRenderEvent.class, event -> {
58-
var ctrl = event.getController();
59-
var data = ctrl.getCustomDataTag();
60-
var speed = data.getFloat("speed");
61-
var energyStored = data.getString("energyStored").isEmpty() ? "0":data.getString("energyStored");
57+
CInit(machine);
58+
}
59+
}
6260

63-
String[] info = {
64-
"§b/////////// 梦之管理者 ///////////",
65-
"§b能量储存:§a" + formatNumber(energyStored) + " RF",
66-
"§b输入输出值:§a" + formatNumber((long) (defaultTransferAmount * speed)) + " RF/t",
67-
"§b一分钟内平均交互速度:§a" + change(ctrl) + " RF/t",
68-
"§b///////////////////////////////////"
69-
};
61+
@SideOnly(Side.CLIENT)
62+
public void CInit(DynamicMachine machine){
63+
machine.addMachineEventHandler(ControllerGUIRenderEvent.class, event -> {
64+
var ctrl = event.getController();
65+
var data = ctrl.getCustomDataTag();
66+
var speed = data.getFloat("speed");
67+
var energyStored = data.getString("energyStored").isEmpty() ? "0":data.getString("energyStored");
7068

71-
event.setExtraInfo(info);
72-
});
73-
}
69+
String[] info = {
70+
"§b/////////// 梦之管理者 ///////////",
71+
"§b能量储存:§a" + formatNumber(energyStored) + " RF",
72+
"§b输入输出值:§a" + formatNumber((long) (defaultTransferAmount * speed)) + " RF/t",
73+
"§b一分钟内平均交互速度:§a" + change(ctrl) + " RF/t",
74+
"§b///////////////////////////////////"
75+
};
76+
77+
event.setExtraInfo(info);
78+
});
7479
}
7580

7681
private String change(TileMultiblockMachineController ctrl){
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package github.kasuminova.novaeng.common.util;
2+
3+
public interface NovaRAB {
4+
void n$setOutTags(String tagName);
5+
String n$getOutTags();
6+
void n$setInTags(String tagName);
7+
String n$getInTags();
8+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package github.kasuminova.novaeng.common.util;
2+
3+
import crafttweaker.annotations.ZenRegister;
4+
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement;
5+
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentSelectorTag;
6+
import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementItem;
7+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipePrimer;
8+
import stanhebben.zenscript.annotations.ZenExpansion;
9+
import stanhebben.zenscript.annotations.ZenMethod;
10+
11+
@ZenRegister
12+
@ZenExpansion("mods.modularmachinery.RecipePrimer")
13+
public class RecipePrimerEx {
14+
15+
@ZenMethod
16+
public static RecipePrimer setItemTags(final RecipePrimer primer, final String tagName ,boolean isInput) {
17+
if (primer instanceof NovaRAB n){
18+
if (isInput) {
19+
n.n$setInTags(tagName);
20+
} else {
21+
n.n$setOutTags(tagName);
22+
}
23+
}
24+
25+
for (ComponentRequirement<?, ?> component : primer.getComponents()) {
26+
if (component instanceof RequirementItem) {
27+
switch (component.getActionType()) {
28+
case OUTPUT:
29+
if (isInput) continue;
30+
case INPUT:
31+
if (!isInput) continue;
32+
}
33+
var tag = new ComponentSelectorTag(tagName);
34+
component.setTag(tag);
35+
}
36+
}
37+
return primer;
38+
}
39+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package github.kasuminova.novaeng.mixin.mmce;
2+
3+
import github.kasuminova.novaeng.common.util.NovaRAB;
4+
import hellfirepvp.modularmachinery.common.crafting.MachineRecipe;
5+
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement;
6+
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentSelectorTag;
7+
import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementItem;
8+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeAdapterBuilder;
9+
import org.spongepowered.asm.mixin.Final;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Inject;
14+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
15+
16+
import java.util.List;
17+
18+
@Mixin(value = MachineRecipe.class,remap = false)
19+
public abstract class MixinMachineRecipe {
20+
21+
@Shadow
22+
@Final
23+
protected List<ComponentRequirement<?, ?>> recipeRequirements;
24+
25+
@Inject(method = "mergeAdapter",at = @At("HEAD"))
26+
public void mergeAdapter(RecipeAdapterBuilder adapterBuilder, CallbackInfo ci) {
27+
if (adapterBuilder instanceof NovaRAB n){
28+
String inTagName = n.n$getInTags();
29+
String outTagName = n.n$getOutTags();
30+
if (inTagName.isEmpty() && outTagName.isEmpty())return;
31+
ComponentSelectorTag inTag = inTagName.isEmpty() ? null:new ComponentSelectorTag(n.n$getInTags());
32+
ComponentSelectorTag outTag = outTagName.isEmpty() ? null:new ComponentSelectorTag(n.n$getOutTags());
33+
this.recipeRequirements.forEach(component -> {
34+
if (component instanceof RequirementItem) {
35+
switch (component.getActionType()){
36+
case INPUT -> {
37+
if (!inTagName.isEmpty()){
38+
component.setTag(inTag);
39+
}
40+
}
41+
case OUTPUT -> {
42+
if (!outTagName.isEmpty()){
43+
component.setTag(outTag);
44+
}
45+
}
46+
}
47+
}
48+
});
49+
}
50+
}
51+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package github.kasuminova.novaeng.mixin.mmce;
2+
3+
import github.kasuminova.novaeng.common.util.NovaRAB;
4+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeAdapterBuilder;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Unique;
7+
import stanhebben.zenscript.annotations.NotNull;
8+
9+
@Mixin(value = RecipeAdapterBuilder.class,remap = false)
10+
public class MixinRecipeAdapterBuilder implements NovaRAB {
11+
12+
@Unique
13+
public String novaEngineering_Core$inTags = "";
14+
@Unique
15+
public String novaEngineering_Core$outTags = "";
16+
17+
@Unique
18+
@Override
19+
public void n$setInTags(String tagName) {
20+
this.novaEngineering_Core$inTags = tagName;
21+
}
22+
23+
@Unique
24+
@Override
25+
public String n$getInTags() {
26+
return novaEngineering_Core$inTags;
27+
}
28+
29+
@Unique
30+
@Override
31+
public void n$setOutTags(@NotNull String tagName) {
32+
this.novaEngineering_Core$outTags = tagName;
33+
}
34+
35+
@Unique
36+
@Override
37+
public String n$getOutTags() {
38+
return novaEngineering_Core$outTags;
39+
}
40+
41+
}

src/main/resources/mixins.novaeng_core.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
],
1010
"mixins": [
1111
"MixinCommonProxy",
12+
"MixinMachineRecipe",
1213
"MixinMachineRegistry",
1314
"MixinMEPatternProvider",
15+
"MixinRecipeAdapterBuilder",
1416
"MixinTaskExecutor",
1517
"MixinTileMultiblockMachineController"
1618
]

0 commit comments

Comments
 (0)