This commit is contained in:
Shiroyasha 2025-09-14 20:52:18 +03:00
commit d8d0e9d536
Signed by: shiroyashik
GPG key ID: E4953D3940D7860A
2567 changed files with 167778 additions and 0 deletions

View file

@ -0,0 +1,39 @@
/** Shamelessly stolen from A&B :) */
function opposite(face) {
if (face.equals("down"))
return "up"
if (face.equals("east"))
return "west"
if (face.equals("west"))
return "east"
if (face.equals("north"))
return "south"
if (face.equals("south"))
return "north"
return "down"
}
BlockEvents.placed(event => {
let block = event.getBlock()
// gtceu blocks
if (block.getId().startsWith("gtceu:")) {
// Set energy converters to feToEu mode when placed
if (block.getId().endsWith("_energy_converter")) {
block.mergeEntityData({ energyContainer: { feToEu: true } })
}
}
// Blocks below these line only get their placements altered if they were placed by an entity
if (event.getEntity() == null) return
// Reverse placed Dynamos on Sneak
if (block.getId().startsWith("thermal:dynamo") || (block.getId().startsWith("systeams:"))) { // systeams:steam is not a block thankfully
let properties = block.getProperties()
if (event.getEntity().isCrouching()) {
properties["facing"] = opposite(properties["facing"].toString())
block.set(block.getId(), properties)
}
}
})

View file

@ -0,0 +1,13 @@
/** some mod tags the charcoal recipe incorrectly */
ServerEvents.recipes(event => {
event.replaceInput({ id: "minecraft:coal_block" }, "#minecraft:coals", "minecraft:coal")
event.replaceOutput({ id: "minecraft:charcoal" }, "#minecraft:coals", "minecraft:charcoal")
// thanks greg
event.replaceOutput({ id: "gtceu:shapeless/block_decompress_charcoal" }, "minecraft:coal", "minecraft:charcoal")
event.replaceOutput({ id: "thermal:storage/charcoal_from_block" }, "minecraft:coal", "minecraft:charcoal")
event.replaceOutput({ id: "thermal:machines/press/unpacking/press_charcoal_unpacking" }, "minecraft:coal", "minecraft:charcoal")
event.replaceOutput({ type: "gtceu:pyrolyse_oven" }, "minecraft:coal", "20x minecraft:charcoal");
event.replaceOutput({ id: "gtceu:forge_hammer/hammer_charcoal_block_to_gem" }, "minecraft:coal", "9x minecraft:charcoal")
event.replaceOutput({ id: "gtceu:coke_oven/log_to_charcoal" }, "minecraft:coal", "minecraft:charcoal")
})

View file

@ -0,0 +1,15 @@
/**
* One-time give of items to new players
*/
PlayerEvents.loggedIn(event => {
// Check if player doesn't have "starting_items" stage yet
if (!event.player.stages.has("starting_items")) {
// Add the stage
event.player.stages.add("starting_items")
// remove the TOP note
event.player.inventory.clear()
// Give qb to player
event.player.give("ftbquests:book")
}
})

View file

@ -0,0 +1,30 @@
/**
* Lowers the tiering of Active Transformers from LuV to IV - script 2 of 2.
* - Changes recipes of High Power Casings and the Active Transformer machine to make them accessible earlier
*/
ServerEvents.recipes(event => {
event.recipes.gtceu.assembler("high_power_casing")
.itemInputs(
"#forge:frames/iridium",
"6x #forge:plates/iridium",
"#gtceu:circuits/ev",
"16x #forge:fine_wires/cobalt",
"16x #forge:fine_wires/copper",
"2x gtceu:platinum_single_wire",
)
.itemOutputs("2x gtceu:high_power_casing")
.duration(100).EUt(GTValues.VA[GTValues.EV])
event.recipes.gtceu.assembler("active_transformer")
.itemInputs(
"gtceu:iv_transformer_16a",
"#gtceu:circuits/luv",
"8x gtceu:samarium_iron_arsenic_oxide_single_wire",
"2x gtceu:hpic_chip"
)
.inputFluids("gtceu:sodium_potassium 1000")
.itemOutputs("gtceu:active_transformer")
.duration(300).EUt(GTValues.VA[GTValues.IV])
// Lowers the voltage at which the laser pipes can be made to post plat-line IV
event.replaceInput({ output: "gtceu:normal_laser_pipe" }, "gtceu:osmiridium_foil", "gtceu:rhodium_foil")
})

