Files
CustomNPC-Plus/src/main/java/noppes/npcs/controllers/LinkedItemController.java
T

91 lines
2.5 KiB
Java
Raw Normal View History

2025-02-13 18:11:58 -06:00
package noppes.npcs.controllers;
2025-02-14 12:28:17 -06:00
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import noppes.npcs.CustomNpcs;
import noppes.npcs.controllers.data.EffectScript;
import noppes.npcs.controllers.data.INpcScriptHandler;
2025-02-13 18:11:58 -06:00
import noppes.npcs.controllers.data.LinkedItem;
2025-02-14 12:28:17 -06:00
import java.io.File;
2025-02-13 18:11:58 -06:00
import java.util.HashMap;
2025-02-14 12:28:17 -06:00
//TODO: load this data from somewhere, use in GUIs
2025-02-13 18:11:58 -06:00
public class LinkedItemController {
private static LinkedItemController Instance;
2025-02-14 12:28:17 -06:00
private int lastUsedID = 0;
private final HashMap<Integer, LinkedItem> linkedItems = new HashMap<>();
private final HashMap<Integer, EffectScript> linkedItemsScripts = new HashMap<>();
2025-02-13 18:11:58 -06:00
private LinkedItemController() {
}
public static LinkedItemController Instance() {
if (Instance == null) {
Instance = new LinkedItemController();
}
return Instance;
}
2025-02-14 12:28:17 -06:00
public int getUnusedId() {
for (int id : this.linkedItems.keySet()) {
if (id > this.lastUsedID)
this.lastUsedID = id;
}
this.lastUsedID++;
return this.lastUsedID;
}
private File getDir() {
return new File(CustomNpcs.getWorldSaveDirectory(), "linkeditems");
}
public LinkedItem createItem(String name) {
return new LinkedItem(name);
}
2025-02-13 18:11:58 -06:00
public void add(LinkedItem linkedItem) {
if (linkedItem != null) {
String name = linkedItem.getName();
if (name != null && !name.isEmpty()) {
2025-02-14 12:28:17 -06:00
int linkedItemId = linkedItem.getId();
int id = this.linkedItems.containsKey(linkedItemId) ? linkedItemId : this.getUnusedId();
this.linkedItems.put(id, linkedItem);
linkedItem.setId(id);
this.addScript(id);
2025-02-13 18:11:58 -06:00
}
}
}
2025-02-14 12:28:17 -06:00
@SideOnly(Side.SERVER)
private void addScript(int id) {
this.linkedItemsScripts.put(id, new EffectScript());
}
public void remove(int id) {
this.linkedItems.remove(id);
this.removeScript(id);
}
@SideOnly(Side.SERVER)
private void removeScript(int id) {
this.linkedItemsScripts.remove(id);
}
public LinkedItem get(int id) {
return this.linkedItems.get(id);
}
public boolean contains(int id) {
return this.linkedItems.containsKey(id);
}
public boolean contains(LinkedItem linkedItem) {
return this.linkedItems.containsValue(linkedItem);
}
public INpcScriptHandler getScriptHandler(int id) {
return this.linkedItemsScripts.get(id);
2025-02-13 18:11:58 -06:00
}
}