RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
HarvestingSkillAction.java
1package com.osroyale.content.skill.impl;
2
3import com.google.common.base.Preconditions;
4import com.osroyale.net.packet.out.SendMessage;
5import com.osroyale.game.action.Action;
6import com.osroyale.game.action.policy.WalkablePolicy;
7import com.osroyale.game.world.entity.mob.Mob;
8import com.osroyale.game.world.entity.mob.player.Player;
9import com.osroyale.content.skill.SkillAction;
10import com.osroyale.game.world.items.Item;
11import com.osroyale.game.world.position.Position;
12import com.osroyale.util.RandomGen;
13import com.osroyale.util.StringUtils;
14
15import java.util.Optional;
16
42
43public abstract class HarvestingSkillAction extends SkillAction {
44
48public enum DoubleReward {
49 NONE, ITEM, EXPERIENCE, ALL
50 }
51
58 private static final int SUCCESS_FACTOR = 10;
59
63 private final RandomGen random = new RandomGen();
64
72 public HarvestingSkillAction(Mob mob, Optional<Position> position, boolean instant) {
73 super(mob, position, instant);
74 }
75
84 public HarvestingSkillAction(Mob mob, Optional<Position> position, int delay, boolean instant) {
85 super(mob, position, delay, instant);
86 }
87
94 public void onHarvest(Item[] items, boolean success) {
95
96 }
97
104 return DoubleReward.NONE;
105 }
106
113 public abstract double successFactor();
114
120 public abstract Optional<Item[]> removeItems();
121
127 public abstract Item[] harvestItems();
128
129 @Override
130 public final boolean canRun() {
131 if (getMob().isPlayer()) {
132 Player player = getMob().getPlayer();
133 if (getMob().isPlayer() && getMob().getPlayer().inventory.remaining() < 1) {
134 getMob().getPlayer().send(new SendMessage("You do not have any space left in your inventory."));
135 return false;
136 }
137 if (removeItems().isPresent()) {
138 Item[] remove = removeItems().get();
139
140 if (!player.inventory.containsAll(remove)) {
141 for (Item item : remove) {
142 if (!player.inventory.contains(item)) {
143 player.send(new SendMessage("You don't have " + StringUtils.appendIndefiniteArticle(item.getName() + ".")));
144 break;
145 }
146 }
147 return false;
148 }
149 }
150 }
151 return true;
152 }
153
154 @Override
155 public void onExecute() {
156 Preconditions.checkState(SUCCESS_FACTOR >= 0 && SUCCESS_FACTOR <= 99, "Invalid success factor for harvesting!");
157 int factor = (getMob().skills.getSkills()[skill()].getLevel() / SUCCESS_FACTOR);
158 double boost = (factor * 0.01);
159 if (random.success(successFactor() + boost)) {
160 Optional<Item[]> removeItems = removeItems();
161 Item[] harvestItems = harvestItems();
162
163 if (getMob().isPlayer()) {
164 removeItems.ifPresent(getMob().getPlayer().inventory::removeAll);
165 if (harvestItems != null)
166 getMob().getPlayer().inventory.addAll(harvestItems);
167 if (experience() != -1)
168 getMob().skills.addExperience(skill(), experience());
169 onHarvest(harvestItems, true);
170
171 if (doubleReward() == DoubleReward.ITEM) {
172 getMob().getPlayer().inventory.addAll(harvestItems);
173 } else if (doubleReward() == DoubleReward.EXPERIENCE) {
174 getMob().skills.addExperience(skill(), experience());
175 } else if (doubleReward() == DoubleReward.ALL) {
176 getMob().getPlayer().inventory.addAll(harvestItems);
177 getMob().skills.addExperience(skill(), experience());
178 }
179 }
180 } else {
181 onHarvest(null, false);
182 }
183 }
184
192 @Override
193 public boolean prioritized() {
194 return false;
195 }
196
202 @Override
206}
SkillAction(Mob mob, Optional< Position > position, int delay, boolean instant)
HarvestingSkillAction(Mob mob, Optional< Position > position, int delay, boolean instant)
HarvestingSkillAction(Mob mob, Optional< Position > position, boolean instant)
static String appendIndefiniteArticle(String thing)