View file

@ -0,0 +1,7 @@
/** Bounty board recipes only accept oak. The dev has stated this is intended. https://github.com/ejektaflex/Bountiful/issues/271 */
ServerEvents.recipes(event => {
if (doMonicoins) {
event.replaceInput({ id: "bountiful:crafting/bountyboard" }, "minecraft:oak_log", "#minecraft:logs")
event.replaceInput({ id: "bountiful:crafting/bountyboard" }, "minecraft:oak_planks", "#minecraft:planks")
}
})

View file

@ -0,0 +1,5 @@
/** TODO */
MoreJSEvents.filterAvailableEnchantments((event) => {
event.add("minecraft:unbreaking");
})

View file

@ -0,0 +1,36 @@
/**
* Temporary fix for EnderIO redstone conduits not connecting to various blocks
* see https://github.com/Team-EnderIO/EnderIO/issues/852#issuecomment-2395092479
*/
ServerEvents.tags("block", event => {
const list = [
// All GT tiered blocks
/^gtceu:(steam|u?lv|mv|hv|ev|iv|luv|zpm|uv|uhv|uev|uiv|max|creative)_.*$/,
// All GT Large variants (turbines & multis) + power substation
/^gtceu:.*(_large|large_|_large_|mega_).*$/,
"gtceu:power_substation",
// Thermal/Systeams dynamos & boilers
"#thermal:dynamos",
"steamdynamo:steam_dynamo",
"systeams:steam_dynamo",
/^systeams:.*_boiler$/,
// NC:Neoteric controller & io port
"nuclearcraft:fission_reactor_controller",
"nuclearcraft:fission_reactor_port",
// Snad
"snad:snad",
"snad:red_snad",
// Modded lamps
/^gtceu:.*_lamp$/,
/^quark:.*_lamp$/,
/^chipped:.*_lamp$/,
"xtonesreworked:flat_lamp",
]
event.add("enderio:redstone_connectable", list)
})

View file

@ -0,0 +1,10 @@
/**
* Makes you mine glass faster using a pickaxe
*/
ServerEvents.tags("block", event => {
event.add("minecraft:mineable/pickaxe", ["#forge:glass", "#forge:glass_panes"]);
event.add("minecraft:mineable/pickaxe", /xtonesreworked:glaxx_block_/);
event.add("minecraft:mineable/pickaxe", /enderio:clear_glass/);
event.add("minecraft:mineable/pickaxe", /enderio:fused_quartz/);
})

View file

@ -0,0 +1,32 @@
/*
Creates Forming Press recipes for all tiers of Gregtech Credits,
replacing the singular one for Cupronickel.
*/
ServerEvents.recipes(event => {
// Remove the one forming press recipe for Cupronickel
event.remove({ id: "gtceu:forming_press/credit_cupronickel" })
const metals = [
"copper",
"cupronickel",
"silver",
"gold",
"platinum",
"osmium",
"naquadah",
"neutronium"
]
for (let index = 0; index < metals.length; index++) {
// Total energy cost (default 1600 EU for Cupronickel)
let energyIn = 1600 * Math.pow(4, index);
// Create recipes for all coin types
event.recipes.gtceu.forming_press(`gtceu:forming_press/${metals[index]}_credit`)
.notConsumable("gtceu:credit_casting_mold")
.itemInputs(`gtceu:${metals[index]}_plate`)
.itemOutputs(`4x gtceu:${metals[index]}_credit`)
.EUt(energyIn / (20 * 5))
.duration(20 * 5)
}
})

View file

@ -0,0 +1,17 @@
/** Reverts the GTM 1.4.1 hatch recipe nerf for NM and HM */
ServerEvents.recipes(event => {
if (doHatchRevert) {
event.remove({ id: /item_import_bus_/ })
event.remove({ id: /item_export_bus_/ })
event.remove({ id: /fluid_hatch_/, type: "gtceu:assembler" })
event.remove({ id: /fluid_export_hatch_/, type: "gtceu:assembler" })
let hatchtier = ["ulv", "lv", "mv", "hv", "ev", "iv", "luv", "zpm", "uv", "uhv", "uev", "uiv", "max"]
hatchtier.forEach(volt => {
event.shaped(`gtceu:${volt}_input_bus`, [" S ", " T ", " "], { S: "#forge:chests/wooden", T: `gtceu:${volt}_machine_hull` })
event.shaped(`gtceu:${volt}_output_bus`, [" ", " T ", " S "], { S: "#forge:chests/wooden", T: `gtceu:${volt}_machine_hull` })
event.shaped(`gtceu:${volt}_input_hatch`, [" S ", " T ", " "], { S: "#forge:glass", T: `gtceu:${volt}_machine_hull` })
event.shaped(`gtceu:${volt}_output_hatch`, [" ", " T ", " S "], { S: "#forge:glass", T: `gtceu:${volt}_machine_hull` })
})
}
})

View file

@ -0,0 +1,14 @@
/**
* Remove the stronghold biome tag so that there are no biomes that can generate strongholds
* The same is done for Ad Astra's moon dungeons and Oil wells (contain unused materials)
*/
ServerEvents.tags("worldgen/biome", event => {
event.removeAll("minecraft:has_structure/stronghold");
event.removeAll("ad_astra:has_structure/moon_dungeon");
event.removeAll("ad_astra:has_structure/oil_well");
});
// Add the eye trim as an ender dragon drop
LootJS.modifiers((event) => {
event.addEntityLootModifier("minecraft:ender_dragon").addLoot("minecraft:eye_armor_trim_smithing_template");
});

View file

@ -0,0 +1,16 @@
/**
* Remove/hide useless or overlapping smelting, blasting recipes for ores
*/
ServerEvents.recipes(event => {
// Remove overlapping ore blocks to ingot/dust recipes
event.remove({ id: /^minecraft:nuclearcraft_\w+_ore$/ })
event.remove({ id: /^minecraft:\w+_from_smelting_[\w_]+_ore$/ })
event.remove({ id: /^minecraft:\w+_from_blasting_[\w_]+_ore$/ })
event.remove({ id: /^thermal:smelting\/\w+_ingot_from_(ore|deepslate_ore)_smelting$/ })
event.remove({ id: "thermal:smelting/sulfur_from_smelting" })
event.remove({ id: "thermal:smelting/cinnabar_from_smelting" })
event.remove({ id: "thermal:smelting/apatite_from_smelting" })
})

View file

@ -0,0 +1,28 @@
/**
* Re-tiers the PTERB to late LuV - script 1 of 2.
* - Replaces UV components with LuV components.
*/
ServerEvents.recipes(event => {
event.remove({ id: "gtceu:assembly_line/pterb" })
event.remove({ id: "gtceu:research_station/1_x_gtceu_active_transformer" })
event.recipes.gtceu.assembly_line("pterb")
.itemInputs("gtceu:active_transformer")
.itemInputs("32x gtceu:europium_plate")
.itemInputs("8x gtceu:luv_sensor")
.itemInputs("8x gtceu:luv_emitter")
.itemInputs("4x gtceu:luv_field_generator")
.itemInputs("2x #gtceu:circuits/zpm")
.itemInputs("4x gtceu:europium_large_fluid_pipe")
.itemInputs("8x gtceu:niobium_titanium_quadruple_cable")
.itemInputs("8x gtceu:normal_laser_pipe")
.inputFluids("gtceu:soldering_alloy 4608")
.EUt(GTValues.VA[GTValues.ZPM])
.duration(1200)
.itemOutputs("gtmutils:pterb_machine")
["scannerResearch(java.util.function.UnaryOperator)"](b => b
.researchStack("gtceu:active_transformer")
.duration(2400)
.EUt(7680)
)
})

