Skip to content

Commit 14d0778

Browse files
committed
add more actions support
1 parent 2bc0d7f commit 14d0778

5 files changed

Lines changed: 202 additions & 0 deletions

File tree

modules/actions/src/main/java/top/mrxiaom/pluginbase/actions/ActionProviders.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@ public static void registerBuiltInActions(BukkitPlugin plugin) {
2424
if (plugin.options.adventure()) {
2525
ActionProviders.registerActionProvider(ActionActionBar.PROVIDER);
2626
ActionProviders.registerActionProvider(ActionMessageAdventure.PROVIDER);
27+
ActionProviders.registerActionProvider(ActionTitleAdventure.PROVIDER);
2728
} else {
2829
ActionProviders.registerActionProvider(ActionMessage.PROVIDER);
30+
ActionProviders.registerActionProvider(ActionTitle.PROVIDER);
2931
}
32+
ActionProviders.registerActionProvider(ActionSound.PROVIDER);
3033
ActionProviders.registerActionProvider(ActionClose.PROVIDER);
3134
ActionProviders.registerActionProvider(ActionDelay.PROVIDER);
3235
} catch (Throwable ignored) {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package top.mrxiaom.pluginbase.actions;
2+
3+
import org.bukkit.Location;
4+
import org.bukkit.configuration.ConfigurationSection;
5+
import org.bukkit.entity.Player;
6+
import org.jetbrains.annotations.Nullable;
7+
import top.mrxiaom.pluginbase.api.IAction;
8+
import top.mrxiaom.pluginbase.api.IActionProvider;
9+
import top.mrxiaom.pluginbase.utils.ConfigUtils;
10+
import top.mrxiaom.pluginbase.utils.Pair;
11+
import top.mrxiaom.pluginbase.utils.Util;
12+
import top.mrxiaom.pluginbase.utils.depend.PAPI;
13+
14+
import java.util.List;
15+
16+
public class ActionSound implements IAction {
17+
public static final IActionProvider PROVIDER = input -> {
18+
if (input instanceof ConfigurationSection) {
19+
ConfigurationSection section = (ConfigurationSection) input;
20+
if ("sound".equals(section.getString("type"))) {
21+
String sound = section.getString("sound");
22+
if (sound != null) {
23+
float volume = ConfigUtils.getFloat(section, "volume", 1.0f);
24+
float pitch = ConfigUtils.getFloat(section, "pitch", 1.0f);
25+
return new ActionSound(sound, volume, pitch);
26+
}
27+
}
28+
} else {
29+
String s = String.valueOf(input);
30+
if (s.startsWith("[sound]")) {
31+
String[] split = s.split(",");
32+
String sound = split[0];
33+
float volume = split.length > 1 ? Util.parseFloat(split[1]).orElse(1.0f) : 1.0f;
34+
float pitch = split.length > 2 ? Util.parseFloat(split[2]).orElse(1.0f) : 1.0f;
35+
return new ActionSound(sound, volume, pitch);
36+
}
37+
}
38+
return null;
39+
};
40+
private final String sound;
41+
private final float volume, pitch;
42+
public ActionSound(String sound, float volume, float pitch) {
43+
this.sound = sound;
44+
this.volume = volume;
45+
this.pitch = pitch;
46+
}
47+
48+
@Override
49+
public void run(@Nullable Player player, @Nullable List<Pair<String, Object>> replacements) {
50+
if (player != null) {
51+
Location location = player.getLocation();
52+
String sound = PAPI.setPlaceholders(player, Pair.replace(this.sound, replacements));
53+
player.playSound(location, sound, volume, pitch);
54+
}
55+
}
56+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package top.mrxiaom.pluginbase.actions;
2+
3+
import org.bukkit.configuration.ConfigurationSection;
4+
import org.bukkit.entity.Player;
5+
import org.jetbrains.annotations.Nullable;
6+
import top.mrxiaom.pluginbase.api.IAction;
7+
import top.mrxiaom.pluginbase.api.IActionProvider;
8+
import top.mrxiaom.pluginbase.utils.ColorHelper;
9+
import top.mrxiaom.pluginbase.utils.Pair;
10+
import top.mrxiaom.pluginbase.utils.depend.PAPI;
11+
12+
import java.util.List;
13+
14+
public class ActionTitle implements IAction {
15+
public static final IActionProvider PROVIDER = input -> {
16+
if (input instanceof ConfigurationSection) {
17+
ConfigurationSection section = (ConfigurationSection) input;
18+
if ("title".equals(section.getString("type"))) {
19+
String title = section.getString("title", "");
20+
String subtitle = section.getString("subtitle", "");
21+
int fadeIn = section.getInt("fade-in", 10);
22+
int stay = section.getInt("stay", 60);
23+
int fadeOut = section.getInt("fade-out", 10);
24+
return new ActionTitle(title, subtitle, fadeIn, stay, fadeOut);
25+
}
26+
} else {
27+
String s = String.valueOf(input);
28+
if (s.startsWith("[title]")) {
29+
String str = s.substring(7);
30+
String title, subtitle;
31+
int i = str.indexOf("\\n");
32+
if (i != -1) {
33+
title = str.substring(0, i);
34+
subtitle = str.substring(i + 2);
35+
} else {
36+
title = "";
37+
subtitle = str;
38+
}
39+
return new ActionTitle(title, subtitle, 10, 60, 10);
40+
}
41+
}
42+
return null;
43+
};
44+
private final String title;
45+
private final String subtitle;
46+
private final int fadeIn, stay, fadeOut;
47+
public ActionTitle(String title, String subtitle, int fadeIn, int stay, int fadeOut) {
48+
this.title = title;
49+
this.subtitle = subtitle;
50+
this.fadeIn = fadeIn;
51+
this.stay = stay;
52+
this.fadeOut = fadeOut;
53+
}
54+
55+
@Override
56+
public void run(@Nullable Player player, @Nullable List<Pair<String, Object>> replacements) {
57+
if (player != null) {
58+
String title = PAPI.setPlaceholders(player, Pair.replace(this.title, replacements));
59+
String subtitle = PAPI.setPlaceholders(player, Pair.replace(this.subtitle, replacements));
60+
player.sendTitle(ColorHelper.parseColor(title), ColorHelper.parseColor(subtitle), fadeIn, stay, fadeOut);
61+
}
62+
}
63+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package top.mrxiaom.pluginbase.actions;
2+
3+
import org.bukkit.configuration.ConfigurationSection;
4+
import org.bukkit.entity.Player;
5+
import org.jetbrains.annotations.Nullable;
6+
import top.mrxiaom.pluginbase.api.IAction;
7+
import top.mrxiaom.pluginbase.api.IActionProvider;
8+
import top.mrxiaom.pluginbase.utils.AdventureUtil;
9+
import top.mrxiaom.pluginbase.utils.Pair;
10+
import top.mrxiaom.pluginbase.utils.depend.PAPI;
11+
12+
import java.util.List;
13+
14+
public class ActionTitleAdventure implements IAction {
15+
public static final IActionProvider PROVIDER = input -> {
16+
if (input instanceof ConfigurationSection) {
17+
ConfigurationSection section = (ConfigurationSection) input;
18+
if ("title".equals(section.getString("type"))) {
19+
String title = section.getString("title", "");
20+
String subtitle = section.getString("subtitle", "");
21+
int fadeIn = section.getInt("fade-in", 10);
22+
int stay = section.getInt("stay", 60);
23+
int fadeOut = section.getInt("fade-out", 10);
24+
return new ActionTitleAdventure(title, subtitle, fadeIn, stay, fadeOut);
25+
}
26+
} else {
27+
String s = String.valueOf(input);
28+
if (s.startsWith("[title]")) {
29+
String str = s.substring(7);
30+
String title, subtitle;
31+
int i = str.indexOf("\\n");
32+
if (i != -1) {
33+
title = str.substring(0, i);
34+
subtitle = str.substring(i + 2);
35+
} else {
36+
title = "";
37+
subtitle = str;
38+
}
39+
return new ActionTitleAdventure(title, subtitle, 10, 60, 10);
40+
}
41+
}
42+
return null;
43+
};
44+
private final String title;
45+
private final String subtitle;
46+
private final int fadeIn, stay, fadeOut;
47+
public ActionTitleAdventure(String title, String subtitle, int fadeIn, int stay, int fadeOut) {
48+
this.title = title;
49+
this.subtitle = subtitle;
50+
this.fadeIn = fadeIn;
51+
this.stay = stay;
52+
this.fadeOut = fadeOut;
53+
}
54+
55+
@Override
56+
public void run(@Nullable Player player, @Nullable List<Pair<String, Object>> replacements) {
57+
if (player != null) {
58+
String title = PAPI.setPlaceholders(player, Pair.replace(this.title, replacements));
59+
String subtitle = PAPI.setPlaceholders(player, Pair.replace(this.subtitle, replacements));
60+
AdventureUtil.sendTitle(player, title, subtitle, fadeIn, stay, fadeOut);
61+
}
62+
}
63+
}

modules/library/src/main/java/top/mrxiaom/pluginbase/utils/ConfigUtils.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,23 @@ public static Double getDouble(ConfigurationSection section, String key, Double
252252
return section.contains(key) && section.isDouble(key) ? Double.valueOf(section.getDouble(key)) : def;
253253
}
254254

255+
/**
256+
* 获取可空的 Float 类型配置数据
257+
* @param section 配置
258+
* @param key 键
259+
* @param def 默认值
260+
*/
261+
public static Float getFloat(ConfigurationSection section, String key, Float def) {
262+
String str = section.getString(key, null);
263+
if (str != null) {
264+
try {
265+
return Float.parseFloat(str);
266+
} catch (NumberFormatException ignored) {
267+
}
268+
}
269+
return def;
270+
}
271+
255272
/**
256273
* 获取可空的 Integer 类型配置数据
257274
* @param section 配置

0 commit comments

Comments
 (0)