Working on project
This commit is contained in:
@@ -11,18 +11,16 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.entity.SmallFireball;
|
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.block.BlockDropItemEvent;
|
||||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
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.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.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -113,7 +111,7 @@ public class MineClassListeners implements Listener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return event.getCursor() != null
|
return event.getCursor() != null
|
||||||
&& ClassWrapper.isItemForbidden(player, event.getCursor().getType());
|
&& ClassWrapper.isItemForbidden(player, event.getCursor().getType());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -131,29 +129,18 @@ public class MineClassListeners implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(BlockBreakEvent event) {
|
public void on(BlockDropItemEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
|
if (AppliedStatus.getInstance().isFireDwarf(player.getName())) {
|
||||||
List<ItemStack> itemStacks =
|
event
|
||||||
event.getBlock().getDrops().stream()
|
.getItems()
|
||||||
.map(
|
.forEach(
|
||||||
itemStack -> {
|
item -> {
|
||||||
ItemStack smelted = SmeltingEngine.smelt(itemStack);
|
ItemStack smelted = SmeltingEngine.getInstance().smelt(player, event.getBlock().getLocation(), item.getItemStack());
|
||||||
if (smelted != null) {
|
if (smelted != null) {
|
||||||
return smelted;
|
item.setItemStack(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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,39 +30,39 @@ public class AppliedStatus implements Serializable {
|
|||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDwarf(String playerName, boolean dwarf) {
|
public synchronized void setDwarf(String playerName, boolean dwarf) {
|
||||||
this.dwarf.put(playerName, dwarf);
|
this.dwarf.put(playerName, dwarf);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setElf(String playerName, boolean elf) {
|
public synchronized void setElf(String playerName, boolean elf) {
|
||||||
this.elf.put(playerName, elf);
|
this.elf.put(playerName, elf);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFireDwarf(String playerName, boolean fireDwarf) {
|
public synchronized void setFireDwarf(String playerName, boolean fireDwarf) {
|
||||||
this.fireDwarf.put(playerName, fireDwarf);
|
this.fireDwarf.put(playerName, fireDwarf);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNaga(String playerName, boolean naga) {
|
public synchronized void setNaga(String playerName, boolean naga) {
|
||||||
this.naga.put(playerName, naga);
|
this.naga.put(playerName, naga);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDwarf(String playerName) {
|
public synchronized boolean isDwarf(String playerName) {
|
||||||
return dwarf.getOrDefault(playerName, false);
|
return dwarf.getOrDefault(playerName, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isElf(String playerName) {
|
public synchronized boolean isElf(String playerName) {
|
||||||
return elf.getOrDefault(playerName, false);
|
return elf.getOrDefault(playerName, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFireDwarf(String playerName) {
|
public synchronized boolean isFireDwarf(String playerName) {
|
||||||
return fireDwarf.getOrDefault(playerName, false);
|
return fireDwarf.getOrDefault(playerName, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isNaga(String playerName) {
|
public synchronized boolean isNaga(String playerName) {
|
||||||
return naga.getOrDefault(playerName, false);
|
return naga.getOrDefault(playerName, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasAClass(String playerName) {
|
public synchronized boolean hasAClass(String playerName) {
|
||||||
return dwarf.getOrDefault(playerName, false)
|
return dwarf.getOrDefault(playerName, false)
|
||||||
|| elf.getOrDefault(playerName, false)
|
|| elf.getOrDefault(playerName, false)
|
||||||
|| fireDwarf.getOrDefault(playerName, false)
|
|| fireDwarf.getOrDefault(playerName, false)
|
||||||
|
|||||||
@@ -26,17 +26,17 @@ public class ClassItemPossessed {
|
|||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addItems(String playerName, List<ItemStack> itemStacks) {
|
public synchronized void addItems(String playerName, List<ItemStack> itemStacks) {
|
||||||
List<ItemStack> itemStackList = itemsPossessed.getOrDefault(playerName, new ArrayList<>());
|
List<ItemStack> itemStackList = itemsPossessed.getOrDefault(playerName, new ArrayList<>());
|
||||||
itemStackList.addAll(itemStacks);
|
itemStackList.addAll(itemStacks);
|
||||||
itemsPossessed.put(playerName, itemStackList);
|
itemsPossessed.put(playerName, itemStackList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearItems(String playerName) {
|
public synchronized void clearItems(String playerName) {
|
||||||
itemsPossessed.put(playerName, new ArrayList<>());
|
itemsPossessed.put(playerName, new ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ItemStack> getItems(String playerName) {
|
public synchronized List<ItemStack> getItems(String playerName) {
|
||||||
return itemsPossessed.get(playerName);
|
return itemsPossessed.get(playerName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,38 @@
|
|||||||
package net.babamod.mineclass.utils;
|
package net.babamod.mineclass.utils;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.ExperienceOrb;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.FurnaceRecipe;
|
import org.bukkit.inventory.FurnaceRecipe;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.Recipe;
|
import org.bukkit.inventory.Recipe;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
public class SmeltingEngine {
|
public class SmeltingEngine {
|
||||||
|
/** Instance unique pré-initialisée */
|
||||||
|
private static SmeltingEngine INSTANCE;
|
||||||
|
|
||||||
public static ItemStack smelt(ItemStack itemStack) {
|
private final HashMap<String, HashMap<Material, Float>> expModifier;
|
||||||
|
|
||||||
|
/** Constructeur privé */
|
||||||
|
private SmeltingEngine() {
|
||||||
|
expModifier = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Point d'accès pour l'instance unique du singleton */
|
||||||
|
public static synchronized SmeltingEngine getInstance() {
|
||||||
|
if (INSTANCE == null) {
|
||||||
|
INSTANCE = new SmeltingEngine();
|
||||||
|
}
|
||||||
|
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized ItemStack smelt(Player player, Location location, ItemStack itemStack) {
|
||||||
ItemStack result = null;
|
ItemStack result = null;
|
||||||
Iterator<Recipe> iter = Bukkit.recipeIterator();
|
Iterator<Recipe> iter = Bukkit.recipeIterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
@@ -17,6 +40,21 @@ public class SmeltingEngine {
|
|||||||
if (!(recipe instanceof FurnaceRecipe)) continue;
|
if (!(recipe instanceof FurnaceRecipe)) continue;
|
||||||
if (((FurnaceRecipe) recipe).getInput().getType() != itemStack.getType()) continue;
|
if (((FurnaceRecipe) recipe).getInput().getType() != itemStack.getType()) continue;
|
||||||
result = recipe.getResult();
|
result = recipe.getResult();
|
||||||
|
expModifier.computeIfAbsent(player.getName(), k -> new HashMap<>());
|
||||||
|
expModifier.get(player.getName()).putIfAbsent(result.getType(), 0.0f);
|
||||||
|
expModifier
|
||||||
|
.get(player.getName())
|
||||||
|
.put(
|
||||||
|
result.getType(),
|
||||||
|
expModifier.get(player.getName()).get(result.getType())
|
||||||
|
+ ((FurnaceRecipe) recipe).getExperience());
|
||||||
|
if (expModifier.get(player.getName()).get(result.getType()) >= 1) {
|
||||||
|
int exp = expModifier.get(player.getName()).get(result.getType()).intValue();
|
||||||
|
player.getWorld().spawn(location, ExperienceOrb.class).setExperience(exp);
|
||||||
|
expModifier
|
||||||
|
.get(player.getName())
|
||||||
|
.put(result.getType(), expModifier.get(player.getName()).get(result.getType()) - exp);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user