View file

@ -0,0 +1,24 @@
/**
* Quest Book timer scripts
*/
FTBQuestsEvents.customReward("24FE5D5A412EA666", event => {
// auto complete when you unlock genesis (free cake custom trigger)
FTBQuests.getServerDataFromPlayer(event.getPlayer()).complete("138B92A597D63C12")
})
// timer task 'component'
FTBQuestsEvents.customTask(event => {
if (event.task.hasTag("moni_timer_60")) {
event.setMaxProgress(60 * cake_reset_time);
} else if (event.task.hasTag("moni_timer_30")) {
event.setMaxProgress(30 * cake_reset_time);
}
if (event.task.hasTag("moni_timer")) {
event.setCheckTimer(20);
event.check = (task) => {
task.addProgress(1);
}
}
})

View file

@ -0,0 +1,28 @@
/**
* A little bit of software wizardry that alters any "superconducting_coil" recipes in the Assembler
* to use 1/2 of the Trinium they normally do.
*/
ServerEvents.recipes(event => {
// Get all GTCEu Assembler recipes with an ID matching the regex
event.findRecipes({ id: /gtceu:assembler\/superconducting_coil/, type: "gtceu:assembler" }).forEach(supercon_coil_recipe => {
// Get the JSON array object representing all of the fluid ingredients
let fluidIngredients = supercon_coil_recipe.json.getAsJsonObject("inputs").getAsJsonArray("fluid")
for (let i = 0; i < fluidIngredients.size(); i++) {
// Fluid ingredient to alter if it includes "forge:trinium" as a tag
let curFluidIngredient = fluidIngredients.get(i).getAsJsonObject("content")
// Get the original Trinium fluid amount
let fluidAmount = curFluidIngredient.getAsJsonPrimitive("amount").asInt
// Confirm that we are indeed altering a fluid ingredient that contains the "forge:trinium" tag
let fluidIngredient = curFluidIngredient.getAsJsonArray("value")
for (let j = 0; j < fluidIngredient.size(); j++) {
if (fluidIngredient.get(j).getAsJsonPrimitive("tag").asString == "forge:trinium") {
// Change fluid ingredient to 1/2 the amount if it does match
curFluidIngredient.remove("amount")
curFluidIngredient["addProperty(java.lang.String,java.lang.Number)"]("amount", fluidAmount / 2)
}
}
}
})
})

View file

@ -0,0 +1,11 @@
/**
* Modify AE2 crystal certus mechanic to use GT items
*/
ServerEvents.blockLootTables(event => {
event.addSimpleBlock("ae2:quartz_cluster", "4x gtceu:certus_quartz_gem") // To drop a different item
})
LootJS.modifiers((event) => {
event.addBlockLootModifier(/ae2:.*quartz_bud/)
.replaceLoot("ae2:certus_quartz_dust", "gtceu:certus_quartz_dust")
})

View file

@ -0,0 +1,10 @@
/** Random small tags that don't fit anywhere else */
ServerEvents.tags("item", event => {
event.get("gtceu:batteries").getObjectIds().forEach(resourceLoc => {
event.add("curios:charm", resourceLoc.toString())
})
})
ServerEvents.tags("block", event => {
event.add("minecraft:mineable/pickaxe", "minecraft:glowstone")
})

View file

