mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-08-02 04:25:26 +02:00
Fixed possible NPE in our events, and BrewingStands now remember who last interacted with them, this allows for hoppers to be used with Alchemy Fixes #5004 Fixes #4958 Fixes #4641
This commit is contained in:
@@ -9,7 +9,6 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.metadata.MobMetaFlagType;
|
||||
import com.gmail.nossr50.metadata.MobMetadataService;
|
||||
import com.gmail.nossr50.runnables.skills.AwardCombatXpTask;
|
||||
import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager;
|
||||
import com.gmail.nossr50.skills.archery.ArcheryManager;
|
||||
@@ -37,14 +36,12 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.gmail.nossr50.util.MobMetadataUtils.hasMobFlag;
|
||||
|
||||
public final class CombatUtils {
|
||||
|
||||
private CombatUtils() {}
|
||||
|
||||
private static @NotNull MobMetadataService getMobMetadataService() {
|
||||
return mcMMO.getMetadataService().getMobMetadataService();
|
||||
}
|
||||
|
||||
public static boolean isDamageLikelyFromNormalCombat(@NotNull DamageCause damageCause) {
|
||||
return switch (damageCause) {
|
||||
case ENTITY_ATTACK, ENTITY_SWEEP_ATTACK, PROJECTILE -> true;
|
||||
@@ -926,17 +923,17 @@ public final class CombatUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if(getMobMetadataService().hasMobFlag(MobMetaFlagType.COTW_SUMMONED_MOB, target)) {
|
||||
if(hasMobFlag(MobMetaFlagType.COTW_SUMMONED_MOB, target)) {
|
||||
baseXP = 0;
|
||||
} else if(getMobMetadataService().hasMobFlag(MobMetaFlagType.MOB_SPAWNER_MOB, target) || target.hasMetadata("ES")) {
|
||||
} else if(hasMobFlag(MobMetaFlagType.MOB_SPAWNER_MOB, target) || target.hasMetadata("ES")) {
|
||||
baseXP *= ExperienceConfig.getInstance().getSpawnedMobXpMultiplier();
|
||||
} else if(getMobMetadataService().hasMobFlag(MobMetaFlagType.NETHER_PORTAL_MOB, target)) {
|
||||
} else if(hasMobFlag(MobMetaFlagType.NETHER_PORTAL_MOB, target)) {
|
||||
baseXP *= ExperienceConfig.getInstance().getNetherPortalXpMultiplier();
|
||||
} else if(getMobMetadataService().hasMobFlag(MobMetaFlagType.EGG_MOB, target)) {
|
||||
} else if(hasMobFlag(MobMetaFlagType.EGG_MOB, target)) {
|
||||
baseXP *= ExperienceConfig.getInstance().getEggXpMultiplier();
|
||||
} else if (getMobMetadataService().hasMobFlag(MobMetaFlagType.PLAYER_BRED_MOB, target)) {
|
||||
} else if (hasMobFlag(MobMetaFlagType.PLAYER_BRED_MOB, target)) {
|
||||
baseXP *= ExperienceConfig.getInstance().getBredMobXpMultiplier();
|
||||
} else if(getMobMetadataService().hasMobFlag(MobMetaFlagType.PLAYER_TAMED_MOB, target)) {
|
||||
} else if(hasMobFlag(MobMetaFlagType.PLAYER_TAMED_MOB, target)) {
|
||||
baseXP *= ExperienceConfig.getInstance().getTamedMobXpMultiplier();
|
||||
}
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package com.gmail.nossr50.util.skills;
|
||||
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.events.skills.SkillActivationPerkEvent;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
@@ -106,4 +107,19 @@ public final class PerksUtils {
|
||||
|
||||
return NORMAL_SKILL_ACTIVATION_CHANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate activation chance for a skill.
|
||||
*
|
||||
* @param mmoPlayer Player to check the activation chance for
|
||||
* @param skill PrimarySkillType to check the activation chance of
|
||||
* @return the activation chance with "lucky perk" accounted for
|
||||
*/
|
||||
public static int handleLuckyPerks(McMMOPlayer mmoPlayer, PrimarySkillType skill) {
|
||||
if (Permissions.lucky(mmoPlayer.getPlayer(), skill)) {
|
||||
return LUCKY_SKILL_ACTIVATION_CHANCE;
|
||||
}
|
||||
|
||||
return NORMAL_SKILL_ACTIVATION_CHANCE;
|
||||
}
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.metadata.ItemMetadataService;
|
||||
import com.gmail.nossr50.util.ItemMetadataUtils;
|
||||
import com.gmail.nossr50.util.ItemUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import static com.gmail.nossr50.util.ItemMetadataUtils.*;
|
||||
import static com.gmail.nossr50.util.PotionEffectMapper.getHaste;
|
||||
|
||||
public final class SkillUtils {
|
||||
@@ -152,7 +153,7 @@ public final class SkillUtils {
|
||||
ItemUtils.addDigSpeedToItem(heldItem, heldItem.getEnchantmentLevel(mcMMO.p.getEnchantmentMapper().getEfficiency()));
|
||||
|
||||
//1.13.2+ will have persistent metadata for this item
|
||||
mcMMO.getMetadataService().getItemMetadataService().setSuperAbilityBoostedItem(heldItem, originalDigSpeed);
|
||||
ItemMetadataUtils.setSuperAbilityBoostedItem(heldItem, originalDigSpeed);
|
||||
} else {
|
||||
int duration = 0;
|
||||
int amplifier = 0;
|
||||
@@ -209,9 +210,7 @@ public final class SkillUtils {
|
||||
|
||||
|
||||
//1.13.2+ will have persistent metadata for this itemStack
|
||||
ItemMetadataService itemMetadataService = mcMMO.getMetadataService().getItemMetadataService();
|
||||
|
||||
if(itemMetadataService.isLegacyAbilityTool(itemStack)) {
|
||||
if(isLegacyAbilityTool(itemStack)) {
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
|
||||
if(itemMeta != null) {
|
||||
@@ -223,8 +222,8 @@ public final class SkillUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if(itemMetadataService.isSuperAbilityBoosted(itemStack)) {
|
||||
itemMetadataService.removeBonusDigSpeedOnSuperAbilityTool(itemStack);
|
||||
if(isSuperAbilityBoosted(itemStack)) {
|
||||
removeBonusDigSpeedOnSuperAbilityTool(itemStack);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,102 +0,0 @@
|
||||
package com.gmail.nossr50.util.skills;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
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.UUID;
|
||||
|
||||
public class SmeltingTracker {
|
||||
|
||||
// private final HashMap<Furnace, OfflinePlayer> furnaceOwners;
|
||||
|
||||
private void changeFurnaceOwnership(Furnace furnace, Player player) {
|
||||
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
|
||||
/*
|
||||
Debug output
|
||||
*/
|
||||
printOwnershipGainDebug(furnace, mcMMOPlayer);
|
||||
|
||||
printOwnershipLossDebug(furnace);
|
||||
|
||||
setFurnaceOwner(furnace, player);
|
||||
}
|
||||
|
||||
private void setFurnaceOwner(Furnace furnace, Player player) {
|
||||
mcMMO.getMetadataService().getBlockMetadataService().setFurnaceOwner(furnace, player.getUniqueId());
|
||||
}
|
||||
|
||||
private void printOwnershipGainDebug(Furnace furnace, McMMOPlayer mcMMOPlayer) {
|
||||
if(mcMMOPlayer != null) {
|
||||
if(mcMMOPlayer.isDebugMode()) {
|
||||
mcMMOPlayer.getPlayer().sendMessage("Furnace ownership " +
|
||||
ChatColor.GREEN +"gained " + ChatColor.RESET +
|
||||
"at location: " + furnace.getLocation().toString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void printOwnershipLossDebug(Furnace furnace) {
|
||||
OfflinePlayer furnaceOwner = getFurnaceOwner(furnace);
|
||||
|
||||
if(furnaceOwner != null && furnaceOwner.isOnline()) {
|
||||
McMMOPlayer furnaceOwnerProfile = UserManager.getPlayer(furnaceOwner.getPlayer());
|
||||
|
||||
if(furnaceOwnerProfile != null) {
|
||||
if(furnaceOwnerProfile.isDebugMode()) {
|
||||
furnaceOwnerProfile.getPlayer().sendMessage("Furnace ownership " +
|
||||
ChatColor.RED + "lost " + ChatColor.RESET +
|
||||
"at location: " + furnace.getLocation().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public @Nullable OfflinePlayer getFurnaceOwner(Furnace furnace) {
|
||||
UUID uuid = mcMMO.getMetadataService().getBlockMetadataService().getFurnaceOwner(furnace);
|
||||
|
||||
if(uuid != null) {
|
||||
return Bukkit.getOfflinePlayer(uuid);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Furnace getFurnaceFromInventory(Inventory inventory) {
|
||||
if (!(inventory instanceof FurnaceInventory)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (Furnace) inventory.getHolder();
|
||||
}
|
||||
|
||||
public boolean isFurnaceOwned(Furnace furnace) {
|
||||
return getFurnaceOwner(furnace) != null;
|
||||
}
|
||||
|
||||
public void processFurnaceOwnership(Furnace furnace, Player player) {
|
||||
if(!mcMMO.p.getSkillTools().doesPlayerHaveSkillPermission(player, PrimarySkillType.SMELTING))
|
||||
return;
|
||||
|
||||
//Don't swap ownership if its the same player
|
||||
if(getFurnaceOwner(furnace) != null) {
|
||||
if(getFurnaceOwner(furnace).getUniqueId().equals(player.getUniqueId()))
|
||||
return;
|
||||
}
|
||||
|
||||
changeFurnaceOwnership(furnace, player);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user