Working on

This commit is contained in:
2021-12-11 21:38:42 +01:00
parent 6a089d9f66
commit 2e9f397155
8 changed files with 60 additions and 9 deletions

View File

@@ -64,6 +64,11 @@ 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)) {

View File

@@ -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) {}
} }

View File

@@ -72,6 +72,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) {}
} }

View File

@@ -78,6 +78,11 @@ 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);

View File

@@ -108,6 +108,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) {}
} }

View File

@@ -29,5 +29,7 @@ public interface MineClass {
String getCode(); String getCode();
String getName();
void dropForbiddenItems(Player player); void dropForbiddenItems(Player player);
} }

View File

@@ -55,6 +55,8 @@ public class MineClassFactory {
List<String> loreList = new ArrayList<>(); List<String> loreList = new ArrayList<>();
loreList.add("Soulbound"); loreList.add("Soulbound");
loreList.add(player.getName()); loreList.add(player.getName());
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
mineClass.ifPresent(aClass -> loreList.add(aClass.getName()));
itemMeta.setLore(loreList); itemMeta.setLore(loreList);
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
} }

View File

@@ -20,6 +20,7 @@ import org.bukkit.event.entity.*;
import org.bukkit.event.inventory.CraftItemEvent; 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;
@@ -75,16 +76,25 @@ public class MineClassListeners implements Listener {
applyBadEffects(player, itemInHand); applyBadEffects(player, itemInHand);
} }
@EventHandler private boolean isItemforbidden(Player player, ItemStack itemStack) {
public void on(PlayerItemDamageEvent event) { Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
Player player = event.getPlayer(); return mineClass
ItemStack itemInHand = event.getItem(); .map(
applyBadEffects(player, itemInHand); 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) { private void applyBadEffects(Player player, ItemStack itemInHand) {
if (itemInHand == null) {
return;
}
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player); Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
if (mineClass.isPresent() && mineClass.get().isItemForbidden(itemInHand.getType())) { if (mineClass.isPresent() && mineClass.get().isItemForbidden(itemInHand.getType())
|| isItemforbidden(player, itemInHand)) {
player.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 200, 0)); player.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 200, 0));
if (MineClassFactory.getInstance().getClassCode(player).equals("elf")) { if (MineClassFactory.getInstance().getClassCode(player).equals("elf")) {
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 3)); player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 3));
@@ -101,11 +111,10 @@ public class MineClassListeners implements Listener {
public void on(PlayerItemHeldEvent event) { public void on(PlayerItemHeldEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
ItemStack itemStack = player.getInventory().getItem(event.getNewSlot()); ItemStack itemStack = player.getInventory().getItem(event.getNewSlot());
player.sendMessage(String.valueOf(itemStack));
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player); Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
if (itemStack != null if (itemStack != null
&& mineClass.isPresent() && (mineClass.isPresent() && mineClass.get().isItemForbidden(itemStack.getType())
&& mineClass.get().isItemForbidden(itemStack.getType())) { || isItemforbidden(player, itemStack))) {
player.sendMessage("Warning : You are unable to use this item efficiently."); player.sendMessage("Warning : You are unable to use this item efficiently.");
} }
} }
@@ -285,6 +294,8 @@ 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();
applyBadEffects(player, itemInHand);
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)
@@ -320,6 +331,17 @@ public class MineClassListeners implements Listener {
player.openInventory(player.getEnderChest()); player.openInventory(player.getEnderChest());
event.setCancelled(true); event.setCancelled(true);
} }
if (player.isSneaking()
&& (event.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|| event.getAction().equals(Action.RIGHT_CLICK_AIR))
&& event.getItem() != null) {
Optional<MineClass> mineClass = MineClassFactory.getInstance().getRightClass(player);
mineClass.ifPresent(
it -> {
it.enchantItem(event.getItem(), player);
event.setCancelled(true);
});
}
} }
private void invokeCat(PlayerInteractEvent event, Player player, ItemStack itemStack) { private void invokeCat(PlayerInteractEvent event, Player player, ItemStack itemStack) {