Working on project
This commit is contained in:
@@ -2,7 +2,6 @@ package net.babamod.mineclass.classes;
|
||||
|
||||
import net.babamod.mineclass.utils.AppliedStatus;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
@@ -86,28 +85,33 @@ public class ClassWrapper {
|
||||
|
||||
public static void enchantItem(Player player, ItemStack itemStack) {
|
||||
if (AppliedStatus.getInstance().isDwarf(player.getName())) {
|
||||
if (DwarfClass.isItemEnchantable(itemStack.getType())) {
|
||||
setUnbreakableAndSoulbound(itemStack);
|
||||
DwarfClass.enchantItem(itemStack);
|
||||
}
|
||||
}
|
||||
if (AppliedStatus.getInstance().isElf(player.getName())) {
|
||||
if (ElfClass.isItemEnchantable(itemStack.getType())) {
|
||||
setUnbreakableAndSoulbound(itemStack);
|
||||
ElfClass.enchantItem(itemStack);
|
||||
}
|
||||
}
|
||||
if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
|
||||
if (FireDwarfClass.isItemEnchantable(itemStack.getType())) {
|
||||
setUnbreakableAndSoulbound(itemStack);
|
||||
FireDwarfClass.enchantItem(itemStack);
|
||||
}
|
||||
}
|
||||
if (AppliedStatus.getInstance().isNaga(player.getName())) {
|
||||
if (NagaClass.isItemEnchantable(itemStack.getType())) {
|
||||
setUnbreakableAndSoulbound(itemStack);
|
||||
NagaClass.enchantItem(itemStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeAllEnchantments(ItemStack itemStack) {
|
||||
itemStack
|
||||
.getEnchantments()
|
||||
.keySet()
|
||||
.forEach(itemStack::removeEnchantment);
|
||||
itemStack.getEnchantments().keySet().forEach(itemStack::removeEnchantment);
|
||||
removeUnbreakableAndSoulbound(itemStack);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
|
||||
@@ -3,10 +3,8 @@ package net.babamod.mineclass.classes;
|
||||
import net.babamod.mineclass.utils.Pair;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
@@ -85,8 +83,7 @@ public class ElfClass {
|
||||
.getOrDefault(itemStack.getType(), new ArrayList<>())
|
||||
.forEach(
|
||||
enchantmentIntegerPair ->
|
||||
itemStack
|
||||
.addUnsafeEnchantment(
|
||||
itemStack.addUnsafeEnchantment(
|
||||
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,8 @@ package net.babamod.mineclass.classes;
|
||||
import net.babamod.mineclass.utils.Pair;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
@@ -32,7 +30,6 @@ public class FireDwarfClass {
|
||||
add(Material.IRON_SHOVEL);
|
||||
add(Material.NETHERITE_SHOVEL);
|
||||
add(Material.BOW);
|
||||
add(Material.ARROW);
|
||||
add(Material.TRIDENT);
|
||||
}
|
||||
};
|
||||
@@ -86,6 +83,9 @@ public class FireDwarfClass {
|
||||
new AbstractMap.SimpleEntry<>(
|
||||
Material.WOODEN_PICKAXE,
|
||||
Collections.singletonList(new Pair<>(Enchantment.DIG_SPEED, 5))),
|
||||
new AbstractMap.SimpleEntry<>(
|
||||
Material.CROSSBOW,
|
||||
Collections.singletonList(new Pair<>(Enchantment.ARROW_INFINITE, 1))),
|
||||
new AbstractMap.SimpleEntry<>(
|
||||
Material.FLINT_AND_STEEL, new ArrayList<Pair<Enchantment, Integer>>())
|
||||
// See to make infinity working on crossbow
|
||||
@@ -123,8 +123,7 @@ public class FireDwarfClass {
|
||||
.getOrDefault(itemStack.getType(), new ArrayList<>())
|
||||
.forEach(
|
||||
enchantmentIntegerPair ->
|
||||
itemStack
|
||||
.addUnsafeEnchantment(
|
||||
itemStack.addUnsafeEnchantment(
|
||||
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
@@ -104,8 +103,7 @@ public class NagaClass {
|
||||
.getOrDefault(itemStack.getType(), new ArrayList<>())
|
||||
.forEach(
|
||||
enchantmentIntegerPair ->
|
||||
itemStack
|
||||
.addUnsafeEnchantment(
|
||||
itemStack.addUnsafeEnchantment(
|
||||
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package net.babamod.mineclass.utils;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -4,21 +4,22 @@ import net.babamod.mineclass.Mineclass;
|
||||
import net.babamod.mineclass.classes.ClassWrapper;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.SmallFireball;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.inventory.InventoryAction;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.CraftingInventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -50,15 +51,10 @@ public class MineClassListeners implements Listener {
|
||||
public void on(EntityPickupItemEvent event) {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
Player player = (Player) event.getEntity();
|
||||
player.sendMessage("You picked up " + event.getItem().getItemStack().getType());
|
||||
if (ClassWrapper.isItemForbidden(player, event.getItem().getItemStack().getType())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
player.sendMessage(
|
||||
String.valueOf(
|
||||
ClassWrapper.isItemEnchantable(player, event.getItem().getItemStack().getType())));
|
||||
if (ClassWrapper.isItemEnchantable(player, event.getItem().getItemStack().getType())) {
|
||||
player.sendMessage("Enchantable item !");
|
||||
ClassWrapper.enchantItem(player, event.getItem().getItemStack());
|
||||
}
|
||||
}
|
||||
@@ -82,66 +78,127 @@ public class MineClassListeners implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void on(PlayerDropItemEvent event) {
|
||||
if (ClassWrapper.isSoulBound(event.getItemDrop().getItemStack())) {
|
||||
ClassWrapper.removeAllEnchantments(event.getItemDrop().getItemStack());
|
||||
public void on(InventoryClickEvent event) {
|
||||
if ((event.getAction().equals(InventoryAction.PICKUP_ALL)
|
||||
|| event.getAction().equals(InventoryAction.PICKUP_HALF)
|
||||
|| event.getAction().equals(InventoryAction.PICKUP_ONE)
|
||||
|| event.getAction().equals(InventoryAction.PICKUP_SOME))
|
||||
&& event.getWhoClicked() instanceof Player) {
|
||||
if (isForbiddenItem(event)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
enchantItem(event);
|
||||
}
|
||||
|
||||
if ((event.getAction().equals(InventoryAction.PLACE_ALL)
|
||||
|| event.getAction().equals(InventoryAction.PLACE_ONE)
|
||||
|| event.getAction().equals(InventoryAction.PLACE_SOME))
|
||||
&& event.getWhoClicked() instanceof Player
|
||||
&& !(event.getClickedInventory() instanceof PlayerInventory)) {
|
||||
unenchantItem(event);
|
||||
}
|
||||
|
||||
if ((event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY))
|
||||
&& event.getWhoClicked() instanceof Player) {
|
||||
if (isForbiddenItem(event)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
enchantItem(event);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isForbiddenItem(InventoryClickEvent event) {
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
if (AppliedStatus.getInstance().hasAClass(player.getName())) {
|
||||
if (event.getCurrentItem() != null
|
||||
&& ClassWrapper.isItemForbidden(player, event.getCurrentItem().getType())) {
|
||||
return true;
|
||||
}
|
||||
return event.getCursor() != null
|
||||
&& ClassWrapper.isItemForbidden(player, event.getCursor().getType());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void enchantItem(InventoryClickEvent event) {
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
if (AppliedStatus.getInstance().hasAClass(player.getName())) {
|
||||
if (event.getCurrentItem() != null && !ClassWrapper.isSoulBound(event.getCurrentItem())) {
|
||||
ClassWrapper.enchantItem(player, event.getCurrentItem());
|
||||
}
|
||||
if (event.getCursor() != null && !ClassWrapper.isSoulBound(event.getCursor())) {
|
||||
ClassWrapper.enchantItem(player, event.getCursor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void unenchantItem(InventoryClickEvent event) {
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
if (AppliedStatus.getInstance().hasAClass(player.getName())) {
|
||||
if (event.getCurrentItem() != null && ClassWrapper.isSoulBound(event.getCurrentItem())) {
|
||||
ClassWrapper.removeAllEnchantments(event.getCurrentItem());
|
||||
}
|
||||
if (event.getCursor() != null && ClassWrapper.isSoulBound(event.getCursor())) {
|
||||
ClassWrapper.removeAllEnchantments(event.getCursor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void on(InventoryClickEvent event) {
|
||||
System.out.println("InventoryClickEvent triggered !");
|
||||
System.out.println("-----------------------------------");
|
||||
System.out.println(event.getAction());
|
||||
System.out.println(event.getClick());
|
||||
System.out.println(event.getClickedInventory());
|
||||
System.out.println(event.getCurrentItem());
|
||||
System.out.println(event.getCursor());
|
||||
System.out.println(event.getSlotType());
|
||||
System.out.println(Arrays.toString(event.getHandlers().getRegisteredListeners()));
|
||||
System.out.println(event.getHotbarButton());
|
||||
System.out.println(event.getRawSlot());
|
||||
System.out.println(event.getSlot());
|
||||
|
||||
if (event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)
|
||||
&& event.getClickedInventory() instanceof CraftingInventory) {
|
||||
System.out.println("We are in a crafting inventory.");
|
||||
CraftingInventory playerInventory = (CraftingInventory) event.getClickedInventory();
|
||||
if (event.getCurrentItem() != null
|
||||
&& playerInventory.getHolder() != null
|
||||
&& !ClassWrapper.isSoulBound(event.getCurrentItem())) {
|
||||
System.out.println("Enchanting item !");
|
||||
ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCurrentItem());
|
||||
public void on(BlockBreakEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
|
||||
List<ItemStack> itemStacks =
|
||||
event.getBlock().getDrops().stream()
|
||||
.map(
|
||||
itemStack -> {
|
||||
ItemStack smelted = SmeltingEngine.smelt(itemStack);
|
||||
if (smelted != null) {
|
||||
return smelted;
|
||||
} else return itemStack;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
if (!itemStacks.isEmpty()) {
|
||||
event.setCancelled(true);
|
||||
itemStacks.forEach(
|
||||
itemStack ->
|
||||
event
|
||||
.getBlock()
|
||||
.getWorld()
|
||||
.dropItemNaturally(event.getBlock().getLocation(), itemStack));
|
||||
event.getBlock().setType(Material.AIR);
|
||||
}
|
||||
if (event.getCursor() != null
|
||||
&& playerInventory.getHolder() != null
|
||||
&& !ClassWrapper.isSoulBound(event.getCursor())) {
|
||||
System.out.println("Enchanting item !");
|
||||
ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCursor());
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getAction().equals(InventoryAction.PLACE_ALL)
|
||||
&& event.getClickedInventory() instanceof PlayerInventory) {
|
||||
System.out.println("We are in a player inventory.");
|
||||
PlayerInventory playerInventory = (PlayerInventory) event.getClickedInventory();
|
||||
if (event.getCurrentItem() != null
|
||||
&& playerInventory.getHolder() != null
|
||||
&& !ClassWrapper.isSoulBound(event.getCurrentItem())) {
|
||||
System.out.println("Enchanting item !");
|
||||
ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCurrentItem());
|
||||
}
|
||||
if (event.getCursor() != null
|
||||
&& playerInventory.getHolder() != null
|
||||
&& !ClassWrapper.isSoulBound(event.getCursor())) {
|
||||
System.out.println("Enchanting item !");
|
||||
ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCursor());
|
||||
@EventHandler
|
||||
public void on(PlayerInteractEvent event) {
|
||||
if (event.getItem() != null && event.getItem().getType().equals(Material.CROSSBOW)) {
|
||||
if (event
|
||||
.getPlayer()
|
||||
.getInventory()
|
||||
.getItemInOffHand()
|
||||
.getType()
|
||||
.equals(Material.FIREWORK_ROCKET)) {
|
||||
event
|
||||
.getPlayer()
|
||||
.sendMessage("You've interacted with a crossbow with a firework in offhand.");
|
||||
}
|
||||
}
|
||||
System.out.println("-----------------------------------");
|
||||
}
|
||||
|
||||
/*
|
||||
IMPOSSIBLE DE GIVER LES ITEMS DE CLASSES.
|
||||
*/
|
||||
@EventHandler
|
||||
public void on(EntityShootBowEvent event) {
|
||||
if (event.getBow() != null && event.getBow().getType().equals(Material.CROSSBOW)) {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
Player player = (Player) event.getEntity();
|
||||
if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
|
||||
player.getInventory().addItem(new ItemStack(Material.ARROW));
|
||||
event.setProjectile(player.launchProjectile(SmallFireball.class));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package net.babamod.mineclass.utils;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.FurnaceRecipe;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.Recipe;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
public class SmeltingEngine {
|
||||
|
||||
public static ItemStack smelt(ItemStack itemStack) {
|
||||
ItemStack result = null;
|
||||
Iterator<Recipe> iter = Bukkit.recipeIterator();
|
||||
while (iter.hasNext()) {
|
||||
Recipe recipe = iter.next();
|
||||
if (!(recipe instanceof FurnaceRecipe)) continue;
|
||||
if (((FurnaceRecipe) recipe).getInput().getType() != itemStack.getType()) continue;
|
||||
result = recipe.getResult();
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user