mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 15:30:19 +01:00
Add HiddenPotionEffect API
This commit is contained in:
parent
27a62b6b53
commit
0a1e7d6d0f
2 changed files with 63 additions and 13 deletions
|
@ -591,6 +591,9 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the given {@link PotionEffect} to the living entity.
|
* Adds the given {@link PotionEffect} to the living entity.
|
||||||
|
* <p>
|
||||||
|
* Note: {@link PotionEffect#getHiddenPotionEffect()} is ignored when
|
||||||
|
* adding the effect to the entity.
|
||||||
*
|
*
|
||||||
* @param effect PotionEffect to be added
|
* @param effect PotionEffect to be added
|
||||||
* @return whether the effect could be added
|
* @return whether the effect could be added
|
||||||
|
@ -615,6 +618,9 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||||
/**
|
/**
|
||||||
* Attempts to add all of the given {@link PotionEffect} to the living
|
* Attempts to add all of the given {@link PotionEffect} to the living
|
||||||
* entity.
|
* entity.
|
||||||
|
* <p>
|
||||||
|
* Note: {@link PotionEffect#getHiddenPotionEffect()} is ignored when
|
||||||
|
* adding the effect to the entity.
|
||||||
*
|
*
|
||||||
* @param effects the effects to add
|
* @param effects the effects to add
|
||||||
* @return whether all of the effects could be added
|
* @return whether all of the effects could be added
|
||||||
|
|
|
@ -28,6 +28,7 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
*/
|
*/
|
||||||
public static final int INFINITE_DURATION = -1;
|
public static final int INFINITE_DURATION = -1;
|
||||||
|
|
||||||
|
private static final String HIDDEN_EFFECT = "hidden_effect"; // Paper
|
||||||
private static final String AMPLIFIER = "amplifier";
|
private static final String AMPLIFIER = "amplifier";
|
||||||
private static final String DURATION = "duration";
|
private static final String DURATION = "duration";
|
||||||
private static final String TYPE = "effect";
|
private static final String TYPE = "effect";
|
||||||
|
@ -40,6 +41,32 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
private final boolean ambient;
|
private final boolean ambient;
|
||||||
private final boolean particles;
|
private final boolean particles;
|
||||||
private final boolean icon;
|
private final boolean icon;
|
||||||
|
private final PotionEffect hiddenEffect; // Paper
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a potion effect.
|
||||||
|
* @param type effect type
|
||||||
|
* @param duration measured in ticks, see {@link
|
||||||
|
* PotionEffect#getDuration()}
|
||||||
|
* @param amplifier the amplifier, see {@link PotionEffect#getAmplifier()}
|
||||||
|
* @param ambient the ambient status, see {@link PotionEffect#isAmbient()}
|
||||||
|
* @param particles the particle status, see {@link PotionEffect#hasParticles()}
|
||||||
|
* @param icon the icon status, see {@link PotionEffect#hasIcon()}
|
||||||
|
* @param hiddenEffect the hidden PotionEffect
|
||||||
|
* @hidden Internal-- hidden effects are only shown internally
|
||||||
|
*/
|
||||||
|
@org.jetbrains.annotations.ApiStatus.Internal // Paper
|
||||||
|
public PotionEffect(@NotNull PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, boolean icon, @Nullable PotionEffect hiddenEffect) { // Paper
|
||||||
|
Preconditions.checkArgument(type != null, "effect type cannot be null");
|
||||||
|
this.type = type;
|
||||||
|
this.duration = duration;
|
||||||
|
this.amplifier = amplifier;
|
||||||
|
this.ambient = ambient;
|
||||||
|
this.particles = particles;
|
||||||
|
this.icon = icon;
|
||||||
|
// Paper start
|
||||||
|
this.hiddenEffect = hiddenEffect;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a potion effect.
|
* Creates a potion effect.
|
||||||
|
@ -52,13 +79,8 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
* @param icon the icon status, see {@link PotionEffect#hasIcon()}
|
* @param icon the icon status, see {@link PotionEffect#hasIcon()}
|
||||||
*/
|
*/
|
||||||
public PotionEffect(@NotNull PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, boolean icon) {
|
public PotionEffect(@NotNull PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, boolean icon) {
|
||||||
Preconditions.checkArgument(type != null, "effect type cannot be null");
|
this(type, duration, amplifier, ambient, particles, icon, null);
|
||||||
this.type = type;
|
// Paper end
|
||||||
this.duration = duration;
|
|
||||||
this.amplifier = amplifier;
|
|
||||||
this.ambient = ambient;
|
|
||||||
this.particles = particles;
|
|
||||||
this.icon = icon;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -106,7 +128,7 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
* @param map the map to deserialize from
|
* @param map the map to deserialize from
|
||||||
*/
|
*/
|
||||||
public PotionEffect(@NotNull Map<String, Object> map) {
|
public PotionEffect(@NotNull Map<String, Object> map) {
|
||||||
this(getEffectType(map), getInt(map, DURATION), getInt(map, AMPLIFIER), getBool(map, AMBIENT, false), getBool(map, PARTICLES, true), getBool(map, ICON, getBool(map, PARTICLES, true)));
|
this(getEffectType(map), getInt(map, DURATION), getInt(map, AMPLIFIER), getBool(map, AMBIENT, false), getBool(map, PARTICLES, true), getBool(map, ICON, getBool(map, PARTICLES, true)), (PotionEffect) map.get(HIDDEN_EFFECT)); // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
// Paper start
|
// Paper start
|
||||||
|
@ -134,6 +156,19 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
public PotionEffect withIcon(boolean icon) {
|
public PotionEffect withIcon(boolean icon) {
|
||||||
return new PotionEffect(this.type, duration, amplifier, ambient, particles, icon);
|
return new PotionEffect(this.type, duration, amplifier, ambient, particles, icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the PotionEffect that will become active
|
||||||
|
* after the current PotionEffect has run out.
|
||||||
|
* <p>
|
||||||
|
* Note: This value is only applicable to type applied to living entities.
|
||||||
|
*
|
||||||
|
* @return The hidden PotionEffect.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public PotionEffect getHiddenPotionEffect() {
|
||||||
|
return hiddenEffect;
|
||||||
|
}
|
||||||
// Paper end
|
// Paper end
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
@ -170,19 +205,27 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public Map<String, Object> serialize() {
|
public Map<String, Object> serialize() {
|
||||||
return ImmutableMap.<String, Object>builder()
|
ImmutableMap.Builder<String, Object> builder = ImmutableMap.<String, Object>builder() // Paper
|
||||||
.put(TYPE, type.getKey().toString())
|
.put(TYPE, type.getKey().toString())
|
||||||
.put(DURATION, duration)
|
.put(DURATION, duration)
|
||||||
.put(AMPLIFIER, amplifier)
|
.put(AMPLIFIER, amplifier)
|
||||||
.put(AMBIENT, ambient)
|
.put(AMBIENT, ambient)
|
||||||
.put(PARTICLES, particles)
|
.put(PARTICLES, particles)
|
||||||
.put(ICON, icon)
|
.put(ICON, icon);
|
||||||
.build();
|
// Paper start
|
||||||
|
if (this.hiddenEffect != null) {
|
||||||
|
builder.put(HIDDEN_EFFECT, this.hiddenEffect);
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
|
// Paper end
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to add the effect represented by this object to the given
|
* Attempts to add the effect represented by this object to the given
|
||||||
* {@link LivingEntity}.
|
* {@link LivingEntity}.
|
||||||
|
* <p>
|
||||||
|
* Note: {@link PotionEffect#getHiddenPotionEffect()} is ignored when
|
||||||
|
* adding the effect to the entity.
|
||||||
*
|
*
|
||||||
* @param entity The entity to add this effect to
|
* @param entity The entity to add this effect to
|
||||||
* @return Whether the effect could be added
|
* @return Whether the effect could be added
|
||||||
|
@ -201,7 +244,7 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PotionEffect that = (PotionEffect) obj;
|
PotionEffect that = (PotionEffect) obj;
|
||||||
return this.type.equals(that.type) && this.ambient == that.ambient && this.amplifier == that.amplifier && this.duration == that.duration && this.particles == that.particles && this.icon == that.icon;
|
return this.type.equals(that.type) && this.ambient == that.ambient && this.amplifier == that.amplifier && this.duration == that.duration && this.particles == that.particles && this.icon == that.icon && java.util.Objects.equals(this.hiddenEffect, that.hiddenEffect); // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -306,11 +349,12 @@ public class PotionEffect implements ConfigurationSerializable {
|
||||||
hash ^= 0x22222222 >> (ambient ? 1 : -1);
|
hash ^= 0x22222222 >> (ambient ? 1 : -1);
|
||||||
hash ^= 0x22222222 >> (particles ? 1 : -1);
|
hash ^= 0x22222222 >> (particles ? 1 : -1);
|
||||||
hash ^= 0x22222222 >> (icon ? 1 : -1);
|
hash ^= 0x22222222 >> (icon ? 1 : -1);
|
||||||
|
if (hiddenEffect != null) hash = hash * 31 + hiddenEffect.hashCode(); // Paper
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return type.getName() + (ambient ? ":(" : ":") + duration + "t-x" + amplifier + (ambient ? ")" : "");
|
return "PotionEffect{" + "amplifier=" + amplifier + ", duration=" + duration + ", type=" + type + ", ambient=" + ambient + ", particles=" + particles + ", icon=" + icon + ", hiddenEffect=" + hiddenEffect + '}'; // Paper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue