10 public static class ItemData<T> {
12 public float remaining;
15 private List<ItemData<T>> items =
new ArrayList<ItemData<T>>();
16 transient private Set<T>
set =
new HashSet<T>();
18 Object readResolve() {
19 set =
new HashSet<T>();
20 for (ItemData<T> item : items) {
26 Object writeReplace() {
30 public void add(T item,
float time) {
31 getData(item).remaining += time;
34 public void add(T item,
float time,
float limit) {
35 ItemData<T> d = getData(item);
36 if (time > 0 && d.remaining + time > limit) {
37 time = Math.max(0, limit - d.remaining);
40 if (d.remaining < 0) {
45 public void set(T item,
float time) {
46 getData(item).remaining = time;
50 return getData(item).remaining;
53 public void remove(T item) {
54 for (ItemData<T> d : items) {
56 if (d.item.equals(item)) {
65 List<T> list =
new ArrayList<T>();
66 for (ItemData<T> d : items) {
78 private ItemData<T> getData(T item) {
79 for (ItemData<T> d : items) {
81 if (d.item.equals(item)) {
85 ItemData<T> d =
new ItemData<T>();
94 List<ItemData<T>>
remove =
new ArrayList<ItemData<T>>();
95 for (ItemData<T> d : items) {
99 d.remaining -= amount;
100 if (d.remaining <= 0) {
105 items.removeAll(
remove);
109 return set.contains(item);