mirror of
https://github.com/Auxilor/EcoMobs.git
synced 2025-12-21 16:09:24 +00:00
Continued development
This commit is contained in:
@@ -6,5 +6,5 @@ import org.bukkit.Location;
|
|||||||
* NMS Interface for managing illusioner bosses
|
* NMS Interface for managing illusioner bosses
|
||||||
*/
|
*/
|
||||||
public interface IllusionerWrapper {
|
public interface IllusionerWrapper {
|
||||||
EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage);
|
EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage, String name);
|
||||||
}
|
}
|
||||||
@@ -15,8 +15,11 @@ import org.bukkit.plugin.Plugin;
|
|||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
public class EntityIllusioner extends EntityIllagerIllusioner implements EntityIllusionerWrapper {
|
public class EntityIllusioner extends EntityIllagerIllusioner implements EntityIllusionerWrapper {
|
||||||
public EntityIllusioner(Location location, double maxHealth, double attackDamage) {
|
private final String displayName;
|
||||||
|
|
||||||
|
public EntityIllusioner(Location location, double maxHealth, double attackDamage, String name) {
|
||||||
super(EntityTypes.ILLUSIONER, ((CraftWorld) location.getWorld()).getHandle());
|
super(EntityTypes.ILLUSIONER, ((CraftWorld) location.getWorld()).getHandle());
|
||||||
|
this.displayName = name;
|
||||||
|
|
||||||
this.setPosition(location.getX(), location.getY(), location.getZ());
|
this.setPosition(location.getX(), location.getY(), location.getZ());
|
||||||
|
|
||||||
@@ -43,7 +46,7 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createBossbar(Plugin plugin, BarColor color, BarStyle style) {
|
public void createBossbar(Plugin plugin, BarColor color, BarStyle style) {
|
||||||
String name = this.getName();
|
String name = this.getDisplayName().getText();
|
||||||
BossBar bossBar = Bukkit.getServer().createBossBar(name, color, style, (BarFlag) null);
|
BossBar bossBar = Bukkit.getServer().createBossBar(name, color, style, (BarFlag) null);
|
||||||
Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer);
|
Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer);
|
||||||
LivingEntity entity = (LivingEntity) this.getBukkitEntity();
|
LivingEntity entity = (LivingEntity) this.getBukkitEntity();
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
|
|||||||
|
|
||||||
public class Illusioner implements IllusionerWrapper {
|
public class Illusioner implements IllusionerWrapper {
|
||||||
@Override
|
@Override
|
||||||
public EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage) {
|
public EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage, String name) {
|
||||||
EntityIllusioner illusioner = new EntityIllusioner(location, maxHealth, attackDamage);
|
EntityIllusioner illusioner = new EntityIllusioner(location, maxHealth, attackDamage, name);
|
||||||
((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner);
|
((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner);
|
||||||
return illusioner;
|
return illusioner;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,20 +13,8 @@ dependencies {
|
|||||||
implementation 'org.bstats:bstats-bukkit:1.7'
|
implementation 'org.bstats:bstats-bukkit:1.7'
|
||||||
compileOnly 'org.spigotmc:spigot-api:1.16.3-R0.1-SNAPSHOT'
|
compileOnly 'org.spigotmc:spigot-api:1.16.3-R0.1-SNAPSHOT'
|
||||||
compileOnly 'commons-io:commons-io:2.8.0'
|
compileOnly 'commons-io:commons-io:2.8.0'
|
||||||
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.4-SNAPSHOT'
|
|
||||||
compileOnly 'com.github.TechFortress:GriefPrevention:16.14.0'
|
|
||||||
compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10'
|
|
||||||
compileOnly 'com.github.cryptomorin:kingdoms:1.10.3.1'
|
|
||||||
shadow files('../lib/SpartanAPI.jar')
|
|
||||||
compileOnly 'com.github.TownyAdvanced:Towny:0.96.2.0'
|
|
||||||
compileOnly 'com.github.angeschossen:LandsAPI:4.7.3'
|
|
||||||
compileOnly 'fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT'
|
|
||||||
compileOnly 'de.janmm14:aac-api:4.2.0'
|
|
||||||
compileOnly 'com.github.jiangdashao:matrix-api-repo:317d4635fd'
|
|
||||||
compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.0-SNAPSHOT'
|
|
||||||
compileOnly 'com.destroystokyo.paper:paper-api:1.16.3-R0.1-SNAPSHOT'
|
|
||||||
compileOnly 'com.gmail.nossr50.mcMMO:mcMMO:2.1.157'
|
|
||||||
compileOnly 'me.clip:placeholderapi:2.10.9'
|
compileOnly 'me.clip:placeholderapi:2.10.9'
|
||||||
|
compileOnly 'com.willfp:EcoEnchants:5.3.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
|
|||||||
@@ -1,105 +0,0 @@
|
|||||||
package com.willfp.illusioner.illusioner;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.util.NumberUtils;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.ExperienceOrb;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class AttackListeners implements Listener {
|
|
||||||
@EventHandler
|
|
||||||
public void onIllusionerAttack(EntityDamageByEntityEvent event) {
|
|
||||||
if(!event.getDamager().getType().equals(EntityType.ILLUSIONER))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(!(event.getEntity() instanceof Player))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Player player = (Player) event.getEntity();
|
|
||||||
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 40, 1));
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_CAST_SPELL, 1, 1f);
|
|
||||||
if(!player.hasPotionEffect(PotionEffectType.CONFUSION)) {
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 10));
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_CAST_SPELL, 1, 2f);
|
|
||||||
}
|
|
||||||
if(NumberUtils.randInt(1, 10) <= 2) {
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 40, 2));
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_CAST_SPELL, 1, 2f);
|
|
||||||
}
|
|
||||||
if(NumberUtils.randInt(1, 10) <= 2) {
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 40, 2));
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_CAST_SPELL, 1, 2f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(NumberUtils.randInt(1, 20) == 1) {
|
|
||||||
List<ItemStack> hotbar = new ArrayList<>();
|
|
||||||
for(int i = 0; i<9; i++) {
|
|
||||||
hotbar.add(player.getInventory().getItem(i));
|
|
||||||
}
|
|
||||||
Collections.shuffle(hotbar);
|
|
||||||
int i2 = 0;
|
|
||||||
for(ItemStack item : hotbar) {
|
|
||||||
player.getInventory().setItem(i2, item);
|
|
||||||
i2++;
|
|
||||||
}
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_ENDER_PEARL_THROW, 1, 0.5f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onIllusionerDamageByPlayer(EntityDamageByEntityEvent event) {
|
|
||||||
if(!event.getEntity().getType().equals(EntityType.ILLUSIONER))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(!(event.getDamager() instanceof Player))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Player player = (Player) event.getDamager();
|
|
||||||
|
|
||||||
if(NumberUtils.randInt(1, 10) == 1) {
|
|
||||||
Location loc = player.getLocation().add(NumberUtils.randInt(2,6), 0, NumberUtils.randInt(2,6));
|
|
||||||
while(!loc.getBlock().getType().equals(Material.AIR)) {
|
|
||||||
loc.add(0, 1, 0);
|
|
||||||
}
|
|
||||||
player.getWorld().spawnEntity(loc, EntityType.EVOKER);
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_EVOKER_PREPARE_ATTACK, 1, 2f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(NumberUtils.randInt(1, 10) == 1) {
|
|
||||||
Location loc = player.getLocation().add(NumberUtils.randInt(2,6), 0, NumberUtils.randInt(2,6));
|
|
||||||
while(!loc.getBlock().getType().equals(Material.AIR)) {
|
|
||||||
loc.add(0, 1, 0);
|
|
||||||
}
|
|
||||||
player.getWorld().spawnEntity(loc, EntityType.VINDICATOR);
|
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_EVOKER_PREPARE_ATTACK, 1, 2f);
|
|
||||||
}
|
|
||||||
|
|
||||||
ExperienceOrb experienceOrb = (ExperienceOrb) event.getEntity().getWorld().spawnEntity(event.getEntity().getLocation(), EntityType.EXPERIENCE_ORB);
|
|
||||||
experienceOrb.setExperience(NumberUtils.randInt(5,20));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onIllusionerDamage(EntityDamageEvent event) {
|
|
||||||
if(!event.getEntity().getType().equals(EntityType.ILLUSIONER))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)
|
|
||||||
|| event.getCause().equals(EntityDamageEvent.DamageCause.BLOCK_EXPLOSION)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.willfp.illusioner.illusioner;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
public class BlockStructure {
|
||||||
|
private final Material bottom;
|
||||||
|
private final Material middle;
|
||||||
|
private final Material top;
|
||||||
|
|
||||||
|
public BlockStructure(Material bottom, Material middle, Material top) {
|
||||||
|
this.bottom = bottom;
|
||||||
|
this.middle = middle;
|
||||||
|
this.top = top;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material getBottom() {
|
||||||
|
return bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material getMiddle() {
|
||||||
|
return middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material getTop() {
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean matches(BlockStructure structure) {
|
||||||
|
return structure.getBottom().equals(IllusionerManager.OPTIONS.getSpawnStructure().getBottom())
|
||||||
|
&& structure.getMiddle().equals(IllusionerManager.OPTIONS.getSpawnStructure().getMiddle())
|
||||||
|
&& structure.getTop().equals(IllusionerManager.OPTIONS.getSpawnStructure().getTop());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
package com.willfp.illusioner.illusioner;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.util.NumberUtils;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.ExperienceOrb;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
|
||||||
|
|
||||||
public class DeathListeners implements Listener {
|
|
||||||
@EventHandler
|
|
||||||
public void onIllusionerDeath(EntityDeathEvent event) {
|
|
||||||
if(!event.getEntityType().equals(EntityType.ILLUSIONER))
|
|
||||||
return;
|
|
||||||
|
|
||||||
event.getEntity().getWorld().playSound(event.getEntity().getLocation(), Sound.ENTITY_EVOKER_PREPARE_WOLOLO, 50, 0.8f);
|
|
||||||
event.getEntity().getWorld().playSound(event.getEntity().getLocation(), Sound.ENTITY_ILLUSIONER_PREPARE_BLINDNESS, 50, 1f);
|
|
||||||
event.getEntity().getWorld().playSound(event.getEntity().getLocation(), Sound.ENTITY_WITHER_DEATH, 50, 2f);
|
|
||||||
|
|
||||||
ExperienceOrb eo1 = (ExperienceOrb) event.getEntity().getWorld().spawnEntity(event.getEntity().getLocation(), EntityType.EXPERIENCE_ORB);
|
|
||||||
eo1.setExperience(NumberUtils.randInt(20000,25000));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.willfp.illusioner.illusioner;
|
||||||
|
|
||||||
|
import com.willfp.illusioner.illusioner.options.IllusionerOptions;
|
||||||
|
|
||||||
|
public class IllusionerManager {
|
||||||
|
public static final IllusionerOptions OPTIONS = new IllusionerOptions();
|
||||||
|
}
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
package com.willfp.illusioner.illusioner;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.IllusionerPlugin;
|
|
||||||
import com.willfp.illusioner.nms.NMSIllusioner;
|
|
||||||
import com.willfp.illusioner.nms.api.EntityIllusionerWrapper;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.boss.BarColor;
|
|
||||||
import org.bukkit.boss.BarStyle;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
|
||||||
|
|
||||||
public class SpawnListeners implements Listener {
|
|
||||||
@EventHandler
|
|
||||||
public void onSpawn(BlockPlaceEvent event) {
|
|
||||||
if(!event.getBlock().getType().equals(Material.DRAGON_HEAD))
|
|
||||||
return;
|
|
||||||
if(!event.getBlock().getLocation().add(0,-1,0).getBlock().getType().equals(Material.BEACON))
|
|
||||||
return;
|
|
||||||
if(!event.getBlock().getLocation().add(0,-2,0).getBlock().getType().equals(Material.DIAMOND_BLOCK))
|
|
||||||
return;
|
|
||||||
|
|
||||||
try {
|
|
||||||
event.getBlock().getLocation().getBlock().setType(Material.AIR);
|
|
||||||
event.getBlock().getLocation().add(0, -1, 0).getBlock().setType(Material.AIR);
|
|
||||||
event.getBlock().getLocation().add(0, -2, 0).getBlock().setType(Material.AIR);
|
|
||||||
|
|
||||||
event.getBlock().getWorld().playSound(event.getBlock().getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1000, 0.5f);
|
|
||||||
event.getBlock().getWorld().playSound(event.getBlock().getLocation(), Sound.ENTITY_WITHER_SPAWN, 1000, 2f);
|
|
||||||
|
|
||||||
EntityIllusionerWrapper illusioner = NMSIllusioner.spawn(event.getBlock().getLocation(), 600, 50);
|
|
||||||
illusioner.createBossbar(IllusionerPlugin.getInstance(), BarColor.BLUE, BarStyle.SOLID);
|
|
||||||
} catch(Exception ignored) {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package com.willfp.illusioner.illusioner.listeners;
|
||||||
|
|
||||||
|
import com.willfp.illusioner.illusioner.IllusionerManager;
|
||||||
|
import com.willfp.illusioner.util.NumberUtils;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AttackListeners implements Listener {
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onIllusionerAttack(EntityDamageByEntityEvent event) {
|
||||||
|
if(!event.getDamager().getType().equals(EntityType.ILLUSIONER))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!(event.getEntity() instanceof Player))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Player player = (Player) event.getEntity();
|
||||||
|
|
||||||
|
IllusionerManager.OPTIONS.getGameplayOptions().getEffectOptions().forEach(effectOption -> {
|
||||||
|
if(NumberUtils.randFloat(0, 100) > effectOption.getChance())
|
||||||
|
return;
|
||||||
|
|
||||||
|
player.addPotionEffect(new PotionEffect(effectOption.getEffectType(), effectOption.getDuration(), effectOption.getLevel() - 1));
|
||||||
|
});
|
||||||
|
|
||||||
|
if(IllusionerManager.OPTIONS.getGameplayOptions().isShuffle()) {
|
||||||
|
if(NumberUtils.randFloat(0, 100) < IllusionerManager.OPTIONS.getGameplayOptions().getShuffleChance()) {
|
||||||
|
List<ItemStack> hotbar = new ArrayList<>();
|
||||||
|
for(int i = 0; i<9; i++) {
|
||||||
|
hotbar.add(player.getInventory().getItem(i));
|
||||||
|
}
|
||||||
|
Collections.shuffle(hotbar);
|
||||||
|
int i2 = 0;
|
||||||
|
for(ItemStack item : hotbar) {
|
||||||
|
player.getInventory().setItem(i2, item);
|
||||||
|
i2++;
|
||||||
|
}
|
||||||
|
player.playSound(player.getLocation(), Sound.ENTITY_ENDER_PEARL_THROW, 1, 0.5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IllusionerManager.OPTIONS.getGameplayOptions().getSummonerOptions().forEach(summonerOption -> {
|
||||||
|
if(NumberUtils.randFloat(0, 100) > summonerOption.getChance())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Location loc = player.getLocation().add(NumberUtils.randInt(2,6), 0, NumberUtils.randInt(2,6));
|
||||||
|
while(!loc.getBlock().getType().equals(Material.AIR)) {
|
||||||
|
loc.add(0, 1, 0);
|
||||||
|
}
|
||||||
|
player.getWorld().spawnEntity(loc, summonerOption.getType());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onIllusionerDamage(EntityDamageEvent event) {
|
||||||
|
if(!event.getEntity().getType().equals(EntityType.ILLUSIONER))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(IllusionerManager.OPTIONS.getGameplayOptions().isIgnoreExplosionDamage()) {
|
||||||
|
if(event.getCause().equals(EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) || event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.willfp.illusioner.illusioner.listeners;
|
||||||
|
|
||||||
|
import com.willfp.illusioner.events.entitydeathbyentity.EntityDeathByEntityEvent;
|
||||||
|
import com.willfp.illusioner.illusioner.IllusionerManager;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class DeathListeners implements Listener {
|
||||||
|
@EventHandler
|
||||||
|
public void onIllusionerDeath(EntityDeathByEntityEvent event) {
|
||||||
|
if(!event.getDeathEvent().getEntityType().equals(EntityType.ILLUSIONER))
|
||||||
|
return;
|
||||||
|
|
||||||
|
IllusionerManager.OPTIONS.getDeathSounds().forEach(optionedSound -> {
|
||||||
|
if(optionedSound.isBroadcast()) {
|
||||||
|
event.getKiller().getWorld().playSound(event.getVictim().getLocation(), optionedSound.getSound(), optionedSound.getVolume(), optionedSound.getPitch());
|
||||||
|
} else {
|
||||||
|
if(event.getKiller() instanceof Player) {
|
||||||
|
((Player) event.getKiller()).playSound(event.getVictim().getLocation(), optionedSound.getSound(), optionedSound.getVolume(), optionedSound.getPitch());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
event.getDeathEvent().setDroppedExp(IllusionerManager.OPTIONS.generateXp());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.willfp.illusioner.illusioner.listeners;
|
||||||
|
|
||||||
|
import com.willfp.illusioner.IllusionerPlugin;
|
||||||
|
import com.willfp.illusioner.illusioner.BlockStructure;
|
||||||
|
import com.willfp.illusioner.illusioner.IllusionerManager;
|
||||||
|
import com.willfp.illusioner.nms.NMSIllusioner;
|
||||||
|
import com.willfp.illusioner.nms.api.EntityIllusionerWrapper;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class SpawnListeners implements Listener {
|
||||||
|
@EventHandler
|
||||||
|
public void onSpawn(BlockPlaceEvent event) {
|
||||||
|
boolean matches = false;
|
||||||
|
Set<Block> match = new HashSet<>();
|
||||||
|
for(int i = 0; i < 3; i++) {
|
||||||
|
Block block1 = event.getBlock().getRelative(0, i, 0);
|
||||||
|
Block block2 = event.getBlock().getRelative(0, -1 + i, 0);
|
||||||
|
Block block3 = event.getBlock().getRelative(0, -2 + i, 0);
|
||||||
|
matches = BlockStructure.matches(new BlockStructure(block1.getType(), block2.getType(), block3.getType()));
|
||||||
|
if(matches) {
|
||||||
|
match.add(block1);
|
||||||
|
match.add(block2);
|
||||||
|
match.add(block3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!matches)
|
||||||
|
return;
|
||||||
|
|
||||||
|
match.forEach(block -> block.setType(Material.AIR));
|
||||||
|
IllusionerManager.OPTIONS.getSpawnSounds().forEach(optionedSound -> {
|
||||||
|
if(optionedSound.isBroadcast()) {
|
||||||
|
event.getBlock().getWorld().playSound(event.getBlock().getLocation(), optionedSound.getSound(), optionedSound.getVolume(), optionedSound.getPitch());
|
||||||
|
} else {
|
||||||
|
event.getPlayer().playSound(event.getBlock().getLocation(), optionedSound.getSound(), optionedSound.getVolume(), optionedSound.getPitch());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
EntityIllusionerWrapper illusioner = NMSIllusioner.spawn(event.getBlock().getLocation(), IllusionerManager.OPTIONS.getMaxHealth(), IllusionerManager.OPTIONS.getAttackDamage(), IllusionerManager.OPTIONS.getName());
|
||||||
|
illusioner.createBossbar(IllusionerPlugin.getInstance(), IllusionerManager.OPTIONS.getColor(), IllusionerManager.OPTIONS.getStyle());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
package com.willfp.illusioner.illusioner.options;
|
||||||
|
|
||||||
|
import com.willfp.illusioner.util.internal.OptionedSound;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class GameplayOptions {
|
||||||
|
private OptionedSound hitSound;
|
||||||
|
|
||||||
|
private final Set<EffectOption> effectOptions = new HashSet<>();
|
||||||
|
private final Set<SummonerOption> summonerOptions = new HashSet<>();
|
||||||
|
|
||||||
|
private boolean shuffle;
|
||||||
|
private double shuffleChance;
|
||||||
|
|
||||||
|
private boolean ignoreExplosionDamage;
|
||||||
|
|
||||||
|
public void reload() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public OptionedSound getHitSound() {
|
||||||
|
return hitSound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<EffectOption> getEffectOptions() {
|
||||||
|
return effectOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<SummonerOption> getSummonerOptions() {
|
||||||
|
return summonerOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getShuffleChance() {
|
||||||
|
return shuffleChance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isShuffle() {
|
||||||
|
return shuffle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isIgnoreExplosionDamage() {
|
||||||
|
return ignoreExplosionDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class EffectOption {
|
||||||
|
private final double chance;
|
||||||
|
private final int level;
|
||||||
|
private final PotionEffectType effectType;
|
||||||
|
private final int duration;
|
||||||
|
|
||||||
|
public EffectOption(double chance, int level, int duration, PotionEffectType effectType) {
|
||||||
|
this.chance = chance;
|
||||||
|
this.level = level;
|
||||||
|
this.effectType = effectType;
|
||||||
|
this.duration = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getChance() {
|
||||||
|
return chance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLevel() {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PotionEffectType getEffectType() {
|
||||||
|
return effectType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDuration() {
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SummonerOption {
|
||||||
|
private final double chance;
|
||||||
|
private final EntityType type;
|
||||||
|
|
||||||
|
public SummonerOption(double chance, EntityType type) {
|
||||||
|
this.chance = chance;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getChance() {
|
||||||
|
return chance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
package com.willfp.illusioner.illusioner.options;
|
||||||
|
|
||||||
|
import com.willfp.illusioner.illusioner.BlockStructure;
|
||||||
|
import com.willfp.illusioner.util.NumberUtils;
|
||||||
|
import com.willfp.illusioner.util.internal.OptionedSound;
|
||||||
|
import com.willfp.illusioner.util.tuplets.Pair;
|
||||||
|
import org.bukkit.boss.BarColor;
|
||||||
|
import org.bukkit.boss.BarStyle;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class IllusionerOptions {
|
||||||
|
private BarColor color;
|
||||||
|
private BarStyle style;
|
||||||
|
private String name;
|
||||||
|
private Set<OptionedSound> spawnSounds;
|
||||||
|
private Set<OptionedSound> deathSounds;
|
||||||
|
private Pair<Integer, Integer> xpBounds;
|
||||||
|
private BlockStructure spawnStructure;
|
||||||
|
private double maxHealth;
|
||||||
|
private double attackDamage;
|
||||||
|
private Set<ItemStack> drops;
|
||||||
|
private GameplayOptions gameplayOptions;
|
||||||
|
|
||||||
|
public IllusionerOptions() {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reload() {
|
||||||
|
|
||||||
|
|
||||||
|
gameplayOptions.reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarColor getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarStyle getStyle() {
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<OptionedSound> getSpawnSounds() {
|
||||||
|
return spawnSounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<OptionedSound> getDeathSounds() {
|
||||||
|
return deathSounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int generateXp() {
|
||||||
|
return NumberUtils.randInt(xpBounds.getFirst(), xpBounds.getSecond());
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockStructure getSpawnStructure() {
|
||||||
|
return spawnStructure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMaxHealth() {
|
||||||
|
return maxHealth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getAttackDamage() {
|
||||||
|
return attackDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<ItemStack> getDrops() {
|
||||||
|
return drops;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameplayOptions getGameplayOptions() {
|
||||||
|
return gameplayOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anticheat;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.IllusionerPlugin;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class for Anticheat Integrations
|
|
||||||
*/
|
|
||||||
public class AnticheatManager {
|
|
||||||
private static final Set<AnticheatWrapper> anticheats = new HashSet<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a new anticheat
|
|
||||||
*
|
|
||||||
* @param anticheat The anticheat to register
|
|
||||||
*/
|
|
||||||
public static void register(AnticheatWrapper anticheat) {
|
|
||||||
if (anticheat instanceof Listener) {
|
|
||||||
Bukkit.getPluginManager().registerEvents((Listener) anticheat, IllusionerPlugin.getInstance());
|
|
||||||
}
|
|
||||||
anticheats.add(anticheat);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Exempt a player from triggering anticheats
|
|
||||||
*
|
|
||||||
* @param player The player to exempt
|
|
||||||
*/
|
|
||||||
public static void exemptPlayer(Player player) {
|
|
||||||
anticheats.forEach(anticheat -> anticheat.exempt(player));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unexempt a player from triggering anticheats
|
|
||||||
* This is ran a tick after it is called to ensure that there are no event timing conflicts
|
|
||||||
*
|
|
||||||
* @param player The player to remove the exemption
|
|
||||||
*/
|
|
||||||
public static void unexemptPlayer(Player player) {
|
|
||||||
Bukkit.getScheduler().runTaskLater(IllusionerPlugin.getInstance(), () -> {
|
|
||||||
anticheats.forEach(anticheat -> anticheat.unexempt(player));
|
|
||||||
}, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anticheat;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.Integration;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for anticheat integrations
|
|
||||||
*/
|
|
||||||
public interface AnticheatWrapper extends Integration {
|
|
||||||
/**
|
|
||||||
* Exempt a player from checks
|
|
||||||
*
|
|
||||||
* @param player The player to exempt
|
|
||||||
*/
|
|
||||||
void exempt(Player player);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unexempt a player from checks
|
|
||||||
*
|
|
||||||
* @param player The player to unexempt
|
|
||||||
*/
|
|
||||||
void unexempt(Player player);
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anticheat.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.AnticheatWrapper;
|
|
||||||
import me.konsolas.aac.api.PlayerViolationEvent;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class AnticheatAAC implements AnticheatWrapper, Listener {
|
|
||||||
private final Set<UUID> exempt = new HashSet<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "AAC";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void exempt(Player player) {
|
|
||||||
this.exempt.add(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unexempt(Player player) {
|
|
||||||
this.exempt.remove(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
|
||||||
private void onViolate(PlayerViolationEvent event) {
|
|
||||||
if (!exempt.contains(event.getPlayer().getUniqueId())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anticheat.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.AnticheatWrapper;
|
|
||||||
import me.rerere.matrix.api.events.PlayerViolationEvent;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class AnticheatMatrix implements AnticheatWrapper, Listener {
|
|
||||||
private final Set<UUID> exempt = new HashSet<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "Matrix";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void exempt(Player player) {
|
|
||||||
this.exempt.add(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unexempt(Player player) {
|
|
||||||
this.exempt.remove(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
|
||||||
private void onViolate(PlayerViolationEvent event) {
|
|
||||||
if (!exempt.contains(event.getPlayer().getUniqueId())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anticheat.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.AnticheatWrapper;
|
|
||||||
import fr.neatmonster.nocheatplus.checks.CheckType;
|
|
||||||
import fr.neatmonster.nocheatplus.hooks.NCPExemptionManager;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class AnticheatNCP implements AnticheatWrapper {
|
|
||||||
private final Set<UUID> exempt = new HashSet<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "NCP";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void exempt(Player player) {
|
|
||||||
if (!NCPExemptionManager.isExempted(player, CheckType.ALL)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exempt.add(player.getUniqueId())) {
|
|
||||||
NCPExemptionManager.exemptPermanently(player, CheckType.ALL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unexempt(Player player) {
|
|
||||||
if (exempt.remove(player.getUniqueId())) {
|
|
||||||
NCPExemptionManager.unexempt(player, CheckType.ALL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anticheat.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.AnticheatWrapper;
|
|
||||||
import me.vagdedes.spartan.api.PlayerViolationEvent;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class AnticheatSpartan implements AnticheatWrapper, Listener {
|
|
||||||
private final Set<UUID> exempt = new HashSet<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "Spartan";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void exempt(Player player) {
|
|
||||||
this.exempt.add(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unexempt(Player player) {
|
|
||||||
this.exempt.remove(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
|
||||||
private void onViolate(PlayerViolationEvent event) {
|
|
||||||
if (!exempt.contains(event.getPlayer().getUniqueId())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class AntigriefManager {
|
|
||||||
private static final Set<AntigriefWrapper> antigriefs = new HashSet<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a new AntiGrief/Land Management integration
|
|
||||||
*
|
|
||||||
* @param antigrief The integration to register
|
|
||||||
*/
|
|
||||||
public static void register(AntigriefWrapper antigrief) {
|
|
||||||
antigriefs.add(antigrief);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can player break block
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param block The block
|
|
||||||
* @return If player can break block
|
|
||||||
*/
|
|
||||||
public static boolean canBreakBlock(Player player, Block block) {
|
|
||||||
return antigriefs.stream().allMatch(antigriefWrapper -> antigriefWrapper.canBreakBlock(player, block));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can player create explosion at location
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param location The location
|
|
||||||
* @return If player can create explosion
|
|
||||||
*/
|
|
||||||
public static boolean canCreateExplosion(Player player, Location location) {
|
|
||||||
return antigriefs.stream().allMatch(antigriefWrapper -> antigriefWrapper.canCreateExplosion(player, location));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can player place block
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param block The block
|
|
||||||
* @return If player can place block
|
|
||||||
*/
|
|
||||||
public static boolean canPlaceBlock(Player player, Block block) {
|
|
||||||
return antigriefs.stream().allMatch(antigriefWrapper -> antigriefWrapper.canPlaceBlock(player, block));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can player injure living entity
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param victim The victim
|
|
||||||
* @return If player can injure
|
|
||||||
*/
|
|
||||||
public static boolean canInjure(Player player, LivingEntity victim) {
|
|
||||||
return antigriefs.stream().allMatch(antigriefWrapper -> antigriefWrapper.canInjure(player, victim));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.Integration;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for Antigrief integrations
|
|
||||||
*/
|
|
||||||
public interface AntigriefWrapper extends Integration {
|
|
||||||
/**
|
|
||||||
* Can player break block
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param block The block
|
|
||||||
* @return If player cna break block
|
|
||||||
*/
|
|
||||||
boolean canBreakBlock(Player player, Block block);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can player create explosion at location
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param location The location
|
|
||||||
* @return If player can create explosion
|
|
||||||
*/
|
|
||||||
boolean canCreateExplosion(Player player, Location location);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can player place block
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param block The block
|
|
||||||
* @return If player can place block
|
|
||||||
*/
|
|
||||||
boolean canPlaceBlock(Player player, Block block);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can player injure living entity
|
|
||||||
*
|
|
||||||
* @param player The player
|
|
||||||
* @param victim The victim
|
|
||||||
* @return If player can injure
|
|
||||||
*/
|
|
||||||
boolean canInjure(Player player, LivingEntity victim);
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief.plugins;
|
|
||||||
|
|
||||||
import com.massivecraft.factions.Board;
|
|
||||||
import com.massivecraft.factions.FLocation;
|
|
||||||
import com.massivecraft.factions.FPlayer;
|
|
||||||
import com.massivecraft.factions.FPlayers;
|
|
||||||
import com.massivecraft.factions.Faction;
|
|
||||||
import com.massivecraft.factions.perms.PermissibleAction;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.AntigriefWrapper;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AntigriefFactionsUUID implements AntigriefWrapper {
|
|
||||||
@Override
|
|
||||||
public boolean canBreakBlock(Player player, Block block) {
|
|
||||||
FPlayer fplayer = FPlayers.getInstance().getByPlayer(player);
|
|
||||||
FLocation flocation = new FLocation(block.getLocation());
|
|
||||||
Faction faction = Board.getInstance().getFactionAt(flocation);
|
|
||||||
|
|
||||||
if (!faction.hasAccess(fplayer, PermissibleAction.DESTROY)) {
|
|
||||||
return fplayer.isAdminBypassing();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCreateExplosion(Player player, Location location) {
|
|
||||||
FPlayer fplayer = FPlayers.getInstance().getByPlayer(player);
|
|
||||||
FLocation flocation = new FLocation(location);
|
|
||||||
Faction faction = Board.getInstance().getFactionAt(flocation);
|
|
||||||
|
|
||||||
return !faction.noExplosionsInTerritory();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceBlock(Player player, Block block) {
|
|
||||||
FPlayer fplayer = FPlayers.getInstance().getByPlayer(player);
|
|
||||||
FLocation flocation = new FLocation(block.getLocation());
|
|
||||||
Faction faction = Board.getInstance().getFactionAt(flocation);
|
|
||||||
|
|
||||||
if (!faction.hasAccess(fplayer, PermissibleAction.BUILD)) {
|
|
||||||
return fplayer.isAdminBypassing();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canInjure(Player player, LivingEntity victim) {
|
|
||||||
FPlayer fplayer = FPlayers.getInstance().getByPlayer(player);
|
|
||||||
FLocation flocation = new FLocation(victim.getLocation());
|
|
||||||
Faction faction = Board.getInstance().getFactionAt(flocation);
|
|
||||||
|
|
||||||
if(victim instanceof Player) {
|
|
||||||
if (faction.isPeaceful()) {
|
|
||||||
return fplayer.isAdminBypassing();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (faction.hasAccess(fplayer, PermissibleAction.DESTROY)) {
|
|
||||||
return fplayer.isAdminBypassing();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "FactionsUUID";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.AntigriefWrapper;
|
|
||||||
import me.ryanhamshire.GriefPrevention.Claim;
|
|
||||||
import me.ryanhamshire.GriefPrevention.GriefPrevention;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AntigriefGriefPrevention implements AntigriefWrapper {
|
|
||||||
@Override
|
|
||||||
public boolean canBreakBlock(Player player, Block block) {
|
|
||||||
Claim claim = GriefPrevention.instance.dataStore.getClaimAt(block.getLocation(), false, null);
|
|
||||||
if (claim != null) {
|
|
||||||
return claim.allowBreak(player, block.getType()) == null;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCreateExplosion(Player player, Location location) {
|
|
||||||
Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, false, null);
|
|
||||||
if (claim != null) {
|
|
||||||
return claim.areExplosivesAllowed;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceBlock(Player player, Block block) {
|
|
||||||
Claim claim = GriefPrevention.instance.dataStore.getClaimAt(block.getLocation(), false, null);
|
|
||||||
if (claim != null) {
|
|
||||||
return claim.allowBuild(player, block.getType()) == null;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canInjure(Player player, LivingEntity victim) {
|
|
||||||
Claim claim = GriefPrevention.instance.dataStore.getClaimAt(victim.getLocation(), false, null);
|
|
||||||
if(victim instanceof Player) {
|
|
||||||
return claim == null;
|
|
||||||
} else {
|
|
||||||
if (claim != null && claim.ownerID != null) {
|
|
||||||
return claim.ownerID.equals(player.getUniqueId());
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "GriefPrevention";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.AntigriefWrapper;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
|
||||||
import org.kingdoms.constants.kingdom.Kingdom;
|
|
||||||
import org.kingdoms.constants.land.Land;
|
|
||||||
import org.kingdoms.managers.PvPManager;
|
|
||||||
import org.kingdoms.managers.land.LandManager;
|
|
||||||
|
|
||||||
public class AntigriefKingdoms implements AntigriefWrapper {
|
|
||||||
@Override
|
|
||||||
public boolean canBreakBlock(Player player, Block block) {
|
|
||||||
BlockBreakEvent event = new BlockBreakEvent(block, player);
|
|
||||||
LandManager.onBreak(event);
|
|
||||||
return !event.isCancelled();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCreateExplosion(Player player, Location location) {
|
|
||||||
Land land = Land.getLand(location);
|
|
||||||
if (land == null) return true;
|
|
||||||
if(!land.isClaimed()) return true;
|
|
||||||
|
|
||||||
Kingdom kingdom = land.getKingdom();
|
|
||||||
return kingdom.isMember(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceBlock(Player player, Block block) {
|
|
||||||
Block placedOn = block.getRelative(0, -1, 0);
|
|
||||||
BlockPlaceEvent event = new BlockPlaceEvent(block, block.getState(), placedOn, player.getInventory().getItemInMainHand(), player, true, EquipmentSlot.HAND);
|
|
||||||
LandManager.onPlace(event);
|
|
||||||
return !event.isCancelled();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canInjure(Player player, LivingEntity victim) {
|
|
||||||
if(victim instanceof Player) {
|
|
||||||
return PvPManager.canFight(player, (Player) victim);
|
|
||||||
} else {
|
|
||||||
Land land = Land.getLand(victim.getLocation());
|
|
||||||
if (land == null) return true;
|
|
||||||
if(!land.isClaimed()) return true;
|
|
||||||
|
|
||||||
Kingdom kingdom = land.getKingdom();
|
|
||||||
return kingdom.isMember(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "Kingdoms";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.IllusionerPlugin;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.AntigriefWrapper;
|
|
||||||
import me.angeschossen.lands.api.integration.LandsIntegration;
|
|
||||||
import me.angeschossen.lands.api.land.Area;
|
|
||||||
import me.angeschossen.lands.api.role.enums.RoleSetting;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AntigriefLands implements AntigriefWrapper {
|
|
||||||
@Override
|
|
||||||
public boolean canBreakBlock(Player player, Block block) {
|
|
||||||
LandsIntegration landsIntegration = new LandsIntegration(IllusionerPlugin.getInstance());
|
|
||||||
Area area = landsIntegration.getAreaByLoc(block.getLocation());
|
|
||||||
if (area != null) {
|
|
||||||
return area.canSetting(player, RoleSetting.BLOCK_BREAK, false);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCreateExplosion(Player player, Location location) {
|
|
||||||
LandsIntegration landsIntegration = new LandsIntegration(IllusionerPlugin.getInstance());
|
|
||||||
Area area = landsIntegration.getAreaByLoc(location);
|
|
||||||
if (area != null) {
|
|
||||||
return area.canSetting(player, RoleSetting.BLOCK_IGNITE, false);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceBlock(Player player, Block block) {
|
|
||||||
LandsIntegration landsIntegration = new LandsIntegration(IllusionerPlugin.getInstance());
|
|
||||||
Area area = landsIntegration.getAreaByLoc(block.getLocation());
|
|
||||||
if (area != null) {
|
|
||||||
return area.canSetting(player, RoleSetting.BLOCK_PLACE, false);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canInjure(Player player, LivingEntity victim) {
|
|
||||||
LandsIntegration landsIntegration = new LandsIntegration(IllusionerPlugin.getInstance());
|
|
||||||
Area area = landsIntegration.getAreaByLoc(victim.getLocation());
|
|
||||||
if(victim instanceof Player) {
|
|
||||||
if (area != null) {
|
|
||||||
return area.canSetting(player, RoleSetting.ATTACK_PLAYER, false);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (area != null) {
|
|
||||||
return area.canSetting(player, RoleSetting.ATTACK_ANIMAL, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "Lands";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief.plugins;
|
|
||||||
|
|
||||||
import com.palmergames.bukkit.towny.object.Town;
|
|
||||||
import com.palmergames.bukkit.towny.object.TownyPermission;
|
|
||||||
import com.palmergames.bukkit.towny.object.WorldCoord;
|
|
||||||
import com.palmergames.bukkit.towny.utils.PlayerCacheUtil;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.AntigriefWrapper;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AntigriefTowny implements AntigriefWrapper {
|
|
||||||
@Override
|
|
||||||
public boolean canBreakBlock(Player player, Block block) {
|
|
||||||
return PlayerCacheUtil.getCachePermission(player, block.getLocation(), block.getType(), TownyPermission.ActionType.DESTROY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCreateExplosion(Player player, Location location) {
|
|
||||||
return PlayerCacheUtil.getCachePermission(player, location, Material.TNT, TownyPermission.ActionType.ITEM_USE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceBlock(Player player, Block block) {
|
|
||||||
return PlayerCacheUtil.getCachePermission(player, block.getLocation(), block.getType(), TownyPermission.ActionType.BUILD);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canInjure(Player player, LivingEntity victim) {
|
|
||||||
if(victim instanceof Player) {
|
|
||||||
try {
|
|
||||||
Town town = WorldCoord.parseWorldCoord(victim.getLocation()).getTownBlock().getTown();
|
|
||||||
return town.isPVP();
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
Town town = WorldCoord.parseWorldCoord(victim.getLocation()).getTownBlock().getTown();
|
|
||||||
return town.hasMobs();
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "Towny";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.antigrief.plugins;
|
|
||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flags;
|
|
||||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
|
||||||
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.AntigriefWrapper;
|
|
||||||
import org.apache.commons.lang.Validate;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AntigriefWorldGuard implements AntigriefWrapper {
|
|
||||||
@Override
|
|
||||||
public boolean canBreakBlock(Player player, Block block) {
|
|
||||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
|
||||||
RegionQuery query = container.createQuery();
|
|
||||||
|
|
||||||
if (!query.testState(BukkitAdapter.adapt(block.getLocation()), localPlayer, Flags.BUILD)) {
|
|
||||||
return WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, BukkitAdapter.adapt(block.getWorld()));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCreateExplosion(Player player, Location location) {
|
|
||||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
|
||||||
RegionQuery query = container.createQuery();
|
|
||||||
World world = location.getWorld();
|
|
||||||
Validate.notNull(world, "World cannot be null!");
|
|
||||||
|
|
||||||
if (!query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.OTHER_EXPLOSION)) {
|
|
||||||
return WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, BukkitAdapter.adapt(world));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceBlock(Player player, Block block) {
|
|
||||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
|
||||||
RegionQuery query = container.createQuery();
|
|
||||||
|
|
||||||
if (!query.testState(BukkitAdapter.adapt(block.getLocation()), localPlayer, Flags.BLOCK_PLACE)) {
|
|
||||||
return WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, BukkitAdapter.adapt(block.getWorld()));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canInjure(Player player, LivingEntity victim) {
|
|
||||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
|
||||||
RegionQuery query = container.createQuery();
|
|
||||||
|
|
||||||
if(victim instanceof Player) {
|
|
||||||
if (!query.testState(BukkitAdapter.adapt(victim.getLocation()), localPlayer, Flags.PVP)) {
|
|
||||||
return WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, BukkitAdapter.adapt(player.getWorld()));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!query.testState(BukkitAdapter.adapt(victim.getLocation()), localPlayer, Flags.DAMAGE_ANIMALS)) {
|
|
||||||
return WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, BukkitAdapter.adapt(player.getWorld()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "WorldGuard";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anvilgui;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.Integration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for AnvilGUI integrations
|
|
||||||
*/
|
|
||||||
public interface AnvilGUIIntegration extends Integration {
|
|
||||||
/**
|
|
||||||
* Get if the NMS inventory is an instance of an AnvilGUI
|
|
||||||
*
|
|
||||||
* @param object The NMS inventory to check
|
|
||||||
* @return If the object is an AnvilGUI
|
|
||||||
* @see com.willfp.illusioner.nms.OpenInventory
|
|
||||||
*/
|
|
||||||
boolean isInstance(Object object);
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anvilgui;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.nms.OpenInventory;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class for interfacing with plugins that use WesJD's AnvilGUI library
|
|
||||||
*/
|
|
||||||
public class AnvilGUIManager {
|
|
||||||
private static final Set<AnvilGUIIntegration> integrations = new HashSet<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a new AnvilGUI integration
|
|
||||||
*
|
|
||||||
* @param integration The integration to register
|
|
||||||
*/
|
|
||||||
public static void registerIntegration(AnvilGUIIntegration integration) {
|
|
||||||
integrations.add(integration);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get if a player's open inventory is an AnvilGUI
|
|
||||||
*
|
|
||||||
* @param player The player to check
|
|
||||||
* @return If the player's open inventory is an AnvilGUI
|
|
||||||
*/
|
|
||||||
public static boolean hasAnvilGUIOpen(Player player) {
|
|
||||||
if (integrations.isEmpty())
|
|
||||||
return false;
|
|
||||||
return integrations.stream().anyMatch(integration -> integration.isInstance(OpenInventory.getOpenInventory(player)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.anvilgui.plugins;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.IllusionerPlugin;
|
|
||||||
import com.willfp.illusioner.integrations.anvilgui.AnvilGUIIntegration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Concrete implementation of {@link AnvilGUIIntegration}
|
|
||||||
*/
|
|
||||||
public class AnvilGUIImpl implements AnvilGUIIntegration {
|
|
||||||
private static final String ANVIL_GUI_CLASS = "net.wesjd.anvilgui.version.Wrapper" + IllusionerPlugin.NMS_VERSION.substring(1) + "$AnvilContainer";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInstance(Object object) {
|
|
||||||
return object.getClass().toString().equals(ANVIL_GUI_CLASS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "AnvilGUI";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.willfp.illusioner.integrations.drops;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class Drops {
|
||||||
|
public static boolean drop(ItemStack itemStack) {
|
||||||
|
if(Bukkit.getPluginManager().isPluginEnabled("EcoEnchants")) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.mcmmo;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.integrations.Integration;
|
|
||||||
import org.bukkit.event.Event;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for mcMMO integrations
|
|
||||||
*/
|
|
||||||
public interface McmmoIntegration extends Integration {
|
|
||||||
/**
|
|
||||||
* @see McmmoManager#isFake(Event)
|
|
||||||
*/
|
|
||||||
boolean isFake(Event event);
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.mcmmo;
|
|
||||||
|
|
||||||
import com.willfp.illusioner.util.ClassUtils;
|
|
||||||
import org.bukkit.event.Event;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class for interfacing with mcMMO
|
|
||||||
*/
|
|
||||||
public class McmmoManager {
|
|
||||||
private static final Set<McmmoIntegration> integrations = new HashSet<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a new mcMMO integration
|
|
||||||
*
|
|
||||||
* @param integration The integration to register
|
|
||||||
*/
|
|
||||||
public static void registerIntegration(McmmoIntegration integration) {
|
|
||||||
if(!ClassUtils.exists("com.gmail.nossr50.events.fake.FakeEvent"))
|
|
||||||
return;
|
|
||||||
integrations.add(integration);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get if an event is fake
|
|
||||||
*
|
|
||||||
* @param event The event to check
|
|
||||||
* @return If the event is fake
|
|
||||||
*/
|
|
||||||
public static boolean isFake(Event event) {
|
|
||||||
AtomicBoolean isFake = new AtomicBoolean(false);
|
|
||||||
integrations.forEach(integration -> {
|
|
||||||
if (integration.isFake(event)) isFake.set(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
return isFake.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package com.willfp.illusioner.integrations.mcmmo.plugins;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.events.fake.FakeEvent;
|
|
||||||
import com.willfp.illusioner.integrations.mcmmo.McmmoIntegration;
|
|
||||||
import org.bukkit.event.Event;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Concrete implementation of {@link McmmoIntegration}
|
|
||||||
*/
|
|
||||||
public class McmmoIntegrationImpl implements McmmoIntegration {
|
|
||||||
@Override
|
|
||||||
public boolean isFake(Event event) {
|
|
||||||
return event instanceof FakeEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "mcMMO";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -32,10 +32,11 @@ public class NMSIllusioner {
|
|||||||
* @param location The location to spawn it at
|
* @param location The location to spawn it at
|
||||||
* @param maxHealth The max health for the illusioner to have
|
* @param maxHealth The max health for the illusioner to have
|
||||||
* @param attackDamage The attack damage for the illusioner
|
* @param attackDamage The attack damage for the illusioner
|
||||||
|
* @param name The name of the illusioner
|
||||||
* @return The illusioner
|
* @return The illusioner
|
||||||
*/
|
*/
|
||||||
public static EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage) {
|
public static EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage, String name) {
|
||||||
assert illusionerWrapper != null;
|
assert illusionerWrapper != null;
|
||||||
return illusionerWrapper.spawn(location, maxHealth, attackDamage);
|
return illusionerWrapper.spawn(location, maxHealth, attackDamage, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,25 +8,9 @@ import com.willfp.illusioner.events.armorequip.ArmorListener;
|
|||||||
import com.willfp.illusioner.events.armorequip.DispenserArmorListener;
|
import com.willfp.illusioner.events.armorequip.DispenserArmorListener;
|
||||||
import com.willfp.illusioner.events.entitydeathbyentity.EntityDeathByEntityListeners;
|
import com.willfp.illusioner.events.entitydeathbyentity.EntityDeathByEntityListeners;
|
||||||
import com.willfp.illusioner.events.naturalexpgainevent.NaturalExpGainListeners;
|
import com.willfp.illusioner.events.naturalexpgainevent.NaturalExpGainListeners;
|
||||||
import com.willfp.illusioner.illusioner.AttackListeners;
|
import com.willfp.illusioner.illusioner.listeners.AttackListeners;
|
||||||
import com.willfp.illusioner.illusioner.DeathListeners;
|
import com.willfp.illusioner.illusioner.listeners.DeathListeners;
|
||||||
import com.willfp.illusioner.illusioner.SpawnListeners;
|
import com.willfp.illusioner.illusioner.listeners.SpawnListeners;
|
||||||
import com.willfp.illusioner.integrations.anticheat.AnticheatManager;
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.plugins.AnticheatAAC;
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.plugins.AnticheatMatrix;
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.plugins.AnticheatNCP;
|
|
||||||
import com.willfp.illusioner.integrations.anticheat.plugins.AnticheatSpartan;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.AntigriefManager;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.plugins.AntigriefFactionsUUID;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.plugins.AntigriefGriefPrevention;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.plugins.AntigriefKingdoms;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.plugins.AntigriefLands;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.plugins.AntigriefTowny;
|
|
||||||
import com.willfp.illusioner.integrations.antigrief.plugins.AntigriefWorldGuard;
|
|
||||||
import com.willfp.illusioner.integrations.anvilgui.AnvilGUIManager;
|
|
||||||
import com.willfp.illusioner.integrations.anvilgui.plugins.AnvilGUIImpl;
|
|
||||||
import com.willfp.illusioner.integrations.mcmmo.McmmoManager;
|
|
||||||
import com.willfp.illusioner.integrations.mcmmo.plugins.McmmoIntegrationImpl;
|
|
||||||
import com.willfp.illusioner.integrations.placeholder.PlaceholderManager;
|
import com.willfp.illusioner.integrations.placeholder.PlaceholderManager;
|
||||||
import com.willfp.illusioner.integrations.placeholder.plugins.PlaceholderIntegrationPAPI;
|
import com.willfp.illusioner.integrations.placeholder.plugins.PlaceholderIntegrationPAPI;
|
||||||
import com.willfp.illusioner.nms.BlockBreak;
|
import com.willfp.illusioner.nms.BlockBreak;
|
||||||
@@ -142,23 +126,8 @@ public class Loader {
|
|||||||
Logger.info("Loading Integrations...");
|
Logger.info("Loading Integrations...");
|
||||||
|
|
||||||
final HashMap<String, Callable> integrations = new HashMap<String, Callable>() {{
|
final HashMap<String, Callable> integrations = new HashMap<String, Callable>() {{
|
||||||
// AntiGrief
|
|
||||||
put("WorldGuard", () -> AntigriefManager.register(new AntigriefWorldGuard()));
|
|
||||||
put("GriefPrevention", () -> AntigriefManager.register(new AntigriefGriefPrevention()));
|
|
||||||
put("FactionsUUID", () -> AntigriefManager.register(new AntigriefFactionsUUID()));
|
|
||||||
put("Towny", () -> AntigriefManager.register(new AntigriefTowny()));
|
|
||||||
put("Lands", () -> AntigriefManager.register(new AntigriefLands()));
|
|
||||||
put("Kingdoms", () -> AntigriefManager.register(new AntigriefKingdoms()));
|
|
||||||
|
|
||||||
// AntiCheat
|
|
||||||
put("AAC", () -> AnticheatManager.register(new AnticheatAAC()));
|
|
||||||
put("Matrix", () -> AnticheatManager.register(new AnticheatMatrix()));
|
|
||||||
put("NoCheatPlus", () -> AnticheatManager.register(new AnticheatNCP()));
|
|
||||||
put("Spartan", () -> AnticheatManager.register(new AnticheatSpartan()));
|
|
||||||
|
|
||||||
// MISC
|
// MISC
|
||||||
put("PlaceholderAPI", () -> PlaceholderManager.addIntegration(new PlaceholderIntegrationPAPI()));
|
put("PlaceholderAPI", () -> PlaceholderManager.addIntegration(new PlaceholderIntegrationPAPI()));
|
||||||
put("mcMMO", () -> McmmoManager.registerIntegration(new McmmoIntegrationImpl()));
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
Set<String> enabledPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()).map(Plugin::getName).collect(Collectors.toSet());
|
Set<String> enabledPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()).map(Plugin::getName).collect(Collectors.toSet());
|
||||||
@@ -176,7 +145,6 @@ public class Loader {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
Prerequisite.update();
|
Prerequisite.update();
|
||||||
AnvilGUIManager.registerIntegration(new AnvilGUIImpl()); // No direct lib, can always register
|
|
||||||
Logger.info("");
|
Logger.info("");
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.willfp.illusioner.util.internal;
|
||||||
|
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
|
||||||
|
public class OptionedSound {
|
||||||
|
private final Sound sound;
|
||||||
|
private final float volume;
|
||||||
|
private final float pitch;
|
||||||
|
private final boolean broadcast;
|
||||||
|
|
||||||
|
public OptionedSound(Sound sound, float volume, float pitch, boolean broadcast) {
|
||||||
|
this.sound = sound;
|
||||||
|
this.volume = volume;
|
||||||
|
this.pitch = pitch;
|
||||||
|
this.broadcast = broadcast;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sound getSound() {
|
||||||
|
return sound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getVolume() {
|
||||||
|
return volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getPitch() {
|
||||||
|
return pitch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBroadcast() {
|
||||||
|
return broadcast;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,18 +6,7 @@ authors: [Auxilor]
|
|||||||
website: willfp.com
|
website: willfp.com
|
||||||
load: STARTUP
|
load: STARTUP
|
||||||
softdepend:
|
softdepend:
|
||||||
- WorldGuard
|
|
||||||
- GriefPrevention
|
|
||||||
- Towny
|
|
||||||
- FactionsUUID
|
|
||||||
- Lands
|
|
||||||
- Kingdoms
|
|
||||||
- NoCheatPlus
|
|
||||||
- AAC
|
|
||||||
- Matrix
|
|
||||||
- Spartan
|
|
||||||
- PlaceholderAPI
|
- PlaceholderAPI
|
||||||
- mcMMO
|
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
ilreload:
|
ilreload:
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user