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.event.EventHandler;
|
||||
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.EntityShootBowEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.inventory.InventoryAction;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
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.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -131,29 +129,18 @@ public class MineClassListeners implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void on(BlockBreakEvent event) {
|
||||
public void on(BlockDropItemEvent 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);
|
||||
.getItems()
|
||||
.forEach(
|
||||
item -> {
|
||||
ItemStack smelted = SmeltingEngine.getInstance().smelt(player, event.getBlock().getLocation(), item.getItemStack());
|
||||
if (smelted != null) {
|
||||
item.setItemStack(smelted);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,39 +30,39 @@ public class AppliedStatus implements Serializable {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public void setDwarf(String playerName, boolean dwarf) {
|
||||
public synchronized void setDwarf(String playerName, boolean 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);
|
||||
}
|
||||
|
||||
public void setFireDwarf(String playerName, boolean fireDwarf) {
|
||||
public synchronized void setFireDwarf(String playerName, boolean 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);
|
||||
}
|
||||
|
||||
public boolean isDwarf(String playerName) {
|
||||
public synchronized boolean isDwarf(String playerName) {
|
||||
return dwarf.getOrDefault(playerName, false);
|
||||
}
|
||||
|
||||
public boolean isElf(String playerName) {
|
||||
public synchronized boolean isElf(String playerName) {
|
||||
return elf.getOrDefault(playerName, false);
|
||||
}
|
||||
|
||||
public boolean isFireDwarf(String playerName) {
|
||||
public synchronized boolean isFireDwarf(String playerName) {
|
||||
return fireDwarf.getOrDefault(playerName, false);
|
||||
}
|
||||
|
||||
public boolean isNaga(String playerName) {
|
||||
public synchronized boolean isNaga(String playerName) {
|
||||
return naga.getOrDefault(playerName, false);
|
||||
}
|
||||
|
||||
public boolean hasAClass(String playerName) {
|
||||
public synchronized boolean hasAClass(String playerName) {
|
||||
return dwarf.getOrDefault(playerName, false)
|
||||
|| elf.getOrDefault(playerName, false)
|
||||
|| fireDwarf.getOrDefault(playerName, false)
|
||||
|
||||
@@ -26,17 +26,17 @@ public class ClassItemPossessed {
|
||||
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<>());
|
||||
itemStackList.addAll(itemStacks);
|
||||
itemsPossessed.put(playerName, itemStackList);
|
||||
}
|
||||
|
||||
public void clearItems(String playerName) {
|
||||
public synchronized void clearItems(String playerName) {
|
||||
itemsPossessed.put(playerName, new ArrayList<>());
|
||||
}
|
||||
|
||||
public List<ItemStack> getItems(String playerName) {
|
||||
public synchronized List<ItemStack> getItems(String playerName) {
|
||||
return itemsPossessed.get(playerName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,38 @@
|
||||
package net.babamod.mineclass.utils;
|
||||
|
||||
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.ItemStack;
|
||||
import org.bukkit.inventory.Recipe;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
Iterator<Recipe> iter = Bukkit.recipeIterator();
|
||||
while (iter.hasNext()) {
|
||||
@@ -17,6 +40,21 @@ public class SmeltingEngine {
|
||||
if (!(recipe instanceof FurnaceRecipe)) continue;
|
||||
if (((FurnaceRecipe) recipe).getInput().getType() != itemStack.getType()) continue;
|
||||
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;
|
||||
}
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user