Adjusted and created settings for Cannon Bow <@114932850507120641> #40
7 changed files with 175 additions and 29 deletions
|
@ -1 +1,5 @@
|
||||||
UHCMatchState: "IDLE"
|
UHCMatchState: "IDLE"
|
||||||
|
magic:
|
||||||
|
cannonbow:
|
||||||
|
speedmultiplier: 1.5
|
||||||
|
minforce: 0.2
|
|
@ -5,16 +5,12 @@ version: 2.0.2
|
||||||
commands:
|
commands:
|
||||||
alilink:
|
alilink:
|
||||||
description: creates wireless redstone
|
description: creates wireless redstone
|
||||||
cashmob:
|
|
||||||
description: creates mobs
|
|
||||||
cb:
|
cb:
|
||||||
description: creates creative boundaries
|
description: creates creative boundaries
|
||||||
debug:
|
debug:
|
||||||
description: debug commands
|
description: debug commands
|
||||||
flaircolour:
|
flaircolour:
|
||||||
description: flaaairs
|
description: flaaairs
|
||||||
fruit:
|
|
||||||
description: fruits
|
|
||||||
gpower:
|
gpower:
|
||||||
description: powerssss
|
description: powerssss
|
||||||
insurance:
|
insurance:
|
||||||
|
|
4
pom.xml
4
pom.xml
|
@ -85,14 +85,14 @@
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot</artifactId>
|
||||||
<version>1.11-R0.1-SNAPSHOT</version>
|
<version>1.11-R0.1-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
|
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
<version>3.4</version>
|
<version>3.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.TBMCPlugins.ButtonCore</groupId>
|
<groupId>com.github.TBMCPlugins.ButtonCore</groupId>
|
||||||
|
|
|
@ -7,11 +7,14 @@ import buttondevteam.alipresents.components.magic.tricks.AliArrowListener;
|
||||||
import buttondevteam.alipresents.components.magic.tricks.BoomBowDeathListener;
|
import buttondevteam.alipresents.components.magic.tricks.BoomBowDeathListener;
|
||||||
import buttondevteam.alipresents.components.magic.tricks.BoomBowListener;
|
import buttondevteam.alipresents.components.magic.tricks.BoomBowListener;
|
||||||
import buttondevteam.alipresents.components.magic.tricks.CannonBowListener;
|
import buttondevteam.alipresents.components.magic.tricks.CannonBowListener;
|
||||||
|
import buttondevteam.alipresents.components.magic.tricks.CannonBowSettings;
|
||||||
|
|
||||||
public class MagicComponent extends Component{
|
public class MagicComponent extends Component{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(JavaPlugin plugin) {
|
public void register(JavaPlugin plugin) {
|
||||||
|
registerCommand(plugin, new CannonBowSettings());
|
||||||
|
|
||||||
registerListener(plugin, new AliArrowListener(plugin));
|
registerListener(plugin, new AliArrowListener(plugin));
|
||||||
registerListener(plugin, new BoomBowDeathListener());
|
registerListener(plugin, new BoomBowDeathListener());
|
||||||
registerListener(plugin, new BoomBowListener(plugin));
|
registerListener(plugin, new BoomBowListener(plugin));
|
||||||
|
|
|
@ -8,6 +8,7 @@ public class AliArrowTask extends BukkitRunnable {
|
||||||
static String[] permittedUsers = {"alisolarflare", "Zanthr", "NorbiPeti"};
|
static String[] permittedUsers = {"alisolarflare", "Zanthr", "NorbiPeti"};
|
||||||
String name;
|
String name;
|
||||||
Arrow arrow;
|
Arrow arrow;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
public AliArrowTask(Arrow arrow, String name) {
|
public AliArrowTask(Arrow arrow, String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
@ -16,7 +17,8 @@ public class AliArrowTask extends BukkitRunnable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (arrow.isOnGround() || arrow.isDead()) {
|
count++;
|
||||||
|
if (count > 400 ||arrow.isOnGround() || arrow.isDead()) {
|
||||||
this.cancel();
|
this.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +35,10 @@ public class AliArrowTask extends BukkitRunnable {
|
||||||
case "norbipeti":
|
case "norbipeti":
|
||||||
arrow.getWorld().spawnParticle(Particle.LAVA, arrow.getLocation(), 1);
|
arrow.getWorld().spawnParticle(Particle.LAVA, arrow.getLocation(), 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "mayskam1995":
|
||||||
|
arrow.getWorld().spawnParticle(Particle.DRIP_WATER, arrow.getLocation(), 2);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
package buttondevteam.alipresents.components.magic.tricks;
|
package buttondevteam.alipresents.components.magic.tricks;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftLivingEntity;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftTNTPrimed;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
@ -12,47 +17,93 @@ import org.bukkit.entity.TNTPrimed;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_11_R1.EntityLiving;
|
||||||
|
import net.minecraft.server.v1_11_R1.EntityTNTPrimed;
|
||||||
|
|
||||||
public class CannonBowListener implements Listener {
|
public class CannonBowListener implements Listener {
|
||||||
|
private static double SpeedMultiplier = 1.5;
|
||||||
|
private static double minforce = 0.2;
|
||||||
|
private static int fuseticks = 40;
|
||||||
|
private static double recoil = 1;
|
||||||
public final static String launchedTNTName = "CANNON BOW TNT:42170";
|
public final static String launchedTNTName = "CANNON BOW TNT:42170";
|
||||||
JavaPlugin plugin;
|
|
||||||
public CannonBowListener(JavaPlugin plugin){
|
public CannonBowListener(JavaPlugin plugin){
|
||||||
this.plugin = plugin;
|
FileConfiguration config = plugin.getConfig();
|
||||||
|
|
||||||
|
if (config.isDouble("magic.cannonbow.speedmultiplier"))
|
||||||
|
setSpeedMultiplier(config.getDouble("magic.cannonbow.speedmultiplier"));
|
||||||
|
|
||||||
|
if (config.isDouble("magic.cannonbow.minforce"))
|
||||||
|
setMinforce(config.getDouble("magic.cannonbow.minforce"));
|
||||||
|
|
||||||
|
if (config.isInt("magic.cannonbow.fuseticks"))
|
||||||
|
setFuseticks(config.getInt("magic.cannonbow.fuseticks"));
|
||||||
|
|
||||||
|
if (config.isDouble("magic.cannonbow.recoil"))
|
||||||
|
setRecoil(config.getDouble("magic.cannonbow.recoil"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onProjectileLaunch(ProjectileLaunchEvent event){
|
public void onProjectileLaunch(EntityShootBowEvent event){
|
||||||
//ENTITY SANITATION
|
//Entity Sanitation
|
||||||
if(event.getEntity().getType() != EntityType.ARROW)return;
|
if(event.getProjectile().getType() != EntityType.ARROW)return;
|
||||||
|
|
||||||
//ARROW SANITATION
|
//Arrow Sanitation
|
||||||
Arrow arrow = (Arrow) event.getEntity();
|
Arrow arrow = (Arrow) event.getProjectile();
|
||||||
if (!(arrow.isCritical()) || !(arrow.getShooter() instanceof Player))return;
|
if (!(arrow.getShooter() instanceof Player))return;
|
||||||
|
|
||||||
//PLAYER SANITATION
|
//Player Sanitation
|
||||||
Player player = (Player) arrow.getShooter();
|
Player player = (Player) arrow.getShooter();
|
||||||
if (!player.getInventory().contains(Material.TNT))return;
|
if (!player.getInventory().contains(Material.TNT))return;
|
||||||
|
|
||||||
//BOW SANITATION
|
//Bow Sanitation
|
||||||
ItemStack bow;
|
ItemStack bow;
|
||||||
if (!((bow = player.getInventory().getItemInMainHand()).getType() == Material.BOW))return;
|
if (!((bow = player.getInventory().getItemInMainHand()).getType() == Material.BOW))return;
|
||||||
if (!(bow.containsEnchantment(Enchantment.PROTECTION_EXPLOSIONS)))return;
|
if (!(bow.containsEnchantment(Enchantment.PROTECTION_EXPLOSIONS)))return;
|
||||||
if (!(bow.getEnchantmentLevel(Enchantment.PROTECTION_EXPLOSIONS) == 10))return;
|
if (!(bow.getEnchantmentLevel(Enchantment.PROTECTION_EXPLOSIONS) == 10))return;
|
||||||
if (!(bow.getItemMeta().getDisplayName().toUpperCase().contains("CANNON BOW")))return;
|
if (!(bow.getItemMeta().getDisplayName().toUpperCase().contains("CANNON BOW")))return;
|
||||||
|
|
||||||
|
//TNT Spawning
|
||||||
|
Vector playerVector = player.getEyeLocation().getDirection().normalize();
|
||||||
|
if (event.getForce() < getMinforce()){
|
||||||
|
|
||||||
TNTPrimed tnt = (TNTPrimed) arrow.getWorld().spawnEntity(arrow.getLocation(), EntityType.PRIMED_TNT);
|
//Smoke cloud if draw is too low
|
||||||
tnt.setVelocity(player.getEyeLocation().getDirection().normalize().multiply(1.0));
|
arrow.getWorld().spawnParticle(Particle.SMOKE_NORMAL, player.getLocation(), 30);
|
||||||
tnt.setCustomName(launchedTNTName);
|
arrow.getWorld().playSound(player.getLocation(), Sound.BLOCK_LADDER_BREAK, 1.0F, -7);
|
||||||
tnt.setFuseTicks(40);
|
|
||||||
|
}else{
|
||||||
player.setVelocity(player.getEyeLocation().getDirection().normalize().multiply(-1));
|
//Spawn TNT
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 2.0F, 0);
|
TNTPrimed tnt = (TNTPrimed) arrow.getWorld().spawnEntity(arrow.getLocation(), EntityType.PRIMED_TNT);
|
||||||
player.getWorld().spawnParticle(Particle.EXPLOSION_HUGE, player.getLocation(), 2);
|
|
||||||
|
// Change via NMS the source of the TNT by the player
|
||||||
|
EntityLiving nmsPlayer = (EntityLiving) (((CraftLivingEntity) player).getHandle());
|
||||||
|
EntityTNTPrimed nmsTNT = (EntityTNTPrimed) (((CraftTNTPrimed) tnt).getHandle());
|
||||||
|
try {
|
||||||
|
Field sourceField = EntityTNTPrimed.class.getDeclaredField("source");
|
||||||
|
sourceField.setAccessible(true);
|
||||||
|
sourceField.set(nmsTNT, nmsPlayer);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
tnt.setVelocity(playerVector.multiply(getSpeedMultiplier()).multiply(event.getForce()));
|
||||||
|
tnt.setCustomName(launchedTNTName);
|
||||||
|
tnt.setFuseTicks(getFuseticks());
|
||||||
|
|
||||||
|
//Player Recoil
|
||||||
|
player.setVelocity(player.getEyeLocation().getDirection().normalize().multiply(-1).multiply(getRecoil()));
|
||||||
|
player.getWorld().playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1.0F, 0);
|
||||||
|
player.getWorld().spawnParticle(Particle.EXPLOSION_NORMAL, player.getLocation(), 2);
|
||||||
|
|
||||||
|
}
|
||||||
arrow.remove();
|
arrow.remove();
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -68,4 +119,44 @@ public class CannonBowListener implements Listener {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static double getSpeedMultiplier() {
|
||||||
|
return SpeedMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSpeedMultiplier(double speedMultiplier) {
|
||||||
|
if (speedMultiplier > 4) speedMultiplier = 4;
|
||||||
|
if (speedMultiplier < 0) speedMultiplier = 0;
|
||||||
|
SpeedMultiplier = speedMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double getMinforce() {
|
||||||
|
return minforce;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setMinforce(double minforce) {
|
||||||
|
if (minforce > 1) minforce = 1;
|
||||||
|
if (minforce < 0) minforce = 0;
|
||||||
|
CannonBowListener.minforce = minforce;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getFuseticks() {
|
||||||
|
return fuseticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setFuseticks(int fuseticks) {
|
||||||
|
if (fuseticks > 400) fuseticks = 400;
|
||||||
|
if (fuseticks < 0) fuseticks = 0;
|
||||||
|
CannonBowListener.fuseticks = fuseticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double getRecoil() {
|
||||||
|
return recoil;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setRecoil(double recoil) {
|
||||||
|
if (recoil > 20) recoil = 20;
|
||||||
|
if (recoil < 0) recoil = 0;
|
||||||
|
CannonBowListener.recoil = recoil;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package buttondevteam.alipresents.components.magic.tricks;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import buttondevteam.alipresents.architecture.commands.ModCommand;
|
||||||
|
|
||||||
|
public class CannonBowSettings extends ModCommand {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean OnCommand(Player player, String alias, String[] args) {
|
||||||
|
if (args.length > 1){
|
||||||
|
switch(args[0].toLowerCase()){
|
||||||
|
case "speedmultiplier":
|
||||||
|
CannonBowListener.setSpeedMultiplier(NumberUtils.toDouble(args[1], CannonBowListener.getSpeedMultiplier()));
|
||||||
|
break;
|
||||||
|
case "minforce":
|
||||||
|
CannonBowListener.setMinforce(NumberUtils.toDouble(args[1], CannonBowListener.getMinforce()));
|
||||||
|
break;
|
||||||
|
case "fuseticks":
|
||||||
|
CannonBowListener.setFuseticks(NumberUtils.toInt(args[1], CannonBowListener.getFuseticks()));
|
||||||
|
break;
|
||||||
|
case "recoil":
|
||||||
|
CannonBowListener.setRecoil(NumberUtils.toDouble((args[1]), CannonBowListener.getRecoil()));
|
||||||
|
break;
|
||||||
|
case "display":
|
||||||
|
player.sendMessage("Speed Multiplier: "+CannonBowListener.getSpeedMultiplier());
|
||||||
|
player.sendMessage("Minimum Force: "+CannonBowListener.getMinforce());
|
||||||
|
player.sendMessage("Fuseticks: " + CannonBowListener.getFuseticks());
|
||||||
|
player.sendMessage("Recoil: " + CannonBowListener.getRecoil());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
player.sendMessage("That isn't a valid setting!");
|
||||||
|
player.sendMessage("Valid Settings are: ");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String GetCommandPath(){
|
||||||
|
return "magic cannonbow settings";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue