Skip to content

Commit 15e293b

Browse files
committed
denizenscript impl 1
1 parent e6facd3 commit 15e293b

10 files changed

Lines changed: 450 additions & 2 deletions

File tree

Bootstrap/Spigot/src/main/java/cz/neumimto/rpg/SpigotRpgBootstrap.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
@SoftDependency("HolographicDisplays"),
2626
@SoftDependency("MythicMobs"),
2727
@SoftDependency("MMOItems"),
28-
@SoftDependency("RPGRegions")
28+
@SoftDependency("RPGRegions"),
29+
@SoftDependency("Mimic")
2930
}
3031
)
3132
@DependsOn(

Implementations/Spigot/build.gradle

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ repositories {
3333
includeGroupByRegex "(net\\.Indyuce|io\\.lumine)"
3434
}
3535
}
36-
36+
maven {
37+
url "https://ci.citizensnpcs.co/job/Denizen/"
38+
}
39+
maven {
40+
url = "https://repo.citizensnpcs.co"
41+
}
3742
}
3843

3944
group = 'cz.neumimto.rpg'
@@ -56,6 +61,7 @@ dependencies {
5661

5762
compileOnly 'io.papermc.paper:paper-api:' + project.spigotapi
5863

64+
compileOnly"com.denizenscript:denizen:1.2.3-SNAPSHOT"
5965
compileOnly("org.spigotmc:plugin-annotations:" + project.pluginannotations) {
6066
exclude group: "org.bukkit", module: "bukkit"
6167
}
@@ -65,10 +71,13 @@ dependencies {
6571
}
6672

6773
api 'com.elmakers.mine.bukkit:EffectLib:' + project.effectlib
74+
75+
6876
// compileOnly 'placeholderapi.me.clip:placeholderapi:' + project.papi
6977
compileOnly 'com.gmail.filoghost.holographicdisplays:holographicdisplays-api:' + project.hdisplays
7078
compileOnly "co.aikar:acf-paper:" + project.acf
7179
compileOnly "io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT"
80+
compileOnly "ru.endlesscode.mimic:mimic-bukkit-api:" + project.mimic
7281

7382
// compileOnly('net.Indyuce:MMOItems:' + project.mmoitems) {
7483
// exclude group: 'com.mojang', module: 'authlib'

Implementations/Spigot/src/main/java/cz/neumimto/rpg/spigot/SpigotRpgPlugin.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import cz.neumimto.rpg.persistence.flatfiles.FlatFilesModule;
1818
import cz.neumimto.rpg.spigot.bridges.HolographicDisplaysExpansion;
1919
import cz.neumimto.rpg.spigot.bridges.NtRpgPlaceholderExpansion;
20+
import cz.neumimto.rpg.spigot.bridges.mimic.MimicHook;
2021
import cz.neumimto.rpg.spigot.bridges.mmoitems.MMOItemsExpansion;
2122
import cz.neumimto.rpg.spigot.bridges.mythicalmobs.MythicalMobsExpansion;
2223
import cz.neumimto.rpg.spigot.bridges.rpgregions.RpgRegionsClassExpReward;
@@ -161,6 +162,12 @@ public void enable(Data data) {
161162
Rpg.get().registerListeners(injector.getInstance(OnKeyPress.class));
162163
PacketHandler.init();
163164
new SpigotSkillTreeViewModel(); //just to call static block
165+
166+
if (Bukkit.getPluginManager().isPluginEnabled("Mimic")) {
167+
MimicHook mimicHook = injector.getInstance(MimicHook.class);
168+
mimicHook.init(plugin);
169+
}
170+
164171
});
165172

