1.0.0-SNAPSHOT-U44

+ Added Disarm, Fireball, Grapple, Insidious, Knockback, Launch, Lightning and Warp skill and started minions
+ Updated skills.json to hold all the new skills, and give examples on setting them up.
This commit is contained in:
AMinecraftDev 2018-11-11 19:36:16 +08:00
parent db762912bf
commit 846244ffe6
15 changed files with 455 additions and 12 deletions

View File

@ -35,17 +35,6 @@
}
]
},
"Knockback1": {
"mode": "ALL",
"type": "CUSTOM",
"radius": 10,
"displayName": "Knockback",
"customMessage": null,
"custom": {
"type": "KNOCKBACK",
"multiplier": 2.5
}
},
"Cage1": {
"mode": "ALL",
"type": "CUSTOM",
@ -61,6 +50,111 @@
"insideType": "WATER"
}
},
"Disarm1": {
"mode": "ONE",
"type": "CUSTOM",
"radius": 10,
"displayName": "Disarm",
"customMessage": null,
"custom": {
"type": "DISARM",
"multiplier": null
}
},
"Fireball1": {
"mode": "RANDOM",
"type": "CUSTOM",
"radius": 10,
"displayName": "Fireball",
"customMessage": null,
"custom": {
"type": "FIREBALL",
"multiplier": 3.0
}
},
"Grapple1": {
"mode": "RANDOM",
"type": "CUSTOM",
"radius": 10,
"displayName": "Grapple",
"customMessage": null,
"custom": {
"type": "GRAPPLE",
"multiplier": 3.0
}
},
"Insidious1": {
"mode": "RANDOM",
"type": "CUSTOM",
"radius": 10,
"displayName": "Insidious",
"customMessage": null,
"custom": {
"type": "INSIDIOUS",
"multiplier": 2.5
}
},
"Knockback1": {
"mode": "ALL",
"type": "CUSTOM",
"radius": 10,
"displayName": "Knockback",
"customMessage": null,
"custom": {
"type": "KNOCKBACK",
"multiplier": 2.5
}
},
"Launch1": {
"mode": "ALL",
"type": "CUSTOM",
"radius": 10,
"displayName": "Launch",
"customMessage": null,
"custom": {
"type": "LAUNCH",
"multiplier": 3.0
}
},
"Lightning1": {
"mode": "ALL",
"type": "CUSTOM",
"radius": 10,
"displayName": "Lightning",
"customMessage": null,
"custom": {
"type": "LIGHTNING",
"multiplier": null
}
},
"Minions1": {
"mode": "ALL",
"type": "CUSTOM",
"radius": 10,
"displayName": "Minions",
"customMessage": null,
"custom": {
"type": "MINIONS",
"multiplier": null
},
"minions": {
"amount": 5,
"bosses": [
"Minion1"
]
}
},
"Warp1": {
"mode": "ONE",
"type": "CUSTOM",
"radius": 10,
"displayName": "Warp",
"customMessage": null,
"custom": {
"type": "WARP",
"multiplier": null
}
},
"Shazaam1": {
"mode": "ALL",
"type": "GROUP",

View File

@ -43,6 +43,14 @@ public class ActiveBossHolder {
}
}
public LivingEntity getLivingEntity() {
for(LivingEntity livingEntity : getLivingEntityMap().values()) {
if(livingEntity != null) return livingEntity;
}
return null;
}
public boolean hasAttacked(UUID uuid) {
return this.mapOfDamagingUsers.containsKey(uuid);
}

View File

