DungeonsXL/addon/core/src/main/java/de/erethon/dungeonsxxl/sign/ParticleSign.java

89 lines
2.2 KiB
Java

/*
* Copyright (C) 2020-2022 Daniel Saukel
*
* All rights reserved.
*/
package de.erethon.dungeonsxxl.sign;
import de.erethon.dungeonsxl.api.DungeonsAPI;
import de.erethon.dungeonsxl.api.sign.Button;
import de.erethon.dungeonsxl.api.world.InstanceWorld;
import de.erethon.dungeonsxl.player.DPermission;
import de.erethon.bedrock.misc.EnumUtil;
import de.erethon.bedrock.misc.NumberUtil;
import org.bukkit.Particle;
import org.bukkit.block.Sign;
/**
* Spawns particles.
*
* @author Daniel Saukel
*/
public class ParticleSign extends Button {
private Particle particle;
private int count;
private double offsetX, offsetY, offsetZ;
private double extra = 1;
public ParticleSign(DungeonsAPI api, Sign sign, String[] lines, InstanceWorld instance) {
super(api, sign, lines, instance);
}
@Override
public String getName() {
return "Particle";
}
@Override
public String getBuildPermission() {
return DPermission.SIGN.getNode() + ".particle";
}
@Override
public boolean isOnDungeonInit() {
return false;
}
@Override
public boolean isProtected() {
return false;
}
@Override
public boolean isSetToAir() {
return true;
}
@Override
public boolean validate() {
particle = EnumUtil.getEnumIgnoreCase(Particle.class, getLine(1));
if (particle == null) {
markAsErroneous("Unknown particle type: " + getLine(1));
return false;
}
return true;
}
@Override
public void initialize() {
String[] args = getLine(2).split(",");
if (args.length == 1) {
extra = NumberUtil.parseDouble(args[0], 1);
} else if (args.length >= 3) {
offsetX = NumberUtil.parseDouble(args[0], 0);
offsetX = NumberUtil.parseDouble(args[1], 0);
offsetX = NumberUtil.parseDouble(args[2], 0);
if (args.length == 4) {
extra = NumberUtil.parseDouble(args[3], 1);
}
}
}
@Override
public void push() {
getSign().getWorld().spawnParticle(particle, getSign().getLocation(), count, offsetX, offsetY, offsetZ, extra);
}
}