update with upstream
This commit is contained in:
@@ -1,7 +1,26 @@
|
||||
# Configuration file
|
||||
|
||||
general {
|
||||
# Allow insertion of zs execution during mod loading stage
|
||||
# Format: scriptLoaderName;modid;stageMarker;before|after
|
||||
# Valid stage marker: C (Construction) H (Preinit) I (Init) J (Postinit) A (Available)
|
||||
# Example: custom;mekanism;J;before -> runs `#loader custom` scripts before mekanism runs its code on post-initialization stage
|
||||
# Note:
|
||||
# 1. On construction stage and preinit stage before crafttweaker, only native methods are available
|
||||
# 2. Many recipe modifications are staged. For example, scripts are loaded on init, but recipe modifications for crafting table and furnace are staged on postinit
|
||||
# It means recipe modifications MAY NOT be executed after their loading stage
|
||||
# ZenUtils will re-execute crafttweaker recipe modifications after all custom script load entrypoint on POSTINIT, but other crafttweaker addons not
|
||||
S:customScriptEntrypoint <
|
||||
lateAddTC;modtweaker;A;after
|
||||
>
|
||||
|
||||
# Enable mixinzs. Default: false
|
||||
B:enableMixin=true
|
||||
|
||||
# Enable RandomTickEvent. It patches hotspot random tick code, which may produce performance loss. Do not enable it if you don't need it. Default: false
|
||||
B:enableRandomTickEvent=false
|
||||
|
||||
# Enable fast script loading. Note: If enabled, ONLY PREPROCESSORS AT SCRIPT HEADER ARE EFFECTIVE. (except mixin scripts) Default: false
|
||||
B:fastScriptLoading=false
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
[
|
||||
{
|
||||
"key": "ARCANEASSEMBLER",
|
||||
"ops": [
|
||||
{
|
||||
"op": "move",
|
||||
"from": "stages/0/required_craft",
|
||||
"path": "stages/0/required_item"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "ARCANEINSCRIBER",
|
||||
"ops": [
|
||||
{
|
||||
"op": "move",
|
||||
"from": "stages/0/required_craft",
|
||||
"path": "stages/0/required_item"
|
||||
}
|
||||
]
|
||||
}
|
||||
{
|
||||
"key": "KNOWLEDGECORE",
|
||||
"ops": [
|
||||
{
|
||||
"op": "remove",
|
||||
"path": "stages/0/required_craft"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "stages/0/required_item/0",
|
||||
"value": "contenttweaker:complex_gearbox"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -245,6 +245,7 @@ resources {
|
||||
minecraft:gold_ingot_from_block
|
||||
minecraft:gold_ingot_from_nuggets
|
||||
minecraft:gold_block
|
||||
immersiveengineering:compat/plate_thaumium_brass
|
||||
>
|
||||
|
||||
# Recipe names that you want to be removed.
|
||||
@@ -267,4 +268,3 @@ resources {
|
||||
B:treatRecipeToRemoveAsRegex=false
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3183,7 +3183,7 @@ item.contenttweaker.stone_of_dimensional_ascension.name=Stone of Dimensional Asc
|
||||
item.contenttweaker.astral_mastery_tome.name=Tome of Astral Mastery
|
||||
item.contenttweaker.master_spell_infernum.name=Master Spell: Infernum
|
||||
item.contenttweaker.master_spell_sonus.name=Master Spell: Sonus
|
||||
item.contenttweaker.master_spell_gognitio.name=Master Spell: Cognitio
|
||||
item.contenttweaker.master_spell_cognitio.name=Master Spell: Cognitio
|
||||
item.contenttweaker.white_hole_core.name=White Hole Core
|
||||
item.contenttweaker.quasar_core.name=Quasar Core
|
||||
item.contenttweaker.call_to_mission.name=Call to Mission
|
||||
@@ -3262,11 +3262,7 @@ tile.contenttweaker.quasar_charged_core_of_definition.name=Quasar-Charged Core o
|
||||
tile.contenttweaker.directed_miniature_quasar.name=Directed Miniature Quasar
|
||||
tile.contenttweaker.quasar_burst_director.name=Quasar Burst Director
|
||||
fluid.inquiring_abyssite=Inquiring Abyssite
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# XP Bath
|
||||
item.contenttweaker.xp_configurator.desc=Right-click to cycle mode
|
||||
tile.modularmachinery.xp_assimilator.failure=No nearby player
|
||||
tile.modularmachinery.xp_assimilator.desc=%d xp: Stand right on top of the controller inside the pool
|
||||
@@ -1596,7 +1596,7 @@ item.contenttweaker.faultless_ichor.name=无瑕灵液
|
||||
item.contenttweaker.gem_of_the_sleeping_city.name=长眠之城宝石
|
||||
item.contenttweaker.cat_ears.name=猫耳
|
||||
item.contenttweaker.blue_hair.name=蓝发
|
||||
item.contenttweaker.time_crystal.name=时间水晶
|
||||
item.contenttweaker.time_crystal.name=时间晶体
|
||||
item.contenttweaker.stone_of_the_sleeping_city.name=长眠之城石头
|
||||
item.contenttweaker.imstuck_getmehome.name=我卡住了,让我回家!
|
||||
item.contenttweaker.elder_spooder_string.name=古老四百大线
|
||||
@@ -3262,6 +3262,10 @@ tile.contenttweaker.quasar_charged_core_of_definition.name=类星体充能定义
|
||||
tile.contenttweaker.directed_miniature_quasar.name=定向微型类星体
|
||||
tile.contenttweaker.quasar_burst_director.name=类星体爆发导向器
|
||||
fluid.inquiring_abyssite=推演深渊金属
|
||||
# XP Bath
|
||||
item.contenttweaker.xp_configurator.desc=右击以循环模式
|
||||
tile.modularmachinery.xp_assimilator.failure=附近没有玩家
|
||||
tile.modularmachinery.xp_assimilator.desc=%d xp:站在池子中控制器正上方的位置
|
||||
|
||||
# Custom Materials
|
||||
base.material.demonic_steel=恶魔钢
|
||||
|
||||
@@ -3262,11 +3262,7 @@ tile.contenttweaker.quasar_charged_core_of_definition.name=Quasar-Charged Core o
|
||||
tile.contenttweaker.directed_miniature_quasar.name=Directed Miniature Quasar
|
||||
tile.contenttweaker.quasar_burst_director.name=Quasar Burst Director
|
||||
fluid.inquiring_abyssite=Inquiring Abyssite
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# XP Bath
|
||||
item.contenttweaker.xp_configurator.desc=Right-click to cycle mode
|
||||
tile.modularmachinery.xp_assimilator.failure=No nearby player
|
||||
tile.modularmachinery.xp_assimilator.desc=%d xp: Stand right on top of the controller inside the pool
|
||||
@@ -1,283 +0,0 @@
|
||||
import mods.modularmachinery.RecipeBuilder;
|
||||
import mods.modularmachinery.RecipeEvent;
|
||||
import mods.modularmachinery.MachineEvent;
|
||||
import mods.modularmachinery.RecipeCheckEvent;
|
||||
import mods.modularmachinery.RecipeFinishEvent;
|
||||
import mods.modularmachinery.IMachineController;
|
||||
import mods.contenttweaker.Commands;
|
||||
import crafttweaker.server.IServer;
|
||||
import crafttweaker.command.ICommandManager;
|
||||
import crafttweaker.command.ICommandSender;
|
||||
|
||||
|
||||
recipes.addShaped(<forge:bucketfilled>.withTag({FluidName: "bewitched_essence_salts", Amount: 1000}),
|
||||
[[<contenttweaker:salt_of_knowledge>, <contenttweaker:imp_skin>, <contenttweaker:salt_of_knowledge>],
|
||||
[<contenttweaker:imp_skin>, <forge:bucketfilled>.withTag({FluidName: "mana", Amount: 1000}), <contenttweaker:imp_skin>],
|
||||
[<contenttweaker:salt_of_knowledge>, <contenttweaker:imp_skin>, <contenttweaker:salt_of_knowledge>]]);
|
||||
|
||||
recipes.addShaped(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}),
|
||||
[[<actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>],
|
||||
[<actuallyadditions:item_solidified_experience>, <enderio:item_yeta_wrench>, <actuallyadditions:item_solidified_experience>],
|
||||
[<actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>]]);
|
||||
|
||||
mods.chisel.Carving.addGroup("experienceconfig");
|
||||
mods.chisel.Carving.addVariation("experienceconfig", <contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}));
|
||||
mods.chisel.Carving.addVariation("experienceconfig", <contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o64X§r"]}}));
|
||||
mods.chisel.Carving.addVariation("experienceconfig", <contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o256X§r"]}}));
|
||||
mods.chisel.Carving.addVariation("experienceconfig", <contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1024X§r"]}}));
|
||||
|
||||
|
||||
|
||||
var addxpsolidified1 = RecipeBuilder.newBuilder("addxpsolidified1","xp_assimilator",5);
|
||||
addxpsolidified1.addItemInput(<actuallyadditions:item_solidified_experience>);
|
||||
addxpsolidified1.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}));
|
||||
addxpsolidified1.setChance(0.0);
|
||||
addxpsolidified1.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpsolidified1.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 8 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpsolidified1.addRecipeTooltip("8 xp:站在池子中控制器正上方的位置");
|
||||
addxpsolidified1.build();
|
||||
|
||||
var addxpsolidified2 = RecipeBuilder.newBuilder("addxpsolidified2","xp_assimilator",5);
|
||||
addxpsolidified2.addItemInput(<actuallyadditions:item_solidified_experience>*64);
|
||||
addxpsolidified2.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o64X§r"]}}));
|
||||
addxpsolidified2.setChance(0.0);
|
||||
addxpsolidified2.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpsolidified2.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 512 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpsolidified2.addRecipeTooltip("512 xp:站在池子中控制器正上方的位置");
|
||||
addxpsolidified2.build();
|
||||
|
||||
var addxpsolidified3 = RecipeBuilder.newBuilder("addxpsolidified3","xp_assimilator",5);
|
||||
addxpsolidified3.addItemInput(<actuallyadditions:item_solidified_experience>*256);
|
||||
addxpsolidified3.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o256X§r"]}}));
|
||||
addxpsolidified3.setChance(0.0);
|
||||
addxpsolidified3.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpsolidified3.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 2048 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpsolidified3.addRecipeTooltip("2048 xp:站在池子中控制器正上方的位置");
|
||||
addxpsolidified3.build();
|
||||
|
||||
var addxpsolidified4 = RecipeBuilder.newBuilder("addxpsolidified4","xp_assimilator",5);
|
||||
addxpsolidified4.addItemInput(<actuallyadditions:item_solidified_experience>*1024);
|
||||
addxpsolidified4.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1024X§r"]}}));
|
||||
addxpsolidified4.setChance(0.0);
|
||||
addxpsolidified4.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpsolidified4.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 8196 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpsolidified4.addRecipeTooltip("8192 xp:站在池子中控制器正上方的位置");
|
||||
addxpsolidified4.build();
|
||||
|
||||
|
||||
|
||||
var addxpoverworldian1 = RecipeBuilder.newBuilder("addxpoverworldian1","xp_assimilator",5);
|
||||
addxpoverworldian1.addItemInput(<deepmoblearning:living_matter_overworldian>);
|
||||
addxpoverworldian1.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}));
|
||||
addxpoverworldian1.setChance(0.0);
|
||||
addxpoverworldian1.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpoverworldian1.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 10 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpoverworldian1.addRecipeTooltip("10 xp:站在池子中控制器正上方的位置");
|
||||
addxpoverworldian1.build();
|
||||
|
||||
var addxpoverworldian2 = RecipeBuilder.newBuilder("addxpoverworldian2","xp_assimilator",5);
|
||||
addxpoverworldian2.addItemInput(<deepmoblearning:living_matter_overworldian>*64);
|
||||
addxpoverworldian2.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o64X§r"]}}));
|
||||
addxpoverworldian2.setChance(0.0);
|
||||
addxpoverworldian2.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpoverworldian2.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 640 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpoverworldian2.addRecipeTooltip("640 xp:站在池子中控制器正上方的位置");
|
||||
addxpoverworldian2.build();
|
||||
|
||||
var addxpoverworldian3 = RecipeBuilder.newBuilder("addxpoverworldian3","xp_assimilator",5);
|
||||
addxpoverworldian3.addItemInput(<deepmoblearning:living_matter_overworldian>*256);
|
||||
addxpoverworldian3.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o256X§r"]}}));
|
||||
addxpoverworldian3.setChance(0.0);
|
||||
addxpoverworldian3.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpoverworldian3.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 2560 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpoverworldian3.addRecipeTooltip("2560 xp:站在池子中控制器正上方的位置");
|
||||
addxpoverworldian3.build();
|
||||
|
||||
var addxpoverworldian4 = RecipeBuilder.newBuilder("addxpoverworldian4","xp_assimilator",5);
|
||||
addxpoverworldian4.addItemInput(<deepmoblearning:living_matter_overworldian>*1024);
|
||||
addxpoverworldian4.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1024X§r"]}}));
|
||||
addxpoverworldian4.setChance(0.0);
|
||||
addxpoverworldian4.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpoverworldian4.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 10240 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpoverworldian4.addRecipeTooltip("10240 xp:站在池子中控制器正上方的位置");
|
||||
addxpoverworldian4.build();
|
||||
|
||||
|
||||
|
||||
|
||||
var addxphellish1 = RecipeBuilder.newBuilder("addxphellish1","xp_assimilator",5);
|
||||
addxphellish1.addItemInput(<deepmoblearning:living_matter_hellish>);
|
||||
addxphellish1.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}));
|
||||
addxphellish1.setChance(0.0);
|
||||
addxphellish1.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxphellish1.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 14 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxphellish1.addRecipeTooltip("14 xp:站在池子中控制器正上方的位置");
|
||||
addxphellish1.build();
|
||||
|
||||
var addxphellish2 = RecipeBuilder.newBuilder("addxphellish2","xp_assimilator",5);
|
||||
addxphellish2.addItemInput(<deepmoblearning:living_matter_hellish>*64);
|
||||
addxphellish2.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o64X§r"]}}));
|
||||
addxphellish2.setChance(0.0);
|
||||
addxphellish2.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxphellish2.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 896 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxphellish2.addRecipeTooltip("896 xp:站在池子中控制器正上方的位置");
|
||||
addxphellish2.build();
|
||||
|
||||
var addxphellish3 = RecipeBuilder.newBuilder("addxphellish3","xp_assimilator",5);
|
||||
addxphellish3.addItemInput(<deepmoblearning:living_matter_hellish>*256);
|
||||
addxphellish3.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o256X§r"]}}));
|
||||
addxphellish3.setChance(0.0);
|
||||
addxphellish3.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxphellish3.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 3584 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxphellish3.addRecipeTooltip("3584 xp:站在池子中控制器正上方的位置");
|
||||
addxphellish3.build();
|
||||
|
||||
var addxphellish4 = RecipeBuilder.newBuilder("addxphellish4","xp_assimilator",5);
|
||||
addxphellish4.addItemInput(<deepmoblearning:living_matter_hellish>*1024);
|
||||
addxphellish4.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1024X§r"]}}));
|
||||
addxphellish4.setChance(0.0);
|
||||
addxphellish4.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxphellish4.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 14336 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxphellish4.addRecipeTooltip("14336 xp:站在池子中控制器正上方的位置");
|
||||
addxphellish4.build();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var addxpextraterr1 = RecipeBuilder.newBuilder("addxpextraterr1","xp_assimilator",5);
|
||||
addxpextraterr1.addItemInput(<deepmoblearning:living_matter_extraterrestrial>);
|
||||
addxpextraterr1.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}));
|
||||
addxpextraterr1.setChance(0.0);
|
||||
addxpextraterr1.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpextraterr1.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 20 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpextraterr1.addRecipeTooltip("20 xp:站在池子中控制器正上方的位置");
|
||||
addxpextraterr1.build();
|
||||
|
||||
var addxpextraterr2 = RecipeBuilder.newBuilder("addxpextraterr2","xp_assimilator",5);
|
||||
addxpextraterr2.addItemInput(<deepmoblearning:living_matter_extraterrestrial>*64);
|
||||
addxpextraterr2.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o64X§r"]}}));
|
||||
addxpextraterr2.setChance(0.0);
|
||||
addxpextraterr2.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpextraterr2.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 1280 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpextraterr2.addRecipeTooltip("1280 xp:站在池子中控制器正上方的位置");
|
||||
addxpextraterr2.build();
|
||||
|
||||
var addxpextraterr3 = RecipeBuilder.newBuilder("addxpextraterr3","xp_assimilator",5);
|
||||
addxpextraterr3.addItemInput(<deepmoblearning:living_matter_extraterrestrial>*256);
|
||||
addxpextraterr3.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o256X§r"]}}));
|
||||
addxpextraterr3.setChance(0.0);
|
||||
addxpextraterr3.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpextraterr3.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 5120 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpextraterr3.addRecipeTooltip("5120 xp:站在池子中控制器正上方的位置");
|
||||
addxpextraterr3.build();
|
||||
|
||||
var addxpextraterr4 = RecipeBuilder.newBuilder("addxpextraterr4","xp_assimilator",5);
|
||||
addxpextraterr4.addItemInput(<deepmoblearning:living_matter_extraterrestrial>*1024);
|
||||
addxpextraterr4.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1024X§r"]}}));
|
||||
addxpextraterr4.setChance(0.0);
|
||||
addxpextraterr4.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpextraterr4.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 20480 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpextraterr4.addRecipeTooltip("20480 xp:站在池子中控制器正上方的位置");
|
||||
addxpextraterr4.build();
|
||||
|
||||
|
||||
|
||||
var addxptwilight1 = RecipeBuilder.newBuilder("addxptwilight1","xp_assimilator",5);
|
||||
addxptwilight1.addItemInput(<deepmoblearning:living_matter_twilight>);
|
||||
addxptwilight1.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}));
|
||||
addxptwilight1.setChance(0.0);
|
||||
addxptwilight1.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxptwilight1.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 30 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxptwilight1.addRecipeTooltip("30 xp:站在池子中控制器正上方的位置");
|
||||
addxptwilight1.build();
|
||||
|
||||
var addxptwilight2 = RecipeBuilder.newBuilder("addxptwilight2","xp_assimilator",5);
|
||||
addxptwilight2.addItemInput(<deepmoblearning:living_matter_twilight>*64);
|
||||
addxptwilight2.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o64X§r"]}}));
|
||||
addxptwilight2.setChance(0.0);
|
||||
addxptwilight2.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxptwilight2.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 1920 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxptwilight2.addRecipeTooltip("1920 xp:站在池子中控制器正上方的位置");
|
||||
addxptwilight2.build();
|
||||
|
||||
var addxptwilight3 = RecipeBuilder.newBuilder("addxptwilight3","xp_assimilator",5);
|
||||
addxptwilight3.addItemInput(<deepmoblearning:living_matter_twilight>*256);
|
||||
addxptwilight3.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o256X§r"]}}));
|
||||
addxptwilight3.setChance(0.0);
|
||||
addxptwilight3.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxptwilight3.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 7680 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxptwilight3.addRecipeTooltip("7680 xp:站在池子中控制器正上方的位置");
|
||||
addxptwilight3.build();
|
||||
|
||||
var addxptwilight4 = RecipeBuilder.newBuilder("addxptwilight4","xp_assimilator",5);
|
||||
addxptwilight4.addItemInput(<deepmoblearning:living_matter_twilight>*1024);
|
||||
addxptwilight4.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1024X§r"]}}));
|
||||
addxptwilight4.setChance(0.0);
|
||||
addxptwilight4.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxptwilight4.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 30720 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxptwilight4.addRecipeTooltip("30720 xp:站在池子中控制器正上方的位置");
|
||||
addxptwilight4.build();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var addxpbeessence1 = RecipeBuilder.newBuilder("addxpbeessence1","xp_assimilator",5);
|
||||
addxpbeessence1.addItemInput(<contenttweaker:condensed_essence>);
|
||||
addxpbeessence1.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1X§r"]}}));
|
||||
addxpbeessence1.setChance(0.0);
|
||||
addxpbeessence1.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpbeessence1.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 1000 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpbeessence1.addRecipeTooltip("1000 xp:站在池子中控制器正上方的位置");
|
||||
addxpbeessence1.build();
|
||||
|
||||
var addxpbeessence2 = RecipeBuilder.newBuilder("addxpbeessence2","xp_assimilator",5);
|
||||
addxpbeessence2.addItemInput(<contenttweaker:condensed_essence>*64);
|
||||
addxpbeessence2.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o64X§r"]}}));
|
||||
addxpbeessence2.setChance(0.0);
|
||||
addxpbeessence2.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpbeessence2.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 64000 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpbeessence2.addRecipeTooltip("64000 xp:站在池子中控制器正上方的位置");
|
||||
addxpbeessence2.build();
|
||||
|
||||
var addxpbeessence3 = RecipeBuilder.newBuilder("addxpbeessence3","xp_assimilator",5);
|
||||
addxpbeessence3.addItemInput(<contenttweaker:condensed_essence>*256);
|
||||
addxpbeessence3.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o256X§r"]}}));
|
||||
addxpbeessence3.setChance(0.0);
|
||||
addxpbeessence3.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpbeessence3.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 256000 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpbeessence3.addRecipeTooltip("256000 xp:站在池子中控制器正上方的位置");
|
||||
addxpbeessence3.build();
|
||||
|
||||
var addxpbeessence4 = RecipeBuilder.newBuilder("addxpbeessence4","xp_assimilator",5);
|
||||
addxpbeessence4.addItemInput(<contenttweaker:condensed_essence>*1024);
|
||||
addxpbeessence4.addItemInput(<contenttweaker:experience_configurator>.withTag({display: {Lore: ["§d§o1024X§r"]}}));
|
||||
addxpbeessence4.setChance(0.0);
|
||||
addxpbeessence4.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
addxpbeessence4.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 1024000 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
addxpbeessence4.addRecipeTooltip("1024000 xp:站在池子中控制器正上方的位置");
|
||||
addxpbeessence4.build();
|
||||
|
||||
|
||||
|
||||
var cyfluid = RecipeBuilder.newBuilder("xpa_cyclic_experience","xp_assimilator",5);
|
||||
cyfluid.addFluidInput(<fluid:xpjuice> * 1000);
|
||||
cyfluid.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
cyfluid.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 50 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
cyfluid.addRecipeTooltip("50 xp:站在池子中控制器正上方的位置");
|
||||
cyfluid.build();
|
||||
|
||||
var iffluid = RecipeBuilder.newBuilder("xpa_industrial_foregoing_essence","xp_assimilator",5);
|
||||
iffluid.addFluidInput(<fluid:essence> * 1000);
|
||||
iffluid.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
iffluid.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 50 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
iffluid.addRecipeTooltip("50 xp:站在池子中控制器正上方的位置");
|
||||
iffluid.build();
|
||||
|
||||
var tffluid = RecipeBuilder.newBuilder("xpa_thermal_foundation_essence_of_knowledge","xp_assimilator",5);
|
||||
tffluid.addFluidInput(<fluid:experience> * 1000);
|
||||
tffluid.addPostCheckHandler(function(event as RecipeCheckEvent) { if (server.commandManager.executeCommand(server,"testfor @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + ",r=2]") == 0) {event.setFailed("附近无玩家");} } );
|
||||
tffluid.addFinishHandler(function(event as RecipeFinishEvent) { server.commandManager.executeCommand(server,"xp 50 @p[x=" + event.controller.pos.x + ",y=" + event.controller.pos.y + ",z=" + event.controller.pos.z + "]"); } );
|
||||
tffluid.addRecipeTooltip("50 xp:站在池子中控制器正上方的位置");
|
||||
tffluid.build();
|
||||
@@ -66,14 +66,15 @@ recipes.addShaped(<thaumicaugmentation:starfield_glass:2>*4,
|
||||
[<aoa3:rusted_iron_ingot>, <divinerpg:teaker_staff>.reuse(), <aoa3:rusted_iron_ingot>],
|
||||
[<minecraft:glass>, <aoa3:rusted_iron_ingot>, <minecraft:glass>]]);
|
||||
|
||||
// mods.thaumcraft.ArcaneWorkbench.removeRecipe(<thaumicenergistics:arcane_terminal>);
|
||||
|
||||
recipes.removeShaped(<thaumcraft:plate:2>);
|
||||
recipes.removeShaped(<thaumcraft:plate:3>);
|
||||
// recipes.removeShaped(<thaumadditions:mithrillium_plate>);
|
||||
// recipes.removeShaped(<thaumadditions:adaminite_plate>);
|
||||
// recipes.removeShaped(<thaumadditions:mithminite_plate>);
|
||||
|
||||
# See scripts/thaumcraft/research/LateResearch.zs for related research adjustments
|
||||
recipes.removeShaped(<thaumadditions:mithrillium_plate>);
|
||||
recipes.removeShaped(<thaumadditions:adaminite_plate>);
|
||||
recipes.removeShaped(<thaumadditions:mithminite_plate>);
|
||||
# See config/thaumcraftfix/patches/thaumic_energistics.json for related research adjustments
|
||||
mods.thaumcraft.ArcaneWorkbench.removeRecipe(<thaumicenergistics:arcane_terminal>);
|
||||
mods.thaumcraft.ArcaneWorkbench.removeRecipe(<thaumicenergistics:blank_knowledge_core>);
|
||||
mods.thaumcraft.Infusion.removeRecipe(<thaumicenergistics:arcane_assembler>);
|
||||
|
||||
val arcaneassembler = RecipeBuilder.newBuilder("arcaneassemblerinf","arcane_autoinfuser",120);
|
||||
@@ -92,8 +93,6 @@ arcaneassembler.addItemInput(<contenttweaker:complex_gearbox>);
|
||||
arcaneassembler.addItemOutput(<thaumicenergistics:arcane_assembler>);
|
||||
arcaneassembler.build();
|
||||
|
||||
mods.thaumcraft.ArcaneWorkbench.removeRecipe(<thaumicenergistics:blank_knowledge_core>);
|
||||
|
||||
mods.thaumcraft.Crucible.registerRecipe("easierseal1", "", <thaumcraft:seal:12>, <thaumcraft:seal:0>, [<aspect:instrumentum>*20,<aspect:humanus>*10]);
|
||||
mods.thaumcraft.Crucible.registerRecipe("easierseal2", "", <thaumcraft:seal:8>, <thaumcraft:seal:0>, [<aspect:bestia>*20,<aspect:sensus>*10]);
|
||||
mods.thaumcraft.Crucible.registerRecipe("easierseal3", "", <thaumcraft:seal:7>, <thaumcraft:seal:0>, [<aspect:herba>*20,<aspect:vitreus>*10]);
|
||||
@@ -108,53 +107,6 @@ mods.thaumcraft.Infusion.registerRecipe("infuseshimmerleaf", "",
|
||||
<aoa3:holly_top_seeds>,
|
||||
[<thaumcraft:quicksilver>, <thaumcraft:quicksilver>, <thaumcraft:quicksilver>, <thaumcraft:quicksilver>]);
|
||||
|
||||
|
||||
mods.thaumcraft.Infusion.removeRecipe(<thaumictinkerer:kami_chest>);
|
||||
|
||||
mods.thaumcraft.Infusion.registerRecipe("infkamichest", "",
|
||||
<thaumictinkerer:kami_chest>, 10,
|
||||
[<aspect:lux>*250,<aspect:aer>*150,<aspect:praemunio>*125,<aspect:volatus>*125,<aspect:ordo>*125,<aspect:alienis>*60],
|
||||
<thaumictinkerer:ichor_chest>,
|
||||
[<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>,
|
||||
<thaumictinkerer:kamiresource:2>, <thaumictinkerer:kamiresource:2>,
|
||||
<minecraft:chorus_fruit_popped>, <minecraft:golden_chestplate>,
|
||||
<thaumcraft:cloud_ring>, <minecraft:elytra>,
|
||||
<minecraft:shield>, <minecraft:feather>,
|
||||
<minecraft:ghast_tear>, <minecraft:arrow>]);
|
||||
|
||||
mods.thaumcraft.Infusion.registerRecipe("infkamiboots", "",
|
||||
<thaumictinkerer:kami_boots>, 10,
|
||||
[<aspect:lux>*250,<aspect:terra>*150,<aspect:praemunio>*125,<aspect:instrumentum>*125,<aspect:motus>*125,<aspect:volatus>*60],
|
||||
<thaumictinkerer:ichor_boots>,
|
||||
[<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>,
|
||||
<thaumictinkerer:kamiresource:2>, <thaumictinkerer:kamiresource:2>,
|
||||
<minecraft:chorus_fruit_popped>, <minecraft:golden_boots>,
|
||||
<minecraft:wheat_seeds>, <minecraft:grass>,
|
||||
<thaumcraft:lamp_growth>, <thaumcraft:turret>,
|
||||
<minecraft:wool:0>, <minecraft:lead>]);
|
||||
|
||||
mods.thaumcraft.Infusion.registerRecipe("infkamilegs", "",
|
||||
<thaumictinkerer:kami_legs>, 10,
|
||||
[<aspect:lux>*250,<aspect:ignis>*150,<aspect:praemunio>*125,<aspect:volatus>*125,<aspect:ordo>*125,<aspect:alienis>*60],
|
||||
<thaumictinkerer:ichor_legs>,
|
||||
[<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>,
|
||||
<thaumictinkerer:kamiresource:2>, <thaumictinkerer:kamiresource:2>,
|
||||
<minecraft:chorus_fruit_popped>, <minecraft:golden_leggings>,
|
||||
<minecraft:potion>.withTag({Potion: "minecraft:fire_resistance"}), <thaumictinkerer:energetic_nitor>,
|
||||
<thaumcraft:lamp_arcane>, <minecraft:lava_bucket>,
|
||||
<minecraft:fire_charge>, <minecraft:blaze_rod>]);
|
||||
|
||||
mods.thaumcraft.Infusion.registerRecipe("infkamihelm", "",
|
||||
<thaumictinkerer:kami_helm>, 10,
|
||||
[<aspect:lux>*250,<aspect:aqua>*150,<aspect:auram>*125,<aspect:praemunio>*125,<aspect:cognitio>*125,<aspect:victus>*60],
|
||||
<thaumictinkerer:ichor_helm>,
|
||||
[<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>,
|
||||
<thaumictinkerer:kamiresource:2>, <thaumictinkerer:kamiresource:2>,
|
||||
<minecraft:chorus_fruit_popped>, <minecraft:golden_helmet>,
|
||||
<minecraft:potion>.withTag({Potion: "minecraft:night_vision"}), <thaumictinkerer:energetic_nitor>,
|
||||
<thaumcraft:goggles>, <minecraft:ghast_tear>,
|
||||
<minecraft:fish>, <minecraft:cake>]);
|
||||
|
||||
recipes.addShaped(<thaumictinkerer:kamiresource:3>,
|
||||
[[null, <aoa3:blazium_ingot>, null],
|
||||
[<thaumictinkerer:kamiresource:2>, <thaumcraft:ingot:0>, <thaumictinkerer:kamiresource:2>],
|
||||
@@ -179,4 +131,3 @@ recipes.addShaped(<contenttweaker:ancient_decrystallizer>,
|
||||
[[<divinerpg:corrupted_shards>, <thaumcraft:crystal_essence>, <divinerpg:corrupted_shards>],
|
||||
[<thaumcraft:crystal_essence>, <aoa3:sapphire_pickaxe>, <thaumcraft:crystal_essence>],
|
||||
[<divinerpg:corrupted_shards>, <thaumcraft:crystal_essence>, <divinerpg:corrupted_shards>]]);
|
||||
|
||||
|
||||
@@ -45,12 +45,15 @@ recipes.addShapeless(<techreborn:ingot:1>*9, [<ore:blockBrass>]);
|
||||
|
||||
val brassplate = <ore:plateBrass>;
|
||||
brassplate.remove(<railcraft:plate:11>);
|
||||
brassplate.remove(<thaumcraft:plate:0>);
|
||||
|
||||
recipes.removeByRecipeName("thaumcraft:brassplate");
|
||||
|
||||
mods.immersiveengineering.MetalPress.removeRecipe(<railcraft:plate:11>);
|
||||
mods.immersiveengineering.MetalPress.addRecipe(<techreborn:plates:18>, <ore:ingotBrass>, <immersiveengineering:mold:0>, 2000);
|
||||
|
||||
recipes.removeShapeless(<techreborn:plates:18>, [<immersiveengineering:tool:0>], true);
|
||||
recipes.addShapeless(<techreborn:plates:18>,
|
||||
recipes.removeShapeless(<thaumcraft:plate:0>, [<immersiveengineering:tool:0>], true);
|
||||
recipes.addShapeless("plate_brass_ie", <techreborn:plates:18>,
|
||||
[<immersiveengineering:tool:0>,
|
||||
<ore:ingotBrass>]);
|
||||
|
||||
@@ -68,8 +71,6 @@ recipes.addShaped(<techreborn:ingot:1>,
|
||||
mods.immersiveengineering.ArcFurnace.removeRecipe(<railcraft:ingot:9>);
|
||||
mods.immersiveengineering.ArcFurnace.addRecipe(<techreborn:ingot:1>, <ore:ingotZinc>, null, 100, 512, [<ore:dustCopper>*3]);
|
||||
mods.immersiveengineering.ArcFurnace.addRecipe(<techreborn:ingot:1>, <ore:dustZinc>, null, 100, 512, [<ore:ingotCopper>*3]);
|
||||
mods.immersiveengineering.ArcFurnace.addRecipe(<techreborn:ingot:1>, <ore:dustZinc>, null, 100, 512, [<ore:dustCopper>*3]);
|
||||
mods.immersiveengineering.ArcFurnace.addRecipe(<techreborn:ingot:1>, <ore:ingotZinc>, null, 100, 512, [<ore:ingotCopper>*3]);
|
||||
|
||||
|
||||
//==================================================================
|
||||
@@ -286,11 +287,13 @@ silverplate.remove(<bewitchment:silver_plate>);
|
||||
silverplate.remove(<immersiveengineering:metal:33>);
|
||||
silverplate.remove(<railcraft:plate:5>);
|
||||
|
||||
recipes.removeByRecipeName("bewitchment:compat/silver_plate");
|
||||
|
||||
mods.immersiveengineering.MetalPress.removeRecipe(<immersiveengineering:metal:33>);
|
||||
mods.immersiveengineering.MetalPress.addRecipe(<thermalfoundation:material:322>, <ore:ingotSilver>, <immersiveengineering:mold:0>, 2000);
|
||||
|
||||
recipes.removeShapeless(<immersiveengineering:metal:33>, [<immersiveengineering:tool:0>], true);
|
||||
recipes.addShapeless(<thermalfoundation:material:322>,
|
||||
recipes.addShapeless("plate_silver_ie", <thermalfoundation:material:322>,
|
||||
[<immersiveengineering:tool:0>,
|
||||
<ore:ingotSilver>]);
|
||||
|
||||
@@ -691,26 +694,20 @@ irondust.remove(<careerbees:ingredients:4>);
|
||||
val ironplate = <ore:plateIron>;
|
||||
ironplate.remove(<immersiveengineering:metal:39>);
|
||||
ironplate.remove(<railcraft:plate:0>);
|
||||
// ironplate.remove(<techreborn:plates:0>);
|
||||
ironplate.remove(<thaumcraft:plate:1>);
|
||||
ironplate.remove(<libvulpes:productplate:1>);
|
||||
|
||||
recipes.remove(<thaumcraft:plate:1>);
|
||||
recipes.addShaped(<thermalfoundation:material:32>*3,
|
||||
[[<ore:ingotIron>,<ore:ingotIron>,<ore:ingotIron>]]);
|
||||
recipes.removeByRecipeName("thaumcraft:ironplate");
|
||||
|
||||
mods.immersiveengineering.MetalPress.removeRecipe(<immersiveengineering:metal:39>);
|
||||
mods.immersiveengineering.MetalPress.addRecipe(<thermalfoundation:material:32>, <ore:ingotIron>, <immersiveengineering:mold:0>, 2000);
|
||||
|
||||
recipes.removeShapeless(<immersiveengineering:metal:39>, [<immersiveengineering:tool:0>], true);
|
||||
recipes.addShapeless(<thermalfoundation:material:32>,
|
||||
recipes.addShapeless("plate_iron_ie", <thermalfoundation:material:32>,
|
||||
[<immersiveengineering:tool:0>,
|
||||
<ore:ingotIron>]);
|
||||
|
||||
recipes.addShapeless(<thaumcraft:plate:1>*3,
|
||||
[<ore:plateIron>,
|
||||
<ore:plateIron>,
|
||||
<ore:plateIron>]);
|
||||
|
||||
mods.immersiveengineering.Crusher.removeRecipe(<immersiveengineering:metal:18>);
|
||||
mods.immersiveengineering.Crusher.addRecipe(<thermalfoundation:material:0>*2, <ore:oreIron>, 2048, <thermalfoundation:material:69>, 0.1);
|
||||
mods.immersiveengineering.Crusher.addRecipe(<thermalfoundation:material:0>, <ore:ingotIron>, 2048);
|
||||
@@ -906,4 +903,4 @@ mods.nuclearcraft.manufactory.removeRecipeWithInput([<thaumictinkerer:kamiresour
|
||||
mods.nuclearcraft.melter.removeRecipeWithInput([<thaumictinkerer:kamiresource:3>]);
|
||||
mods.nuclearcraft.melter.removeRecipeWithInput([<thaumictinkerer:kamiresource:5>]);
|
||||
|
||||
mods.nuclearcraft.pressurizer.removeRecipeWithInput([<thaumictinkerer:kamiresource:3>]);
|
||||
mods.nuclearcraft.pressurizer.removeRecipeWithInput([<thaumictinkerer:kamiresource:3>]);
|
||||
@@ -1192,10 +1192,6 @@
|
||||
<contenttweaker:fourth_recursive_lock>.addTooltip(format.red("在递归监狱钥匙生成的地牢内使用"));
|
||||
<contenttweaker:fifth_recursive_lock>.addTooltip(format.red("在递归监狱钥匙生成的地牢内使用"));
|
||||
|
||||
<ore:plateMithrillium>.addTooltip(format.red("若想完成魔导手册中需要对应金属板的条目,一定要手动合成,使用压缩机合成无法完成条目"));
|
||||
<ore:plateAdaminite>.addTooltip(format.red("若想完成魔导手册中需要对应金属板的条目,一定要手动合成,使用压缩机合成无法完成条目"));
|
||||
<ore:plateMithminite>.addTooltip(format.red("若想完成魔导手册中需要对应金属板的条目,一定要手动合成,使用压缩机合成无法完成条目"));
|
||||
|
||||
<contenttweaker:rftools_syringe>.addTooltip(format.red("由于卡顿,真正的注射器物品已在JEI中隐藏,无视结构空位即可"));
|
||||
|
||||
|
||||
|
||||
@@ -2612,7 +2612,6 @@ import crafttweaker.item.IItemCondition;
|
||||
<akashictome:tome>.addTooltip(format.red("警告:不要与星芒宝典、魔导手册、植物魔法辞典、死灵之书以及万能溶剂之经合成"));
|
||||
|
||||
<thaumicenergistics:arcane_terminal>.addTooltip(format.red("警告:可能引起崩溃,应避免过多使用"));
|
||||
<thaumicenergistics:arcane_terminal>.addTooltip(format.red("虚空预言者的珍珠的魔力减免不起作用"));
|
||||
|
||||
<libvulpes:advstructuremachine>.addTooltip(format.red("HiaggTM得升级他的IO仓了"));
|
||||
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
import crafttweaker.liquid.ILiquidStack;
|
||||
import crafttweaker.item.IItemStack;
|
||||
import crafttweaker.player.IPlayer;
|
||||
import crafttweaker.text.ITextComponent;
|
||||
import mods.modularmachinery.IMachineController;
|
||||
import mods.modularmachinery.RecipeBuilder;
|
||||
import mods.modularmachinery.RecipeCheckEvent;
|
||||
import mods.modularmachinery.RecipeFinishEvent;
|
||||
|
||||
import scripts.advancedModulars.experience.XPConfigurator as Configurator;
|
||||
import scripts.util.ModularEventUtils as Util;
|
||||
|
||||
// Crafting recipes
|
||||
recipes.addShaped(<forge:bucketfilled>.withTag({FluidName: "bewitched_essence_salts", Amount: 1000}),
|
||||
[[<contenttweaker:salt_of_knowledge>, <contenttweaker:imp_skin>, <contenttweaker:salt_of_knowledge>],
|
||||
[<contenttweaker:imp_skin>, <forge:bucketfilled>.withTag({FluidName: "mana", Amount: 1000}), <contenttweaker:imp_skin>],
|
||||
[<contenttweaker:salt_of_knowledge>, <contenttweaker:imp_skin>, <contenttweaker:salt_of_knowledge>]]);
|
||||
|
||||
recipes.addShaped(Configurator.withMode(1),
|
||||
[[<actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>],
|
||||
[<actuallyadditions:item_solidified_experience>, <enderio:item_yeta_wrench>, <actuallyadditions:item_solidified_experience>],
|
||||
[<actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>, <actuallyadditions:item_solidified_experience>]]);
|
||||
|
||||
// Item machine recipes
|
||||
var xpSolidified = buildItemRecipes(<actuallyadditions:item_solidified_experience>, "xp_solidified", 8);
|
||||
var xpOverworldian = buildItemRecipes(<deepmoblearning:living_matter_overworldian>, "xp_overworldian", 10);
|
||||
var xpHellish = buildItemRecipes(<deepmoblearning:living_matter_hellish>, "xp_hellish", 14);
|
||||
var xpExtraterrestrial = buildItemRecipes(<deepmoblearning:living_matter_extraterrestrial>, "xp_extraterrestrial", 20);
|
||||
var xpTwilight = buildItemRecipes(<deepmoblearning:living_matter_twilight>, "xp_twilight", 30);
|
||||
var xpBeeEssence = buildItemRecipes(<contenttweaker:condensed_essence>, "xp_bee_essence", 1000);
|
||||
|
||||
// Fluid machine recipes
|
||||
var xpCyclic = buildFluidRecipes(<fluid:xpjuice>, "xp_cyclic", 50);
|
||||
var xpIndustrialForegoing = buildFluidRecipes(<fluid:essence>, "xp_industrial_foregoing", 50);
|
||||
var xpThermal = buildFluidRecipes(<fluid:experience>, "xp_thermal", 50);
|
||||
|
||||
// Recipe builders
|
||||
function buildItemRecipes(stack as IItemStack, baseName as string, baseXP as int) {
|
||||
for mode in Configurator.modes {
|
||||
var xp = baseXP * mode;
|
||||
var itemXPRecipe = RecipeBuilder.newBuilder(`${baseName}_${mode}x`, "xp_assimilator", 5);
|
||||
itemXPRecipe.addItemInput(stack * mode)
|
||||
.addItemInput(Configurator.withMode(mode))
|
||||
.setChance(0.0)
|
||||
.addPostCheckHandler(function(event as RecipeCheckEvent) {
|
||||
checkForPlayer(event);
|
||||
}
|
||||
)
|
||||
.addFinishHandler(function(event as RecipeFinishEvent) {
|
||||
giveXPToNearest(event.controller, xp);
|
||||
}
|
||||
)
|
||||
.addRecipeTooltip(ITextComponent.fromTranslation("tile.modularmachinery.xp_assimilator.desc", [xp]).formattedText)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
function buildFluidRecipes(stack as ILiquidStack, baseName as string, baseXP as int) {
|
||||
var xp = baseXP;
|
||||
var fluidXPRecipe = RecipeBuilder.newBuilder(`${baseName}`, "xp_assimilator", 5);
|
||||
fluidXPRecipe.addFluidInput(stack * 1000)
|
||||
.addPostCheckHandler(function(event as RecipeCheckEvent) {
|
||||
checkForPlayer(event);
|
||||
}
|
||||
)
|
||||
.addFinishHandler(function(event as RecipeFinishEvent) {
|
||||
giveXPToNearest(event.controller, xp);
|
||||
}
|
||||
)
|
||||
.addRecipeTooltip(ITextComponent.fromTranslation("tile.modularmachinery.xp_assimilator.desc", [xp]).formattedText)
|
||||
.build();
|
||||
}
|
||||
|
||||
// Recipe logic
|
||||
function checkForPlayer(event as RecipeCheckEvent) as void {
|
||||
var pos = event.controller.pos;
|
||||
// I think this is thread safe: doesn't modify world state and MMCE's task executor spins the main thread (?) during execution
|
||||
var player = event.controller.world.getClosestPlayer(pos.x, pos.y, pos.z, 2, false) as IPlayer;
|
||||
if (isNull(player)) {
|
||||
var failureText = ITextComponent.fromTranslation("tile.modularmachinery.xp_assimilator.failure").formattedText;
|
||||
event.setFailed(failureText);
|
||||
}
|
||||
}
|
||||
|
||||
function giveXPToNearest(controller as IMachineController, xp as int) {
|
||||
var sender = Util.getControllerSender(controller);
|
||||
var pos = controller.pos;
|
||||
var command = `xp ${xp} @p[x=${pos.x},y=${pos.y},z=${pos.z}]`;
|
||||
Util.scheduleTask(controller, function() as void {
|
||||
server.commandManager.executeCommand(sender, command);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
#priority 10
|
||||
|
||||
import crafttweaker.data.IData;
|
||||
import crafttweaker.item.IItemStack;
|
||||
import crafttweaker.text.ITextComponent;
|
||||
|
||||
static modes as int[] = [1, 64, 256, 1024];
|
||||
|
||||
<cotItem:experience_configurator>.itemRightClick = function(itemStack, world, player, hand) {
|
||||
if (world.remote) {
|
||||
return "PASS";
|
||||
}
|
||||
if (hand == "MAIN_HAND") {
|
||||
var nbt as IData = itemStack.tag;
|
||||
var newNBT as IData = {};
|
||||
if (isNull(nbt) || isNull(nbt.mode)) {
|
||||
// Set the default mode
|
||||
newNBT = {
|
||||
mode: modes[0] as int
|
||||
} as IData;
|
||||
} else if (!isNull(nbt.mode)) {
|
||||
// Cycle the mode
|
||||
newNBT = {
|
||||
mode: cycle(nbt.mode)
|
||||
} as IData;
|
||||
}
|
||||
// Update the mode
|
||||
(itemStack as IItemStack).mutable().withTag(newNBT);
|
||||
|
||||
var text = ITextComponent.fromTranslation("chat.contenttweaker.xp_configurator.mode", newNBT.mode);
|
||||
text.style.color = "LIGHT_PURPLE";
|
||||
player.sendRichTextStatusMessage(text, true);
|
||||
return "SUCCESS";
|
||||
}
|
||||
return "PASS";
|
||||
};
|
||||
<contenttweaker:experience_configurator>.addTooltip(ITextComponent.fromTranslation("item.contenttweaker.xp_configurator.desc").formattedText);
|
||||
<contenttweaker:experience_configurator>.addAdvancedTooltip(function(item) {
|
||||
var nbt = item.tag;
|
||||
if (!(isNull(nbt) || isNull(nbt.mode))) {
|
||||
var text = ITextComponent.fromTranslation("chat.contenttweaker.xp_configurator.mode", nbt.mode);
|
||||
text.style.color = "LIGHT_PURPLE";
|
||||
return text.formattedText;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
function cycle(currentMode as int) as int {
|
||||
for i in 0 to modes.length {
|
||||
if (modes[i] == currentMode) {
|
||||
return modes[(i + 1) % modes.length];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function withMode(modeIn as int) as IItemStack {
|
||||
var nbt = {
|
||||
mode: "无效模式,请反馈该bug!"
|
||||
} as IData;
|
||||
for mode in modes {
|
||||
if (modeIn == mode) {
|
||||
nbt = {
|
||||
mode: modeIn
|
||||
} as IData;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return <contenttweaker:experience_configurator>.withTag(nbt);
|
||||
}
|
||||
+11
-21
@@ -9,6 +9,7 @@ import mods.contenttweaker.Commands;
|
||||
import mods.contenttweaker.VanillaFactory;
|
||||
import mods.zenutils.cotx.Block;
|
||||
|
||||
# Bee stargate portals
|
||||
var sednaportal = VanillaFactory.createExpandBlock("sedna_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(sednaportal);
|
||||
setPortalLogic(sednaportal, 147, true);
|
||||
@@ -29,25 +30,21 @@ setPortalProps(lunaportal);
|
||||
setPortalLogic(lunaportal, 145, true);
|
||||
lunaportal.register();
|
||||
|
||||
|
||||
var osirisportal = VanillaFactory.createExpandBlock("osiris_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(osirisportal);
|
||||
setPortalLogic(osirisportal, 148, true);
|
||||
osirisportal.register();
|
||||
|
||||
|
||||
var ptahportal = VanillaFactory.createExpandBlock("ptah_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(ptahportal);
|
||||
setPortalLogic(ptahportal, 149, true);
|
||||
ptahportal.register();
|
||||
|
||||
|
||||
var hatorportal = VanillaFactory.createExpandBlock("hator_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(hatorportal);
|
||||
setPortalLogic(hatorportal, 150, true);
|
||||
hatorportal.register();
|
||||
|
||||
|
||||
var europaportal = VanillaFactory.createExpandBlock("europa_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(europaportal);
|
||||
setPortalLogic(europaportal, 151, true);
|
||||
@@ -58,25 +55,21 @@ setPortalProps(oiportal);
|
||||
setPortalLogic(oiportal, 152, true);
|
||||
oiportal.register();
|
||||
|
||||
|
||||
var falacerportal = VanillaFactory.createExpandBlock("falacer_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(falacerportal);
|
||||
setPortalLogic(falacerportal, 160, true);
|
||||
falacerportal.register();
|
||||
|
||||
|
||||
var orcusportal = VanillaFactory.createExpandBlock("orcus_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(orcusportal);
|
||||
setPortalLogic(orcusportal, 161, true);
|
||||
orcusportal.register();
|
||||
|
||||
|
||||
var myrmexportal = VanillaFactory.createExpandBlock("myrmex_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(myrmexportal);
|
||||
setPortalLogic(myrmexportal, 164, true);
|
||||
myrmexportal.register();
|
||||
|
||||
|
||||
var pixoniaportal = VanillaFactory.createExpandBlock("pixonia_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(pixoniaportal);
|
||||
setPortalLogic(pixoniaportal, 165, true);
|
||||
@@ -87,17 +80,15 @@ setPortalProps(proximaportal);
|
||||
setPortalLogic(proximaportal, 166, true);
|
||||
proximaportal.register();
|
||||
|
||||
|
||||
var zoiportal = VanillaFactory.createExpandBlock("zoi_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(zoiportal);
|
||||
setPortalLogic(zoiportal, 171, true);
|
||||
zoiportal.register();
|
||||
|
||||
var neroportal = VanillaFactory.createExpandBlock("nero_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(neroportal);
|
||||
setPortalLogic(neroportal, 170, true);
|
||||
neroportal.register();
|
||||
|
||||
var zoiportal = VanillaFactory.createExpandBlock("zoi_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(zoiportal);
|
||||
setPortalLogic(zoiportal, 171, true);
|
||||
zoiportal.register();
|
||||
|
||||
var akathartosportal = VanillaFactory.createExpandBlock("akathartos_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(akathartosportal);
|
||||
@@ -109,19 +100,13 @@ setPortalProps(pauramportal);
|
||||
setPortalLogic(pauramportal, 173, true);
|
||||
pauramportal.register();
|
||||
|
||||
|
||||
var alkemiaportal = VanillaFactory.createExpandBlock("alkemia_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(alkemiaportal);
|
||||
setPortalLogic(alkemiaportal, 174, true);
|
||||
alkemiaportal.register();
|
||||
|
||||
|
||||
var apichisiportal = VanillaFactory.createExpandBlock("apichisi_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(apichisiportal);
|
||||
setPortalLogic(apichisiportal, 184, false);
|
||||
apichisiportal.register();
|
||||
|
||||
|
||||
# Wormhole generator portals
|
||||
var taerrapiattaportal = VanillaFactory.createExpandBlock("taerrapiatta_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(taerrapiattaportal);
|
||||
setPortalLogic(taerrapiattaportal, 180, false);
|
||||
@@ -142,6 +127,11 @@ setPortalProps(finemportal);
|
||||
setPortalLogic(finemportal, 185, false);
|
||||
finemportal.register();
|
||||
|
||||
var apichisiportal = VanillaFactory.createExpandBlock("apichisi_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(apichisiportal);
|
||||
setPortalLogic(apichisiportal, 184, false);
|
||||
apichisiportal.register();
|
||||
|
||||
var lyndenwyrmportal = VanillaFactory.createExpandBlock("lyndenwyrm_portal_block", <blockmaterial:glass>);
|
||||
setPortalProps(lyndenwyrmportal);
|
||||
setPortalLogic(lyndenwyrmportal, 162, false);
|
||||
+21
-21
@@ -1,5 +1,3 @@
|
||||
import native.hellfirepvp.modularmachinery.common.crafting.command.ControllerCommandSender;
|
||||
import native.hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController;
|
||||
import native.net.minecraft.item.Item;
|
||||
import native.net.minecraft.item.ItemStack;
|
||||
|
||||
@@ -9,16 +7,18 @@ import crafttweaker.world.IBlockPos;
|
||||
import mods.modularmachinery.RecipeBuilder;
|
||||
import mods.modularmachinery.MachineTickEvent;
|
||||
import mods.modularmachinery.RecipeStartEvent;
|
||||
import mods.modularmachinery.RecipeFailureEvent;
|
||||
import mods.modularmachinery.MMEvents;
|
||||
import mods.modularmachinery.IMachineController;
|
||||
|
||||
// Ideally some code here should be shared with ModularWormholeField, but for some reason cross-script reference doesn't work.
|
||||
// Shared code
|
||||
import scripts.util.ModularEventUtils as Util;
|
||||
|
||||
static offset as Util.Offset = Util.Offset(5, -4);
|
||||
var portal = <ore:blockCustomPortal>;
|
||||
portal.addItems([
|
||||
<contenttweaker:sedna_portal_block>,
|
||||
<contenttweaker:rhenia_portal_block>,
|
||||
<contenttweaker:haumea_portal_block>,
|
||||
<contenttweaker:luna_portal_block>,
|
||||
<contenttweaker:osiris_portal_block>,
|
||||
<contenttweaker:ptah_portal_block>,
|
||||
@@ -38,7 +38,7 @@ portal.addItems([
|
||||
]);
|
||||
var tooltip = [
|
||||
"该配方在激活时会生成一个传送门。",
|
||||
"多方块结构必须位于太空站。",
|
||||
"多方块结构必须位于空间站。",
|
||||
"站在传送门中以进行传送。"
|
||||
] as string[];
|
||||
|
||||
@@ -62,6 +62,16 @@ stargaterhenia.addItemInput(<contenttweaker:rhenia_warper>).setChance(0)
|
||||
.addRecipeTooltip(tooltip)
|
||||
.build();
|
||||
|
||||
var stargatehaumea = RecipeBuilder.newBuilder("stargate_haumea", "bee_stargate", 100);
|
||||
stargatehaumea.addItemInput(<contenttweaker:haumea_warper>).setChance(0)
|
||||
.addFluidInput(<fluid:for.honey> * 100)
|
||||
.addStartHandler(function(event as RecipeStartEvent) {
|
||||
beeStargateRecipeStart(event.controller, "contenttweaker:haumea_portal_block", "Haumea");
|
||||
}
|
||||
)
|
||||
.addRecipeTooltip(tooltip)
|
||||
.build();
|
||||
|
||||
var stargateluna = RecipeBuilder.newBuilder("stargate_luna", "bee_stargate", 100);
|
||||
stargateluna.addItemInput(<contenttweaker:luna_warper>).setChance(0)
|
||||
.addFluidInput(<fluid:for.honey> * 100)
|
||||
@@ -224,9 +234,9 @@ stargatealkemia.addItemInput(<contenttweaker:alkemia_warper>).setChance(0)
|
||||
|
||||
// Do start up sound and message if no current portal, spawn portal if different recipe, or nothing if same portal:
|
||||
function beeStargateRecipeStart(controller as IMachineController, portalBlock as string, destination as string) {
|
||||
var pos = getCenter(controller, 5, -4);
|
||||
var sender = getControllerSender(controller);
|
||||
controller.world.native.getMinecraftServer().addScheduledTask(function() {
|
||||
var pos = offset.getCenter(controller);
|
||||
var sender = Util.getControllerSender(controller);
|
||||
Util.scheduleTask(controller, function() as void {
|
||||
var currentPortalBlock = controller.world.getBlockState(pos);
|
||||
|
||||
if (currentPortalBlock != IBlockState.getBlockState(portalBlock,"")) {
|
||||
@@ -250,8 +260,8 @@ MMEvents.onMachinePostTick("bee_stargate", function(event as MachineTickEvent) {
|
||||
if (ctrl.world.time % 20 != 0 || ctrl.isWorking) {
|
||||
return;
|
||||
}
|
||||
var pos = getCenter(ctrl, 5, -4);
|
||||
ctrl.world.native.getMinecraftServer().addScheduledTask(function() {
|
||||
var pos = offset.getCenter(ctrl);
|
||||
Util.scheduleTask(ctrl, function() as void {
|
||||
var centerState = ctrl.world.getBlockState(pos);
|
||||
var itemBlock = ItemStack(Item.getItemFromBlock(centerState.block.native));
|
||||
// Only clear blocks that aren't unbreakable or are known portal blocks.
|
||||
@@ -264,7 +274,7 @@ MMEvents.onMachinePostTick("bee_stargate", function(event as MachineTickEvent) {
|
||||
|
||||
// Clear portal blocks.
|
||||
function beeStargateClear(controller as IMachineController, pos as IBlockPos) {
|
||||
var sender = getControllerSender(controller);
|
||||
var sender = Util.getControllerSender(controller);
|
||||
beeStargatePlacePortal(controller, "minecraft:air", pos, sender);
|
||||
var offlineText = '{"translate":"chat.contenttweaker.stargate.offline"}';
|
||||
server.commandManager.executeCommand(sender, "playsound minecraft:entity.evocation_illager.cast_spell ambient @a " + pos.x + " " + pos.y + " " + pos.z + " 1 0.5");
|
||||
@@ -281,14 +291,4 @@ function beeStargatePlacePortal(controller as IMachineController, portalBlock as
|
||||
if (facing == crafttweaker.world.IFacing.north() || facing == crafttweaker.world.IFacing.south()) { dx = 1; }
|
||||
else { dz = 1; }
|
||||
server.commandManager.executeCommand(sender, "fill " + (pos.x - dx) + " " + (pos.y - 1) + " " + (pos.z - dz) + " " + (pos.x + dx) + " " + (pos.y + 1) + " " + (pos.z + dz) + " " + portalBlock);
|
||||
}
|
||||
|
||||
function getCenter(ctrl as IMachineController, offsetUp as int, offsetFacing as int) as IBlockPos {
|
||||
return ctrl.pos.getOffset(up, offsetUp).getOffset(ctrl.facing, offsetFacing);
|
||||
}
|
||||
|
||||
// The ICommandSender must have the correct associated world, so we're using ControllerCommandSender.
|
||||
function getControllerSender(controller as IMachineController) as ICommandSender {
|
||||
var sender = ControllerCommandSender(controller as TileMultiblockMachineController) as native.net.minecraft.command.ICommandSender;
|
||||
return sender.wrapper;
|
||||
}
|
||||
+9
-20
@@ -1,5 +1,3 @@
|
||||
import native.hellfirepvp.modularmachinery.common.crafting.command.ControllerCommandSender;
|
||||
import native.hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController;
|
||||
import native.net.minecraft.item.Item;
|
||||
import native.net.minecraft.item.ItemStack;
|
||||
|
||||
@@ -9,12 +7,13 @@ import crafttweaker.world.IBlockPos;
|
||||
import mods.modularmachinery.RecipeBuilder;
|
||||
import mods.modularmachinery.MachineTickEvent;
|
||||
import mods.modularmachinery.RecipeStartEvent;
|
||||
import mods.modularmachinery.RecipeFailureEvent;
|
||||
import mods.modularmachinery.MMEvents;
|
||||
import mods.modularmachinery.IMachineController;
|
||||
|
||||
// Ideally some code here should be shared with ModularBeeStargate, but for some reason cross-script reference doesn't work.
|
||||
// Shared code
|
||||
import scripts.util.ModularEventUtils as Util;
|
||||
|
||||
static offset as Util.Offset = Util.Offset(4, -3);
|
||||
var portal = <ore:blockCustomPortal>;
|
||||
portal.addItems([
|
||||
<contenttweaker:taerrapiatta_portal_block>,
|
||||
@@ -102,9 +101,9 @@ wormholegallifrey.addItemInput(<contenttweaker:gallifrey_warper>).setChance(0)
|
||||
|
||||
// Do start up sound and message if no current portal, spawn portal if different recipe, or nothing if same portal:
|
||||
function wormholeGeneratorRecipeStart(controller as IMachineController, portalBlock as string, destination as string) {
|
||||
var pos = getCenter(controller, 4, -3);
|
||||
var sender = getControllerSender(controller);
|
||||
controller.world.native.getMinecraftServer().addScheduledTask(function() {
|
||||
var pos = offset.getCenter(controller);
|
||||
var sender = Util.getControllerSender(controller);
|
||||
Util.scheduleTask(controller, function() as void {
|
||||
var currentPortalBlock = controller.world.getBlockState(pos);
|
||||
|
||||
if (currentPortalBlock != IBlockState.getBlockState(portalBlock,"")) {
|
||||
@@ -128,8 +127,8 @@ MMEvents.onMachinePostTick("wormhole_field_generator", function(event as Machine
|
||||
if (ctrl.world.time % 20 != 0 || ctrl.isWorking) {
|
||||
return;
|
||||
}
|
||||
var pos = getCenter(ctrl, 4, -3);
|
||||
ctrl.world.native.getMinecraftServer().addScheduledTask(function() {
|
||||
var pos = offset.getCenter(ctrl);
|
||||
Util.scheduleTask(ctrl, function() as void {
|
||||
var centerState = ctrl.world.getBlockState(pos);
|
||||
var itemBlock = ItemStack(Item.getItemFromBlock(centerState.block.native));
|
||||
// Only clear blocks that aren't unbreakable or are known portal blocks.
|
||||
@@ -142,7 +141,7 @@ MMEvents.onMachinePostTick("wormhole_field_generator", function(event as Machine
|
||||
|
||||
// Clear portal blocks.
|
||||
function wormholeGeneratorClear(controller as IMachineController, pos as IBlockPos) {
|
||||
var sender = getControllerSender(controller);
|
||||
var sender = Util.getControllerSender(controller);
|
||||
wormholeGeneratorPlacePortal(controller, "minecraft:air", pos, sender);
|
||||
var offlineText = '{"translate":"chat.contenttweaker.wormhole_generator.offline"}';
|
||||
server.commandManager.executeCommand(sender, "playsound minecraft:entity.evocation_illager.cast_spell ambient @a " + pos.x + " " + pos.y + " " + pos.z + " 1 0.5");
|
||||
@@ -155,14 +154,4 @@ function wormholeGeneratorClear(controller as IMachineController, pos as IBlockP
|
||||
function wormholeGeneratorPlacePortal(controller as IMachineController, portalBlock as string, pos as IBlockPos, sender as ICommandSender) {
|
||||
var facing = controller.facing;
|
||||
server.commandManager.executeCommand(sender, "fill " + (pos.x - 1) + " " + (pos.y - 1) + " " + (pos.z - 1) + " " + (pos.x + 1) + " " + (pos.y + 1) + " " + (pos.z + 1) + " " + portalBlock);
|
||||
}
|
||||
|
||||
function getCenter(ctrl as IMachineController, offsetUp as int, offsetFacing as int) as IBlockPos {
|
||||
return ctrl.pos.getOffset(up, offsetUp).getOffset(ctrl.facing, offsetFacing);
|
||||
}
|
||||
|
||||
// The ICommandSender must have the correct associated world, so we're using ControllerCommandSender.
|
||||
function getControllerSender(controller as IMachineController) as ICommandSender {
|
||||
var sender = ControllerCommandSender(controller as TileMultiblockMachineController) as native.net.minecraft.command.ICommandSender;
|
||||
return sender.wrapper;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
#modloaded thaumcraft techreborn
|
||||
#loader mixin
|
||||
|
||||
import native.net.minecraft.item.Item;
|
||||
import native.net.minecraft.item.ItemStack;
|
||||
|
||||
import native.techreborn.items.ingredients.ItemPlates as TRPlates;
|
||||
|
||||
/*
|
||||
Unify plate drops for arcane bore.
|
||||
|
||||
Created by ChaosStrikez for Thaumcraft v6.1.BETA-26.
|
||||
*/
|
||||
#mixin {targets: "thaumcraft.common.entities.construct.EntityArcaneBore"}
|
||||
zenClass mixinEntityArcaneBore {
|
||||
#mixin Redirect
|
||||
#{
|
||||
# method: "func_70628_a",
|
||||
# at: {
|
||||
# value: "NEW",
|
||||
# target: "(Lnet/minecraft/item/Item;)Lnet/minecraft/item/ItemStack;",
|
||||
# ordinal: 5
|
||||
# }
|
||||
#}
|
||||
function mbc_unifyBrassPlate(original as Item) as ItemStack {
|
||||
return TRPlates.getPlateByName("brass");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
#modloaded thaumcraft techreborn thermalfoundation
|
||||
#loader mixin
|
||||
|
||||
import native.net.minecraft.item.Item;
|
||||
import native.net.minecraft.item.ItemStack;
|
||||
|
||||
import native.cofh.thermalfoundation.item.ItemMaterial as ThermalPlates;
|
||||
import native.techreborn.items.ingredients.ItemPlates as TRPlates;
|
||||
|
||||
/*
|
||||
Unify plate drops for advanced crossbow turret.
|
||||
|
||||
Created by ChaosStrikez for Thaumcraft v6.1.BETA-26.
|
||||
*/
|
||||
#mixin {targets: "thaumcraft.common.entities.construct.EntityTurretCrossbowAdvanced"}
|
||||
zenClass MixinEntityTurretCrossbowAdvanced {
|
||||
#mixin Redirect
|
||||
#{
|
||||
# method: "func_70628_a",
|
||||
# at: {
|
||||
# value: "NEW",
|
||||
# target: "(Lnet/minecraft/item/Item;II)Lnet/minecraft/item/ItemStack;",
|
||||
# ordinal: 4
|
||||
# }
|
||||
#}
|
||||
function mbc_unifyBrassPlate(original as Item, amount as int, meta as int) as ItemStack {
|
||||
return TRPlates.getPlateByName("brass");
|
||||
}
|
||||
|
||||
#mixin Redirect
|
||||
#{
|
||||
# method: "func_70628_a",
|
||||
# at: {
|
||||
# value: "NEW",
|
||||
# target: "(Lnet/minecraft/item/Item;II)Lnet/minecraft/item/ItemStack;",
|
||||
# ordinal: 5
|
||||
# }
|
||||
#}
|
||||
function mbc_unifyIronPlate1(original as Item, amount as int, meta as int) as ItemStack {
|
||||
return ThermalPlates.plateIron.copy();
|
||||
}
|
||||
|
||||
#mixin Redirect
|
||||
#{
|
||||
# method: "func_70628_a",
|
||||
# at: {
|
||||
# value: "NEW",
|
||||
# target: "(Lnet/minecraft/item/Item;II)Lnet/minecraft/item/ItemStack;",
|
||||
# ordinal: 6
|
||||
# }
|
||||
#}
|
||||
function mbc_unifyIronPlate2(original as Item, amount as int, meta as int) as ItemStack {
|
||||
return ThermalPlates.plateIron.copy();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
#modloaded thaumcraft
|
||||
#loader lateAddTC
|
||||
import native.net.minecraft.item.ItemStack;
|
||||
import native.thaumcraft.api.golems.parts.GolemMaterial;
|
||||
import native.thaumcraft.api.golems.parts.GolemHead;
|
||||
import native.thaumcraft.api.golems.parts.GolemLeg;
|
||||
|
||||
import crafttweaker.item.IItemStack;
|
||||
/*
|
||||
Unify plates visually shown in the golem press.
|
||||
*/
|
||||
var unifiedPlates = {
|
||||
<thaumcraft:plate:0>: <techreborn:plates:18>, // brass
|
||||
<thaumcraft:plate:1>: <thermalfoundation:material:32>, // iron
|
||||
<bewitchment:silver_plate>: <thermalfoundation:material:322>, // silver
|
||||
} as IItemStack[IItemStack];
|
||||
|
||||
# Materials
|
||||
for material in GolemMaterial.getMaterials() {
|
||||
if (isStackValid(material.componentBase)) {
|
||||
var baseComponent as IItemStack = material.componentBase.wrapper;
|
||||
material.componentBase = unifyStack(baseComponent, unifiedPlates);
|
||||
}
|
||||
}
|
||||
# Head
|
||||
for head in GolemHead.getHeads() {
|
||||
var components = head.components;
|
||||
for i in 0 to components.length {
|
||||
var component = components[i];
|
||||
if (component instanceof ItemStack && isStackValid(component as ItemStack)) {
|
||||
var stack as IItemStack = (component as ItemStack).wrapper;
|
||||
components[i] = unifyStack(stack, unifiedPlates);
|
||||
}
|
||||
}
|
||||
}
|
||||
# Leg
|
||||
for leg in GolemLeg.getLegs() {
|
||||
var components = leg.components;
|
||||
for i in 0 to components.length {
|
||||
var component = components[i];
|
||||
if (component instanceof ItemStack && isStackValid(component as ItemStack)) {
|
||||
var stack as IItemStack = (component as ItemStack).wrapper;
|
||||
components[i] = unifyStack(stack, unifiedPlates);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isStackValid(stack as ItemStack) as bool {
|
||||
return !(isNull(stack) || stack.isEmpty());
|
||||
}
|
||||
|
||||
function unifyStack(stackIn as ItemStack, unifiedDict as IItemStack[IItemStack]) as ItemStack {
|
||||
var stack as IItemStack = stackIn.wrapper;
|
||||
for original, unified in unifiedDict {
|
||||
if (stack.anyAmount().matches(original)) {
|
||||
return (unified * stack.amount).native;
|
||||
}
|
||||
}
|
||||
return stackIn;
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
#modloaded thaumcraft modtweaker
|
||||
#loader lateAddTC
|
||||
import native.com.blamejared.compat.thaumcraft.handlers.ThaumCraft;
|
||||
import native.com.blamejared.mtlib.helpers.InputHelper;
|
||||
import native.net.minecraft.util.ResourceLocation;
|
||||
import native.thaumcraft.api.ThaumcraftApi;
|
||||
import native.thaumcraft.api.ThaumcraftApiHelper;
|
||||
import native.thaumcraft.api.crafting.InfusionRecipe;
|
||||
|
||||
import crafttweaker.item.IIngredient;
|
||||
import crafttweaker.item.IItemStack;
|
||||
import thaumcraft.aspect.CTAspectStack;
|
||||
|
||||
/*
|
||||
Infusion recipes that REPLACE existing recipes tied to research. Removal is unnecssary, the recipes will be overwritten.
|
||||
This is to keep the recipe available in the research page.
|
||||
*/
|
||||
var tcAdditions = "thaumadditions";
|
||||
var tcTinkerer = "thaumictinkerer";
|
||||
# KAMI armor
|
||||
registerInfusionRecipeFromAddon(`${tcTinkerer}:kami_helm`, "TT_KAMIHELM",
|
||||
<thaumictinkerer:kami_helm>, 32,
|
||||
[
|
||||
<aspect:aqua> * 150, <aspect:auram> * 125, <aspect:cognitio> * 125,
|
||||
<aspect:victus> * 60, <aspect:lux> * 250, <aspect:praemunio> * 125
|
||||
],
|
||||
<thaumictinkerer:ichor_helm>,
|
||||
[
|
||||
<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>, <thaumictinkerer:kamiresource:2>,
|
||||
<thaumictinkerer:kamiresource:2>, <minecraft:chorus_fruit_popped>, <minecraft:golden_helmet>,
|
||||
<minecraft:potion>.withTag({Potion: "minecraft:night_vision"}), <thaumcraft:goggles>, <minecraft:ghast_tear>,
|
||||
<minecraft:fish>, <minecraft:cake>, <minecraft:ender_eye>
|
||||
]
|
||||
);
|
||||
registerInfusionRecipeFromAddon(`${tcTinkerer}:kami_chest`, "TT_KAMICHEST",
|
||||
<thaumictinkerer:kami_chest>, 32,
|
||||
[
|
||||
<aspect:aer> * 150, <aspect:praemunio> * 125, <aspect:volatus> * 125,
|
||||
<aspect:ordo> * 125, <aspect:lux> * 250, <aspect:alienis> * 60
|
||||
],
|
||||
<thaumictinkerer:ichor_chest>,
|
||||
[
|
||||
<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>, <thaumictinkerer:kamiresource:2>,
|
||||
<thaumictinkerer:kamiresource:2>, <minecraft:chorus_fruit_popped>, <minecraft:golden_chestplate>,
|
||||
<thaumcraft:cloud_ring>, <minecraft:elytra>, <minecraft:shield>,
|
||||
<minecraft:feather>, <minecraft:ghast_tear>, <minecraft:arrow>
|
||||
]
|
||||
);
|
||||
registerInfusionRecipeFromAddon(`${tcTinkerer}:kami_legs`, "TT_KAMILEGS",
|
||||
<thaumictinkerer:kami_legs>, 32,
|
||||
[
|
||||
<aspect:aer> * 150, <aspect:praemunio> * 125, <aspect:volatus> * 125,
|
||||
<aspect:ordo> * 125, <aspect:lux> * 250, <aspect:alienis> * 60
|
||||
],
|
||||
<thaumictinkerer:ichor_legs>,
|
||||
[
|
||||
<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>, <thaumictinkerer:kamiresource:2>,
|
||||
<thaumictinkerer:kamiresource:2>, <minecraft:chorus_fruit_popped>, <minecraft:golden_leggings>,
|
||||
<minecraft:potion>.withTag({Potion: "minecraft:fire_resistance"}), <thaumictinkerer:energetic_nitor>, <thaumcraft:lamp_arcane>,
|
||||
<minecraft:lava_bucket>, <minecraft:fire_charge>, <minecraft:blaze_rod>
|
||||
]
|
||||
);
|
||||
registerInfusionRecipeFromAddon(`${tcTinkerer}:kami_boots`, "TT_KAMIBOOTS",
|
||||
<thaumictinkerer:kami_boots>, 32,
|
||||
[
|
||||
<aspect:terra> * 150, <aspect:praemunio> * 125, <aspect:instrumentum> * 125,
|
||||
<aspect:motus> * 125, <aspect:lux> * 250, <aspect:herba> * 60,
|
||||
<aspect:volatus> * 60
|
||||
],
|
||||
<thaumictinkerer:ichor_boots>,
|
||||
[
|
||||
<thaumadditions:mithrillium_ingot>, <thaumadditions:mithrillium_ingot>, <thaumictinkerer:kamiresource:2>,
|
||||
<thaumictinkerer:kamiresource:2>, <minecraft:chorus_fruit_popped>, <minecraft:golden_boots>,
|
||||
<minecraft:grass>, <minecraft:wheat_seeds>, <thaumcraft:lamp_growth>,
|
||||
<thaumcraft:turret:2>, <minecraft:wool:0>, <minecraft:lead>
|
||||
]
|
||||
);
|
||||
|
||||
# Fix crystal crusher in JEI
|
||||
registerInfusionRecipeFromAddon(`${tcAdditions}:crystal_crusher`, "TAR_CRYSTAL_CRUSHER",
|
||||
<thaumadditions:crystal_crusher>, 3,
|
||||
[
|
||||
<aspect:fabrico> * 20, <aspect:exitium> * 20, <aspect:instrumentum> * 20
|
||||
],
|
||||
<thaumcraft:mechanism_complex>,
|
||||
[
|
||||
makeCrystal(<aspect:aer>), makeCrystal(<aspect:terra>), makeCrystal(<aspect:ignis>),
|
||||
makeCrystal(<aspect:aqua>), makeCrystal(<aspect:ordo>), makeCrystal(<aspect:perditio>),
|
||||
<thaumcraft:plate:2>, <thaumcraft:plate:2>, <thaumcraft:plate:2>,
|
||||
<thaumcraft:slab_arcane_stone>, <thaumcraft:slab_arcane_stone>, <thaumcraft:slab_arcane_stone>,
|
||||
<thaumadditions:salt_essence>.withTag({Aspects: [{amount: 1, key: "praemunio"}]}), <thaumadditions:salt_essence>.withTag({Aspects: [{amount: 1, key: "praemunio"}]})
|
||||
]
|
||||
);
|
||||
|
||||
# Unify brass plates
|
||||
registerInfusionRecipeFromAddon(`${tcAdditions}:crystal_bore`, "TAR_CRYSTAL_BORE",
|
||||
<thaumadditions:crystal_bore>, 5,
|
||||
[
|
||||
<aspect:exitium> * 20, <aspect:terra> * 10, <aspect:perditio> * 30
|
||||
],
|
||||
<thaumcraft:morphic_resonator>,
|
||||
[
|
||||
<thaumcraft:stone_arcane>, <techreborn:plates:18>, <thaumcraft:stone_arcane>,
|
||||
<techreborn:plates:18>, <thaumcraft:stone_arcane>, <thaumcraft:mechanism_complex>
|
||||
]
|
||||
);
|
||||
|
||||
/*
|
||||
The same as Infusion.registerRecipe(), but allows a namespace in the resource location.
|
||||
ModTweaker only allows infusion recipes with the "thaumcraft" namespace, this allows any namespace.
|
||||
*/
|
||||
function registerInfusionRecipeFromAddon(resourceLocation as string, research as string, output as IItemStack, instability as int,
|
||||
aspects as CTAspectStack[], centralItem as IIngredient, recipe as IIngredient[]) {
|
||||
var infusionRecipe = InfusionRecipe(
|
||||
research, output.native, instability,
|
||||
ThaumCraft.getAspects(aspects), centralItem.native, InputHelper.toObjects(recipe)
|
||||
);
|
||||
ThaumcraftApi.addInfusionCraftingRecipe(ResourceLocation(resourceLocation), infusionRecipe);
|
||||
}
|
||||
|
||||
function makeCrystal(aspect as CTAspectStack) as IItemStack {
|
||||
return ThaumcraftApiHelper.makeCrystal(ThaumCraft.getAspect(aspect)).wrapper;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
#modloaded thaumcraft
|
||||
#loader lateAddTC
|
||||
import native.net.minecraft.item.ItemStack;
|
||||
import native.thaumcraft.api.research.ResearchCategories;
|
||||
import native.thaumcraft.api.research.ResearchStage;
|
||||
|
||||
import crafttweaker.item.IItemStack;
|
||||
|
||||
/*
|
||||
Hard-coded, non-JSON, research pages to replace crafting requirements for consume requirements.
|
||||
This is so we can make these ingredients obtainable through non-crafting recipes,
|
||||
but still make associated research completable.
|
||||
|
||||
See config/thaumcraftfix/patches for research page changes that are JSON-based.
|
||||
*/
|
||||
|
||||
# Mithrillium plates
|
||||
var mithrilliumPlate = <thaumadditions:mithrillium_plate>;
|
||||
var t1JarStage = findCraftingStage("TAR_MITHRILLIUM_JAR", mithrilliumPlate);
|
||||
convertCraftToConsume(t1JarStage, mithrilliumPlate);
|
||||
|
||||
var t1SmelterStage = findCraftingStage("TAR_MITHRILLIUM_SMELTER", mithrilliumPlate);
|
||||
convertCraftToConsume(t1SmelterStage, mithrilliumPlate);
|
||||
|
||||
# Adaminite plates
|
||||
var adaminitePlate = <thaumadditions:adaminite_plate>;
|
||||
var t2JarStage = findCraftingStage("TAR_ADAMINITE_JAR", adaminitePlate);
|
||||
convertCraftToConsume(t2JarStage, adaminitePlate);
|
||||
|
||||
var t2SmelterStage = findCraftingStage("TAR_ADAMINITE_SMELTER", adaminitePlate);
|
||||
convertCraftToConsume(t2SmelterStage, adaminitePlate);
|
||||
|
||||
# Mithminite plates
|
||||
var mithminitePlate = <thaumadditions:mithminite_plate>;
|
||||
var t3JarStage = findCraftingStage("TAR_MITHMINITE_JAR", mithminitePlate);
|
||||
convertCraftToConsume(t3JarStage, mithminitePlate);
|
||||
|
||||
var t3SmelterStage = findCraftingStage("TAR_MITHMINITE_SMELTER", mithminitePlate);
|
||||
convertCraftToConsume(t3SmelterStage, mithminitePlate);
|
||||
|
||||
var scytheStage = findCraftingStage("TAR_MITHMINITE_SCYTHE", mithminitePlate);
|
||||
convertCraftToConsume(scytheStage, mithminitePlate);
|
||||
|
||||
function findCraftingStage(researchName as string, targetItem as IItemStack) as ResearchStage {
|
||||
var stages = ResearchCategories.getResearch(researchName).getStages();
|
||||
for stage in stages {
|
||||
var crafts = stage.getCraft();
|
||||
// Check this stage has the target crafting requirement
|
||||
if (!isNull(crafts)) {
|
||||
var craftsAsItems = crafts as ItemStack[];
|
||||
for stack in craftsAsItems {
|
||||
if (ItemStack.areItemStacksEqual(stack, targetItem.native)) {
|
||||
return stage;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function convertCraftToConsume(stage as ResearchStage, itemToConvert as IItemStack) {
|
||||
var newCrafts = [] as [ItemStack];
|
||||
var oldCrafts = stage.getCraft() as ItemStack[];
|
||||
for stack in oldCrafts {
|
||||
if (!ItemStack.areItemStacksEqual(stack, itemToConvert.native)) {
|
||||
newCrafts += stack;
|
||||
}
|
||||
}
|
||||
// Remove item from crafting requirement
|
||||
if (newCrafts.length == 0) {
|
||||
stage.setCraft(null);
|
||||
} else {
|
||||
stage.setCraft(newCrafts);
|
||||
}
|
||||
// Add item to consume requirement
|
||||
var consumed = stage.getObtain();
|
||||
if (isNull(consumed) || consumed.length == 0) {
|
||||
stage.setObtain([itemToConvert.native] as ItemStack[]);
|
||||
} else {
|
||||
stage.setObtain((consumed as ItemStack[]) + itemToConvert.native);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
#priority 10
|
||||
|
||||
import native.hellfirepvp.modularmachinery.common.crafting.command.ControllerCommandSender;
|
||||
import native.hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController;
|
||||
|
||||
import crafttweaker.command.ICommandSender;
|
||||
import crafttweaker.world.IBlockPos;
|
||||
import mods.modularmachinery.IMachineController;
|
||||
|
||||
/*
|
||||
Utility functions for properly executing commands from a MMCE event.
|
||||
*/
|
||||
|
||||
zenClass Offset {
|
||||
val yOffset as int;
|
||||
val facingOffset as int;
|
||||
|
||||
zenConstructor(y as int, facing as int) {
|
||||
yOffset = y;
|
||||
facingOffset = facing;
|
||||
}
|
||||
|
||||
/*
|
||||
Return the position of the center to use.
|
||||
*/
|
||||
function getCenter(ctrl as IMachineController) as IBlockPos {
|
||||
return ctrl.pos.getOffset(up, yOffset).getOffset(ctrl.facing, facingOffset);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Return a command sender based on the MMCE controller.
|
||||
Required in order to provide dimension context to commands.
|
||||
*/
|
||||
function getControllerSender(controller as IMachineController) as ICommandSender {
|
||||
var sender = ControllerCommandSender(controller as TileMultiblockMachineController) as native.net.minecraft.command.ICommandSender;
|
||||
return sender.wrapper;
|
||||
}
|
||||
|
||||
/*
|
||||
Schedule a task to run on the main thread.
|
||||
You should use this for anything that modifies in-world objects.
|
||||
The passed task must be `function() as void {...}`.
|
||||
*/
|
||||
function scheduleTask(controller as IMachineController, task as function()void) {
|
||||
controller.world.native.getMinecraftServer().addScheduledTask(task);
|
||||
}
|
||||
Reference in New Issue
Block a user