From 20e8a71a3e1ba8c3e1142db248c584873809a4d6 Mon Sep 17 00:00:00 2001 From: yaohunya <31456652@qq.com> Date: Sat, 10 Aug 2024 15:35:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enderdragonWars/effect/GiftEffect.java | 21 ++++++++ .../enderdragonWars/effect/GiftQueue.java | 54 +++++++++++++++++++ .../effectevent/ClearInvEffect.java | 20 +++++++ .../com/yaohun/enderdragonWars/game/Game.java | 20 +++++++ .../liveevent/GiftEventHandler.java | 13 +++++ .../manage/GiftEffectManager.java | 50 +++++++++++++++++ .../yaohun/enderdragonWars/util/GiftUtil.java | 38 +++++++++++++ .../enderdragonWars/util/RandomUtil.java | 31 +++++++++++ 8 files changed, 247 insertions(+) create mode 100644 src/main/java/com/yaohun/enderdragonWars/effect/GiftEffect.java create mode 100644 src/main/java/com/yaohun/enderdragonWars/effect/GiftQueue.java create mode 100644 src/main/java/com/yaohun/enderdragonWars/effectevent/ClearInvEffect.java create mode 100644 src/main/java/com/yaohun/enderdragonWars/game/Game.java create mode 100644 src/main/java/com/yaohun/enderdragonWars/liveevent/GiftEventHandler.java create mode 100644 src/main/java/com/yaohun/enderdragonWars/manage/GiftEffectManager.java create mode 100644 src/main/java/com/yaohun/enderdragonWars/util/GiftUtil.java create mode 100644 src/main/java/com/yaohun/enderdragonWars/util/RandomUtil.java diff --git a/src/main/java/com/yaohun/enderdragonWars/effect/GiftEffect.java b/src/main/java/com/yaohun/enderdragonWars/effect/GiftEffect.java new file mode 100644 index 0000000..f9d161d --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/effect/GiftEffect.java @@ -0,0 +1,21 @@ +package com.yaohun.enderdragonWars.effect; + +import com.yaohun.enderdragonWars.game.Game; + +public abstract class GiftEffect { + private String audience; + + public GiftEffect(String audience) { + this.audience = audience; + } + + public String getAudience() { + return audience; + } + + public abstract void apply(Game game); + + public int getQueueTime() { + return 20; + } +} diff --git a/src/main/java/com/yaohun/enderdragonWars/effect/GiftQueue.java b/src/main/java/com/yaohun/enderdragonWars/effect/GiftQueue.java new file mode 100644 index 0000000..e4bafa3 --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/effect/GiftQueue.java @@ -0,0 +1,54 @@ +package com.yaohun.enderdragonWars.effect; + +import com.yaohun.enderdragonWars.Main; +import com.yaohun.enderdragonWars.game.Game; +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitTask; + +import java.util.LinkedList; +import java.util.Queue; + +public class GiftQueue { + + private Queue effectQueue = new LinkedList<>(); + + private BukkitTask task; + + public GiftQueue(int waitTime) { + task = Bukkit.getScheduler().runTaskTimer(Main.plugin, new Runnable() { + private int timer = 0; + private boolean running = false; + @Override + public void run() { + timer++; + if (!running) { + timer = waitTime; + running = true; + } + if (timer >= waitTime) { + timer = 0; + if (effectQueue.isEmpty()) { + running = false; + return; + } + Game game = Main.game; + GiftEffect effect = effectQueue.poll(); + effect.apply(game); + } + } + }, 0L, 1L); + } + + public void addEffect(GiftEffect effect) { + effectQueue.add(effect); + } + + public Queue getEffectQueue() { + return effectQueue; + } + + public BukkitTask getTask() { + return task; + } + +} diff --git a/src/main/java/com/yaohun/enderdragonWars/effectevent/ClearInvEffect.java b/src/main/java/com/yaohun/enderdragonWars/effectevent/ClearInvEffect.java new file mode 100644 index 0000000..75d408f --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/effectevent/ClearInvEffect.java @@ -0,0 +1,20 @@ +package com.yaohun.enderdragonWars.effectevent; + +import com.yaohun.enderdragonWars.effect.GiftEffect; +import com.yaohun.enderdragonWars.game.Game; + +public class ClearInvEffect extends GiftEffect { + + public ClearInvEffect(String audience) { + super(audience); + } + + @Override + public void apply(Game game) { + /* + * 获取玩家背包中所有物品然后从头上像喷泉一样到处散落 + * 给这些掉落的物品添加一个nbt antipick: true + * */ + + } +} diff --git a/src/main/java/com/yaohun/enderdragonWars/game/Game.java b/src/main/java/com/yaohun/enderdragonWars/game/Game.java new file mode 100644 index 0000000..dcab460 --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/game/Game.java @@ -0,0 +1,20 @@ +package com.yaohun.enderdragonWars.game; + +import org.bukkit.World; +import org.bukkit.entity.Player; + +public class Game { + + private Player player; + private World world; + private boolean startd; + public Game(){ + + } + + public void startGame(Player player){ + if(startd){return;} + this.player = player; + this.startd = true; + } +} diff --git a/src/main/java/com/yaohun/enderdragonWars/liveevent/GiftEventHandler.java b/src/main/java/com/yaohun/enderdragonWars/liveevent/GiftEventHandler.java new file mode 100644 index 0000000..1f6ca52 --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/liveevent/GiftEventHandler.java @@ -0,0 +1,13 @@ +package com.yaohun.enderdragonWars.liveevent; + +import com.yaohun.enderdragonWars.manage.GiftEffectManager; +import org.bukkit.entity.Player; + +public class GiftEventHandler { + + public static void SendHandLer(Player zhubo, String hideName, String eventName){ + if(eventName.equalsIgnoreCase("清空背包")){ + GiftEffectManager.addGiftEffect(hideName,eventName); + } + } +} diff --git a/src/main/java/com/yaohun/enderdragonWars/manage/GiftEffectManager.java b/src/main/java/com/yaohun/enderdragonWars/manage/GiftEffectManager.java new file mode 100644 index 0000000..434bbeb --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/manage/GiftEffectManager.java @@ -0,0 +1,50 @@ +package com.yaohun.enderdragonWars.manage; + +import com.yaohun.enderdragonWars.effectevent.ClearInvEffect; +import com.yaohun.enderdragonWars.effect.GiftEffect; +import com.yaohun.enderdragonWars.effect.GiftQueue; +import org.bukkit.scheduler.BukkitTask; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public class GiftEffectManager { + + private static Map> giftEffectMap = new HashMap<>(); + + private static Map giftQueues = new HashMap<>(); + + public static void addGiftEffect(String audience, String effectId) { + GiftEffect giftEffect = giftEffectMap.get(effectId).apply(audience); + GiftQueue giftQueue = giftQueues.getOrDefault(effectId, new GiftQueue(giftEffect.getQueueTime())); + giftQueue.addEffect(giftEffect); + giftQueues.put(effectId, giftQueue); + } + + public static void stopQueue() { + giftQueues.values().forEach(giftQueue -> { + BukkitTask task = giftQueue.getTask(); + if (task != null && !task.isCancelled()) { + task.cancel(); + } + }); + } + + public static GiftQueue getGiftQueue(String effectId) { + return giftQueues.get(effectId); + } + + public static Map getGiftQueues() { + return giftQueues; + } + + public static void registerAll() { + registerGiftEffect("清理背包", ClearInvEffect::new); + } + + private static void registerGiftEffect(String id, Function giftEffectGetter) { + giftEffectMap.put(id, giftEffectGetter); + } + +} diff --git a/src/main/java/com/yaohun/enderdragonWars/util/GiftUtil.java b/src/main/java/com/yaohun/enderdragonWars/util/GiftUtil.java new file mode 100644 index 0000000..b3a3919 --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/util/GiftUtil.java @@ -0,0 +1,38 @@ +package com.yaohun.enderdragonWars.util; + +import com.yaohun.enderdragonWars.Main; +import com.yaohun.enderdragonWars.data.GiftData; +import com.yaohun.enderdragonWars.liveevent.GiftEventHandler; +import com.yaohun.enderdragonWars.manage.GameManage; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class GiftUtil { + + // 执行礼物效果 + public static void executeGiftEffect(Player zhubo,String userName,String giftName,int giftAmount){ + GameManage gameManage = Main.gameManage; + if(gameManage.getGiftData(giftName) == null){ + zhubo.sendMessage("§c[系统]§a礼物 "+giftName+" 的未设置任何礼物效果."); + return; + } + // 获取礼物数据 + GiftData giftData = gameManage.getGiftData(giftName); + // 获取隐藏名字后的观众名 + String hide_name = GameUtil.HideName(userName); + // 获取效果名 + String eventName = giftData.getEvent(); + if(giftAmount <= 1){ + giftData.OutPlaySoundsEvent(); + GiftEventHandler.SendHandLer(zhubo, userName, eventName); + }else{ + long dadey = 5L; + for (int i = 0; i < giftAmount; i++) { + Bukkit.getScheduler().runTaskLater(Main.plugin, () -> { + giftData.OutPlaySoundsEvent(); + GiftEventHandler.SendHandLer(zhubo, userName, eventName); + }, (long) i * dadey); + } + } + } +} diff --git a/src/main/java/com/yaohun/enderdragonWars/util/RandomUtil.java b/src/main/java/com/yaohun/enderdragonWars/util/RandomUtil.java new file mode 100644 index 0000000..3e189db --- /dev/null +++ b/src/main/java/com/yaohun/enderdragonWars/util/RandomUtil.java @@ -0,0 +1,31 @@ +package com.yaohun.enderdragonWars.util; + +import org.bukkit.Location; +import org.bukkit.World; + +import javax.swing.plaf.synth.Region; +import java.awt.*; +import java.util.Random; + +public class RandomUtil { + + public static boolean random(double d) { + return d >= new Random().nextFloat(); + } + + public static int getRandomInt(int min, int max) { + if (min == max) { + return max; + } + Random r = new Random(); + int i = min < max ? min : max; + int a = min < max ? max : min; + return r.nextInt(a - i + 1) + i; + } + + public static double getRandomDouble(double min, double max, int scl) { + int pow = (int) Math.pow(10, scl); + return Math.floor((Math.random() * (max - min) + min) * pow) / pow; + } + +}