@ -0,0 +1,19 @@
/**
* Item tags for the Quest Book
*/
ServerEvents.tags("item", event => {
// Input Hatches
event.add("moni:input_hatch", /^gtceu:(?!steam)(?!me).{1,3}_input_hatch$/); // ($) we dont want to get output_hatch_hv
// Output Hatches
event.add("moni:output_hatch", /^gtceu:(?!steam)(?!me).{1,3}_output_hatch$/); // nor do we want hv_energy_input_hatch
// Input buses
event.add("moni:input_bus", /^gtceu:(?!steam)(?!me).{1,3}_input_bus$/)
// Output busses
event.add("moni:output_bus", /^gtceu:(?!steam)(?!me).{1,3}_output_bus$/)
// 'moni_quest:backpack'
event.add("moni_quest:backpack", ["sophisticatedbackpacks:backpack", "sophisticatedbackpacks:copper_backpack", "sophisticatedbackpacks:iron_backpack", "sophisticatedbackpacks:gold_backpack", "sophisticatedbackpacks:diamond_backpack", "sophisticatedbackpacks:netherite_backpack"])
// Monicoin, mostly cosmetic
event.add("moni:coins", ["kubejs:moni_penny", "kubejs:moni_nickel", "kubejs:moni_quarter", "kubejs:moni_dollar"])
})

View file

