diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5007822..81f6923 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,7 +62,7 @@ jobs: run: wget -O ./libs/ProtocolLib.jar "https://github.com/dmulloy2/ProtocolLib/releases/download/4.8.0/ProtocolLib.jar" - name: Build with Gradle - run: ./gradlew build + run: ./gradlew shadowJar - name: Upload a Build Artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 diff --git a/src/main/java/be4rjp/sclat/api/IOwnable.java b/src/main/java/be4rjp/sclat/api/IOwnable.java new file mode 100644 index 0000000..827d3a1 --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/IOwnable.java @@ -0,0 +1,7 @@ +package be4rjp.sclat.api; + +import org.bukkit.entity.Player; + +public interface IOwnable { + Player getOwner(); +} diff --git a/src/main/java/be4rjp/sclat/data/KasaData.java b/src/main/java/be4rjp/sclat/data/KasaData.java index f46a266..ff846c6 100644 --- a/src/main/java/be4rjp/sclat/data/KasaData.java +++ b/src/main/java/be4rjp/sclat/data/KasaData.java @@ -1,6 +1,7 @@ package be4rjp.sclat.data; +import be4rjp.sclat.api.IOwnable; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Player; @@ -11,7 +12,7 @@ * * @author Be4rJP */ -public class KasaData { +public class KasaData implements IOwnable { private List list = new ArrayList<>(); private Player player; @@ -40,4 +41,9 @@ public void setDamage(double damage) { public void setArmorStandList(List list) { this.list = list; } + + @Override + public Player getOwner() { + return player; + } } diff --git a/src/main/java/be4rjp/sclat/data/SplashShieldData.java b/src/main/java/be4rjp/sclat/data/SplashShieldData.java index 6ad85e3..0cc1a2c 100644 --- a/src/main/java/be4rjp/sclat/data/SplashShieldData.java +++ b/src/main/java/be4rjp/sclat/data/SplashShieldData.java @@ -1,6 +1,7 @@ package be4rjp.sclat.data; +import be4rjp.sclat.api.IOwnable; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -12,7 +13,7 @@ * * @author Be4rJP */ -public class SplashShieldData { +public class SplashShieldData implements IOwnable { private BukkitRunnable task; private List list = new ArrayList<>(); private Player player; @@ -59,4 +60,8 @@ public void setIsDeploy(boolean isdep) { this.IsDeploy = isdep; } + @Override + public Player getOwner() { + return player; + } } diff --git a/src/main/java/be4rjp/sclat/gui/ClickListener.java b/src/main/java/be4rjp/sclat/gui/ClickListener.java index 67418c7..3e932c0 100644 --- a/src/main/java/be4rjp/sclat/gui/ClickListener.java +++ b/src/main/java/be4rjp/sclat/gui/ClickListener.java @@ -22,9 +22,6 @@ import be4rjp.sclat.manager.SuperJumpMgr; import be4rjp.sclat.manager.WeaponClassMgr; import be4rjp.sclat.tutorial.Tutorial; -import be4rjp.sclat.weapon.Brush; -import be4rjp.sclat.weapon.Bucket; -import be4rjp.sclat.weapon.Buckler; import be4rjp.sclat.weapon.Charger; import be4rjp.sclat.weapon.Decoy; import be4rjp.sclat.weapon.Funnel; @@ -37,6 +34,9 @@ import be4rjp.sclat.weapon.Shooter; import be4rjp.sclat.weapon.Spinner; import be4rjp.sclat.weapon.Swapper; +import be4rjp.sclat.weapon.brush.Brush; +import be4rjp.sclat.weapon.bucket.Bucket; +import be4rjp.sclat.weapon.buckler.Buckler; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; diff --git a/src/main/java/be4rjp/sclat/manager/FakePlayer.java b/src/main/java/be4rjp/sclat/manager/FakePlayer.java new file mode 100644 index 0000000..de27d02 --- /dev/null +++ b/src/main/java/be4rjp/sclat/manager/FakePlayer.java @@ -0,0 +1,18 @@ +package be4rjp.sclat.manager; + +import com.mojang.authlib.GameProfile; +import net.minecraft.server.v1_15_R1.EntityPlayer; +import net.minecraft.server.v1_15_R1.MinecraftServer; +import net.minecraft.server.v1_15_R1.PlayerInteractManager; +import net.minecraft.server.v1_15_R1.WorldServer; + +public class FakePlayer extends EntityPlayer { + public FakePlayer(MinecraftServer minecraftserver, WorldServer worldserver, GameProfile gameprofile, + PlayerInteractManager playerinteractmanager) { + super(minecraftserver, worldserver, gameprofile, playerinteractmanager); + } + + public void setBQ(byte value) { + getDataWatcher().set(bq, value); + } +} diff --git a/src/main/java/be4rjp/sclat/manager/GameMgr.java b/src/main/java/be4rjp/sclat/manager/GameMgr.java index 5fb3e0b..b2c1984 100644 --- a/src/main/java/be4rjp/sclat/manager/GameMgr.java +++ b/src/main/java/be4rjp/sclat/manager/GameMgr.java @@ -21,9 +21,6 @@ import be4rjp.sclat.lobby.LobbyScoreboardRunnable; import be4rjp.sclat.packet.PacketHandler; import be4rjp.sclat.tutorial.Tutorial; -import be4rjp.sclat.weapon.Brush; -import be4rjp.sclat.weapon.Bucket; -import be4rjp.sclat.weapon.Buckler; import be4rjp.sclat.weapon.Charger; import be4rjp.sclat.weapon.Decoy; import be4rjp.sclat.weapon.Funnel; @@ -35,6 +32,9 @@ import be4rjp.sclat.weapon.Shooter; import be4rjp.sclat.weapon.Spinner; import be4rjp.sclat.weapon.Swapper; +import be4rjp.sclat.weapon.brush.Brush; +import be4rjp.sclat.weapon.bucket.Bucket; +import be4rjp.sclat.weapon.buckler.Buckler; import io.netty.channel.Channel; import io.netty.channel.ChannelPipeline; import net.md_5.bungee.api.chat.ClickEvent; diff --git a/src/main/java/be4rjp/sclat/manager/MainWeaponMgr.java b/src/main/java/be4rjp/sclat/manager/MainWeaponMgr.java index 290ebf7..4264852 100644 --- a/src/main/java/be4rjp/sclat/manager/MainWeaponMgr.java +++ b/src/main/java/be4rjp/sclat/manager/MainWeaponMgr.java @@ -6,13 +6,13 @@ import be4rjp.sclat.api.player.PlayerData; import be4rjp.sclat.data.DataMgr; import be4rjp.sclat.data.MainWeapon; -import be4rjp.sclat.weapon.Blaster; -import be4rjp.sclat.weapon.Brush; -import be4rjp.sclat.weapon.Bucket; import be4rjp.sclat.weapon.Burst; import be4rjp.sclat.weapon.Kasa; import be4rjp.sclat.weapon.Roller; import be4rjp.sclat.weapon.Slosher; +import be4rjp.sclat.weapon.blaster.Blaster; +import be4rjp.sclat.weapon.brush.Brush; +import be4rjp.sclat.weapon.bucket.Bucket; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/be4rjp/sclat/manager/MatchMgr.java b/src/main/java/be4rjp/sclat/manager/MatchMgr.java index 883b1c1..b7ba92e 100644 --- a/src/main/java/be4rjp/sclat/manager/MatchMgr.java +++ b/src/main/java/be4rjp/sclat/manager/MatchMgr.java @@ -28,9 +28,6 @@ import be4rjp.sclat.data.Path; import be4rjp.sclat.data.WeaponClass; import be4rjp.sclat.gui.OpenGUI; -import be4rjp.sclat.weapon.Brush; -import be4rjp.sclat.weapon.Bucket; -import be4rjp.sclat.weapon.Buckler; import be4rjp.sclat.weapon.Charger; import be4rjp.sclat.weapon.Decoy; import be4rjp.sclat.weapon.Funnel; @@ -43,6 +40,9 @@ import be4rjp.sclat.weapon.Shooter; import be4rjp.sclat.weapon.Spinner; import be4rjp.sclat.weapon.Swapper; +import be4rjp.sclat.weapon.brush.Brush; +import be4rjp.sclat.weapon.bucket.Bucket; +import be4rjp.sclat.weapon.buckler.Buckler; import be4rjp.sclat.weapon.spweapon.SuperArmor; import com.xxmicloxx.NoteBlockAPI.model.Song; import com.xxmicloxx.NoteBlockAPI.songplayer.RadioSongPlayer; diff --git a/src/main/java/be4rjp/sclat/manager/NPCMgr.java b/src/main/java/be4rjp/sclat/manager/NPCMgr.java index 11d0019..76d4451 100644 --- a/src/main/java/be4rjp/sclat/manager/NPCMgr.java +++ b/src/main/java/be4rjp/sclat/manager/NPCMgr.java @@ -3,8 +3,6 @@ import be4rjp.sclat.Sclat; import be4rjp.sclat.data.DataMgr; import com.mojang.authlib.GameProfile; -import net.minecraft.server.v1_15_R1.DataWatcherRegistry; -import net.minecraft.server.v1_15_R1.EntityPlayer; import net.minecraft.server.v1_15_R1.EnumItemSlot; import net.minecraft.server.v1_15_R1.MinecraftServer; import net.minecraft.server.v1_15_R1.PacketPlayOutAnimation; @@ -31,7 +29,7 @@ public class NPCMgr { public static void createNPC(Player player1, String npcName1, Location location1) { BukkitRunnable task = new BukkitRunnable() { - EntityPlayer npc; + FakePlayer npc; int s = 0; @@ -46,13 +44,13 @@ public void run() { MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer(); WorldServer nmsWorld = ((CraftWorld) location.getWorld()).getHandle(); - GameProfile gameProfile = new GameProfile(player.getUniqueId(), npcName); + GameProfile gameProfile = ((CraftPlayer) player).getHandle().getProfile(); - npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld)); + npc = new FakePlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld)); // 見えないところにスポーンさせて、クライアントにスキンを先に読み込ませる npc.setLocation(location.getX(), location.getY() - 20, location.getZ(), location.getYaw(), 0); - npc.getDataWatcher().set(DataWatcherRegistry.a.a(15), (byte) 127); + npc.setBQ((byte) 127); for (Player p : Sclat.getPlugin(Sclat.class).getServer().getOnlinePlayers()) { PlayerConnection connection = ((CraftPlayer) p).getHandle().playerConnection; diff --git a/src/main/java/be4rjp/sclat/manager/PlayerStatusMgr.java b/src/main/java/be4rjp/sclat/manager/PlayerStatusMgr.java index 2d01f80..25238b4 100644 --- a/src/main/java/be4rjp/sclat/manager/PlayerStatusMgr.java +++ b/src/main/java/be4rjp/sclat/manager/PlayerStatusMgr.java @@ -4,9 +4,7 @@ import be4rjp.sclat.Sclat; import be4rjp.sclat.api.rank.Ratings; import com.mojang.authlib.GameProfile; -import net.minecraft.server.v1_15_R1.DataWatcherRegistry; import net.minecraft.server.v1_15_R1.EntityArmorStand; -import net.minecraft.server.v1_15_R1.EntityPlayer; import net.minecraft.server.v1_15_R1.MinecraftServer; import net.minecraft.server.v1_15_R1.PacketPlayOutAnimation; import net.minecraft.server.v1_15_R1.PacketPlayOutEntityDestroy; @@ -88,11 +86,11 @@ public static void sendHologram(Player player) { MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer(); WorldServer nmsWorld = ((CraftWorld) location.getWorld()).getHandle(); - GameProfile gameProfile = new GameProfile(player.getUniqueId(), player.getName()); + GameProfile gameProfile = ((CraftPlayer) player).getHandle().getProfile(); - EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld)); + FakePlayer npc = new FakePlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld)); npc.setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), 0); - npc.getDataWatcher().set(DataWatcherRegistry.a.a(15), (byte) 127); + npc.setBQ((byte) 127); PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection; connection diff --git a/src/main/java/be4rjp/sclat/weapon/Brush.java b/src/main/java/be4rjp/sclat/weapon/Brush.java deleted file mode 100644 index d2124dd..0000000 --- a/src/main/java/be4rjp/sclat/weapon/Brush.java +++ /dev/null @@ -1,313 +0,0 @@ -package be4rjp.sclat.weapon; - -import be4rjp.dadadachecker.ClickType; -import be4rjp.sclat.Sclat; -import be4rjp.sclat.api.SclatUtil; -import be4rjp.sclat.api.player.PlayerData; -import be4rjp.sclat.data.DataMgr; -import be4rjp.sclat.manager.ArmorStandMgr; -import be4rjp.sclat.manager.PaintMgr; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftSnowball; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Snowball; -import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - -/** - * - * @author Be4rJP - */ -public class Brush { - public static void HoldRunnable(Player player) { - BukkitRunnable task = new BukkitRunnable() { - Player p = player; - @Override - public void run() { - PlayerData data = DataMgr.getPlayerData(p); - - data.setTick(data.getTick() + 1); - - if (!data.isInMatch() || !p.isOnline()) { - cancel(); - return; - } - - ClickType clickType = Sclat.dadadaCheckerAPI.getPlayerClickType(player); - - if (/* data.getTick() >= 6 */clickType == ClickType.NO_CLICK && data.isInMatch()) { - data.setTick(7); - data.setIsHolding(false); - data.setCanPaint(false); - data.setCanShoot(true); - } - } - }; - task.runTaskTimer(Sclat.getPlugin(), 0, 1); - } - - public static void RollPaintRunnable(Player player) { - BukkitRunnable task = new BukkitRunnable() { - Player p = player; - @Override - public void run() { - try { - PlayerData data = DataMgr.getPlayerData(p); - if (!data.isInMatch() || !p.isOnline()) - cancel(); - - if (data.getIsHolding() && data.getCanPaint() && data.isInMatch() - && Sclat.dadadaCheckerAPI.getPlayerClickType(p) != ClickType.RENDA - && p.getGameMode() != GameMode.SPECTATOR) { - if (player.getExp() <= (float) (data.getWeaponClass().getMainWeapon().getRollerNeedInk() - * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) - / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))) { - player.sendTitle("", ChatColor.RED + "インクが足りません", 0, 13, 2); - player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); - return; - } - p.setExp(p.getExp() - (float) (data.getWeaponClass().getMainWeapon().getRollerNeedInk() - * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) - / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))); - Vector locvec = p.getEyeLocation().getDirection(); - Location eloc = p.getEyeLocation(); - Vector vec = new Vector(locvec.getX(), 0, locvec.getZ()).normalize(); - // RayTrace rayTrace1 = new RayTrace(front.toVector(), vec1); - // ArrayList positions1 = - // rayTrace1.traverse(data.getWeaponClass().getMainWeapon().getRollerWidth(), - // 0.5); - Location front = eloc.add(vec.getX() * 2, -0.9, vec.getZ() * 2); - if (data.getWeaponClass().getMainWeapon().getIsHude()) - front = eloc.add(vec.getX() * 1.5, -0.9, vec.getZ() * 1.5); - org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(p).getTeam().getTeamColor().getWool() - .createBlockData(); - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) - if (target.getWorld() == p.getWorld()) - if (target.getLocation() - .distanceSquared(front) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) - target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, front, 2, 0, 0, 0, 1, bd); - } - Vector vec1 = new Vector(vec.getZ() * -1, 0, vec.getX()); - Vector vec2 = new Vector(vec.getZ(), 0, vec.getX() * -1); - - // 筆系武器 - if (data.getWeaponClass().getMainWeapon().getIsHude()) { - Location position = p.getLocation(); - PaintMgr.PaintHightestBlock(front, p, false, true); - p.getLocation().getWorld().spawnParticle(org.bukkit.Particle.BLOCK_DUST, position, 2, 0, 0, - 0, 1, bd); - - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) - if (target.getWorld() == p.getWorld()) - if (target.getLocation() - .distanceSquared(position) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) - target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, position, 2, 0, 0, 0, - 1, bd); - } - - double maxDistSquad = 4 /* 2*2 */; - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (!DataMgr.getPlayerData(target).isInMatch()) - continue; - if (DataMgr.getPlayerData(p).getTeam() != DataMgr.getPlayerData(target).getTeam() - && target.getGameMode().equals(GameMode.ADVENTURE)) { - if (target.getLocation().distanceSquared(position) <= maxDistSquad) { - - double damage = DataMgr.getPlayerData(p).getWeaponClass().getMainWeapon() - .getRollerDamage(); - - SclatUtil.giveDamage(p, target, damage, "killed"); - } - } - } - - for (Entity as : player.getWorld().getEntities()) { - if (as instanceof ArmorStand) { - if (as.getCustomName() != null) { - if (as.getLocation().distanceSquared(position) <= maxDistSquad) { - double damage = DataMgr.getPlayerData(p).getWeaponClass().getMainWeapon() - .getRollerDamage(); - ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, player); - } - } - } - } - p.setWalkSpeed((float) (data.getWeaponClass().getMainWeapon().getUsingWalkSpeed() - * Gear.getGearInfluence(p, Gear.Type.MAIN_SPEC_UP))); - return; - } - PaintMgr.PaintHightestBlock(eloc, p, false, true); - p.setWalkSpeed((float) (data.getWeaponClass().getMainWeapon().getUsingWalkSpeed() - * Gear.getGearInfluence(p, Gear.Type.MAIN_SPEC_UP))); - } - - } catch (Exception e) { - cancel(); - } - } - }; - if (DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getIsHude()) - task.runTaskTimer(Sclat.getPlugin(), 0, 1); - else - task.runTaskTimer(Sclat.getPlugin(), 0, 5); - } - - public static void ShootPaintRunnable(Player player) { - PlayerData pdata = DataMgr.getPlayerData(player); - BukkitRunnable task = new BukkitRunnable() { - Player p = player; - PlayerData data = pdata; - @Override - public void run() { - if (!DataMgr.getPlayerData(p).isInMatch() || !p.isOnline()) { - cancel(); - return; - } - data.setCanRollerShoot(true); - if (!p.getGameMode().equals(GameMode.ADVENTURE) - || p.getInventory().getItemInMainHand().getItemMeta().equals(Material.AIR)) - return; - if (player.getExp() >= data.getWeaponClass().getMainWeapon().getNeedInk()) - p.getWorld().playSound(p.getLocation(), Sound.ITEM_BUCKET_EMPTY, 1F, 1F); - else - return; - Vector vec = player.getLocation().getDirection() - .multiply(DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getShootSpeed()); - final double random = data.getWeaponClass().getMainWeapon().getHudeRandom(); - vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, - Math.random() * random - random / 2)); - for (int i = 0; i < data.getWeaponClass().getMainWeapon().getRollerShootQuantity(); i++) { - if (data.getWeaponClass().getMainWeapon().getIsHude()) - Brush.Shoot(p, vec); - else - Brush.Shoot(p, null); - } - // ShootRunnable(p); - data.setCanPaint(true); - - } - - }; - if (pdata.getCanRollerShoot()) { - task.runTaskLater(Sclat.getPlugin(), pdata.getWeaponClass().getMainWeapon().getShootTick()); - pdata.setCanRollerShoot(false); - } - } - - public static void ShootRunnable(Player player) { - PlayerData data = DataMgr.getPlayerData(player); - BukkitRunnable task = new BukkitRunnable() { - @Override - public void run() { - data.setCanRollerShoot(true); - } - }; - task.runTaskLater(Sclat.getPlugin(), data.getWeaponClass().getMainWeapon().getShootTick()); - } - - public static void Shoot(Player player, Vector v) { - - if (player.getGameMode() == GameMode.SPECTATOR) - return; - - PlayerData data = DataMgr.getPlayerData(player); - if (player.getExp() <= (float) (data.getWeaponClass().getMainWeapon().getNeedInk() - * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) - / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))) { - player.sendTitle("", ChatColor.RED + "インクが足りません", 0, 13, 2); - player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); - return; - } - player.setExp(player.getExp() - (float) (data.getWeaponClass().getMainWeapon().getNeedInk() - * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) - / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))); - Snowball ball = player.launchProjectile(Snowball.class); - ((CraftSnowball) ball).getHandle().setItem(CraftItemStack - .asNMSCopy(new ItemStack(DataMgr.getPlayerData(player).getTeam().getTeamColor().getWool()))); - Vector vec = player.getLocation().getDirection() - .multiply(DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getShootSpeed()); - if (v != null) - vec = v; - double random = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getRandom(); - int distick = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getDistanceTick(); - if (!data.getWeaponClass().getMainWeapon().getIsHude()) { - if (player.isOnGround()) - vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, - Math.random() * random - random / 2)); - if (!player.isOnGround()) { - if (data.getWeaponClass().getMainWeapon().getCanTatehuri()) - vec.add(new Vector(Math.random() * random / 4 - random / 8, Math.random() * random, - Math.random() * random / 4 - random / 8)); - if (!data.getWeaponClass().getMainWeapon().getCanTatehuri()) - vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, - Math.random() * random - random / 2)); - // player.sendMessage(String.valueOf(player.isOnGround())); - } - } else { - vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, - Math.random() * random - random / 2)); - } - ball.setVelocity(vec); - ball.setShooter(player); - String name = String.valueOf(Sclat.getNotDuplicateNumber()); - DataMgr.mws.add(name); - ball.setCustomName(name); - DataMgr.getMainSnowballNameMap().put(name, ball); - DataMgr.setSnowballHitCount(name, 0); - BukkitRunnable task = new BukkitRunnable() { - int i = 0; - int tick = distick; - Snowball inkball = ball; - Player p = player; - boolean addedFallVec = false; - Vector fallvec = new Vector(inkball.getVelocity().getX(), inkball.getVelocity().getY(), - inkball.getVelocity().getZ()) - .multiply(DataMgr.getPlayerData(p).getWeaponClass().getMainWeapon().getShootSpeed() / 17); - @Override - public void run() { - inkball = DataMgr.getMainSnowballNameMap().get(name); - - if (!inkball.equals(ball)) { - i += DataMgr.getSnowballHitCount(name) - 1; - DataMgr.setSnowballHitCount(name, 0); - } - if (i != 0) { - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (target.getWorld() != p.getWorld()) - continue; - if (!DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) - continue; - org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(p).getTeam().getTeamColor().getWool() - .createBlockData(); - target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, inkball.getLocation(), 1, 0, 0, 0, 1, bd); - } - } - - if (i >= tick && !addedFallVec) { - inkball.setVelocity(fallvec); - addedFallVec = true; - } - if (i >= tick && i <= tick + 15) - inkball.setVelocity(inkball.getVelocity().add(new Vector(0, -0.1, 0))); - if (i != tick) - PaintMgr.PaintHightestBlock(inkball.getLocation(), p, true, true); - if (inkball.isDead()) - cancel(); - - i++; - } - }; - task.runTaskTimer(Sclat.getPlugin(), 0, 1); - } - -} diff --git a/src/main/java/be4rjp/sclat/weapon/Bucket.java b/src/main/java/be4rjp/sclat/weapon/Bucket.java deleted file mode 100644 index 07a68de..0000000 --- a/src/main/java/be4rjp/sclat/weapon/Bucket.java +++ /dev/null @@ -1,198 +0,0 @@ - -package be4rjp.sclat.weapon; - -import be4rjp.sclat.Sclat; -import be4rjp.sclat.api.player.PlayerData; -import be4rjp.sclat.data.DataMgr; -import be4rjp.sclat.manager.PaintMgr; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftSnowball; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; -import org.bukkit.entity.Player; -import org.bukkit.entity.Snowball; -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - -/** - * - * @author Be4rJP - */ -public class Bucket { - public static void ShootBucket(Player player) { - PlayerData data = DataMgr.getPlayerData(player); - BukkitRunnable delay1 = new BukkitRunnable() { - Player p = player; - @Override - public void run() { - PlayerData data = DataMgr.getPlayerData(player); - data.setCanRollerShoot(true); - } - }; - if (data.getCanRollerShoot()) - delay1.runTaskLater(Sclat.getPlugin(), data.getWeaponClass().getMainWeapon().getCoolTime()); - - BukkitRunnable delay = new BukkitRunnable() { - @Override - public void run() { - boolean sound = false; - for (int i = 0; i < data.getWeaponClass().getMainWeapon().getRollerShootQuantity(); i++) { - boolean is = Shoot(player, null); - if (is) - sound = true; - } - if (sound) - player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); - } - }; - BukkitRunnable delay2 = new BukkitRunnable() { - Player p = player; - int c = 0; - boolean sound = false; - @Override - public void run() { - c++; - int q = 2; - for (int i = 0; i < data.getWeaponClass().getMainWeapon().getRollerShootQuantity(); i++) { - boolean is = Shoot(player, null); - if (is) - sound = true; - } - if (sound) - player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); - if (c == q) - cancel(); - } - }; - if (data.getCanRollerShoot()) { - // delay.runTaskLater(Main.getPlugin(), - // data.getWeaponClass().getMainWeapon().getDelay()); - delay2.runTaskTimer(Sclat.getPlugin(), 0, data.getWeaponClass().getMainWeapon().getDelay()); - data.setCanRollerShoot(false); - } - } - - public static boolean Shoot(Player player, Vector v) { - - if (player.getGameMode() == GameMode.SPECTATOR) - return false; - - PlayerData data = DataMgr.getPlayerData(player); - if (player.getExp() <= (float) (data.getWeaponClass().getMainWeapon().getNeedInk() - * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) - / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))) { - player.sendTitle("", ChatColor.RED + "インクが足りません", 0, 13, 2); - return true; - } - player.setExp(player.getExp() - (float) (data.getWeaponClass().getMainWeapon().getNeedInk() - * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) - / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))); - Snowball ball = player.launchProjectile(Snowball.class); - ((CraftSnowball) ball).getHandle().setItem(CraftItemStack - .asNMSCopy(new ItemStack(DataMgr.getPlayerData(player).getTeam().getTeamColor().getWool()))); - Vector vec = player.getLocation().getDirection() - .multiply(DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getShootSpeed()); - if (v != null) - vec = v; - double random = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getRandom(); - int distick = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getDistanceTick(); - vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 1.5 - random / 3, - Math.random() * random - random / 2)); - ball.setVelocity(vec); - ball.setShooter(player); - String name = String.valueOf(Sclat.getNotDuplicateNumber()); - DataMgr.mws.add(name); - ball.setCustomName(name); - DataMgr.getMainSnowballNameMap().put(name, ball); - DataMgr.setSnowballHitCount(name, 0); - BukkitRunnable task = new BukkitRunnable() { - int i = 0; - int tick = distick; - Snowball inkball = ball; - Player p = player; - boolean addedFallVec = false; - Vector fallvec = new Vector(inkball.getVelocity().getX(), inkball.getVelocity().getY(), - inkball.getVelocity().getZ()) - .multiply(DataMgr.getPlayerData(p).getWeaponClass().getMainWeapon().getShootSpeed() / 17); - @Override - public void run() { - inkball = DataMgr.getMainSnowballNameMap().get(name); - - if (!inkball.equals(ball)) { - i += DataMgr.getSnowballHitCount(name) - 1; - DataMgr.setSnowballHitCount(name, 0); - } - if (i != 0) { - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (target.getWorld() != p.getWorld()) - continue; - if (!DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) - continue; - if (target.getWorld() == inkball.getWorld()) { - if (target.getLocation() - .distanceSquared(inkball.getLocation()) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) { - org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(p).getTeam().getTeamColor() - .getWool().createBlockData(); - target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, inkball.getLocation(), 1, 0, 0, 0, - 1, bd); - } - } - } - } - - if (i >= tick && !addedFallVec) { - inkball.setVelocity(fallvec); - addedFallVec = true; - } - if (i >= tick && i <= tick + 15) - inkball.setVelocity(inkball.getVelocity().add(new Vector(0, -0.1, 0))); - if (i != tick) - PaintMgr.PaintHightestBlock(inkball.getLocation(), p, true, true); - if (inkball.isDead()) - cancel(); - - i++; - } - }; - task.runTaskTimer(Sclat.getPlugin(), 0, 1); - - return false; - } - - public static void BucketHealRunnable(Player player, int level) { - BukkitRunnable delay3 = new BukkitRunnable() { - Player p = player; - int Ctime = 200; - boolean bh_recharge = true; - - @Override - public void run() { - PlayerData data = DataMgr.getPlayerData(p); - if (level >= 1) { - Ctime = 100; - } - if (!data.isInMatch() || !p.isOnline()) { - cancel(); - return; - } - if (data.getIsSneaking() && bh_recharge && player.getGameMode().equals(GameMode.ADVENTURE)) { - p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, Ctime, level)); - p.getWorld().playSound(p.getLocation(), Sound.ITEM_TRIDENT_RETURN, 1.4F, 1.5F); - bh_recharge = false; - BukkitRunnable healtask = new BukkitRunnable() {// クールタイムを管理しています - @Override - public void run() { - bh_recharge = true; - } - }; - healtask.runTaskLater(Sclat.getPlugin(), Ctime); - } - } - }; - delay3.runTaskTimer(Sclat.getPlugin(), 0, 1); - } -} diff --git a/src/main/java/be4rjp/sclat/weapon/Funnel.java b/src/main/java/be4rjp/sclat/weapon/Funnel.java index bd95f36..b17d338 100644 --- a/src/main/java/be4rjp/sclat/weapon/Funnel.java +++ b/src/main/java/be4rjp/sclat/weapon/Funnel.java @@ -2,22 +2,25 @@ import be4rjp.sclat.Sclat; import be4rjp.sclat.api.GlowingAPI; +import be4rjp.sclat.api.IOwnable; import be4rjp.sclat.api.SclatUtil; +import be4rjp.sclat.api.SimpleRunnable; import be4rjp.sclat.api.player.PlayerData; import be4rjp.sclat.api.raytrace.BoundingBox; import be4rjp.sclat.api.raytrace.RayTrace; import be4rjp.sclat.api.team.Team; import be4rjp.sclat.data.DataMgr; import be4rjp.sclat.data.KasaData; -import be4rjp.sclat.data.SplashShieldData; import be4rjp.sclat.manager.ArmorStandMgr; import net.minecraft.server.v1_15_R1.EnumItemSlot; import net.minecraft.server.v1_15_R1.PacketPlayOutEntityEquipment; +import net.minecraft.server.v1_15_R1.PlayerConnection; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.Sound; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; @@ -33,7 +36,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; public class Funnel { @@ -54,14 +56,22 @@ public static void FunnelShot(Player player, ArmorStand funnel, Location taegetl loop : for (Vector vector : positions) { - Location position = vector.toLocation(player.getLocation().getWorld()); - Block block = player.getLocation().getWorld().getBlockAt(position); + World world = player.getLocation().getWorld(); + if (world == null) { + Sclat.logger.warn("Player world is null"); + continue; + } + Location position = vector.toLocation(world); + Block block = world.getBlockAt(position); if (!block.getType().equals(Material.AIR)) { break; } + + double maxDistSquad = 4 /* 2*2 */; for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) { + PlayerData playerData = DataMgr.getPlayerData(target); + if (playerData.getSettings().ShowEffect_MainWeaponInk()) { if (target.getWorld() == position.getWorld()) { if (target.getLocation().distanceSquared(position) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) { org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(player).getTeam().getTeamColor() @@ -70,71 +80,59 @@ public static void FunnelShot(Player player, ArmorStand funnel, Location taegetl } } } - } - - double maxDistSquad = 4 /* 2*2 */; - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (!DataMgr.getPlayerData(target).isInMatch()) + if (!playerData.isInMatch()) continue; - if (DataMgr.getPlayerData(player).getTeam() != DataMgr.getPlayerData(target).getTeam() + if (DataMgr.getPlayerData(player).getTeam() != playerData.getTeam() && target.getGameMode().equals(GameMode.ADVENTURE)) { if (target.getLocation().distanceSquared(position) <= maxDistSquad) { - if (rayTrace.intersects(new BoundingBox((Entity) target), 4, 0.05)) { + if (rayTrace.intersects(new BoundingBox(target), 4, 0.05)) { SclatUtil.giveDamage(player, target, damage, "killed"); player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 1.2F, 1.3F); // AntiNoDamageTime - BukkitRunnable task = new BukkitRunnable() { - Player p = target; - - @Override - public void run() { - target.setNoDamageTicks(0); - } - }; - task.runTaskLater(Sclat.getPlugin(), 1); + SimpleRunnable.runTaskLater(cancel -> { + target.setNoDamageTicks(0); + }, 1); break loop; } } } } - for (Entity as : player.getWorld().getEntities()) { - if (as instanceof ArmorStand) { - if (as.getLocation().distanceSquared(position) <= maxDistSquad) { - if (rayTrace.intersects(new BoundingBox((Entity) as), 4, 0.05)) { - if (as.getCustomName() != null) { - if (as.getCustomName().equals("SplashShield")) { - SplashShieldData ssdata = DataMgr - .getSplashShieldDataFromArmorStand((ArmorStand) as); - if (DataMgr.getPlayerData(ssdata.getPlayer()).getTeam() != DataMgr - .getPlayerData(player).getTeam()) { - ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, player); - as.getWorld().playSound(as.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.8F, 1.2F); - break loop; - } - } else if (as.getCustomName().equals("Kasa")) { - KasaData ssdata = DataMgr.getKasaDataFromArmorStand((ArmorStand) as); - if (DataMgr.getPlayerData(ssdata.getPlayer()).getTeam() != DataMgr + for (ArmorStand as : player.getWorld().getEntitiesByClass(ArmorStand.class)) { + if (as == null) { + Sclat.logger.warn("ArmorStand is null"); + continue loop; + } + if (as.getLocation().distanceSquared(position) <= maxDistSquad) { + if (rayTrace.intersects(new BoundingBox(as), 4, 0.05)) { + String customName = as.getCustomName(); + if (customName != null) { + switch (customName) { + case "Kasa" : + case "SplashShield" : { + IOwnable ownableEntity = customName.equals("Kasa") + ? DataMgr.getKasaDataFromArmorStand(as) + : DataMgr.getSplashShieldDataFromArmorStand(as); + if (DataMgr.getPlayerData(ownableEntity.getOwner()).getTeam() != DataMgr .getPlayerData(player).getTeam()) { - ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, player); + ArmorStandMgr.giveDamageArmorStand(as, damage, player); as.getWorld().playSound(as.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.8F, 1.2F); break loop; } - } else { - if (SclatUtil.isNumber(as.getCustomName())) - if (!as.getCustomName().equals("21") && !as.getCustomName().equals("100")) - if (((ArmorStand) as).isVisible()) - player.playSound(player.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, - 1.2F, 1.3F); - ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, player); - break loop; + break; } + default : + if (SclatUtil.isNumber(customName) && !customName.equals("21") + && !customName.equals("100") && as.isVisible()) + player.playSound(player.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1.2F, + 1.3F); } - ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, player); } + ArmorStandMgr.giveDamageArmorStand(as, damage, player); } } + } } } @@ -459,6 +457,7 @@ public void run() { kdata2.setDamage(1024); } } + int listRemoveDelay = kdata.getDamage() == 1024 ? 110 : 160; if (kdata.getDamage() > FunnelMaxHP && kdata.getDamage() < 9999) { ArmorStand kasaStand = kdata.getArmorStandList().get(0); data.subArmorlist(kasaStand); @@ -472,11 +471,7 @@ public void run() { HashArmorstand.remove(kasaStand); } else { list6.remove(kasaStand); - if (kdata.getDamage() == 1024) { - listremove.runTaskLater(Sclat.getPlugin(), 110); - } else { - listremove.runTaskLater(Sclat.getPlugin(), 160); - } + listremove.runTaskLater(Sclat.getPlugin(), listRemoveDelay); } kdata.setDamage(10000); for (ArmorStand as : kdata.getArmorStandList()) { @@ -496,11 +491,7 @@ public void run() { HashArmorstand.remove(kasaStand1); } else { list6.remove(kasaStand1); - if (kdata1.getDamage() == 1024) { - listremove1.runTaskLater(Sclat.getPlugin(), 110); - } else { - listremove1.runTaskLater(Sclat.getPlugin(), 160); - } + listremove1.runTaskLater(Sclat.getPlugin(), listRemoveDelay); } kdata1.setDamage(10000); for (ArmorStand as : kdata1.getArmorStandList()) { @@ -520,11 +511,7 @@ public void run() { HashArmorstand.remove(kasaStand2); } else { list6.remove(kasaStand2); - if (kdata2.getDamage() == 1024) { - listremove2.runTaskLater(Sclat.getPlugin(), 110); - } else { - listremove2.runTaskLater(Sclat.getPlugin(), 160); - } + listremove2.runTaskLater(Sclat.getPlugin(), listRemoveDelay); } kdata2.setDamage(10000); for (ArmorStand as : kdata2.getArmorStandList()) { @@ -613,22 +600,19 @@ public void run() { if (i % 20 == 0) { Team team = data.getTeam(); for (Player o_player : Sclat.getPlugin().getServer().getOnlinePlayers()) { - ((CraftPlayer) o_player).getHandle().playerConnection.sendPacket( - new PacketPlayOutEntityEquipment(aslist.get(2).getEntityId(), - EnumItemSlot.HEAD, - CraftItemStack.asNMSCopy(new ItemStack(Material.getMaterial( - team.getTeamColor().getGlass().toString() - + "_PANE"))))); - ((CraftPlayer) o_player).getHandle().playerConnection.sendPacket( - new PacketPlayOutEntityEquipment(aslist.get(1).getEntityId(), - EnumItemSlot.HEAD, - CraftItemStack.asNMSCopy(new ItemStack(Material.getMaterial( - team.getTeamColor().getGlass().toString() - + "_PANE"))))); - ((CraftPlayer) o_player).getHandle().playerConnection.sendPacket( - new PacketPlayOutEntityEquipment(aslist.get(0).getEntityId(), - EnumItemSlot.HEAD, CraftItemStack.asNMSCopy( - new ItemStack(team.getTeamColor().getWool())))); + PlayerConnection playerConnection = ((CraftPlayer) o_player) + .getHandle().playerConnection; + Material teamColoredGlassPane = Material + .getMaterial(team.getTeamColor().getGlass().toString() + "_PANE"); + playerConnection.sendPacket(new PacketPlayOutEntityEquipment( + aslist.get(2).getEntityId(), EnumItemSlot.HEAD, + CraftItemStack.asNMSCopy(new ItemStack(teamColoredGlassPane)))); + playerConnection.sendPacket(new PacketPlayOutEntityEquipment( + aslist.get(1).getEntityId(), EnumItemSlot.HEAD, + CraftItemStack.asNMSCopy(new ItemStack(teamColoredGlassPane)))); + playerConnection.sendPacket(new PacketPlayOutEntityEquipment( + aslist.get(0).getEntityId(), EnumItemSlot.HEAD, CraftItemStack + .asNMSCopy(new ItemStack(team.getTeamColor().getWool())))); } } } else { @@ -759,9 +743,8 @@ public void run() { } else if (HashArmorstand.containsKey(aslistget0)) { Location las = aslistget0.getLocation(); Location lpl = HashArmorstand.get(aslistget0).getLocation() - .add(r1.clone().multiply(2).add(new Vector(0, 1.4, 0))); - pv = new Vector(lpl.getX() - las.getX(), lpl.getY() - las.getY(), - lpl.getZ() - las.getZ()); + .add(r1.clone().multiply(2).add(new Vector(0, 1.4, 0))).subtract(las); + pv = lpl.clone().subtract(las).toVector(); if (i % 48 == 32) { Funnel.FunnelShot(p, aslistget0, HashArmorstand.get(aslistget0).getEyeLocation()); @@ -797,22 +780,19 @@ public void run() { // 残数表記了 Team team = data.getTeam(); for (Player o_player : Sclat.getPlugin().getServer().getOnlinePlayers()) { - ((CraftPlayer) o_player).getHandle().playerConnection.sendPacket( - new PacketPlayOutEntityEquipment(aslist.get(2).getEntityId(), - EnumItemSlot.HEAD, - CraftItemStack.asNMSCopy(new ItemStack(Material.getMaterial( - team.getTeamColor().getGlass().toString() - + "_PANE"))))); - ((CraftPlayer) o_player).getHandle().playerConnection.sendPacket( - new PacketPlayOutEntityEquipment(aslist.get(1).getEntityId(), - EnumItemSlot.HEAD, - CraftItemStack.asNMSCopy(new ItemStack(Material.getMaterial( - team.getTeamColor().getGlass().toString() - + "_PANE"))))); - ((CraftPlayer) o_player).getHandle().playerConnection.sendPacket( - new PacketPlayOutEntityEquipment(aslist.get(0).getEntityId(), - EnumItemSlot.HEAD, CraftItemStack.asNMSCopy( - new ItemStack(team.getTeamColor().getWool())))); + Material teamGlassPaneMaterial = Material + .getMaterial(team.getTeamColor().getGlass().toString() + "_PANE"); + PlayerConnection playerConnection = ((CraftPlayer) o_player) + .getHandle().playerConnection; + playerConnection.sendPacket(new PacketPlayOutEntityEquipment( + aslist.get(2).getEntityId(), EnumItemSlot.HEAD, + CraftItemStack.asNMSCopy(new ItemStack(teamGlassPaneMaterial)))); + playerConnection.sendPacket(new PacketPlayOutEntityEquipment( + aslist.get(1).getEntityId(), EnumItemSlot.HEAD, + CraftItemStack.asNMSCopy(new ItemStack(teamGlassPaneMaterial)))); + playerConnection.sendPacket(new PacketPlayOutEntityEquipment( + aslist.get(0).getEntityId(), EnumItemSlot.HEAD, CraftItemStack + .asNMSCopy(new ItemStack(team.getTeamColor().getWool())))); } } } else { @@ -869,11 +849,12 @@ public void run() { if (DataMgr.getPlayerData(player).getTeam() != DataMgr.getPlayerData(target).getTeam() && target.getGameMode().equals(GameMode.ADVENTURE)) { if (target.getLocation().distanceSquared(position) <= maxDistSquad) { - // if(rayTrace.intersects(new BoundingBox((Entity)target), (30), 0.2)){ player.getWorld().playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BIT, 1.0f, 5); if (!list6.isEmpty()) { - if (list6.get(list6.size() - 1).equals(as3) && FunAmoP(target)) { + if (!FunAmoP(target)) + return; + if (list6.get(list6.size() - 1).equals(as3)) { player.getWorld().playSound(target.getLocation(), Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); HashPlayer.put(as3, target); @@ -886,7 +867,7 @@ public void run() { kdataReset = i + 210; // listremove.runTaskLater(Main.getPlugin(), 140); list6.remove(list6.size() - 1); - } else if (list6.get(list6.size() - 1).equals(as13) && FunAmoP(target)) { + } else if (list6.get(list6.size() - 1).equals(as13)) { player.getWorld().playSound(target.getLocation(), Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); HashPlayer.put(as13, target); @@ -897,9 +878,8 @@ public void run() { } as13.setGravity(true); kdataReset1 = i + 210; - // listremove1.runTaskLater(Main.getPlugin(), 140); list6.remove(list6.size() - 1); - } else if (list6.get(list6.size() - 1).equals(as23) && FunAmoP(target)) { + } else if (list6.get(list6.size() - 1).equals(as23)) { player.getWorld().playSound(target.getLocation(), Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); HashPlayer.put(as23, target); @@ -910,92 +890,67 @@ public void run() { } as23.setGravity(true); kdataReset2 = i + 210; - // listremove2.runTaskLater(Main.getPlugin(), 140); list6.remove(list6.size() - 1); } } break loop; - // } } } } + // Todo: We need to write some wrap methods for (Entity as : player.getWorld().getEntities()) { - if (as instanceof ArmorStand) { - if (as.getLocation().distanceSquared(position) <= maxDistSquad) { - // if(rayTrace.intersects(new BoundingBox((Entity)as), (int)(30), 0.2)){ - if (as.getCustomName() != null) { - if (as.getCustomName().equals("SplashShield")) { - // SplashShieldData ssdata = - // DataMgr.getSplashShieldDataFromArmorStand((ArmorStand)as); - // if(DataMgr.getPlayerData(ssdata.getPlayer()).getTeam() != - // DataMgr.getPlayerData(player).getTeam()){ - // break loop; - // } - } else if (as.getCustomName().equals("Kasa")) { - // KasaData ssdata = DataMgr.getKasaDataFromArmorStand((ArmorStand)as); - // if(DataMgr.getPlayerData(ssdata.getPlayer()).getTeam() != - // DataMgr.getPlayerData(player).getTeam()){ - // break loop; - // } - } else { - if (SclatUtil.isNumber(as.getCustomName())) - if (!as.getCustomName().equals("21") - && !as.getCustomName().equals("100")) - if (((ArmorStand) as).isVisible()) - // player.playSound(player.getLocation(), - // Sound.ENTITY_ARROW_HIT_PLAYER, 1.2F, 1.3F); - player.getWorld().playSound(player.getLocation(), - Sound.BLOCK_NOTE_BLOCK_BIT, 1.0f, 5); - if (!list6.isEmpty()) { - if (list6.get(list6.size() - 1).equals(as3) - && FunAmoA((ArmorStand) as)) { - player.getWorld().playSound(as.getLocation(), - Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); - HashArmorstand.put(as3, (ArmorStand) as); - GlowingAPI.setGlowing(as3, player, true); - if (kdata.getDamage() < FunnelMaxHP2) { - kdata.setDamage(FunnelMaxHP2); - } - as3.setGravity(true); - kdataReset = i + 210; - // listremove.runTaskLater(Main.getPlugin(), 140); - list6.remove(list6.size() - 1); - } else if (list6.get(list6.size() - 1).equals(as13) - && FunAmoA((ArmorStand) as)) { - player.getWorld().playSound(as.getLocation(), - Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); - HashArmorstand.put(as13, (ArmorStand) as); - GlowingAPI.setGlowing(as13, player, true); - if (kdata1.getDamage() < FunnelMaxHP2) { - kdata1.setDamage(FunnelMaxHP2); - } - as13.setGravity(true); - kdataReset1 = i + 210; - // listremove1.runTaskLater(Main.getPlugin(), 140); - list6.remove(list6.size() - 1); - } else if (list6.get(list6.size() - 1).equals(as23) - && FunAmoA((ArmorStand) as)) { - player.getWorld().playSound(as.getLocation(), - Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); - HashArmorstand.put(as23, (ArmorStand) as); - GlowingAPI.setGlowing(as23, player, true); - if (kdata2.getDamage() < FunnelMaxHP2) { - kdata2.setDamage(FunnelMaxHP2); - } - as23.setGravity(true); - kdataReset2 = i + 210; - // listremove2.runTaskLater(Main.getPlugin(), 140); - list6.remove(list6.size() - 1); - } - } - break loop; + if (!(as instanceof ArmorStand) + || as.getLocation().distanceSquared(position) > maxDistSquad + || as.getCustomName() == null || as.getCustomName().equals("SplashShield")) + continue; + if (!as.getCustomName().equals("Kasa")) { + if (SclatUtil.isNumber(as.getCustomName()) && !as.getCustomName().equals("21") + && !as.getCustomName().equals("100") && ((ArmorStand) as).isVisible()) + player.getWorld().playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BIT, + 1.0f, 5); + if (!list6.isEmpty()) { + if (!FunAmoA((ArmorStand) as)) + return; + ArmorStand armorStand = list6.get(list6.size() - 1); + if (armorStand.equals(as3)) { + player.getWorld().playSound(as.getLocation(), + Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); + HashArmorstand.put(as3, (ArmorStand) as); + GlowingAPI.setGlowing(as3, player, true); + if (kdata.getDamage() < FunnelMaxHP2) { + kdata.setDamage(FunnelMaxHP2); + } + as3.setGravity(true); + kdataReset = i + 210; + list6.remove(list6.size() - 1); + } else if (armorStand.equals(as13)) { + player.getWorld().playSound(as.getLocation(), + Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); + HashArmorstand.put(as13, (ArmorStand) as); + GlowingAPI.setGlowing(as13, player, true); + if (kdata1.getDamage() < FunnelMaxHP2) { + kdata1.setDamage(FunnelMaxHP2); + } + as13.setGravity(true); + kdataReset1 = i + 210; + list6.remove(list6.size() - 1); + } else if (armorStand.equals(as23)) { + player.getWorld().playSound(as.getLocation(), + Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1.0f, 2); + HashArmorstand.put(as23, (ArmorStand) as); + GlowingAPI.setGlowing(as23, player, true); + if (kdata2.getDamage() < FunnelMaxHP2) { + kdata2.setDamage(FunnelMaxHP2); } + as23.setGravity(true); + kdataReset2 = i + 210; + list6.remove(list6.size() - 1); } - // ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, player); - // } } + break loop; } + } } @@ -1092,10 +1047,8 @@ public static double FunnelPursuitPlayer(Player player, Player target) { double rate = 0; for (int ai = 0; ai < 3; ai++) { try { - if (HashPlayer.containsKey(DataMgr.getPlayerData(player).getArmorlist(ai))) { - if (HashPlayer.get(DataMgr.getPlayerData(player).getArmorlist(ai)).equals(target)) { - rate = rate + 1.5; - } + if (target.equals(HashPlayer.get(DataMgr.getPlayerData(player).getArmorlist(ai)))) { + rate = rate + 1.5; } } catch (Exception e) { rate = rate - 0.7; @@ -1158,34 +1111,23 @@ public static int Funnelamount(Player player) { int rate = 3; for (int ai = 0; ai < 3; ai++) { try { - if (HashPlayer.containsKey(DataMgr.getPlayerData(player).getArmorlist(ai))) { - rate = rate - 1; + ArmorStand armorList = DataMgr.getPlayerData(player).getArmorlist(ai); + if (HashPlayer.containsKey(armorList)) { + rate--; } - if (HashArmorstand.containsKey(DataMgr.getPlayerData(player).getArmorlist(ai))) { - rate = rate - 1; + if (HashArmorstand.containsKey(armorList)) { + rate--; } } catch (Exception e) { - rate = rate - 1; + rate--; } } return rate; } private static boolean FunAmoP(Player player) { - int count = 0; - for (Map.Entry entry : HashPlayer.entrySet()) { - if (entry.getValue() == player) { - count++; - } - } - return count < 3; + return HashPlayer.values().stream().filter(p -> p == player).count() < 3; } private static boolean FunAmoA(ArmorStand stand) { - int count = 0; - for (Map.Entry entry : HashArmorstand.entrySet()) { - if (entry.getValue() == stand) { - count++; - } - } - return count < 3; + return HashPlayer.keySet().stream().filter(s -> s == stand).count() < 3; } } diff --git a/src/main/java/be4rjp/sclat/weapon/Blaster.java b/src/main/java/be4rjp/sclat/weapon/blaster/Blaster.java similarity index 59% rename from src/main/java/be4rjp/sclat/weapon/Blaster.java rename to src/main/java/be4rjp/sclat/weapon/blaster/Blaster.java index f281f56..65b8ff0 100644 --- a/src/main/java/be4rjp/sclat/weapon/Blaster.java +++ b/src/main/java/be4rjp/sclat/weapon/blaster/Blaster.java @@ -1,5 +1,5 @@ -package be4rjp.sclat.weapon; +package be4rjp.sclat.weapon.blaster; import be4rjp.sclat.Sclat; import be4rjp.sclat.api.SclatUtil; @@ -11,6 +11,7 @@ import be4rjp.sclat.data.SplashShieldData; import be4rjp.sclat.manager.ArmorStandMgr; import be4rjp.sclat.manager.PaintMgr; +import be4rjp.sclat.weapon.Gear; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; @@ -83,141 +84,7 @@ public static void Shoot(Player player) { ball.setCustomName(name); DataMgr.getMainSnowballNameMap().put(name, ball); DataMgr.setSnowballHitCount(name, 0); - BukkitRunnable task = new BukkitRunnable() { - int i = 0; - int tick = distick; - // Vector fallvec; - Vector origvec = vec; - Snowball inkball = ball; - Player p = player; - Vector fallvec = new Vector(inkball.getVelocity().getX(), inkball.getVelocity().getY(), - inkball.getVelocity().getZ()) - .multiply(DataMgr.getPlayerData(p).getWeaponClass().getMainWeapon().getShootSpeed() / 17); - @Override - public void run() { - inkball = DataMgr.getMainSnowballNameMap().get(name); - - if (!inkball.equals(ball)) { - i += DataMgr.getSnowballHitCount(name) - 1; - DataMgr.setSnowballHitCount(name, 0); - } - - org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(p).getTeam().getTeamColor().getWool() - .createBlockData(); - for (Player o_player : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (DataMgr.getPlayerData(o_player).getSettings().ShowEffect_MainWeaponInk()) - if (o_player.getWorld() == inkball.getWorld()) - if (o_player.getLocation() - .distanceSquared(inkball.getLocation()) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) - o_player.spawnParticle(org.bukkit.Particle.BLOCK_DUST, inkball.getLocation(), 1, 0, 0, - 0, 1, bd); - } - - if (i >= tick && !inkball.isDead()) { - // 半径 - double maxDist = data.getWeaponClass().getMainWeapon().getBlasterExHankei(); - - // 爆発音 - player.getWorld().playSound(inkball.getLocation(), Sound.ENTITY_FIREWORK_ROCKET_BLAST, 1, 1); - - // 爆発エフェクト - SclatUtil.createInkExplosionEffect(inkball.getLocation(), maxDist, 25, player); - - // バリアをはじく - SclatUtil.repelBarrier(inkball.getLocation(), maxDist, player); - - // 塗る - for (int i = 0; i <= maxDist - 1; i++) { - List p_locs = Sphere.getSphere(inkball.getLocation(), i, 20); - for (Location loc : p_locs) { - PaintMgr.Paint(loc, p, false); - PaintMgr.PaintHightestBlock(loc, p, false, false); - } - } - - // 攻撃判定の処理 - for (Entity as : player.getWorld().getEntities()) { - if (as instanceof ArmorStand) { - if (as.getCustomName() != null) { - if (as.getLocation().distanceSquared(ball.getLocation()) <= maxDist * maxDist) { - try { - if (as.getCustomName().equals("Kasa")) { - KasaData kasaData = DataMgr.getKasaDataFromArmorStand((ArmorStand) as); - if (DataMgr.getPlayerData(kasaData.getPlayer()).getTeam() != DataMgr - .getPlayerData(p).getTeam()) { - inkball.remove(); - cancel(); - } - } else if (as.getCustomName().equals("SplashShield")) { - SplashShieldData splashShieldData = DataMgr - .getSplashShieldDataFromArmorStand((ArmorStand) as); - if (DataMgr.getPlayerData(splashShieldData.getPlayer()).getTeam() != DataMgr - .getPlayerData(p).getTeam()) { - inkball.remove(); - cancel(); - } - } - } catch (Exception e) { - } - } - } - } - } - - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (!DataMgr.getPlayerData(target).isInMatch()) - continue; - if (target.getLocation().distance(inkball.getLocation()) <= maxDist + 1) { - double damage = 10; - if (data.getWeaponClass().getMainWeapon().getIsManeuver()) - damage = data.getWeaponClass().getMainWeapon().getBlasterExDamage(); - else - damage = (maxDist + 1 - target.getLocation().distance(inkball.getLocation())) - * data.getWeaponClass().getMainWeapon().getBlasterExDamage(); - if (damage > data.getWeaponClass().getMainWeapon().getDamage()) { - damage = data.getWeaponClass().getMainWeapon().getDamage(); - } - if (DataMgr.getPlayerData(player).getTeam() != DataMgr.getPlayerData(target).getTeam() - && target.getGameMode().equals(GameMode.ADVENTURE)) { - SclatUtil.giveDamage(player, target, damage, "killed"); - - // AntiNoDamageTime - BukkitRunnable task = new BukkitRunnable() { - Player p = target; - @Override - public void run() { - target.setNoDamageTicks(0); - } - }; - task.runTaskLater(Sclat.getPlugin(), 1); - - } - } - } - - for (Entity as : player.getWorld().getEntities()) { - if (as instanceof ArmorStand) { - if (as.getLocation().distanceSquared(inkball.getLocation()) <= (maxDist + 1) - * (maxDist + 1)) { - double damage = (maxDist + 1 - as.getLocation().distance(inkball.getLocation())) - * data.getWeaponClass().getMainWeapon().getBlasterExDamage(); - if (damage > data.getWeaponClass().getMainWeapon().getDamage()) { - damage = data.getWeaponClass().getMainWeapon().getDamage(); - } - ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, p); - } - } - } - - inkball.remove(); - } - if (i != tick) - PaintMgr.PaintHightestBlock(inkball.getLocation(), p, false, true); - if (inkball.isDead()) - cancel(); - i++; - } - }; + BukkitRunnable task = new BlasterTickRunnable(name, player, ball, vec, distick, () -> ball); task.runTaskTimer(Sclat.getPlugin(), 0, 1); } diff --git a/src/main/java/be4rjp/sclat/weapon/blaster/BlasterTickRunnable.java b/src/main/java/be4rjp/sclat/weapon/blaster/BlasterTickRunnable.java new file mode 100644 index 0000000..aaa1271 --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/blaster/BlasterTickRunnable.java @@ -0,0 +1,162 @@ +package be4rjp.sclat.weapon.blaster; + +import be4rjp.sclat.Sclat; +import be4rjp.sclat.api.SclatUtil; +import be4rjp.sclat.api.SimpleRunnable; +import be4rjp.sclat.api.Sphere; +import be4rjp.sclat.api.player.PlayerData; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.data.KasaData; +import be4rjp.sclat.data.SplashShieldData; +import be4rjp.sclat.manager.ArmorStandMgr; +import be4rjp.sclat.manager.PaintMgr; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; +import java.util.function.Supplier; + +public class BlasterTickRunnable extends BukkitRunnable { + int i = 0; + String name; + int tick; + Vector origvec; + Snowball inkball; + Player p; + Supplier snowballSupplier; + public BlasterTickRunnable(String name, Player player, Snowball inkball, Vector origvec, int tick, + Supplier snowballSupplier) { + this.name = name; + this.p = player; + this.inkball = inkball; + this.origvec = origvec; + this.tick = tick; + this.snowballSupplier = snowballSupplier; + } + @Override + public void run() { + PlayerData data = DataMgr.getPlayerData(p); + inkball = DataMgr.getMainSnowballNameMap().get(name); + + if (!inkball.equals(snowballSupplier.get())) { + i += DataMgr.getSnowballHitCount(name) - 1; + DataMgr.setSnowballHitCount(name, 0); + } + + org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(p).getTeam().getTeamColor().getWool() + .createBlockData(); + for (Player o_player : Sclat.getPlugin().getServer().getOnlinePlayers()) { + if (DataMgr.getPlayerData(o_player).getSettings().ShowEffect_MainWeaponInk()) + if (o_player.getWorld() == inkball.getWorld()) + if (o_player.getLocation() + .distanceSquared(inkball.getLocation()) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) + o_player.spawnParticle(org.bukkit.Particle.BLOCK_DUST, inkball.getLocation(), 1, 0, 0, 0, 1, + bd); + } + + if (i >= tick && !inkball.isDead()) { + // 半径 + double maxDist = data.getWeaponClass().getMainWeapon().getBlasterExHankei(); + + // 爆発音 + p.getWorld().playSound(inkball.getLocation(), Sound.ENTITY_FIREWORK_ROCKET_BLAST, 1, 1); + + // 爆発エフェクト + SclatUtil.createInkExplosionEffect(inkball.getLocation(), maxDist, 25, p); + + // バリアをはじく + SclatUtil.repelBarrier(inkball.getLocation(), maxDist, p); + + // 塗る + for (int i = 0; i <= maxDist - 1; i++) { + List p_locs = Sphere.getSphere(inkball.getLocation(), i, 20); + for (Location loc : p_locs) { + PaintMgr.Paint(loc, p, false); + PaintMgr.PaintHightestBlock(loc, p, false, false); + } + } + + // 攻撃判定の処理 + for (Entity as : p.getWorld().getEntities()) { + if (as instanceof ArmorStand) { + if (as.getCustomName() != null) { + if (as.getLocation().distanceSquared(inkball.getLocation()) <= maxDist * maxDist) { + try { + if (as.getCustomName().equals("Kasa")) { + KasaData kasaData = DataMgr.getKasaDataFromArmorStand((ArmorStand) as); + if (DataMgr.getPlayerData(kasaData.getPlayer()).getTeam() != DataMgr + .getPlayerData(p).getTeam()) { + inkball.remove(); + cancel(); + } + } else if (as.getCustomName().equals("SplashShield")) { + SplashShieldData splashShieldData = DataMgr + .getSplashShieldDataFromArmorStand((ArmorStand) as); + if (DataMgr.getPlayerData(splashShieldData.getPlayer()).getTeam() != DataMgr + .getPlayerData(p).getTeam()) { + inkball.remove(); + cancel(); + } + } + } catch (Exception e) { + } + } + } + } + } + + for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { + if (!DataMgr.getPlayerData(target).isInMatch()) + continue; + if (target.getLocation().distance(inkball.getLocation()) <= maxDist + 1) { + double damage = 10; + if (data.getWeaponClass().getMainWeapon().getIsManeuver()) + damage = data.getWeaponClass().getMainWeapon().getBlasterExDamage(); + else + damage = (maxDist + 1 - target.getLocation().distance(inkball.getLocation())) + * data.getWeaponClass().getMainWeapon().getBlasterExDamage(); + if (damage > data.getWeaponClass().getMainWeapon().getDamage()) { + damage = data.getWeaponClass().getMainWeapon().getDamage(); + } + if (DataMgr.getPlayerData(p).getTeam() != DataMgr.getPlayerData(target).getTeam() + && target.getGameMode().equals(GameMode.ADVENTURE)) { + SclatUtil.giveDamage(p, target, damage, "killed"); + + // AntiNoDamageTime + SimpleRunnable.runTaskLater(cancel -> { + target.setNoDamageTicks(0); + }, 1); + + } + } + } + + for (Entity as : p.getWorld().getEntities()) { + if (as instanceof ArmorStand) { + if (as.getLocation().distanceSquared(inkball.getLocation()) <= (maxDist + 1) * (maxDist + 1)) { + double damage = (maxDist + 1 - as.getLocation().distance(inkball.getLocation())) + * data.getWeaponClass().getMainWeapon().getBlasterExDamage(); + if (damage > data.getWeaponClass().getMainWeapon().getDamage()) { + damage = data.getWeaponClass().getMainWeapon().getDamage(); + } + ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, p); + } + } + } + + inkball.remove(); + } + if (i != tick) + PaintMgr.PaintHightestBlock(inkball.getLocation(), p, false, true); + if (inkball.isDead()) + cancel(); + i++; + } +} diff --git a/src/main/java/be4rjp/sclat/weapon/brush/Brush.java b/src/main/java/be4rjp/sclat/weapon/brush/Brush.java new file mode 100644 index 0000000..4c66b5e --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/brush/Brush.java @@ -0,0 +1,150 @@ +package be4rjp.sclat.weapon.brush; + +import be4rjp.dadadachecker.ClickType; +import be4rjp.sclat.Sclat; +import be4rjp.sclat.api.SimpleRunnable; +import be4rjp.sclat.api.player.PlayerData; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.weapon.Gear; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftSnowball; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +/** + * + * @author Be4rJP + */ +public class Brush { + public static void HoldRunnable(Player player) { + BukkitRunnable task = new BukkitRunnable() { + Player p = player; + @Override + public void run() { + PlayerData data = DataMgr.getPlayerData(p); + + data.setTick(data.getTick() + 1); + + if (!data.isInMatch() || !p.isOnline()) { + cancel(); + return; + } + + ClickType clickType = Sclat.dadadaCheckerAPI.getPlayerClickType(player); + + if (/* data.getTick() >= 6 */clickType == ClickType.NO_CLICK && data.isInMatch()) { + data.setTick(7); + data.setIsHolding(false); + data.setCanPaint(false); + data.setCanShoot(true); + } + } + }; + task.runTaskTimer(Sclat.getPlugin(), 0, 1); + } + + public static void RollPaintRunnable(Player player) { + BukkitRunnable task = new RollPaintRunnable(player); + if (DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getIsHude()) + task.runTaskTimer(Sclat.getPlugin(), 0, 1); + else + task.runTaskTimer(Sclat.getPlugin(), 0, 5); + } + + public static void ShootPaintRunnable(Player player) { + PlayerData pdata = DataMgr.getPlayerData(player); + if (pdata.getCanRollerShoot()) { + BukkitRunnable task = SimpleRunnable.from(cancel -> { + if (!DataMgr.getPlayerData(player).isInMatch() || !player.isOnline()) { + cancel.run(); + return; + } + pdata.setCanRollerShoot(true); + if (!player.getGameMode().equals(GameMode.ADVENTURE) + || player.getInventory().getItemInMainHand().getItemMeta().equals(Material.AIR)) + return; + if (player.getExp() >= pdata.getWeaponClass().getMainWeapon().getNeedInk()) + player.getWorld().playSound(player.getLocation(), Sound.ITEM_BUCKET_EMPTY, 1F, 1F); + else + return; + Vector vec = player.getLocation().getDirection() + .multiply(DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getShootSpeed()); + final double random = pdata.getWeaponClass().getMainWeapon().getHudeRandom(); + vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, + Math.random() * random - random / 2)); + for (int i = 0; i < pdata.getWeaponClass().getMainWeapon().getRollerShootQuantity(); i++) { + if (pdata.getWeaponClass().getMainWeapon().getIsHude()) + Brush.Shoot(player, vec); + else + Brush.Shoot(player, null); + } + // ShootRunnable(p); + pdata.setCanPaint(true); + + }); + task.runTaskLater(Sclat.getPlugin(), pdata.getWeaponClass().getMainWeapon().getShootTick()); + pdata.setCanRollerShoot(false); + } + } + + public static void Shoot(Player player, Vector v) { + + if (player.getGameMode() == GameMode.SPECTATOR) + return; + + PlayerData data = DataMgr.getPlayerData(player); + if (player.getExp() <= (float) (data.getWeaponClass().getMainWeapon().getNeedInk() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) + / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))) { + player.sendTitle("", ChatColor.RED + "インクが足りません", 0, 13, 2); + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); + return; + } + player.setExp(player.getExp() - (float) (data.getWeaponClass().getMainWeapon().getNeedInk() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) + / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))); + Snowball ball = player.launchProjectile(Snowball.class); + ((CraftSnowball) ball).getHandle().setItem(CraftItemStack + .asNMSCopy(new ItemStack(DataMgr.getPlayerData(player).getTeam().getTeamColor().getWool()))); + Vector vec = player.getLocation().getDirection() + .multiply(DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getShootSpeed()); + if (v != null) + vec = v; + double random = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getRandom(); + int distick = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getDistanceTick(); + if (!data.getWeaponClass().getMainWeapon().getIsHude()) { + if (player.isOnGround()) + vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, + Math.random() * random - random / 2)); + if (!player.isOnGround()) { + if (data.getWeaponClass().getMainWeapon().getCanTatehuri()) + vec.add(new Vector(Math.random() * random / 4 - random / 8, Math.random() * random, + Math.random() * random / 4 - random / 8)); + if (!data.getWeaponClass().getMainWeapon().getCanTatehuri()) + vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, + Math.random() * random - random / 2)); + // player.sendMessage(String.valueOf(player.isOnGround())); + } + } else { + vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 4 - random / 8, + Math.random() * random - random / 2)); + } + ball.setVelocity(vec); + ball.setShooter(player); + String name = String.valueOf(Sclat.getNotDuplicateNumber()); + DataMgr.mws.add(name); + ball.setCustomName(name); + DataMgr.getMainSnowballNameMap().put(name, ball); + DataMgr.setSnowballHitCount(name, 0); + + new BrushTickRunnable(name, player, ball, distick, () -> ball).runTaskTimer(Sclat.getPlugin(), 0, 1); + } + +} diff --git a/src/main/java/be4rjp/sclat/weapon/brush/BrushTickRunnable.java b/src/main/java/be4rjp/sclat/weapon/brush/BrushTickRunnable.java new file mode 100644 index 0000000..64d4f6c --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/brush/BrushTickRunnable.java @@ -0,0 +1,66 @@ +package be4rjp.sclat.weapon.brush; + +import be4rjp.sclat.Sclat; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.manager.PaintMgr; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.function.Supplier; + +public class BrushTickRunnable extends BukkitRunnable { + private int i = 0; + private final String name; + private int tick; + private Snowball inkball; + private final Player p; + private final Supplier snowballSupplier; + boolean addedFallVec = false; + Vector fallvec; + public BrushTickRunnable(String name, Player player, Snowball inkball, int tick, + Supplier snowballSupplier) { + this.name = name; + this.p = player; + this.tick = tick; + this.inkball = inkball; + this.snowballSupplier = snowballSupplier; + this.fallvec = new Vector(inkball.getVelocity().getX(), inkball.getVelocity().getY(), + inkball.getVelocity().getZ()) + .multiply(DataMgr.getPlayerData(p).getWeaponClass().getMainWeapon().getShootSpeed() / 17); + } + @Override + public void run() { + inkball = DataMgr.getMainSnowballNameMap().get(name); + + if (!inkball.equals(snowballSupplier.get())) { + i += DataMgr.getSnowballHitCount(name) - 1; + DataMgr.setSnowballHitCount(name, 0); + } + if (i != 0) { + for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { + if (target.getWorld() != p.getWorld()) + continue; + if (!DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) + continue; + org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(p).getTeam().getTeamColor().getWool() + .createBlockData(); + target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, inkball.getLocation(), 1, 0, 0, 0, 1, bd); + } + } + + if (i >= tick && !addedFallVec) { + inkball.setVelocity(fallvec); + addedFallVec = true; + } + if (i >= tick && i <= tick + 15) + inkball.setVelocity(inkball.getVelocity().add(new Vector(0, -0.1, 0))); + if (i != tick) + PaintMgr.PaintHightestBlock(inkball.getLocation(), p, true, true); + if (inkball.isDead()) + cancel(); + + i++; + } +} diff --git a/src/main/java/be4rjp/sclat/weapon/brush/RollPaintRunnable.java b/src/main/java/be4rjp/sclat/weapon/brush/RollPaintRunnable.java new file mode 100644 index 0000000..256e67e --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/brush/RollPaintRunnable.java @@ -0,0 +1,122 @@ +package be4rjp.sclat.weapon.brush; + +import be4rjp.dadadachecker.ClickType; +import be4rjp.sclat.Sclat; +import be4rjp.sclat.api.SclatUtil; +import be4rjp.sclat.api.player.PlayerData; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.manager.ArmorStandMgr; +import be4rjp.sclat.manager.PaintMgr; +import be4rjp.sclat.weapon.Gear; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +public class RollPaintRunnable extends BukkitRunnable { + private final Player player; + protected RollPaintRunnable(Player player) { + this.player = player; + } + @Override + public void run() { + try { + PlayerData data = DataMgr.getPlayerData(player); + if (!data.isInMatch() || !player.isOnline()) + cancel(); + + if (data.getIsHolding() && data.getCanPaint() && data.isInMatch() + && Sclat.dadadaCheckerAPI.getPlayerClickType(player) != ClickType.RENDA + && player.getGameMode() != GameMode.SPECTATOR) { + if (player.getExp() <= (float) (data.getWeaponClass().getMainWeapon().getRollerNeedInk() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) + / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))) { + player.sendTitle("", ChatColor.RED + "インクが足りません", 0, 13, 2); + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); + return; + } + player.setExp(player.getExp() - (float) (data.getWeaponClass().getMainWeapon().getRollerNeedInk() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) + / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))); + Vector locvec = player.getEyeLocation().getDirection(); + Location eloc = player.getEyeLocation(); + Vector vec = new Vector(locvec.getX(), 0, locvec.getZ()).normalize(); + // RayTrace rayTrace1 = new RayTrace(front.toVector(), vec1); + // ArrayList positions1 = + // rayTrace1.traverse(data.getWeaponClass().getMainWeapon().getRollerWidth(), + // 0.5); + Location front = eloc.add(vec.getX() * 2, -0.9, vec.getZ() * 2); + if (data.getWeaponClass().getMainWeapon().getIsHude()) + front = eloc.add(vec.getX() * 1.5, -0.9, vec.getZ() * 1.5); + org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(player).getTeam().getTeamColor().getWool() + .createBlockData(); + for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { + if (DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) + if (target.getWorld() == player.getWorld()) + if (target.getLocation().distanceSquared(front) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) + target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, front, 2, 0, 0, 0, 1, bd); + } + Vector vec1 = new Vector(vec.getZ() * -1, 0, vec.getX()); + Vector vec2 = new Vector(vec.getZ(), 0, vec.getX() * -1); + + // 筆系武器 + if (data.getWeaponClass().getMainWeapon().getIsHude()) { + Location position = player.getLocation(); + PaintMgr.PaintHightestBlock(front, player, false, true); + player.getLocation().getWorld().spawnParticle(org.bukkit.Particle.BLOCK_DUST, position, 2, 0, 0, 0, + 1, bd); + + for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { + if (DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) + if (target.getWorld() == player.getWorld()) + if (target.getLocation() + .distanceSquared(position) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) + target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, position, 2, 0, 0, 0, 1, bd); + } + + double maxDistSquad = 4 /* 2*2 */; + for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { + if (!DataMgr.getPlayerData(target).isInMatch()) + continue; + if (DataMgr.getPlayerData(player).getTeam() != DataMgr.getPlayerData(target).getTeam() + && target.getGameMode().equals(GameMode.ADVENTURE)) { + if (target.getLocation().distanceSquared(position) <= maxDistSquad) { + + double damage = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon() + .getRollerDamage(); + + SclatUtil.giveDamage(player, target, damage, "killed"); + } + } + } + + for (Entity as : player.getWorld().getEntities()) { + if (as instanceof ArmorStand) { + if (as.getCustomName() != null) { + if (as.getLocation().distanceSquared(position) <= maxDistSquad) { + double damage = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon() + .getRollerDamage(); + ArmorStandMgr.giveDamageArmorStand((ArmorStand) as, damage, player); + } + } + } + } + player.setWalkSpeed((float) (data.getWeaponClass().getMainWeapon().getUsingWalkSpeed() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP))); + return; + } + PaintMgr.PaintHightestBlock(eloc, player, false, true); + player.setWalkSpeed((float) (data.getWeaponClass().getMainWeapon().getUsingWalkSpeed() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP))); + } + + } catch (Exception e) { + cancel(); + } + } +} diff --git a/src/main/java/be4rjp/sclat/weapon/bucket/Bucket.java b/src/main/java/be4rjp/sclat/weapon/bucket/Bucket.java new file mode 100644 index 0000000..d3b5822 --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/bucket/Bucket.java @@ -0,0 +1,95 @@ + +package be4rjp.sclat.weapon.bucket; + +import be4rjp.sclat.Sclat; +import be4rjp.sclat.api.SimpleRunnable; +import be4rjp.sclat.api.player.PlayerData; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.weapon.Gear; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftSnowball; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +/** + * + * @author Be4rJP + */ +public class Bucket { + public static void ShootBucket(Player player) { + PlayerData data = DataMgr.getPlayerData(player); + if (data.getCanRollerShoot()) { + SimpleRunnable.runTaskLater(cancel -> { + PlayerData playerData = DataMgr.getPlayerData(player); + playerData.setCanRollerShoot(true); + }, data.getWeaponClass().getMainWeapon().getCoolTime()); + + // BukkitRunnable delay = new BukkitRunnable() { + // @Override + // public void run() { + // boolean sound = false; + // for (int i = 0; i < + // data.getWeaponClass().getMainWeapon().getRollerShootQuantity(); i++) { + // boolean is = Shoot(player, null); + // if (is) + // sound = true; + // } + // if (sound) + // player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); + // } + // }; + // delay.runTaskLater(Main.getPlugin(), + // data.getWeaponClass().getMainWeapon().getDelay()); + + new BucketShootRunnable(player, () -> Shoot(player, null)).runTaskTimer(Sclat.getPlugin(), 0, + data.getWeaponClass().getMainWeapon().getDelay()); + data.setCanRollerShoot(false); + } + } + + public static boolean Shoot(Player player, Vector v) { + + if (player.getGameMode() == GameMode.SPECTATOR) + return false; + + PlayerData data = DataMgr.getPlayerData(player); + if (player.getExp() <= (float) (data.getWeaponClass().getMainWeapon().getNeedInk() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) + / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))) { + player.sendTitle("", ChatColor.RED + "インクが足りません", 0, 13, 2); + return true; + } + player.setExp(player.getExp() - (float) (data.getWeaponClass().getMainWeapon().getNeedInk() + * Gear.getGearInfluence(player, Gear.Type.MAIN_SPEC_UP) + / Gear.getGearInfluence(player, Gear.Type.MAIN_INK_EFFICIENCY_UP))); + Snowball ball = player.launchProjectile(Snowball.class); + ((CraftSnowball) ball).getHandle().setItem(CraftItemStack + .asNMSCopy(new ItemStack(DataMgr.getPlayerData(player).getTeam().getTeamColor().getWool()))); + Vector vec = player.getLocation().getDirection() + .multiply(DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getShootSpeed()); + if (v != null) + vec = v; + double random = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getRandom(); + int distick = DataMgr.getPlayerData(player).getWeaponClass().getMainWeapon().getDistanceTick(); + vec.add(new Vector(Math.random() * random - random / 2, Math.random() * random / 1.5 - random / 3, + Math.random() * random - random / 2)); + ball.setVelocity(vec); + ball.setShooter(player); + String name = String.valueOf(Sclat.getNotDuplicateNumber()); + DataMgr.mws.add(name); + ball.setCustomName(name); + DataMgr.getMainSnowballNameMap().put(name, ball); + DataMgr.setSnowballHitCount(name, 0); + new BucketTickRunnable(name, player, ball, distick, () -> ball).runTaskTimer(Sclat.getPlugin(), 0, 1); + + return false; + } + + public static void BucketHealRunnable(Player player, int level) { + new BucketHealRunnable(player, level).runTaskTimer(Sclat.getPlugin(), 0, 1); + } +} diff --git a/src/main/java/be4rjp/sclat/weapon/bucket/BucketHealRunnable.java b/src/main/java/be4rjp/sclat/weapon/bucket/BucketHealRunnable.java new file mode 100644 index 0000000..4ae3f0a --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/bucket/BucketHealRunnable.java @@ -0,0 +1,46 @@ +package be4rjp.sclat.weapon.bucket; + +import be4rjp.sclat.Sclat; +import be4rjp.sclat.api.player.PlayerData; +import be4rjp.sclat.data.DataMgr; +import org.bukkit.GameMode; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +public class BucketHealRunnable extends BukkitRunnable { + private final Player p; + private final int level; + private int Ctime = 200; + private boolean bh_recharge = true; + public BucketHealRunnable(Player player, int level) { + this.p = player; + this.level = level; + } + + @Override + public void run() { + PlayerData data = DataMgr.getPlayerData(p); + if (level >= 1) { + Ctime = 100; + } + if (!data.isInMatch() || !p.isOnline()) { + cancel(); + return; + } + if (data.getIsSneaking() && bh_recharge && p.getGameMode().equals(GameMode.ADVENTURE)) { + p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, Ctime, level)); + p.getWorld().playSound(p.getLocation(), Sound.ITEM_TRIDENT_RETURN, 1.4F, 1.5F); + bh_recharge = false; + BukkitRunnable healtask = new BukkitRunnable() {// クールタイムを管理しています + @Override + public void run() { + bh_recharge = true; + } + }; + healtask.runTaskLater(Sclat.getPlugin(), Ctime); + } + } +} diff --git a/src/main/java/be4rjp/sclat/weapon/bucket/BucketShootRunnable.java b/src/main/java/be4rjp/sclat/weapon/bucket/BucketShootRunnable.java new file mode 100644 index 0000000..0b70b74 --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/bucket/BucketShootRunnable.java @@ -0,0 +1,35 @@ +package be4rjp.sclat.weapon.bucket; + +import be4rjp.sclat.api.player.PlayerData; +import be4rjp.sclat.data.DataMgr; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.function.Supplier; + +public class BucketShootRunnable extends BukkitRunnable { + private final Player player; + private final Supplier shootSupplier; + int c = 0; + boolean sound = false; + public BucketShootRunnable(Player player, Supplier shootSupplier) { + this.player = player; + this.shootSupplier = shootSupplier; + } + @Override + public void run() { + PlayerData data = DataMgr.getPlayerData(player); + c++; + int q = 2; + for (int i = 0; i < data.getWeaponClass().getMainWeapon().getRollerShootQuantity(); i++) { + boolean is = shootSupplier.get(); + if (is) + sound = true; + } + if (sound) + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1.63F); + if (c == q) + cancel(); + } +} diff --git a/src/main/java/be4rjp/sclat/weapon/bucket/BucketTickRunnable.java b/src/main/java/be4rjp/sclat/weapon/bucket/BucketTickRunnable.java new file mode 100644 index 0000000..4562ccd --- /dev/null +++ b/src/main/java/be4rjp/sclat/weapon/bucket/BucketTickRunnable.java @@ -0,0 +1,70 @@ +package be4rjp.sclat.weapon.bucket; + +import be4rjp.sclat.Sclat; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.manager.PaintMgr; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.function.Supplier; + +public class BucketTickRunnable extends BukkitRunnable { + int i = 0; + String name; + int tick; + Snowball inkball; + Player p; + Supplier snowballSupplier; + boolean addedFallVec = false; + Vector fallvec = new Vector(inkball.getVelocity().getX(), inkball.getVelocity().getY(), + inkball.getVelocity().getZ()) + .multiply(DataMgr.getPlayerData(p).getWeaponClass().getMainWeapon().getShootSpeed() / 17); + public BucketTickRunnable(String name, Player player, Snowball inkball, int tick, + Supplier snowballSupplier) { + this.name = name; + this.p = player; + this.inkball = inkball; + this.tick = tick; + this.snowballSupplier = snowballSupplier; + } + @Override + public void run() { + inkball = DataMgr.getMainSnowballNameMap().get(name); + + if (!inkball.equals(snowballSupplier.get())) { + i += DataMgr.getSnowballHitCount(name) - 1; + DataMgr.setSnowballHitCount(name, 0); + } + if (i != 0) { + for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { + if (target.getWorld() != p.getWorld()) + continue; + if (!DataMgr.getPlayerData(target).getSettings().ShowEffect_MainWeaponInk()) + continue; + if (target.getWorld() == inkball.getWorld()) { + if (target.getLocation() + .distanceSquared(inkball.getLocation()) < Sclat.PARTICLE_RENDER_DISTANCE_SQUARED) { + org.bukkit.block.data.BlockData bd = DataMgr.getPlayerData(p).getTeam().getTeamColor().getWool() + .createBlockData(); + target.spawnParticle(org.bukkit.Particle.BLOCK_DUST, inkball.getLocation(), 1, 0, 0, 0, 1, bd); + } + } + } + } + + if (i >= tick && !addedFallVec) { + inkball.setVelocity(fallvec); + addedFallVec = true; + } + if (i >= tick && i <= tick + 15) + inkball.setVelocity(inkball.getVelocity().add(new Vector(0, -0.1, 0))); + if (i != tick) + PaintMgr.PaintHightestBlock(inkball.getLocation(), p, true, true); + if (inkball.isDead()) + cancel(); + + i++; + } +} diff --git a/src/main/java/be4rjp/sclat/weapon/Buckler.java b/src/main/java/be4rjp/sclat/weapon/buckler/Buckler.java similarity index 97% rename from src/main/java/be4rjp/sclat/weapon/Buckler.java rename to src/main/java/be4rjp/sclat/weapon/buckler/Buckler.java index 259b2fc..c13cad6 100644 --- a/src/main/java/be4rjp/sclat/weapon/Buckler.java +++ b/src/main/java/be4rjp/sclat/weapon/buckler/Buckler.java @@ -1,4 +1,4 @@ -package be4rjp.sclat.weapon; +package be4rjp.sclat.weapon.buckler; import be4rjp.sclat.Sclat; import be4rjp.sclat.api.player.PlayerData; diff --git a/src/main/java/be4rjp/sclat/weapon/listener/SnowballListener.java b/src/main/java/be4rjp/sclat/weapon/listener/SnowballListener.java index 86bdd0b..c94c09a 100644 --- a/src/main/java/be4rjp/sclat/weapon/listener/SnowballListener.java +++ b/src/main/java/be4rjp/sclat/weapon/listener/SnowballListener.java @@ -10,9 +10,9 @@ import be4rjp.sclat.manager.ArmorStandMgr; import be4rjp.sclat.manager.PaintMgr; import be4rjp.sclat.manager.SPWeaponMgr; -import be4rjp.sclat.weapon.Blaster; import be4rjp.sclat.weapon.Funnel; import be4rjp.sclat.weapon.Gear; +import be4rjp.sclat.weapon.blaster.Blaster; import net.minecraft.server.v1_15_R1.PacketPlayOutEntityDestroy; import net.minecraft.server.v1_15_R1.PlayerConnection; import org.bukkit.GameMode;