add first patch
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
console.info("[SOCIETY] feedingTrough.js loaded");
|
||||
|
||||
const feedFunction = (
|
||||
level,
|
||||
animal,
|
||||
day,
|
||||
inventory,
|
||||
hasAnimalFeed,
|
||||
hasCandiedFeed,
|
||||
hasManaFeed
|
||||
) => {
|
||||
let data = animal.persistentData;
|
||||
if (!data.getInt("ageLastFed") || day < data.getInt("ageLastFed")) {
|
||||
data.ageLastFed = day;
|
||||
}
|
||||
if (day > data.ageLastFed) {
|
||||
let fed = false;
|
||||
let boost = 0;
|
||||
// prefer candied > mana > normal
|
||||
if (
|
||||
hasCandiedFeed &&
|
||||
global.useInventoryItems(inventory, "society:candied_animal_feed", 1) == 1
|
||||
) {
|
||||
fed = true;
|
||||
boost = 100;
|
||||
} else if (hasManaFeed && global.useInventoryItems(inventory, "society:mana_feed", 1) == 1) {
|
||||
fed = true;
|
||||
boost = 30;
|
||||
} else if (
|
||||
hasAnimalFeed &&
|
||||
global.useInventoryItems(inventory, "society:animal_feed", 1) == 1
|
||||
) {
|
||||
fed = true;
|
||||
}
|
||||
|
||||
if (fed) {
|
||||
animal.heal(4);
|
||||
data.ageLastFed = day;
|
||||
if (boost > 0) data.affection = data.getInt("affection") + boost;
|
||||
level.spawnParticles(
|
||||
"legendarycreatures:wisp_particle",
|
||||
true,
|
||||
animal.x,
|
||||
animal.y + 1.5,
|
||||
animal.z,
|
||||
0.1 * rnd(1, 4),
|
||||
0.1 * rnd(1, 4),
|
||||
0.1 * rnd(1, 4),
|
||||
5,
|
||||
0.01
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
global.runFeedingTrough = (be, inventory, block, level) => {
|
||||
let radius = 6;
|
||||
let hasAnimalFeed = global.inventoryHasItems(inventory, "society:animal_feed", 1) == 1;
|
||||
let hasCandiedFeed = global.inventoryHasItems(inventory, "society:candied_animal_feed", 1) == 1;
|
||||
let hasManaFeed = global.inventoryHasItems(inventory, "society:mana_feed", 1) == 1;
|
||||
if (!(hasAnimalFeed || hasCandiedFeed || hasManaFeed)) return;
|
||||
let slots = inventory.getSlots();
|
||||
let feedCount = 0;
|
||||
|
||||
let nearbyFarmAnimals;
|
||||
let day = global.getDay(level);
|
||||
nearbyFarmAnimals = level
|
||||
.getEntitiesWithin(AABB.ofBlock(block).inflate(radius))
|
||||
.filter((entity) => global.checkEntityTag(entity, "society:husbandry_animal"));
|
||||
|
||||
nearbyFarmAnimals.forEach((animal) => {
|
||||
feedFunction(level, animal, day, inventory, hasAnimalFeed, hasCandiedFeed, hasManaFeed);
|
||||
});
|
||||
// Handle visual
|
||||
for (let i = 0; i < slots; i++) {
|
||||
if (inventory.getStackInSlot(i).hasTag("society:animal_feed"))
|
||||
feedCount += inventory.getStackInSlot(i).count;
|
||||
}
|
||||
let fill = 0;
|
||||
if (feedCount >= 512) fill = 4;
|
||||
else if (feedCount >= 256) fill = 3;
|
||||
else if (feedCount >= 128) fill = 2;
|
||||
else if (feedCount >= 8) fill = 1;
|
||||
be.block.set(be.block.id, {
|
||||
facing: be.block.properties.facing,
|
||||
fill: String(fill),
|
||||
});
|
||||
};
|
||||
StartupEvents.registry("block", (event) => {
|
||||
event
|
||||
.create("society:feeding_trough", "cardinal")
|
||||
.property(integerProperty.create("fill", 0, 4))
|
||||
.tagBlock("minecraft:mineable/axe")
|
||||
.tagBlock("minecraft:needs_stone_tool")
|
||||
.box(0, 0, 2, 16, 12, 14)
|
||||
.defaultCutout()
|
||||
.item((item) => {
|
||||
item.tooltip(Text.translatable("block.society.feeding_trough.description").gray());
|
||||
item.tooltip(Text.translatable("tooltip.society.area", `13x13x13`).green());
|
||||
item.modelJson({
|
||||
parent: "farm_and_charm:block/feeding_trough_size_0",
|
||||
});
|
||||
})
|
||||
.defaultState((state) => {
|
||||
state.set(integerProperty.create("fill", 0, 4), 0);
|
||||
})
|
||||
.placementState((state) => {
|
||||
state.set(integerProperty.create("fill", 0, 4), 0);
|
||||
})
|
||||
.blockEntity((blockInfo) => {
|
||||
blockInfo.inventory(9, 1);
|
||||
blockInfo.initialData({ fill: "0" });
|
||||
blockInfo.serverTick(300, 0, (entity) => {
|
||||
const { inventory, block, level } = entity;
|
||||
global.runFeedingTrough(entity, inventory, block, level);
|
||||
}),
|
||||
blockInfo.rightClickOpensInventory();
|
||||
blockInfo.attachCapability(
|
||||
CapabilityBuilder.ITEM.blockEntity()
|
||||
.insertItem((blockEntity, slot, stack, simulate) =>
|
||||
blockEntity.inventory.insertItem(slot, stack, simulate)
|
||||
)
|
||||
.extractItem((blockEntity, slot, stack, simulate) =>
|
||||
blockEntity.inventory.extractItem(slot, stack, simulate)
|
||||
)
|
||||
.getSlotLimit((blockEntity, slot) => blockEntity.inventory.getSlotLimit(slot))
|
||||
.getSlots((blockEntity) => blockEntity.inventory.slots)
|
||||
.getStackInSlot((blockEntity, slot) => blockEntity.inventory.getStackInSlot(slot))
|
||||
);
|
||||
}).blockstateJson = {
|
||||
multipart: [
|
||||
{
|
||||
when: { fill: 0, facing: "north" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_0",
|
||||
y: 0,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 0, facing: "east" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_0",
|
||||
y: 90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 0, facing: "south" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_0",
|
||||
y: 180,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 0, facing: "west" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_0",
|
||||
y: -90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 1, facing: "north" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_1",
|
||||
y: 0,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 1, facing: "east" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_1",
|
||||
y: 90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 1, facing: "south" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_1",
|
||||
y: 180,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 1, facing: "west" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_1",
|
||||
y: -90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 2, facing: "north" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_2",
|
||||
y: 0,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 2, facing: "east" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_2",
|
||||
y: 90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 2, facing: "south" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_2",
|
||||
y: 180,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 2, facing: "west" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_2",
|
||||
y: -90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 3, facing: "north" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_3",
|
||||
y: 0,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 3, facing: "east" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_3",
|
||||
y: 90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 3, facing: "south" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_3",
|
||||
y: 180,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 3, facing: "west" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_3",
|
||||
y: -90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 4, facing: "north" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_4",
|
||||
y: 0,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 4, facing: "east" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_4",
|
||||
y: 90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 4, facing: "south" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_4",
|
||||
y: 180,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
when: { fill: 4, facing: "west" },
|
||||
apply: {
|
||||
model: "farm_and_charm:block/feeding_trough_size_4",
|
||||
y: -90,
|
||||
uvlock: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user