Patched molten vents + switch to openloader + default keybinds + book fixes + include less jars + kubejs stuff + incontrol
This commit is contained in:
1099
pack/kubejs/server_scripts/cutter.js
Normal file
1099
pack/kubejs/server_scripts/cutter.js
Normal file
File diff suppressed because it is too large
Load Diff
168
pack/kubejs/server_scripts/hexcasting.js
Normal file
168
pack/kubejs/server_scripts/hexcasting.js
Normal file
@@ -0,0 +1,168 @@
|
||||
const chancePerScroll = 0.3
|
||||
const notFoundBonusRolls = 2
|
||||
const hexCastingScrollTables = {
|
||||
few: [
|
||||
"minecraft:chests/jungle_temple",
|
||||
"repurposed_structures:archaeology/monument_jungle",
|
||||
"minecraft:chests/simple_dungeon",
|
||||
"betterdungeons:zombie_dungeon/chests/special",
|
||||
"betterdungeons:skeleton_dungeon/chests/middle",
|
||||
"betterdungeons:small_dungeon/chests/loot_piles",
|
||||
// "betterdungeons:spider_dungeon/chests/egg_room",
|
||||
"nova_structures:archaelogy/desert_ruin_inside_temple",
|
||||
"nova_structures:chests/stray_fort_tresure",
|
||||
/^repurposed_structures:chests\/dungeons\//,
|
||||
"repurposed_structures:chests/bastions/underground/treasure"
|
||||
],
|
||||
some: [
|
||||
"minecraft:chests/bastion_treasure",
|
||||
"minecraft:chests/shipwreck_map",
|
||||
/^repurposed_structures:chests\/shipwrecks\/\w+\/map$/,
|
||||
"nova_structures:chests/desert_ruins/desert_ruin_main_temple",
|
||||
"nova_structures:chests/witch_villa/lab"
|
||||
],
|
||||
many: [
|
||||
"minecraft:chests/stronghold_library",
|
||||
"betterfortresses:chests/worship"
|
||||
]
|
||||
}
|
||||
|
||||
LootJS.modifiers(event => {
|
||||
event
|
||||
.addLootTableModifier(hexCastingScrollTables.few)
|
||||
.apply(catchWrap(rollScrolls(1)))
|
||||
|
||||
event
|
||||
.addLootTableModifier(hexCastingScrollTables.some)
|
||||
.apply(catchWrap(rollScrolls(2)))
|
||||
|
||||
event
|
||||
.addLootTableModifier(hexCastingScrollTables.many)
|
||||
.apply(catchWrap(rollScrolls(3)))
|
||||
})
|
||||
|
||||
function catchWrap(method) {
|
||||
return function(a) {
|
||||
try {
|
||||
return method.call(this, a)
|
||||
} catch(err) {
|
||||
console.error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// const PatternRegistry = Java.loadClass('at.petrak.hexcasting.api.PatternRegistry')
|
||||
const IXplatAbstractions = Java.loadClass('at.petrak.hexcasting.xplat.IXplatAbstractions')
|
||||
const HexUtils = Java.loadClass('at.petrak.hexcasting.api.utils.HexUtils')
|
||||
const HexTags = Java.loadClass('at.petrak.hexcasting.api.mod.HexTags')
|
||||
const PatternRegistryManifest = Java.loadClass('at.petrak.hexcasting.common.casting.PatternRegistryManifest')
|
||||
// const HexPattern = Java.loadClass('at.petrak.hexcasting.api.spell.math.HexPattern')
|
||||
const CompoundTag = Java.loadClass('net.minecraft.nbt.CompoundTag')
|
||||
|
||||
ServerEvents.highPriorityData(datapack => {
|
||||
// let perworldPatterns = PatternRegistry.getAllPerWorldPatternNames().toArray()
|
||||
let patternKeys = getPerWorldPatternKeys()
|
||||
|
||||
for(let key of patternKeys) {
|
||||
let resourcePath = `kubejs:advancements/${getAdvancementPath(key)}`
|
||||
|
||||
datapack.addJson(
|
||||
resourcePath,
|
||||
createScrollAdvancement(key)
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
const getAdvancementPath = patternKey => {
|
||||
let rl = patternKey.location()
|
||||
return `scrolls/${rl.getNamespace()}/${rl.getPath()}`
|
||||
}
|
||||
|
||||
const createScrollAdvancement = patternKey => ({
|
||||
"criteria": {
|
||||
"requirement": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"hexcasting:scroll"
|
||||
],
|
||||
"nbt": JSON.stringify({
|
||||
op_id: patternKey.toString()
|
||||
})
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// https://github.com/FallingColors/HexMod/issues/629
|
||||
const rollScrolls = count => lootContext => {
|
||||
console.log('Loading scrolls')
|
||||
|
||||
// Remove the scrolls already added by hexcasting
|
||||
lootContext.removeLoot(Ingredient.of("hexcasting:scroll"))
|
||||
|
||||
if(lootContext.getPlayer() == null) {
|
||||
console.error('Cannot generate scrolls without a player')
|
||||
return
|
||||
}
|
||||
|
||||
// let worldLookup = PatternRegistry.getPerWorldPatterns(lootContext.getLevel())
|
||||
let table = createWeightedPatternTable(lootContext, getPerWorldPatternKeys(), notFoundBonusRolls)
|
||||
let random = lootContext.getRandom()
|
||||
|
||||
for(let i = 0; i < count; i++) {
|
||||
let patternKey = table[random.nextInt(table.length)]
|
||||
let pattern = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, lootContext.getServer().getOverworld())
|
||||
let entry = LootEntry.of('hexcasting:scroll', createScrollTag(patternKey, pattern))
|
||||
.when(c => c.randomChance(chancePerScroll))
|
||||
|
||||
lootContext.addLoot(entry)
|
||||
}
|
||||
}
|
||||
|
||||
const createWeightedPatternTable = (lootContext, patternKeys, notFoundBonus) => {
|
||||
let player = lootContext.getPlayer()
|
||||
// https://github.com/FallingColors/HexMod/blob/6286da360820cf542b38b862cfc1011145e2f78b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java#L43
|
||||
let table = []
|
||||
|
||||
for(let patternKey of patternKeys) {
|
||||
let advancementId = new ResourceLocation('kubejs', getAdvancementPath(patternKey))
|
||||
let advancement = player.server.getAdvancement(advancementId).advancement
|
||||
let hasFound = player.advancements.getOrStartProgress(advancement).done
|
||||
|
||||
if(!hasFound) {
|
||||
for(let i = 0; i < notFoundBonus; i++) {
|
||||
table.push(patternKey)
|
||||
}
|
||||
}
|
||||
|
||||
table.push(patternKey)
|
||||
}
|
||||
|
||||
return table
|
||||
}
|
||||
|
||||
const resourceKeyIsOfTag = 'isOfTag(net.minecraft.core.Registry,net.minecraft.resources.ResourceKey,net.minecraft.tags.TagKey)'
|
||||
const getPerWorldPatternKeys = () => {
|
||||
let actionRegistry = IXplatAbstractions.INSTANCE.getActionRegistry()
|
||||
|
||||
return actionRegistry.registryKeySet()
|
||||
.toArray()
|
||||
.filter(key => {
|
||||
return HexUtils[resourceKeyIsOfTag](actionRegistry, key, HexTags.Actions.PER_WORLD_PATTERN)
|
||||
})
|
||||
}
|
||||
|
||||
// https://github.com/FallingColors/HexMod/blob/6286da360820cf542b38b862cfc1011145e2f78b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java#L50
|
||||
const createScrollTag = (patternKey, pattern) => {
|
||||
let tag = new CompoundTag()
|
||||
|
||||
tag.putString('op_id', patternKey.location().toString())
|
||||
tag.put('pattern', pattern.serializeToNBT())
|
||||
|
||||
return tag
|
||||
}
|
||||
40
pack/kubejs/server_scripts/loot.js
Normal file
40
pack/kubejs/server_scripts/loot.js
Normal file
@@ -0,0 +1,40 @@
|
||||
const ruinChest = [
|
||||
'repurposed_structures:chests/villages/ocean_house',
|
||||
'endercon:end_ruin_barrel',
|
||||
'minecraft:archaelogy/jungle_ruins',
|
||||
/grave$/,
|
||||
/^repurposed_structures:chests\/ruins\/land/,
|
||||
'repurposed_structures:chests/bastions/underground/treasure',
|
||||
'minecraft:chests/illager_mansion/secret_room',
|
||||
'tetra:regular_ruin',
|
||||
'nova_structures:chests/mangrove_witchhud',
|
||||
'alexscaves:chests/witch_hut',
|
||||
'nova_structures:chests/ruin_loot_master'
|
||||
]
|
||||
|
||||
LootJS.modifiers(event => {
|
||||
event
|
||||
.addLootTableModifier(ruinChest)
|
||||
.randomChance(0.15)
|
||||
.addLoot('exposure:camera')
|
||||
|
||||
event
|
||||
.addLootTableModifier(ruinChest)
|
||||
.randomChance(0.1)
|
||||
.addLoot('playercollars:collar')
|
||||
|
||||
event
|
||||
.addLootTableModifier(ruinChest)
|
||||
.randomChance(0.07)
|
||||
.addLoot('simpleradio:transceiver')
|
||||
|
||||
event
|
||||
.addLootTableModifier(ruinChest)
|
||||
.randomChance(0.05)
|
||||
.addLoot('estrogen:estrogen_chip_cookie')
|
||||
})
|
||||
|
||||
ServerEvents.recipes(event => {
|
||||
event.remove("playercollars:collar")
|
||||
event.remove("exposure:camera")
|
||||
})
|
||||
161
pack/kubejs/server_scripts/obliterate.js
Normal file
161
pack/kubejs/server_scripts/obliterate.js
Normal file
@@ -0,0 +1,161 @@
|
||||
function onlyFromIngredient(ingredient, regex) {
|
||||
return ingredient.itemIds.filter(a => !regex.test(a))
|
||||
}
|
||||
|
||||
const obliterateItems = [
|
||||
'bits_n_bobs:nixie_board',
|
||||
'bits_n_bobs:large_nixie_tube',
|
||||
"kitchenkarrot:ice_cubes",
|
||||
"kitchenkarrot:acorn",
|
||||
"kitchenkarrot:sweet_roll",
|
||||
"kitchenkarrot:pillager_pie",
|
||||
// /refinedstorage:\\d+k_(fluid_)?storage_(part|disk)"/,
|
||||
// "refinedstorage:storage_housing",
|
||||
// "refinedstorage:creative_fluid_storage_disk",
|
||||
'createdieselgenerators:sheet_metal_panel',
|
||||
// /create:[\\w_]*_calcite_[\\w_]*/,
|
||||
// "!(another_furniture:|everycomp:af)[\\w_/]*_(shelf|sofa|tall_stool|lamp|bench)",
|
||||
// /(another_furniture:|everycomp:af)[\\w_/]*_(?!curtain|stool|table|service_bell)/,
|
||||
|
||||
// /copycats:[\w_]*$(?<!byte|byte_panel|door|trapdoor|copycat_block|slab|copycat_stairs)/,
|
||||
|
||||
// /effortlessbuilding:/,
|
||||
// /(dramaticdoors:|everycomp:dd\/)short_[\w_]*/,
|
||||
|
||||
// /additionaladditions:[\w_]*$(?<!amethyst_lamp|patina|patina_block|rose_gold_alloy|rose_gold_helmet|rose_gold_chestplate|rose_gold_leggings|rose_gold_boots|rose_gold_upgrade|jukebox|bundle|can|disc_\d+)/,
|
||||
|
||||
|
||||
// /^supplementaries:candle_holder/,
|
||||
// "supplementaries:item_shelf",
|
||||
"createrailwaysnavigator:navigator",
|
||||
'vs_clockwork:clock',
|
||||
/^bits_n_bobs:[\w_]*girder_strut/,
|
||||
"@citadel",
|
||||
|
||||
'supplementaries:botania/sign_post_livingwood',
|
||||
'supplementaries:botania/sign_post_dreamwood',
|
||||
/^additionaladditions:rose_gold_(sword|axe|pickaxe|shovel|hoe)/,
|
||||
'@moreburners', // This is in the pack just for the exoflame interaction
|
||||
'redstonepen:basic_lever',
|
||||
'redstonepen:basic_button',
|
||||
'etched:radio',
|
||||
'etched:boombox',
|
||||
'minecraft:stonecutter', // Sawmill has all the recipes
|
||||
'playercollars:clicker',
|
||||
|
||||
/^yttr:(.*?)_pinch_glom$/ // messes with create balancing
|
||||
|
||||
// 'yttr:shifter' // I love this item but it isn't compatible with inventorio :(
|
||||
// Also you can use the rod of shifting crusts which is worse but
|
||||
]
|
||||
// .concat(
|
||||
// onlyFromIngredient(Ingredient.of('@copycats'), /(byte|byte_panel|door|trapdoor|copycat_block|slab|copycat_stairs|vertical_half_layer|stacked_half_layer|slope)$/)
|
||||
// )
|
||||
// .concat(
|
||||
// // onlyFromIngredient(Ingredient.of('@additionaladditions'), /(amethyst_lamp|patina|patina_block|rose_gold_alloy|rose_gold_helmet|rose_gold_chestplate|rose_gold_leggings|rose_gold_boots|rose_gold_upgrade|jukebox|bundle|can|disc_\d+)$/)
|
||||
// onlyFromIngredient(Ingredient.of('@additionaladditions'), /(amethyst_lamp|patina|patina_block|rose_gold_alloy|rose_gold_helmet|rose_gold_chestplate|rose_gold_leggings|rose_gold_boots|rose_gold_upgrade|jukebox|bundle|can|disc_\d+)$/)
|
||||
// )
|
||||
// .concat(
|
||||
// Ingredient.of('#bits_n_bobs:chairs').itemIds
|
||||
// )
|
||||
|
||||
const swapItems = [
|
||||
[ "crossroads:nugget_copper", "create:copper_nugget", '#forge:nuggets/copper' ]
|
||||
]
|
||||
|
||||
console.log(onlyFromIngredient(Ingredient.of('@additionaladditions'), /(amethyst_lamp|patina|patina_block|rose_gold_alloy|rose_gold_helmet|rose_gold_chestplate|rose_gold_leggings|rose_gold_boots|rose_gold_upgrade|jukebox|bundle|can|disc_\d+)$/))
|
||||
|
||||
// Check if itemID exists within obliterateItems
|
||||
function ObliterateCheck(itemID) {
|
||||
let check = false
|
||||
for (let i = 0; i < obliterateItems.length; i++) {
|
||||
let id = obliterateItems[i]
|
||||
let reg = new RegExp(id)
|
||||
if (typeof id == "string") { reg = new RegExp(`^${id}$`) }
|
||||
if (reg.test(itemID)) {
|
||||
check = true
|
||||
break
|
||||
}
|
||||
}
|
||||
return check
|
||||
}
|
||||
|
||||
// Remove recipes
|
||||
ServerEvents.recipes(event => {
|
||||
event.remove({ input: obliterateItems })
|
||||
event.remove({ output: obliterateItems })
|
||||
for(let [ target, item, ingredient ] of swapItems) {
|
||||
event.replaceInput({ input: obliterateItems }, target, ingredient ?? item)
|
||||
event.replaceOutput({ output: obliterateItems }, target, item)
|
||||
}
|
||||
})
|
||||
|
||||
// Remove tags
|
||||
ServerEvents.tags('item', event => {
|
||||
event.removeAllTagsFrom(obliterateItems)
|
||||
event.add('c:hidden_from_recipe_viewers', obliterateItems)
|
||||
event.add('c:hidden_from_recipe_viewers', swapItems.map(a => a[0]))
|
||||
|
||||
event.remove('yttr:not_indexable', 'minecraft:bundle')
|
||||
})
|
||||
|
||||
// // Append disabled tooltip
|
||||
// ItemEvents.modifyTooltips(event => {
|
||||
// event.add(obliterateItems, Text.red('Disabled'))
|
||||
// })
|
||||
|
||||
// Remove from recipe viewer
|
||||
// RecipeViewerEvents.removeEntriesCompletely('item', event => {
|
||||
// event.remove(obliterateItems)
|
||||
// })
|
||||
|
||||
// Remove from loot pools
|
||||
// LootJS.lootTables(event => {
|
||||
// event.modifyLootTables(/.*/).removeItem(obliterateItems)
|
||||
// })
|
||||
LootJS.modifiers(event => {
|
||||
// event.removeLoot(event.modifyLootTables(/.*/).removeItem(obliterateItems))
|
||||
event.addLootTypeModifier(LootType.ENTITY).removeLoot(obliterateItems)
|
||||
event.addLootTypeModifier(LootType.BLOCK).removeLoot(obliterateItems)
|
||||
event.addLootTypeModifier(LootType.CHEST).removeLoot(obliterateItems)
|
||||
// event.addLootTypeModifier(LootType.CHEST).removeLoot(obliterateItems.concat([
|
||||
// 'additionaladditions:rose_gold_upgrade'
|
||||
// ]))
|
||||
event.addLootTypeModifier(LootType.FISHING).removeLoot(obliterateItems)
|
||||
event.addLootTypeModifier(LootType.GIFT).removeLoot(obliterateItems)
|
||||
})
|
||||
|
||||
// Destroy on interaction
|
||||
BlockEvents.rightClicked(event => {
|
||||
let { block } = event
|
||||
if (ObliterateCheck(block.id)) { block.set('minecraft:air') }
|
||||
})
|
||||
|
||||
// Destroy on block placement
|
||||
BlockEvents.placed(event => {
|
||||
let { block } = event
|
||||
if (ObliterateCheck(block.id)) {
|
||||
block.set('minecraft:air')
|
||||
}
|
||||
})
|
||||
|
||||
// Destroy on pickup
|
||||
ItemEvents.canPickUp(event => {
|
||||
let { item, itemEntity } = event
|
||||
if(itemEntity.hasPickUpDelay()) return
|
||||
if (ObliterateCheck(item.id)) { item.setCount(0) }
|
||||
})
|
||||
|
||||
// Destroy on drop
|
||||
ItemEvents.dropped(event => {
|
||||
let { item } = event
|
||||
if (ObliterateCheck(item.id)) { item.setCount(0) }
|
||||
})
|
||||
|
||||
// Destroy on inventory changed
|
||||
PlayerEvents.inventoryChanged(event => {
|
||||
let { item, player } = event
|
||||
if (ObliterateCheck(item.id)) {
|
||||
player.inventory.clear(item);
|
||||
}
|
||||
})
|
||||
56
pack/kubejs/server_scripts/recipes.js
Normal file
56
pack/kubejs/server_scripts/recipes.js
Normal file
@@ -0,0 +1,56 @@
|
||||
ServerEvents.tags('item', event => {
|
||||
event.add('create:crushed_raw_materials', 'create:crushed_raw_gadolinite', 'create:crushed_raw_brookite')
|
||||
})
|
||||
|
||||
ServerEvents.recipes(event => {
|
||||
event.replaceInput(
|
||||
{ id: 'powergrid:crafting/electromagnet' },
|
||||
'create:iron_sheet',
|
||||
'#yttr:substituted_neodymium'
|
||||
)
|
||||
|
||||
event.replaceInput(
|
||||
{ id: 'quark:oddities/crafting/magnet' },
|
||||
'minecraft:chorus_fruit',
|
||||
'#yttr:substituted_neodymium'
|
||||
)
|
||||
|
||||
for(let p of [
|
||||
'chestplate',
|
||||
'boots',
|
||||
'leggings',
|
||||
'helmet'
|
||||
]) {
|
||||
event.replaceOutput(
|
||||
{ id: 'tetra:chainmail_' + p },
|
||||
'minecraft:chainmail_' + p,
|
||||
Item.of('minecraft:chainmail_' + p).enchant('minecraft:projectile_protection', 5)
|
||||
)
|
||||
}
|
||||
|
||||
event.replaceInput(
|
||||
{ id: 'quark:oddities/crafting/backpack' },
|
||||
'quark:ravager_hide',
|
||||
[
|
||||
'create:brass_ingot',
|
||||
'botania:manasteel_ingot',
|
||||
'minecraft:shulker_shell',
|
||||
'alexscaves:scarlet_neodymium_ingot'
|
||||
]
|
||||
)
|
||||
|
||||
event.shapeless('powergrid:magnet', [
|
||||
'alexscaves:scarlet_neodymium_ingot',
|
||||
'alexscaves:azure_neodymium_ingot'
|
||||
])
|
||||
|
||||
event.remove({ id: 'create:crafting/appliances/chain_from_zinc' })
|
||||
event.remove({ id: 'minecraft:bundle' })
|
||||
})
|
||||
|
||||
ServerEvents.tags('item', tags => {
|
||||
tags.add('yttr:substituted_neodymium', [
|
||||
'alexscaves:scarlet_neodymium_ingot',
|
||||
'alexscaves:azure_neodymium_ingot'
|
||||
])
|
||||
})
|
||||
27
pack/kubejs/server_scripts/tome.js
Normal file
27
pack/kubejs/server_scripts/tome.js
Normal file
@@ -0,0 +1,27 @@
|
||||
const tome = Item.of('akashictome:tome', '{"akashictome:data":{alexscaves:{Count:1b,id:"alexscaves:cave_book"},botania:{Count:1b,id:"botania:lexicon"},hexcasting:{Count:1b,id:"patchouli:guide_book",tag:{"patchouli:book":"hexcasting:thehexbook"}},patchouli:{Count:1b,id:"patchouli:guide_book",tag:{"patchouli:book":"patchouli:pwb_guide"}}}}')
|
||||
|
||||
ServerEvents.recipes(recipes => {
|
||||
recipes.shapeless(
|
||||
tome,
|
||||
[ 'minecraft:stick' ]
|
||||
)
|
||||
})
|
||||
|
||||
const givenTomeAdvancement = "pwb:guide"
|
||||
|
||||
LootJS.modifiers(event => {
|
||||
event
|
||||
.addLootTypeModifier(LootType.CHEST)
|
||||
.playerPredicate(player => {
|
||||
let advancement = player.server.getAdvancement(givenTomeAdvancement).advancement
|
||||
let hasNotFound = !player.advancements.getOrStartProgress(advancement).done
|
||||
|
||||
if(hasNotFound) {
|
||||
player.unlockAdvancement(givenTomeAdvancement)
|
||||
}
|
||||
|
||||
return hasNotFound
|
||||
})
|
||||
.addLoot(tome)
|
||||
.addLoot('origins:orb_of_origin')
|
||||
})
|
||||
73
pack/kubejs/server_scripts/tools.js
Normal file
73
pack/kubejs/server_scripts/tools.js
Normal file
@@ -0,0 +1,73 @@
|
||||
const spearStone = Item.of('tetra:modular_single', '{Damage:0,HideFlags:1,honing_progress:180,id:"107ec64a-bdd1-44cb-9219-082dc36dcbce","single/basic_handle_material":"basic_handle/stick","single/handle":"single/basic_handle","single/head":"single/spearhead","single/spearhead_material":"spearhead/stone"}')
|
||||
const spearIron = Item.of('tetra:modular_single', '{Damage:0,HideFlags:1,honing_progress:240,id:"c3c786e4-603f-471b-b4eb-aa2ce52b0fee","single/basic_handle_material":"basic_handle/stick","single/handle":"single/basic_handle","single/head":"single/spearhead","single/spearhead_material":"spearhead/iron"}')
|
||||
|
||||
ServerEvents.recipes(recipes => {
|
||||
recipes.shaped(
|
||||
Item.of('tetra:modular_single', '{id:"56ff2749-3830-449b-91fd-fa7cb972bf9a","single/basic_handle_material":"basic_handle/stick","single/handle":"single/basic_handle","single/head":"single/spearhead","single/spearhead_material":"spearhead/oak"}'),
|
||||
[
|
||||
' B',
|
||||
' A ',
|
||||
'A '
|
||||
],
|
||||
{
|
||||
A: '#forge:rods/wooden',
|
||||
B: '#minecraft:planks',
|
||||
}
|
||||
)
|
||||
recipes.shaped(
|
||||
spearStone,
|
||||
[
|
||||
' B',
|
||||
' A ',
|
||||
'A '
|
||||
],
|
||||
{
|
||||
A: '#forge:rods/wooden',
|
||||
B: '#forge:stone',
|
||||
}
|
||||
)
|
||||
recipes.shaped(
|
||||
spearIron,
|
||||
[
|
||||
' B',
|
||||
' A ',
|
||||
'A '
|
||||
],
|
||||
{
|
||||
A: '#forge:rods/wooden',
|
||||
B: '#forge:ingots/iron',
|
||||
}
|
||||
)
|
||||
recipes.shaped(
|
||||
Item.of('tetra:modular_single', '{Damage:0,HideFlags:1,honing_progress:240,id:"0562ce6e-ac0e-4882-826e-65d8662eaa2a","single/basic_handle_material":"basic_handle/stick","single/handle":"single/basic_handle","single/head":"single/spearhead","single/head:arrested":0,"single/spearhead_material":"spearhead/diamond"}'),
|
||||
[
|
||||
' B',
|
||||
' A ',
|
||||
'A '
|
||||
],
|
||||
{
|
||||
A: '#forge:rods/wooden',
|
||||
B: '#c:diamonds',
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
LootJS.modifiers(event => {
|
||||
const chests = [
|
||||
'betterdungeons:skeleton_dungeon/chests/middle',
|
||||
'betterfortresses:chests/hall',
|
||||
'betterdungeons:zombie_dungeon/chests/common',
|
||||
'betterdungeons:zombie_dungeon/chests/special'
|
||||
]
|
||||
|
||||
event
|
||||
.addLootTableModifier(chests)
|
||||
.randomChance(0.2)
|
||||
.addLoot(spearStone)
|
||||
|
||||
|
||||
event
|
||||
.addLootTableModifier(chests)
|
||||
.randomChance(0.2)
|
||||
.addLoot(spearIron)
|
||||
})
|
||||
11
pack/kubejs/startup_scripts/items.js
Normal file
11
pack/kubejs/startup_scripts/items.js
Normal file
@@ -0,0 +1,11 @@
|
||||
StartupEvents.registry('item', event => {
|
||||
event.create('create:crushed_raw_gadolinite')
|
||||
// event.create('create:crushed_raw_brookite')
|
||||
// .texture('yttr:item/') // This texture would be located at kubejs/assets/mobbo/textures/item/lava.png
|
||||
|
||||
// // You can chain builder methods as much as you like
|
||||
// event.create('test_item_2').maxStackSize(16).glow(true)
|
||||
|
||||
// // You can specify item type as 2nd argument in create(), some types have different available methods
|
||||
// event.create('custom_sword', 'sword').tier('diamond').attackDamageBaseline(10)
|
||||
})
|
||||
Reference in New Issue
Block a user