add first patch
This commit is contained in:
@@ -0,0 +1,362 @@
|
||||
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;
|
||||
})
|
||||
});
|
||||
Reference in New Issue
Block a user