@ -1,6 +1,7 @@
package com.songoda.epicbosses.skills.custom;
import com.google.gson.annotations.Expose;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.custom.cage.CageLocationData;
import com.songoda.epicbosses.skills.custom.cage.CagePlayerData;
@ -32,6 +33,10 @@ public class Cage extends CustomSkill {
@Expose @Getter @Setter private CustomCageSkillElement cage;
public Cage(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
nearbyEntities.forEach(livingEntity -> {

View File

@ -0,0 +1,69 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import com.songoda.epicbosses.utils.Message;
import com.songoda.epicbosses.utils.RandomUtils;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Disarm extends CustomSkill {
public Disarm(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
nearbyEntities.forEach(livingEntity -> {
EntityEquipment entityEquipment = livingEntity.getEquipment();
int itemSlot = RandomUtils.get().getRandomNumber(5);
ItemStack replacementItemStack = new ItemStack(Material.AIR);
ItemStack itemStack;
switch (itemSlot) {
case 0:
if(livingEntity instanceof HumanEntity) {
HumanEntity humanEntity = (HumanEntity) livingEntity;
itemStack = getPlugin().getVersionHandler().getItemInHand(humanEntity);
getPlugin().getVersionHandler().setItemInHand(humanEntity, replacementItemStack);
break;
}
case 1:
itemStack = entityEquipment.getHelmet();
entityEquipment.setHelmet(replacementItemStack);
break;
case 2:
itemStack = entityEquipment.getChestplate();
entityEquipment.setChestplate(replacementItemStack);
break;
case 3:
itemStack = entityEquipment.getLeggings();
entityEquipment.setLeggings(replacementItemStack);
break;
default:
case 4:
itemStack = entityEquipment.getBoots();
entityEquipment.setBoots(replacementItemStack);
break;
}
if(itemStack == null || itemStack.getType() == Material.AIR) return;
livingEntity.getWorld().dropItemNaturally(livingEntity.getLocation(), itemStack);
Message.General_Disarmed.msg(livingEntity);
});
}
}

View File

@ -0,0 +1,43 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.entity.LivingEntity;
import org.bukkit.util.Vector;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Fireball extends CustomSkill {
public Fireball(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
LivingEntity boss = activeBossHolder.getLivingEntity();
if(boss == null) return;
Double multiplier = getCustom().getMultiplier();
if(multiplier == null) multiplier = 1.0;
double finalMultiplier = multiplier;
nearbyEntities.forEach(livingEntity -> {
Vector vector = livingEntity.getLocation().subtract(activeBossHolder.getLocation()).toVector().normalize().multiply(finalMultiplier);
org.bukkit.entity.Fireball fireball = livingEntity.getWorld().spawn(activeBossHolder.getLocation(), org.bukkit.entity.Fireball.class);
fireball.setShooter(boss);
fireball.setDirection(vector);
fireball.setIsIncendiary(false);
});
}
}

View File

@ -0,0 +1,39 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.bukkit.util.Vector;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Grapple extends CustomSkill {
public Grapple(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
Location bossLocation = activeBossHolder.getLocation();
Double multiplier = getCustom().getMultiplier();
if(multiplier == null) multiplier = 1.0;
double finalMultiplier = multiplier;
nearbyEntities.forEach(livingEntity -> {
Location location = livingEntity.getLocation();
Vector vector = location.toVector().subtract(bossLocation.toVector()).normalize().multiply(finalMultiplier);
livingEntity.setVelocity(vector);
});
}
}

View File

@ -0,0 +1,31 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.entity.LivingEntity;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Insidious extends CustomSkill {
public Insidious(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
Double multiplier = getCustom().getMultiplier();
if(multiplier == null) multiplier = 2.5;
double finalMultiplier = multiplier;
nearbyEntities.forEach(livingEntity -> livingEntity.setFireTicks(((int) finalMultiplier) * 20));
}
}

View File

@ -0,0 +1,39 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.bukkit.util.Vector;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Knockback extends CustomSkill {
public Knockback(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
Double multiplier = getCustom().getMultiplier();
if(multiplier == null) multiplier = 2.5;
double finalMultiplier = multiplier;
Location bossLocation = activeBossHolder.getLocation();
nearbyEntities.forEach(livingEntity -> {
Location throwLocation = livingEntity.getEyeLocation();
Vector vector = throwLocation.toVector().subtract(bossLocation.toVector()).normalize().multiply(finalMultiplier);
livingEntity.setVelocity(vector);
});
}
}

View File

@ -0,0 +1,28 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Launch extends CustomSkill {
public Launch(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
Location bossLocation = activeBossHolder.getLocation();
nearbyEntities.forEach(livingEntity -> livingEntity.teleport(bossLocation.clone().add(0, 35, 0)));
}
}

View File

@ -0,0 +1,25 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.entity.LivingEntity;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Lightning extends CustomSkill {
public Lightning(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
nearbyEntities.forEach(livingEntity -> livingEntity.getWorld().strikeLightningEffect(livingEntity.getEyeLocation()));
}
}

View File

@ -0,0 +1,27 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.entity.LivingEntity;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*
* TODO
*/
public class Minions extends CustomSkill {
public Minions(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
}
}

View File

@ -0,0 +1,27 @@
package com.songoda.epicbosses.skills.custom;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.skills.types.CustomSkill;
import org.bukkit.entity.LivingEntity;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 11-Nov-18
*/
public class Warp extends CustomSkill {
public Warp(CustomBosses plugin) {
super(plugin);
}
@Override
public void castSkill(ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
LivingEntity target = nearbyEntities.get(0);
activeBossHolder.getLivingEntity().teleport(target);
}
}

View File

@ -1,6 +1,7 @@
package com.songoda.epicbosses.skills.types;
import com.google.gson.annotations.Expose;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.skills.Skill;
import com.songoda.epicbosses.skills.elements.CustomSkillElement;
import lombok.Getter;
@ -13,6 +14,12 @@ import lombok.Setter;
*/
public abstract class CustomSkill extends Skill {
@Getter private final CustomBosses plugin;
public CustomSkill(CustomBosses plugin) {
this.plugin = plugin;
}
@Expose @Getter @Setter private CustomSkillElement custom;
}

View File

@ -18,6 +18,7 @@ public enum Message {
General_LocationFormat("{world}, {x}, {y}, {z}"),
General_MustBePlayer("&c&l(!) &cYou must be a player to use this command."),
General_CannotSpawn("&c&l(!) &cYou cannot spawn a boss at this location! &c&l(!)"),
General_Disarmed("&4&l(!) &f&lYOU HAVE BEEN DISARMED! CHECK THE GROUND AROUND YOU FOR YOUR ITEM!"),
Boss_Create_EntityTypeNotFound("&c&l(!) &cThe specified entity type {0} was not found. If you think this is an error please contact &fAMinecraftDev&c."),
Boss_Create_InvalidArgs("&c&l(!) &cYou must use &n/boss create [name] [entity] &c to create a boss."),

View File

@ -19,7 +19,7 @@
</modules>
<properties>
<plugin.version>1.0.0-SNAPSHOT-U43</plugin.version>
<plugin.version>1.0.0-SNAPSHOT-U44</plugin.version>
<plugin.name>EpicBosses</plugin.name>
<plugin.main>com.songoda.epicbosses.CustomBosses</plugin.main>
<plugin.author>AMinecraftDev</plugin.author>