Mod.java
4.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
package com.mumfrey.liteloader.core;
import com.mumfrey.liteloader.LiteMod;
import com.mumfrey.liteloader.interfaces.LoadableMod;
/**
* ModInfo for an active mod instance
*
* @author Adam Mummery-Smith
*/
class Mod extends ModInfo<LoadableMod<?>>
{
/**
* Mod class
*/
private final Class<? extends LiteMod> modClass;
/**
* Mod's key identifier, usually the class simplename
*/
private final String key;
/**
* Mod's identifier (from metadata)
*/
private final String identifier;
/**
* Mod instance
*/
private LiteMod instance;
/**
* Mod display name, initially read from metadata then replaced with real
* name once instanced.
*/
private String name;
/**
* Mod display name, initially read from version then replaced with real
* version once instanced.
*/
private String version;
/**
* @param container
* @param modClass
*/
public Mod(LoadableMod<?> container, Class<? extends LiteMod> modClass)
{
this(container, modClass, container != null ? container.getIdentifier() : LiteLoaderEnumerator.getModClassName(modClass));
}
/**
* @param container
* @param modClass
* @param identifier
*/
public Mod(LoadableMod<?> container, Class<? extends LiteMod> modClass, String identifier)
{
super(container != null ? container : LoadableMod.NONE, true);
this.modClass = modClass;
this.key = modClass.getSimpleName();
this.identifier = identifier.toLowerCase();
this.name = this.container.getDisplayName();
this.version = this.container.getVersion();
}
/**
* Called by the mod manager to instance the mod
*
* @throws InstantiationException
* @throws IllegalAccessException
*/
LiteMod newInstance() throws InstantiationException, IllegalAccessException
{
if (this.instance != null)
{
throw new InstantiationException("Attempted to create an instance of " + this.key + " but the instance was already created");
}
this.instance = this.modClass.newInstance();
String name = this.instance.getName();
if (name != null) this.name = name;
String version = this.instance.getVersion();
if (version != null) this.version = version;
return this.instance;
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#isToggleable()
*/
@Override
public boolean isToggleable()
{
return true;
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#getMod()
*/
@Override
public LiteMod getMod()
{
return this.instance;
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#getModClass()
*/
@Override
public Class<? extends LiteMod> getModClass()
{
return this.modClass;
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#getDisplayName()
*/
@Override
public String getDisplayName()
{
return this.name;
}
/**
* Get the mod description
*/
@Override
public String getDescription()
{
return this.container.getDescription(this.key);
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#getVersion()
*/
@Override
public String getVersion()
{
return this.version;
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#getModClassName()
*/
@Override
public String getModClassName()
{
return this.modClass.getName();
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#getModClassSimpleName()
*/
@Override
public String getModClassSimpleName()
{
return this.key;
}
/* (non-Javadoc)
* @see com.mumfrey.liteloader.core.ModInfo#getIdentifier()
*/
@Override
public String getIdentifier()
{
return this.identifier;
}
/**
* Get whether any of the valid identifiers match the supplied name
*
* @param name
*/
public boolean matchesName(String name)
{
return (name.equalsIgnoreCase(this.instance.getName()) || name.equalsIgnoreCase(this.identifier) || name.equalsIgnoreCase(this.key));
}
/**
* Get whether ths mod identifier matches the supplied identifier
*
* @param identifier
*/
public boolean matchesIdentifier(String identifier)
{
return identifier.equalsIgnoreCase(this.identifier);
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object other)
{
if (other == null) return false;
if (!(other instanceof Mod)) return false;
return ((Mod)other).key.equals(this.key);
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode()
{
return this.key.hashCode();
}
}