321 lines
9.0 KiB
JavaScript
321 lines
9.0 KiB
JavaScript
//priority: 100
|
|
console.info("[SOCIETY] fishPond.js loaded");
|
|
|
|
const getRequestedItems = (type, population) => {
|
|
let requestedItems = {};
|
|
global.fishPondDefinitions.get(`${type}`).quests.forEach((quest) => {
|
|
if (quest.population == population) {
|
|
requestedItems = quest.requestedItems;
|
|
}
|
|
});
|
|
return requestedItems;
|
|
};
|
|
|
|
global.handleFishInsertion = (clickEvent) => {
|
|
const { item, block, player, level, server } = clickEvent;
|
|
const { facing, upgraded } = global.getPondProperties(block);
|
|
let nbt = block.getEntityData();
|
|
const { type, population, max_population, non_native_fish } = nbt.data;
|
|
if (type.equals("") && global.fishPondDefinitions.has(`${item.id}`)) {
|
|
successParticles(level, block);
|
|
block.set(block.id, {
|
|
facing: facing,
|
|
valid: true,
|
|
mature: false,
|
|
upgraded: upgraded,
|
|
quest: false,
|
|
});
|
|
nbt.merge({
|
|
data: {
|
|
type: item.id,
|
|
quest_id: 0,
|
|
population: 1,
|
|
max_population: 3,
|
|
non_native_fish: 1,
|
|
},
|
|
});
|
|
global.setBlockEntityData(block, nbt)
|
|
if (!player.isCreative()) item.count--;
|
|
} else if (type == item && population < max_population) {
|
|
server.runCommandSilent(
|
|
`playsound minecraft:entity.player.splash block @a ${block.x} ${block.y} ${block.z}`
|
|
);
|
|
level.spawnParticles(
|
|
"minecraft:splash",
|
|
true,
|
|
block.x + 0.5,
|
|
block.y + 0.9,
|
|
block.z + 0.5,
|
|
0.1 * rnd(1, 4),
|
|
0.1 * rnd(1, 4),
|
|
0.1 * rnd(1, 4),
|
|
10,
|
|
0.1
|
|
);
|
|
nbt.merge({
|
|
data: {
|
|
population: increaseStage(population),
|
|
non_native_fish: increaseStage(non_native_fish),
|
|
},
|
|
});
|
|
global.setBlockEntityData(block, nbt)
|
|
if (!player.isCreative()) item.count--;
|
|
}
|
|
};
|
|
|
|
global.handleQuestSubmission = (type, clickEvent) => {
|
|
const { item, block, player, level } = clickEvent;
|
|
const { facing, valid, mature, upgraded } = global.getPondProperties(block);
|
|
let nbt = block.getEntityData();
|
|
const { max_population, quest_id } = nbt.data;
|
|
const questContent = getRequestedItems(type, Number(max_population))[
|
|
quest_id
|
|
];
|
|
if (item && questContent && item == questContent.item) {
|
|
let checkedCount = player.stages.has("pond_house_five")
|
|
? Math.round(questContent.count / 2)
|
|
: questContent.count;
|
|
if (item.count >= checkedCount) {
|
|
successParticles(level, block);
|
|
block.set(block.id, {
|
|
facing: facing,
|
|
valid: valid,
|
|
mature: mature,
|
|
upgraded: upgraded,
|
|
quest: false,
|
|
});
|
|
nbt.merge({
|
|
data: {
|
|
quest_id: 0,
|
|
max_population: increaseStage(
|
|
max_population,
|
|
Number(max_population) === 7 ? 3 : 2
|
|
),
|
|
},
|
|
});
|
|
|
|
global.setBlockEntityData(block, nbt)
|
|
if (
|
|
player.stages.has("fishing_mastery") &&
|
|
!player.stages.has("pond_house_five") &&
|
|
Math.random() <= 0.01
|
|
) {
|
|
block.popItemFromFace("society:pond_house_five", facing);
|
|
}
|
|
clickEvent.server.scheduleInTicks(2, () => {
|
|
player.tell(
|
|
Text.translatable(
|
|
"block.society.fish_pond.fish_quest.complete"
|
|
).green()
|
|
);
|
|
});
|
|
if (!player.isCreative()) item.count = item.count - checkedCount;
|
|
} else {
|
|
clickEvent.server.scheduleInTicks(2, () => {
|
|
player.tell(
|
|
Text.translatable(
|
|
"block.society.fish_pond.fish_quest.partial",
|
|
`${checkedCount - item.count}`
|
|
).red()
|
|
);
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
global.handleFishPondRightClick = (clickEvent) => {
|
|
const { item, block, hand, player, server, level } = clickEvent;
|
|
const { facing, valid, mature, upgraded, quest } =
|
|
global.getPondProperties(block);
|
|
// Prevent Deployers from using artisan machines
|
|
if (player.isFake()) return;
|
|
if (hand == "OFF_HAND") return;
|
|
if (hand == "MAIN_HAND") {
|
|
let nbt = block.getEntityData();
|
|
const { type, population, quest_id } = nbt.data;
|
|
if (upgraded === false && item === "society:sea_biscut") {
|
|
if (!player.isCreative()) item.count--;
|
|
level.spawnParticles(
|
|
"farmersdelight:star",
|
|
true,
|
|
block.x,
|
|
block.y + 1,
|
|
block.z,
|
|
0.2 * rnd(1, 2),
|
|
0.2 * rnd(1, 2),
|
|
0.2 * rnd(1, 2),
|
|
3,
|
|
0.01
|
|
);
|
|
block.set(block.id, {
|
|
facing: facing,
|
|
valid: valid,
|
|
mature: false,
|
|
upgraded: true,
|
|
quest: quest,
|
|
});
|
|
}
|
|
if (!player.isCrouching()) {
|
|
if (item && quest === "true" && global.fishPondDefinitions.get(`${type}`)) {
|
|
global.handleQuestSubmission(type, clickEvent);
|
|
}
|
|
global.handleFishInsertion(clickEvent);
|
|
if (mature === "true") {
|
|
global.handleFishHarvest(block, player, server, false, player.stages);
|
|
}
|
|
if (!type.equals("") && population == "0") {
|
|
if (item && item.hasTag("forge:tools/fishing_rods")) {
|
|
block.set(block.id, {
|
|
facing: facing,
|
|
valid: valid,
|
|
mature: false,
|
|
upgraded: upgraded,
|
|
quest: false,
|
|
});
|
|
nbt.merge({
|
|
data: {
|
|
type: "",
|
|
quest_id: 0,
|
|
population: 0,
|
|
max_population: 3,
|
|
non_native_fish: 0,
|
|
},
|
|
});
|
|
} else {
|
|
player.tell(
|
|
Text.translatable("block.society.fish_pond.fishing_rod").red()
|
|
);
|
|
}
|
|
}
|
|
} else if (population > 0) {
|
|
let fishItem = global.handleFishExtraction(block, player, server, player.stages);
|
|
if (fishItem) player.give(fishItem);
|
|
}
|
|
}
|
|
};
|
|
|
|
StartupEvents.registry("block", (event) => {
|
|
event
|
|
.create("society:fish_pond", "cardinal")
|
|
.property(booleanProperty.create("valid"))
|
|
.property(booleanProperty.create("mature"))
|
|
.property(booleanProperty.create("upgraded"))
|
|
.property(booleanProperty.create("quest"))
|
|
.defaultCutout()
|
|
.tagBlock("minecraft:mineable/pickaxe")
|
|
.tagBlock("minecraft:mineable/axe")
|
|
.tagBlock("minecraft:needs_stone_tool")
|
|
.item((item) => {
|
|
item.modelJson({
|
|
parent: "society:block/kubejs/fish_pond",
|
|
});
|
|
item.fireResistant(true);
|
|
})
|
|
.defaultState((state) => {
|
|
state
|
|
.set(booleanProperty.create("valid"), true)
|
|
.set(booleanProperty.create("mature"), false)
|
|
.set(booleanProperty.create("upgraded"), false)
|
|
.set(booleanProperty.create("quest"), false);
|
|
})
|
|
.placementState((state) => {
|
|
state
|
|
.set(booleanProperty.create("valid"), true)
|
|
.set(booleanProperty.create("mature"), false)
|
|
.set(booleanProperty.create("upgraded"), false)
|
|
.set(booleanProperty.create("quest"), false);
|
|
})
|
|
.rightClick((click) => {
|
|
global.handleFishPondRightClick(click);
|
|
})
|
|
.blockEntity((blockInfo) => {
|
|
blockInfo.initialData({
|
|
type: "",
|
|
quest_id: 0,
|
|
population: 0,
|
|
max_population: 3,
|
|
non_native_fish: 0,
|
|
});
|
|
blockInfo.serverTick(fishPondTickRate, 0, (entity) => {
|
|
global.handleFishPondTick(entity);
|
|
});
|
|
}).blockstateJson = {
|
|
multipart: [
|
|
{ apply: { model: "society:block/kubejs/fish_pond_particle" } },
|
|
{
|
|
when: { facing: "north", upgraded: false },
|
|
apply: { model: "society:block/kubejs/fish_pond", y: 0, uvlock: false },
|
|
},
|
|
{
|
|
when: { facing: "east", upgraded: false },
|
|
apply: {
|
|
model: "society:block/kubejs/fish_pond",
|
|
y: 90,
|
|
uvlock: false,
|
|
},
|
|
},
|
|
{
|
|
when: { facing: "south", upgraded: false },
|
|
apply: {
|
|
model: "society:block/kubejs/fish_pond",
|
|
y: 180,
|
|
uvlock: false,
|
|
},
|
|
},
|
|
{
|
|
when: { facing: "west", upgraded: false },
|
|
apply: {
|
|
model: "society:block/kubejs/fish_pond",
|
|
y: -90,
|
|
uvlock: false,
|
|
},
|
|
},
|
|
{
|
|
when: { facing: "north", upgraded: true },
|
|
apply: {
|
|
model: "society:block/kubejs/fish_pond_upgraded",
|
|
y: 0,
|
|
uvlock: false,
|
|
},
|
|
},
|
|
{
|
|
when: { facing: "east", upgraded: true },
|
|
apply: {
|
|
model: "society:block/kubejs/fish_pond_upgraded",
|
|
y: 90,
|
|
uvlock: false,
|
|
},
|
|
},
|
|
{
|
|
when: { facing: "south", upgraded: true },
|
|
apply: {
|
|
model: "society:block/kubejs/fish_pond_upgraded",
|
|
y: 180,
|
|
uvlock: false,
|
|
},
|
|
},
|
|
{
|
|
when: { facing: "west", upgraded: true },
|
|
apply: {
|
|
model: "society:block/kubejs/fish_pond_upgraded",
|
|
y: -90,
|
|
uvlock: false,
|
|
},
|
|
},
|
|
{
|
|
when: { mature: true },
|
|
apply: { model: "society:block/kubejs/machine_done" },
|
|
},
|
|
{
|
|
when: { quest: true, mature: false },
|
|
apply: { model: "society:block/kubejs/pond_quest" },
|
|
},
|
|
|
|
{
|
|
when: { valid: false },
|
|
apply: { model: "society:block/kubejs/error" },
|
|
},
|
|
],
|
|
};
|
|
});
|