RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
Modifier.java
1package com.osroyale.game.world.entity.combat.attack;
2
3import java.util.function.Function;
4
28
29public class Modifier {
30 private Function<Integer, Integer> attackModifier = Function.identity();
31 private Function<Integer, Integer> magicModifier = Function.identity();
32 private Function<Integer, Integer> rangedModifier = Function.identity();
33 private Function<Integer, Integer> aggressiveModifier = Function.identity();
34 private Function<Integer, Integer> defensiveModifier = Function.identity();
35
36 private Function<Integer, Integer> maxHitModifier = Function.identity();
37 private Function<Integer, Integer> damageModifier = Function.identity();
38
39 /* ************************************************************ */
40
41 protected final Modifier attackPercent(double percentage) {
42 attackModifier = link(attackModifier, percentage(percentage));
43 return this;
44 }
45
46 protected final Modifier ranged(double percentage) {
47 rangedModifier = link(rangedModifier, percentage(percentage));
48 return this;
49 }
50
51 protected final Modifier magic(double percentage) {
52 magicModifier = link(magicModifier, percentage(percentage));
53 return this;
54 }
55
56 protected final Modifier aggressive(double percentage) {
57 aggressiveModifier = link(aggressiveModifier, percentage(percentage));
58 return this;
59 }
60
61 protected final Modifier defensive(double percentage) {
62 defensiveModifier = link(defensiveModifier, percentage(percentage));
63 return this;
64 }
65
66 protected final Modifier maxHit(double percentage) {
67 maxHitModifier = link(maxHitModifier, percentage(percentage));
68 return this;
69 }
70
71 /* ************************************************************ */
72
73 protected final Modifier attack(int level) {
74 attackModifier = link(attackModifier, addition(level));
75 return this;
76 }
77
78 protected final Modifier ranged(int level) {
79 rangedModifier = rangedModifier.andThen(addition(level));
80 return this;
81 }
82
83 protected final Modifier magic(int level) {
84 magicModifier = magicModifier.andThen(addition(level));
85 return this;
86 }
87
88 protected final Modifier aggressive(int level) {
89 aggressiveModifier = aggressiveModifier.andThen(addition(level));
90 return this;
91 }
92
93 protected final Modifier defensive(int level) {
94 defensiveModifier = defensiveModifier.andThen(addition(level));
95 return this;
96 }
97
98 protected final Modifier maxHit(int level) {
99 maxHitModifier = maxHitModifier.andThen(addition(level));
100 return this;
101 }
102
103 /* ************************************************************ */
104
105 public static Modifier link(Modifier first, Modifier second) {
106 Modifier modifier = new Modifier();
107 modifier.attackModifier = first.attackModifier.andThen(second.attackModifier);
108 modifier.magicModifier = first.magicModifier.andThen(second.magicModifier);
109 modifier.rangedModifier = first.rangedModifier.andThen(second.rangedModifier);
110 modifier.aggressiveModifier = first.aggressiveModifier.andThen(second.aggressiveModifier);
111 modifier.defensiveModifier = first.defensiveModifier.andThen(second.defensiveModifier);
112 modifier.maxHitModifier = first.maxHitModifier.andThen(second.maxHitModifier);
113 modifier.damageModifier = first.damageModifier.andThen(second.damageModifier);
114 return modifier;
115 }
116
117 public int modifyAttack(int level) {
118 return attackModifier.apply(level);
119 }
120
121 public int modifyRanged(int level) {
122 return rangedModifier.apply(level);
123 }
124
125 public int modifyMagic(int level) {
126 return magicModifier.apply(level);
127 }
128
129 public int modifyAggressive(int level) {
130 return aggressiveModifier.apply(level);
131 }
132
133 public int modifyDefensive(int level) {
134 return defensiveModifier.apply(level);
135 }
136
137 public int modifyMaxHit(int max) {
138 return maxHitModifier.apply(max);
139 }
140
141 public int modifyDamage(int damage) {
142 return damageModifier.apply(damage);
143 }
144
145 private static Function<Integer, Integer> link(Function<Integer, Integer> modifier, Function<Integer, Integer> next) {
146 return modifier.andThen(next);
147 }
148
149 private static Function<Integer, Integer> addition(int amount) {
150 return modifier -> modifier + amount;
151 }
152
153 private static Function<Integer, Integer> percentage(double percent) {
154 return modifier -> (int) (modifier * (1 + percent));
155 }
156
157 private static Modifier attack(double percent) {
158 return new Modifier() {{ attackPercent(percent); }};
159 }
160
161 public static void main(String[] args) {
162 Modifier godsword = attack(0.25);
163 Modifier agsMaxHit = attack(0.10);
164
165 Modifier chain = link(godsword, agsMaxHit);
166 Modifier linked = link(attack(0.25), attack(0.10));
167
168 double total;
169
170 total = link(chain, linked).modifyAttack(10000) / 10000.0;
171 System.out.println(total);
172
173 total = link(chain, linked).modifyAttack(10000) / 10000.0;
174 System.out.println(total);
175 }
176
177
178}