RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
Runecraft.java
1package com.osroyale.content.skill.impl.runecrafting;
2
3import com.osroyale.Config;
4import com.osroyale.content.achievement.AchievementHandler;
5import com.osroyale.content.achievement.AchievementKey;
6import com.osroyale.content.activity.randomevent.RandomEventHandler;
7import com.osroyale.content.clanchannel.content.ClanTaskKey;
8import com.osroyale.content.event.impl.ItemInteractionEvent;
9import com.osroyale.content.event.impl.ObjectInteractionEvent;
10import com.osroyale.content.pet.PetData;
11import com.osroyale.content.pet.Pets;
12import com.osroyale.game.Animation;
13import com.osroyale.game.Graphic;
14import com.osroyale.game.world.World;
15import com.osroyale.game.world.entity.mob.player.Player;
16import com.osroyale.game.world.entity.skill.Skill;
17import com.osroyale.game.world.items.Item;
18import com.osroyale.game.world.object.GameObject;
19import com.osroyale.net.packet.out.SendMessage;
20import com.osroyale.util.Utility;
21
57
58public class Runecraft extends Skill {
59
60 public Runecraft(int level, double experience) {
61 super(Skill.RUNECRAFTING, level, experience);
62 }
63
64 @Override
65 protected double modifier() {
67 }
68
69 @Override
70 protected boolean clickItem(Player player, ItemInteractionEvent event) {
71 Item item = event.getItem();
72
73 RunecraftPouchData pouch = RunecraftPouchData.forItem(item.getId());
74
75 if (pouch == null) {
76 return false;
77 }
78
79 int opcode = event.getOpcode();
80
81 switch (opcode) {
82 case 0:
83 player.runecraftPouch.deposit(pouch);
84 break;
85 case 1:
86 player.runecraftPouch.withdraw(pouch);
87 break;
88 }
89 return true;
90 }
91
92 @Override
93 protected boolean clickObject(Player player, ObjectInteractionEvent event) {
94
95 if (event.getOpcode() != 0) {
96 return false;
97 }
98
99 GameObject object = event.getObject();
100
101 if (click(player, object)) {
102 return true;
103 }
104
105 if (!RunecraftData.forId(object.getId()).isPresent()) {
106 return false;
107 }
108
109 RunecraftData rune = RunecraftData.forId(object.getId()).get();
110
111 int essence = getEssence(player);
112
113 if (player.skills.getLevel(Skill.RUNECRAFTING) < rune.getLevel()) {
114 player.send(new SendMessage("You need a runecrafting level of " + rune.getLevel() + " to do this!"));
115 return true;
116 }
117
118 if (essence == -1) {
119 player.send(new SendMessage("You do not have any essence!"));
120 return true;
121 }
122
123 int amount = player.inventory.computeAmountForId(essence);
124 int multiplier = multiplier(player, rune);
125
126 player.locking.lock(2);
127
128 if (rune == RunecraftData.OURNIA) {
129 player.animate(new Animation(791));
130 player.graphic(new Graphic(186));
131 player.inventory.remove(new Item(essence, amount), -1, true);
132
133 World.schedule(1, () -> {
134 for (int index = 0; index < amount; index++) {
136
137 while (data == RunecraftData.OURNIA) {
138 data = Utility.randomElement(RunecraftData.values());
139 }
140
141 player.inventory.add(data.getRunes(), multiplier(player, data) * 2);
142 player.skills.addExperience(Skill.RUNECRAFTING, data.getExperience() * modifier());
143 }
144
145 player.playerAssistant.activateSkilling(1);
146 RandomEventHandler.trigger(player);
147 Pets.onReward(player, PetData.RIFT_GUARDIAN.getItem(), 9000);
148 AchievementHandler.activate(player, AchievementKey.RUNECRAFTING, amount * multiplier);
149 });
150 return true;
151 }
152
153 craft(player, essence, amount, rune);
154
155 World.schedule(1, () -> {
156 player.inventory.add(rune.getRunes(), amount * multiplier);
157 player.playerAssistant.activateSkilling(1);
158 Pets.onReward(player, PetData.RIFT_GUARDIAN.getItem(), 9000);
159 AchievementHandler.activate(player, AchievementKey.RUNECRAFTING, amount * multiplier);
160 });
161 return true;
162 }
163
164
165 private void craft(Player player, int essence, int amount, RunecraftData rune) {
166 if (player.skills.getLevel(Skill.RUNECRAFTING) < rune.getLevel()) {
167 player.send(new SendMessage("You need a runecrafting level of " + rune.getLevel() + " to do this!"));
168 return;
169 }
170
171 if (essence == -1) {
172 player.send(new SendMessage("You do not have any essence!"));
173 return;
174 }
175 player.animate(new Animation(791));
176 player.graphic(new Graphic(186));
177 player.inventory.remove(new Item(essence, amount), -1, true);
178 player.skills.addExperience(Skill.RUNECRAFTING, (rune.getExperience() * amount) * modifier());
179 RandomEventHandler.trigger(player);
180
181 if (rune == RunecraftData.BLOOD) {
182 player.forClan(channel -> channel.activateTask(ClanTaskKey.BLOOD_RUNE, player.getName(), amount));
183 } else if (rune == RunecraftData.DEATH) {
184 player.forClan(channel -> channel.activateTask(ClanTaskKey.DEATH_RUNE, player.getName(), amount));
185 }
186 }
187
189 private boolean click(Player player, GameObject object) {
190 if (!RunecraftTeleport.forId(object.getId()).isPresent()) {
191 return false;
192 }
193
194 RunecraftTeleport teleport = RunecraftTeleport.forId(object.getId()).get();
195 player.move(teleport.getPosition());
196 System.out.println("reached here");
197 return true;
198 }
199
201 private int getEssence(Player player) {
202 return player.inventory.contains(1436) ? 1436 : (player.inventory.contains(7936) ? 7936 : -1);
203 }
204
206 private int multiplier(Player player, RunecraftData rune) {
207 int multiplier = 1;
208 for (int i = 0; i < rune.getMultiplier().length; i++) {
209 if (player.skills.getLevel(Skill.RUNECRAFTING) >= rune.getMultiplier()[i]) {
210 multiplier++;
211 }
212 }
213 return multiplier;
214 }
215}
static final double RUNECRAFTING_MODIFICATION
Definition Config.java:319
static void activate(Player player, AchievementKey achievement)
static void onReward(Player player, int item, int chance)
Definition Pets.java:70
static void schedule(Task task)
Definition World.java:284
void move(Position position)
Definition Mob.java:377
Skill(int skill, int level, double experience)
Definition Skill.java:221
void addExperience(int id, double experience)
static< T > T randomElement(Collection< T > collection)
Definition Utility.java:285
static Optional< RunecraftData > forId(int id)