Working on project

This commit is contained in:
Barazok
2020-10-11 16:09:37 +02:00
parent fc3d2298fa
commit eac2fefa35
8 changed files with 169 additions and 92 deletions

View File

@@ -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())) {
setUnbreakableAndSoulbound(itemStack);
DwarfClass.enchantItem(itemStack);
if (DwarfClass.isItemEnchantable(itemStack.getType())) {
setUnbreakableAndSoulbound(itemStack);
DwarfClass.enchantItem(itemStack);
}
}
if (AppliedStatus.getInstance().isElf(player.getName())) {
setUnbreakableAndSoulbound(itemStack);
ElfClass.enchantItem(itemStack);
if (ElfClass.isItemEnchantable(itemStack.getType())) {
setUnbreakableAndSoulbound(itemStack);
ElfClass.enchantItem(itemStack);
}
}
if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
setUnbreakableAndSoulbound(itemStack);
FireDwarfClass.enchantItem(itemStack);
if (FireDwarfClass.isItemEnchantable(itemStack.getType())) {
setUnbreakableAndSoulbound(itemStack);
FireDwarfClass.enchantItem(itemStack);
}
}
if (AppliedStatus.getInstance().isNaga(player.getName())) {
setUnbreakableAndSoulbound(itemStack);
NagaClass.enchantItem(itemStack);
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);
}

View File

@@ -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;

View File

@@ -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(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
itemStack.addUnsafeEnchantment(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
}
}

View File

@@ -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(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
itemStack.addUnsafeEnchantment(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
}
}

View File

@@ -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(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
itemStack.addUnsafeEnchantment(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
}
}

View File

@@ -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;

View File

@@ -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());
}
if (event.getCursor() != null
&& playerInventory.getHolder() != null
&& !ClassWrapper.isSoulBound(event.getCursor())) {
System.out.println("Enchanting item !");
ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCursor());
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.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());
}
}
System.out.println("-----------------------------------");
}
/*
IMPOSSIBLE DE GIVER LES ITEMS DE CLASSES.
*/
@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.");
}
}
}
@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));
}
}
}
}
}

View File

@@ -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;
}
}