Compare commits
10 Commits
26091142a8
...
bb7f49ed99
| Author | SHA1 | Date | |
|---|---|---|---|
| bb7f49ed99 | |||
| fdcbf027f9 | |||
| 7452aef50a | |||
| 6be08365b5 | |||
| 4b8304934f | |||
| 3a321fd49b | |||
| 9095707d77 | |||
| f89bf5a010 | |||
| 2e9f397155 | |||
| 6a089d9f66 |
@@ -5,9 +5,6 @@ apply plugin: 'java'
|
|||||||
group = 'net.rawmod'
|
group = 'net.rawmod'
|
||||||
version = '0.1.5'
|
version = '0.1.5'
|
||||||
|
|
||||||
sourceCompatibility = '1.8'
|
|
||||||
targetCompatibility = '1.8'
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven {
|
maven {
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class BeastMasterClass extends MineClassImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<PotionEffectType, Integer> getPotionEffects() {
|
public Map<PotionEffectType, Integer> getPotionEffects(Player player) {
|
||||||
return potionEffects;
|
return potionEffects;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,21 +64,26 @@ public class BeastMasterClass extends MineClassImpl {
|
|||||||
return "beast_master";
|
return "beast_master";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Beast master";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void giveItems(Player player) {
|
public void giveItems(Player player) {
|
||||||
if (!player.getInventory().contains(Material.BONE)) {
|
if (!player.getInventory().contains(Material.BONE)) {
|
||||||
ItemStack itemStack = new ItemStack(Material.BONE, 1);
|
ItemStack itemStack = new ItemStack(Material.BONE, 1);
|
||||||
enchantItem(itemStack);
|
enchantItem(itemStack, player);
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
}
|
}
|
||||||
if (!player.getInventory().contains(Material.SALMON)) {
|
if (!player.getInventory().contains(Material.SALMON)) {
|
||||||
ItemStack itemStack = new ItemStack(Material.SALMON, 1);
|
ItemStack itemStack = new ItemStack(Material.SALMON, 1);
|
||||||
enchantItem(itemStack);
|
enchantItem(itemStack, player);
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
}
|
}
|
||||||
if (!player.getInventory().contains(Material.SADDLE)) {
|
if (!player.getInventory().contains(Material.SADDLE)) {
|
||||||
ItemStack itemStack = new ItemStack(Material.SADDLE, 1);
|
ItemStack itemStack = new ItemStack(Material.SADDLE, 1);
|
||||||
enchantItem(itemStack);
|
enchantItem(itemStack, player);
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public class DwarfClass extends MineClassImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<PotionEffectType, Integer> getPotionEffects() {
|
public Map<PotionEffectType, Integer> getPotionEffects(Player player) {
|
||||||
return potionEffects;
|
return potionEffects;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,6 +93,11 @@ public class DwarfClass extends MineClassImpl {
|
|||||||
return "dwarf";
|
return "dwarf";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Dwarf";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void giveItems(Player player) {}
|
public void giveItems(Player player) {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ public class ElfClass extends MineClassImpl {
|
|||||||
Material.BOW,
|
Material.BOW,
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
new Pair<>(Enchantment.ARROW_INFINITE, 1),
|
new Pair<>(Enchantment.ARROW_INFINITE, 1),
|
||||||
new Pair<>(Enchantment.ARROW_DAMAGE, 8))))
|
new Pair<>(Enchantment.ARROW_DAMAGE, 8),
|
||||||
|
new Pair<>(Enchantment.KNOCKBACK, 1))))
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -58,7 +59,7 @@ public class ElfClass extends MineClassImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<PotionEffectType, Integer> getPotionEffects() {
|
public Map<PotionEffectType, Integer> getPotionEffects(Player player) {
|
||||||
return potionEffects;
|
return potionEffects;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,6 +73,11 @@ public class ElfClass extends MineClassImpl {
|
|||||||
return "elf";
|
return "elf";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Elf";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void giveItems(Player player) {}
|
public void giveItems(Player player) {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class EnderElfClass extends MineClassImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<PotionEffectType, Integer> getPotionEffects() {
|
public Map<PotionEffectType, Integer> getPotionEffects(Player player) {
|
||||||
return potionEffects;
|
return potionEffects;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,13 +78,21 @@ public class EnderElfClass extends MineClassImpl {
|
|||||||
return "ender_elf";
|
return "ender_elf";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Ender elf";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reapplyEffects(Player player) {
|
public void reapplyEffects(Player player) {
|
||||||
super.reapplyEffects(player);
|
super.reapplyEffects(player);
|
||||||
if (player.getWorld().getEnvironment().equals(World.Environment.THE_END)) {
|
if (player.getWorld().getEnvironment().equals(World.Environment.THE_END)) {
|
||||||
PotionEffect saturation =
|
player.addPotionEffect(
|
||||||
new PotionEffect(PotionEffectType.SATURATION, Integer.MAX_VALUE, 9, false, false);
|
new PotionEffect(PotionEffectType.SATURATION, Integer.MAX_VALUE, 0, false, false));
|
||||||
player.addPotionEffect(saturation);
|
player.addPotionEffect(
|
||||||
|
new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 0, false, false));
|
||||||
|
player.addPotionEffect(
|
||||||
|
new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 0, false, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +100,7 @@ public class EnderElfClass extends MineClassImpl {
|
|||||||
public void giveItems(Player player) {
|
public void giveItems(Player player) {
|
||||||
if (!player.getInventory().contains(Material.ENDER_PEARL)) {
|
if (!player.getInventory().contains(Material.ENDER_PEARL)) {
|
||||||
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 2);
|
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 2);
|
||||||
enchantItem(itemStack);
|
enchantItem(itemStack, player);
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package net.rawmod.mineclass.classes;
|
|||||||
|
|
||||||
import net.rawmod.mineclass.utils.Pair;
|
import net.rawmod.mineclass.utils.Pair;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -88,13 +90,26 @@ public class FireDwarfClass extends MineClassImpl {
|
|||||||
Material.FLINT_AND_STEEL, new ArrayList<Pair<Enchantment, Integer>>()))
|
Material.FLINT_AND_STEEL, new ArrayList<Pair<Enchantment, Integer>>()))
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reapplyEffects(Player player) {
|
||||||
|
super.reapplyEffects(player);
|
||||||
|
if (player.getWorld().getEnvironment().equals(World.Environment.NETHER)) {
|
||||||
|
player.addPotionEffect(
|
||||||
|
new PotionEffect(PotionEffectType.SATURATION, Integer.MAX_VALUE, 0, false, false));
|
||||||
|
player.addPotionEffect(
|
||||||
|
new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 0, false, false));
|
||||||
|
player.addPotionEffect(
|
||||||
|
new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, Integer.MAX_VALUE, 0, false, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<Material> getForbiddenItems() {
|
public Set<Material> getForbiddenItems() {
|
||||||
return forbiddenItems;
|
return forbiddenItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<PotionEffectType, Integer> getPotionEffects() {
|
public Map<PotionEffectType, Integer> getPotionEffects(Player player) {
|
||||||
return potionEffects;
|
return potionEffects;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,6 +123,11 @@ public class FireDwarfClass extends MineClassImpl {
|
|||||||
return "fire_dwarf";
|
return "fire_dwarf";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Fire dwarf";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void giveItems(Player player) {}
|
public void giveItems(Player player) {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public interface MineClass {
|
|||||||
|
|
||||||
Set<Material> getForbiddenItems();
|
Set<Material> getForbiddenItems();
|
||||||
|
|
||||||
Map<PotionEffectType, Integer> getPotionEffects();
|
Map<PotionEffectType, Integer> getPotionEffects(Player player);
|
||||||
|
|
||||||
Map<Material, List<Pair<Enchantment, Integer>>> getClassEnchantments();
|
Map<Material, List<Pair<Enchantment, Integer>>> getClassEnchantments();
|
||||||
|
|
||||||
@@ -23,11 +23,15 @@ public interface MineClass {
|
|||||||
|
|
||||||
boolean isItemForbidden(Material type);
|
boolean isItemForbidden(Material type);
|
||||||
|
|
||||||
void enchantItem(ItemStack itemStack);
|
void enchantItem(ItemStack itemStack, Player player);
|
||||||
|
|
||||||
|
void disenchantItem(ItemStack itemStack, Player player);
|
||||||
|
|
||||||
void giveItems(Player player);
|
void giveItems(Player player);
|
||||||
|
|
||||||
String getCode();
|
String getCode();
|
||||||
|
|
||||||
|
String getName();
|
||||||
|
|
||||||
void dropForbiddenItems(Player player);
|
void dropForbiddenItems(Player player);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class MineClassFactory {
|
|||||||
availableClasses.put("fire_dwarf", new FireDwarfClass());
|
availableClasses.put("fire_dwarf", new FireDwarfClass());
|
||||||
availableClasses.put("ender_elf", new EnderElfClass());
|
availableClasses.put("ender_elf", new EnderElfClass());
|
||||||
availableClasses.put("beast_master", new BeastMasterClass());
|
availableClasses.put("beast_master", new BeastMasterClass());
|
||||||
|
availableClasses.put("naga", new NagaClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Point d'accès pour l'instance unique du singleton */
|
/** Point d'accès pour l'instance unique du singleton */
|
||||||
@@ -32,13 +33,24 @@ public class MineClassFactory {
|
|||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSoulBound(ItemStack itemStack) {
|
public static boolean isSimpleSoulBound(ItemStack itemStack) {
|
||||||
if (itemStack.getItemMeta() != null && itemStack.getItemMeta().getLore() != null) {
|
if (itemStack.getItemMeta() != null && itemStack.getItemMeta().getLore() != null) {
|
||||||
return itemStack.getItemMeta().getLore().contains("Soulbound");
|
return itemStack.getItemMeta().getLore().contains("Soulbound");
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isSoulBound(ItemStack itemStack, Player player) {
|
||||||
|
if (itemStack.getItemMeta() != null && itemStack.getItemMeta().getLore() != null) {
|
||||||
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
|
return itemStack.getItemMeta().getLore().contains("Soulbound")
|
||||||
|
&& itemStack.getItemMeta().getLore().contains(player.getName())
|
||||||
|
&& mineClass.isPresent()
|
||||||
|
&& itemStack.getItemMeta().getLore().contains(mineClass.get().getName());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static void clearAllClassEffects(Player player) {
|
public static void clearAllClassEffects(Player player) {
|
||||||
for (PotionEffect activePotionEffect : player.getActivePotionEffects()) {
|
for (PotionEffect activePotionEffect : player.getActivePotionEffects()) {
|
||||||
if (activePotionEffect.getDuration() > 32766) {
|
if (activePotionEffect.getDuration() > 32766) {
|
||||||
@@ -47,11 +59,41 @@ public class MineClassFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUnbreakableAndSoulbound(ItemStack itemStack) {
|
public static void clearClassItem(Player player, ItemStack itemStack) {
|
||||||
|
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||||
|
if (itemMeta != null) {
|
||||||
|
List<String> loreList = itemMeta.getLore();
|
||||||
|
if (loreList != null && loreList.contains("Soulbound")) {
|
||||||
|
String mineClassName = loreList.get(2);
|
||||||
|
System.out.println(mineClassName);
|
||||||
|
Optional<MineClass> optionalMineClass =
|
||||||
|
MineClassFactory.getInstance().findClassByName(mineClassName);
|
||||||
|
optionalMineClass.ifPresent(System.out::println);
|
||||||
|
optionalMineClass.ifPresent(mineClass -> mineClass.disenchantItem(itemStack, player));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setUnbreakableAndSoulbound(ItemStack itemStack, Player player) {
|
||||||
if (itemStack.getItemMeta() != null) {
|
if (itemStack.getItemMeta() != null) {
|
||||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||||
itemMeta.setUnbreakable(true);
|
itemMeta.setUnbreakable(true);
|
||||||
itemMeta.setLore(Collections.singletonList("Soulbound"));
|
List<String> loreList = new ArrayList<>();
|
||||||
|
loreList.add("Soulbound");
|
||||||
|
loreList.add(player.getName());
|
||||||
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
|
mineClass.ifPresent(aClass -> loreList.add(aClass.getName()));
|
||||||
|
itemMeta.setLore(loreList);
|
||||||
|
itemStack.setItemMeta(itemMeta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeUnbreakableAndSoulbound(ItemStack itemStack, Player player) {
|
||||||
|
if (itemStack.getItemMeta() != null) {
|
||||||
|
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||||
|
itemMeta.setUnbreakable(false);
|
||||||
|
List<String> loreList = new ArrayList<>();
|
||||||
|
itemMeta.setLore(loreList);
|
||||||
itemStack.setItemMeta(itemMeta);
|
itemStack.setItemMeta(itemMeta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,6 +124,15 @@ public class MineClassFactory {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized Optional<MineClass> findClassByName(String name) {
|
||||||
|
for (Map.Entry<String, MineClass> stringMineClassEntry : availableClasses.entrySet()) {
|
||||||
|
if (name != null && name.equals(stringMineClassEntry.getValue().getName())) {
|
||||||
|
return Optional.of(stringMineClassEntry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public void reapplyEffectsByCode(String code, Player player) {
|
public void reapplyEffectsByCode(String code, Player player) {
|
||||||
availableClasses.get(code).reapplyEffects(player);
|
availableClasses.get(code).reapplyEffects(player);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public abstract class MineClassImpl implements MineClass {
|
|||||||
@Override
|
@Override
|
||||||
public void reapplyEffects(Player player) {
|
public void reapplyEffects(Player player) {
|
||||||
MineClassFactory.clearAllClassEffects(player);
|
MineClassFactory.clearAllClassEffects(player);
|
||||||
getPotionEffects()
|
getPotionEffects(player)
|
||||||
.forEach(
|
.forEach(
|
||||||
(key, value) -> {
|
(key, value) -> {
|
||||||
if (player.hasPotionEffect(key)) {
|
if (player.hasPotionEffect(key)) {
|
||||||
@@ -30,7 +30,7 @@ public abstract class MineClassImpl implements MineClass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enchantItem(ItemStack itemStack) {
|
public void enchantItem(ItemStack itemStack, Player player) {
|
||||||
if (getClassEnchantments().containsKey(itemStack.getType())) {
|
if (getClassEnchantments().containsKey(itemStack.getType())) {
|
||||||
getClassEnchantments()
|
getClassEnchantments()
|
||||||
.getOrDefault(itemStack.getType(), new ArrayList<>())
|
.getOrDefault(itemStack.getType(), new ArrayList<>())
|
||||||
@@ -38,7 +38,19 @@ public abstract class MineClassImpl implements MineClass {
|
|||||||
enchantmentIntegerPair ->
|
enchantmentIntegerPair ->
|
||||||
itemStack.addUnsafeEnchantment(
|
itemStack.addUnsafeEnchantment(
|
||||||
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
|
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
|
||||||
MineClassFactory.setUnbreakableAndSoulbound(itemStack);
|
MineClassFactory.setUnbreakableAndSoulbound(itemStack, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disenchantItem(ItemStack itemStack, Player player) {
|
||||||
|
if (getClassEnchantments().containsKey(itemStack.getType())) {
|
||||||
|
getClassEnchantments()
|
||||||
|
.getOrDefault(itemStack.getType(), new ArrayList<>())
|
||||||
|
.forEach(
|
||||||
|
enchantmentIntegerPair ->
|
||||||
|
itemStack.removeEnchantment(enchantmentIntegerPair.getFirst()));
|
||||||
|
MineClassFactory.removeUnbreakableAndSoulbound(itemStack, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
106
src/main/java/net/rawmod/mineclass/classes/NagaClass.java
Normal file
106
src/main/java/net/rawmod/mineclass/classes/NagaClass.java
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
package net.rawmod.mineclass.classes;
|
||||||
|
|
||||||
|
import net.rawmod.mineclass.utils.Pair;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class NagaClass extends MineClassImpl {
|
||||||
|
|
||||||
|
private static final Set<Material> forbiddenItems =
|
||||||
|
new HashSet<>() {
|
||||||
|
{
|
||||||
|
add(Material.DIAMOND_SWORD);
|
||||||
|
add(Material.GOLDEN_SWORD);
|
||||||
|
add(Material.IRON_SWORD);
|
||||||
|
add(Material.NETHERITE_SWORD);
|
||||||
|
add(Material.DIAMOND_HOE);
|
||||||
|
add(Material.GOLDEN_HOE);
|
||||||
|
add(Material.IRON_HOE);
|
||||||
|
add(Material.NETHERITE_HOE);
|
||||||
|
add(Material.DIAMOND_AXE);
|
||||||
|
add(Material.GOLDEN_AXE);
|
||||||
|
add(Material.IRON_AXE);
|
||||||
|
add(Material.NETHERITE_AXE);
|
||||||
|
add(Material.CROSSBOW);
|
||||||
|
add(Material.BOW);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<PotionEffectType, Integer> potionEffectsInWater =
|
||||||
|
Stream.of(
|
||||||
|
new Object[][] {
|
||||||
|
{PotionEffectType.WATER_BREATHING, 1},
|
||||||
|
{PotionEffectType.HEALTH_BOOST, 2},
|
||||||
|
{PotionEffectType.CONDUIT_POWER, 1},
|
||||||
|
{PotionEffectType.DOLPHINS_GRACE, 3},
|
||||||
|
{PotionEffectType.SATURATION, 1},
|
||||||
|
{PotionEffectType.NIGHT_VISION, 1},
|
||||||
|
{PotionEffectType.DAMAGE_RESISTANCE, 2},
|
||||||
|
{PotionEffectType.INCREASE_DAMAGE, 2},
|
||||||
|
{PotionEffectType.FAST_DIGGING, 10},
|
||||||
|
})
|
||||||
|
.collect(Collectors.toMap(data -> (PotionEffectType) data[0], data -> (Integer) data[1]));
|
||||||
|
|
||||||
|
private static final Map<PotionEffectType, Integer> potionEffectsOnEarth =
|
||||||
|
Stream.of(
|
||||||
|
new Object[][] {
|
||||||
|
{PotionEffectType.SLOW, 4},
|
||||||
|
{PotionEffectType.SLOW_DIGGING, 1},
|
||||||
|
{PotionEffectType.HUNGER, 10},
|
||||||
|
{PotionEffectType.WEAKNESS, 1},
|
||||||
|
})
|
||||||
|
.collect(Collectors.toMap(data -> (PotionEffectType) data[0], data -> (Integer) data[1]));
|
||||||
|
|
||||||
|
private static final Map<Material, List<Pair<Enchantment, Integer>>> classEnchantments =
|
||||||
|
Stream.of(
|
||||||
|
new AbstractMap.SimpleEntry<>(
|
||||||
|
Material.TRIDENT,
|
||||||
|
Arrays.asList(
|
||||||
|
new Pair<>(Enchantment.LOYALTY, 3),
|
||||||
|
new Pair<>(Enchantment.CHANNELING, 1),
|
||||||
|
new Pair<>(Enchantment.IMPALING, 5))))
|
||||||
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<Material> getForbiddenItems() {
|
||||||
|
return forbiddenItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<PotionEffectType, Integer> getPotionEffects(Player player) {
|
||||||
|
return player.isInWater() ? potionEffectsInWater : potionEffectsOnEarth;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Material, List<Pair<Enchantment, Integer>>> getClassEnchantments() {
|
||||||
|
return classEnchantments;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCode() {
|
||||||
|
return "naga";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Naga";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void giveItems(Player player) {
|
||||||
|
if (!player.getInventory().contains(Material.TRIDENT)) {
|
||||||
|
ItemStack itemStack = new ItemStack(Material.TRIDENT, 1);
|
||||||
|
enchantItem(itemStack, player);
|
||||||
|
player.getInventory().addItem(itemStack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,9 +8,13 @@ import org.bukkit.command.CommandExecutor;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class CommandClass implements CommandExecutor {
|
public class CommandClass implements CommandExecutor {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
@@ -40,7 +44,6 @@ public class CommandClass implements CommandExecutor {
|
|||||||
MineClassFactory.clearAllClassEffects(player);
|
MineClassFactory.clearAllClassEffects(player);
|
||||||
MineClassFactory.getInstance().reapplyEffectsByCode(args[0], player);
|
MineClassFactory.getInstance().reapplyEffectsByCode(args[0], player);
|
||||||
MineClassFactory.getInstance().giveItemsForClassByCode(args[0], player);
|
MineClassFactory.getInstance().giveItemsForClassByCode(args[0], player);
|
||||||
MineClassFactory.getInstance().dropForbiddenItemsForClassByCode(args[0], player);
|
|
||||||
MineClassFactory.getInstance().setClassCode(player, args[0]);
|
MineClassFactory.getInstance().setClassCode(player, args[0]);
|
||||||
if (!player.hasPotionEffect(PotionEffectType.SATURATION)) {
|
if (!player.hasPotionEffect(PotionEffectType.SATURATION)) {
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 200, 9));
|
player.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 200, 9));
|
||||||
|
|||||||
@@ -14,16 +14,19 @@ import org.bukkit.event.Event;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.block.BlockDamageEvent;
|
||||||
import org.bukkit.event.block.BlockDropItemEvent;
|
import org.bukkit.event.block.BlockDropItemEvent;
|
||||||
import org.bukkit.event.entity.*;
|
import org.bukkit.event.entity.*;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.CraftItemEvent;
|
||||||
import org.bukkit.event.player.*;
|
import org.bukkit.event.player.*;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.metadata.MetadataValue;
|
import org.bukkit.metadata.MetadataValue;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -32,6 +35,7 @@ import java.util.stream.Collectors;
|
|||||||
public class MineClassListeners implements Listener {
|
public class MineClassListeners implements Listener {
|
||||||
|
|
||||||
private final Mineclass plugin;
|
private final Mineclass plugin;
|
||||||
|
private final HashMap<Player, PlayerTimerEffects> playerTimerEffectsHashMap = new HashMap<>();
|
||||||
|
|
||||||
public MineClassListeners(Mineclass plugin) {
|
public MineClassListeners(Mineclass plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@@ -44,11 +48,25 @@ public class MineClassListeners implements Listener {
|
|||||||
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
if (mineClass.isPresent()) {
|
if (mineClass.isPresent()) {
|
||||||
mineClass.get().reapplyEffects(player);
|
mineClass.get().reapplyEffects(player);
|
||||||
player.sendMessage(String.format("Reminder : You are a %s.", mineClass.get().getCode()));
|
player.sendMessage(String.format("Reminder, your class is : %s.", mineClass.get().getName()));
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
"Hello ! The amazing MineClass mod is available on this server ! You can pick a class with the /class command.");
|
"Hello ! The amazing MineClass mod is available on this server ! You can pick a class with the /class command.");
|
||||||
}
|
}
|
||||||
|
if (!playerTimerEffectsHashMap.containsKey(player)) {
|
||||||
|
PlayerTimerEffects playerTimerEffects = new PlayerTimerEffects(player);
|
||||||
|
playerTimerEffectsHashMap.put(player, playerTimerEffects);
|
||||||
|
playerTimerEffects.runTaskTimer(this.plugin, 20, 20);
|
||||||
|
} else {
|
||||||
|
playerTimerEffectsHashMap.get(player).runTaskTimer(this.plugin, 20, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void on(PlayerQuitEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (playerTimerEffectsHashMap.containsKey(player)) {
|
||||||
|
playerTimerEffectsHashMap.get(player).cancel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -59,24 +77,70 @@ public class MineClassListeners implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(EntityPickupItemEvent event) {
|
public void on(CraftItemEvent event) {
|
||||||
if (event.getEntity() instanceof Player) {
|
if (event.getWhoClicked() instanceof Player) {
|
||||||
Player player = (Player) event.getEntity();
|
Player player = (Player) event.getWhoClicked();
|
||||||
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
if (mineClass.isPresent()) {
|
mineClass.ifPresent(it -> enchantItem(event));
|
||||||
if (mineClass.get().isItemForbidden(event.getItem().getItemStack().getType())) {
|
}
|
||||||
event.setCancelled(true);
|
}
|
||||||
}
|
|
||||||
mineClass.get().enchantItem(event.getItem().getItemStack());
|
@EventHandler
|
||||||
|
public void on(BlockDamageEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
ItemStack itemInHand = event.getItemInHand();
|
||||||
|
applyBadEffects(player, itemInHand);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isItemforbidden(Player player, ItemStack itemStack) {
|
||||||
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
|
return mineClass
|
||||||
|
.map(
|
||||||
|
aClass ->
|
||||||
|
Optional.ofNullable(itemStack.getItemMeta())
|
||||||
|
.map(ItemMeta::getLore)
|
||||||
|
.map(it -> it.contains(player.getName()) && !it.contains(aClass.getName()))
|
||||||
|
.orElse(false))
|
||||||
|
.orElse(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyBadEffects(Player player, ItemStack itemInHand) {
|
||||||
|
if (itemInHand == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
|
if (mineClass.isPresent() && mineClass.get().isItemForbidden(itemInHand.getType())
|
||||||
|
|| isItemforbidden(player, itemInHand)) {
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 200, 0));
|
||||||
|
if (MineClassFactory.getInstance().getClassCode(player).equals("elf")) {
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 3));
|
||||||
|
} else {
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 1));
|
||||||
}
|
}
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 200, 9));
|
||||||
|
player.setFoodLevel(Math.max(player.getFoodLevel() - 2, 0));
|
||||||
|
player.setSaturation(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void on(PlayerItemHeldEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
ItemStack itemStack = player.getInventory().getItem(event.getNewSlot());
|
||||||
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
|
if (itemStack != null
|
||||||
|
&& (mineClass.isPresent() && mineClass.get().isItemForbidden(itemStack.getType())
|
||||||
|
|| isItemforbidden(player, itemStack))) {
|
||||||
|
player.sendMessage("Warning : You are unable to use this item efficiently.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(PlayerDeathEvent event) {
|
public void on(PlayerDeathEvent event) {
|
||||||
|
Player player = event.getEntity();
|
||||||
List<ItemStack> itemStackList =
|
List<ItemStack> itemStackList =
|
||||||
event.getDrops().stream()
|
event.getDrops().stream()
|
||||||
.filter(MineClassFactory::isSoulBound)
|
.filter(it -> MineClassFactory.isSoulBound(it, player))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
event.getDrops().removeAll(itemStackList);
|
event.getDrops().removeAll(itemStackList);
|
||||||
ClassItemPossessed.getInstance().addItems(event.getEntity().getName(), itemStackList);
|
ClassItemPossessed.getInstance().addItems(event.getEntity().getName(), itemStackList);
|
||||||
@@ -91,41 +155,14 @@ public class MineClassListeners implements Listener {
|
|||||||
ClassItemPossessed.getInstance().clearItems(event.getPlayer().getName());
|
ClassItemPossessed.getInstance().clearItems(event.getPlayer().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
private void enchantItem(CraftItemEvent event) {
|
||||||
public void on(InventoryClickEvent event) {
|
|
||||||
if (event.getWhoClicked() instanceof Player) {
|
|
||||||
if (isForbiddenItem(event)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
enchantItem(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isForbiddenItem(InventoryClickEvent event) {
|
|
||||||
Player player = (Player) event.getWhoClicked();
|
Player player = (Player) event.getWhoClicked();
|
||||||
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
if (mineClass.isPresent()) {
|
if (event.getCurrentItem() != null) {
|
||||||
if (event.getCurrentItem() != null
|
mineClass.ifPresent(it -> it.enchantItem(event.getCurrentItem(), player));
|
||||||
&& mineClass.get().isItemForbidden(event.getCurrentItem().getType())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return event.getCursor() != null
|
|
||||||
&& mineClass.get().isItemForbidden(event.getCursor().getType());
|
|
||||||
}
|
}
|
||||||
return false;
|
if (event.getCursor() != null) {
|
||||||
}
|
mineClass.ifPresent(it -> it.enchantItem(event.getCursor(), player));
|
||||||
|
|
||||||
private void enchantItem(InventoryClickEvent event) {
|
|
||||||
Player player = (Player) event.getWhoClicked();
|
|
||||||
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
|
||||||
if (mineClass.isPresent()) {
|
|
||||||
if (event.getCurrentItem() != null && !MineClassFactory.isSoulBound(event.getCurrentItem())) {
|
|
||||||
mineClass.get().enchantItem(event.getCurrentItem());
|
|
||||||
}
|
|
||||||
if (event.getCursor() != null && !MineClassFactory.isSoulBound(event.getCursor())) {
|
|
||||||
mineClass.get().enchantItem(event.getCursor());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,16 +219,17 @@ public class MineClassListeners implements Listener {
|
|||||||
public void on(FoodLevelChangeEvent event) {
|
public void on(FoodLevelChangeEvent event) {
|
||||||
if (event.getEntity() instanceof Player) {
|
if (event.getEntity() instanceof Player) {
|
||||||
Player player = (Player) event.getEntity();
|
Player player = (Player) event.getEntity();
|
||||||
if (MineClassFactory.getInstance().getClassCode(player).equals("elf")) {
|
if (MineClassFactory.getInstance().getClassCode(player).equals("elf")
|
||||||
int difference = player.getFoodLevel() - event.getFoodLevel();
|
&& player.getPotionEffect(PotionEffectType.HUNGER) == null) {
|
||||||
|
int difference = event.getFoodLevel() - player.getFoodLevel();
|
||||||
if (difference > 0) {
|
if (difference > 0) {
|
||||||
event.setCancelled(true);
|
event.setFoodLevel(player.getFoodLevel() + (difference * 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")) {
|
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")) {
|
||||||
int difference = player.getFoodLevel() - event.getFoodLevel();
|
int difference = player.getFoodLevel() - event.getFoodLevel();
|
||||||
if (difference > 0) {
|
if (difference > 0) {
|
||||||
event.setFoodLevel(player.getFoodLevel() - (difference * 2));
|
event.setFoodLevel(Math.max(player.getFoodLevel() - (difference * 2), 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -201,13 +239,14 @@ public class MineClassListeners implements Listener {
|
|||||||
public void on(EntityDamageByEntityEvent event) {
|
public void on(EntityDamageByEntityEvent event) {
|
||||||
if (event.getDamager() instanceof Player) {
|
if (event.getDamager() instanceof Player) {
|
||||||
Player player = (Player) event.getDamager();
|
Player player = (Player) event.getDamager();
|
||||||
|
ItemStack itemInMainHand = player.getInventory().getItemInMainHand();
|
||||||
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")
|
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")
|
||||||
&& player.getInventory().getItemInMainHand().getType().equals(Material.ENDER_PEARL)) {
|
&& itemInMainHand.getType().equals(Material.ENDER_PEARL)) {
|
||||||
PlayerHitCounter.getInstance().increaseHitCount(player);
|
PlayerHitCounter.getInstance().increaseHitCount(player);
|
||||||
if (player.getAttackCooldown() == 1) {
|
if (player.getAttackCooldown() == 1) {
|
||||||
// Vampirisme
|
// Vampirisme
|
||||||
if (player.getHealth() <= 19) {
|
if (player.getHealth() < 20) {
|
||||||
player.setHealth(player.getHealth() + 1);
|
PlayerUtils.heal(player, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (PlayerHitCounter.getInstance().getHitCounter(player) == 15) {
|
if (PlayerHitCounter.getInstance().getHitCounter(player) == 15) {
|
||||||
@@ -219,7 +258,10 @@ public class MineClassListeners implements Listener {
|
|||||||
player.addPotionEffect(absorption);
|
player.addPotionEffect(absorption);
|
||||||
}
|
}
|
||||||
// Damage
|
// Damage
|
||||||
event.setDamage(event.getDamage() * (player.getAttackCooldown() * 10));
|
event.setDamage(Math.max(event.getDamage() * (player.getAttackCooldown() * 10), 1));
|
||||||
|
} else if (MineClassFactory.getInstance().getClassCode(player).equals("elf")
|
||||||
|
&& itemInMainHand.getType().equals(Material.BOW)) {
|
||||||
|
event.setDamage(Math.max(event.getDamage() * (player.getAttackCooldown() * 6), 1));
|
||||||
}
|
}
|
||||||
} else if (event.getDamager().hasMetadata("beastMasterWolfType")) {
|
} else if (event.getDamager().hasMetadata("beastMasterWolfType")) {
|
||||||
event.getDamager().getMetadata("beastMasterWolfType").stream()
|
event.getDamager().getMetadata("beastMasterWolfType").stream()
|
||||||
@@ -251,7 +293,7 @@ public class MineClassListeners implements Listener {
|
|||||||
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")
|
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")
|
||||||
&& event.getEntity() instanceof EnderPearl) {
|
&& event.getEntity() instanceof EnderPearl) {
|
||||||
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 1);
|
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 1);
|
||||||
MineClassFactory.setUnbreakableAndSoulbound(itemStack);
|
MineClassFactory.setUnbreakableAndSoulbound(itemStack, player);
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -268,40 +310,64 @@ public class MineClassListeners implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(PlayerInteractEvent event) {
|
public void on(PlayerInteractEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
ItemStack itemInHand = event.getItem();
|
||||||
|
boolean effect = false;
|
||||||
if (player.isSneaking()
|
if (player.isSneaking()
|
||||||
&& event.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|
&& event.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|
||||||
&& event.useInteractedBlock().equals(Event.Result.ALLOW)
|
&& event.useInteractedBlock().equals(Event.Result.ALLOW)
|
||||||
&& MineClassFactory.getInstance().getClassCode(player).equals("beast_master")
|
&& MineClassFactory.getInstance().getClassCode(player).equals("beast_master")
|
||||||
&& event.getClickedBlock() != null
|
&& event.getClickedBlock() != null
|
||||||
&& event.getItem() != null) {
|
&& itemInHand != null) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
ItemStack itemStack = event.getItem();
|
switch (itemInHand.getType()) {
|
||||||
switch (itemStack.getType()) {
|
|
||||||
case SADDLE:
|
case SADDLE:
|
||||||
invokeHorse(event, player);
|
invokeHorse(event, player);
|
||||||
break;
|
break;
|
||||||
case BONE:
|
case BONE:
|
||||||
try {
|
try {
|
||||||
invokeWolf(event, player, itemStack);
|
invokeWolf(event, player, itemInHand);
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
player.sendMessage(e.getMessage());
|
player.sendMessage(e.getMessage());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SALMON:
|
case SALMON:
|
||||||
invokeCat(event, player, itemStack);
|
invokeCat(event, player, itemInHand);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
effect = true;
|
||||||
}
|
}
|
||||||
if (player.isSneaking()
|
if (player.isSneaking()
|
||||||
&& (event.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|
&& (event.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|
||||||
|| event.getAction().equals(Action.RIGHT_CLICK_AIR))
|
|| event.getAction().equals(Action.RIGHT_CLICK_AIR))
|
||||||
&& MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")
|
&& MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")
|
||||||
&& event.getItem() != null
|
&& itemInHand != null
|
||||||
&& event.getItem().getType().equals(Material.ENDER_PEARL)) {
|
&& itemInHand.getType().equals(Material.ENDER_PEARL)) {
|
||||||
player.openInventory(player.getEnderChest());
|
player.openInventory(player.getEnderChest());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
effect = true;
|
||||||
|
}
|
||||||
|
if (player.isSneaking()
|
||||||
|
&& (event.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|
||||||
|
|| event.getAction().equals(Action.RIGHT_CLICK_AIR))
|
||||||
|
&& itemInHand != null) {
|
||||||
|
System.out.println(itemInHand);
|
||||||
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
|
if (MineClassFactory.isSimpleSoulBound(itemInHand)) {
|
||||||
|
System.out.println("Clearing");
|
||||||
|
MineClassFactory.clearClassItem(player, itemInHand);
|
||||||
|
event.setCancelled(true);
|
||||||
|
} else {
|
||||||
|
if (mineClass.isPresent()) {
|
||||||
|
mineClass.get().enchantItem(itemInHand, player);
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
effect = true;
|
||||||
|
}
|
||||||
|
if (!effect) {
|
||||||
|
applyBadEffects(player, itemInHand);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package net.rawmod.mineclass.utils;
|
||||||
|
|
||||||
|
import net.rawmod.mineclass.classes.MineClass;
|
||||||
|
import net.rawmod.mineclass.classes.MineClassFactory;
|
||||||
|
import org.bukkit.attribute.Attribute;
|
||||||
|
import org.bukkit.attribute.AttributeInstance;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class PlayerTimerEffects extends BukkitRunnable {
|
||||||
|
|
||||||
|
private final Player player;
|
||||||
|
private boolean inWater;
|
||||||
|
|
||||||
|
public PlayerTimerEffects(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
this.inWater = player.isInWater();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
|
||||||
|
if (mineClass.isPresent() && mineClass.get().getCode().equals("naga")) {
|
||||||
|
if (!player.isInWater()) {
|
||||||
|
player.damage(1);
|
||||||
|
}
|
||||||
|
if (player.isInWater() != inWater) {
|
||||||
|
inWater = player.isInWater();
|
||||||
|
mineClass.get().reapplyEffects(player);
|
||||||
|
}
|
||||||
|
if (player.getFireTicks() > 0) {
|
||||||
|
player.damage(4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mineClass.isPresent() && mineClass.get().getCode().equals("fire_dwarf")) {
|
||||||
|
if (player.getFireTicks() > 0) {
|
||||||
|
PlayerUtils.heal(player, 2);
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 40, 3));
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 40, 1));
|
||||||
|
player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 40, 1));
|
||||||
|
}
|
||||||
|
if (player.isInWater()) {
|
||||||
|
player.damage(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/main/java/net/rawmod/mineclass/utils/PlayerUtils.java
Normal file
14
src/main/java/net/rawmod/mineclass/utils/PlayerUtils.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package net.rawmod.mineclass.utils;
|
||||||
|
|
||||||
|
import org.bukkit.attribute.Attribute;
|
||||||
|
import org.bukkit.attribute.AttributeInstance;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class PlayerUtils {
|
||||||
|
public static void heal(Player player, double amount) {
|
||||||
|
AttributeInstance maxHealh = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
||||||
|
if (maxHealh != null) {
|
||||||
|
player.setHealth(Math.min(player.getHealth() + amount, maxHealh.getValue()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user