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 net.babamod.mineclass.utils.AppliedStatus;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
@@ -86,28 +85,33 @@ public class ClassWrapper {
public static void enchantItem(Player player, ItemStack itemStack) { public static void enchantItem(Player player, ItemStack itemStack) {
if (AppliedStatus.getInstance().isDwarf(player.getName())) { if (AppliedStatus.getInstance().isDwarf(player.getName())) {
if (DwarfClass.isItemEnchantable(itemStack.getType())) {
setUnbreakableAndSoulbound(itemStack); setUnbreakableAndSoulbound(itemStack);
DwarfClass.enchantItem(itemStack); DwarfClass.enchantItem(itemStack);
} }
}
if (AppliedStatus.getInstance().isElf(player.getName())) { if (AppliedStatus.getInstance().isElf(player.getName())) {
if (ElfClass.isItemEnchantable(itemStack.getType())) {
setUnbreakableAndSoulbound(itemStack); setUnbreakableAndSoulbound(itemStack);
ElfClass.enchantItem(itemStack); ElfClass.enchantItem(itemStack);
} }
}
if (AppliedStatus.getInstance().isFireDwarf(player.getName())) { if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
if (FireDwarfClass.isItemEnchantable(itemStack.getType())) {
setUnbreakableAndSoulbound(itemStack); setUnbreakableAndSoulbound(itemStack);
FireDwarfClass.enchantItem(itemStack); FireDwarfClass.enchantItem(itemStack);
} }
}
if (AppliedStatus.getInstance().isNaga(player.getName())) { if (AppliedStatus.getInstance().isNaga(player.getName())) {
if (NagaClass.isItemEnchantable(itemStack.getType())) {
setUnbreakableAndSoulbound(itemStack); setUnbreakableAndSoulbound(itemStack);
NagaClass.enchantItem(itemStack); NagaClass.enchantItem(itemStack);
} }
} }
}
public static void removeAllEnchantments(ItemStack itemStack) { public static void removeAllEnchantments(ItemStack itemStack) {
itemStack itemStack.getEnchantments().keySet().forEach(itemStack::removeEnchantment);
.getEnchantments()
.keySet()
.forEach(itemStack::removeEnchantment);
removeUnbreakableAndSoulbound(itemStack); removeUnbreakableAndSoulbound(itemStack);
} }

View File

@@ -5,7 +5,6 @@ import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;

View File

@@ -3,10 +3,8 @@ package net.babamod.mineclass.classes;
import net.babamod.mineclass.utils.Pair; import net.babamod.mineclass.utils.Pair;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@@ -85,8 +83,7 @@ public class ElfClass {
.getOrDefault(itemStack.getType(), new ArrayList<>()) .getOrDefault(itemStack.getType(), new ArrayList<>())
.forEach( .forEach(
enchantmentIntegerPair -> enchantmentIntegerPair ->
itemStack itemStack.addUnsafeEnchantment(
.addUnsafeEnchantment(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
} }
} }

View File

@@ -3,10 +3,8 @@ package net.babamod.mineclass.classes;
import net.babamod.mineclass.utils.Pair; import net.babamod.mineclass.utils.Pair;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@@ -32,7 +30,6 @@ public class FireDwarfClass {
add(Material.IRON_SHOVEL); add(Material.IRON_SHOVEL);
add(Material.NETHERITE_SHOVEL); add(Material.NETHERITE_SHOVEL);
add(Material.BOW); add(Material.BOW);
add(Material.ARROW);
add(Material.TRIDENT); add(Material.TRIDENT);
} }
}; };
@@ -86,6 +83,9 @@ public class FireDwarfClass {
new AbstractMap.SimpleEntry<>( new AbstractMap.SimpleEntry<>(
Material.WOODEN_PICKAXE, Material.WOODEN_PICKAXE,
Collections.singletonList(new Pair<>(Enchantment.DIG_SPEED, 5))), Collections.singletonList(new Pair<>(Enchantment.DIG_SPEED, 5))),
new AbstractMap.SimpleEntry<>(
Material.CROSSBOW,
Collections.singletonList(new Pair<>(Enchantment.ARROW_INFINITE, 1))),
new AbstractMap.SimpleEntry<>( new AbstractMap.SimpleEntry<>(
Material.FLINT_AND_STEEL, new ArrayList<Pair<Enchantment, Integer>>()) Material.FLINT_AND_STEEL, new ArrayList<Pair<Enchantment, Integer>>())
// See to make infinity working on crossbow // See to make infinity working on crossbow
@@ -123,8 +123,7 @@ public class FireDwarfClass {
.getOrDefault(itemStack.getType(), new ArrayList<>()) .getOrDefault(itemStack.getType(), new ArrayList<>())
.forEach( .forEach(
enchantmentIntegerPair -> enchantmentIntegerPair ->
itemStack itemStack.addUnsafeEnchantment(
.addUnsafeEnchantment(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
} }
} }

View File

@@ -5,7 +5,6 @@ import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@@ -104,8 +103,7 @@ public class NagaClass {
.getOrDefault(itemStack.getType(), new ArrayList<>()) .getOrDefault(itemStack.getType(), new ArrayList<>())
.forEach( .forEach(
enchantmentIntegerPair -> enchantmentIntegerPair ->
itemStack itemStack.addUnsafeEnchantment(
.addUnsafeEnchantment(
enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond()));
} }
} }

View File

@@ -3,7 +3,6 @@ package net.babamod.mineclass.utils;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;

View File

@@ -4,21 +4,22 @@ import net.babamod.mineclass.Mineclass;
import net.babamod.mineclass.classes.ClassWrapper; import net.babamod.mineclass.classes.ClassWrapper;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.SmallFireball;
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.BlockBreakEvent;
import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent; 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.PlayerItemConsumeEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -50,15 +51,10 @@ public class MineClassListeners implements Listener {
public void on(EntityPickupItemEvent event) { public void on(EntityPickupItemEvent event) {
if (event.getEntity() instanceof Player) { if (event.getEntity() instanceof Player) {
Player player = (Player) event.getEntity(); Player player = (Player) event.getEntity();
player.sendMessage("You picked up " + event.getItem().getItemStack().getType());
if (ClassWrapper.isItemForbidden(player, event.getItem().getItemStack().getType())) { if (ClassWrapper.isItemForbidden(player, event.getItem().getItemStack().getType())) {
event.setCancelled(true); event.setCancelled(true);
} }
player.sendMessage(
String.valueOf(
ClassWrapper.isItemEnchantable(player, event.getItem().getItemStack().getType())));
if (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()); ClassWrapper.enchantItem(player, event.getItem().getItemStack());
} }
} }
@@ -82,66 +78,127 @@ public class MineClassListeners implements Listener {
} }
@EventHandler @EventHandler
public void on(PlayerDropItemEvent event) { public void on(InventoryClickEvent event) {
if (ClassWrapper.isSoulBound(event.getItemDrop().getItemStack())) { if ((event.getAction().equals(InventoryAction.PICKUP_ALL)
ClassWrapper.removeAllEnchantments(event.getItemDrop().getItemStack()); || 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 @EventHandler
public void on(InventoryClickEvent event) { public void on(BlockBreakEvent event) {
System.out.println("InventoryClickEvent triggered !"); Player player = event.getPlayer();
System.out.println("-----------------------------------"); if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
System.out.println(event.getAction()); List<ItemStack> itemStacks =
System.out.println(event.getClick()); event.getBlock().getDrops().stream()
System.out.println(event.getClickedInventory()); .map(
System.out.println(event.getCurrentItem()); itemStack -> {
System.out.println(event.getCursor()); ItemStack smelted = SmeltingEngine.smelt(itemStack);
System.out.println(event.getSlotType()); if (smelted != null) {
System.out.println(Arrays.toString(event.getHandlers().getRegisteredListeners())); return smelted;
System.out.println(event.getHotbarButton()); } else return itemStack;
System.out.println(event.getRawSlot()); })
System.out.println(event.getSlot()); .collect(Collectors.toList());
if (!itemStacks.isEmpty()) {
if (event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY) event.setCancelled(true);
&& event.getClickedInventory() instanceof CraftingInventory) { itemStacks.forEach(
System.out.println("We are in a crafting inventory."); itemStack ->
CraftingInventory playerInventory = (CraftingInventory) event.getClickedInventory(); event
if (event.getCurrentItem() != null .getBlock()
&& playerInventory.getHolder() != null .getWorld()
&& !ClassWrapper.isSoulBound(event.getCurrentItem())) { .dropItemNaturally(event.getBlock().getLocation(), itemStack));
System.out.println("Enchanting item !"); event.getBlock().setType(Material.AIR);
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());
} }
} }
if (event.getAction().equals(InventoryAction.PLACE_ALL) @EventHandler
&& event.getClickedInventory() instanceof PlayerInventory) { public void on(PlayerInteractEvent event) {
System.out.println("We are in a player inventory."); if (event.getItem() != null && event.getItem().getType().equals(Material.CROSSBOW)) {
PlayerInventory playerInventory = (PlayerInventory) event.getClickedInventory(); if (event
if (event.getCurrentItem() != null .getPlayer()
&& playerInventory.getHolder() != null .getInventory()
&& !ClassWrapper.isSoulBound(event.getCurrentItem())) { .getItemInOffHand()
System.out.println("Enchanting item !"); .getType()
ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCurrentItem()); .equals(Material.FIREWORK_ROCKET)) {
} event
if (event.getCursor() != null .getPlayer()
&& playerInventory.getHolder() != null .sendMessage("You've interacted with a crossbow with a firework in offhand.");
&& !ClassWrapper.isSoulBound(event.getCursor())) {
System.out.println("Enchanting item !");
ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCursor());
} }
} }
System.out.println("-----------------------------------");
} }
/* @EventHandler
IMPOSSIBLE DE GIVER LES ITEMS DE CLASSES. 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;
}
}