363 lines
8.3 KiB
JavaScript
363 lines
8.3 KiB
JavaScript
console.info("[SOCIETY] seasonFish.js loaded");
|
|
|
|
const checkSeasonNeptuna = (p, season, needsSkil) =>
|
|
global.getSeasonFromLevel(p.level) === season &&
|
|
p.stages.has("mystical_ocean") === needsSkil;
|
|
const convertToLootEntry = (entries, insertNeptuna) => {
|
|
let pool = [];
|
|
let weights = 0;
|
|
entries.forEach((entry) => {
|
|
const { fish, weight } = entry;
|
|
weights += weight;
|
|
pool.push(LootEntry.of(fish).withWeight(weight));
|
|
});
|
|
if (insertNeptuna)
|
|
pool.push(
|
|
LootEntry.of("society:neptuna").withWeight(Math.floor(weights * 0.09))
|
|
);
|
|
return pool;
|
|
};
|
|
|
|
const createPool = (entries, clear, rain, night) => {
|
|
let timeOfDayEntries;
|
|
if (night) {
|
|
timeOfDayEntries = entries.filter((fish) => fish.night === true);
|
|
} else {
|
|
timeOfDayEntries = entries.filter((fish) => fish.night === undefined);
|
|
}
|
|
let newPool = timeOfDayEntries.filter(
|
|
(fish) => !fish.requiresRain && !fish.requiresClear
|
|
);
|
|
if (clear) {
|
|
return newPool.concat(
|
|
timeOfDayEntries.filter((fish) => fish.requiresClear)
|
|
);
|
|
}
|
|
if (rain) {
|
|
return newPool.concat(timeOfDayEntries.filter((fish) => fish.requiresRain));
|
|
}
|
|
return newPool;
|
|
};
|
|
|
|
const createWeatherLootTable = (
|
|
e,
|
|
season,
|
|
weather,
|
|
oceanFish,
|
|
riverFish,
|
|
freshFish,
|
|
night,
|
|
mysticalOcean
|
|
) => {
|
|
if (!night) {
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.playerPredicate((p) => checkSeasonNeptuna(p, season, mysticalOcean))
|
|
.anyBiome("#minecraft:is_ocean", "#minecraft:is_beach")
|
|
.weatherCheck(weather)
|
|
.timeCheck(24000, 0, 12999)
|
|
.addWeightedLoot([1, 1], convertToLootEntry(oceanFish, mysticalOcean));
|
|
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.playerPredicate((p) => checkSeasonNeptuna(p, season, mysticalOcean))
|
|
.anyBiome("#minecraft:is_river")
|
|
.weatherCheck(weather)
|
|
.timeCheck(24000, 0, 12999)
|
|
.addWeightedLoot([1, 1], convertToLootEntry(riverFish, mysticalOcean));
|
|
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.playerPredicate((p) => checkSeasonNeptuna(p, season, mysticalOcean))
|
|
.not((n) => {
|
|
n.anyBiome(
|
|
"#minecraft:is_ocean",
|
|
"#minecraft:is_beach",
|
|
"#minecraft:is_river"
|
|
);
|
|
})
|
|
.weatherCheck(weather)
|
|
.timeCheck(24000, 0, 12999)
|
|
.addWeightedLoot([1, 1], convertToLootEntry(freshFish, mysticalOcean));
|
|
} else {
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.playerPredicate((p) => checkSeasonNeptuna(p, season, mysticalOcean))
|
|
.anyBiome("#minecraft:is_ocean", "#minecraft:is_beach")
|
|
.weatherCheck(weather)
|
|
.timeCheck(24000, 13000, 23999)
|
|
.addWeightedLoot([1, 1], convertToLootEntry(oceanFish, mysticalOcean));
|
|
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.playerPredicate((p) => checkSeasonNeptuna(p, season, mysticalOcean))
|
|
.anyBiome("#minecraft:is_river")
|
|
.weatherCheck(weather)
|
|
.timeCheck(24000, 13000, 23999)
|
|
.addWeightedLoot([1, 1], convertToLootEntry(riverFish, mysticalOcean));
|
|
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.playerPredicate((p) => checkSeasonNeptuna(p, season, mysticalOcean))
|
|
.not((n) => {
|
|
n.anyBiome(
|
|
"#minecraft:is_ocean",
|
|
"#minecraft:is_beach",
|
|
"#minecraft:is_river"
|
|
);
|
|
})
|
|
.weatherCheck(weather)
|
|
.timeCheck(24000, 13000, 23999)
|
|
.addWeightedLoot([1, 1], convertToLootEntry(freshFish, mysticalOcean));
|
|
}
|
|
};
|
|
|
|
const createSeasonLootTable = (
|
|
e,
|
|
season,
|
|
oceanFish,
|
|
riverFish,
|
|
freshFish,
|
|
night,
|
|
mysticalOcean
|
|
) => {
|
|
if (night) {
|
|
createWeatherLootTable(
|
|
e,
|
|
season,
|
|
{ raining: false, thundering: false },
|
|
createPool(oceanFish, true, false, true),
|
|
createPool(riverFish, true, false, true),
|
|
createPool(freshFish, true, false, true),
|
|
true,
|
|
mysticalOcean
|
|
);
|
|
createWeatherLootTable(
|
|
e,
|
|
season,
|
|
{ raining: true },
|
|
createPool(oceanFish, false, true, true),
|
|
createPool(riverFish, false, true, true),
|
|
createPool(freshFish, false, true, true),
|
|
true,
|
|
mysticalOcean
|
|
);
|
|
} else {
|
|
createWeatherLootTable(
|
|
e,
|
|
season,
|
|
{ raining: false, thundering: false },
|
|
createPool(oceanFish, true, false, false),
|
|
createPool(riverFish, true, false, false),
|
|
createPool(freshFish, true, false, false),
|
|
false,
|
|
mysticalOcean
|
|
);
|
|
createWeatherLootTable(
|
|
e,
|
|
season,
|
|
{ raining: true },
|
|
createPool(oceanFish, false, true, false),
|
|
createPool(riverFish, false, true, false),
|
|
createPool(freshFish, false, true, false),
|
|
false,
|
|
mysticalOcean
|
|
);
|
|
}
|
|
};
|
|
|
|
LootJS.modifiers((e) => {
|
|
[
|
|
"minecraft:cod",
|
|
"minecraft:salmon",
|
|
"minecraft:tropical_fish",
|
|
"minecraft:pufferfish",
|
|
].forEach((fish) => {
|
|
e.addLootTableModifier("minecraft:gameplay/fishing").removeLoot(fish);
|
|
});
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"spring",
|
|
global.springOcean,
|
|
global.springRiver,
|
|
global.springFresh,
|
|
false,
|
|
false
|
|
);
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"spring",
|
|
global.springOcean,
|
|
global.springRiver,
|
|
global.springFresh
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"spring",
|
|
global.springOcean,
|
|
global.springRiver,
|
|
global.springFresh,
|
|
true,
|
|
false
|
|
);
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"summer",
|
|
global.summerOcean,
|
|
global.summerRiver,
|
|
global.summerFresh,
|
|
false,
|
|
false
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"summer",
|
|
global.summerOcean,
|
|
global.summerRiver,
|
|
global.summerFresh,
|
|
true,
|
|
false
|
|
);
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"autumn",
|
|
global.autumnOcean,
|
|
global.autumnRiver,
|
|
global.autumnFresh,
|
|
false,
|
|
false
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"autumn",
|
|
global.autumnOcean,
|
|
global.autumnRiver,
|
|
global.autumnFresh,
|
|
true,
|
|
false
|
|
);
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"winter",
|
|
global.winterOcean,
|
|
global.winterRiver,
|
|
global.winterFresh,
|
|
false,
|
|
false
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"winter",
|
|
global.winterOcean,
|
|
global.winterRiver,
|
|
global.winterFresh,
|
|
true,
|
|
false
|
|
);
|
|
|
|
// Mystical Ocean
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"spring",
|
|
global.springOcean,
|
|
global.springRiver,
|
|
global.springFresh,
|
|
false,
|
|
true
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"spring",
|
|
global.springOcean,
|
|
global.springRiver,
|
|
global.springFresh,
|
|
true,
|
|
true
|
|
);
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"summer",
|
|
global.summerOcean,
|
|
global.summerRiver,
|
|
global.summerFresh,
|
|
false,
|
|
true
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"summer",
|
|
global.summerOcean,
|
|
global.summerRiver,
|
|
global.summerFresh,
|
|
true,
|
|
true
|
|
);
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"autumn",
|
|
global.autumnOcean,
|
|
global.autumnRiver,
|
|
global.autumnFresh,
|
|
false,
|
|
true
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"autumn",
|
|
global.autumnOcean,
|
|
global.autumnRiver,
|
|
global.autumnFresh,
|
|
true,
|
|
true
|
|
);
|
|
|
|
createSeasonLootTable(
|
|
e,
|
|
"winter",
|
|
global.winterOcean,
|
|
global.winterRiver,
|
|
global.winterFresh,
|
|
false,
|
|
true
|
|
);
|
|
createSeasonLootTable(
|
|
e,
|
|
"winter",
|
|
global.winterOcean,
|
|
global.winterRiver,
|
|
global.winterFresh,
|
|
true,
|
|
true
|
|
);
|
|
|
|
// + Fish skills
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.hasAnyStage("fly_fisher")
|
|
.modifyLoot(Ingredient.all, (itemStack) => {
|
|
if (!itemStack.hasTag("minecraft:fishes")) return itemStack;
|
|
if (itemStack.maxStackSize == 1) return itemStack;
|
|
itemStack.setCount(itemStack.getCount() + 1);
|
|
return itemStack;
|
|
})
|
|
.hasAnyStage("school_fisher")
|
|
.modifyLoot(Ingredient.all, (itemStack) => {
|
|
if (!itemStack.hasTag("minecraft:fishes")) return itemStack;
|
|
if (itemStack.maxStackSize == 1) return itemStack;
|
|
itemStack.setCount(itemStack.getCount() + 3);
|
|
return itemStack;
|
|
})
|
|
|
|
e.addLootTableModifier("minecraft:gameplay/fishing")
|
|
.playerPredicate((p) =>
|
|
global.hasBobber(p.getHeldItem("main_hand"), "society:needle_bobber")
|
|
)
|
|
.modifyLoot(Ingredient.all, (itemStack) => {
|
|
if (!itemStack.hasTag("minecraft:fishes")) return itemStack;
|
|
if (itemStack.maxStackSize == 1) return itemStack;
|
|
itemStack.setCount(itemStack.getCount() + 5);
|
|
return itemStack;
|
|
})
|
|
});
|