Working on

This commit is contained in:
2021-12-11 20:54:22 +01:00
parent 26091142a8
commit 6a089d9f66
8 changed files with 83 additions and 66 deletions

View File

@@ -5,9 +5,6 @@ apply plugin: 'java'
group = 'net.rawmod'
version = '0.1.5'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
repositories {
mavenCentral()
maven {

View File

@@ -68,17 +68,17 @@ public class BeastMasterClass extends MineClassImpl {
public void giveItems(Player player) {
if (!player.getInventory().contains(Material.BONE)) {
ItemStack itemStack = new ItemStack(Material.BONE, 1);
enchantItem(itemStack);
enchantItem(itemStack, player);
player.getInventory().addItem(itemStack);
}
if (!player.getInventory().contains(Material.SALMON)) {
ItemStack itemStack = new ItemStack(Material.SALMON, 1);
enchantItem(itemStack);
enchantItem(itemStack, player);
player.getInventory().addItem(itemStack);
}
if (!player.getInventory().contains(Material.SADDLE)) {
ItemStack itemStack = new ItemStack(Material.SADDLE, 1);
enchantItem(itemStack);
enchantItem(itemStack, player);
player.getInventory().addItem(itemStack);
}
}

View File

@@ -92,7 +92,7 @@ public class EnderElfClass extends MineClassImpl {
public void giveItems(Player player) {
if (!player.getInventory().contains(Material.ENDER_PEARL)) {
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 2);
enchantItem(itemStack);
enchantItem(itemStack, player);
player.getInventory().addItem(itemStack);
}
}

View File

@@ -23,7 +23,7 @@ public interface MineClass {
boolean isItemForbidden(Material type);
void enchantItem(ItemStack itemStack);
void enchantItem(ItemStack itemStack, Player player);
void giveItems(Player player);

View File

@@ -32,9 +32,10 @@ public class MineClassFactory {
return INSTANCE;
}
public static boolean isSoulBound(ItemStack itemStack) {
public static boolean isSoulBound(ItemStack itemStack, Player player) {
if (itemStack.getItemMeta() != null && itemStack.getItemMeta().getLore() != null) {
return itemStack.getItemMeta().getLore().contains("Soulbound");
return itemStack.getItemMeta().getLore().contains("Soulbound")
&& itemStack.getItemMeta().getLore().contains(player.getName());
}
return false;
}
@@ -47,11 +48,14 @@ public class MineClassFactory {
}
}
public static void setUnbreakableAndSoulbound(ItemStack itemStack) {
public static void setUnbreakableAndSoulbound(ItemStack itemStack, Player player) {
if (itemStack.getItemMeta() != null) {
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setUnbreakable(true);
itemMeta.setLore(Collections.singletonList("Soulbound"));
List<String> loreList = new ArrayList<>();
loreList.add("Soulbound");
loreList.add(player.getName());
itemMeta.setLore(loreList);
itemStack.setItemMeta(itemMeta);
}
}

View File

@@ -30,7 +30,7 @@ public abstract class MineClassImpl implements MineClass {
}
@Override
public void enchantItem(ItemStack itemStack) {
public void enchantItem(ItemStack itemStack, Player player) {
if (getClassEnchantments().containsKey(itemStack.getType())) {
getClassEnchantments()
.getOrDefault(itemStack.getType(), new ArrayList<>())
@@ -38,7 +38,7 @@ public abstract class MineClassImpl implements MineClass {
enchantmentIntegerPair ->
itemStack.addUnsafeEnchantment(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
MineClassFactory.setUnbreakableAndSoulbound(itemStack);
MineClassFactory.setUnbreakableAndSoulbound(itemStack, player);
}
}

View File

@@ -40,7 +40,6 @@ public class CommandClass implements CommandExecutor {
MineClassFactory.clearAllClassEffects(player);
MineClassFactory.getInstance().reapplyEffectsByCode(args[0], player);
MineClassFactory.getInstance().giveItemsForClassByCode(args[0], player);
MineClassFactory.getInstance().dropForbiddenItemsForClassByCode(args[0], player);
MineClassFactory.getInstance().setClassCode(player, args[0]);
if (!player.hasPotionEffect(PotionEffectType.SATURATION)) {
player.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 200, 9));

View File

@@ -14,9 +14,10 @@ import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockDropItemEvent;
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.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
@@ -59,24 +60,62 @@ public class MineClassListeners implements Listener {
}
@EventHandler
public void on(EntityPickupItemEvent event) {
if (event.getEntity() instanceof Player) {
Player player = (Player) event.getEntity();
public void on(CraftItemEvent event) {
if (event.getWhoClicked() instanceof Player) {
Player player = (Player) event.getWhoClicked();
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
if (mineClass.isPresent()) {
if (mineClass.get().isItemForbidden(event.getItem().getItemStack().getType())) {
event.setCancelled(true);
}
mineClass.get().enchantItem(event.getItem().getItemStack());
mineClass.ifPresent(it -> enchantItem(event));
}
}
@EventHandler
public void on(BlockDamageEvent event) {
Player player = event.getPlayer();
ItemStack itemInHand = event.getItemInHand();
applyBadEffects(player, itemInHand);
}
@EventHandler
public void on(PlayerItemDamageEvent event) {
Player player = event.getPlayer();
ItemStack itemInHand = event.getItem();
applyBadEffects(player, itemInHand);
}
private void applyBadEffects(Player player, ItemStack itemInHand) {
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
if (mineClass.isPresent() && mineClass.get().isItemForbidden(itemInHand.getType())) {
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());
player.sendMessage(String.valueOf(itemStack));
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
if (itemStack != null
&& mineClass.isPresent()
&& mineClass.get().isItemForbidden(itemStack.getType())) {
player.sendMessage("Warning : You are unable to use this item efficiently.");
}
}
@EventHandler
public void on(PlayerDeathEvent event) {
Player player = event.getEntity();
List<ItemStack> itemStackList =
event.getDrops().stream()
.filter(MineClassFactory::isSoulBound)
.filter(it -> MineClassFactory.isSoulBound(it, player))
.collect(Collectors.toList());
event.getDrops().removeAll(itemStackList);
ClassItemPossessed.getInstance().addItems(event.getEntity().getName(), itemStackList);
@@ -91,41 +130,14 @@ public class MineClassListeners implements Listener {
ClassItemPossessed.getInstance().clearItems(event.getPlayer().getName());
}
@EventHandler
public void on(InventoryClickEvent event) {
if (event.getWhoClicked() instanceof Player) {
if (isForbiddenItem(event)) {
event.setCancelled(true);
return;
}
enchantItem(event);
}
}
private boolean isForbiddenItem(InventoryClickEvent event) {
private void enchantItem(CraftItemEvent event) {
Player player = (Player) event.getWhoClicked();
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
if (mineClass.isPresent()) {
if (event.getCurrentItem() != null
&& mineClass.get().isItemForbidden(event.getCurrentItem().getType())) {
return true;
}
return event.getCursor() != null
&& mineClass.get().isItemForbidden(event.getCursor().getType());
if (event.getCurrentItem() != null) {
mineClass.ifPresent(it -> it.enchantItem(event.getCurrentItem(), player));
}
return false;
}
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());
}
if (event.getCursor() != null) {
mineClass.ifPresent(it -> it.enchantItem(event.getCursor(), player));
}
}
@@ -182,16 +194,17 @@ public class MineClassListeners implements Listener {
public void on(FoodLevelChangeEvent event) {
if (event.getEntity() instanceof Player) {
Player player = (Player) event.getEntity();
if (MineClassFactory.getInstance().getClassCode(player).equals("elf")) {
int difference = player.getFoodLevel() - event.getFoodLevel();
if (MineClassFactory.getInstance().getClassCode(player).equals("elf")
&& player.getPotionEffect(PotionEffectType.HUNGER) == null) {
int difference = event.getFoodLevel() - player.getFoodLevel();
if (difference > 0) {
event.setCancelled(true);
event.setFoodLevel(player.getFoodLevel() + (difference * 2));
}
}
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")) {
int difference = player.getFoodLevel() - event.getFoodLevel();
if (difference > 0) {
event.setFoodLevel(player.getFoodLevel() - (difference * 2));
event.setFoodLevel(Math.max(player.getFoodLevel() - (difference * 2), 0));
}
}
}
@@ -201,13 +214,14 @@ public class MineClassListeners implements Listener {
public void on(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player) {
Player player = (Player) event.getDamager();
ItemStack itemInMainHand = player.getInventory().getItemInMainHand();
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);
if (player.getAttackCooldown() == 1) {
// Vampirisme
if (player.getHealth() <= 19) {
player.setHealth(player.getHealth() + 1);
if (player.getHealth() < 20) {
player.setHealth(Math.min(player.getHealth() + 1, 20));
}
}
if (PlayerHitCounter.getInstance().getHitCounter(player) == 15) {
@@ -219,7 +233,10 @@ public class MineClassListeners implements Listener {
player.addPotionEffect(absorption);
}
// 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() * 4), 1));
}
} else if (event.getDamager().hasMetadata("beastMasterWolfType")) {
event.getDamager().getMetadata("beastMasterWolfType").stream()
@@ -251,7 +268,7 @@ public class MineClassListeners implements Listener {
if (MineClassFactory.getInstance().getClassCode(player).equals("ender_elf")
&& event.getEntity() instanceof EnderPearl) {
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 1);
MineClassFactory.setUnbreakableAndSoulbound(itemStack);
MineClassFactory.setUnbreakableAndSoulbound(itemStack, player);
player.getInventory().addItem(itemStack);
}
}