@ -0,0 +1,113 @@
/**
* unify chipped since they dont do that anymore
* @private
* @param {TagEvent.Item & TagEvent.Block} event
*/
const unifyChisel = (event) => {
// regex here means
// `^` = beginning, `$` = end, `.+` = anything that isnt whitespace, any length
const IRON_BLOCKLIKES = /^chipped:(?!.+_raw_).+_iron_block$/;
const GOLD_BLOCKLIKES = /^chipped:(?!.+_raw_).+_gold_block$/;
// event.add('forge:glass/colorless', /^chipped:.+_glass$/) // most of the glass here only have fancy trims, but they are all not dyed
event.add("forge:cobblestone/normal", /^chipped:.+(?!_mossy)_cobblestone(_bricks)?$/)
event.add("forge:cobblestone/mossy", /^chipped:.+_mossy_cobblestone(_bricks)?$/)
event.add("forge:cobblestone", /^chipped:.+_cobblestone(_bricks)?$/)
event.add("forge:storage_blocks/glowstone", /^chipped:.+_glowstone$/)
event.add("forge:storage_blocks/redstone", /^chipped:.+_redstone_block$/)
event.add("forge:storage_blocks/iron", IRON_BLOCKLIKES)
event.add("forge:storage_blocks/gold", GOLD_BLOCKLIKES)
event.add("forge:storage_blocks/diamond", /^chipped:.+_diamond_block$/);
event.add("forge:storage_blocks/emerald", /^chipped:.+_emerald_block$/);
event.add("forge:storage_blocks/lapis", /^chipped:.+_lapis_block$/);
event.add("minecraft:planks", /^chipped:.+_planks$/)
event.add("forge:glass", /^chipped:.+_glass(_pillar)?$/)
event.add("forge:storage_blocks", [IRON_BLOCKLIKES, GOLD_BLOCKLIKES, /^chipped:.+_diamond_block$/, /^chipped:.+_emerald_block$/, /^chipped:.+_glowstone$/, /^chipped:.+_lapis_block$/, /^chipped:.+_redstone_block$/])
event.add("minecraft:piglin_loved", GOLD_BLOCKLIKES)
}
ServerEvents.tags("item", event => {
event.add("ae2:all_fluix", "gtceu:fluix_gem")
event.add("ae2:all_certus_quartz", "gtceu:charged_certus_quartz_gem")
event.add("forge:gems/certus_quartz", "gtceu:charged_certus_quartz_gem")
event.add("forge:singularities/ultimate", "kubejs:mote_of_omnium")
event.add("forge:singularities/ultimate", "extendedcrafting:ultimate_singularity")
event.add("forge:ingots/electrum_flux", "redstone_arsenal:flux_ingot")
event.add("forge:dusts/electrum_flux", "redstone_arsenal:flux_dust")
event.add("forge:nuggets/electrum_flux", "redstone_arsenal:flux_nugget")
event.add("forge:gears/electrum_flux", "redstone_arsenal:flux_gear")
event.add("forge:dusts/quartz", "gtceu:nether_quartz_dust")
// can't replace tags in recipes so we just add the tag to the item instead
event.add("forge:ingots/redstone_alloy", "gtceu:red_alloy_ingot")
event.add("forge:ingots/copper_alloy", "gtceu:electrical_steel_ingot")
event.add("forge:storage_blocks/coal_coke", "#forge:storage_blocks/coke")
event.add("forge:coal_coke", "#forge:gems/coke")
const decorremap = [["etrium", "diamond"], ["desh", "bronze"], ["ostrum", "lead"], ["calorite", "red_alloy"]]
decorremap.forEach(([mat, remat]) => {
event.add(`ad_astra:${mat}_plates`, `gtceu:${remat}_plate`)
event.add(`ad_astra:${mat}_ingots`, `gtceu:${remat}_ingot`)
event.add(`ad_astra:${mat}_blocks`, `gtceu:${remat}_block`)
})
event.remove("forge:gears/wood", "enderio:wood_gear")
event.remove("forge:gears/stone", "enderio:stone_gear")
event.remove("forge:gears/iron", "enderio:iron_gear")
event.remove("forge:gears/dark_steel", "enderio:dark_bimetal_gear")
// NOT pulsating iron ingot
event.add("forge:dusts/pulsating", "kubejs:pulsating_dust")
// Endgame tools
event.add("forge:tools/files", "kubejs:infinity_file")
event.add("forge:tools/hammers", "kubejs:infinity_hammer")
event.add("forge:tools/screwdrivers", "kubejs:infinity_screwdriver")
event.add("forge:tools/wrenches", "kubejs:infinity_wrench")
event.add("forge:tools/wire_cutters", "kubejs:infinity_wire_cutter")
// generic unification
event.add("forge:dusts", ["kubejs:pulsating_dust"])
// enderio!!!!
event.add("forge:heads", "enderio:enderman_head")
event.add("forge:microminers", /kubejs:microminer_t/)
event.add("forge:microminers", /kubejs:stabilized_microminer_t/)
// Sawdust
event.add("forge:sawdust", "#forge:dusts/wood")
// For stonecutting Marble
event.add("moni:marble", /^(gtceu:(marble|polished_marble|marble_bricks|cracked_marble_bricks|chiseled_marble|marble_tile|marble_small_tile|marble_windmill_a|marble_windmill_b|small_marble_bricks|square_marble_bricks))$/)
// We're making these Nuclearcraft storage blocks function solely as moderators, so they should not have the tags
event.remove("forge:storage_blocks", ["nuclearcraft:beryllium_block", "nuclearcraft:graphite_block"]);
event.remove("forge:storage_blocks/beryllium", "nuclearcraft:beryllium_block");
event.remove("forge:storage_blocks/graphite", "nuclearcraft:graphite_block");
// AE2 P2P Attunements
event.add("mae2:p2p_attunements/pattern_p2p_tunnel", "expatternprovider:pattern_modifier");
event.add("mae2:p2p_attunements/pattern_p2p_tunnel", "expatternprovider:ex_pattern_provider");
event.add("mae2:p2p_attunements/pattern_p2p_tunnel", "expatternprovider:ex_pattern_provider_part");
unifyChisel(event);
})
ServerEvents.tags("block", event => {
// snad
const compacted_sand = ["kubejs:compressed_sand", "kubejs:double_compressed_sand", "kubejs:compressed_red_sand", "kubejs:double_compressed_red_sand"];
event.add("minecraft:dead_bush_may_place_on", compacted_sand);
event.add("minecraft:bamboo_plantable_on", compacted_sand);
event.add("minecraft:azalea_grows_on", compacted_sand);
event.add("framedblocks:camo_sustain_plant", compacted_sand);
// We're making these Nuclearcraft storage blocks function solely as moderators, so they should not have the tags
event.remove("forge:storage_blocks", ["nuclearcraft:beryllium_block", "nuclearcraft:graphite_block"]);
event.remove("forge:storage_blocks/beryllium", "nuclearcraft:beryllium_block");
event.remove("forge:storage_blocks/graphite", "nuclearcraft:graphite_block");
unifyChisel(event);
})