mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Now using enum
This commit is contained in:
parent
11fded46db
commit
c56713ed7d
@ -3,7 +3,7 @@ package io.github.thebusybiscuit.slimefun4.core.attributes;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.slimefun4.utils.UnbreakingRNGUtils;
|
import io.github.thebusybiscuit.slimefun4.utils.UnbreakingAlgorithms;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -35,6 +35,17 @@ public interface DamageableItem extends ItemAttribute {
|
|||||||
*/
|
*/
|
||||||
boolean isDamageable();
|
boolean isDamageable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change this to a {@link UnbreakingAlgorithms} value if needed to fit the type of the damageable item
|
||||||
|
* Defaults to return {@link UnbreakingAlgorithms#TOOLS},
|
||||||
|
* which represents {@link DamageableItem} utilizes the tool algorithm to determine the chance of item damaging
|
||||||
|
*
|
||||||
|
* @return The {@link UnbreakingAlgorithms} of the itemType
|
||||||
|
*/
|
||||||
|
default UnbreakingAlgorithms itemType() {
|
||||||
|
return UnbreakingAlgorithms.TOOLS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method will damage the given {@link ItemStack} once.
|
* This method will damage the given {@link ItemStack} once.
|
||||||
* It also takes into account the {@link Enchantment} {@code Unbreaking}.
|
* It also takes into account the {@link Enchantment} {@code Unbreaking}.
|
||||||
@ -42,15 +53,15 @@ public interface DamageableItem extends ItemAttribute {
|
|||||||
* It will only apply the damage if {@link #isDamageable()} returned true.
|
* It will only apply the damage if {@link #isDamageable()} returned true.
|
||||||
*
|
*
|
||||||
* @param p
|
* @param p
|
||||||
* The {@link Player} to which the item belongs
|
* The {@link Player} to which the item belongs
|
||||||
* @param item
|
* @param item
|
||||||
* The {@link ItemStack} to damage
|
* The {@link ItemStack} to damage
|
||||||
*/
|
*/
|
||||||
default void damageItem(@Nonnull Player p, @Nullable ItemStack item) {
|
default void damageItem(@Nonnull Player p, @Nullable ItemStack item) {
|
||||||
if (isDamageable() && item != null && !item.getType().isAir() && item.getAmount() > 0) {
|
if (isDamageable() && item != null && !item.getType().isAir() && item.getAmount() > 0) {
|
||||||
int unbreakingLevel = item.getEnchantmentLevel(Enchantment.DURABILITY);
|
int unbreakingLevel = item.getEnchantmentLevel(Enchantment.DURABILITY);
|
||||||
|
|
||||||
if (unbreakingLevel > 0 && durabilityRNG(unbreakingLevel)) {
|
if (unbreakingLevel > 0 && evaluateUnbreakingEnchantment(unbreakingLevel)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,13 +84,23 @@ public interface DamageableItem extends ItemAttribute {
|
|||||||
/**
|
/**
|
||||||
* This method will randomly decide if the item should be damaged or not
|
* This method will randomly decide if the item should be damaged or not
|
||||||
* This does not damage the item, it is called by {@link #damageItem(Player, ItemStack)} to randomly generate a boolean
|
* This does not damage the item, it is called by {@link #damageItem(Player, ItemStack)} to randomly generate a boolean
|
||||||
* This method can be overridden when trying to break a piece of armor, with the provided method {@link UnbreakingRNGUtils().getArmorRNG(Integer)}
|
|
||||||
*
|
*
|
||||||
* @param unbreakingLevel
|
* @param unbreakingLevel
|
||||||
* The {@link Integer} level of the unbreaking enchantment
|
* The {@link Integer} level of the unbreaking enchantment
|
||||||
|
* @throws IllegalArgumentException
|
||||||
|
* Thrown when {@link #itemType()} doesn't return a valid {@link UnbreakingAlgorithms} value
|
||||||
|
* @return Whether you should keep the item undamaged
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
default boolean durabilityRNG(int unbreakingLevel) {
|
default boolean evaluateUnbreakingEnchantment(int unbreakingLevel) {
|
||||||
return new UnbreakingRNGUtils().getToolsRNG(unbreakingLevel);
|
switch (itemType()){
|
||||||
|
case TOOLS:
|
||||||
|
return !(Math.random() < (1.0 / (unbreakingLevel + 1)));
|
||||||
|
case ARMORS:
|
||||||
|
return !(Math.random() < 0.6 + (0.4 / (unbreakingLevel + 1)));
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("itemType must be either UnbreakingAlgorithms.TOOLS or UnbreakingAlgorithms.ARMORS");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.slimefun4.utils.UnbreakingAlgorithms;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -29,6 +30,11 @@ public class ElytraCap extends SlimefunArmorPiece implements DamageableItem, Pro
|
|||||||
|
|
||||||
private final NamespacedKey key;
|
private final NamespacedKey key;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnbreakingAlgorithms itemType() {
|
||||||
|
return UnbreakingAlgorithms.ARMORS;
|
||||||
|
}
|
||||||
|
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public ElytraCap(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
public ElytraCap(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
super(category, item, recipeType, recipe, null);
|
super(category, item, recipeType, recipe, null);
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package io.github.thebusybiscuit.slimefun4.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This a enum indicating if a {@link DamageableItem} is a tool or an armor
|
||||||
|
* This effects the way they determine if an item should be damaged
|
||||||
|
*
|
||||||
|
* @author RobotHanzo
|
||||||
|
*/
|
||||||
|
public enum UnbreakingAlgorithms {
|
||||||
|
TOOLS,
|
||||||
|
ARMORS
|
||||||
|
}
|
@ -1,25 +0,0 @@
|
|||||||
package io.github.thebusybiscuit.slimefun4.utils;
|
|
||||||
|
|
||||||
|
|
||||||
import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class is created for a RNG generator to determine if the tool / armor should be damaged when unbreaking enchant is applied.<br>
|
|
||||||
* Mainly used in {@link DamageableItem} and their implementations
|
|
||||||
*
|
|
||||||
* @author RobotHanzo
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class UnbreakingRNGUtils {
|
|
||||||
|
|
||||||
public UnbreakingRNGUtils(){}
|
|
||||||
|
|
||||||
public boolean getToolsRNG(int unbreakingLevel){
|
|
||||||
return !(Math.random() < (1.0 / (unbreakingLevel + 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getArmorRNG(int unbreakingLevel){
|
|
||||||
return !(Math.random() < 0.6 + (0.4 / (unbreakingLevel + 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user