Skip to content

Commit b39b5f0

Browse files
EvtVillagerCareerChange (#7746)
* Initial Commit * Requested Changes * Requested Changes * Update BukkitClasses.java
1 parent cbe81ea commit b39b5f0

File tree

6 files changed

+102
-0
lines changed

6 files changed

+102
-0
lines changed

src/main/java/ch/njol/skript/classes/data/BukkitClasses.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
4343
import org.bukkit.event.entity.EntityTransformEvent.TransformReason;
4444
import org.bukkit.event.entity.EntityUnleashEvent;
45+
import org.bukkit.event.entity.VillagerCareerChangeEvent;
4546
import org.bukkit.event.inventory.ClickType;
4647
import org.bukkit.event.inventory.InventoryAction;
4748
import org.bukkit.event.inventory.InventoryCloseEvent;
@@ -1576,6 +1577,13 @@ public String toVariableNameString(WorldBorder border) {
15761577
.requiredPlugins("Minecraft 1.21.5+")
15771578
.documentationId("PigVariant"));
15781579

1580+
Classes.registerClass(new EnumClassInfo<>(VillagerCareerChangeEvent.ChangeReason.class, "villagercareerchangereason", "villager career change reasons")
1581+
.user("(villager )?career ?change ?reasons?")
1582+
.name("Villager Career Change Reason")
1583+
.description("Represents a reason why a villager changed its career.")
1584+
.since("INSERT VERSION")
1585+
);
1586+
15791587
}
15801588

15811589
/**

src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.bukkit.command.BlockCommandSender;
3333
import org.bukkit.command.CommandSender;
3434
import org.bukkit.entity.*;
35+
import org.bukkit.entity.Villager.Profession;
3536
import org.bukkit.event.block.*;
3637
import org.bukkit.event.enchantment.EnchantItemEvent;
3738
import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
@@ -770,6 +771,23 @@ public void set(VaultDisplayItemEvent event, @Nullable ItemStack itemStack) {
770771
});
771772
}
772773

774+
EventValues.registerEventValue(VillagerCareerChangeEvent.class, VillagerCareerChangeEvent.ChangeReason.class, VillagerCareerChangeEvent::getReason);
775+
EventValues.registerEventValue(VillagerCareerChangeEvent.class, Villager.Profession.class, new EventConverter<>() {
776+
@Override
777+
public void set(VillagerCareerChangeEvent event, @Nullable Profession profession) {
778+
if (profession == null)
779+
return;
780+
event.setProfession(profession);
781+
}
782+
783+
@Override
784+
public Profession convert(VillagerCareerChangeEvent event) {
785+
return event.getProfession();
786+
}
787+
});
788+
EventValues.registerEventValue(VillagerCareerChangeEvent.class, Villager.Profession.class,
789+
event -> event.getEntity().getProfession(), TIME_PAST);
790+
773791
}
774792

775793
}

src/main/java/ch/njol/skript/events/SimpleEvents.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,20 @@ public class SimpleEvents {
786786
.since("INSERT VERSION")
787787
.requiredPlugins("Minecraft 1.21.1+");
788788
}
789+
790+
Skript.registerEvent("Villager Career Change", SimpleEvent.class, VillagerCareerChangeEvent.class,
791+
"villager career chang(e[d]|ing)")
792+
.description("Called when a villager changes its career. Can be caused by being employed or losing their job.")
793+
.examples("""
794+
on villager career change:
795+
if all:
796+
event-career change reason is employment
797+
event-villager profession is armorer profession
798+
then:
799+
cancel event
800+
""")
801+
.since("INSERT VERSION");
802+
789803
}
790804

791805
}

src/main/resources/lang/default.lang

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2592,6 +2592,11 @@ pig variants:
25922592
temperate: temperate
25932593
warm: warm
25942594

2595+
# -- Villager Career Change Reasons
2596+
villager career change reasons:
2597+
employed: employment
2598+
losing_job: losing job
2599+
25952600
# -- Boolean --
25962601
boolean:
25972602
true:
@@ -2696,6 +2701,7 @@ types:
26962701
fishingstate: fishing state¦s @a
26972702
equipmentslot: equipment slot¦s @an
26982703
pigvariant: pig variant¦s @a
2704+
villagercareerchangereason: villager career change reason¦s @a
26992705

27002706
# Skript
27012707
weathertype: weather type¦s @a
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.skriptlang.skript.test.tests.syntaxes.events;
2+
3+
import ch.njol.skript.test.runner.SkriptJUnitTest;
4+
import org.bukkit.Bukkit;
5+
import org.bukkit.entity.EntityType;
6+
import org.bukkit.entity.Villager;
7+
import org.bukkit.entity.Villager.Profession;
8+
import org.bukkit.event.entity.VillagerCareerChangeEvent;
9+
import org.bukkit.event.entity.VillagerCareerChangeEvent.ChangeReason;
10+
import org.junit.After;
11+
import org.junit.Before;
12+
import org.junit.Test;
13+
14+
public class EvtVillagerCareerChangeTest extends SkriptJUnitTest {
15+
16+
private Villager villager;
17+
18+
@Before
19+
public void setup() {
20+
villager = (Villager) getTestWorld().spawnEntity(getTestLocation(), EntityType.VILLAGER);
21+
villager.setProfession(Profession.CLERIC);
22+
}
23+
24+
@Test
25+
public void test() {
26+
VillagerCareerChangeEvent event = new VillagerCareerChangeEvent(villager, Profession.ARMORER, ChangeReason.EMPLOYED);
27+
Bukkit.getPluginManager().callEvent(event);
28+
}
29+
30+
@After
31+
public void cleanup() {
32+
if (villager != null)
33+
villager.remove();
34+
}
35+
36+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
options:
2+
test: "org.skriptlang.skript.test.tests.syntaxes.events.EvtVillagerCareerChangeTest"
3+
4+
test "VillagerCareerChange" when running JUnit:
5+
set {_tests::*} to "event called", "past profession is cleric", "profession is armorer", and "profession changed"
6+
add "career change reason is employment" to {_tests::*}
7+
ensure {@test} completes {_tests::*}
8+
9+
on villager career change:
10+
junit test is {@test}
11+
complete "event called" for {@test}
12+
if past event-villager profession is cleric profession:
13+
complete "past profession is cleric" for {@test}
14+
if event-villager profession is armorer profession:
15+
complete "profession is armorer" for {@test}
16+
set event-villager profession to butcher profession
17+
if event-villager profession is butcher profession:
18+
complete "profession changed" for {@test}
19+
if event-career change reason is employment:
20+
complete "career change reason is employment" for {@test}

0 commit comments

Comments
 (0)