mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-08-02 04:25:26 +02:00
tridents/xbows WIP part 1
This commit is contained in:
@@ -25,6 +25,11 @@ public final class ItemUtils {
|
||||
return mcMMO.getMaterialMapStore().isBow(item.getType().getKey().getKey());
|
||||
}
|
||||
|
||||
public static boolean isCrossbow(ItemStack itemStack) {
|
||||
return mcMMO.getMaterialMapStore().isCrossbow(itemStack.getType().getKey().getKey());
|
||||
}
|
||||
|
||||
|
||||
public static boolean hasItemInEitherHand(Player player, Material material) {
|
||||
return player.getInventory().getItemInMainHand().getType() == material || player.getInventory().getItemInOffHand().getType() == material;
|
||||
}
|
||||
@@ -39,6 +44,11 @@ public final class ItemUtils {
|
||||
return mcMMO.getMaterialMapStore().isSword(item.getType().getKey().getKey());
|
||||
}
|
||||
|
||||
public static boolean isTrident(ItemStack itemStack) {
|
||||
return mcMMO.getMaterialMapStore().isTrident(itemStack.getType().getKey().getKey());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if the item is a hoe.
|
||||
*
|
||||
|
@@ -48,6 +48,7 @@ public class MaterialMapStore {
|
||||
private HashSet<String> pickAxes;
|
||||
private HashSet<String> tridents;
|
||||
private HashSet<String> bows;
|
||||
private HashSet<String> xbows;
|
||||
private HashSet<String> tools;
|
||||
|
||||
private HashSet<String> enchantables;
|
||||
@@ -85,6 +86,7 @@ public class MaterialMapStore {
|
||||
diamondTools = new HashSet<>();
|
||||
netheriteTools = new HashSet<>();
|
||||
bows = new HashSet<>();
|
||||
xbows = new HashSet<>();
|
||||
stringTools = new HashSet<>();
|
||||
tools = new HashSet<>();
|
||||
|
||||
@@ -255,6 +257,7 @@ public class MaterialMapStore {
|
||||
fillTridents();
|
||||
fillStringTools();
|
||||
fillBows();
|
||||
fillCrossBows();
|
||||
|
||||
//Tools collection
|
||||
tools.addAll(woodTools);
|
||||
@@ -266,12 +269,17 @@ public class MaterialMapStore {
|
||||
tools.addAll(tridents);
|
||||
tools.addAll(stringTools);
|
||||
tools.addAll(bows);
|
||||
tools.addAll(xbows);
|
||||
}
|
||||
|
||||
private void fillBows() {
|
||||
bows.add("bow");
|
||||
}
|
||||
|
||||
private void fillCrossBows() {
|
||||
xbows.add("crossbow");
|
||||
}
|
||||
|
||||
private void fillStringTools() {
|
||||
stringTools.add("bow");
|
||||
stringTools.add("fishing_rod");
|
||||
@@ -598,6 +606,15 @@ public class MaterialMapStore {
|
||||
return bows.contains(id);
|
||||
}
|
||||
|
||||
public boolean isCrossbow(Material material) {
|
||||
return isCrossbow(material.getKey().getKey());
|
||||
}
|
||||
|
||||
public boolean isCrossbow(String id) {
|
||||
return xbows.contains(id);
|
||||
}
|
||||
|
||||
|
||||
public boolean isLeatherArmor(Material material) {
|
||||
return isLeatherArmor(material.getKey().getKey());
|
||||
}
|
||||
@@ -686,6 +703,10 @@ public class MaterialMapStore {
|
||||
return diamondTools.contains(id);
|
||||
}
|
||||
|
||||
public boolean isTrident(Material material) { return isTrident(material.getKey().getKey()); }
|
||||
|
||||
public boolean isTrident(String id) { return tridents.contains(id); }
|
||||
|
||||
public boolean isSword(Material material) {
|
||||
return isSword(material.getKey().getKey());
|
||||
}
|
||||
|
@@ -6,12 +6,14 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.runnables.skills.ExperienceBarHideTask;
|
||||
import com.gmail.nossr50.util.player.NotificationManager;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* ExperienceBarManager handles displaying and updating mcMMO experience bars for players
|
||||
@@ -24,12 +26,16 @@ public class ExperienceBarManager {
|
||||
private HashMap<PrimarySkillType, ExperienceBarWrapper> experienceBars;
|
||||
private HashMap<PrimarySkillType, ExperienceBarHideTask> experienceBarHideTaskHashMap;
|
||||
|
||||
private final HashMap<PrimarySkillType, BarState> barStateMap;
|
||||
|
||||
private HashSet<PrimarySkillType> alwaysVisible;
|
||||
private HashSet<PrimarySkillType> disabledBars;
|
||||
|
||||
public ExperienceBarManager(McMMOPlayer mcMMOPlayer)
|
||||
public ExperienceBarManager(McMMOPlayer mcMMOPlayer, HashMap<PrimarySkillType, BarState> barStateMap)
|
||||
{
|
||||
this.mcMMOPlayer = mcMMOPlayer;
|
||||
this.barStateMap = barStateMap;
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -41,6 +47,28 @@ public class ExperienceBarManager {
|
||||
//Init sets
|
||||
alwaysVisible = new HashSet<>();
|
||||
disabledBars = new HashSet<>();
|
||||
|
||||
syncBarStates();
|
||||
}
|
||||
|
||||
private void syncBarStates() {
|
||||
for(Map.Entry<PrimarySkillType, BarState> entry : barStateMap.entrySet()) {
|
||||
PrimarySkillType key = entry.getKey();
|
||||
BarState barState = entry.getValue();
|
||||
|
||||
switch(barState) {
|
||||
case NORMAL:
|
||||
break;
|
||||
case ALWAYS_ON:
|
||||
xpBarSettingToggle(XPBarSettingTarget.SHOW, key);
|
||||
case DISABLED:
|
||||
xpBarSettingToggle(XPBarSettingTarget.HIDE, key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void resetBarStateMap() {
|
||||
SkillUtils.setBarStateDefaults(barStateMap);
|
||||
}
|
||||
|
||||
public void updateExperienceBar(PrimarySkillType primarySkillType, Plugin plugin)
|
||||
@@ -112,6 +140,7 @@ public class ExperienceBarManager {
|
||||
}
|
||||
|
||||
updateExperienceBar(skillType, mcMMO.p);
|
||||
barStateMap.put(skillType, BarState.ALWAYS_ON);
|
||||
break;
|
||||
case HIDE:
|
||||
alwaysVisible.remove(skillType);
|
||||
@@ -123,6 +152,7 @@ public class ExperienceBarManager {
|
||||
}
|
||||
|
||||
hideExperienceBar(skillType);
|
||||
barStateMap.put(skillType, BarState.DISABLED);
|
||||
break;
|
||||
case RESET:
|
||||
resetBarSettings();
|
||||
@@ -138,12 +168,14 @@ public class ExperienceBarManager {
|
||||
hideExperienceBar(permanent);
|
||||
}
|
||||
|
||||
resetBarStateMap();
|
||||
|
||||
alwaysVisible.clear();
|
||||
disabledBars.clear();
|
||||
|
||||
//Hide child skills by default
|
||||
disabledBars.add(PrimarySkillType.SALVAGE);
|
||||
disabledBars.add(PrimarySkillType.SMELTING);
|
||||
xpBarSettingToggle(XPBarSettingTarget.HIDE, PrimarySkillType.SALVAGE);
|
||||
xpBarSettingToggle(XPBarSettingTarget.HIDE, PrimarySkillType.SMELTING);
|
||||
}
|
||||
|
||||
private void informPlayer(@NotNull ExperienceBarManager.@NotNull XPBarSettingTarget settingTarget, @Nullable PrimarySkillType skillType) {
|
||||
@@ -156,4 +188,6 @@ public class ExperienceBarManager {
|
||||
}
|
||||
|
||||
public enum XPBarSettingTarget { SHOW, HIDE, RESET, DISABLE }
|
||||
|
||||
public enum BarState { NORMAL, ALWAYS_ON, DISABLED }
|
||||
}
|
||||
|
@@ -245,7 +245,7 @@ public class ScoreboardWrapper {
|
||||
oldBoard = null;
|
||||
}
|
||||
else {
|
||||
mcMMO.p.debug("Not reverting targetBoard for " + playerName + " - targetBoard was changed by another plugin (Consider disabling the mcMMO scoreboards if you don't want them!)");
|
||||
mcMMO.p.getLogger().info("Not reverting targetBoard for " + playerName + " - targetBoard was changed by another plugin (Consider disabling the mcMMO scoreboards if you don't want them!)");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -18,6 +18,7 @@ import com.gmail.nossr50.skills.archery.ArcheryManager;
|
||||
import com.gmail.nossr50.skills.axes.AxesManager;
|
||||
import com.gmail.nossr50.skills.swords.SwordsManager;
|
||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||
import com.gmail.nossr50.skills.tridents.TridentManager;
|
||||
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||
import com.gmail.nossr50.util.*;
|
||||
import com.gmail.nossr50.util.player.NotificationManager;
|
||||
@@ -90,6 +91,26 @@ public final class CombatUtils {
|
||||
processCombatXP(mcMMOPlayer, target, PrimarySkillType.SWORDS);
|
||||
}
|
||||
|
||||
public static void processTridentCombat(LivingEntity target, Player player, EntityDamageByEntityEvent entityDamageByEntityEvent) {
|
||||
if (entityDamageByEntityEvent.getCause() == DamageCause.THORNS) {
|
||||
return;
|
||||
}
|
||||
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
|
||||
//Make sure the profiles been loaded
|
||||
if(mcMMOPlayer == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
TridentManager tridentManager = mcMMOPlayer.getTridentManager();
|
||||
// double initialDamage = entityDamageByEntityEvent.getDamage();
|
||||
// double finalDamage = initialDamage;
|
||||
|
||||
processCombatXP(mcMMOPlayer, target, PrimarySkillType.TRIDENTS);
|
||||
}
|
||||
|
||||
|
||||
// public static void strengthDebug(Player player) {
|
||||
// BukkitPlatform bukkitPlatform = (BukkitPlatform) mcMMO.getPlatformManager().getPlatform();
|
||||
// Bukkit.broadcastMessage("Strength: "+bukkitPlatform.getPlayerAttackStrength(player));
|
||||
@@ -387,6 +408,15 @@ public final class CombatUtils {
|
||||
processUnarmedCombat(target, player, event);
|
||||
}
|
||||
}
|
||||
else if (ItemUtils.isTrident(heldItem)) {
|
||||
if(!PrimarySkillType.TRIDENTS.shouldProcess(target)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(PrimarySkillType.TRIDENTS.getPermissions(player)) {
|
||||
processTridentCombat(target, player, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (entityType == EntityType.WOLF) {
|
||||
|
@@ -15,6 +15,7 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.ItemUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||
import com.gmail.nossr50.util.player.NotificationManager;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -31,6 +32,7 @@ import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@@ -44,6 +46,34 @@ public class SkillUtils {
|
||||
mcMMOPlayer.beginXpGain(skill, xp, xpGainReason, xpGainSource);
|
||||
}
|
||||
|
||||
public static HashMap<PrimarySkillType, ExperienceBarManager.BarState> generateDefaultBarStateMap() {
|
||||
HashMap<PrimarySkillType, ExperienceBarManager.BarState> barStateHashMap = new HashMap<>();
|
||||
|
||||
setBarStateDefaults(barStateHashMap);
|
||||
|
||||
return barStateHashMap;
|
||||
}
|
||||
|
||||
public static ExperienceBarManager.BarState asBarState(String str) {
|
||||
for(ExperienceBarManager.BarState barState : ExperienceBarManager.BarState.values()) {
|
||||
if(barState.toString().equalsIgnoreCase(str)) {
|
||||
return barState;
|
||||
}
|
||||
}
|
||||
|
||||
return ExperienceBarManager.BarState.NORMAL;
|
||||
}
|
||||
|
||||
public static void setBarStateDefaults(HashMap<PrimarySkillType, ExperienceBarManager.BarState> barStateHashMap) {
|
||||
for(PrimarySkillType skillType : PrimarySkillType.values()) {
|
||||
if(skillType.isChildSkill()) {
|
||||
barStateHashMap.put(skillType, ExperienceBarManager.BarState.DISABLED);
|
||||
} else {
|
||||
barStateHashMap.put(skillType, ExperienceBarManager.BarState.NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Skill Stat Calculations
|
||||
*/
|
||||
|
Reference in New Issue
Block a user