Merge pull request #231 from loonybtard/master

Custom warp effects via particles
This commit is contained in:
Sekwah 2021-01-30 18:42:49 +00:00 committed by GitHub
commit 5ee12d7696
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 96 additions and 25 deletions

View File

@ -8,10 +8,7 @@ import com.sekwah.advancedportals.bukkit.portals.AdvancedPortal;
import com.sekwah.advancedportals.bukkit.portals.Portal;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.*;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.EndGateway;
import org.bukkit.command.Command;
@ -210,6 +207,8 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
String serverName = null;
String permission = null;
String portalCommand = null;
String particleDisp = null;
String particleDest = null;
ArrayList<PortalArg> extraData = new ArrayList<>();
@ -305,6 +304,12 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
} else if (startsWithPortalArg("leavedesti:", args[i])) {
String leaveDesti = parseArgVariable(args, i, "leavedesti:");
extraData.add(new PortalArg("leavedesti", leaveDesti));
} else if (startsWithPortalArg("particledisp:", args[i])) {
String value = parseArgVariable(args, i, "particledisp:");
extraData.add(new PortalArg("particledisp", value));
} else if (startsWithPortalArg("particledest:", args[i])) {
String value = parseArgVariable(args, i, "particledest:");
extraData.add(new PortalArg("particledest", value));
}
}
if (!hasName) {
@ -426,8 +431,13 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
}
break;
case "variables":
sender.sendMessage(PluginMessages.customPrefix
+ " \u00A77Variables \u00A7c: \u00A7aname, triggerBlock, desti, destination, bungee, permission, command, cooldowndelay, leavedesti");
sender.sendMessage(
PluginMessages.customPrefix +
" \u00A77Variables \u00A7c: " +
"\u00A7aname, triggerBlock, desti, destination, " +
"bungee, permission, command, cooldowndelay, leavedesti" +
"particledisp, particledest"
);
sender.sendMessage("");
sender.sendMessage("\u00A7aExample command: \u00A7e/portal create name:test triggerId:portal");
break;
@ -897,6 +907,8 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
boolean hasCommand = false;
boolean hasCooldownDelay = false;
boolean hasLeaveDesti = false;
boolean hasDispParticle = false;
boolean hasDestParticle = false;
// TODO change auto complete when quotes are opened and closed. Such as
// autocomplete @Player and stuff when specifying commands
@ -932,6 +944,12 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
case "cooldowndelay":
hasCooldownDelay = true;
break;
case "particledisp":
hasDispParticle = true;
break;
case "particledest":
hasDestParticle = true;
break;
}
}
@ -965,6 +983,12 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
if (!hasLeaveDesti) {
autoComplete.add("leavedesti:");
}
if (!hasDispParticle) {
autoComplete.add("particledisp:");
}
if (!hasDestParticle) {
autoComplete.add("particledest:");
}
}
}
if (args.length == 2 && (args[0].equalsIgnoreCase("warp"))) {
@ -1007,6 +1031,14 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
autoComplete.add(tagStart + object.toString());
}
}
if (args[args.length - 1].startsWith("particledisp:") || args[args.length - 1].startsWith("particledest:")) {
String tagStart = args[args.length - 1].startsWith("particledisp:") ? "particledisp:" : "particledest:";
for (Particle particle : Particle.values()) {
if(particle.getDataType() != Void.class)
continue;
autoComplete.add(tagStart + particle.name().toLowerCase());
}
}
Collections.sort(autoComplete);
for (Object result : autoComplete.toArray()) {
if (!result.toString().startsWith(args[args.length - 1])) {

View File

@ -110,25 +110,33 @@ public class Destination {
}
public static boolean warp(Player player, String name, boolean hideActionBar) {
return warp(player, name, false, false);
return warp(player, name, null, hideActionBar, false);
}
public static boolean warp(Player player, String name, boolean hideActionbar, boolean noEffects) {
public static boolean warp(Player player, String name, boolean hideActionBar, boolean noEffects) {
return warp(player, name, null, hideActionBar, noEffects);
}
public static boolean warp(Player player, String dest, AdvancedPortal disp, boolean hideActionbar, boolean noEffects) {
ConfigAccessor config = new ConfigAccessor(plugin, "destinations.yml");
if (config.getConfig().getString(name + ".world") != null) {
if (config.getConfig().getString(dest + ".world") != null) {
Location loc = player.getLocation();
if (Bukkit.getWorld(config.getConfig().getString(name + ".world")) != null) {
loc.setWorld(Bukkit.getWorld(config.getConfig().getString(name + ".world")));
if (Bukkit.getWorld(config.getConfig().getString(dest + ".world")) != null) {
loc.setWorld(Bukkit.getWorld(config.getConfig().getString(dest + ".world")));
loc.setX(config.getConfig().getDouble(name + ".pos.X"));
loc.setY(config.getConfig().getDouble(name + ".pos.Y"));
loc.setZ(config.getConfig().getDouble(name + ".pos.Z"));
loc.setX(config.getConfig().getDouble(dest + ".pos.X"));
loc.setY(config.getConfig().getDouble(dest + ".pos.Y"));
loc.setZ(config.getConfig().getDouble(dest + ".pos.Z"));
loc.setPitch((float) config.getConfig().getDouble(name + ".pos.pitch"));
loc.setYaw((float) config.getConfig().getDouble(name + ".pos.yaw"));
loc.setPitch((float) config.getConfig().getDouble(dest + ".pos.pitch"));
loc.setYaw((float) config.getConfig().getDouble(dest + ".pos.yaw"));
if (disp != null && disp.getArg("particledisp") != null) {
WarpEffects.activateParticle(player, disp.getArg("particledisp"));
}
if(!noEffects) {
WarpEffects.activateParticles(player);
WarpEffects.activateEffect(player);
WarpEffects.activateSound(player);
}
Chunk c = loc.getChunk();
@ -145,17 +153,21 @@ public class Destination {
} else {
player.teleport(loc, PlayerTeleportEvent.TeleportCause.PLUGIN);
}
if (disp != null && disp.getArg("particledest") != null) {
WarpEffects.activateParticle(player, disp.getArg("particledest"));
}
if(!noEffects) {
WarpEffects.activateParticles(player);
WarpEffects.activateEffect(player);
WarpEffects.activateSound(player);
}
if (PORTAL_MESSAGE_DISPLAY == 1) {
player.sendMessage("");
player.sendMessage(PluginMessages.customPrefix + "\u00A7a You have been warped to \u00A7e" + name.replaceAll("_", " ") + "\u00A7a.");
player.sendMessage(PluginMessages.customPrefix + "\u00A7a You have been warped to \u00A7e" + dest.replaceAll("_", " ") + "\u00A7a.");
player.sendMessage("");
} else if (PORTAL_MESSAGE_DISPLAY == 2 && !hideActionbar) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("\u00A7aYou have warped to \u00A7e" + name.replaceAll("_", " ") + "\u00A7a."));
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("\u00A7aYou have warped to \u00A7e" + dest.replaceAll("_", " ") + "\u00A7a."));
}
Location newLoc = player.getLocation();
@ -171,12 +183,12 @@ public class Destination {
return true;
} else {
player.sendMessage(PluginMessages.customPrefixFail + "\u00A7c The destination you are trying to warp to seems to be linked to a world that doesn't exist!");
plugin.getLogger().log(Level.SEVERE, "The destination '" + name + "' is linked to the world "
+ config.getConfig().getString(name + ".world") + " which doesnt seem to exist any more!");
plugin.getLogger().log(Level.SEVERE, "The destination '" + dest + "' is linked to the world "
+ config.getConfig().getString(dest + ".world") + " which doesnt seem to exist any more!");
}
} else {
player.sendMessage(PluginMessages.customPrefix + "\u00A7c The destination you are currently attempting to warp to doesnt exist!");
plugin.getLogger().log(Level.SEVERE, "The destination '" + name + "' has just had a warp "
plugin.getLogger().log(Level.SEVERE, "The destination '" + dest + "' has just had a warp "
+ "attempt and either the data is corrupt or that destination doesn't exist!");
}
return false;

View File

@ -1,7 +1,11 @@
package com.sekwah.advancedportals.bukkit.effects;
import com.sekwah.advancedportals.bukkit.AdvancedPortalsPlugin;
import com.sekwah.advancedportals.bukkit.portals.AdvancedPortal;
import com.sekwah.advancedportals.bukkit.portals.Portal;
import jdk.tools.jlink.plugin.Plugin;
import org.bukkit.Effect;
import org.bukkit.Particle;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.World;
@ -45,7 +49,7 @@ public class WarpEffects {
return soundFound;
}
public static void activateParticles(Player player) {
public static void activateEffect(Player player) {
Location loc = player.getLocation();
World world = player.getWorld();
switch (plugin.getSettings().getCurrentWarpParticles()){
@ -62,6 +66,21 @@ public class WarpEffects {
}
public static void activateParticle(Player player, String particle_name) {
Particle particle = Portal.getParticle(particle_name);
if(particle == null) {
plugin.getLogger().warning("wrong particle name: " + particle_name);
return;
}
Location loc_from = player.getLocation();
World world = player.getWorld();
world.spawnParticle(particle, loc_from, 100, 1, 1, 1);
}
public static void activateSound(Player player) {
if(!soundError){
Location loc = player.getLocation();

View File

@ -162,6 +162,14 @@ public class Portal {
return blockTypes;
}
public static Particle getParticle(String name) {
try {
return Particle.valueOf(name.toUpperCase());
} catch (IllegalArgumentException e) {
return null;
}
}
public static String create(Location pos1, Location pos2, String name, String destination,
Set<Material> triggerBlocks, PortalArg... extraData) {
return create(pos1, pos2, name, destination, triggerBlocks, null, extraData);
@ -534,7 +542,7 @@ public class Portal {
} else if (portal.getDestiation() != null) {
ConfigAccessor configDesti = new ConfigAccessor(plugin, "destinations.yml");
if (configDesti.getConfig().getString(portal.getDestiation() + ".world") != null) {
warped = Destination.warp(player, portal.getDestiation(), hasMessage);
warped = Destination.warp(player, portal.getDestiation(), portal, hasMessage, false);
if (!warped) {
if(doKnockback)
throwPlayerBack(player);