Skip to content

Commit

Permalink
fix memory leak
Browse files Browse the repository at this point in the history
  • Loading branch information
ffauzan committed Jun 23, 2022
1 parent 7841d53 commit eb47c91
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 46 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>uk.haku</groupId> <!-- Replace with your groupId -->
<artifactId>IdLook</artifactId> <!-- Replace with your plugin name. -->
<version>1.0.0</version> <!-- The template's version corresponds to the latest API version. -->
<version>1.0.1</version> <!-- The template's version corresponds to the latest API version. -->

<properties>
<maven.compiler.source>17</maven.compiler.source>
Expand Down
45 changes: 39 additions & 6 deletions src/main/java/uk/haku/idlook/IdLookPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,28 @@

import emu.grasscutter.Grasscutter;
import emu.grasscutter.plugin.Plugin;
import emu.grasscutter.utils.Utils;
import uk.haku.idlook.commands.*;
import uk.haku.idlook.objects.*;

import java.io.*;
import java.util.stream.Collectors;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.security.KeyPair;
import java.util.Timer;
import java.util.concurrent.TimeUnit;
import java.util.Map;


import java.util.*;

import static emu.grasscutter.Configuration.*;


import com.google.common.reflect.TypeToken;

import uk.haku.idlook.IdLookPlugin;
import uk.haku.idlook.objects.PluginConfig;

/**
* The Grasscutter plugin template.
Expand All @@ -37,6 +47,10 @@ public static IdLookPlugin getInstance() {

/* The plugin's configuration instance. */
private PluginConfig configuration;

/* Item text map */
private Map<Long, String> itemTextMap;


/**
* This method is called immediately after the plugin is first loaded into system memory.
Expand All @@ -63,6 +77,18 @@ public static IdLookPlugin getInstance() {
this.getLogger().error("Unable to load configuration file.");
this.configuration = new PluginConfig();
}

// Initialize the item text map.
final String textMapFile = "TextMap/TextMap" + DOCUMENT_LANGUAGE + ".json";
try (InputStreamReader fileReader = new InputStreamReader(new FileInputStream(
Utils.toFilePath(RESOURCE(textMapFile))), StandardCharsets.UTF_8)) {
this.itemTextMap = Grasscutter.getGsonFactory()
.fromJson(fileReader, new TypeToken<Map<Long, String>>() {
}.getType());
} catch (IOException e) {
Grasscutter.getLogger().warn("Resource does not exist: " + textMapFile);
this.itemTextMap = new HashMap<>();
}

// Log a plugin status message.
this.getLogger().info("The IdLook plugin has been loaded.");
Expand Down Expand Up @@ -94,4 +120,11 @@ public static IdLookPlugin getInstance() {
public PluginConfig getConfiguration() {
return this.configuration;
}

/**
* Gets the item text map.
*/
public Map<Long, String> getItemTextMap() {
return this.itemTextMap;
}
}
43 changes: 6 additions & 37 deletions src/main/java/uk/haku/idlook/commands/LookCommand.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,11 @@
package uk.haku.idlook.commands;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.*;

import static emu.grasscutter.Configuration.*;

import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.AvatarData;
import emu.grasscutter.data.excels.ItemData;
import emu.grasscutter.data.excels.MonsterData;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.utils.Utils;

import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import com.google.common.reflect.TypeToken;

import uk.haku.idlook.IdLookPlugin;
import uk.haku.idlook.utils.StringSimilarity;
Expand All @@ -34,27 +20,10 @@ public final class LookCommand implements CommandHandler {
private int resultLimit = config.resultLimit;
private int similarityScoreTreshold = config.scoreTreshold;

private Map<Long, String> map;
private Int2ObjectMap<AvatarData> avatarMap = GameData.getAvatarDataMap();
private Int2ObjectMap<ItemData> itemMap = GameData.getItemDataMap();
private Int2ObjectMap<MonsterData> monsterMap = GameData.getMonsterDataMap();


@Override public void execute(Player sender, Player targetPlayer, List<String> args) {
String lookQuery = String.join(" ", args);
ArrayList<QueryResult> resultList = new ArrayList<QueryResult>();

final String textMapFile = "TextMap/TextMap" + DOCUMENT_LANGUAGE + ".json";
try (InputStreamReader fileReader = new InputStreamReader(new FileInputStream(
Utils.toFilePath(RESOURCE(textMapFile))), StandardCharsets.UTF_8)) {
map = Grasscutter.getGsonFactory()
.fromJson(fileReader, new TypeToken<Map<Long, String>>() {
}.getType());
} catch (IOException e) {
Grasscutter.getLogger().warn("Resource does not exist: " + textMapFile);
map = new HashMap<>();
}

lookFor(lookQuery, resultList);

Collections.sort(resultList);
Expand Down Expand Up @@ -92,8 +61,8 @@ public void lookFor(String query, ArrayList<QueryResult> lookResult) {

public void lookForMonster(String query, ArrayList<QueryResult> lookResult) {
// Monster
monsterMap.forEach((id, data) -> {
String name = map.get(data.getNameTextMapHash());
GameData.getMonsterDataMap().forEach((id, data) -> {
String name = IdLookPlugin.getInstance().getItemTextMap().get(data.getNameTextMapHash());
if (name != null) {
Double similarityScore = StringSimilarity.Fuzzy(query, name);
if (similarityScore > similarityScoreTreshold) {
Expand All @@ -107,8 +76,8 @@ public void lookForMonster(String query, ArrayList<QueryResult> lookResult) {

public void lookForAvatar(String query, ArrayList<QueryResult> lookResult) {
// Avatars
avatarMap.forEach((id, data) -> {
String name = map.get(data.getNameTextMapHash());
GameData.getAvatarDataMap().forEach((id, data) -> {
String name = IdLookPlugin.getInstance().getItemTextMap().get(data.getNameTextMapHash());
if (name != null) {
Double similarityScore = StringSimilarity.Fuzzy(query, name);
if (similarityScore > similarityScoreTreshold) {
Expand All @@ -122,8 +91,8 @@ public void lookForAvatar(String query, ArrayList<QueryResult> lookResult) {

public void lookForItem(String query, ArrayList<QueryResult> lookResult) {
// Item
itemMap.forEach((id, data) -> {
String name = map.get(data.getNameTextMapHash());
GameData.getItemDataMap().forEach((id, data) -> {
String name = IdLookPlugin.getInstance().getItemTextMap().get(data.getNameTextMapHash());
if (name != null) {
Double similarityScore = StringSimilarity.Fuzzy(query, name);
if (similarityScore > similarityScoreTreshold) {
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/plugin.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "IdLookPlugin",
"description": "IdLookPlugin",
"version": "1.0",
"authors": [ "FF" ],
"version": "1.0.1",
"authors": [ "FFauzan" ],

"mainClass": "uk.haku.idlook.IdLookPlugin",

Expand Down

0 comments on commit eb47c91

Please sign in to comment.