Skip to content

Commit f60c3af

Browse files
committed
changes
1 parent ce34ca7 commit f60c3af

11 files changed

+127
-77
lines changed

README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Skript-PK
2+
3+
A Skript addon designed to seamlessly integrate **ProjectKorra** abilities and mechanics into Skript. This plugin enables server administrators to interact with ProjectKorra's bending system through Skript syntax, allowing for custom scripting of bending-related actions, presets, and player management.
4+
5+
---
6+
7+
## Overview
8+
9+
This addon acts as a bridge between Skript and ProjectKorra, providing syntax to:
10+
- Manage bending abilities and player presets.
11+
- Toggle bending mechanics for players.
12+
- Retrieve bending-related data for use in scripts.
13+
14+
Designed for simplicity, it empowers server owners to create unique bending experiences without direct plugin modification.
15+
16+
---
17+
18+
## Installation
19+
20+
1. Ensure **[Skript](https://github.com/SkriptLang/Skript)** and **[ProjectKorra](https://github.com/ProjectKorra/ProjectKorra/)** are installed.
21+
2. Place `Skript-PK.jar` into your server's `plugins/` folder.
22+
3. Restart the server.
23+
24+
---
25+
26+
## Requirements
27+
- Minecraft 1.15+
28+
- Skript 2.10.1+
29+
- ProjectKorra (Core) 1.11.1+
30+
31+
---
32+
33+
34+
**Developer:** AnxeloK

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<version>2.10.1</version>
4444
<scope>provided</scope>
4545
</dependency>
46-
<!-- ProjectKorra -->
46+
<!-- ProjectKorra API-->
4747
<dependency>
4848
<groupId>com.projectkorra</groupId>
4949
<artifactId>projectkorra</artifactId>

src/me/anxelok/Main.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ public class Main extends JavaPlugin {
1212
public void onEnable() {
1313
getLogger().info("[Skript-PK] Enabling Skript-PK...");
1414

15+
// check if Skript is installed
1516
if (getServer().getPluginManager().getPlugin("Skript") == null) {
1617
getLogger().severe("[Skript-PK] ERROR: Skript not found! Disabling plugin.");
1718
getServer().getPluginManager().disablePlugin(this);
1819
return;
1920
}
21+
// check if ProjectKorra is installed
2022
if (getServer().getPluginManager().getPlugin("ProjectKorra") == null) {
2123
getLogger().severe("[Skript-PK] ERROR: ProjectKorra not found! Disabling plugin.");
2224
getServer().getPluginManager().disablePlugin(this);
@@ -25,12 +27,12 @@ public void onEnable() {
2527

2628
getLogger().info("[Skript-PK] Registering ability structure...");
2729

28-
// Register all Skript syntax via the Skript addon system.
30+
// register skript syntax
2931
getLogger().info("[Skript-PK] Registering Skript syntax...");
3032
SkriptAddon addon = Skript.registerAddon(this);
3133

3234
try {
33-
// Load all classes within the "me.anxelok.syntax" package and its subpackages.
35+
// load syntax classes
3436
addon.loadClasses("me.anxelok.syntax");
3537
} catch (IOException error) {
3638
error.printStackTrace();

src/me/anxelok/syntax/effects/EffBindUnbindAbility.java

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,30 @@ public class EffBindUnbindAbility extends Effect {
3030
private Expression<String> abilityExpr;
3131
private Expression<Player> playerExpr;
3232
private Expression<Integer> slotExpr;
33-
private boolean isBind; // true if bind, false if unbind by slot
34-
private boolean unbindByName; // true if unbind by name
33+
private boolean isBind; // true for bind, false for unbind by slot
34+
private boolean unbindByName; // true for unbind by name
3535

3636
static {
3737
Skript.registerEffect(EffBindUnbindAbility.class,
38-
"bind %string% to current slot of %player%",
39-
"unbind ability from [slot] %integer% of %player%",
40-
"unbind ability %string% of %player%");
38+
"bind %string% to (slot %integer%|current slot) of %player%",
39+
"unbind ability (from slot %integer%|current slot|%string%) of %player%");
4140
}
4241

4342
@Override
4443
@SuppressWarnings("unchecked")
4544
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
4645
if (matchedPattern == 0) {
47-
// Bind syntax: "bind %string% to current slot of %player%"
46+
// bind ability to current slot
4847
abilityExpr = (Expression<String>) exprs[0];
4948
playerExpr = (Expression<Player>) exprs[1];
5049
isBind = true;
5150
} else if (matchedPattern == 1) {
52-
// Unbind by slot: "unbind ability from [slot] %integer% of %player%"
51+
// unbind by slot
5352
slotExpr = (Expression<Integer>) exprs[0];
5453
playerExpr = (Expression<Player>) exprs[1];
5554
isBind = false;
5655
} else {
57-
// Unbind by name: "unbind ability %string% of %player%"
56+
// unbind by ability name
5857
abilityExpr = (Expression<String>) exprs[0];
5958
playerExpr = (Expression<Player>) exprs[1];
6059
unbindByName = true;
@@ -76,24 +75,42 @@ protected void execute(Event e) {
7675
}
7776

7877
if (isBind) {
78+
// bind ability to specific slot or current slot
7979
String ability = abilityExpr.getSingle(e);
8080
if (ability == null) return;
81-
int currentSlot = player.getInventory().getHeldItemSlot();
82-
abilities.put(currentSlot, ability);
83-
bPlayer.setAbilities((HashMap<Integer, String>) abilities); // Cast to HashMap
81+
82+
Integer slot;
83+
if (slotExpr != null) {
84+
slot = slotExpr.getSingle(e); // Use specific slot
85+
} else {
86+
slot = player.getInventory().getHeldItemSlot(); // Use current slot
87+
}
88+
89+
if (slot == null) return;
90+
abilities.put(slot, ability);
91+
bPlayer.setAbilities((HashMap<Integer, String>) abilities);
8492
} else if (unbindByName) {
93+
// unbind ability by name
8594
String ability = abilityExpr.getSingle(e);
8695
if (ability == null) return;
8796
abilities.entrySet().removeIf(entry -> entry.getValue().equalsIgnoreCase(ability));
88-
bPlayer.setAbilities((HashMap<Integer, String>) abilities); // Cast to HashMap
97+
bPlayer.setAbilities((HashMap<Integer, String>) abilities);
8998
} else {
90-
Integer slot = slotExpr.getSingle(e);
99+
// unbind by slot number or current slot
100+
Integer slot;
101+
if (slotExpr != null) {
102+
slot = slotExpr.getSingle(e); // Use specific slot
103+
} else {
104+
slot = player.getInventory().getHeldItemSlot(); // Use current slot
105+
}
106+
91107
if (slot == null) return;
92108
abilities.remove(slot);
93-
bPlayer.setAbilities((HashMap<Integer, String>) abilities); // Cast to HashMap
109+
bPlayer.setAbilities((HashMap<Integer, String>) abilities);
94110
}
95111
}
96112

113+
97114
@Override
98115
public String toString(@Nullable Event e, boolean debug) {
99116
if (isBind) {

src/me/anxelok/syntax/effects/EffPresetManagement.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public class EffPresetManagement extends Effect {
3939
private Expression<String> presetNameExpr;
4040
private Expression<String> abilityExpr;
4141
private Expression<Integer> slotExpr;
42-
private Expression<String> playerExpr; // For player-specific presets
43-
private Expression<String> newPresetNameExpr; // For renaming presets
42+
private Expression<String> playerExpr; // for player presets
43+
private Expression<String> newPresetNameExpr; // for renaming
4444
private boolean isCreatePreset;
4545
private boolean isChangeSlot;
4646
private boolean isCreatePlayerPreset;
@@ -106,38 +106,38 @@ protected void execute(Event e) {
106106
String[] abilities = abilityExpr.getAll(e);
107107
if (presetName == null || abilities == null) return;
108108

109-
// Create a map of abilities for the global preset
109+
// create map of abilities for global preset
110110
Map<Integer, String> presetMap = new HashMap<>();
111111
for (int i = 0; i < abilities.length; i++) {
112-
presetMap.put(i + 1, abilities[i]); // Slot numbers start from 1
112+
presetMap.put(i + 1, abilities[i]); // ability slots start at 1
113113
}
114114

115-
// Save the global preset in externalPresets (global storage)
115+
// store global preset
116116
Preset.externalPresets.put(presetName, new ArrayList<>(Arrays.asList(abilities)));
117117
} else if (isCreatePlayerPreset) {
118118
String presetName = presetNameExpr.getSingle(e);
119119
String playerName = playerExpr.getSingle(e);
120120
String[] abilities = abilityExpr.getAll(e);
121121
if (presetName == null || playerName == null || abilities == null) return;
122122

123-
// Create the player-specific preset
123+
// create player preset
124124
Player player = Bukkit.getPlayer(playerName);
125125
if (player != null) {
126126
Map<Integer, String> playerPresetMap = new HashMap<>();
127127
for (int i = 0; i < abilities.length; i++) {
128128
playerPresetMap.put(i + 1, abilities[i]);
129129
}
130130

131-
// Use HashMap directly to match the constructor
131+
// create player preset object and store it
132132
Preset playerPreset = new Preset(player.getUniqueId(), presetName, new HashMap<>(playerPresetMap));
133-
Preset.presets.put(player.getUniqueId(), Arrays.asList(playerPreset)); // Store player preset
133+
Preset.presets.put(player.getUniqueId(), Arrays.asList(playerPreset));
134134
}
135135
} else if (isCreatePresetFromAnother) {
136136
String presetName = presetNameExpr.getSingle(e);
137137
String existingPresetName = abilityExpr.getSingle(e);
138138
if (presetName == null || existingPresetName == null) return;
139139

140-
// Copy abilities from the existing preset and create a new one
140+
// copy abilities from existing preset
141141
ArrayList<String> existingAbilities = Preset.externalPresets.get(existingPresetName);
142142
if (existingAbilities != null) {
143143
Preset.externalPresets.put(presetName, existingAbilities);
@@ -148,7 +148,7 @@ protected void execute(Event e) {
148148
String ability = abilityExpr.getSingle(e);
149149
if (slot == null || presetName == null || ability == null) return;
150150

151-
// Update the ability in the corresponding slot for the preset (global or player)
151+
// update slot ability for global or player preset
152152
if (playerExpr != null) {
153153
String playerName = playerExpr.getSingle(e);
154154
Player player = Bukkit.getPlayer(playerName);
@@ -162,26 +162,26 @@ protected void execute(Event e) {
162162
ArrayList<String> presetAbilities = Preset.externalPresets.get(presetName);
163163
if (presetAbilities != null && slot >= 1 && slot <= presetAbilities.size()) {
164164
presetAbilities.set(slot - 1, ability);
165-
Preset.externalPresets.put(presetName, presetAbilities); // Update the global preset
165+
Preset.externalPresets.put(presetName, presetAbilities); // update global preset
166166
}
167167
}
168168
} else if (isRenamePreset) {
169169
String oldPresetName = presetNameExpr.getSingle(e);
170170
String newPresetName = newPresetNameExpr.getSingle(e);
171171
if (oldPresetName == null || newPresetName == null) return;
172172

173-
// Rename the preset in global storage
173+
// rename preset in global storage
174174
ArrayList<String> abilities = Preset.externalPresets.get(oldPresetName);
175175
if (abilities != null) {
176176
Preset.externalPresets.put(newPresetName, abilities);
177-
Preset.externalPresets.remove(oldPresetName); // Remove old name
177+
Preset.externalPresets.remove(oldPresetName); // remove old name
178178
}
179179
} else if (isDeletePreset) {
180180
String presetName = presetNameExpr.getSingle(e);
181181
String playerName = playerExpr != null ? playerExpr.getSingle(e) : null;
182182
if (presetName == null) return;
183183

184-
// Delete the preset from global storage or player-specific presets
184+
// delete preset from global or player-specific storage
185185
if (playerName != null) {
186186
Player player = Bukkit.getPlayer(playerName);
187187
if (player != null) {
@@ -194,7 +194,7 @@ protected void execute(Event e) {
194194
}
195195

196196
private ArrayList<String> getPlayerPresetAbilities(UUID playerUUID, String presetName) {
197-
// Get the player-specific preset abilities
197+
// get player preset abilities
198198
for (Preset preset : Preset.presets.get(playerUUID)) {
199199
if (preset.getName().equals(presetName)) {
200200
return new ArrayList<>(preset.getAbilities().values());

src/me/anxelok/syntax/effects/EffToggleBending.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@
2121
@Since("1.0")
2222
public class EffToggleBending extends Effect {
2323
private Expression<Player> playerExpr;
24-
private String mode; // "toggle", "on", "off"
24+
private String mode; // toggle, on, off
2525

2626
static {
27+
// register the effect with Skript
2728
Skript.registerEffect(EffToggleBending.class,
2829
"toggle %player%'s bending",
2930
"toggle %player%'s bending to on",
@@ -51,6 +52,7 @@ protected void execute(Event e) {
5152
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
5253
if (bPlayer == null) return;
5354

55+
// toggle, on, or off
5456
switch (mode) {
5557
case "toggle":
5658
bPlayer.toggleBending();
@@ -66,6 +68,7 @@ protected void execute(Event e) {
6668

6769
@Override
6870
public String toString(@Nullable Event e, boolean debug) {
71+
// return effect string
6972
return "toggle " + playerExpr.toString(e, debug) + "'s bending" +
7073
(mode.equals("toggle") ? "" : " to " + mode);
7174
}

src/me/anxelok/syntax/expressions/ExprBendingAbilities.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
public class ExprBendingAbilities extends SimpleExpression<String> {
2121

2222
private ch.njol.skript.lang.Expression<Player> playerExpr;
23-
private static final int MAX_SLOTS = 9; // Maximum number of ability slots
23+
private static final int MAX_SLOTS = 9; // max ability slots
2424

2525
static {
2626
Skript.registerExpression(ExprBendingAbilities.class, String.class,
@@ -38,28 +38,25 @@ public boolean init(ch.njol.skript.lang.Expression<?>[] exprs, int matchedPatter
3838
@Override
3939
protected String[] get(Event e) {
4040
Player player = playerExpr.getSingle(e);
41-
if (player == null) return new String[0];
41+
if (player == null) return new String[0]; // no player
4242
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
43-
if (bPlayer == null) return new String[0];
43+
if (bPlayer == null) return new String[0]; // no bending player
4444

45-
// Get the abilities map (slot -> ability name)
45+
// get abilities from slots
4646
java.util.Map<Integer, String> abilities = bPlayer.getAbilities();
4747

48-
// Create an array with a fixed length of MAX_SLOTS.
48+
// create output array
4949
String[] output = new String[MAX_SLOTS];
5050
for (int slot = 1; slot <= MAX_SLOTS; slot++) {
51-
if (abilities != null && abilities.containsKey(slot)) {
52-
output[slot - 1] = abilities.get(slot);
53-
} else {
54-
output[slot - 1] = ""; // or you could use "none" as a placeholder
55-
}
51+
// fill slots with abilities or empty
52+
output[slot - 1] = abilities != null && abilities.containsKey(slot) ? abilities.get(slot) : "";
5653
}
5754
return output;
5855
}
5956

6057
@Override
6158
public boolean isSingle() {
62-
return false; // We return a list of abilities (one for each slot).
59+
return false; // return list
6360
}
6461

6562
@Override

src/me/anxelok/syntax/expressions/ExprBendingStatus.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
public class ExprBendingStatus extends SimpleExpression<Boolean> {
2222

2323
private Expression<Player> playerExpr;
24-
private boolean checkStatus; // true to check if bending is on, false to check if bending is off
24+
private boolean checkStatus; // true for on, false for off
2525

2626
static {
2727
Skript.registerExpression(ExprBendingStatus.class, Boolean.class, ExpressionType.SIMPLE,
@@ -38,18 +38,18 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
3838
@Override
3939
public Boolean[] get(Event e) {
4040
Player player = playerExpr.getSingle(e);
41-
if (player == null) return new Boolean[0]; // Return empty array if no player found
41+
if (player == null) return new Boolean[0]; // no player
4242

4343
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
44-
if (bPlayer == null) return new Boolean[0]; // Return empty array if no BendingPlayer is found
44+
if (bPlayer == null) return new Boolean[0]; // no bending player
4545

46-
// Return whether bending is enabled or not
46+
// check if bending is on
4747
return new Boolean[] { bPlayer.isToggled() };
4848
}
4949

5050
@Override
5151
public boolean isSingle() {
52-
return true; // We return a single boolean (whether bending is on or off)
52+
return true; // returns one value
5353
}
5454

5555
@Override

0 commit comments

Comments
 (0)