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
|
|
|
}
|
|
|
|
|
}
|