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

View File

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

View File

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

View File

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