Skip to content

Commit bd1e735

Browse files
committed
Fix #25
1 parent 4074431 commit bd1e735

61 files changed

Lines changed: 325 additions & 143 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/net/infstudio/goki/GokiStats.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import net.infstudio.goki.common.config.Configurable;
77
import net.infstudio.goki.common.config.GokiConfig;
88
import net.infstudio.goki.common.init.MinecraftEffects;
9-
import net.infstudio.goki.common.stats.StatBase;
10-
import net.infstudio.goki.common.stats.Stats;
9+
import net.infstudio.goki.api.stat.StatBase;
10+
import net.infstudio.goki.api.stat.Stats;
1111
import net.infstudio.goki.common.utils.Reference;
1212
import net.minecraft.command.ICommandManager;
1313
import net.minecraft.command.ServerCommandManager;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package net.infstudio.goki.api.capability;
2+
3+
import net.infstudio.goki.api.stat.StatBase;
4+
import net.infstudio.goki.api.stat.StatState;
5+
import net.infstudio.goki.api.stat.StatStorage;
6+
import net.minecraft.nbt.NBTBase;
7+
import net.minecraft.nbt.NBTTagCompound;
8+
import net.minecraft.util.EnumFacing;
9+
import net.minecraftforge.common.capabilities.Capability;
10+
import net.minecraftforge.common.capabilities.CapabilityInject;
11+
import net.minecraftforge.common.capabilities.CapabilityManager;
12+
13+
public class CapabilityStat {
14+
@CapabilityInject(StatStorage.class)
15+
public static Capability<StatStorage> STAT;
16+
17+
public static void register() {
18+
CapabilityManager.INSTANCE.register(StatStorage.class, new Capability.IStorage<StatStorage>() {
19+
@Override
20+
public NBTBase writeNBT(Capability<StatStorage> capability, StatStorage instance, EnumFacing side) {
21+
NBTTagCompound compound = new NBTTagCompound();
22+
instance.stateMap.forEach((stat, state) -> {
23+
NBTTagCompound stateTag = new NBTTagCompound();
24+
stateTag.setInteger("level", state.level);
25+
stateTag.setInteger("revertedLevel", state.revertedLevel);
26+
compound.setTag(stat.getKey(), stateTag);
27+
});
28+
return compound;
29+
}
30+
31+
@Override
32+
public void readNBT(Capability<StatStorage> capability, StatStorage instance, EnumFacing side, NBTBase nbt) {
33+
if (nbt instanceof NBTTagCompound) {
34+
NBTTagCompound compound = (NBTTagCompound) nbt;
35+
for (String stat : compound.getKeySet()) {
36+
if (!StatBase.statKeyMap.containsKey(stat)) continue;
37+
NBTTagCompound stateTag = compound.getCompoundTag(stat);
38+
StatBase statBase = StatBase.statKeyMap.get(stat);
39+
instance.stateMap.put(statBase, new StatState(statBase, stateTag.getInteger("level"), stateTag.getInteger("revertedLevel")));
40+
}
41+
}
42+
}
43+
}, StatStorage::new);
44+
}
45+
}

src/main/java/net/infstudio/goki/common/stats/Stat.java renamed to src/main/java/net/infstudio/goki/api/stat/Stat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.infstudio.goki.common.stats;
1+
package net.infstudio.goki.api.stat;
22

33
import net.minecraft.entity.player.EntityPlayer;
44

src/main/java/net/infstudio/goki/common/stats/StatBase.java renamed to src/main/java/net/infstudio/goki/api/stat/StatBase.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
package net.infstudio.goki.common.stats;
1+
package net.infstudio.goki.api.stat;
22

3+
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
4+
import it.unimi.dsi.fastutil.objects.ObjectList;
35
import net.infstudio.goki.common.config.Configurable;
46
import net.infstudio.goki.common.config.GokiConfig;
57
import net.infstudio.goki.common.config.stats.StatConfig;
@@ -13,10 +15,13 @@
1315
import net.minecraftforge.fml.relauncher.Side;
1416
import net.minecraftforge.fml.relauncher.SideOnly;
1517

16-
import java.util.ArrayList;
18+
import java.util.HashMap;
19+
import java.util.Map;
20+
import java.util.Objects;
1721

1822
public abstract class StatBase<T extends StatConfig> implements Stat, Configurable<T> {
19-
public static final ArrayList<StatBase> stats = new ArrayList<>(32);
23+
public static final Map<String, StatBase> statKeyMap = new HashMap<>(16);
24+
public static final ObjectList<StatBase> stats = new ObjectArrayList<>(16);
2025
public static int totalStats = 0;
2126
// public static final StatBase STAT_FOCUS = new StatFocus(14, "grpg_Focus",
2227
// "Focus", 25);
@@ -35,6 +40,7 @@ public StatBase() {
3540
this.key = "Dummy";
3641
this.name = "Dummy StatBase";
3742
stats.add(this);
43+
statKeyMap.put(key, this);
3844
}
3945

4046
public StatBase(int imgId, String key, int limit) {
@@ -43,6 +49,7 @@ public StatBase(int imgId, String key, int limit) {
4349
this.key = key;
4450
stats.add(this);
4551
totalStats ++;
52+
statKeyMap.put(key, this);
4653
}
4754

4855
protected static float getFinalBonus(float currentBonus) {
@@ -140,7 +147,23 @@ public String getLocalizedDes(EntityPlayer player) {
140147
this.getAppliedDescriptionVar(player)[0]);
141148
}
142149

150+
@Override
151+
public boolean equals(Object o) {
152+
if (this == o) return true;
153+
if (!(o instanceof StatBase)) return false;
154+
StatBase<?> statBase = (StatBase<?>) o;
155+
return Objects.equals(getKey(), statBase.getKey());
156+
}
143157

158+
@Override
159+
public int hashCode() {
160+
return Objects.hash(getKey());
161+
}
162+
163+
@Override
164+
public String toString() {
165+
return getKey();
166+
}
144167
// protected float getSecondaryBonus(int amount)
145168
// {
146169
// return 0;

src/main/java/net/infstudio/goki/common/stats/StatSpecial.java renamed to src/main/java/net/infstudio/goki/api/stat/StatSpecial.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.infstudio.goki.common.stats;
1+
package net.infstudio.goki.api.stat;
22

33
import net.minecraft.entity.player.EntityPlayer;
44

src/main/java/net/infstudio/goki/common/stats/StatSpecialBase.java renamed to src/main/java/net/infstudio/goki/api/stat/StatSpecialBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.infstudio.goki.common.stats;
1+
package net.infstudio.goki.api.stat;
22

33
import net.infstudio.goki.common.utils.DataHelper;
44
import net.minecraft.entity.player.EntityPlayer;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.infstudio.goki.api.stat;
2+
3+
import java.util.Objects;
4+
5+
public class StatState {
6+
public Stat stat;
7+
public int level, revertedLevel;
8+
9+
public StatState(Stat stat, int level) {
10+
this.stat = stat;
11+
this.level = level;
12+
}
13+
14+
public StatState(Stat stat, int level, int revertedLevel) {
15+
this.stat = stat;
16+
this.level = level;
17+
this.revertedLevel = revertedLevel;
18+
}
19+
20+
@Override
21+
public boolean equals(Object o) {
22+
if (this == o) return true;
23+
if (o == null || getClass() != o.getClass()) return false;
24+
StatState statState = (StatState) o;
25+
return level == statState.level &&
26+
revertedLevel == statState.revertedLevel &&
27+
Objects.equals(stat, statState.stat);
28+
}
29+
30+
@Override
31+
public int hashCode() {
32+
return Objects.hash(stat, level, revertedLevel);
33+
}
34+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package net.infstudio.goki.api.stat;
2+
3+
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
4+
5+
import java.util.Map;
6+
7+
public class StatStorage {
8+
public Map<Stat, StatState> stateMap = new Object2ObjectOpenHashMap<>();
9+
}

src/main/java/net/infstudio/goki/common/stats/Stats.java renamed to src/main/java/net/infstudio/goki/api/stat/Stats.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
package net.infstudio.goki.common.stats;
1+
package net.infstudio.goki.api.stat;
22

3-
import net.infstudio.goki.common.stats.damage.*;
4-
import net.infstudio.goki.common.stats.movement.StatClimbing;
5-
import net.infstudio.goki.common.stats.movement.StatSteadyGuard;
6-
import net.infstudio.goki.common.stats.movement.StatSwimming;
7-
import net.infstudio.goki.common.stats.special.StatFurnaceFinesse;
8-
import net.infstudio.goki.common.stats.special.leaper.StatLeaperH;
9-
import net.infstudio.goki.common.stats.special.leaper.StatLeaperV;
10-
import net.infstudio.goki.common.stats.special.leaper.StatStealth;
11-
import net.infstudio.goki.common.stats.tool.*;
3+
import net.infstudio.goki.common.stat.StatMaxHealth;
4+
import net.infstudio.goki.common.stat.StatReaper;
5+
import net.infstudio.goki.common.stat.StatTreasureFinder;
6+
import net.infstudio.goki.common.stat.damage.*;
7+
import net.infstudio.goki.common.stat.movement.StatClimbing;
8+
import net.infstudio.goki.common.stat.movement.StatSteadyGuard;
9+
import net.infstudio.goki.common.stat.movement.StatSwimming;
10+
import net.infstudio.goki.common.stat.special.StatFurnaceFinesse;
11+
import net.infstudio.goki.common.stat.special.leaper.StatLeaperH;
12+
import net.infstudio.goki.common.stat.special.leaper.StatLeaperV;
13+
import net.infstudio.goki.common.stat.special.leaper.StatStealth;
14+
import net.infstudio.goki.common.stat.tool.*;
1215

1316
public interface Stats {
1417
ToolSpecificStat MINING = new StatMining(0, "grpg_Mining", 10);

src/main/java/net/infstudio/goki/client/gui/GuiCompatibilityHelper.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package net.infstudio.goki.client.gui;
22

3-
import net.infstudio.goki.common.stats.StatBase;
4-
import net.infstudio.goki.common.stats.Stats;
5-
import net.infstudio.goki.common.stats.tool.ToolSpecificStat;
3+
import net.infstudio.goki.api.stat.StatBase;
4+
import net.infstudio.goki.api.stat.Stats;
5+
import net.infstudio.goki.common.stat.tool.ToolSpecificStat;
66
import net.minecraft.client.gui.GuiButton;
77
import net.minecraft.client.gui.GuiScreen;
88
import net.minecraft.entity.player.EntityPlayer;
99

1010
public class GuiCompatibilityHelper extends GuiScreen {
11-
private final int BUTTON_WIDTH = 240;
12-
private final int BUTTON_HEIGHT = 15;
11+
private static final int BUTTON_WIDTH = 240;
12+
private static final int BUTTON_HEIGHT = 15;
1313
private final ToolSpecificStat[] compatibleStats =
1414
{Stats.MINING, Stats.DIGGING, Stats.CHOPPING, Stats.TRIMMING, Stats.SWORDSMANSHIP, Stats.BOWMANSHIP};
1515
private EntityPlayer player;

0 commit comments

Comments
 (0)