From a6e83e00781f602d93f7a817ef708df29984e3a6 Mon Sep 17 00:00:00 2001
From: YuTian <2953516620@qq.com>
Date: Sun, 18 Aug 2024 23:57:28 +0800
Subject: [PATCH] 1.0.4
---
pom.xml | 2 +-
.../effect/types/ClearInventoryEffect.java | 2 +-
.../effect/types/FiveLightningEffect.java | 5 +
.../effect/types/RandomBoxEffect.java | 71 +------
.../effect/types/WorldDestroyEffect.java | 201 ++++++++++++++++++
.../enderdragonwar/listener/LiveListener.java | 14 ++
.../listener/PlayerListener.java | 1 -
src/main/resources/plugin.yml | 2 +-
8 files changed, 234 insertions(+), 64 deletions(-)
diff --git a/pom.xml b/pom.xml
index a44e3c9..c776229 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,7 +75,7 @@
com.io.yutian
PixelLiveAPI
- 1.0.4
+ 1.0.6
provided
diff --git a/src/main/java/com/yaohun/enderdragonwar/effect/types/ClearInventoryEffect.java b/src/main/java/com/yaohun/enderdragonwar/effect/types/ClearInventoryEffect.java
index dd9c443..6d624cc 100644
--- a/src/main/java/com/yaohun/enderdragonwar/effect/types/ClearInventoryEffect.java
+++ b/src/main/java/com/yaohun/enderdragonwar/effect/types/ClearInventoryEffect.java
@@ -69,7 +69,7 @@ public class ClearInventoryEffect extends GameGiftEffect {
@Override
public int getQueueTime() {
- return 60;
+ return 120;
}
private List getUseableItemCount(Player player) {
diff --git a/src/main/java/com/yaohun/enderdragonwar/effect/types/FiveLightningEffect.java b/src/main/java/com/yaohun/enderdragonwar/effect/types/FiveLightningEffect.java
index 3f5d775..f770109 100644
--- a/src/main/java/com/yaohun/enderdragonwar/effect/types/FiveLightningEffect.java
+++ b/src/main/java/com/yaohun/enderdragonwar/effect/types/FiveLightningEffect.java
@@ -30,4 +30,9 @@ public class FiveLightningEffect extends GameGiftEffect {
}.runTaskTimer(EnderDragonWar.inst(), 0, 10L);
}
+ @Override
+ public int getQueueTime() {
+ return 20;
+ }
+
}
diff --git a/src/main/java/com/yaohun/enderdragonwar/effect/types/RandomBoxEffect.java b/src/main/java/com/yaohun/enderdragonwar/effect/types/RandomBoxEffect.java
index 2b31f55..dd1e62a 100644
--- a/src/main/java/com/yaohun/enderdragonwar/effect/types/RandomBoxEffect.java
+++ b/src/main/java/com/yaohun/enderdragonwar/effect/types/RandomBoxEffect.java
@@ -1,6 +1,8 @@
package com.yaohun.enderdragonwar.effect.types;
import com.io.yutian.pixelliveapi.api.PixelLiveAPI;
+import com.io.yutian.pixelliveapi.api.data.RandomBoxEntry;
+import com.io.yutian.pixelliveapi.api.util.RandomBoxHelper;
import com.yaohun.enderdragonwar.EnderDragonWar;
import com.yaohun.enderdragonwar.effect.GameGiftEffect;
import com.yaohun.enderdragonwar.game.Game;
@@ -10,11 +12,6 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-
public class RandomBoxEffect extends GameGiftEffect {
public RandomBoxEffect(String audience) {
@@ -24,23 +21,21 @@ public class RandomBoxEffect extends GameGiftEffect {
@Override
public void apply(Game game) {
Player player = game.getPlayer();
- List list = getEffects();
- Collections.shuffle(list);
- Random random = new Random();
- String eventName = list.get(random.nextInt(list.size()));
+ RandomBoxHelper randomBoxHelper = PixelLiveAPI.getRandomBoxManager().getRandomBoxHelper();
BukkitTask task = new BukkitRunnable() {
private int i = 0;
@Override
public void run() {
+ RandomBoxEntry randomBoxEntry = randomBoxHelper.getRandomEffect();
if (i >= 12) {
- player.sendTitle("§6随机盲盒", "§9整蛊效果: §e" + eventName);
+ player.sendTitle("§6随机盲盒", "§9整蛊效果: §e" + randomBoxEntry.getShowName());
player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1);
- PixelLiveAPI.getEffectQueueManager().addEffect(getAudience(), eventName, 1);
- Bukkit.broadcastMessage("§c[消息]§a随机盲盒抽中了 §e" + eventName);
+ PixelLiveAPI.getEffectQueueManager().addEffect(getAudience(), randomBoxEntry.getEffect(), 1);
+ Bukkit.broadcastMessage("§c[消息]§a随机盲盒抽中了 §e" + randomBoxEntry.getShowName());
cancel();
return;
}
- player.sendTitle("§6随机盲盒", "§9整蛊效果: §e" + list.get(random.nextInt(list.size())));
+ player.sendTitle("§6随机盲盒", "§9整蛊效果: §e" + randomBoxHelper.getRandomEffect().getShowName());
player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1);
i++;
}
@@ -48,53 +43,9 @@ public class RandomBoxEffect extends GameGiftEffect {
EnderDragonWar.getGame().addTasks(task);
}
- private List getEffects() {
- List stringList = new ArrayList<>();
- stringList.add("清理背包");
- stringList.add("清理背包");
- stringList.add("火山喷发");
- stringList.add("幸运方块");
- stringList.add("幸运方块");
- stringList.add("幸运方块");
- stringList.add("黑洞");
- stringList.add("黑洞");
- stringList.add("五雷轰顶");
- stringList.add("五雷轰顶");
- stringList.add("五雷轰顶");
- stringList.add("五雷轰顶");
- stringList.add("五雷轰顶");
- stringList.add("装备清空");
- stringList.add("装备清空");
- stringList.add("岩浆泡澡");
- stringList.add("岩浆泡澡");
- stringList.add("岩浆泡澡");
- stringList.add("钢铁保安");
- stringList.add("钢铁保安");
- stringList.add("钢铁保安");
- stringList.add("钢铁保安");
- stringList.add("6倍血量");
- stringList.add("6倍血量");
- stringList.add("原地复活");
- stringList.add("原地复活");
- stringList.add("原地复活");
- stringList.add("原地复活");
- stringList.add("变大");
- stringList.add("变小");
- stringList.add("变大");
- stringList.add("变小");
- stringList.add("变大");
- stringList.add("变小");
- stringList.add("安全庇护所");
- stringList.add("怪物军团");
- stringList.add("安全庇护所");
- stringList.add("怪物军团");
- stringList.add("安全庇护所");
- stringList.add("怪物军团");
- stringList.add("安全庇护所");
- stringList.add("怪物军团");
- stringList.add("螺旋升天");
- stringList.add("魔豆天梯");
- return stringList;
+ @Override
+ public int getQueueTime() {
+ return 12 * 5;
}
}
diff --git a/src/main/java/com/yaohun/enderdragonwar/effect/types/WorldDestroyEffect.java b/src/main/java/com/yaohun/enderdragonwar/effect/types/WorldDestroyEffect.java
index 5d3cbe0..c15f693 100644
--- a/src/main/java/com/yaohun/enderdragonwar/effect/types/WorldDestroyEffect.java
+++ b/src/main/java/com/yaohun/enderdragonwar/effect/types/WorldDestroyEffect.java
@@ -1,17 +1,218 @@
package com.yaohun.enderdragonwar.effect.types;
+import com.yaohun.enderdragonwar.EnderDragonWar;
import com.yaohun.enderdragonwar.effect.GameGiftEffect;
import com.yaohun.enderdragonwar.game.Game;
+import com.yaohun.enderdragonwar.util.EntityUtil;
+import net.kyori.adventure.text.Component;
+import org.bukkit.*;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.boss.BarColor;
+import org.bukkit.boss.BarStyle;
+import org.bukkit.boss.BossBar;
+import org.bukkit.entity.*;
+import org.bukkit.event.entity.CreatureSpawnEvent;
+import org.bukkit.inventory.EquipmentSlot;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ColorableArmorMeta;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
public class WorldDestroyEffect extends GameGiftEffect {
+ private static final ItemStack ITEM_1;
+ private static final ItemStack ITEM_2;
+ private static final ItemStack ITEM_3;
+ private static final ItemStack ITEM_4;
+
+ private static final ItemStack ITEM_5;
+ private static final ItemStack ITEM_6;
+ private static final ItemStack ITEM_7;
+
+ static {
+ ITEM_1 = new ItemStack(Material.TNT);
+ ITEM_2 = new ItemStack(Material.LEATHER_CHESTPLATE);
+ ITEM_3 = new ItemStack(Material.LEATHER_LEGGINGS);
+ ITEM_4 = new ItemStack(Material.LEATHER_BOOTS);
+ ITEM_5 = new ItemStack(Material.LEATHER_CHESTPLATE);
+ ITEM_6 = new ItemStack(Material.LEATHER_LEGGINGS);
+ ITEM_7 = new ItemStack(Material.LEATHER_BOOTS);
+ Color color1 = Color.fromRGB(214, 41, 0);
+ Color color2 = Color.fromRGB(255, 133, 102);
+ ItemMeta itemMeta2 = ITEM_2.getItemMeta();
+ ColorableArmorMeta colorableArmorMeta2 = (ColorableArmorMeta) itemMeta2;
+ colorableArmorMeta2.setColor(color1);
+ ITEM_2.setItemMeta(colorableArmorMeta2);
+ ItemMeta itemMeta3 = ITEM_3.getItemMeta();
+ ColorableArmorMeta colorableArmorMeta3 = (ColorableArmorMeta) itemMeta3;
+ colorableArmorMeta3.setColor(color1);
+ ITEM_3.setItemMeta(colorableArmorMeta3);
+ ItemMeta itemMeta4 = ITEM_4.getItemMeta();
+ ColorableArmorMeta colorableArmorMeta4 = (ColorableArmorMeta) itemMeta4;
+ colorableArmorMeta4.setColor(color1);
+ ITEM_4.setItemMeta(colorableArmorMeta4);
+ ItemMeta itemMeta5 = ITEM_5.getItemMeta();
+ ColorableArmorMeta colorableArmorMeta5 = (ColorableArmorMeta) itemMeta5;
+ colorableArmorMeta5.setColor(color2);
+ ITEM_5.setItemMeta(colorableArmorMeta5);
+ ItemMeta itemMeta6 = ITEM_6.getItemMeta();
+ ColorableArmorMeta colorableArmorMeta6 = (ColorableArmorMeta) itemMeta6;
+ colorableArmorMeta6.setColor(color2);
+ ITEM_6.setItemMeta(colorableArmorMeta6);
+ ItemMeta itemMeta7 = ITEM_7.getItemMeta();
+ ColorableArmorMeta colorableArmorMeta7 = (ColorableArmorMeta) itemMeta7;
+ colorableArmorMeta7.setColor(color2);
+ ITEM_7.setItemMeta(colorableArmorMeta7);
+
+ }
+
+ protected boolean stop = false;
+ private List fallingBlocks = new ArrayList<>();
+ private BossBar bossBar;
+
public WorldDestroyEffect(String audience) {
super(audience);
}
@Override
public void apply(Game game) {
+ bossBar = Bukkit.createBossBar("§4§l世界毁灭", BarColor.RED, BarStyle.SOLID);
+ World world = game.getWorld();
+ Player player = game.getPlayer();
+ bossBar.addPlayer(player);
+ ArmorStand armorStand = (ArmorStand) world.spawnEntity(player.getLocation(), EntityType.ARMOR_STAND, CreatureSpawnEvent.SpawnReason.CUSTOM, (entity) -> {
+ ArmorStand armorStand1 = (ArmorStand) entity;
+ armorStand1.setArms(true);
+ armorStand1.setBasePlate(false);
+ armorStand1.customName(Component.text("§4§l世界毁灭"));
+ armorStand1.setCustomNameVisible(true);
+ armorStand1.setDisabledSlots(EquipmentSlot.values());
+ armorStand1.setInvulnerable(true);
+ armorStand1.setGravity(false);
+ armorStand1.getEquipment().setItemInMainHand(ITEM_1);
+ armorStand1.getEquipment().setItemInOffHand(ITEM_1);
+ armorStand1.getEquipment().setItem(EquipmentSlot.HEAD, ITEM_1);
+ armorStand1.getEquipment().setItem(EquipmentSlot.CHEST, ITEM_2);
+ armorStand1.getEquipment().setItem(EquipmentSlot.LEGS, ITEM_3);
+ armorStand1.getEquipment().setItem(EquipmentSlot.FEET, ITEM_4);
+ armorStand1.getAttribute(Attribute.GENERIC_SCALE).setBaseValue(6.0);
+ });
+ new BukkitRunnable() {
+ private int count = 0;
+ @Override
+ public void run() {
+ Location loc = armorStand.getLocation().clone().add(0, 8, 0);
+ if (count > 35) {
+ armorStand.remove();
+ for (int i = 0; i < 5; i++) {
+ armorStand.getWorld().createExplosion(armorStand.getLocation(), 5f, true, true);
+ }
+ Random random = new Random();
+ for (int i = 0; i < 800; i++) {
+ FallingBlock fallingBlock = (FallingBlock) world.spawnEntity(loc, EntityType.FALLING_BLOCK, CreatureSpawnEvent.SpawnReason.CUSTOM, (fallingBlockEntity) -> {
+ FallingBlock fallingBlock1 = (FallingBlock) fallingBlockEntity;
+ fallingBlock1.setBlockData(Bukkit.createBlockData(Material.MAGMA_BLOCK));
+ fallingBlock1.setDropItem(false);
+ fallingBlock1.setCancelDrop(true);
+ });
+ fallingBlocks.add(fallingBlock);
+ EntityUtil.shoot(fallingBlock, (Math.random() * 1.8D - 1.5D) * 0.1f, 0.2f + Math.random() * 0.1f, (Math.random() * 1.8D - 1.5D) * 0.1f, 3f + random.nextFloat() * 1.5f, 0f);
+ player.getWorld().playSound(fallingBlock.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1f, 1f);
+ }
+ bossBar.removeAll();
+ stop = true;
+ cancel();
+ return;
+ }
+ Random random = new Random();
+ for (int i = 0; i < 80; i++) {
+ FallingBlock fallingBlock = (FallingBlock) world.spawnEntity(loc, EntityType.FALLING_BLOCK, CreatureSpawnEvent.SpawnReason.CUSTOM, (fallingBlockEntity) -> {
+ FallingBlock fallingBlock1 = (FallingBlock) fallingBlockEntity;
+ fallingBlock1.setBlockData(Bukkit.createBlockData(Material.MAGMA_BLOCK));
+ fallingBlock1.setDropItem(false);
+ fallingBlock1.setCancelDrop(true);
+ fallingBlock1.setFireTicks(200);
+ });
+ fallingBlocks.add(fallingBlock);
+ EntityUtil.shoot(fallingBlock, (Math.random() * 2.5D - 1.5D) * 0.1f, 0.4f + Math.random() * 0.15f, (Math.random() * 2.5D - 1.5D) * 0.1f, 3f + random.nextFloat() * 1.5f, 0f);
+ player.getWorld().playSound(fallingBlock.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1f, 1f);
+ }
+ for (int i = 0; i < 15; i++) {
+ TNTPrimed tntPrimed = (TNTPrimed) world.spawnEntity(loc, EntityType.TNT, CreatureSpawnEvent.SpawnReason.CUSTOM, (tntEntity) -> {
+ TNTPrimed tntPrimed1 = (TNTPrimed) tntEntity;
+ tntPrimed1.setFuseTicks(80);
+ tntPrimed1.setYield(4);
+ });
+ EntityUtil.shoot(tntPrimed, (Math.random() * 2D - 1.5D) * 0.08f, 0.1f + Math.random() * 0.025f, (Math.random() * 2D - 1.5D) * 0.08f, 3f + random.nextFloat() * 1.5f, 0f);
+ }
+ count++;
+ }
+ }.runTaskTimer(EnderDragonWar.inst(), 0L, 15L);
+ new BukkitRunnable() {
+ private int count = 0;
+
+ @Override
+ public void run() {
+ if (stop) {
+ cancel();
+ return;
+ }
+ boolean flag = count % 2 == 0;
+ armorStand.customName(Component.text(flag ? "§4§l世界毁灭" : "§c§l世界毁灭"));
+ armorStand.getEquipment().setItem(EquipmentSlot.CHEST, flag ? ITEM_2 : ITEM_5);
+ armorStand.getEquipment().setItem(EquipmentSlot.LEGS, flag ? ITEM_3 : ITEM_6);
+ armorStand.getEquipment().setItem(EquipmentSlot.FEET, flag ? ITEM_4 : ITEM_7);
+ bossBar.setTitle(flag ? "§4§l世界毁灭" : "§c§l世界毁灭");
+ count++;
+ }
+ }.runTaskTimer(EnderDragonWar.inst(), 0L, 5L);
+ new BukkitRunnable() {
+ private int count = 0;
+
+ @Override
+ public void run() {
+ if (stop) {
+ cancel();
+ return;
+ }
+ float f = count * 25F;
+ armorStand.setRotation(f, 0);
+ Location location1 = armorStand.getLocation().clone().add(0, 0.35, 0);
+ armorStand.getWorld().spawnParticle(Particle.LAVA, location1, 8, 0.2, 0.6, 0.2, 0.05);
+ armorStand.getWorld().spawnParticle(Particle.FLAME, location1, 8, 0.2, 1, 0.2, 0.01);
+ count++;
+ }
+ }.runTaskTimer(EnderDragonWar.inst(), 0L, 2L);
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ if (fallingBlocks.isEmpty()) {
+ cancel();
+ return;
+ }
+ Iterator iterator = fallingBlocks.iterator();
+ while (iterator.hasNext()) {
+ FallingBlock fallingBlock = iterator.next();
+ Location location = fallingBlock.getLocation();
+ if (fallingBlock.isOnGround() || fallingBlock.isDead()) {
+ location.getWorld().createExplosion(location, 5f, true, true);
+ armorStand.getWorld().spawnParticle(Particle.LAVA, fallingBlock.getLocation(), 50, 1.5, 1.5, 1.5, 0.05);
+ armorStand.getWorld().spawnParticle(Particle.FLAME, fallingBlock.getLocation(), 50, 1.5, 1.5, 1.5, 0.01);
+ location.add(0, 1, 0).getBlock().setType(Material.LAVA);
+ location.getWorld().spawnEntity(location.add(0, 1, 0), EntityType.MAGMA_CUBE, CreatureSpawnEvent.SpawnReason.CUSTOM, (cubeEntity) -> ((MagmaCube) cubeEntity).setSize(10));
+ fallingBlock.remove();
+ iterator.remove();
+ return;
+ }
+ }
+ }
+ }.runTaskTimer(EnderDragonWar.inst(), 0L, 1L);
}
}
diff --git a/src/main/java/com/yaohun/enderdragonwar/listener/LiveListener.java b/src/main/java/com/yaohun/enderdragonwar/listener/LiveListener.java
index 9c27ef4..be7d029 100644
--- a/src/main/java/com/yaohun/enderdragonwar/listener/LiveListener.java
+++ b/src/main/java/com/yaohun/enderdragonwar/listener/LiveListener.java
@@ -6,12 +6,14 @@ import com.io.yutian.pixelliveapi.api.data.Audience;
import com.io.yutian.pixelliveapi.api.data.Gift;
import com.io.yutian.pixelliveapi.api.effect.GiftEffectData;
import com.io.yutian.pixelliveapi.api.event.AnchorInitializedEvent;
+import com.io.yutian.pixelliveapi.api.event.LiveEnterRoomEvent;
import com.io.yutian.pixelliveapi.api.event.LiveGiftEvent;
import com.io.yutian.pixelliveapi.api.event.LiveLikeEvent;
import com.yaohun.enderdragonwar.EnderDragonWar;
import com.yaohun.enderdragonwar.game.GameSetting;
import com.yaohun.enderdragonwar.util.GameUtil;
import com.yaohun.enderdragonwar.util.RandomUtil;
+import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -25,6 +27,17 @@ public class LiveListener implements Listener {
anchor.getClient().connect();
}
+ @EventHandler
+ public void onLiveEnter(LiveEnterRoomEvent event) {
+ Player zhubo = event.getPlayer();
+ Audience audience = event.getAudience();
+ String userName = "" + RandomUtil.getRandomInt(999, 10000);
+ if (audience.getNickName() != null) {
+ userName = audience.getNickName();
+ }
+ zhubo.sendActionBar(Component.text("§6" + GameUtil.hideName(userName) + "来了"));
+ }
+
@EventHandler
public void onLiveLike(LiveLikeEvent event) {
Player zhubo = event.getPlayer();
@@ -68,6 +81,7 @@ public class LiveListener implements Listener {
for (Player player : Bukkit.getOnlinePlayers()) {
player.sendMessage("§a礼物: §e" + hideUserName + " §d送来了 §e" + giftName + "x" + giftAmount);
}
+ EnderDragonWar.inst().getLogger().info("§a礼物: §e" + hideUserName + " §d送来了 §e" + giftName + "x" + giftAmount);
}
}
diff --git a/src/main/java/com/yaohun/enderdragonwar/listener/PlayerListener.java b/src/main/java/com/yaohun/enderdragonwar/listener/PlayerListener.java
index 6131e9a..f87f45b 100644
--- a/src/main/java/com/yaohun/enderdragonwar/listener/PlayerListener.java
+++ b/src/main/java/com/yaohun/enderdragonwar/listener/PlayerListener.java
@@ -8,7 +8,6 @@ import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 0c4e96f..43ab8ca 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,5 +1,5 @@
name: EnderDragonWar
-version: 1.0.2
+version: 1.0.4
api-version: 1.20
main: com.yaohun.enderdragonwar.EnderDragonWar
depend: [PixelLiveAPI]