Skip to content

Commit 0d0f516

Browse files
committed
v2.1.1
1 parent 3a53d19 commit 0d0f516

19 files changed

Lines changed: 582 additions & 90 deletions

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ dependencies {
4949
compileOnly 'net.kyori:adventure-api:4.26.1'
5050
compileOnly 'net.kyori:adventure-platform-bukkit:4.4.1'
5151
compileOnly 'org.spigotmc:spigot-api:1.14.4-R0.1-SNAPSHOT'
52-
compileOnly 'org.jetbrains:annotations:26.0.2'
52+
compileOnly 'org.jetbrains:annotations:26.1.0'
5353
compileOnly 'me.clip:placeholderapi:2.11.6'
5454
}
5555

5656
group = 'me.byteful.plugin'
57-
version = '2.1.0.1'
57+
version = '2.1.1'
5858
description = 'LevelTools'
5959
java.sourceCompatibility = JavaVersion.VERSION_17
6060

@@ -73,7 +73,7 @@ shadowJar {
7373

7474
relocate "de.tr7zw.changeme.nbtapi", "me.byteful.plugin.leveltools.libs.nbtapi"
7575
relocate "com.cryptomorin.xseries", "me.byteful.plugin.leveltools.libs.xseries"
76-
relocate "redempt.redlib", "me.byteful.plugin.leveltools.libs.redlib"
76+
relocate "redempt.crunch", "me.byteful.plugin.leveltools.libs.crunch"
7777
relocate 'revxrsal.commands', 'me.byteful.plugin.leveltools.libs.lamp'
7878
relocate 'org.bstats', 'me.byteful.plugin.leveltools.libs.bstats'
7979
relocate 'com.jeff-media.morepersistentdatatypes', 'me.byteful.plugin.leveltools.libs.morepersistentdatatypes'

src/main/java/me/byteful/plugin/leveltools/api/trigger/TriggerContext.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public final class TriggerContext {
1212
private final Player player;
1313
private final ItemStack item;
1414
private final String triggerId;
15+
private final TriggerSlot slot;
1516
private final Object source;
1617
private final Event originalEvent;
1718
private final ItemProfile itemProfile;
@@ -21,6 +22,7 @@ private TriggerContext(
2122
@NotNull Player player,
2223
@NotNull ItemStack item,
2324
@NotNull String triggerId,
25+
@Nullable TriggerSlot slot,
2426
@Nullable Object source,
2527
@NotNull Event originalEvent,
2628
@NotNull ItemProfile itemProfile,
@@ -29,6 +31,7 @@ private TriggerContext(
2931
this.player = player;
3032
this.item = item;
3133
this.triggerId = triggerId;
34+
this.slot = slot;
3235
this.source = source;
3336
this.originalEvent = originalEvent;
3437
this.itemProfile = itemProfile;
@@ -54,6 +57,11 @@ public String getTriggerId() {
5457
return triggerId;
5558
}
5659

60+
@Nullable
61+
public TriggerSlot getSlot() {
62+
return slot;
63+
}
64+
5765
@Nullable
5866
public Object getSource() {
5967
return source;
@@ -96,6 +104,7 @@ public static final class Builder {
96104
private Player player;
97105
private ItemStack item;
98106
private String triggerId;
107+
private TriggerSlot slot;
99108
private Object source;
100109
private Event originalEvent;
101110
private ItemProfile itemProfile;
@@ -119,6 +128,11 @@ public Builder triggerId(@NotNull String triggerId) {
119128
return this;
120129
}
121130

131+
public Builder slot(@Nullable TriggerSlot slot) {
132+
this.slot = slot;
133+
return this;
134+
}
135+
122136
public Builder source(@Nullable Object source) {
123137
this.source = source;
124138
return this;
@@ -147,7 +161,7 @@ public TriggerContext build() {
147161
if (itemProfile == null) throw new IllegalStateException("ItemProfile must be set");
148162
if (triggerProfile == null) throw new IllegalStateException("TriggerProfile must be set");
149163

150-
return new TriggerContext(player, item, triggerId, source, originalEvent, itemProfile, triggerProfile);
164+
return new TriggerContext(player, item, triggerId, slot, source, originalEvent, itemProfile, triggerProfile);
151165
}
152166
}
153167
}

src/main/java/me/byteful/plugin/leveltools/api/trigger/TriggerIds.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public final class TriggerIds {
1111
public static final String LEFT_CLICK = "left_click";
1212
public static final String CONSUME = "consume";
1313
public static final String FARMING = "farming";
14+
public static final String ARMOR_DURABILITY = "armor_durability";
1415

1516
private TriggerIds() {}
1617

@@ -28,6 +29,7 @@ public static boolean isBuiltIn(@NotNull String id) {
2829
|| RIGHT_CLICK.equals(normalized)
2930
|| LEFT_CLICK.equals(normalized)
3031
|| CONSUME.equals(normalized)
31-
|| FARMING.equals(normalized);
32+
|| FARMING.equals(normalized)
33+
|| ARMOR_DURABILITY.equals(normalized);
3234
}
3335
}

src/main/java/me/byteful/plugin/leveltools/api/trigger/TriggerRegistry.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import me.byteful.plugin.leveltools.api.trigger.impl.EntityKillTrigger;
66
import me.byteful.plugin.leveltools.api.trigger.impl.FarmingTrigger;
77
import me.byteful.plugin.leveltools.api.trigger.impl.FishingTrigger;
8+
import me.byteful.plugin.leveltools.api.trigger.impl.ArmorDurabilityTrigger;
89
import me.byteful.plugin.leveltools.api.trigger.impl.LeftClickTrigger;
910
import me.byteful.plugin.leveltools.api.trigger.impl.RightClickTrigger;
1011
import org.jetbrains.annotations.NotNull;
@@ -64,5 +65,6 @@ public void registerDefaults() {
6465
register(new LeftClickTrigger());
6566
register(new ConsumeTrigger());
6667
register(new FarmingTrigger());
68+
register(new ArmorDurabilityTrigger());
6769
}
6870
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package me.byteful.plugin.leveltools.api.trigger;
2+
3+
import org.bukkit.inventory.EquipmentSlot;
4+
import org.jetbrains.annotations.NotNull;
5+
import org.jetbrains.annotations.Nullable;
6+
7+
import java.util.Locale;
8+
9+
public enum TriggerSlot {
10+
HAND,
11+
OFF_HAND,
12+
HELMET,
13+
CHESTPLATE,
14+
LEGGINGS,
15+
BOOTS;
16+
17+
@Nullable
18+
public static TriggerSlot fromName(@Nullable String value) {
19+
if (value == null || value.trim().isEmpty()) {
20+
return null;
21+
}
22+
23+
try {
24+
return valueOf(value.trim().toUpperCase(Locale.ROOT).replace('-', '_'));
25+
} catch (IllegalArgumentException ex) {
26+
return null;
27+
}
28+
}
29+
30+
public static TriggerSlot fromBukkit(@NotNull EquipmentSlot bukkit) {
31+
switch (bukkit) {
32+
case CHEST:
33+
return CHESTPLATE;
34+
case FEET:
35+
return BOOTS;
36+
case HAND:
37+
return HAND;
38+
case OFF_HAND:
39+
return OFF_HAND;
40+
case HEAD:
41+
return HELMET;
42+
case LEGS:
43+
return LEGGINGS;
44+
default:
45+
throw new IllegalArgumentException("LevelTools needs to be updated for the new MC update.");
46+
}
47+
}
48+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package me.byteful.plugin.leveltools.api.trigger.impl;
2+
3+
import me.byteful.plugin.leveltools.api.trigger.Trigger;
4+
import me.byteful.plugin.leveltools.api.trigger.TriggerContext;
5+
import me.byteful.plugin.leveltools.api.trigger.TriggerIds;
6+
import me.byteful.plugin.leveltools.profile.trigger.TriggerProfile;
7+
import org.bukkit.Material;
8+
import org.bukkit.inventory.ItemStack;
9+
import org.jetbrains.annotations.NotNull;
10+
import org.jetbrains.annotations.Nullable;
11+
12+
public final class ArmorDurabilityTrigger implements Trigger {
13+
@Override
14+
@NotNull
15+
public String getTriggerId() {
16+
return TriggerIds.ARMOR_DURABILITY;
17+
}
18+
19+
@Override
20+
public boolean canHandle(@NotNull TriggerContext context) {
21+
Material armorMaterial = resolveArmorMaterial(context);
22+
if (armorMaterial == null) {
23+
return false;
24+
}
25+
26+
TriggerProfile profile = context.getTriggerProfile();
27+
return profile.isSourceAllowed(armorMaterial.name());
28+
}
29+
30+
@Override
31+
public double calculateXpModifier(@NotNull TriggerContext context) {
32+
Material armorMaterial = resolveArmorMaterial(context);
33+
if (armorMaterial == null) {
34+
return 0;
35+
}
36+
37+
TriggerProfile profile = context.getTriggerProfile();
38+
return profile.calculateXpModifier(armorMaterial.name());
39+
}
40+
41+
@Nullable
42+
private Material resolveArmorMaterial(@NotNull TriggerContext context) {
43+
Material sourceMaterial = context.getSourceAs(Material.class);
44+
if (sourceMaterial != null) {
45+
return sourceMaterial;
46+
}
47+
48+
ItemStack sourceItem = context.getSourceAs(ItemStack.class);
49+
if (sourceItem != null) {
50+
return sourceItem.getType();
51+
}
52+
53+
ItemStack contextItem = context.getItem();
54+
return contextItem.getType();
55+
}
56+
}

src/main/java/me/byteful/plugin/leveltools/config/migration/V1ToV2Migration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ private void createToolProfile(@NotNull YamlConfiguration config, @NotNull Strin
219219
@NotNull String rewardProfile, @NotNull String displayProfile, int maxLevel) {
220220
String basePath = "profiles." + id;
221221
config.set(basePath + ".materials", materials);
222-
config.set(basePath + ".trigger_profile", triggerProfile);
222+
config.set(basePath + ".trigger_profiles", Collections.singletonList(triggerProfile));
223223
config.set(basePath + ".reward_profile", rewardProfile);
224224
config.set(basePath + ".display_profile", displayProfile);
225225
config.set(basePath + ".max_level", maxLevel);

0 commit comments

Comments
 (0)