166173
if (!testEnv) {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package cz.neumimto.rpg.spigot.bridges.denizen;
2+
3+
import com.denizenscript.denizen.events.entity.EntityKilledScriptEvent;
4+
import com.denizenscript.denizencore.events.ScriptEvent;
5+
import com.denizenscript.denizencore.objects.ObjectFetcher;
6+
import cz.neumimto.rpg.common.skills.SkillConfigLoader;
7+
import cz.neumimto.rpg.common.skills.SkillConfigLoaders;
8+
import cz.neumimto.rpg.spigot.bridges.denizen.tags.CharacterTag;
9+
import cz.neumimto.rpg.spigot.bridges.denizen.tags.SkillContextTag;
10+
import org.bukkit.plugin.Plugin;
11+
12+
public class DenizenHook {
13+
14+
public static SkillConfigLoader DENIZEN_SCRIPT = new SkillConfigLoader("denizen", DenizenScriptSkillWrapper.class);
15+
16+
public void init(Plugin plugin) {
17+
SkillConfigLoaders.register(DENIZEN_SCRIPT);
18+
ObjectFetcher.registerWithObjectFetcher(CharacterTag.class, CharacterTag.tagProcessor); // char@
19+
ObjectFetcher.registerWithObjectFetcher(SkillContextTag.class, SkillContextTag.tagProcessor); // skillcontext@
20+
ScriptEvent.registerScriptEvent(EntityKilledScriptEvent.class);
21+
}
22+
23+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package cz.neumimto.rpg.spigot.bridges.denizen;
2+
3+
import cz.neumimto.rpg.common.ResourceLoader;
4+
import cz.neumimto.rpg.common.skills.PlayerSkillContext;
5+
import cz.neumimto.rpg.common.skills.SkillData;
6+
import cz.neumimto.rpg.common.skills.SkillResult;
7+
import cz.neumimto.rpg.common.skills.types.ActiveSkill;
8+
import cz.neumimto.rpg.spigot.entities.players.ISpigotCharacter;
9+
10+
public class DenizenScriptSkillWrapper extends ActiveSkill<ISpigotCharacter> {
11+
12+
private String catalogId;
13+
14+
public DenizenScriptSkillWrapper() {
15+
ResourceLoader.Skill sk = this.getClass().getAnnotation(ResourceLoader.Skill.class);
16+
if (sk != null) {
17+
catalogId = sk.value().toLowerCase();
18+
}
19+
}
20+
21+
@Override
22+
public SkillResult cast(ISpigotCharacter character, PlayerSkillContext info) {
23+
EntityCastSkillDenizenEvent event = new EntityCastSkillDenizenEvent();
24+
event.character = character;
25+
event.context = info;
26+
event.fire();
27+
return SkillResult.OK;
28+
}
29+
30+
@Override
31+
public DenizenSkillData constructSkillData() {
32+
return new DenizenSkillData(getId());
33+
}
34+
35+
public static class DenizenSkillData extends SkillData {
36+
37+
private String scriptPath;
38+
39+
public DenizenSkillData(String skill) {
40+
super(skill);
41+
}
42+
43+
public String getScriptPath() {
44+
return scriptPath;
45+
}
46+
47+
public void setScriptPath(String scriptPath) {
48+
this.scriptPath = scriptPath;
49+
}
50+
}
51+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package cz.neumimto.rpg.spigot.bridges.denizen;
2+
3+
import com.denizenscript.denizen.events.BukkitScriptEvent;
4+
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
5+
import com.denizenscript.denizencore.objects.ObjectTag;
6+
import com.denizenscript.denizencore.scripts.ScriptEntryData;
7+
import cz.neumimto.rpg.common.skills.PlayerSkillContext;
8+
import cz.neumimto.rpg.spigot.bridges.denizen.tags.CharacterTag;
9+
import cz.neumimto.rpg.spigot.bridges.denizen.tags.SkillContextTag;
10+
import cz.neumimto.rpg.spigot.entities.players.ISpigotCharacter;
11+
12+
public class EntityCastSkillDenizenEvent extends BukkitScriptEvent {
13+
14+
public ISpigotCharacter character;
15+
public PlayerSkillContext context;
16+
17+
public static EntityCastSkillDenizenEvent instance;
18+
19+
public EntityCastSkillDenizenEvent() {
20+
this.registerCouldMatcher("<entity> casts skill <'skill'>");
21+
instance = this;
22+
}
23+
24+
25+
@Override
26+
public boolean matches(ScriptPath path) {
27+
String cmd = path.eventArgLowerAt(1);
28+
String arg0 = path.eventArgLowerAt(0);
29+
String arg2 = path.eventArgLowerAt(2);
30+
String arg3 = path.eventArgLowerAt(3);
31+
String attacker = cmd.equals("kills") ? arg0 : arg2.equals("by") ? arg3 : "";
32+
String target = cmd.equals("kills") ? arg2 : arg0;
33+
34+
// if (!attacker.isEmpty()) {
35+
// if (damager != null) {
36+
// if (!cause.asString().equals(attacker) &&
37+
// !tryEntity(projectile, attacker) && !tryEntity(damager, attacker)) {
38+
// return false;
39+
// }
40+
// }
41+
// else if (!cause.asString().equals(attacker)) {
42+
// return false;
43+
// }
44+
// }
45+
46+
// if (!tryEntity(entity, target)) {
47+
// return false;
48+
// }
49+
50+
// if (!runInCheck(path, entity.getLocation())) {
51+
// return false;
52+
// }
53+
54+
return super.matches(path);
55+
}
56+
57+
@Override
58+
public String getName() {
59+
return "EntityCastsSkill";
60+
}
61+
62+
public ObjectTag getContext(String name) {
63+
switch (name) {
64+
case "caster":
65+
return new CharacterTag(character);
66+
case "skill_context":
67+
return new SkillContextTag(context, character);
68+
}
69+
return super.getContext(name);
70+
}
71+
72+
public ScriptEntryData getScriptEntryData() {
73+
return new BukkitScriptEntryData(character.getPlayer());
74+
}
75+
76+
77+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package cz.neumimto.rpg.spigot.bridges.denizen.tags;
2+
3+
import com.denizenscript.denizen.objects.EntityFormObject;
4+
import com.denizenscript.denizen.objects.EntityTag;
5+
import com.denizenscript.denizen.objects.PlayerTag;
6+
import com.denizenscript.denizencore.objects.Fetchable;
7+
import com.denizenscript.denizencore.objects.ObjectTag;
8+
import com.denizenscript.denizencore.tags.ObjectTagProcessor;
9+
import com.denizenscript.denizencore.tags.TagContext;
10+
import cz.neumimto.rpg.common.Rpg;
11+
import cz.neumimto.rpg.common.entity.players.IActiveCharacter;
12+
import org.bukkit.entity.Entity;
13+
import org.bukkit.entity.Player;
14+
15+
import java.util.UUID;
16+
17+
public class CharacterTag implements EntityFormObject {
18+
19+
private IActiveCharacter character;
20+
private String prefix;
21+
22+
public static ObjectTagProcessor<CharacterTag> tagProcessor = new ObjectTagProcessor<>();
23+
24+
public CharacterTag(IActiveCharacter character) {
25+
this.character = character;
26+
}
27+
28+
public IActiveCharacter getCharacter() {
29+
return character;
30+
}
31+
32+
public Player player() {
33+
return (Player) character.getEntity();
34+
}
35+
36+
@Override
37+
public EntityTag getDenizenEntity() {
38+
return new EntityTag((Entity) character.getEntity());
39+
}
40+
41+
@Override
42+
public String getPrefix() {
43+
return prefix;
44+
}
45+
46+
@Override
47+
public boolean isUnique() {
48+
return true;
49+
}
50+
51+
@Override
52+
public String getObjectType() {
53+
return "Character";
54+
}
55+
56+
@Override
57+
public String identify() {
58+
return "char@" + character.getUUID();
59+
}
60+
61+
@Fetchable("char")
62+
public static CharacterTag valueOf(String string, TagContext context) {
63+
if (string == null) {
64+
return null;
65+
} else {
66+
if (string.startsWith("char@")) {
67+
string = string.substring("char@".length());
68+
UUID uuid = UUID.fromString(string);
69+
return new CharacterTag(Rpg.get().getCharacterService().getCharacter(uuid));
70+
}
71+
}
72+
return null;
73+
}
74+
75+
@Override
76+
public String identifySimple() {
77+
return this.identify();
78+
}
79+
80+
@Override
81+
public ObjectTag setPrefix(String s) {
82+
this.prefix = s;
83+
return this;
84+
}
85+
86+
public static void registerTags() {
87+
tagProcessor.registerTag(PlayerTag.class, "player", (attribute, object) -> new PlayerTag(object.player()));
88+
}
89+
}

0 commit comments

Comments
 (0)