Working on project

This commit is contained in:
Barazok
2020-10-11 17:25:44 +02:00
parent 447cb3558d
commit 111364ca05
4 changed files with 63 additions and 38 deletions

View File

@@ -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;
@@ -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.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 event
.getBlock() .getItems()
.getWorld() .forEach(
.dropItemNaturally(event.getBlock().getLocation(), itemStack)); item -> {
event.getBlock().setType(Material.AIR); ItemStack smelted = SmeltingEngine.getInstance().smelt(player, event.getBlock().getLocation(), item.getItemStack());
if (smelted != null) {
item.setItemStack(smelted);
} }
});
} }
} }

View File

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

View File

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

View File

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