9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2025-12-30 20:39:18 +00:00
This commit is contained in:
XiaoMoMi
2024-01-20 20:33:22 +08:00
parent 05dcc32bdc
commit 35b24a693b
4 changed files with 55 additions and 5 deletions

View File

@@ -17,9 +17,11 @@
package net.momirealms.customfishing.mechanic.fishing;
import com.comphenix.protocol.events.PacketContainer;
import com.destroystokyo.paper.event.player.PlayerJumpEvent;
import de.tr7zw.changeme.nbtapi.NBTCompound;
import de.tr7zw.changeme.nbtapi.NBTItem;
import io.lumine.mythic.lib.api.event.AttackEvent;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.sound.Sound;
import net.momirealms.customfishing.CustomFishingPluginImpl;
@@ -157,10 +159,11 @@ public class FishingManagerImpl implements Listener, FishingManager {
}
/**
* Known bug: When you fish, both left click air and right click air
* Known bug: This is a Minecraft packet limitation
* When you fish, both left click air and right click air
* are triggered. And you can't cancel the left click event.
*/
@EventHandler
@EventHandler (ignoreCancelled = false)
public void onLeftClick(PlayerInteractEvent event) {
if (event.getAction() != Action.LEFT_CLICK_AIR)
return;
@@ -175,9 +178,8 @@ public class FishingManagerImpl implements Listener, FishingManager {
}
}
@EventHandler
@EventHandler (ignoreCancelled = true)
public void onSwapHand(PlayerSwapHandItemsEvent event) {
if (event.isCancelled()) return;
GamingPlayer gamingPlayer = gamingPlayerMap.get(event.getPlayer().getUniqueId());
if (gamingPlayer != null) {
if (gamingPlayer.onSwapHand())

View File

@@ -504,11 +504,13 @@ public class GameManagerImpl implements GameManager {
var title = section.getString("title","<red>{click}");
var subtitle = section.getString("subtitle", "<gray>Click <white>{clicks} <gray>times to win. Time left <white>{time}s");
var left = section.getBoolean("left-click", true);
return (player, fishHook, settings) -> new AbstractGamingPlayer(player, fishHook, settings) {
private int clickedTimes;
private final int requiredTimes = settings.getDifficulty();
private boolean preventFirst = true;
@Override
public void arrangeTask() {
@@ -522,6 +524,11 @@ public class GameManagerImpl implements GameManager {
@Override
public boolean onRightClick() {
if (left) {
setGameResult(false);
endGame();
return true;
}
clickedTimes++;
if (clickedTimes >= requiredTimes) {
setGameResult(true);
@@ -530,6 +537,23 @@ public class GameManagerImpl implements GameManager {
return true;
}
@Override
public boolean onLeftClick() {
if (!left) {
return false;
}
if (preventFirst) {
preventFirst = false;
return false;
}
clickedTimes++;
if (clickedTimes >= requiredTimes) {
setGameResult(true);
endGame();
}
return false;
}
public void showUI() {
AdventureManagerImpl.getInstance().sendTitle(
player,
@@ -722,6 +746,8 @@ public class GameManagerImpl implements GameManager {
var barImage = section.getString("subtitle.bar");
var tip = section.getString("tip");
var left = section.getBoolean("left-click", true);
return (player, fishHook, settings) -> new AbstractGamingPlayer(player, fishHook, settings) {
private double hold_time;
private double judgement_position;
@@ -731,6 +757,7 @@ public class GameManagerImpl implements GameManager {
private int timer;
private final int time_requirement = timeRequirements[ThreadLocalRandom.current().nextInt(timeRequirements.length)] * 1000;
private boolean played;
private boolean preventFirst = true;
@Override
public void arrangeTask() {
@@ -814,11 +841,29 @@ public class GameManagerImpl implements GameManager {
@Override
public boolean onRightClick() {
if (left) {
setGameResult(false);
endGame();
return true;
}
played = true;
fish_velocity = pullingStrength;
return true;
}
@Override
public boolean onLeftClick() {
if (preventFirst) {
preventFirst = false;
return false;
}
if (left) {
played = true;
fish_velocity = pullingStrength;
}
return false;
}
public void showUI() {
String bar = FontUtils.surroundWithFont(barImage, font)
+ OffsetUtils.getOffsetChars((int) (judgementAreaOffset + judgement_position))