mirror of
https://github.com/exituser/Brewery.git
synced 2026-09-17 07:49:03 +00:00
More Options for Potion-Effects
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
package com.dre.brewery;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
public class BEffect {
|
||||
|
||||
private PotionEffectType type;
|
||||
private short minlvl;
|
||||
private short maxlvl;
|
||||
private short minduration;
|
||||
private short maxduration;
|
||||
private boolean hidden = false;
|
||||
|
||||
|
||||
public BEffect(String effectString) {
|
||||
String[] effectSplit = effectString.split("/");
|
||||
String effect = effectSplit[0];
|
||||
if (effect.equalsIgnoreCase("WEAKNESS") ||
|
||||
effect.equalsIgnoreCase("INCREASE_DAMAGE") ||
|
||||
effect.equalsIgnoreCase("SLOW") ||
|
||||
effect.equalsIgnoreCase("SPEED") ||
|
||||
effect.equalsIgnoreCase("REGENERATION")) {
|
||||
// hide these effects as they put crap into lore
|
||||
// Dont write Regeneration into Lore, its already there storing data!
|
||||
hidden = true;
|
||||
} else if (effect.endsWith("X")) {
|
||||
hidden = true;
|
||||
effect = effect.substring(0, effect.length() - 1);
|
||||
}
|
||||
type = PotionEffectType.getByName(effect);
|
||||
if (type == null) {
|
||||
P.p.errorLog("Effect: " + effect + " does not exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (effectSplit.length == 3) {
|
||||
String[] range = effectSplit[1].split("-");
|
||||
if (type.isInstant()) {
|
||||
setLvl(range);
|
||||
} else {
|
||||
setLvl(range);
|
||||
range = effectSplit[2].split("-");
|
||||
setDuration(range);
|
||||
}
|
||||
} else if (effectSplit.length == 2) {
|
||||
String[] range = effectSplit[1].split("-");
|
||||
if (type.isInstant()) {
|
||||
setLvl(range);
|
||||
} else {
|
||||
setDuration(range);
|
||||
maxlvl = 3;
|
||||
minlvl = 1;
|
||||
}
|
||||
} else {
|
||||
maxduration = 20;
|
||||
minduration = 10;
|
||||
maxlvl = 3;
|
||||
minlvl = 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void setLvl(String[] range) {
|
||||
if (range.length == 1) {
|
||||
maxlvl = (short) P.p.parseInt(range[0]);
|
||||
minlvl = 1;
|
||||
} else {
|
||||
maxlvl = (short) P.p.parseInt(range[1]);
|
||||
minlvl = (short) P.p.parseInt(range[0]);
|
||||
}
|
||||
}
|
||||
|
||||
private void setDuration(String[] range) {
|
||||
if (range.length == 1) {
|
||||
maxduration = (short) P.p.parseInt(range[0]);
|
||||
minduration = (short) (maxduration / 8);
|
||||
} else {
|
||||
maxduration = (short) P.p.parseInt(range[1]);
|
||||
minduration = (short) P.p.parseInt(range[0]);
|
||||
}
|
||||
}
|
||||
|
||||
public void apply(int quality, Player player) {
|
||||
int duration = calcDuration(quality);
|
||||
int lvl = calcLvl(quality);
|
||||
|
||||
if (lvl < 1 || (duration < 1 && !type.isInstant())) {
|
||||
return;
|
||||
}
|
||||
|
||||
duration *= 20;
|
||||
duration /= type.getDurationModifier();
|
||||
type.createEffect(duration, lvl - 1).apply(player);
|
||||
}
|
||||
|
||||
public int calcDuration(float quality) {
|
||||
return (int) Math.round(minduration + ((maxduration - minduration) * (quality / 10.0)));
|
||||
}
|
||||
|
||||
public int calcLvl(float quality) {
|
||||
return (int) Math.round(minlvl + ((maxlvl - minlvl) * (quality / 10.0)));
|
||||
}
|
||||
|
||||
public void writeInto(PotionMeta meta, int quality) {
|
||||
if ((calcDuration(quality) > 0 || type.isInstant()) && calcLvl(quality) > 0) {
|
||||
meta.addCustomEffect(type.createEffect(0, 0), true);
|
||||
} else {
|
||||
meta.removeCustomEffect(type);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
return type != null && minlvl >= 0 && maxlvl >= 0 && minduration >= 0 && maxduration >= 0;
|
||||
}
|
||||
|
||||
public boolean isHidden() {
|
||||
return hidden;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user