Merge pull request #41 from jchung01/xp-bath-fix
Improve XP bath and fix related bugs
This commit is contained in:
@@ -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.directed_miniature_quasar.name=Directed Miniature Quasar
|
||||||
tile.contenttweaker.quasar_burst_director.name=Quasar Burst Director
|
tile.contenttweaker.quasar_burst_director.name=Quasar Burst Director
|
||||||
fluid.inquiring_abyssite=Inquiring Abyssite
|
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
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("No nearby player");} } );
|
|
||||||
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: Stand right on top of the controller inside the pool");
|
|
||||||
tffluid.build();
|
|
||||||
@@ -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: "Invalid mode, please report this 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.contenttweaker.VanillaFactory;
|
||||||
import mods.zenutils.cotx.Block;
|
import mods.zenutils.cotx.Block;
|
||||||
|
|
||||||
|
# Bee stargate portals
|
||||||
var sednaportal = VanillaFactory.createExpandBlock("sedna_portal_block", <blockmaterial:glass>);
|
var sednaportal = VanillaFactory.createExpandBlock("sedna_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(sednaportal);
|
setPortalProps(sednaportal);
|
||||||
setPortalLogic(sednaportal, 147, true);
|
setPortalLogic(sednaportal, 147, true);
|
||||||
@@ -29,25 +30,21 @@ setPortalProps(lunaportal);
|
|||||||
setPortalLogic(lunaportal, 145, true);
|
setPortalLogic(lunaportal, 145, true);
|
||||||
lunaportal.register();
|
lunaportal.register();
|
||||||
|
|
||||||
|
|
||||||
var osirisportal = VanillaFactory.createExpandBlock("osiris_portal_block", <blockmaterial:glass>);
|
var osirisportal = VanillaFactory.createExpandBlock("osiris_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(osirisportal);
|
setPortalProps(osirisportal);
|
||||||
setPortalLogic(osirisportal, 148, true);
|
setPortalLogic(osirisportal, 148, true);
|
||||||
osirisportal.register();
|
osirisportal.register();
|
||||||
|
|
||||||
|
|
||||||
var ptahportal = VanillaFactory.createExpandBlock("ptah_portal_block", <blockmaterial:glass>);
|
var ptahportal = VanillaFactory.createExpandBlock("ptah_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(ptahportal);
|
setPortalProps(ptahportal);
|
||||||
setPortalLogic(ptahportal, 149, true);
|
setPortalLogic(ptahportal, 149, true);
|
||||||
ptahportal.register();
|
ptahportal.register();
|
||||||
|
|
||||||
|
|
||||||
var hatorportal = VanillaFactory.createExpandBlock("hator_portal_block", <blockmaterial:glass>);
|
var hatorportal = VanillaFactory.createExpandBlock("hator_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(hatorportal);
|
setPortalProps(hatorportal);
|
||||||
setPortalLogic(hatorportal, 150, true);
|
setPortalLogic(hatorportal, 150, true);
|
||||||
hatorportal.register();
|
hatorportal.register();
|
||||||
|
|
||||||
|
|
||||||
var europaportal = VanillaFactory.createExpandBlock("europa_portal_block", <blockmaterial:glass>);
|
var europaportal = VanillaFactory.createExpandBlock("europa_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(europaportal);
|
setPortalProps(europaportal);
|
||||||
setPortalLogic(europaportal, 151, true);
|
setPortalLogic(europaportal, 151, true);
|
||||||
@@ -58,25 +55,21 @@ setPortalProps(oiportal);
|
|||||||
setPortalLogic(oiportal, 152, true);
|
setPortalLogic(oiportal, 152, true);
|
||||||
oiportal.register();
|
oiportal.register();
|
||||||
|
|
||||||
|
|
||||||
var falacerportal = VanillaFactory.createExpandBlock("falacer_portal_block", <blockmaterial:glass>);
|
var falacerportal = VanillaFactory.createExpandBlock("falacer_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(falacerportal);
|
setPortalProps(falacerportal);
|
||||||
setPortalLogic(falacerportal, 160, true);
|
setPortalLogic(falacerportal, 160, true);
|
||||||
falacerportal.register();
|
falacerportal.register();
|
||||||
|
|
||||||
|
|
||||||
var orcusportal = VanillaFactory.createExpandBlock("orcus_portal_block", <blockmaterial:glass>);
|
var orcusportal = VanillaFactory.createExpandBlock("orcus_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(orcusportal);
|
setPortalProps(orcusportal);
|
||||||
setPortalLogic(orcusportal, 161, true);
|
setPortalLogic(orcusportal, 161, true);
|
||||||
orcusportal.register();
|
orcusportal.register();
|
||||||
|
|
||||||
|
|
||||||
var myrmexportal = VanillaFactory.createExpandBlock("myrmex_portal_block", <blockmaterial:glass>);
|
var myrmexportal = VanillaFactory.createExpandBlock("myrmex_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(myrmexportal);
|
setPortalProps(myrmexportal);
|
||||||
setPortalLogic(myrmexportal, 164, true);
|
setPortalLogic(myrmexportal, 164, true);
|
||||||
myrmexportal.register();
|
myrmexportal.register();
|
||||||
|
|
||||||
|
|
||||||
var pixoniaportal = VanillaFactory.createExpandBlock("pixonia_portal_block", <blockmaterial:glass>);
|
var pixoniaportal = VanillaFactory.createExpandBlock("pixonia_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(pixoniaportal);
|
setPortalProps(pixoniaportal);
|
||||||
setPortalLogic(pixoniaportal, 165, true);
|
setPortalLogic(pixoniaportal, 165, true);
|
||||||
@@ -87,17 +80,15 @@ setPortalProps(proximaportal);
|
|||||||
setPortalLogic(proximaportal, 166, true);
|
setPortalLogic(proximaportal, 166, true);
|
||||||
proximaportal.register();
|
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>);
|
var neroportal = VanillaFactory.createExpandBlock("nero_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(neroportal);
|
setPortalProps(neroportal);
|
||||||
setPortalLogic(neroportal, 170, true);
|
setPortalLogic(neroportal, 170, true);
|
||||||
neroportal.register();
|
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>);
|
var akathartosportal = VanillaFactory.createExpandBlock("akathartos_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(akathartosportal);
|
setPortalProps(akathartosportal);
|
||||||
@@ -109,19 +100,13 @@ setPortalProps(pauramportal);
|
|||||||
setPortalLogic(pauramportal, 173, true);
|
setPortalLogic(pauramportal, 173, true);
|
||||||
pauramportal.register();
|
pauramportal.register();
|
||||||
|
|
||||||
|
|
||||||
var alkemiaportal = VanillaFactory.createExpandBlock("alkemia_portal_block", <blockmaterial:glass>);
|
var alkemiaportal = VanillaFactory.createExpandBlock("alkemia_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(alkemiaportal);
|
setPortalProps(alkemiaportal);
|
||||||
setPortalLogic(alkemiaportal, 174, true);
|
setPortalLogic(alkemiaportal, 174, true);
|
||||||
alkemiaportal.register();
|
alkemiaportal.register();
|
||||||
|
|
||||||
|
|
||||||
var apichisiportal = VanillaFactory.createExpandBlock("apichisi_portal_block", <blockmaterial:glass>);
|
# Wormhole generator portals
|
||||||
setPortalProps(apichisiportal);
|
|
||||||
setPortalLogic(apichisiportal, 184, false);
|
|
||||||
apichisiportal.register();
|
|
||||||
|
|
||||||
|
|
||||||
var taerrapiattaportal = VanillaFactory.createExpandBlock("taerrapiatta_portal_block", <blockmaterial:glass>);
|
var taerrapiattaportal = VanillaFactory.createExpandBlock("taerrapiatta_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(taerrapiattaportal);
|
setPortalProps(taerrapiattaportal);
|
||||||
setPortalLogic(taerrapiattaportal, 180, false);
|
setPortalLogic(taerrapiattaportal, 180, false);
|
||||||
@@ -142,6 +127,11 @@ setPortalProps(finemportal);
|
|||||||
setPortalLogic(finemportal, 185, false);
|
setPortalLogic(finemportal, 185, false);
|
||||||
finemportal.register();
|
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>);
|
var lyndenwyrmportal = VanillaFactory.createExpandBlock("lyndenwyrm_portal_block", <blockmaterial:glass>);
|
||||||
setPortalProps(lyndenwyrmportal);
|
setPortalProps(lyndenwyrmportal);
|
||||||
setPortalLogic(lyndenwyrmportal, 162, false);
|
setPortalLogic(lyndenwyrmportal, 162, false);
|
||||||
+20
-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.Item;
|
||||||
import native.net.minecraft.item.ItemStack;
|
import native.net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
@@ -9,16 +7,18 @@ import crafttweaker.world.IBlockPos;
|
|||||||
import mods.modularmachinery.RecipeBuilder;
|
import mods.modularmachinery.RecipeBuilder;
|
||||||
import mods.modularmachinery.MachineTickEvent;
|
import mods.modularmachinery.MachineTickEvent;
|
||||||
import mods.modularmachinery.RecipeStartEvent;
|
import mods.modularmachinery.RecipeStartEvent;
|
||||||
import mods.modularmachinery.RecipeFailureEvent;
|
|
||||||
import mods.modularmachinery.MMEvents;
|
import mods.modularmachinery.MMEvents;
|
||||||
import mods.modularmachinery.IMachineController;
|
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>;
|
var portal = <ore:blockCustomPortal>;
|
||||||
portal.addItems([
|
portal.addItems([
|
||||||
<contenttweaker:sedna_portal_block>,
|
<contenttweaker:sedna_portal_block>,
|
||||||
<contenttweaker:rhenia_portal_block>,
|
<contenttweaker:rhenia_portal_block>,
|
||||||
|
<contenttweaker:haumea_portal_block>,
|
||||||
<contenttweaker:luna_portal_block>,
|
<contenttweaker:luna_portal_block>,
|
||||||
<contenttweaker:osiris_portal_block>,
|
<contenttweaker:osiris_portal_block>,
|
||||||
<contenttweaker:ptah_portal_block>,
|
<contenttweaker:ptah_portal_block>,
|
||||||
@@ -62,6 +62,16 @@ stargaterhenia.addItemInput(<contenttweaker:rhenia_warper>).setChance(0)
|
|||||||
.addRecipeTooltip(tooltip)
|
.addRecipeTooltip(tooltip)
|
||||||
.build();
|
.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);
|
var stargateluna = RecipeBuilder.newBuilder("stargate_luna", "bee_stargate", 100);
|
||||||
stargateluna.addItemInput(<contenttweaker:luna_warper>).setChance(0)
|
stargateluna.addItemInput(<contenttweaker:luna_warper>).setChance(0)
|
||||||
.addFluidInput(<fluid:for.honey> * 100)
|
.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:
|
// 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) {
|
function beeStargateRecipeStart(controller as IMachineController, portalBlock as string, destination as string) {
|
||||||
var pos = getCenter(controller, 5, -4);
|
var pos = offset.getCenter(controller);
|
||||||
var sender = getControllerSender(controller);
|
var sender = Util.getControllerSender(controller);
|
||||||
controller.world.native.getMinecraftServer().addScheduledTask(function() {
|
Util.scheduleTask(controller, function() as void {
|
||||||
var currentPortalBlock = controller.world.getBlockState(pos);
|
var currentPortalBlock = controller.world.getBlockState(pos);
|
||||||
|
|
||||||
if (currentPortalBlock != IBlockState.getBlockState(portalBlock,"")) {
|
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) {
|
if (ctrl.world.time % 20 != 0 || ctrl.isWorking) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var pos = getCenter(ctrl, 5, -4);
|
var pos = offset.getCenter(ctrl);
|
||||||
ctrl.world.native.getMinecraftServer().addScheduledTask(function() {
|
Util.scheduleTask(ctrl, function() as void {
|
||||||
var centerState = ctrl.world.getBlockState(pos);
|
var centerState = ctrl.world.getBlockState(pos);
|
||||||
var itemBlock = ItemStack(Item.getItemFromBlock(centerState.block.native));
|
var itemBlock = ItemStack(Item.getItemFromBlock(centerState.block.native));
|
||||||
// Only clear blocks that aren't unbreakable or are known portal blocks.
|
// 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.
|
// Clear portal blocks.
|
||||||
function beeStargateClear(controller as IMachineController, pos as IBlockPos) {
|
function beeStargateClear(controller as IMachineController, pos as IBlockPos) {
|
||||||
var sender = getControllerSender(controller);
|
var sender = Util.getControllerSender(controller);
|
||||||
beeStargatePlacePortal(controller, "minecraft:air", pos, sender);
|
beeStargatePlacePortal(controller, "minecraft:air", pos, sender);
|
||||||
var offlineText = '{"translate":"chat.contenttweaker.stargate.offline"}';
|
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");
|
server.commandManager.executeCommand(sender, "playsound minecraft:entity.evocation_illager.cast_spell ambient @a " + pos.x + " " + pos.y + " " + pos.z + " 1 0.5");
|
||||||
@@ -282,13 +292,3 @@ function beeStargatePlacePortal(controller as IMachineController, portalBlock as
|
|||||||
else { dz = 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);
|
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.Item;
|
||||||
import native.net.minecraft.item.ItemStack;
|
import native.net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
@@ -9,12 +7,13 @@ import crafttweaker.world.IBlockPos;
|
|||||||
import mods.modularmachinery.RecipeBuilder;
|
import mods.modularmachinery.RecipeBuilder;
|
||||||
import mods.modularmachinery.MachineTickEvent;
|
import mods.modularmachinery.MachineTickEvent;
|
||||||
import mods.modularmachinery.RecipeStartEvent;
|
import mods.modularmachinery.RecipeStartEvent;
|
||||||
import mods.modularmachinery.RecipeFailureEvent;
|
|
||||||
import mods.modularmachinery.MMEvents;
|
import mods.modularmachinery.MMEvents;
|
||||||
import mods.modularmachinery.IMachineController;
|
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>;
|
var portal = <ore:blockCustomPortal>;
|
||||||
portal.addItems([
|
portal.addItems([
|
||||||
<contenttweaker:taerrapiatta_portal_block>,
|
<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:
|
// 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) {
|
function wormholeGeneratorRecipeStart(controller as IMachineController, portalBlock as string, destination as string) {
|
||||||
var pos = getCenter(controller, 4, -3);
|
var pos = offset.getCenter(controller);
|
||||||
var sender = getControllerSender(controller);
|
var sender = Util.getControllerSender(controller);
|
||||||
controller.world.native.getMinecraftServer().addScheduledTask(function() {
|
Util.scheduleTask(controller, function() as void {
|
||||||
var currentPortalBlock = controller.world.getBlockState(pos);
|
var currentPortalBlock = controller.world.getBlockState(pos);
|
||||||
|
|
||||||
if (currentPortalBlock != IBlockState.getBlockState(portalBlock,"")) {
|
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) {
|
if (ctrl.world.time % 20 != 0 || ctrl.isWorking) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var pos = getCenter(ctrl, 4, -3);
|
var pos = offset.getCenter(ctrl);
|
||||||
ctrl.world.native.getMinecraftServer().addScheduledTask(function() {
|
Util.scheduleTask(ctrl, function() as void {
|
||||||
var centerState = ctrl.world.getBlockState(pos);
|
var centerState = ctrl.world.getBlockState(pos);
|
||||||
var itemBlock = ItemStack(Item.getItemFromBlock(centerState.block.native));
|
var itemBlock = ItemStack(Item.getItemFromBlock(centerState.block.native));
|
||||||
// Only clear blocks that aren't unbreakable or are known portal blocks.
|
// 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.
|
// Clear portal blocks.
|
||||||
function wormholeGeneratorClear(controller as IMachineController, pos as IBlockPos) {
|
function wormholeGeneratorClear(controller as IMachineController, pos as IBlockPos) {
|
||||||
var sender = getControllerSender(controller);
|
var sender = Util.getControllerSender(controller);
|
||||||
wormholeGeneratorPlacePortal(controller, "minecraft:air", pos, sender);
|
wormholeGeneratorPlacePortal(controller, "minecraft:air", pos, sender);
|
||||||
var offlineText = '{"translate":"chat.contenttweaker.wormhole_generator.offline"}';
|
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");
|
server.commandManager.executeCommand(sender, "playsound minecraft:entity.evocation_illager.cast_spell ambient @a " + pos.x + " " + pos.y + " " + pos.z + " 1 0.5");
|
||||||
@@ -156,13 +155,3 @@ function wormholeGeneratorPlacePortal(controller as IMachineController, portalBl
|
|||||||
var facing = controller.facing;
|
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);
|
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,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