From 348c7bc2d6fede280e3edb9f9eab819a9ebf4640 Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Thu, 27 Oct 2022 16:22:28 +0800 Subject: [PATCH] 1.2.3 --- build.gradle | 2 +- .../customfishing/manager/BagDataManager.java | 4 +- .../customfishing/manager/BonusManager.java | 1 + .../customfishing/manager/ConfigManager.java | 15 ++++++- .../customfishing/manager/FishingManager.java | 5 +-- .../customfishing/manager/SellManager.java | 2 + .../customfishing/object/Function.java | 4 +- .../object/fishing/BobberCheckTask.java | 30 ++++++++----- .../object/fishing/FishingPlayer.java | 15 +++---- .../customfishing/util/ArmorStandUtil.java | 45 +++++++++++++++++-- .../customfishing/util/FakeItemUtil.java | 2 - src/main/resources/baits/default.yml | 2 +- src/main/resources/config.yml | 16 ++++++- src/main/resources/utils/splash_items.yml | 6 +++ 14 files changed, 111 insertions(+), 38 deletions(-) create mode 100644 src/main/resources/utils/splash_items.yml diff --git a/build.gradle b/build.gradle index d1964963..5753c672 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '1.2.2' +version = '1.2.3' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java b/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java index 9d938b01..7fa45509 100644 --- a/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java @@ -45,10 +45,10 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; -import java.util.*; +import java.util.HashSet; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class BagDataManager extends Function { diff --git a/src/main/java/net/momirealms/customfishing/manager/BonusManager.java b/src/main/java/net/momirealms/customfishing/manager/BonusManager.java index c44cbe8b..67ac2c05 100644 --- a/src/main/java/net/momirealms/customfishing/manager/BonusManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/BonusManager.java @@ -73,6 +73,7 @@ public class BonusManager extends Function { if (!util_file.mkdir()) return; CustomFishing.plugin.saveResource("utils" + File.separator + "fishfinder.yml", false); CustomFishing.plugin.saveResource("utils" + File.separator + "totem_items.yml", false); + CustomFishing.plugin.saveResource("utils" + File.separator + "splash_items.yml", false); } File[] files = util_file.listFiles(); if (files == null) return; diff --git a/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java b/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java index cadbdc32..732a9ffa 100644 --- a/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java @@ -17,8 +17,6 @@ package net.momirealms.customfishing.manager; -import net.momirealms.customfishing.integration.VaultHook; -import net.momirealms.customfishing.util.AdventureUtil; import net.momirealms.customfishing.util.ConfigUtil; import net.momirealms.customfishing.util.JedisUtil; import org.bukkit.Bukkit; @@ -63,6 +61,12 @@ public class ConfigManager { public static boolean useRedis; public static int lavaMaxTime; public static int lavaMinTime; + public static boolean enableWaterAnimation; + public static boolean enableLavaAnimation; + public static String water_item; + public static String lava_item; + public static int water_time; + public static int lava_time; public static boolean addTagToFish; public static boolean logEarning; public static boolean vaultHook; @@ -119,6 +123,13 @@ public class ConfigManager { failureFadeStay = config.getInt("titles.failure.fade.stay", 30) * 50; failureFadeOut = config.getInt("titles.failure.fade.out", 10) * 50; + enableWaterAnimation = config.getBoolean("mechanics.splash-animation.water.enable", false); + enableLavaAnimation = config.getBoolean("mechanics.splash-animation.lava.enable", false); + water_item = config.getString("mechanics.splash-animation.water.item"); + lava_item = config.getString("mechanics.splash-animation.lava.item"); + water_time = config.getInt("mechanics.splash-animation.water.time"); + lava_time = config.getInt("mechanics.splash-animation.lava.time"); + lavaMinTime = config.getInt("mechanics.lava-fishing.min-wait-time", 100); lavaMaxTime = config.getInt("mechanics.lava-fishing.max-wait-time", 600) - lavaMinTime; diff --git a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java index 343e50ba..12b68c15 100644 --- a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java @@ -450,9 +450,6 @@ public class FishingManager extends Function { Competition.currentCompetition.getBossBarManager().tryJoin(player); } - ItemStackUtil.addExtraMeta(drop, droppedItem); - if (ConfigManager.addTagToFish) ItemStackUtil.addIdentifier(drop, "loot", droppedItem.getKey()); - dropItem(player, location, fishResultEvent.isDouble(), drop); for (ActionInterface action : droppedItem.getSuccessActions()) action.doOn(player, null); @@ -470,6 +467,8 @@ public class FishingManager extends Function { ItemStackUtil.addRandomDamage(drop); if (ConfigManager.preventPickUp) ItemStackUtil.addOwner(drop, player.getName()); + ItemStackUtil.addExtraMeta(drop, droppedItem); + if (ConfigManager.addTagToFish) ItemStackUtil.addIdentifier(drop, "loot", droppedItem.getKey()); } return drop; } diff --git a/src/main/java/net/momirealms/customfishing/manager/SellManager.java b/src/main/java/net/momirealms/customfishing/manager/SellManager.java index 63edcab8..234b5626 100644 --- a/src/main/java/net/momirealms/customfishing/manager/SellManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/SellManager.java @@ -358,6 +358,8 @@ public class SellManager extends Function { .setVariable("size", size); price = (float) expression.evaluate(); } + Double money = Optional.ofNullable(nbtItem.getDouble("Price")).orElse(0d); + price += money; if (price == 0) { price = Optional.ofNullable(vanillaPrices.get(itemStack.getType())).orElse(0f); } diff --git a/src/main/java/net/momirealms/customfishing/object/Function.java b/src/main/java/net/momirealms/customfishing/object/Function.java index dc972a1d..c09168cb 100644 --- a/src/main/java/net/momirealms/customfishing/object/Function.java +++ b/src/main/java/net/momirealms/customfishing/object/Function.java @@ -19,7 +19,9 @@ package net.momirealms.customfishing.object; import com.comphenix.protocol.events.PacketContainer; import org.bukkit.entity.Player; -import org.bukkit.event.inventory.*; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerInteractEvent; public class Function { diff --git a/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java b/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java index d281893c..54c8c73e 100644 --- a/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java +++ b/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java @@ -17,16 +17,15 @@ package net.momirealms.customfishing.object.fishing; -import com.plotsquared.core.plot.PlotId; import net.kyori.adventure.key.Key; import net.kyori.adventure.sound.Sound; import net.momirealms.customfishing.CustomFishing; import net.momirealms.customfishing.manager.ConfigManager; import net.momirealms.customfishing.manager.FishingManager; import net.momirealms.customfishing.manager.LootManager; -import net.momirealms.customfishing.manager.MessageManager; import net.momirealms.customfishing.object.loot.Loot; import net.momirealms.customfishing.util.AdventureUtil; +import net.momirealms.customfishing.util.ArmorStandUtil; import net.momirealms.customfishing.util.FakeItemUtil; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -34,11 +33,9 @@ import org.bukkit.Material; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.FishHook; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.Vector; -import org.jetbrains.annotations.Nullable; import java.lang.reflect.InvocationTargetException; import java.util.List; @@ -52,15 +49,16 @@ public class BobberCheckTask extends BukkitRunnable { private final Bonus bonus; private final FishingManager fishingManager; private boolean hooked; - private boolean first_time; + private boolean reserve; private int jump_timer; private final int lureLevel; private BukkitTask cache_1; private BukkitTask cache_2; private BukkitTask cache_3; private ArmorStand entityCache; - private int entityID; + private final int entityID; private boolean land; + private boolean first; public BobberCheckTask(Player player, Bonus bonus, FishHook fishHook, FishingManager fishingManager, int lureLevel, int entityID) { this.fishHook = fishHook; @@ -68,11 +66,12 @@ public class BobberCheckTask extends BukkitRunnable { this.player = player; this.timer = 0; this.bonus = bonus; - this.first_time = true; + this.reserve = true; this.jump_timer = 0; this.lureLevel = lureLevel; this.entityID = entityID; this.land = false; + this.first = true; } @Override @@ -100,6 +99,10 @@ public class BobberCheckTask extends BukkitRunnable { stop(); return; } + if (first) { + ArmorStandUtil.sendAnimationToPlayer(fishHook.getLocation(), player, ConfigManager.lava_item, ConfigManager.lava_time); + first = false; + } if (hooked) { jump_timer++; if (jump_timer < 4) { @@ -109,13 +112,13 @@ public class BobberCheckTask extends BukkitRunnable { fishHook.setVelocity(new Vector(0,0.24,0)); return; } - if (first_time) { - if (jump_timer < 8) { + if (reserve) { + if (jump_timer < 5) { jump_timer++; - fishHook.setVelocity(new Vector(0,0.18 - jump_timer * 0.01,0)); + fishHook.setVelocity(new Vector(0,0.2 - jump_timer * 0.02,0)); return; } - first_time = false; + reserve = false; randomTime(); spawnArmorStand(fishHook.getLocation()); } @@ -126,6 +129,9 @@ public class BobberCheckTask extends BukkitRunnable { Bukkit.getScheduler().runTaskAsynchronously(CustomFishing.plugin, () -> { List possibleLoots = fishingManager.getPossibleLootList(new FishingCondition(fishHook.getLocation(), player), false, LootManager.WATERLOOTS.values()); fishingManager.getNextLoot(player, bonus, possibleLoots); + if (ConfigManager.enableWaterAnimation) { + ArmorStandUtil.sendAnimationToPlayer(fishHook.getLocation(), player, ConfigManager.water_item, ConfigManager.water_time); + } }); return; } @@ -184,7 +190,7 @@ public class BobberCheckTask extends BukkitRunnable { }, random); cache_2 = Bukkit.getScheduler().runTaskLater(CustomFishing.plugin, () -> { hooked = false; - first_time = true; + reserve = true; }, random + 40); cache_3 = new LavaEffect(fishHook.getLocation()).runTaskTimerAsynchronously(CustomFishing.plugin,random - 60,1); } diff --git a/src/main/java/net/momirealms/customfishing/object/fishing/FishingPlayer.java b/src/main/java/net/momirealms/customfishing/object/fishing/FishingPlayer.java index 49cca6d3..845ecf2f 100644 --- a/src/main/java/net/momirealms/customfishing/object/fishing/FishingPlayer.java +++ b/src/main/java/net/momirealms/customfishing/object/fishing/FishingPlayer.java @@ -83,7 +83,12 @@ public class FishingPlayer extends BukkitRunnable { internalTimer++; return; } else { - progress = getNextProgress(progress, face); + if (face) { + progress += difficulty.speed(); + } + else { + progress -= difficulty.speed(); + } if (progress > size) { face = !face; progress = 2 * size - progress; @@ -112,14 +117,6 @@ public class FishingPlayer extends BukkitRunnable { } } - private int getNextProgress(int i, boolean face) { - if (face) { - return i + difficulty.speed(); - } - else { - return i - difficulty.speed(); - } - } public boolean isSuccess() { int last = progress / range; diff --git a/src/main/java/net/momirealms/customfishing/util/ArmorStandUtil.java b/src/main/java/net/momirealms/customfishing/util/ArmorStandUtil.java index ef480354..55557de2 100644 --- a/src/main/java/net/momirealms/customfishing/util/ArmorStandUtil.java +++ b/src/main/java/net/momirealms/customfishing/util/ArmorStandUtil.java @@ -19,16 +19,22 @@ package net.momirealms.customfishing.util; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers; +import com.comphenix.protocol.wrappers.Pair; import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedDataWatcher; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.momirealms.customfishing.CustomFishing; +import net.momirealms.customfishing.manager.BonusManager; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.lang.reflect.InvocationTargetException; +import java.util.*; public class ArmorStandUtil { @@ -85,4 +91,35 @@ public class ArmorStandUtil { wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(3, serializer1), true); return wrappedDataWatcher; } -} + + public static PacketContainer getEquipPacket(int id, ItemStack itemStack) { + PacketContainer equipPacket = new PacketContainer(PacketType.Play.Server.ENTITY_EQUIPMENT); + equipPacket.getIntegers().write(0, id); + List> pairs = new ArrayList<>(); + pairs.add(new Pair<>(EnumWrappers.ItemSlot.HEAD, itemStack)); + equipPacket.getSlotStackPairLists().write(0, pairs); + return equipPacket; + } + + public static void sendAnimationToPlayer(Location location, Player player, String item, int time) { + int id = new Random().nextInt(100000000); + ItemStack itemStack = BonusManager.UTILITEMS.get(item); + if (itemStack == null) return; + try { + CustomFishing.protocolManager.sendServerPacket(player, getSpawnPacket(id, location.clone().subtract(0,1,0))); + CustomFishing.protocolManager.sendServerPacket(player, getMetaPacket(id)); + CustomFishing.protocolManager.sendServerPacket(player, getEquipPacket(id, itemStack)); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } + Bukkit.getScheduler().runTaskLaterAsynchronously(CustomFishing.plugin, () -> { + try { + CustomFishing.protocolManager.sendServerPacket(player, getDestroyPacket(id)); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } + }, time); + } +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customfishing/util/FakeItemUtil.java b/src/main/java/net/momirealms/customfishing/util/FakeItemUtil.java index 4d7fa212..a3c24b5a 100644 --- a/src/main/java/net/momirealms/customfishing/util/FakeItemUtil.java +++ b/src/main/java/net/momirealms/customfishing/util/FakeItemUtil.java @@ -3,13 +3,11 @@ package net.momirealms.customfishing.util; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedDataWatcher; -import io.lumine.mythic.api.packs.Pack; import org.bukkit.Location; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import java.util.ArrayList; import java.util.List; import java.util.UUID; diff --git a/src/main/resources/baits/default.yml b/src/main/resources/baits/default.yml index b08b3794..0f788ca2 100644 --- a/src/main/resources/baits/default.yml +++ b/src/main/resources/baits/default.yml @@ -29,6 +29,6 @@ magnet_bait: - 'Increases the probability of better loots by 15%.' custom-model-data: 695 modifier: - weight-MQ: + weight-multiply: silver: 1.15 gold: 1.15 \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index f70200b8..35abdc3d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ # don't change -config-version: '10' +config-version: '11' # chinese/english/spanish lang: english @@ -103,6 +103,20 @@ mechanics: # ticks min-wait-time: 100 max-wait-time: 600 + # Splash effect when the bobber falls into water + # 鱼钩落水时的水花飞溅效果 + splash-animation: + water: + enable: true + # config the item in utils + item: water_effect + # ticks + time: 25 + lava: + enable: true + item: lava_effect + # ticks + time: 25 # Fishing result titles titles: diff --git a/src/main/resources/utils/splash_items.yml b/src/main/resources/utils/splash_items.yml new file mode 100644 index 00000000..bfea0fc5 --- /dev/null +++ b/src/main/resources/utils/splash_items.yml @@ -0,0 +1,6 @@ +water_effect: + material: PAPER + custom-model-data: 888 +lava_effect: + material: PAPER + custom-model-data: 889 \ No newline at end of file