mirror of
https://github.com/TotalFreedomMC/PlayerParticles.git
synced 2025-07-15 18:24:01 +00:00
/pp reload, 5 new styles, create fixed effects where you're looking, directional particles in styles now possible
Need to rework the locations that styles' particles spawn at. Need to always spawn them relative to 0, 0, 0 and adjust for the player/coordinates they are targeted to spawn at accordingly. This will fix '/pp fixed create looking' not creating the fixed effects properly centered around blocks.
This commit is contained in:
parent
57e4678f8b
commit
cb7e1ef91c
24 changed files with 641 additions and 110 deletions
4
pom.xml
4
pom.xml
|
@ -199,7 +199,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.13.1-R0.1-SNAPSHOT</version>
|
<version>1.13.2-R0.1-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* TODO: v5.3
|
* TODO: v5.3
|
||||||
* + Add new style 'tornado'
|
* + Add new style 'tornado'
|
||||||
* + Add new style 'companion'
|
|
||||||
* * Setting in config.yml for max number of particle groups, default 10
|
* * Setting in config.yml for max number of particle groups, default 10
|
||||||
* * Permission to allow players to overrule the max particle groups allowed in the config playerparticles.groups.unlimited
|
* * Permission to allow players to overrule the max particle groups allowed in the config playerparticles.groups.unlimited
|
||||||
* * Setting in config.yml to disable non-event styles while the player is moving
|
* * Setting in config.yml to disable non-event styles while the player is moving
|
||||||
|
@ -35,12 +34,14 @@ import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
import com.esophose.playerparticles.command.ParticleCommandHandler;
|
import com.esophose.playerparticles.command.ParticleCommandHandler;
|
||||||
import com.esophose.playerparticles.database.DatabaseConnector;
|
import com.esophose.playerparticles.database.DatabaseConnector;
|
||||||
import com.esophose.playerparticles.database.MySqlDatabaseConnector;
|
import com.esophose.playerparticles.database.MySqlDatabaseConnector;
|
||||||
import com.esophose.playerparticles.database.SqliteDatabaseConnector;
|
import com.esophose.playerparticles.database.SqliteDatabaseConnector;
|
||||||
import com.esophose.playerparticles.gui.PlayerParticlesGui;
|
import com.esophose.playerparticles.gui.PlayerParticlesGui;
|
||||||
|
import com.esophose.playerparticles.manager.DataManager;
|
||||||
import com.esophose.playerparticles.manager.LangManager;
|
import com.esophose.playerparticles.manager.LangManager;
|
||||||
import com.esophose.playerparticles.manager.ParticleManager;
|
import com.esophose.playerparticles.manager.ParticleManager;
|
||||||
import com.esophose.playerparticles.styles.DefaultStyles;
|
import com.esophose.playerparticles.styles.DefaultStyles;
|
||||||
|
@ -61,6 +62,11 @@ public class PlayerParticles extends JavaPlugin {
|
||||||
* The database connection manager
|
* The database connection manager
|
||||||
*/
|
*/
|
||||||
private static DatabaseConnector databaseConnector = null;
|
private static DatabaseConnector databaseConnector = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The task that spawns the particles
|
||||||
|
*/
|
||||||
|
private static BukkitTask particleTask = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers all the styles available by default
|
* Registers all the styles available by default
|
||||||
|
@ -94,13 +100,6 @@ public class PlayerParticles extends JavaPlugin {
|
||||||
getLogger().warning("The config.yml has been updated to v" + getDescription().getVersion() + "!");
|
getLogger().warning("The config.yml has been updated to v" + getDescription().getVersion() + "!");
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultStyles.registerStyles();
|
|
||||||
LangManager.setup();
|
|
||||||
|
|
||||||
configureDatabase(getConfig().getBoolean("database-enable"));
|
|
||||||
ParticleManager.refreshData();
|
|
||||||
startParticleTask();
|
|
||||||
|
|
||||||
if (shouldCheckUpdates()) {
|
if (shouldCheckUpdates()) {
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -116,6 +115,8 @@ public class PlayerParticles extends JavaPlugin {
|
||||||
}
|
}
|
||||||
}.runTaskAsynchronously(this);
|
}.runTaskAsynchronously(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -126,6 +127,34 @@ public class PlayerParticles extends JavaPlugin {
|
||||||
databaseConnector.closeConnection();
|
databaseConnector.closeConnection();
|
||||||
PlayerParticlesGui.forceCloseAllOpenGUIs();
|
PlayerParticlesGui.forceCloseAllOpenGUIs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reloads the settings of the plugin
|
||||||
|
*/
|
||||||
|
public void reload() {
|
||||||
|
this.reloadConfig();
|
||||||
|
|
||||||
|
// If not null, plugin is already loaded
|
||||||
|
if (particleTask != null) {
|
||||||
|
particleTask.cancel();
|
||||||
|
particleTask = null;
|
||||||
|
databaseConnector.closeConnection();
|
||||||
|
databaseConnector = null;
|
||||||
|
PlayerParticlesGui.forceCloseAllOpenGUIs();
|
||||||
|
} else {
|
||||||
|
DefaultStyles.registerStyles(); // Only ever load styles once
|
||||||
|
}
|
||||||
|
|
||||||
|
configureDatabase(getConfig().getBoolean("database-enable"));
|
||||||
|
|
||||||
|
DataManager.reload();
|
||||||
|
LangManager.reload();
|
||||||
|
|
||||||
|
PlayerParticlesGui.setup();
|
||||||
|
|
||||||
|
ParticleManager.refreshData();
|
||||||
|
startParticleTask();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the instance of the plugin running on the server
|
* Gets the instance of the plugin running on the server
|
||||||
|
@ -201,26 +230,16 @@ public class PlayerParticles extends JavaPlugin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if pp_group exists, if it doesn't, we need to create all the tables
|
// Try to create the tables just in case they don't exist
|
||||||
try (Statement statement = connection.createStatement()) {
|
try (Statement createStatement = connection.createStatement()) {
|
||||||
String pp_groupQuery;
|
createStatement.addBatch("CREATE TABLE IF NOT EXISTS pp_group (uuid VARCHAR(36), owner_uuid VARCHAR(36), name VARCHAR(100), PRIMARY KEY(uuid))");
|
||||||
if (useMySql) {
|
createStatement.addBatch("CREATE TABLE IF NOT EXISTS pp_fixed (owner_uuid VARCHAR(36), id SMALLINT, particle_uuid VARCHAR(36), world VARCHAR(100), xPos DOUBLE, yPos DOUBLE, zPos DOUBLE, PRIMARY KEY(owner_uuid, id), FOREIGN KEY(particle_uuid) REFERENCES pp_particle(uuid))");
|
||||||
pp_groupQuery = "SHOW TABLES LIKE 'pp_group'";
|
createStatement.addBatch("CREATE TABLE IF NOT EXISTS pp_particle (uuid VARCHAR(36), group_uuid VARCHAR(36), id SMALLINT, effect VARCHAR(100), style VARCHAR(100), item_material VARCHAR(100), block_material VARCHAR(100), note SMALLINT, r SMALLINT, g SMALLINT, b SMALLINT, PRIMARY KEY(uuid))");
|
||||||
} else {
|
int[] results = createStatement.executeBatch();
|
||||||
pp_groupQuery = "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'pp_group'";
|
if (results[0] + results[1] + results[2] > 0) {
|
||||||
|
getLogger().warning("Updated " + (useMySql ? "MySQL" : "SQLite") + " database schema.");
|
||||||
}
|
}
|
||||||
ResultSet result = statement.executeQuery(pp_groupQuery);
|
}
|
||||||
if (!result.next()) {
|
|
||||||
statement.close();
|
|
||||||
|
|
||||||
Statement createStatement = connection.createStatement();
|
|
||||||
createStatement.addBatch("CREATE TABLE IF NOT EXISTS pp_group (uuid VARCHAR(36), owner_uuid VARCHAR(36), name VARCHAR(100))");
|
|
||||||
createStatement.addBatch("CREATE TABLE IF NOT EXISTS pp_fixed (owner_uuid VARCHAR(36), id SMALLINT, particle_uuid VARCHAR(36), world VARCHAR(100), xPos DOUBLE, yPos DOUBLE, zPos DOUBLE)");
|
|
||||||
createStatement.addBatch("CREATE TABLE IF NOT EXISTS pp_particle (uuid VARCHAR(36), group_uuid VARCHAR(36), id SMALLINT, effect VARCHAR(100), style VARCHAR(100), item_material VARCHAR(100), block_material VARCHAR(100), note SMALLINT, r SMALLINT, g SMALLINT, b SMALLINT)");
|
|
||||||
createStatement.executeBatch();
|
|
||||||
getLogger().warning("Created new " + (useMySql ? "MySQL" : "SQLite") + " database schema.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
if (useMySql) {
|
if (useMySql) {
|
||||||
|
@ -241,10 +260,8 @@ public class PlayerParticles extends JavaPlugin {
|
||||||
final Plugin playerParticles = this;
|
final Plugin playerParticles = this;
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
PlayerParticlesGui.setup();
|
|
||||||
|
|
||||||
long ticks = getConfig().getLong("ticks-per-particle");
|
long ticks = getConfig().getLong("ticks-per-particle");
|
||||||
new ParticleManager().runTaskTimer(playerParticles, 0, ticks);
|
particleTask = new ParticleManager().runTaskTimer(playerParticles, 0, ticks);
|
||||||
}
|
}
|
||||||
}.runTaskLater(playerParticles, 1);
|
}.runTaskLater(playerParticles, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,12 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.StringUtil;
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
@ -93,36 +95,61 @@ public class FixedCommandModule implements CommandModule {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.length < 5) {
|
if (args.length < 5 && !(args.length > 0 && args[0].equalsIgnoreCase("looking") && args.length >= 3)) {
|
||||||
LangManager.sendMessage(p, Lang.FIXED_CREATE_MISSING_ARGS, 5 - args.length);
|
LangManager.sendMessage(p, Lang.FIXED_CREATE_MISSING_ARGS, 5 - args.length);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double xPos = -1, yPos = -1, zPos = -1;
|
double xPos = -1, yPos = -1, zPos = -1;
|
||||||
try {
|
|
||||||
if (args[0].startsWith("~")) {
|
if (args[0].equalsIgnoreCase("looking")) {
|
||||||
if (args[0].equals("~")) xPos = p.getLocation().getX();
|
Block targetBlock = p.getTargetBlock((Set<Material>)null, 8);
|
||||||
else xPos = p.getLocation().getX() + Double.parseDouble(args[0].substring(1));
|
int maxDistanceSqrd = 6 * 6;
|
||||||
} else {
|
if (targetBlock.getLocation().distanceSquared(p.getLocation()) > maxDistanceSqrd) {
|
||||||
xPos = Double.parseDouble(args[0]);
|
LangManager.sendMessage(p, Lang.FIXED_CREATE_OUT_OF_RANGE);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Location blockLocation = targetBlock.getLocation().clone().add(0.5, 0.5, 0.5); // Center of block
|
||||||
|
|
||||||
|
xPos = blockLocation.getX();
|
||||||
|
yPos = blockLocation.getY();
|
||||||
|
zPos = blockLocation.getZ();
|
||||||
|
|
||||||
|
// Pad the args with the coordinates so we don't have to adjust all the indices
|
||||||
|
String[] paddedArgs = new String[args.length + 2];
|
||||||
|
paddedArgs[0] = String.valueOf(xPos);
|
||||||
|
paddedArgs[1] = String.valueOf(yPos);
|
||||||
|
paddedArgs[2] = String.valueOf(zPos);
|
||||||
|
for (int i = 1; i < args.length; i++)
|
||||||
|
paddedArgs[i + 2] = args[i];
|
||||||
|
args = paddedArgs;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
if (args[0].startsWith("~")) {
|
||||||
|
if (args[0].equals("~")) xPos = p.getLocation().getX();
|
||||||
|
else xPos = p.getLocation().getX() + Double.parseDouble(args[0].substring(1));
|
||||||
|
} else {
|
||||||
|
xPos = Double.parseDouble(args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
if (args[1].startsWith("~")) {
|
if (args[1].startsWith("~")) {
|
||||||
if (args[1].equals("~")) yPos = p.getLocation().getY() + 1;
|
if (args[1].equals("~")) yPos = p.getLocation().getY() + 1;
|
||||||
else yPos = p.getLocation().getY() + 1 + Double.parseDouble(args[1].substring(1));
|
else yPos = p.getLocation().getY() + 1 + Double.parseDouble(args[1].substring(1));
|
||||||
} else {
|
} else {
|
||||||
yPos = Double.parseDouble(args[1]);
|
yPos = Double.parseDouble(args[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[2].startsWith("~")) {
|
if (args[2].startsWith("~")) {
|
||||||
if (args[2].equals("~")) zPos = p.getLocation().getZ();
|
if (args[2].equals("~")) zPos = p.getLocation().getZ();
|
||||||
else zPos = p.getLocation().getZ() + Double.parseDouble(args[2].substring(1));
|
else zPos = p.getLocation().getZ() + Double.parseDouble(args[2].substring(1));
|
||||||
} else {
|
} else {
|
||||||
zPos = Double.parseDouble(args[2]);
|
zPos = Double.parseDouble(args[2]);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LangManager.sendMessage(p, Lang.FIXED_CREATE_INVALID_COORDS);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
LangManager.sendMessage(p, Lang.FIXED_CREATE_INVALID_COORDS);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double distanceFromEffect = p.getLocation().distance(new Location(p.getWorld(), xPos, yPos, zPos));
|
double distanceFromEffect = p.getLocation().distance(new Location(p.getWorld(), xPos, yPos, zPos));
|
||||||
|
@ -403,9 +430,21 @@ public class FixedCommandModule implements CommandModule {
|
||||||
}
|
}
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
possibleValues.add("~ ~ ~");
|
possibleValues.add("~ ~ ~");
|
||||||
|
possibleValues.add("looking");
|
||||||
}
|
}
|
||||||
StringUtil.copyPartialMatches(args[args.length - 1], possibleValues, matches);
|
StringUtil.copyPartialMatches(args[args.length - 1], possibleValues, matches);
|
||||||
} else if (args.length == 5) {
|
}
|
||||||
|
|
||||||
|
// Pad arguments if the first coordinate is "looking"
|
||||||
|
if (args.length > 1 && args[1].equalsIgnoreCase("looking")) {
|
||||||
|
String[] paddedArgs = new String[args.length + 2];
|
||||||
|
paddedArgs[0] = paddedArgs[1] = paddedArgs[2] = paddedArgs[3] = "";
|
||||||
|
for (int i = 2; i < args.length; i++)
|
||||||
|
paddedArgs[i + 2] = args[i];
|
||||||
|
args = paddedArgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length == 5) {
|
||||||
StringUtil.copyPartialMatches(args[4], PermissionManager.getEffectsUserHasPermissionFor(p), matches);
|
StringUtil.copyPartialMatches(args[4], PermissionManager.getEffectsUserHasPermissionFor(p), matches);
|
||||||
} else if (args.length == 6) {
|
} else if (args.length == 6) {
|
||||||
StringUtil.copyPartialMatches(args[5], PermissionManager.getStylesUserHasPermissionFor(p), matches);
|
StringUtil.copyPartialMatches(args[5], PermissionManager.getStylesUserHasPermissionFor(p), matches);
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class ParticleCommandHandler implements CommandExecutor, TabCompleter {
|
||||||
commands.add(new GUICommandModule());
|
commands.add(new GUICommandModule());
|
||||||
commands.add(new HelpCommandModule());
|
commands.add(new HelpCommandModule());
|
||||||
commands.add(new ListCommandModule());
|
commands.add(new ListCommandModule());
|
||||||
|
commands.add(new ReloadCommandModule());
|
||||||
commands.add(new RemoveCommandModule());
|
commands.add(new RemoveCommandModule());
|
||||||
commands.add(new ResetCommandModule());
|
commands.add(new ResetCommandModule());
|
||||||
commands.add(new StyleCommandModule());
|
commands.add(new StyleCommandModule());
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.esophose.playerparticles.command;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.esophose.playerparticles.PlayerParticles;
|
||||||
|
import com.esophose.playerparticles.manager.LangManager;
|
||||||
|
import com.esophose.playerparticles.manager.LangManager.Lang;
|
||||||
|
import com.esophose.playerparticles.particles.PPlayer;
|
||||||
|
|
||||||
|
public class ReloadCommandModule implements CommandModule {
|
||||||
|
|
||||||
|
public void onCommandExecute(PPlayer pplayer, String[] args) {
|
||||||
|
if (pplayer.getPlayer().hasPermission("playerparticles.reload")) {
|
||||||
|
((PlayerParticles)PlayerParticles.getPlugin()).reload();
|
||||||
|
LangManager.sendMessage(pplayer, Lang.RELOAD_SUCCESS);
|
||||||
|
} else {
|
||||||
|
LangManager.sendMessage(pplayer, Lang.RELOAD_NO_PERMISSION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
|
||||||
|
return new ArrayList<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return "reload";
|
||||||
|
}
|
||||||
|
|
||||||
|
public Lang getDescription() {
|
||||||
|
return Lang.COMMAND_DESCRIPTION_RELOAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getArguments() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean requiresEffects() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -6,7 +6,6 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
@ -452,6 +451,15 @@ public class DataManager {
|
||||||
}
|
}
|
||||||
return disabledWorlds;
|
return disabledWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets all config-related settings
|
||||||
|
*/
|
||||||
|
public static void reload() {
|
||||||
|
maxFixedEffects = -1;
|
||||||
|
maxFixedEffectCreationDistance = -1;
|
||||||
|
disabledWorlds = null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Asynchronizes the callback with it's own thread
|
* Asynchronizes the callback with it's own thread
|
||||||
|
|
|
@ -39,6 +39,7 @@ public class LangManager {
|
||||||
COMMAND_DESCRIPTION_HELP,
|
COMMAND_DESCRIPTION_HELP,
|
||||||
COMMAND_DESCRIPTION_INFO,
|
COMMAND_DESCRIPTION_INFO,
|
||||||
COMMAND_DESCRIPTION_LIST,
|
COMMAND_DESCRIPTION_LIST,
|
||||||
|
COMMAND_DESCRIPTION_RELOAD,
|
||||||
COMMAND_DESCRIPTION_REMOVE,
|
COMMAND_DESCRIPTION_REMOVE,
|
||||||
COMMAND_DESCRIPTION_RESET,
|
COMMAND_DESCRIPTION_RESET,
|
||||||
COMMAND_DESCRIPTION_STYLE,
|
COMMAND_DESCRIPTION_STYLE,
|
||||||
|
@ -89,6 +90,10 @@ public class LangManager {
|
||||||
GROUP_LIST_OUTPUT,
|
GROUP_LIST_OUTPUT,
|
||||||
GROUP_LIST_PRESETS,
|
GROUP_LIST_PRESETS,
|
||||||
|
|
||||||
|
// Reload Command
|
||||||
|
RELOAD_SUCCESS,
|
||||||
|
RELOAD_NO_PERMISSION,
|
||||||
|
|
||||||
// Remove Command
|
// Remove Command
|
||||||
REMOVE_NO_ARGS,
|
REMOVE_NO_ARGS,
|
||||||
REMOVE_SUCCESS,
|
REMOVE_SUCCESS,
|
||||||
|
@ -138,6 +143,7 @@ public class LangManager {
|
||||||
FIXED_CREATE_MISSING_ARGS,
|
FIXED_CREATE_MISSING_ARGS,
|
||||||
FIXED_CREATE_INVALID_COORDS,
|
FIXED_CREATE_INVALID_COORDS,
|
||||||
FIXED_CREATE_OUT_OF_RANGE,
|
FIXED_CREATE_OUT_OF_RANGE,
|
||||||
|
FIXED_CREATE_LOOKING_TOO_FAR,
|
||||||
FIXED_CREATE_EFFECT_INVALID,
|
FIXED_CREATE_EFFECT_INVALID,
|
||||||
FIXED_CREATE_EFFECT_NO_PERMISSION,
|
FIXED_CREATE_EFFECT_NO_PERMISSION,
|
||||||
FIXED_CREATE_STYLE_INVALID,
|
FIXED_CREATE_STYLE_INVALID,
|
||||||
|
@ -224,7 +230,7 @@ public class LangManager {
|
||||||
* This should only get called once by the PlayerParticles class, however
|
* This should only get called once by the PlayerParticles class, however
|
||||||
* calling it multiple times wont affect anything negatively
|
* calling it multiple times wont affect anything negatively
|
||||||
*/
|
*/
|
||||||
public static void setup() {
|
public static void reload() {
|
||||||
FileConfiguration config = PlayerParticles.getPlugin().getConfig();
|
FileConfiguration config = PlayerParticles.getPlugin().getConfig();
|
||||||
messagesEnabled = config.getBoolean("messages-enabled");
|
messagesEnabled = config.getBoolean("messages-enabled");
|
||||||
prefixEnabled = config.getBoolean("use-message-prefix");
|
prefixEnabled = config.getBoolean("use-message-prefix");
|
||||||
|
|
|
@ -20,7 +20,6 @@ import com.esophose.playerparticles.particles.PPlayer;
|
||||||
import com.esophose.playerparticles.particles.ParticleEffect;
|
import com.esophose.playerparticles.particles.ParticleEffect;
|
||||||
import com.esophose.playerparticles.particles.ParticleEffect.NoteColor;
|
import com.esophose.playerparticles.particles.ParticleEffect.NoteColor;
|
||||||
import com.esophose.playerparticles.particles.ParticleEffect.OrdinaryColor;
|
import com.esophose.playerparticles.particles.ParticleEffect.OrdinaryColor;
|
||||||
import com.esophose.playerparticles.particles.ParticleEffect.ParticleProperty;
|
|
||||||
import com.esophose.playerparticles.particles.ParticlePair;
|
import com.esophose.playerparticles.particles.ParticlePair;
|
||||||
import com.esophose.playerparticles.styles.api.PParticle;
|
import com.esophose.playerparticles.styles.api.PParticle;
|
||||||
import com.esophose.playerparticles.styles.api.ParticleStyleManager;
|
import com.esophose.playerparticles.styles.api.ParticleStyleManager;
|
||||||
|
@ -103,16 +102,15 @@ public class ParticleManager extends BukkitRunnable implements Listener {
|
||||||
|
|
||||||
// Don't show their particles if they are in spectator mode
|
// Don't show their particles if they are in spectator mode
|
||||||
// Don't spawn particles if the world doesn't allow it
|
// Don't spawn particles if the world doesn't allow it
|
||||||
if (player != null && player.getGameMode() != GameMode.SPECTATOR && !DataManager.isWorldDisabled(player.getWorld().getName())) {
|
if (player != null && player.getGameMode() != GameMode.SPECTATOR && !DataManager.isWorldDisabled(player.getWorld().getName()))
|
||||||
for (ParticlePair particles : pplayer.getActiveParticles()) {
|
for (ParticlePair particles : pplayer.getActiveParticles())
|
||||||
displayParticles(particles, player.getLocation().clone().add(0, 1, 0));
|
displayParticles(particles, player.getLocation().clone().add(0, 1, 0));
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop for FixedParticleEffects
|
// Loop for FixedParticleEffects
|
||||||
// Don't spawn particles if the world doesn't allow it
|
// Don't spawn particles if the world doesn't allow it
|
||||||
for (FixedParticleEffect effect : pplayer.getFixedParticles())
|
for (FixedParticleEffect effect : pplayer.getFixedParticles())
|
||||||
if (!DataManager.isWorldDisabled(effect.getLocation().getWorld().getName())) displayFixedParticleEffect(effect);
|
if (!DataManager.isWorldDisabled(effect.getLocation().getWorld().getName()))
|
||||||
|
displayFixedParticleEffect(effect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,18 +121,9 @@ public class ParticleManager extends BukkitRunnable implements Listener {
|
||||||
* @param location The location to display at
|
* @param location The location to display at
|
||||||
*/
|
*/
|
||||||
private void displayParticles(ParticlePair particle, Location location) {
|
private void displayParticles(ParticlePair particle, Location location) {
|
||||||
if (!ParticleStyleManager.isCustomHandled(particle.getStyle())) {
|
if (!ParticleStyleManager.isCustomHandled(particle.getStyle()))
|
||||||
ParticleEffect effect = particle.getEffect();
|
for (PParticle pparticle : particle.getStyle().getParticles(particle, location))
|
||||||
for (PParticle pparticle : particle.getStyle().getParticles(particle, location)) {
|
ParticleEffect.display(particle, pparticle);
|
||||||
if (effect.hasProperty(ParticleProperty.REQUIRES_MATERIAL_DATA)) {
|
|
||||||
effect.display(particle.getSpawnMaterial(), pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), 1, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
} else if (effect.hasProperty(ParticleProperty.COLORABLE)) {
|
|
||||||
effect.display(particle.getSpawnColor(), pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
} else {
|
|
||||||
effect.display(pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), 1, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -144,16 +133,8 @@ public class ParticleManager extends BukkitRunnable implements Listener {
|
||||||
* @param particles The particles to display
|
* @param particles The particles to display
|
||||||
*/
|
*/
|
||||||
public static void displayParticles(ParticlePair particle, List<PParticle> particles) {
|
public static void displayParticles(ParticlePair particle, List<PParticle> particles) {
|
||||||
ParticleEffect effect = particle.getEffect();
|
for (PParticle pparticle : particles)
|
||||||
for (PParticle pparticle : particles) {
|
ParticleEffect.display(particle, pparticle);
|
||||||
if (effect.hasProperty(ParticleProperty.REQUIRES_MATERIAL_DATA)) {
|
|
||||||
effect.display(particle.getSpawnMaterial(), pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), 1, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
} else if (effect.hasProperty(ParticleProperty.COLORABLE)) {
|
|
||||||
effect.display(particle.getSpawnColor(), pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
} else {
|
|
||||||
effect.display(pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), 1, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -163,16 +144,8 @@ public class ParticleManager extends BukkitRunnable implements Listener {
|
||||||
*/
|
*/
|
||||||
private void displayFixedParticleEffect(FixedParticleEffect fixedEffect) {
|
private void displayFixedParticleEffect(FixedParticleEffect fixedEffect) {
|
||||||
ParticlePair particle = fixedEffect.getParticlePair();
|
ParticlePair particle = fixedEffect.getParticlePair();
|
||||||
ParticleEffect effect = particle.getEffect();
|
for (PParticle pparticle : particle.getStyle().getParticles(particle, fixedEffect.getLocation()))
|
||||||
for (PParticle pparticle : particle.getStyle().getParticles(particle, fixedEffect.getLocation())) {
|
ParticleEffect.display(particle, pparticle);
|
||||||
if (effect.hasProperty(ParticleProperty.REQUIRES_MATERIAL_DATA)) {
|
|
||||||
effect.display(particle.getSpawnMaterial(), pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), 1, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
} else if (effect.hasProperty(ParticleProperty.COLORABLE)) {
|
|
||||||
effect.display(particle.getSpawnColor(), pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
} else {
|
|
||||||
effect.display(pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), 1, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static OrdinaryColor getRainbowParticleColor() {
|
public static OrdinaryColor getRainbowParticleColor() {
|
||||||
|
|
|
@ -18,6 +18,8 @@ import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.material.MaterialData;
|
import org.bukkit.material.MaterialData;
|
||||||
|
|
||||||
|
import com.esophose.playerparticles.styles.api.PParticle;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public enum ParticleEffect {
|
public enum ParticleEffect {
|
||||||
|
|
||||||
|
@ -186,6 +188,25 @@ public enum ParticleEffect {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invokes the correct spawn method for the particle information given
|
||||||
|
*
|
||||||
|
* @param particle The ParticlePair, given the effect/style/data
|
||||||
|
* @param pparticle The particle spawn information
|
||||||
|
*/
|
||||||
|
public static void display(ParticlePair particle, PParticle pparticle) {
|
||||||
|
ParticleEffect effect = particle.getEffect();
|
||||||
|
int count = pparticle.isDirectional() ? 0 : 1;
|
||||||
|
|
||||||
|
if (effect.hasProperty(ParticleProperty.REQUIRES_MATERIAL_DATA)) {
|
||||||
|
effect.display(particle.getSpawnMaterial(), pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), 1, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
||||||
|
} else if (effect.hasProperty(ParticleProperty.COLORABLE)) {
|
||||||
|
effect.display(particle.getSpawnColor(), pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
||||||
|
} else {
|
||||||
|
effect.display(pparticle.getXOff(), pparticle.getYOff(), pparticle.getZOff(), pparticle.getSpeed(), count, pparticle.getLocation(effect.hasProperty(ParticleProperty.COLORABLE)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays a particle effect
|
* Displays a particle effect
|
||||||
|
|
|
@ -20,13 +20,17 @@ public class DefaultStyles {
|
||||||
public static final ParticleStyle BLOCKBREAK = new ParticleStyleBlockBreak();
|
public static final ParticleStyle BLOCKBREAK = new ParticleStyleBlockBreak();
|
||||||
public static final ParticleStyle BLOCKEDIT = new ParticleStyleBlockEdit();
|
public static final ParticleStyle BLOCKEDIT = new ParticleStyleBlockEdit();
|
||||||
public static final ParticleStyle BLOCKPLACE = new ParticleStyleBlockPlace();
|
public static final ParticleStyle BLOCKPLACE = new ParticleStyleBlockPlace();
|
||||||
|
public static final ParticleStyle CHAINS = new ParticleStyleChains();
|
||||||
|
public static final ParticleStyle COMPANION = new ParticleStyleCompanion();
|
||||||
public static final ParticleStyle CUBE = new ParticleStyleCube();
|
public static final ParticleStyle CUBE = new ParticleStyleCube();
|
||||||
public static final ParticleStyle FEET = new ParticleStyleFeet();
|
public static final ParticleStyle FEET = new ParticleStyleFeet();
|
||||||
public static final ParticleStyle HALO = new ParticleStyleHalo();
|
public static final ParticleStyle HALO = new ParticleStyleHalo();
|
||||||
public static final ParticleStyle HURT = new ParticleStyleHurt();
|
public static final ParticleStyle HURT = new ParticleStyleHurt();
|
||||||
|
public static final ParticleStyle INVOCATION = new ParticleStyleInvocation();
|
||||||
public static final ParticleStyle MOVE = new ParticleStyleMove();
|
public static final ParticleStyle MOVE = new ParticleStyleMove();
|
||||||
public static final ParticleStyle NORMAL = new ParticleStyleNormal();
|
public static final ParticleStyle NORMAL = new ParticleStyleNormal();
|
||||||
public static final ParticleStyle ORBIT = new ParticleStyleOrbit();
|
public static final ParticleStyle ORBIT = new ParticleStyleOrbit();
|
||||||
|
public static final ParticleStyle OVERHEAD = new ParticleStyleOverhead();
|
||||||
public static final ParticleStyle POINT = new ParticleStylePoint();
|
public static final ParticleStyle POINT = new ParticleStylePoint();
|
||||||
public static final ParticleStyle QUADHELIX = new ParticleStyleQuadhelix();
|
public static final ParticleStyle QUADHELIX = new ParticleStyleQuadhelix();
|
||||||
public static final ParticleStyle RINGS = new ParticleStyleRings();
|
public static final ParticleStyle RINGS = new ParticleStyleRings();
|
||||||
|
@ -35,6 +39,7 @@ public class DefaultStyles {
|
||||||
public static final ParticleStyle SPIRAL = new ParticleStyleSpiral();
|
public static final ParticleStyle SPIRAL = new ParticleStyleSpiral();
|
||||||
public static final ParticleStyle SWORDS = new ParticleStyleSwords();
|
public static final ParticleStyle SWORDS = new ParticleStyleSwords();
|
||||||
public static final ParticleStyle THICK = new ParticleStyleThick();
|
public static final ParticleStyle THICK = new ParticleStyleThick();
|
||||||
|
public static final ParticleStyle VORTEX = new ParticleStyleVortex();
|
||||||
public static final ParticleStyle WINGS = new ParticleStyleWings();
|
public static final ParticleStyle WINGS = new ParticleStyleWings();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,13 +53,17 @@ public class DefaultStyles {
|
||||||
ParticleStyleManager.registerCustomHandledStyle(BLOCKBREAK);
|
ParticleStyleManager.registerCustomHandledStyle(BLOCKBREAK);
|
||||||
ParticleStyleManager.registerCustomHandledStyle(BLOCKEDIT);
|
ParticleStyleManager.registerCustomHandledStyle(BLOCKEDIT);
|
||||||
ParticleStyleManager.registerCustomHandledStyle(BLOCKPLACE);
|
ParticleStyleManager.registerCustomHandledStyle(BLOCKPLACE);
|
||||||
|
ParticleStyleManager.registerStyle(CHAINS);
|
||||||
|
ParticleStyleManager.registerStyle(COMPANION);
|
||||||
ParticleStyleManager.registerStyle(CUBE);
|
ParticleStyleManager.registerStyle(CUBE);
|
||||||
ParticleStyleManager.registerStyle(FEET);
|
ParticleStyleManager.registerStyle(FEET);
|
||||||
ParticleStyleManager.registerStyle(HALO);
|
ParticleStyleManager.registerStyle(HALO);
|
||||||
ParticleStyleManager.registerCustomHandledStyle(HURT);
|
ParticleStyleManager.registerCustomHandledStyle(HURT);
|
||||||
|
ParticleStyleManager.registerStyle(INVOCATION);
|
||||||
ParticleStyleManager.registerCustomHandledStyle(MOVE);
|
ParticleStyleManager.registerCustomHandledStyle(MOVE);
|
||||||
ParticleStyleManager.registerStyle(NORMAL);
|
ParticleStyleManager.registerStyle(NORMAL);
|
||||||
ParticleStyleManager.registerStyle(ORBIT);
|
ParticleStyleManager.registerStyle(ORBIT);
|
||||||
|
ParticleStyleManager.registerStyle(OVERHEAD);
|
||||||
ParticleStyleManager.registerStyle(POINT);
|
ParticleStyleManager.registerStyle(POINT);
|
||||||
ParticleStyleManager.registerStyle(QUADHELIX);
|
ParticleStyleManager.registerStyle(QUADHELIX);
|
||||||
ParticleStyleManager.registerStyle(RINGS);
|
ParticleStyleManager.registerStyle(RINGS);
|
||||||
|
@ -63,8 +72,10 @@ public class DefaultStyles {
|
||||||
ParticleStyleManager.registerStyle(SPIRAL);
|
ParticleStyleManager.registerStyle(SPIRAL);
|
||||||
ParticleStyleManager.registerCustomHandledStyle(SWORDS);
|
ParticleStyleManager.registerCustomHandledStyle(SWORDS);
|
||||||
ParticleStyleManager.registerStyle(THICK);
|
ParticleStyleManager.registerStyle(THICK);
|
||||||
|
ParticleStyleManager.registerStyle(VORTEX);
|
||||||
ParticleStyleManager.registerStyle(WINGS);
|
ParticleStyleManager.registerStyle(WINGS);
|
||||||
|
|
||||||
|
// Register their events
|
||||||
PluginManager manager = Bukkit.getPluginManager();
|
PluginManager manager = Bukkit.getPluginManager();
|
||||||
Plugin playerParticles = PlayerParticles.getPlugin();
|
Plugin playerParticles = PlayerParticles.getPlugin();
|
||||||
manager.registerEvents((Listener) ARROWS, playerParticles);
|
manager.registerEvents((Listener) ARROWS, playerParticles);
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.esophose.playerparticles.styles;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
import com.esophose.playerparticles.particles.ParticlePair;
|
||||||
|
import com.esophose.playerparticles.styles.api.PParticle;
|
||||||
|
import com.esophose.playerparticles.styles.api.ParticleStyle;
|
||||||
|
|
||||||
|
public class ParticleStyleChains implements ParticleStyle {
|
||||||
|
|
||||||
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
|
List<PParticle> particles = new ArrayList<PParticle>();
|
||||||
|
|
||||||
|
for (double n = -0.2; n < 0.6; n += 0.1) {
|
||||||
|
particles.add(new PParticle(location.clone().add(1 - n, n - 1.1, 1 - n)));
|
||||||
|
particles.add(new PParticle(location.clone().add(1 - n, n - 1.1, -1 + n)));
|
||||||
|
particles.add(new PParticle(location.clone().add(-1 + n, n - 1.1, 1 - n)));
|
||||||
|
particles.add(new PParticle(location.clone().add(-1 + n, n - 1.1, -1 + n)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return particles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateTimers() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return "chains";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canBeFixed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
/**
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014 Slikey
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
package com.esophose.playerparticles.styles;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import com.esophose.playerparticles.particles.ParticlePair;
|
||||||
|
import com.esophose.playerparticles.styles.api.PParticle;
|
||||||
|
import com.esophose.playerparticles.styles.api.ParticleStyle;
|
||||||
|
|
||||||
|
public class ParticleStyleCompanion implements ParticleStyle {
|
||||||
|
|
||||||
|
private int numParticles = 150;
|
||||||
|
private int particlesPerIteration = 5;
|
||||||
|
private double size = 1.25;
|
||||||
|
private double xFactor = 1.0, yFactor = 1.5, zFactor = 1.0;
|
||||||
|
private double xOffset = 0.0, yOffset = -0.75, zOffset = 0.0;
|
||||||
|
private int step = 0;
|
||||||
|
|
||||||
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
|
List<PParticle> particles = new ArrayList<PParticle>();
|
||||||
|
|
||||||
|
Vector vector = new Vector();
|
||||||
|
|
||||||
|
double t = (Math.PI / numParticles) * step;
|
||||||
|
double r = Math.sin(t) * size;
|
||||||
|
double s = 2 * Math.PI * t;
|
||||||
|
|
||||||
|
vector.setX(xFactor * r * Math.cos(s) + xOffset);
|
||||||
|
vector.setZ(zFactor * r * Math.sin(s) + zOffset);
|
||||||
|
vector.setY(yFactor * size * Math.cos(t) + yOffset);
|
||||||
|
|
||||||
|
for (int i = 0; i < particlesPerIteration; i++) {
|
||||||
|
particles.add(new PParticle(location.clone().subtract(vector)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return particles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateTimers() {
|
||||||
|
step++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return "companion";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canBeFixed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -52,7 +52,7 @@ public class ParticleStyleCube implements ParticleStyle {
|
||||||
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
List<PParticle> pparticles = new ArrayList<PParticle>();
|
List<PParticle> pparticles = new ArrayList<PParticle>();
|
||||||
|
|
||||||
if (!skipNextStep) { // TODO: relative position lookup tables
|
if (!skipNextStep) {
|
||||||
double xRotation = 0, yRotation = 0, zRotation = 0;
|
double xRotation = 0, yRotation = 0, zRotation = 0;
|
||||||
xRotation = step * angularVelocityX;
|
xRotation = step * angularVelocityX;
|
||||||
yRotation = step * angularVelocityY;
|
yRotation = step * angularVelocityY;
|
||||||
|
|
|
@ -13,7 +13,7 @@ public class ParticleStyleFeet implements ParticleStyle {
|
||||||
|
|
||||||
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
List<PParticle> particles = new ArrayList<PParticle>();
|
List<PParticle> particles = new ArrayList<PParticle>();
|
||||||
particles.add(new PParticle(location.subtract(0, 0.95, 0), 0.4F, 0.0F, 0.4F, 0.0F));
|
particles.add(new PParticle(location.clone().subtract(0, 0.95, 0), 0.4F, 0.0F, 0.4F, 0.0F));
|
||||||
return particles;
|
return particles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
package com.esophose.playerparticles.styles;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
import com.esophose.playerparticles.particles.ParticleEffect;
|
||||||
|
import com.esophose.playerparticles.particles.ParticlePair;
|
||||||
|
import com.esophose.playerparticles.styles.api.PParticle;
|
||||||
|
import com.esophose.playerparticles.styles.api.ParticleStyle;
|
||||||
|
|
||||||
|
public class ParticleStyleInvocation implements ParticleStyle {
|
||||||
|
|
||||||
|
private int points = 5;
|
||||||
|
private double radius = 3.5;
|
||||||
|
private double step = 0;
|
||||||
|
private int circleStep = 0;
|
||||||
|
private int numSteps = 120;
|
||||||
|
|
||||||
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
|
List<PParticle> particles = new ArrayList<PParticle>();
|
||||||
|
double speed = getSpeedByEffect(particle.getEffect());
|
||||||
|
|
||||||
|
// Circle around everything, spawn less often
|
||||||
|
if (circleStep % 5 == 0) {
|
||||||
|
for (int i = 0; i < numSteps; i++) {
|
||||||
|
double dx = Math.cos(Math.PI * 2 * ((double)i / numSteps)) * radius;
|
||||||
|
double dy = -0.9;
|
||||||
|
double dz = Math.sin(Math.PI * 2 * ((double)i / numSteps)) * radius;
|
||||||
|
particles.add(new PParticle(location.clone().add(dx, dy, dz)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Orbit going clockwise
|
||||||
|
for (int i = 0; i < points; i++) {
|
||||||
|
double dx = Math.cos(step + (Math.PI * 2 * ((double)i / points))) * radius;
|
||||||
|
double dy = -0.9;
|
||||||
|
double dz = Math.sin(step + (Math.PI * 2 * ((double)i / points))) * radius;
|
||||||
|
double angle = Math.atan2(dz, dx);
|
||||||
|
double xAng = -Math.cos(angle);
|
||||||
|
double zAng = -Math.sin(angle);
|
||||||
|
particles.add(new PParticle(location.clone().add(dx, dy, dz), xAng, 0, zAng, speed, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Orbit going counter-clockwise
|
||||||
|
for (int i = 0; i > -points; i--) {
|
||||||
|
double dx = Math.cos(-step + (Math.PI * 2 * ((double)i / points))) * radius;
|
||||||
|
double dy = -0.9;
|
||||||
|
double dz = Math.sin(-step + (Math.PI * 2 * ((double)i / points))) * radius;
|
||||||
|
double angle = Math.atan2(dz, dx);
|
||||||
|
double xAng = -Math.cos(angle);
|
||||||
|
double zAng = -Math.sin(angle);
|
||||||
|
particles.add(new PParticle(location.clone().add(dx, dy, dz), xAng, 0, zAng, speed, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
return particles;
|
||||||
|
}
|
||||||
|
|
||||||
|
private double getSpeedByEffect(ParticleEffect effect) {
|
||||||
|
switch (effect) {
|
||||||
|
case CRIT:
|
||||||
|
case DAMAGE_INDICATOR:
|
||||||
|
case ENCHANTED_HIT:
|
||||||
|
return 2;
|
||||||
|
case DRAGON_BREATH:
|
||||||
|
return 0.01;
|
||||||
|
case ENCHANT:
|
||||||
|
case NAUTILUS:
|
||||||
|
case PORTAL:
|
||||||
|
return radius * 2;
|
||||||
|
case END_ROD:
|
||||||
|
case SMOKE:
|
||||||
|
case SQUID_INK:
|
||||||
|
return 0.3;
|
||||||
|
case FIREWORK:
|
||||||
|
case SPIT:
|
||||||
|
case SPLASH:
|
||||||
|
return 0.5;
|
||||||
|
case POOF:
|
||||||
|
return 0.4;
|
||||||
|
case TOTEM_OF_UNDYING:
|
||||||
|
return 1.25;
|
||||||
|
default:
|
||||||
|
return 0.2; // Flame
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateTimers() {
|
||||||
|
step = (step + Math.PI * 2 / numSteps) % numSteps;
|
||||||
|
circleStep = (circleStep + 1) % numSteps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return "invocation";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canBeFixed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.esophose.playerparticles.styles;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
import com.esophose.playerparticles.particles.ParticlePair;
|
||||||
|
import com.esophose.playerparticles.styles.api.PParticle;
|
||||||
|
import com.esophose.playerparticles.styles.api.ParticleStyle;
|
||||||
|
|
||||||
|
public class ParticleStyleOverhead implements ParticleStyle {
|
||||||
|
|
||||||
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
|
List<PParticle> particles = new ArrayList<PParticle>();
|
||||||
|
particles.add(new PParticle(location.clone().add(0, 1.75, 0), 0.4F, 0.1F, 0.4F, 0.0F));
|
||||||
|
particles.add(new PParticle(location.clone().add(0, 1.75, 0), 0.4F, 0.1F, 0.4F, 0.0F));
|
||||||
|
return particles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateTimers() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return "overhead";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canBeFixed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ import com.esophose.playerparticles.styles.api.ParticleStyle;
|
||||||
public class ParticleStylePoint implements ParticleStyle {
|
public class ParticleStylePoint implements ParticleStyle {
|
||||||
|
|
||||||
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
return Collections.singletonList(new PParticle(location.add(0.0, 1.5, 0.0)));
|
return Collections.singletonList(new PParticle(location.clone().add(0.0, 1.5, 0.0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateTimers() {
|
public void updateTimers() {
|
||||||
|
|
|
@ -21,10 +21,10 @@ public class ParticleStyleSphere implements ParticleStyle {
|
||||||
double v = Math.random();
|
double v = Math.random();
|
||||||
double theta = 2 * Math.PI * u;
|
double theta = 2 * Math.PI * u;
|
||||||
double phi = Math.acos(2 * v - 1);
|
double phi = Math.acos(2 * v - 1);
|
||||||
double x = location.getX() + (radius * Math.sin(phi) * Math.cos(theta));
|
double dx = radius * Math.sin(phi) * Math.cos(theta);
|
||||||
double y = location.getY() + (radius * Math.sin(phi) * Math.sin(theta));
|
double dy = radius * Math.sin(phi) * Math.sin(theta);
|
||||||
double z = location.getZ() + (radius * Math.cos(phi));
|
double dz = radius * Math.cos(phi);
|
||||||
particles.add(new PParticle(new Location(location.getWorld(), x, y, z)));
|
particles.add(new PParticle(location.clone().add(dx, dy, dz)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return particles;
|
return particles;
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014 Slikey
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
package com.esophose.playerparticles.styles;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import com.esophose.playerparticles.particles.ParticlePair;
|
||||||
|
import com.esophose.playerparticles.styles.api.PParticle;
|
||||||
|
import com.esophose.playerparticles.styles.api.ParticleStyle;
|
||||||
|
|
||||||
|
public class ParticleStyleVortex implements ParticleStyle {
|
||||||
|
|
||||||
|
private double grow = .05f;
|
||||||
|
private double radials = Math.PI / 16;
|
||||||
|
private int helices = 4;
|
||||||
|
private int step = 0;
|
||||||
|
private int maxStep = 70;
|
||||||
|
|
||||||
|
public List<PParticle> getParticles(ParticlePair particle, Location location) {
|
||||||
|
List<PParticle> particles = new ArrayList<PParticle>();
|
||||||
|
|
||||||
|
double radius = 2 * (1 - (double)step / maxStep);
|
||||||
|
for (int i = 0; i < helices; i++) {
|
||||||
|
double angle = step * radials + (2 * Math.PI * i / helices);
|
||||||
|
Vector v = new Vector(Math.cos(angle) * radius, step * grow - 1, Math.sin(angle) * radius);
|
||||||
|
|
||||||
|
particles.add(new PParticle(location.clone().add(v)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return particles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateTimers() {
|
||||||
|
step = (step + 1) % maxStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return "vortex";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canBeFixed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -10,7 +10,27 @@ public class PParticle {
|
||||||
private Location location;
|
private Location location;
|
||||||
private double speed;
|
private double speed;
|
||||||
private double xOff, yOff, zOff;
|
private double xOff, yOff, zOff;
|
||||||
|
private boolean directional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The constructor with all the fancy parameters for customization
|
||||||
|
*
|
||||||
|
* @param location The location to display the particle at
|
||||||
|
* @param xOff The offset for the x-axis
|
||||||
|
* @param yOff The offset for the y-axis
|
||||||
|
* @param zOff The offset for the z-axis
|
||||||
|
* @param speed The speed the particle will move at
|
||||||
|
* @param directional If the particle should use the x, y, and z offsets as directions instead
|
||||||
|
*/
|
||||||
|
public PParticle(Location location, double xOff, double yOff, double zOff, double speed, boolean directional) {
|
||||||
|
this.location = location;
|
||||||
|
this.xOff = xOff;
|
||||||
|
this.yOff = yOff;
|
||||||
|
this.zOff = zOff;
|
||||||
|
this.speed = speed;
|
||||||
|
this.directional = directional;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor with all the fancy parameters for customization
|
* The constructor with all the fancy parameters for customization
|
||||||
*
|
*
|
||||||
|
@ -21,11 +41,7 @@ public class PParticle {
|
||||||
* @param speed The speed the particle will move at
|
* @param speed The speed the particle will move at
|
||||||
*/
|
*/
|
||||||
public PParticle(Location location, double xOff, double yOff, double zOff, double speed) {
|
public PParticle(Location location, double xOff, double yOff, double zOff, double speed) {
|
||||||
this.location = location;
|
this(location, xOff, yOff, zOff, speed, false);
|
||||||
this.xOff = xOff;
|
|
||||||
this.yOff = yOff;
|
|
||||||
this.zOff = zOff;
|
|
||||||
this.speed = speed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -35,7 +51,7 @@ public class PParticle {
|
||||||
* @param location The location to display the particles at
|
* @param location The location to display the particles at
|
||||||
*/
|
*/
|
||||||
public PParticle(Location location) {
|
public PParticle(Location location) {
|
||||||
this(location, 0.0F, 0.0F, 0.0F, 0.0F);
|
this(location, 0.0F, 0.0F, 0.0F, 0.0F, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -70,6 +86,15 @@ public class PParticle {
|
||||||
public double getSpeed() {
|
public double getSpeed() {
|
||||||
return this.speed;
|
return this.speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets if the particle is directional
|
||||||
|
*
|
||||||
|
* @return If the particle is directional
|
||||||
|
*/
|
||||||
|
public boolean isDirectional() {
|
||||||
|
return this.directional;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the offset on the x-axis for the particle
|
* Gets the offset on the x-axis for the particle
|
||||||
|
|
|
@ -19,13 +19,26 @@ public class ParticleStyleManager {
|
||||||
* @param style The style to add
|
* @param style The style to add
|
||||||
*/
|
*/
|
||||||
public static void registerStyle(ParticleStyle style) {
|
public static void registerStyle(ParticleStyle style) {
|
||||||
|
if (style == null) {
|
||||||
|
PlayerParticles.getPlugin().getLogger().severe("Tried to register a null style");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style.getName() == null || style.getName().trim().equals("")) {
|
||||||
|
PlayerParticles.getPlugin().getLogger().severe("Tried to register a style with a null or empty name: '" + style.getName() + "'");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (ParticleStyle testAgainst : styles) {
|
for (ParticleStyle testAgainst : styles) {
|
||||||
if (testAgainst.getName().equalsIgnoreCase(style.getName())) {
|
if (testAgainst.getName().equalsIgnoreCase(style.getName())) {
|
||||||
PlayerParticles.getPlugin().getLogger().severe("Tried to register two styles with the same name spelling: " + style.getName());
|
PlayerParticles.getPlugin().getLogger().severe("Tried to register two styles with the same name spelling: '" + style.getName() + "'");
|
||||||
|
return;
|
||||||
} else if (testAgainst.equals(style)) {
|
} else if (testAgainst.equals(style)) {
|
||||||
PlayerParticles.getPlugin().getLogger().severe("Tried to register the same style twice: " + style.getName());
|
PlayerParticles.getPlugin().getLogger().severe("Tried to register the same style twice: '" + style.getName() + "'");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
styles.add(style);
|
styles.add(style);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +70,16 @@ public class ParticleStyleManager {
|
||||||
public static List<ParticleStyle> getStyles() {
|
public static List<ParticleStyle> getStyles() {
|
||||||
return styles;
|
return styles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all styles from the registry
|
||||||
|
*
|
||||||
|
* It is not recommended to call this
|
||||||
|
*/
|
||||||
|
public static void reset() {
|
||||||
|
styles.clear();
|
||||||
|
customHandledStyles.clear();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates all the timers for the particle styles to make the animations
|
* Updates all the timers for the particle styles to make the animations
|
||||||
|
|
|
@ -224,13 +224,17 @@ gui-icon:
|
||||||
BLOCKBREAK: IRON_PICKAXE
|
BLOCKBREAK: IRON_PICKAXE
|
||||||
BLOCKEDIT: DISPENSER
|
BLOCKEDIT: DISPENSER
|
||||||
BLOCKPLACE: OAK_PLANKS
|
BLOCKPLACE: OAK_PLANKS
|
||||||
|
CHAINS: TRIPWIRE_HOOK
|
||||||
|
COMPANION: NAME_TAG
|
||||||
CUBE: STONE
|
CUBE: STONE
|
||||||
FEET: GRASS
|
FEET: GRASS
|
||||||
HALO: END_PORTAL_FRAME
|
HALO: END_PORTAL_FRAME
|
||||||
HURT: CACTUS
|
HURT: CACTUS
|
||||||
|
INVOCATION: ENDER_EYE
|
||||||
MOVE: PISTON
|
MOVE: PISTON
|
||||||
NONE: GLASS_PANE
|
NONE: GLASS_PANE
|
||||||
ORBIT: ENCHANTING_TABLE
|
ORBIT: ENCHANTING_TABLE
|
||||||
|
OVERHEAD: GLOWSTONE
|
||||||
POINT: STONE_BUTTON
|
POINT: STONE_BUTTON
|
||||||
QUADHELIX: NAUTILUS_SHELL
|
QUADHELIX: NAUTILUS_SHELL
|
||||||
NORMAL: DIRT
|
NORMAL: DIRT
|
||||||
|
@ -240,6 +244,7 @@ gui-icon:
|
||||||
SPIRAL: HOPPER
|
SPIRAL: HOPPER
|
||||||
SWORDS: IRON_SWORD
|
SWORDS: IRON_SWORD
|
||||||
THICK: COBWEB
|
THICK: COBWEB
|
||||||
|
VORTEX: GLOWSTONE_DUST
|
||||||
WINGS: ELYTRA
|
WINGS: ELYTRA
|
||||||
style-legacy: # 1.9 to 1.12
|
style-legacy: # 1.9 to 1.12
|
||||||
ARROWS: BOW
|
ARROWS: BOW
|
||||||
|
@ -248,13 +253,17 @@ gui-icon:
|
||||||
BLOCKBREAK: IRON_PICKAXE
|
BLOCKBREAK: IRON_PICKAXE
|
||||||
BLOCKEDIT: DISPENSER
|
BLOCKEDIT: DISPENSER
|
||||||
BLOCKPLACE: WOOD
|
BLOCKPLACE: WOOD
|
||||||
|
CHAINS: TRIPWIRE_HOOK
|
||||||
|
COMPANION: NAME_TAG
|
||||||
CUBE: STONE
|
CUBE: STONE
|
||||||
FEET: GRASS
|
FEET: GRASS
|
||||||
HALO: ENDER_PORTAL_FRAME
|
HALO: ENDER_PORTAL_FRAME
|
||||||
HURT: CACTUS
|
HURT: CACTUS
|
||||||
|
INVOCATION: EYE_OF_ENDER
|
||||||
MOVE: PISTON_BASE
|
MOVE: PISTON_BASE
|
||||||
NORMAL: DIRT
|
NORMAL: DIRT
|
||||||
ORBIT: ENCHANTMENT_TABLE
|
ORBIT: ENCHANTMENT_TABLE
|
||||||
|
OVERHEAD: GLOWSTONE
|
||||||
POINT: STONE_BUTTON
|
POINT: STONE_BUTTON
|
||||||
QUADHELIX: ACTIVATOR_RAIL
|
QUADHELIX: ACTIVATOR_RAIL
|
||||||
RINGS: STRING
|
RINGS: STRING
|
||||||
|
@ -263,6 +272,7 @@ gui-icon:
|
||||||
SPIRAL: HOPPER
|
SPIRAL: HOPPER
|
||||||
SWORDS: IRON_SWORD
|
SWORDS: IRON_SWORD
|
||||||
THICK: VINE
|
THICK: VINE
|
||||||
|
VORTEX: GLOWSTONE_DUST
|
||||||
WINGS: ELYTRA
|
WINGS: ELYTRA
|
||||||
|
|
||||||
# That's everything! You reached the end of the configuration.
|
# That's everything! You reached the end of the configuration.
|
||||||
|
|
28
src/groups.yml
Normal file
28
src/groups.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# ==================================================== #
|
||||||
|
# PRESET GROUPS #
|
||||||
|
# Information: #
|
||||||
|
# * The groups listed within this file will be #
|
||||||
|
# available to all players who have access to the #
|
||||||
|
# effect and style! #
|
||||||
|
# * Feel free to create your own, they will be #
|
||||||
|
# available for users to select within the GUI! #
|
||||||
|
# ==================================================== #
|
||||||
|
|
||||||
|
raincloud:
|
||||||
|
1:
|
||||||
|
effect: 'cloud'
|
||||||
|
style: 'overhead'
|
||||||
|
data: ''
|
||||||
|
2:
|
||||||
|
effect: 'rain'
|
||||||
|
style: 'overhead'
|
||||||
|
data: ''
|
||||||
|
rainbows:
|
||||||
|
1:
|
||||||
|
effect: 'dust'
|
||||||
|
style: 'orbit'
|
||||||
|
data: 'rainbow'
|
||||||
|
2:
|
||||||
|
effect: 'entity_effect'
|
||||||
|
style: 'feet'
|
||||||
|
data: 'rainbow'
|
|
@ -25,6 +25,7 @@ command-description-gui: 'Display the GUI for easy editing of particles'
|
||||||
command-description-help: 'Displays the help menu... You have arrived'
|
command-description-help: 'Displays the help menu... You have arrived'
|
||||||
command-description-info: 'Gets the description of one of your active particles'
|
command-description-info: 'Gets the description of one of your active particles'
|
||||||
command-description-list: 'Lists the IDs of your active particles'
|
command-description-list: 'Lists the IDs of your active particles'
|
||||||
|
command-description-reload: 'Reloads the config.yml and lang file'
|
||||||
command-description-remove: 'Removes one of your active particles'
|
command-description-remove: 'Removes one of your active particles'
|
||||||
command-description-reset: 'Removes all your active particles'
|
command-description-reset: 'Removes all your active particles'
|
||||||
command-description-style: '&cThis command has been removed, use &b/pp help &cto find new commands'
|
command-description-style: '&cThis command has been removed, use &b/pp help &cto find new commands'
|
||||||
|
@ -33,7 +34,7 @@ command-description-version: 'Display the current version of the plugin and the
|
||||||
command-description-worlds: 'Find out what worlds particles are disabled in'
|
command-description-worlds: 'Find out what worlds particles are disabled in'
|
||||||
|
|
||||||
# Sub-Command Usage
|
# Sub-Command Usage
|
||||||
command-description-fixed-create: '&e/pp fixed create <x> <y> <z> <effect> <style> [data] - Creates a new fixed effect'
|
command-description-fixed-create: '&e/pp fixed create <<x> <y> <z>|<looking>> <effect> <style> [data] - Creates a new fixed effect'
|
||||||
command-description-fixed-remove: '&e/pp fixed remove <ID> - Removes a fixed effect by its ID'
|
command-description-fixed-remove: '&e/pp fixed remove <ID> - Removes a fixed effect by its ID'
|
||||||
command-description-fixed-list: '&e/pp fixed list - Lists all IDs of your fixed effects'
|
command-description-fixed-list: '&e/pp fixed list - Lists all IDs of your fixed effects'
|
||||||
command-description-fixed-info: '&e/pp fixed info <ID> - Gets info on one of your fixed effects'
|
command-description-fixed-info: '&e/pp fixed info <ID> - Gets info on one of your fixed effects'
|
||||||
|
@ -75,6 +76,10 @@ group-list-none: '&eYou do not have any particle groups saved!'
|
||||||
group-list-output: '&eYou have the following groups saved: &b{0}'
|
group-list-output: '&eYou have the following groups saved: &b{0}'
|
||||||
group-list-presets: '&eThe following preset groups are available: &b{0}'
|
group-list-presets: '&eThe following preset groups are available: &b{0}'
|
||||||
|
|
||||||
|
# Reload Command
|
||||||
|
reload-success: '&aThe plugin has been reloaded!'
|
||||||
|
reload-no-permission: '&cYou do not have permission to reload the plugin settings!'
|
||||||
|
|
||||||
# Remove Command
|
# Remove Command
|
||||||
remove-no-args: '&cYou did not specify an ID to remove! &b/pp remove <ID>'
|
remove-no-args: '&cYou did not specify an ID to remove! &b/pp remove <ID>'
|
||||||
remove-success: '&aYour particle with the ID &b{0} &ahas been removed!'
|
remove-success: '&aYour particle with the ID &b{0} &ahas been removed!'
|
||||||
|
@ -124,6 +129,7 @@ reset-success: '&aRemoved &b{0} &aactive particle(s)!'
|
||||||
fixed-create-missing-args: '&cUnable to create fixed effect, you are missing &b{0} &crequired arguments!'
|
fixed-create-missing-args: '&cUnable to create fixed effect, you are missing &b{0} &crequired arguments!'
|
||||||
fixed-create-invalid-coords: '&cUnable to create fixed effect, one or more coordinates you entered is invalid!'
|
fixed-create-invalid-coords: '&cUnable to create fixed effect, one or more coordinates you entered is invalid!'
|
||||||
fixed-create-out-of-range: '&cUnable to create fixed effect, you must be within &b{0} &cblocks of your desired location!'
|
fixed-create-out-of-range: '&cUnable to create fixed effect, you must be within &b{0} &cblocks of your desired location!'
|
||||||
|
fixed-create-looking-too-far: '&cUnable to create fixed effect, you are standing too far away from the block you are looking at!'
|
||||||
fixed-create-effect-invalid: '&cUnable to create fixed effect, an effect with the name &b{0} &cdoes not exist!'
|
fixed-create-effect-invalid: '&cUnable to create fixed effect, an effect with the name &b{0} &cdoes not exist!'
|
||||||
fixed-create-effect-no-permission: '&cUnable to create fixed effect, you do not have permission to use the effect &b{0}&c!'
|
fixed-create-effect-no-permission: '&cUnable to create fixed effect, you do not have permission to use the effect &b{0}&c!'
|
||||||
fixed-create-style-invalid: '&cUnable to create fixed effect, a style with the name &b{0} &cdoes not exist!'
|
fixed-create-style-invalid: '&cUnable to create fixed effect, a style with the name &b{0} &cdoes not exist!'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue