mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 13:16:45 +01:00
Reworked a lot of stuff to do with Smelting
This commit is contained in:
parent
f6c7049cac
commit
35cde870ff
@ -1,5 +1,5 @@
|
|||||||
Version 2.1.134
|
Version 2.1.134
|
||||||
Smelting furnaces are now more flexible about who they consider their owner (see notes)
|
Furnaces now change ownership to the last player who clicks in their inventory and is legally allowed to break the furnace
|
||||||
Smelting now has a Bonus Drops section in config.yml
|
Smelting now has a Bonus Drops section in config.yml
|
||||||
Smelting now only doubles smelting results for items which have bonus drop entries in config.yml
|
Smelting now only doubles smelting results for items which have bonus drop entries in config.yml
|
||||||
Minor code cleanup
|
Minor code cleanup
|
||||||
@ -17,14 +17,8 @@ Version 2.1.134
|
|||||||
Fixed a locale mistake in locale ru
|
Fixed a locale mistake in locale ru
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
Furnaces give XP to their owner while smelting
|
|
||||||
You become the owner of a Furnace by doing one of the following
|
|
||||||
1) Opening an empty furnace
|
|
||||||
2) Interacting with a furnace
|
|
||||||
|
|
||||||
It used to be that Furnaces would assign an owner and that would be their owner until the server shutdown, now owners will change based on who last had their hands on the furnace.
|
It used to be that Furnaces would assign an owner and that would be their owner until the server shutdown, now owners will change based on who last had their hands on the furnace.
|
||||||
|
You won't become the owner if you are not allowed to view the inventory of a furnace, or break the furnace, or interact with the contents of the furnace
|
||||||
You won't become the owner if you are not allowed to view the inventory of a furnace
|
|
||||||
|
|
||||||
Version 2.1.133
|
Version 2.1.133
|
||||||
A fix for an 'array out of bounds' error related to players clicking outside the inventory windows has been fixed
|
A fix for an 'array out of bounds' error related to players clicking outside the inventory windows has been fixed
|
||||||
|
@ -18,6 +18,7 @@ import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
|||||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||||
import com.gmail.nossr50.skills.repair.Repair;
|
import com.gmail.nossr50.skills.repair.Repair;
|
||||||
import com.gmail.nossr50.skills.salvage.Salvage;
|
import com.gmail.nossr50.skills.salvage.Salvage;
|
||||||
|
import com.gmail.nossr50.skills.smelting.Smelting;
|
||||||
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||||
import com.gmail.nossr50.util.BlockUtils;
|
import com.gmail.nossr50.util.BlockUtils;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
@ -535,16 +536,6 @@ public class BlockListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Player getPlayerFromFurnace(Block furnaceBlock) {
|
|
||||||
List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
|
|
||||||
|
|
||||||
if (metadata.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return plugin.getServer().getPlayerExact(metadata.get(0).asString());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle BlockDamage events where the event is modified.
|
* Handle BlockDamage events where the event is modified.
|
||||||
*
|
*
|
||||||
@ -628,7 +619,6 @@ public class BlockListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockState blockState = event.getBlock().getState();
|
BlockState blockState = event.getBlock().getState();
|
||||||
|
|
||||||
ItemStack heldItem = player.getInventory().getItemInMainHand();
|
ItemStack heldItem = player.getInventory().getItemInMainHand();
|
||||||
@ -673,10 +663,10 @@ public class BlockListener implements Listener {
|
|||||||
if(blockState instanceof Furnace)
|
if(blockState instanceof Furnace)
|
||||||
{
|
{
|
||||||
Furnace furnace = (Furnace) blockState;
|
Furnace furnace = (Furnace) blockState;
|
||||||
if(furnace.hasMetadata(mcMMO.furnaceMetadataKey))
|
if(mcMMO.getSmeltingTracker().isFurnaceOwned(furnace))
|
||||||
{
|
{
|
||||||
player.sendMessage("[mcMMO DEBUG] This furnace has a registered owner");
|
player.sendMessage("[mcMMO DEBUG] This furnace has a registered owner");
|
||||||
Player furnacePlayer = getPlayerFromFurnace(furnace.getBlock());
|
OfflinePlayer furnacePlayer = mcMMO.getSmeltingTracker().getPlayerFromFurnace(furnace);
|
||||||
if(furnacePlayer != null)
|
if(furnacePlayer != null)
|
||||||
{
|
{
|
||||||
player.sendMessage("[mcMMO DEBUG] This furnace is owned by player "+furnacePlayer.getName());
|
player.sendMessage("[mcMMO DEBUG] This furnace is owned by player "+furnacePlayer.getName());
|
||||||
|
@ -2,11 +2,13 @@ package com.gmail.nossr50.listeners;
|
|||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.config.WorldBlacklist;
|
import com.gmail.nossr50.config.WorldBlacklist;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
import com.gmail.nossr50.events.fake.FakeBrewEvent;
|
import com.gmail.nossr50.events.fake.FakeBrewEvent;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.runnables.player.PlayerUpdateInventoryTask;
|
import com.gmail.nossr50.runnables.player.PlayerUpdateInventoryTask;
|
||||||
|
import com.gmail.nossr50.runnables.skills.FurnaceCleanupTask;
|
||||||
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
||||||
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
@ -15,8 +17,10 @@ import com.gmail.nossr50.util.player.UserManager;
|
|||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
||||||
import com.gmail.nossr50.worldguard.WorldGuardUtils;
|
import com.gmail.nossr50.worldguard.WorldGuardUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.BrewingStand;
|
import org.bukkit.block.BrewingStand;
|
||||||
@ -28,10 +32,6 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.inventory.*;
|
import org.bukkit.event.inventory.*;
|
||||||
import org.bukkit.inventory.*;
|
import org.bukkit.inventory.*;
|
||||||
import org.bukkit.metadata.MetadataValue;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class InventoryListener implements Listener {
|
public class InventoryListener implements Listener {
|
||||||
private final mcMMO plugin;
|
private final mcMMO plugin;
|
||||||
@ -40,82 +40,6 @@ public class InventoryListener implements Listener {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
|
||||||
public void onInventoryOpen(InventoryOpenEvent event) {
|
|
||||||
/* WORLD BLACKLIST CHECK */
|
|
||||||
if(WorldBlacklist.isWorldBlacklisted(event.getPlayer().getWorld()))
|
|
||||||
return;
|
|
||||||
|
|
||||||
HumanEntity humanEntity = event.getPlayer();
|
|
||||||
Player player = (Player) humanEntity;
|
|
||||||
|
|
||||||
//Profile not loaded
|
|
||||||
if(UserManager.getPlayer(player) == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(event.getInventory() instanceof Furnace) {
|
|
||||||
|
|
||||||
}
|
|
||||||
Furnace furnace = getFurnace(event.getInventory());
|
|
||||||
|
|
||||||
if (furnace != null) {
|
|
||||||
if(isFurnaceAvailable(furnace, player)) {
|
|
||||||
assignFurnace(furnace, player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFurnaceAvailable(Furnace furnace, Player player) {
|
|
||||||
if(!furnace.hasMetadata(mcMMO.furnaceMetadataKey)
|
|
||||||
&& furnace.getMetadata(mcMMO.furnaceMetadataKey).size() == 0) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
if(player != getPlayerFromFurnace(furnace)) {
|
|
||||||
|
|
||||||
if(isFurnaceResultEmpty(furnace)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFurnaceResultEmpty(Furnace furnace) {
|
|
||||||
return furnace.getInventory().getResult() == null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void assignFurnace(Furnace furnace, Player player) {
|
|
||||||
|
|
||||||
if(furnace.hasMetadata(mcMMO.furnaceMetadataKey)) {
|
|
||||||
furnace.removeMetadata(mcMMO.furnaceMetadataKey, mcMMO.p);
|
|
||||||
}
|
|
||||||
|
|
||||||
furnace.setMetadata(mcMMO.furnaceMetadataKey, UserManager.getPlayer(player).getPlayerMetadata());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
||||||
public void onInventoryClose(InventoryCloseEvent event) {
|
|
||||||
/* WORLD BLACKLIST CHECK */
|
|
||||||
if(WorldBlacklist.isWorldBlacklisted(event.getPlayer().getWorld()))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(event.getInventory() instanceof FurnaceInventory) {
|
|
||||||
if(getFurnace(event.getInventory()) != null) {
|
|
||||||
Furnace furnace = getFurnace(event.getInventory());
|
|
||||||
|
|
||||||
if(isFurnaceOwned(furnace) && isFurnaceResultEmpty(furnace)) {
|
|
||||||
removeFurnaceOwner(furnace);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onFurnaceBurnEvent(FurnaceBurnEvent event) {
|
public void onFurnaceBurnEvent(FurnaceBurnEvent event) {
|
||||||
/* WORLD BLACKLIST CHECK */
|
/* WORLD BLACKLIST CHECK */
|
||||||
@ -132,26 +56,27 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
Furnace furnace = (Furnace) furnaceState;
|
Furnace furnace = (Furnace) furnaceState;
|
||||||
|
|
||||||
Player player = getPlayerFromFurnace(furnace);
|
OfflinePlayer offlinePlayer = mcMMO.getSmeltingTracker().getPlayerFromFurnace(furnace);
|
||||||
|
|
||||||
/* WORLD GUARD MAIN FLAG CHECK */
|
if(offlinePlayer != null && offlinePlayer.isOnline()) {
|
||||||
if(WorldGuardUtils.isWorldGuardLoaded())
|
|
||||||
{
|
Player player = Bukkit.getPlayer(offlinePlayer.getUniqueId());
|
||||||
if(!WorldGuardManager.getInstance().hasMainFlag(player))
|
|
||||||
return;
|
if(player != null) {
|
||||||
|
if (!Permissions.isSubSkillEnabled(player, SubSkillType.SMELTING_FUEL_EFFICIENCY)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Profile doesn't exist
|
||||||
|
if(UserManager.getOfflinePlayer(offlinePlayer) == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setBurnTime(UserManager.getPlayer(player).getSmeltingManager().fuelEfficiency(event.getBurnTime()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!UserManager.hasPlayerDataKey(player) || !Permissions.isSubSkillEnabled(player, SubSkillType.SMELTING_FUEL_EFFICIENCY)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Profile not loaded
|
|
||||||
if(UserManager.getPlayer(player) == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setBurnTime(UserManager.getPlayer(player).getSmeltingManager().fuelEfficiency(event.getBurnTime()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@ -160,35 +85,28 @@ public class InventoryListener implements Listener {
|
|||||||
if(WorldBlacklist.isWorldBlacklisted(event.getBlock().getWorld()))
|
if(WorldBlacklist.isWorldBlacklisted(event.getBlock().getWorld()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Block furnaceBlock = event.getBlock();
|
BlockState blockState = event.getBlock().getState(); //Furnaces can only be cast from a BlockState not a Block
|
||||||
ItemStack smelting = event.getSource();
|
ItemStack smelting = event.getSource();
|
||||||
|
|
||||||
if (!ItemUtils.isSmeltable(smelting)) {
|
if (!ItemUtils.isSmeltable(smelting)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(furnaceBlock instanceof Furnace)
|
if(blockState instanceof Furnace) {
|
||||||
{
|
Furnace furnace = (Furnace) blockState;
|
||||||
Player player = getPlayerFromFurnace((Furnace) furnaceBlock);
|
OfflinePlayer offlinePlayer = mcMMO.getSmeltingTracker().getPlayerFromFurnace(furnace);
|
||||||
|
|
||||||
/* WORLD GUARD MAIN FLAG CHECK */
|
if(offlinePlayer != null) {
|
||||||
if(WorldGuardUtils.isWorldGuardLoaded())
|
|
||||||
{
|
McMMOPlayer offlineProfile = UserManager.getOfflinePlayer(offlinePlayer);
|
||||||
if(!WorldGuardManager.getInstance().hasMainFlag(player))
|
|
||||||
return;
|
//Profile doesn't exist
|
||||||
|
if(offlineProfile != null) {
|
||||||
|
event.setResult(offlineProfile.getSmeltingManager().smeltProcessing(smelting, event.getResult()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!UserManager.hasPlayerDataKey(player) || !PrimarySkillType.SMELTING.getPermissions(player)) {
|
new FurnaceCleanupTask(furnace).runTaskLater(mcMMO.p, 1);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Profile not loaded
|
|
||||||
if(UserManager.getPlayer(player) == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setResult(UserManager.getPlayer(player).getSmeltingManager().smeltProcessing(smelting, event.getResult()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,16 +116,15 @@ public class InventoryListener implements Listener {
|
|||||||
if(WorldBlacklist.isWorldBlacklisted(event.getPlayer().getWorld()))
|
if(WorldBlacklist.isWorldBlacklisted(event.getPlayer().getWorld()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Block furnaceBlock = event.getBlock();
|
BlockState furnaceBlock = event.getBlock().getState();
|
||||||
|
|
||||||
if (!ItemUtils.isSmelted(new ItemStack(event.getItemType(), event.getItemAmount()))) {
|
if (!ItemUtils.isSmelted(new ItemStack(event.getItemType(), event.getItemAmount()))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(furnaceBlock instanceof Furnace) {
|
Player player = event.getPlayer();
|
||||||
Furnace furnace = (Furnace) furnaceBlock;
|
|
||||||
Player player = getPlayerFromFurnace(furnace);
|
|
||||||
|
|
||||||
|
if(furnaceBlock instanceof Furnace) {
|
||||||
/* WORLD GUARD MAIN FLAG CHECK */
|
/* WORLD GUARD MAIN FLAG CHECK */
|
||||||
if(WorldGuardUtils.isWorldGuardLoaded())
|
if(WorldGuardUtils.isWorldGuardLoaded())
|
||||||
{
|
{
|
||||||
@ -237,26 +154,22 @@ public class InventoryListener implements Listener {
|
|||||||
if(WorldBlacklist.isWorldBlacklisted(event.getWhoClicked().getWorld()))
|
if(WorldBlacklist.isWorldBlacklisted(event.getWhoClicked().getWorld()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
//We should never care to do processing if the player clicks outside the window
|
||||||
|
// if(isOutsideWindowClick(event))
|
||||||
|
// return;
|
||||||
|
|
||||||
Inventory inventory = event.getInventory();
|
Inventory inventory = event.getInventory();
|
||||||
|
|
||||||
if(event.getWhoClicked() instanceof Player)
|
Player player = ((Player) event.getWhoClicked()).getPlayer();
|
||||||
|
|
||||||
|
if(event.getInventory() instanceof FurnaceInventory)
|
||||||
{
|
{
|
||||||
Player player = ((Player) event.getWhoClicked()).getPlayer();
|
Furnace furnace = mcMMO.getSmeltingTracker().getFurnaceFromInventory(event.getInventory());
|
||||||
Furnace furnace = getFurnace(event.getInventory());
|
|
||||||
|
|
||||||
if (furnace != null)
|
if (furnace != null)
|
||||||
{
|
{
|
||||||
if (isFurnaceOwned(furnace)) {
|
//Switch owners
|
||||||
removeFurnaceOwner(furnace);
|
mcMMO.getSmeltingTracker().processFurnaceOwnership(furnace, player);
|
||||||
}
|
|
||||||
|
|
||||||
//Profile not loaded
|
|
||||||
if(UserManager.getPlayer(player) == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assignFurnace(furnace, player);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,8 +189,6 @@ public class InventoryListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) whoClicked;
|
|
||||||
|
|
||||||
/* WORLD GUARD MAIN FLAG CHECK */
|
/* WORLD GUARD MAIN FLAG CHECK */
|
||||||
if(WorldGuardUtils.isWorldGuardLoaded())
|
if(WorldGuardUtils.isWorldGuardLoaded())
|
||||||
{
|
{
|
||||||
@ -362,13 +273,10 @@ public class InventoryListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFurnaceOwned(Furnace furnace) {
|
public boolean isOutsideWindowClick(InventoryClickEvent event) {
|
||||||
return furnace.getMetadata(mcMMO.furnaceMetadataKey).size() > 0;
|
return event.getHotbarButton() == -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeFurnaceOwner(Furnace furnace) {
|
|
||||||
furnace.removeMetadata(mcMMO.furnaceMetadataKey, mcMMO.p);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onInventoryDragEvent(InventoryDragEvent event) {
|
public void onInventoryDragEvent(InventoryDragEvent event) {
|
||||||
@ -480,7 +388,7 @@ public class InventoryListener implements Listener {
|
|||||||
public void onInventoryClickEvent(InventoryClickEvent event) {
|
public void onInventoryClickEvent(InventoryClickEvent event) {
|
||||||
SkillUtils.removeAbilityBuff(event.getCurrentItem());
|
SkillUtils.removeAbilityBuff(event.getCurrentItem());
|
||||||
if (event.getAction() == InventoryAction.HOTBAR_SWAP) {
|
if (event.getAction() == InventoryAction.HOTBAR_SWAP) {
|
||||||
if(event.getHotbarButton() == -1)
|
if(isOutsideWindowClick(event))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PlayerInventory playerInventory = event.getWhoClicked().getInventory();
|
PlayerInventory playerInventory = event.getWhoClicked().getInventory();
|
||||||
@ -525,28 +433,4 @@ public class InventoryListener implements Listener {
|
|||||||
new PlayerUpdateInventoryTask((Player) whoClicked).runTaskLater(plugin, 0);
|
new PlayerUpdateInventoryTask((Player) whoClicked).runTaskLater(plugin, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Furnace getFurnace(Inventory inventory) {
|
|
||||||
if (!(inventory instanceof FurnaceInventory)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Furnace furnace = (Furnace) inventory.getHolder();
|
|
||||||
|
|
||||||
if (furnace == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return furnace;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private Player getPlayerFromFurnace(Furnace furnace) {
|
|
||||||
List<MetadataValue> metadata = furnace.getMetadata(mcMMO.furnaceMetadataKey);
|
|
||||||
|
|
||||||
if (metadata.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return plugin.getServer().getPlayerExact(metadata.get(0).asString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ import com.gmail.nossr50.util.player.PlayerLevelUtils;
|
|||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import com.gmail.nossr50.util.skills.RankUtils;
|
import com.gmail.nossr50.util.skills.RankUtils;
|
||||||
|
import com.gmail.nossr50.util.skills.SmeltingTracker;
|
||||||
import com.gmail.nossr50.util.upgrade.UpgradeManager;
|
import com.gmail.nossr50.util.upgrade.UpgradeManager;
|
||||||
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
||||||
import com.google.common.base.Charsets;
|
import com.google.common.base.Charsets;
|
||||||
@ -78,6 +79,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
private static UpgradeManager upgradeManager;
|
private static UpgradeManager upgradeManager;
|
||||||
private static MaterialMapStore materialMapStore;
|
private static MaterialMapStore materialMapStore;
|
||||||
private static PlayerLevelUtils playerLevelUtils;
|
private static PlayerLevelUtils playerLevelUtils;
|
||||||
|
private static SmeltingTracker smeltingTracker;
|
||||||
|
|
||||||
/* Blacklist */
|
/* Blacklist */
|
||||||
private static WorldBlacklist worldBlacklist;
|
private static WorldBlacklist worldBlacklist;
|
||||||
@ -116,7 +118,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
public static final String COTW_TEMPORARY_SUMMON = "mcMMO: COTW Entity";
|
public static final String COTW_TEMPORARY_SUMMON = "mcMMO: COTW Entity";
|
||||||
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
||||||
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
||||||
public final static String furnaceMetadataKey = "mcMMO: Tracked Furnace";
|
|
||||||
public final static String tntMetadataKey = "mcMMO: Tracked TNT";
|
public final static String tntMetadataKey = "mcMMO: Tracked TNT";
|
||||||
public final static String funfettiMetadataKey = "mcMMO: Funfetti";
|
public final static String funfettiMetadataKey = "mcMMO: Funfetti";
|
||||||
public final static String customNameKey = "mcMMO: Custom Name";
|
public final static String customNameKey = "mcMMO: Custom Name";
|
||||||
@ -266,6 +267,9 @@ public class mcMMO extends JavaPlugin {
|
|||||||
|
|
||||||
//Init the blacklist
|
//Init the blacklist
|
||||||
worldBlacklist = new WorldBlacklist(this);
|
worldBlacklist = new WorldBlacklist(this);
|
||||||
|
|
||||||
|
//Init smelting tracker
|
||||||
|
smeltingTracker = new SmeltingTracker();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerLevelUtils getPlayerLevelUtils() {
|
public static PlayerLevelUtils getPlayerLevelUtils() {
|
||||||
@ -670,4 +674,8 @@ public class mcMMO extends JavaPlugin {
|
|||||||
public static PlatformManager getPlatformManager() {
|
public static PlatformManager getPlatformManager() {
|
||||||
return platformManager;
|
return platformManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SmeltingTracker getSmeltingTracker() {
|
||||||
|
return smeltingTracker;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.gmail.nossr50.runnables.skills;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import org.bukkit.block.Furnace;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
public class FurnaceCleanupTask extends BukkitRunnable {
|
||||||
|
|
||||||
|
private final Furnace furnace;
|
||||||
|
|
||||||
|
public FurnaceCleanupTask(Furnace furnace) {
|
||||||
|
this.furnace = furnace;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if(furnace != null && furnace.getInventory().getResult() == null) {
|
||||||
|
//Furnace is empty so stop tracking it
|
||||||
|
mcMMO.getSmeltingTracker().untrackFurnace(furnace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,19 +4,25 @@ import com.gmail.nossr50.config.experience.ExperienceConfig;
|
|||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.skills.RankUtils;
|
import com.gmail.nossr50.util.skills.RankUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.block.Furnace;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.FurnaceInventory;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.metadata.MetadataValue;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Smelting {
|
public class Smelting {
|
||||||
|
|
||||||
public static int getRank(Player player)
|
|
||||||
{
|
|
||||||
return RankUtils.getRank(player, SubSkillType.SMELTING_UNDERSTANDING_THE_ART);
|
|
||||||
}
|
|
||||||
|
|
||||||
//public static int fluxMiningUnlockLevel = RankUtils.getUnlockLevel(SubSkillType.SMELTING_FLUX_MINING);
|
|
||||||
|
|
||||||
protected static int getResourceXp(ItemStack smelting) {
|
protected static int getResourceXp(ItemStack smelting) {
|
||||||
return mcMMO.getModManager().isCustomOre(smelting.getType()) ? mcMMO.getModManager().getBlock(smelting.getType()).getSmeltingXpGain() : ExperienceConfig.getInstance().getXp(PrimarySkillType.SMELTING, smelting.getType());
|
return mcMMO.getModManager().isCustomOre(smelting.getType()) ? mcMMO.getModManager().getBlock(smelting.getType()).getSmeltingXpGain() : ExperienceConfig.getInstance().getXp(PrimarySkillType.SMELTING, smelting.getType());
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
package com.gmail.nossr50.util.skills;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.skills.smelting.Smelting;
|
||||||
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.block.Furnace;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.FurnaceInventory;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class SmeltingTracker {
|
||||||
|
|
||||||
|
private HashMap<Furnace, OfflinePlayer> furnaceOwners;
|
||||||
|
|
||||||
|
public SmeltingTracker() {
|
||||||
|
furnaceOwners = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void changeFurnaceOwnership(Furnace furnace, Player player) {
|
||||||
|
furnaceOwners.put(furnace, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Furnace getFurnaceFromInventory(Inventory inventory) {
|
||||||
|
if (!(inventory instanceof FurnaceInventory)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (Furnace) inventory.getHolder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public OfflinePlayer getPlayerFromFurnace(Furnace furnace) {
|
||||||
|
return furnaceOwners.get(furnace);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFurnaceOwned(Furnace furnace) {
|
||||||
|
return furnaceOwners.get(furnace) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeFurnaceOwner(Furnace furnace) {
|
||||||
|
furnaceOwners.remove(furnace);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processFurnaceOwnership(Furnace furnace, Player player) {
|
||||||
|
if(!Permissions.skillEnabled(player, PrimarySkillType.SMELTING))
|
||||||
|
return;
|
||||||
|
|
||||||
|
//If the player is legally allowed to break the block then they can steal ownership
|
||||||
|
if(EventUtils.simulateBlockBreak(furnace.getBlock(), player, true)) {
|
||||||
|
changeFurnaceOwnership(furnace, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void untrackFurnace(Furnace furnace) {
|
||||||
|
furnaceOwners.remove(furnace);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user