测试版

This commit is contained in:
yaohunya 2024-08-10 15:35:52 +08:00
commit 20e8a71a3e
8 changed files with 247 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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<GiftEffect> 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<GiftEffect> getEffectQueue() {
return effectQueue;
}
public BukkitTask getTask() {
return task;
}
}

View File

@ -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
* */
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}
}

View File

@ -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<String, Function<String, GiftEffect>> giftEffectMap = new HashMap<>();
private static Map<String, GiftQueue> 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<String, GiftQueue> getGiftQueues() {
return giftQueues;
}
public static void registerAll() {
registerGiftEffect("清理背包", ClearInvEffect::new);
}
private static void registerGiftEffect(String id, Function<String, GiftEffect> giftEffectGetter) {
giftEffectMap.put(id, giftEffectGetter);
}
}

View File

@ -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);
}
}
}
}

View File

@ -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;
}
}