Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix WarTracker reading from disk every frame #20

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'

version = '1.6.6'
version = '1.6.7'
group = 'tk.avicia.avomod' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'avomod'

Expand Down
29 changes: 28 additions & 1 deletion src/main/java/tk/avicia/avomod/core/structures/WarObject.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package tk.avicia.avomod.core.structures;

import java.util.Arrays;
import java.util.List;

public class WarObject {
Expand All @@ -8,12 +9,38 @@ public class WarObject {
private final long warStartTimestamp;

public WarObject(String territory, List<String> otherMembers) {
this(territory, otherMembers, System.currentTimeMillis());
}

public WarObject(String territory, List<String> otherMembers, long warStartTimestamp) {
this.territory = territory;
this.otherMembers = otherMembers;
this.warStartTimestamp = System.currentTimeMillis();
this.warStartTimestamp = warStartTimestamp;
}

public String getTerritory() {
return territory;
}

public List<String> getOtherMembers() {
return otherMembers;
}

public long getWarStart() {
return warStartTimestamp;
}

public String toString() {
return String.format("%s/%s/%s", this.territory, String.join(",", this.otherMembers), this.warStartTimestamp);
}

public static WarObject parseString(String war) {
String[] warSections = war.split("/");

return new WarObject(
warSections[0],
Arrays.asList(warSections[1].split(",")),
Long.parseLong(warSections[2])
);
}
}
36 changes: 33 additions & 3 deletions src/main/java/tk/avicia/avomod/features/WarTracker.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import tk.avicia.avomod.Avomod;
import tk.avicia.avomod.core.structures.CustomFile;
import tk.avicia.avomod.core.structures.WarObject;
Expand All @@ -31,6 +32,7 @@ public class WarTracker {
private static long lastWarBar;
private List<String> members = new ArrayList<>();
private List<String> uuids = new ArrayList<>();
private static List<WarObject> weeklyWars = loadWeeklyWars();

public static void warStart(String territoryName, List<String> members) {
List<String> filteredMembers = members.stream().filter(e -> !e.equals(Avomod.getMC().player.getName())).collect(Collectors.toList());
Expand All @@ -39,14 +41,14 @@ public static void warStart(String territoryName, List<String> members) {
}

public static MultipleElements getElementsToDraw() {
long weeklyWars = getWars(System.currentTimeMillis() - 604800000L);
long totalWeeklyWars = weeklyWars.size();

String plural = "";
if (weeklyWars != 1) {
if (totalWeeklyWars != 1) {
plural = "s";
}

String text = String.format("%s war%s", weeklyWars, plural);
String text = String.format("%s war%s", totalWeeklyWars, plural);
int rectangleWidth = Avomod.getMC().fontRenderer.getStringWidth(text) + 4;
int rectangleHeight = 12;
float scale = 1.5F;
Expand All @@ -62,6 +64,8 @@ public static MultipleElements getElementsToDraw() {
}

public static void addWar(WarObject warObject) {
weeklyWars.add(warObject);

CustomFile warFile = new CustomFile(Avomod.getConfigPath("wars"));
JsonObject savedWars = warFile.readJson();

Expand All @@ -74,6 +78,25 @@ public static void addWar(WarObject warObject) {
warFile.writeJson(savedWars);
}

private static List<WarObject> loadWeeklyWars() {
CustomFile warFile = new CustomFile(Avomod.getConfigPath("wars"));
JsonObject savedWars = warFile.readJson();

if (!savedWars.has("wars")) {
return new ArrayList<>();
}

String wars = savedWars.get("wars").getAsString();

long currentMills = System.currentTimeMillis() - 604800000L;

return Arrays.stream(wars.split("\\|"))
.map(WarObject::parseString)
.filter(war -> war.getWarStart() > currentMills)
.collect(Collectors.toList());
}


public static long getWars(long timeSince) {
CustomFile warFile = new CustomFile(Avomod.getConfigPath("wars"));
JsonObject savedWars = warFile.readJson();
Expand Down Expand Up @@ -101,6 +124,13 @@ public static long timeOfFirstWar() {
return Long.parseLong(wars[0].split("/")[2]);
}

@SubscribeEvent
public void onTick(TickEvent event) {
long currentMills = System.currentTimeMillis() - 604800000L;

weeklyWars.removeIf(war -> war.getWarStart() < currentMills);
}

@SubscribeEvent
public void onChatReceivedEvent(ClientChatReceivedEvent event) {
String message = TextFormatting.getTextWithoutFormattingCodes(event.getMessage().getUnformattedText());
Expand Down