Skip to content

Commit e60ee68

Browse files
Merge remote-tracking branch 'origin/master'
2 parents 0b1fd97 + 7a48cc8 commit e60ee68

2 files changed

Lines changed: 75 additions & 0 deletions

File tree

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package net.swofty.types.generic.event.actions.custom.skill;
2+
3+
import net.swofty.commons.item.ItemType;
4+
import net.swofty.types.generic.event.EventNodes;
5+
import net.swofty.types.generic.event.SkyBlockEvent;
6+
import net.swofty.types.generic.event.SkyBlockEventClass;
7+
import net.swofty.types.generic.event.custom.ItemCraftEvent;
8+
import net.swofty.types.generic.item.SkyBlockItem;
9+
import net.swofty.types.generic.item.components.CraftableComponent;
10+
import net.swofty.types.generic.item.components.SellableComponent;
11+
import net.swofty.types.generic.item.crafting.SkyBlockRecipe;
12+
import net.swofty.types.generic.skill.SkillCategories;
13+
import net.swofty.types.generic.user.SkyBlockPlayer;
14+
15+
import java.util.HashMap;
16+
import java.util.Map;
17+
18+
public class ActionSkillCarpentryGain implements SkyBlockEventClass {
19+
@SkyBlockEvent(node = EventNodes.CUSTOM, requireDataLoaded = true)
20+
public void run(ItemCraftEvent event) {
21+
SkyBlockPlayer player = event.getPlayer();
22+
if (!player.getMissionData().hasCompleted("give_wool_to_carpenter")) return;
23+
24+
SkyBlockItem craftedItem = event.getCraftedItem();
25+
26+
if (craftedItem == null || craftedItem.isAir() || craftedItem.isNA()) return;
27+
if (ItemType.fromMaterial(craftedItem.getMaterial()) != null &&
28+
ItemType.fromMaterial(craftedItem.getMaterial()) == craftedItem.getAttributeHandler().getPotentialType()) return;
29+
30+
Map<String, Integer> rawItems = new HashMap<>();
31+
double npcSellValue = 0;
32+
33+
collectRawItems(craftedItem, craftedItem.getAmount(), rawItems);
34+
35+
for (Map.Entry<String, Integer> entry : rawItems.entrySet()) {
36+
String itemId = entry.getKey();
37+
int amount = entry.getValue();
38+
39+
SkyBlockItem resolvedItem = new SkyBlockItem(ItemType.get(itemId));
40+
if (resolvedItem.hasComponent(SellableComponent.class)) {
41+
double sellPrice = resolvedItem.getComponent(SellableComponent.class).getSellValue();
42+
npcSellValue += sellPrice * amount;
43+
}
44+
}
45+
46+
double carpentryXP = 0.03 * npcSellValue;
47+
48+
player.getSkills().increase(player, SkillCategories.CARPENTRY, carpentryXP);
49+
}
50+
51+
private void collectRawItems(SkyBlockItem item, int multiplier, Map<String, Integer> rawItems) {
52+
if (!item.hasComponent(CraftableComponent.class)) {
53+
String key = item.getAttributeHandler().getTypeAsString();
54+
rawItems.merge(key, multiplier, Integer::sum);
55+
return;
56+
}
57+
58+
SkyBlockRecipe<?> recipe = item.getComponent(CraftableComponent.class).getRecipes().getFirst();
59+
SkyBlockItem[] ingredients = recipe.getRecipeDisplay();
60+
61+
int recipeResultAmount = recipe.getResult().getAmount();
62+
double scaleFactor = (double) multiplier / recipeResultAmount;
63+
64+
for (SkyBlockItem ingredient : ingredients) {
65+
if (ingredient == null || ingredient.isAir() || ingredient.isNA()) continue;
66+
67+
int totalAmount = (int) Math.ceil(ingredient.getAmount() * scaleFactor);
68+
collectRawItems(ingredient, totalAmount, rawItems);
69+
}
70+
}
71+
}
72+

type.generic/src/main/java/net/swofty/types/generic/event/actions/player/ActionPlayerStrayTooFar.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.swofty.types.generic.event.SkyBlockEventClass;
99
import net.swofty.types.generic.region.SkyBlockRegion;
1010
import net.swofty.types.generic.user.SkyBlockPlayer;
11+
import net.swofty.types.generic.user.categories.Rank;
1112

1213
import java.util.HashMap;
1314
import java.util.Map;
@@ -22,6 +23,8 @@ public void run(PlayerMoveEvent event) {
2223
SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer();
2324
SkyBlockRegion region = player.getRegion();
2425

26+
if (player.getRank().isEqualOrHigherThan(Rank.DEVELOPER)) return;
27+
2528
if (region != null) {
2629
startedStray.remove(player.getUuid());
2730
return;

0 commit comments

Comments
 (0)