diff --git a/pom.xml b/pom.xml index 48ca14e13d6390981fb5898d01f65f166782fb4c..a9e93fa1724cc43d609c2cb731854998a41b4dda 100644 --- a/pom.xml +++ b/pom.xml @@ -5,11 +5,11 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.awang05</groupId> - <artifactId>ballgame</artifactId> + <artifactId>nmoFootball</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> - <name>ballgame</name> + <name>nmoFootball</name> <properties> <java.version>17</java.version> diff --git a/src/main/java/org/awang05/ballGame/BallGame.java b/src/main/java/org/awang05/ballGame/BallGame.java deleted file mode 100644 index ac0f4f2f764ad09a284561c77818a8dcc3d57b59..0000000000000000000000000000000000000000 --- a/src/main/java/org/awang05/ballGame/BallGame.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.awang05.ballGame; - -import org.bukkit.plugin.java.JavaPlugin; - -public final class BallGame extends JavaPlugin { - - @Override - public void onEnable() { - // Plugin startup logic - - } - - @Override - public void onDisable() { - // Plugin shutdown logic - } -} diff --git a/src/main/java/org/awang05/nmoFootball/controller/ChargeController.java b/src/main/java/org/awang05/nmoFootball/controller/ChargeController.java new file mode 100644 index 0000000000000000000000000000000000000000..87c109e419514b3f322fd0eb4cd507c5c04bfe7e --- /dev/null +++ b/src/main/java/org/awang05/nmoFootball/controller/ChargeController.java @@ -0,0 +1,95 @@ +package org.awang05.nmoFootball.controller; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class ChargeController { + private static float min= 0.6F; + private static float max= 3.6F; + private static float dx=0.1F; + private static int pause=10; + + public static void setMin(float min){ + ChargeController.min=min; + } + public static void setMax(float max){ + ChargeController.max=max; + } + public static void setDx(float dx){ + ChargeController.dx=dx; + } + public static void setPause(int pause){ + ChargeController.pause=pause; + } + + private float ad=-dx; + private float x=-1F; + + private final Player player; + private int time=-1,time1=-1; + public ChargeController(Player p,Plugin plugin){ + player=p; + new BukkitRunnable() { //adder + @Override + public void run() { + if(!player.isOnline()){ + this.cancel(); + return; + } + if(x<0) return; + x+=ad; + if(x<0){ + player.setExp(0); + x=-1; + } + else if(x>=1){ + x=1; + player.setExp(1); + } + else { + player.setExp(x); + } + } + }.runTaskTimer(plugin,0,2); + + new BukkitRunnable(){ //timer + @Override + public void run() { + if(time<=0) return; + --time; + if (time==0){ + ad=0; + time1=pause; + } + } + }.runTaskTimer(plugin,0,2); + new BukkitRunnable() { //pause timer + @Override + public void run() { + if(ad!=0) return; + if(time1>0){ + time1-=2; + return; + } + ad=-dx; + } + }.runTaskTimer(plugin,2,2); + } + + public float getSpeed(){ + if(x<=0) return min; + return min+x*(max-min); + } + + public void press(){ + ad=dx; + time=2; + if(x<0) x=0; + } + + public void clear(){ + x=-1; + player.setExp(0); + } +} diff --git a/src/main/java/org/awang05/nmoFootball/events/HitListener.java b/src/main/java/org/awang05/nmoFootball/events/HitListener.java new file mode 100644 index 0000000000000000000000000000000000000000..b6f255f5f74f900a14654cc1626ffee5352f2b07 --- /dev/null +++ b/src/main/java/org/awang05/nmoFootball/events/HitListener.java @@ -0,0 +1,46 @@ +package org.awang05.nmoFootball.events; + +import org.awang05.nmoFootball.nmoFootball; +import org.awang05.nmoFootball.controller.ChargeController; +import org.bukkit.Material; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; + +import java.util.Dictionary; +import java.util.Hashtable; + +public class HitListener implements Listener { + private final Dictionary<Player, ChargeController> ConDic=new Hashtable<>(); + @EventHandler + public void OnJoin(PlayerJoinEvent event){ + Player player=event.getPlayer(); + ConDic.put(player,new ChargeController(player, nmoFootball.getProvidingPlugin(nmoFootball.class))); + } + + @EventHandler + public void OnHit(EntityDamageByEntityEvent event){ + Entity entity= event.getEntity(); + if(!(entity instanceof Chicken)) return; + if(!(event.getDamager() instanceof Player player)) return; + event.setCancelled(true); + double speed=ConDic.get(player).getSpeed(); + double x=player.getEyeLocation().getDirection().getX(); + double z=player.getEyeLocation().getDirection().getZ(); + entity.setVelocity(player.getEyeLocation().getDirection().setY(0.1).multiply(speed/Math.sqrt(x*x+z*z))); //灏嗛浮鍚戦潰鍚戞柟鍚戞墦鍑� + ConDic.get(player).clear(); + } + + @EventHandler + public void OnRight(PlayerInteractEvent event){ + if(!event.getAction().isRightClick())return; + Player player= event.getPlayer(); + if(player.getInventory().getItemInMainHand().getType()!= Material.STICK) return; + ConDic.get(player).press(); + } +} diff --git a/src/main/java/org/awang05/nmoFootball/events/RecycleListener.java b/src/main/java/org/awang05/nmoFootball/events/RecycleListener.java new file mode 100644 index 0000000000000000000000000000000000000000..780f3b2b7248f7ed692459ec7fa9dc09ef4dbc8f --- /dev/null +++ b/src/main/java/org/awang05/nmoFootball/events/RecycleListener.java @@ -0,0 +1,30 @@ +package org.awang05.nmoFootball.events; + +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class RecycleListener implements Listener { + @EventHandler + public void onPlayerShift(PlayerMoveEvent event){ + Player player= event.getPlayer(); + if(player.isSneaking()&&player.getInventory().getItemInOffHand().getType()== Material.AIR){ + List<Entity> entityList=player.getNearbyEntities(1,1,1); + for(Entity e:entityList){ + if (e.getType()== EntityType.CHICKEN){ + ItemStack itemStack=new ItemStack(Material.EGG); + player.getInventory().setItemInOffHand(itemStack); + e.remove(); + return; + } + } + } + } +} diff --git a/src/main/java/org/awang05/nmoFootball/events/ThrowListener.java b/src/main/java/org/awang05/nmoFootball/events/ThrowListener.java new file mode 100644 index 0000000000000000000000000000000000000000..d035ac3c8c53012f2fa10027f26876740c000a04 --- /dev/null +++ b/src/main/java/org/awang05/nmoFootball/events/ThrowListener.java @@ -0,0 +1,46 @@ +package org.awang05.nmoFootball.events; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +public class ThrowListener implements Listener { + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event){ + Player player= event.getPlayer(); + ItemStack itemStack=player.getInventory().getItemInOffHand(); + if(itemStack.getType()== Material.EGG&& !player.isSneaking()){ + event.setCancelled(true); + Location eyeLocation=player.getEyeLocation(); + Vector direction=eyeLocation.getDirection(); + double x=direction.getX(); + double z=direction.getZ(); + final double sqrt = Math.sqrt(x * x + z * z); + double dx=x/ sqrt; + double dz=z/ sqrt; + eyeLocation.add(dx,0,dz); + Chicken entity= (Chicken) player.getWorld().spawnEntity(eyeLocation, EntityType.CHICKEN); + entity.setVelocity(new Vector(0,0.7,0)); + entity.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE,1919810,4)); + entity.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,1919810,114513)); + entity.addPotionEffect(new PotionEffect(PotionEffectType.JUMP,1919810,-114515)); + + int n=itemStack.getAmount(); + if(n>1) { + itemStack.setAmount(n - 1); + player.getInventory().setItemInOffHand(itemStack); + } + else + player.getInventory().setItemInOffHand(null); + } + } +} diff --git a/src/main/java/org/awang05/nmoFootball/nmoFootball.java b/src/main/java/org/awang05/nmoFootball/nmoFootball.java new file mode 100644 index 0000000000000000000000000000000000000000..f84824d5394297c98fb266eb21a4dadfb7fc7332 --- /dev/null +++ b/src/main/java/org/awang05/nmoFootball/nmoFootball.java @@ -0,0 +1,22 @@ +package org.awang05.nmoFootball; + +import org.awang05.nmoFootball.events.*; +import org.bukkit.plugin.java.JavaPlugin; + +public final class nmoFootball extends JavaPlugin { + + @Override + public void onEnable() { + // Plugin startup logic + getServer().getPluginManager().registerEvents(new RecycleListener(),this); + getServer().getPluginManager().registerEvents(new ThrowListener(),this); + getServer().getPluginManager().registerEvents(new HitListener(),this); + + getLogger().info("nmoFootball鍚姩"); + } + + @Override + public void onDisable() { + // Plugin shutdown logic + } +} diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml deleted file mode 100644 index ca6632bd817c01dd7e9cd6c5083f903fa576e89e..0000000000000000000000000000000000000000 --- a/src/main/resources/paper-plugin.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: BallGame -version: '1.0.0-SNAPSHOT' -main: org.awang05.ballGame.BallGame -api-version: '1.20' diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000000000000000000000000000000000000..8c420beaf84ca2de7340e75cacc20807f764caf6 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: nmoFootball +version: '1.0.0-SNAPSHOT' +main: org.awang05.nmoFootball.nmoFootball +api-version: '1.20'