Skip to content

Commit 7f3787d

Browse files
committed
ExprVillagerLevel - requested changes
1 parent a4ce03a commit 7f3787d

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

src/main/java/ch/njol/skript/expressions/ExprVillagerLevel.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
@Name("Villager Level/Experience")
2121
@Description({
2222
"Represents the level/experience of a villager.",
23-
"The level will determine which trades are available to players.",
23+
"The level will determine which trades are available to players (value between 1 and 5, defaults to 1).",
24+
"When a villager's level is 1, they may lose their profession if they don't have a workstation.",
2425
"Experience works along with the leveling system, determining which level the villager will move to.",
25-
"Level must be between 1 and 5, with 1 being the default level.",
26-
"When a villager's level is 1, they may lose their profession.",
27-
"Experience must be greater than or equal to 0."
26+
"Experience must be greater than or equal to 0.",
27+
"Learn more about villager levels on <a href='https://minecraft.wiki/w/Villager#Trading'>Minecraft Wiki</a>",
2828
})
2929
@Examples({
3030
"set {_level} to villager level of {_villager}",
@@ -61,8 +61,7 @@ public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean is
6161
@Override
6262
public Class<?> @Nullable [] acceptChange(ChangeMode mode) {
6363
return switch (mode) {
64-
case SET, ADD, REMOVE, RESET ->
65-
CollectionUtils.array(Number.class);
64+
case SET, ADD, REMOVE, RESET -> CollectionUtils.array(Number.class);
6665
default -> null;
6766
};
6867
}
@@ -75,20 +74,29 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) {
7574
for (LivingEntity livingEntity : getExpr().getArray(event)) {
7675
if (!(livingEntity instanceof Villager villager)) continue;
7776

78-
int minLevel = experience ? 0 : 1;
79-
int maxLevel = experience ? Integer.MAX_VALUE : 5;
80-
int previousLevel = experience ? villager.getVillagerExperience() : villager.getVillagerLevel();
77+
int minLevel;
78+
int maxLevel;
79+
int previousAmount;
80+
if (experience) {
81+
minLevel = 0;
82+
maxLevel = Integer.MAX_VALUE;
83+
previousAmount = villager.getVillagerExperience();
84+
} else {
85+
minLevel = 1;
86+
maxLevel = 5;
87+
previousAmount = villager.getVillagerLevel();
88+
}
8189
int newLevel = switch (mode) {
8290
case SET -> changeValue;
83-
case ADD -> previousLevel + changeValue;
84-
case REMOVE -> previousLevel - changeValue;
91+
case ADD -> previousAmount + changeValue;
92+
case REMOVE -> previousAmount - changeValue;
8593
default -> minLevel;
8694
};
87-
newLevel = Math2.fit(minLevel, newLevel, maxLevel);
88-
if (experience)
95+
newLevel = Math2.fit(minLevel, newLevel, maxLevel);
96+
if (experience) {
8997
villager.setVillagerExperience(newLevel);
90-
else if (newLevel > previousLevel && HAS_INCREASE_METHOD) {
91-
int increase = Math2.fit(minLevel, newLevel - previousLevel, maxLevel);
98+
} else if (newLevel > previousAmount && HAS_INCREASE_METHOD) {
99+
int increase = Math2.fit(minLevel, newLevel - previousAmount, maxLevel);
92100
// According to the docs for this method:
93101
// Increases the level of this villager.
94102
// The villager will also unlock new recipes unlike the raw 'setVillagerLevel' method

0 commit comments

Comments
 (0)