RuneHive-Game
Loading...
Searching...
No Matches
Fishing.java
Go to the documentation of this file.
1package com.runehive.content.skill.impl.fishing;
2
3import com.runehive.content.event.impl.NpcInteractionEvent;
4import com.runehive.content.skill.SkillRepository;
5import com.runehive.game.world.entity.mob.npc.Npc;
6import com.runehive.game.world.entity.mob.player.Player;
7import com.runehive.game.world.entity.skill.Skill;
8import com.runehive.game.world.items.Item;
9import com.runehive.game.world.items.ItemDefinition;
10import com.runehive.util.Utility;
11
12/**
13 * Handles the fishing skill.
14 *
15 * @author Daniel
16 */
17public class Fishing extends Skill {
18
19 public Fishing(int level, double experience) {
20 super(Skill.FISHING, level, experience);
21 }
22 public static double getBonus(Player player) {
23 double bonus = 0;
24 if(player.equipment.getId(0) == 13258)
25 bonus += 0.4;
26 if(player.equipment.getId(4) == 13259)
27 bonus += 0.8;
28 if(player.equipment.getId(7) == 13260)
29 bonus += 0.6;
30 if(player.equipment.getId(10) == 13261)
31 bonus += 0.2;
32
33 if(player.equipment.containsAll(13258, 13259, 13260, 13261))
34 bonus = 2.5;
35
36 return bonus;
37 }
38
39
40
41 static boolean canFish(Player player, Fishable fish, boolean message) {
42 if (player.skills.get(Skill.FISHING).getLevel() < fish.getRequiredLevel()) {
43 if (message) player.message("You need a fishing level of " + fish.getRequiredLevel() + " to fish here.");
44 return false;
45 }
46 return hasFishingItems(player, fish, message);
47 }
48
49 private static boolean hasFishingItems(Player player, Fishable fish, boolean message) {
50 int tool = fish.getToolId();
51 int bait = fish.getBaitRequired();
52 boolean hasDragonHarpoon;
53 if (tool == 311) {
54 hasDragonHarpoon = player.inventory.contains(new Item(21028, 1));
55 if (!player.inventory.contains(new Item(tool, 1)) && !hasDragonHarpoon) {
56 String name = ItemDefinition.get(tool).getName();
57 player.message("You need " + Utility.getAOrAn(name) + " " + name + " to fish here.");
58 return false;
59 }
60 } else {
61 if (!player.inventory.contains(new Item(tool, 1)) && message) {
62 String name = ItemDefinition.get(tool).getName();
63 player.message("You need " + Utility.getAOrAn(name) + " " + name + " to fish here.");
64 return false;
65 }
66 }
67 if (bait > -1 && !player.inventory.contains(new Item(bait, 1))) {
68 String name = ItemDefinition.get(bait).getName();
69 if (message) {
70 player.message("You need " + Utility.getAOrAn(name) + " " + name + " to fish here.");
71 }
72 return false;
73 }
74 return true;
75 }
76
77 public static boolean success(Player player, Fishable fish) {
78 var usingDragonHarpoon = (player.inventory.contains(new Item(21028, 1))
79 || player.equipment.contains(new Item(21028, 1))) && player.skills.get(Skill.FISHING).getLevel() > 60;
80 if (usingDragonHarpoon && (fish.getToolId() == 311 || fish.getToolId() == 21028)) {
81 return SkillRepository.isSuccess(player, Skill.FISHING, fish.getRequiredLevel(), true);
82 }
83 return SkillRepository.isSuccess(player, Skill.FISHING, fish.getRequiredLevel(), false);
84 }
85
86 @Override
87 protected boolean clickNpc(Player player, NpcInteractionEvent event) {
88 Npc npc = event.getNpc();
89 int opcode = event.getOpcode();
90 FishingSpot spot = FishingSpot.forId(npc.id);
91
92 if (spot == null) {
93 return false;
94 }
95 if (player.skills.get(Skill.FISHING).isDoingSkill()) {
96 return true;
97 }
98
99 int amount = 0;
100 Fishable[] fish;
101 Fishable[] fishable = new Fishable[3];
102
103 switch (opcode) {
104 case 0:
105 fish = spot.getFirstOption();
106 for (int i = 0; i < fish.length; i++) {
107 if (canFish(player, fish[i], i == 0)) {
108 fishable[i] = fish[i];
109 amount++;
110 }
111 }
112 break;
113 case 1:
114 fish = spot.getSecondOption();
115 for (int i = 0; i < fish.length; i++) {
116 if (canFish(player, fish[i], i == 0)) {
117 fishable[i] = fish[i];
118 amount++;
119 }
120 }
121 }
122
123 if (amount == 0)
124 return true;
125
126 Fishable[] fishing = new Fishable[amount];
127 System.arraycopy(fishable, 0, fishing, 0, amount);
128 start(player, fishing, 0);
129 return true;
130 }
131
132 public void start(Player player, Fishable[] fishing, int option) {
133 if (fishing == null || fishing[option] == null || fishing[option].getToolId() == -1) {
134 return;
135 }
136
137 FishingTool tool = FishingTool.forId(fishing[option].getToolId());
138
139 if (!hasFishingItems(player, fishing[option], true)) {
140 return;
141 }
142
143 player.action.execute(new FishingAction(player, tool, fishing));
144 player.skills.get(Skill.FISHING).setDoingSkill(true);
145 }
146}
static boolean isSuccess(int skill, int levelRequired)
static boolean success(Player player, Fishable fish)
Definition Fishing.java:77
static double getBonus(Player player)
Definition Fishing.java:22
static boolean canFish(Player player, Fishable fish, boolean message)
Definition Fishing.java:41
Fishing(int level, double experience)
Definition Fishing.java:19
void start(Player player, Fishable[] fishing, int option)
Definition Fishing.java:132
static boolean hasFishingItems(Player player, Fishable fish, boolean message)
Definition Fishing.java:49
boolean clickNpc(Player player, NpcInteractionEvent event)
Definition Fishing.java:87
public< A extends Action<?> > void execute(A action)
Represents a non-player character in the in-game world.
Definition Npc.java:29
This class represents a character controlled by a player.
Definition Player.java:125
double experience
The current skill experience.
Definition Skill.java:179
int getLevel()
Gets the current skill level.
Definition Skill.java:205
int level
The current level of the skill.
Definition Skill.java:173
void setDoingSkill(boolean doingSkill)
Definition Skill.java:489
Skill(int skill, int level, double experience)
Constructs a new Skill.
Definition Skill.java:184
Skill get(int id)
Gets the skill for an id.
Represents all of an in-game Item's attributes.
static ItemDefinition get(int id)
Gets an item definition.
The container class that represents an item that can be interacted with.
Definition Item.java:21
final int getId(int index)
Gets the item id located on index.
boolean contains(int id)
Determines if this container contains id.
final boolean containsAll(int... identifiers)
Determines if this container contains all identifiers.
boolean contains(int[] bowsWithNoArrowsRequired)
Handles miscellaneous methods.
Definition Utility.java:27
static String getAOrAn(String nextWord)
A or an.
Definition Utility.java:116