Skip to content

EvtVillagerCareerChange #7746

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: dev/feature
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.entity.EntityTransformEvent.TransformReason;
import org.bukkit.event.entity.EntityUnleashEvent;
import org.bukkit.event.entity.VillagerCareerChangeEvent;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryCloseEvent;
Expand Down Expand Up @@ -1550,14 +1551,20 @@ public String toVariableNameString(WorldBorder border) {
.changer(DefaultChangers.entityChanger)
);


Classes.registerClass(new EnumClassInfo<>(EquipmentSlot.class, "equipmentslot", "equipment slots")
.user("equipment ?slots?")
.name("Equipment Slot")
.description("Represents an equipment slot of an entity.")
.since("2.11")
);

Classes.registerClass(new EnumClassInfo<>(VillagerCareerChangeEvent.ChangeReason.class, "villagercareerchangereason", "villager career change reasons")
.user("(villager )?career ?change ?reasons?")
.name("Villager Career Change Reason")
.description("Represents a reason why a villager changed its career.")
.since("INSERT VERSION")
);

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.bukkit.command.BlockCommandSender;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.*;
import org.bukkit.entity.Villager.Profession;
import org.bukkit.event.block.*;
import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
Expand Down Expand Up @@ -779,6 +780,23 @@ public void set(VaultDisplayItemEvent event, @Nullable ItemStack itemStack) {
});
}

EventValues.registerEventValue(VillagerCareerChangeEvent.class, VillagerCareerChangeEvent.ChangeReason.class, VillagerCareerChangeEvent::getReason);
EventValues.registerEventValue(VillagerCareerChangeEvent.class, Villager.Profession.class, new EventConverter<>() {
@Override
public void set(VillagerCareerChangeEvent event, @Nullable Profession profession) {
if (profession == null)
return;
event.setProfession(profession);
}

@Override
public Profession convert(VillagerCareerChangeEvent event) {
return event.getProfession();
}
});
EventValues.registerEventValue(VillagerCareerChangeEvent.class, Villager.Profession.class,
event -> event.getEntity().getProfession(), TIME_PAST);

}

}
14 changes: 14 additions & 0 deletions src/main/java/ch/njol/skript/events/SimpleEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,20 @@ public class SimpleEvents {
.since("INSERT VERSION")
.requiredPlugins("Minecraft 1.21.1+");
}

Skript.registerEvent("Villager Career Change", SimpleEvent.class, VillagerCareerChangeEvent.class,
"villager career chang(e[d]|ing)")
.description("Called when a villager changes its career. Can be caused by being employed or losing their job.")
.examples("""
on villager career change:
if all:
event-career change reason is employment
event-villager profession is armorer profession
then:
cancel event
""")
.since("INSERT VERSION");

}

}
7 changes: 6 additions & 1 deletion src/main/resources/lang/default.lang
Original file line number Diff line number Diff line change
Expand Up @@ -2586,6 +2586,11 @@ equipment slots:
off_hand: off hand slot, off hand
body: body slot, body armor slot, body armour slot

# -- Villager Career Change Reasons
villager career change reasons:
employed: employment
losing_job: losing job

# -- Boolean --
boolean:
true:
Expand Down Expand Up @@ -2689,7 +2694,7 @@ types:
vehicle: vehicle¦s @a
fishingstate: fishing state¦s @a
equipmentslot: equipment slot¦s @an

villagercareerchangereason: villager career change reason¦s @a

# Skript
weathertype: weather type¦s @a
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.skriptlang.skript.test.tests.syntaxes.events;

import ch.njol.skript.test.runner.SkriptJUnitTest;
import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Villager;
import org.bukkit.entity.Villager.Profession;
import org.bukkit.event.entity.VillagerCareerChangeEvent;
import org.bukkit.event.entity.VillagerCareerChangeEvent.ChangeReason;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class EvtVillagerCareerChangeTest extends SkriptJUnitTest {

private Villager villager;

@Before
public void setup() {
villager = (Villager) getTestWorld().spawnEntity(getTestLocation(), EntityType.VILLAGER);
villager.setProfession(Profession.CLERIC);
}

@Test
public void test() {
VillagerCareerChangeEvent event = new VillagerCareerChangeEvent(villager, Profession.ARMORER, ChangeReason.EMPLOYED);
Bukkit.getPluginManager().callEvent(event);
}

@After
public void cleanup() {
if (villager != null)
villager.remove();
}

}
20 changes: 20 additions & 0 deletions src/test/skript/junit/EvtVillagerCareerChangeTest.sk
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
options:
test: "org.skriptlang.skript.test.tests.syntaxes.events.EvtVillagerCareerChangeTest"

test "VillagerCareerChange" when running JUnit:
set {_tests::*} to "event called", "past profession is cleric", "profession is armorer", and "profession changed"
add "career change reason is employment" to {_tests::*}
ensure {@test} completes {_tests::*}

on villager career change:
junit test is {@test}
complete "event called" for {@test}
if past event-villager profession is cleric profession:
complete "past profession is cleric" for {@test}
if event-villager profession is armorer profession:
complete "profession is armorer" for {@test}
set event-villager profession to butcher profession
if event-villager profession is butcher profession:
complete "profession changed" for {@test}
if event-career change reason is employment:
complete "career change reason is employment" for {@test}