Compare commits
4 Commits
4.1.0
...
feature/cu
Author | SHA1 | Date | |
---|---|---|---|
|
1dd28ac0eb | ||
|
ff76f2b95a | ||
|
b92543e078 | ||
|
252ca34e42 |
12
README.MD
12
README.MD
@@ -132,15 +132,19 @@ OpenInv is a [Bukkit plugin](https://dev.bukkit.org/bukkit-plugins/openinv/) whi
|
|||||||
|
|
||||||
## For Developers
|
## For Developers
|
||||||
To compile, the relevant Craftbukkit/Spigot jars must be installed in your local repository using the install plugin.
|
To compile, the relevant Craftbukkit/Spigot jars must be installed in your local repository using the install plugin.
|
||||||
Ex: `mvn install:install-file -Dpackaging=jar -Dfile=spigot-1.11-R0.1-SNAPSHOT.jar -DgroupId=org.spigotmc -DartifactId=spigot -Dversion=1.11-R0.1-SNAPSHOT`
|
Ex: `mvn install:install-file -Dpackaging=jar -Dfile=spigot-1.8-R0.1-SNAPSHOT.jar -DgroupId=org.spigotmc -DartifactId=spigot -Dversion=1.8-R0.1-SNAPSHOT`
|
||||||
|
|
||||||
To compile for a specific version or set of versions, you'll need to use a profile. Provided profiles are `latest`, `recent` (last 2 major Minecraft versions), and `all`. Select an existing profile using the `-P` argument (ex: `mvn clean package -am -P all`) or make your own. For more information, check out the [official guide](http://maven.apache.org/guides/introduction/introduction-to-profiles.html).
|
To compile for a single version, specify the NMS revision you are targeting: `mvn -pl <NMS module> -am clean install`
|
||||||
|
|
||||||
The final file is target/OpenInv.jar
|
To compile for a set of versions, you'll need to use a profile. The only provided profile is `all`. Select a profile using the `-P` argument: `mvn clean package -am -P all`
|
||||||
|
|
||||||
|
For more information, check out the [official Maven guide](http://maven.apache.org/guides/introduction/introduction-to-profiles.html).
|
||||||
|
|
||||||
|
The final file is `target/OpenInv.jar`
|
||||||
|
|
||||||
## License
|
## License
|
||||||
```
|
```
|
||||||
Copyright (C) 2011-2018 lishid. All rights reserved.
|
Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -12,21 +12,6 @@
|
|||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* *
|
|
||||||
* Copyright (C) 2014 - 2018 Simmetrics Authors
|
|
||||||
* Copyright (C) 2010 The Guava Authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.util;
|
package com.lishid.openinv.util;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -19,11 +19,11 @@ package com.lishid.openinv.util;
|
|||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import com.google.common.collect.TreeMultimap;
|
import com.google.common.collect.TreeMultimap;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A minimal thread-safe time-based cache implementation backed by a HashMap and TreeMultimap.
|
* A minimal thread-safe time-based cache implementation backed by a HashMap and TreeMultimap.
|
||||||
@@ -45,20 +45,9 @@ public class Cache<K, V> {
|
|||||||
* @param postRemoval Function used to perform any operations required when a key is invalidated
|
* @param postRemoval Function used to perform any operations required when a key is invalidated
|
||||||
*/
|
*/
|
||||||
public Cache(final long retention, final Function<V> inUseCheck, final Function<V> postRemoval) {
|
public Cache(final long retention, final Function<V> inUseCheck, final Function<V> postRemoval) {
|
||||||
this.internal = new HashMap<K, V>();
|
this.internal = new HashMap<>();
|
||||||
|
|
||||||
this.expiry = TreeMultimap.create(new Comparator<Long>() {
|
this.expiry = TreeMultimap.create(Long::compareTo, (k1, k2) -> Objects.equals(k1, k2) ? 0 : 1);
|
||||||
@Override
|
|
||||||
public int compare(final Long long1, final Long long2) {
|
|
||||||
return long1.compareTo(long2);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new Comparator<K>() {
|
|
||||||
@Override
|
|
||||||
public int compare(final K k1, final K k2) {
|
|
||||||
return k1 == k2 || k1 != null && k1.equals(k2) ? 0 : 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.retention = retention;
|
this.retention = retention;
|
||||||
this.inUseCheck = inUseCheck;
|
this.inUseCheck = inUseCheck;
|
||||||
@@ -160,7 +149,7 @@ public class Cache<K, V> {
|
|||||||
private void lazyCheck() {
|
private void lazyCheck() {
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
synchronized (this.internal) {
|
synchronized (this.internal) {
|
||||||
List<K> inUse = new ArrayList<K>();
|
List<K> inUse = new ArrayList<>();
|
||||||
for (Iterator<Map.Entry<Long, K>> iterator = this.expiry.entries().iterator(); iterator
|
for (Iterator<Map.Entry<Long, K>> iterator = this.expiry.entries().iterator(); iterator
|
||||||
.hasNext();) {
|
.hasNext();) {
|
||||||
Map.Entry<Long, K> entry = iterator.next();
|
Map.Entry<Long, K> entry = iterator.next();
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
53
common/src/main/java/com/lishid/openinv/util/Pair.java
Normal file
53
common/src/main/java/com/lishid/openinv/util/Pair.java
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple tuple.
|
||||||
|
*
|
||||||
|
* @param <L> the left value
|
||||||
|
* @param <R> the right value
|
||||||
|
*
|
||||||
|
* @author Jikoo
|
||||||
|
*/
|
||||||
|
public class Pair<L, R> {
|
||||||
|
|
||||||
|
private L left;
|
||||||
|
private R right;
|
||||||
|
|
||||||
|
public Pair(L left, R right) {
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
}
|
||||||
|
|
||||||
|
public L getLeft() {
|
||||||
|
return left;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLeft(L left) {
|
||||||
|
this.left = left;
|
||||||
|
}
|
||||||
|
|
||||||
|
public R getRight() {
|
||||||
|
return right;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRight(R right) {
|
||||||
|
this.right = right;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -0,0 +1,201 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.util;
|
||||||
|
|
||||||
|
import java.util.AbstractCollection;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A List implementation intended for wrapping a single field.
|
||||||
|
*
|
||||||
|
* @param <V> the type of the field
|
||||||
|
*
|
||||||
|
* @author Jikoo
|
||||||
|
*/
|
||||||
|
public class SingleFieldList<V> extends AbstractCollection<V> implements List<V> {
|
||||||
|
|
||||||
|
private final Supplier<V> fieldGetter;
|
||||||
|
private final Consumer<V> fieldSetter;
|
||||||
|
|
||||||
|
public SingleFieldList(@NotNull Supplier<V> fieldGetter, @NotNull Consumer<V> fieldSetter) {
|
||||||
|
this.fieldGetter = fieldGetter;
|
||||||
|
this.fieldSetter = fieldSetter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(Object o) {
|
||||||
|
return Objects.equals(o, fieldGetter.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Iterator<V> iterator() {
|
||||||
|
return listIterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addAll(int index, @NotNull Collection<? extends V> c) {
|
||||||
|
return super.addAll(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
return o instanceof SingleFieldList
|
||||||
|
&& fieldGetter.equals(((SingleFieldList) o).fieldGetter)
|
||||||
|
&& fieldSetter.equals(((SingleFieldList) o).fieldSetter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return fieldSetter.hashCode() * 17 * fieldGetter.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V get(int index) {
|
||||||
|
if (index != 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
return fieldGetter.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V set(int index, V element) {
|
||||||
|
if (index != 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
|
||||||
|
V old = fieldGetter.get();
|
||||||
|
fieldSetter.accept(element);
|
||||||
|
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(int index, V element) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V remove(int index) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int indexOf(Object o) {
|
||||||
|
return fieldGetter.get().equals(o) ? 0 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int lastIndexOf(Object o) {
|
||||||
|
return indexOf(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ListIterator<V> listIterator() {
|
||||||
|
return new ListIterator<V>() {
|
||||||
|
private boolean hasNext = true;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
return hasNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V next() {
|
||||||
|
if (!hasNext) {
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
return fieldGetter.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPrevious() {
|
||||||
|
return !hasNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V previous() {
|
||||||
|
if (hasNext) {
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
return fieldGetter.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int nextIndex() {
|
||||||
|
return hasNext ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int previousIndex() {
|
||||||
|
return hasNext ? -1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(V v) {
|
||||||
|
fieldSetter.accept(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(V v) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ListIterator<V> listIterator(int index) {
|
||||||
|
if (index != 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
return listIterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public List<V> subList(int fromIndex, int toIndex) {
|
||||||
|
if (fromIndex != 0 || toIndex != 1) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear() {}
|
||||||
|
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
@@ -30,22 +30,6 @@
|
|||||||
|
|
||||||
<profiles>
|
<profiles>
|
||||||
|
|
||||||
<profile>
|
|
||||||
<id>latest</id>
|
|
||||||
<modules>
|
|
||||||
<module>v1_14_R1</module>
|
|
||||||
</modules>
|
|
||||||
</profile>
|
|
||||||
|
|
||||||
<profile>
|
|
||||||
<id>recent</id>
|
|
||||||
<!-- The recent profile is for the most recent 2 versions. -->
|
|
||||||
<modules>
|
|
||||||
<module>v1_13_R2</module>
|
|
||||||
<module>v1_14_R1</module>
|
|
||||||
</modules>
|
|
||||||
</profile>
|
|
||||||
|
|
||||||
<profile>
|
<profile>
|
||||||
<id>all</id>
|
<id>all</id>
|
||||||
<modules>
|
<modules>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -100,6 +100,7 @@ public class PlayerDataManager implements IPlayerDataManager {
|
|||||||
String title;
|
String title;
|
||||||
if (inventory instanceof SpecialEnderChest) {
|
if (inventory instanceof SpecialEnderChest) {
|
||||||
HumanEntity owner = (HumanEntity) ((SpecialEnderChest) inventory).getBukkitOwner();
|
HumanEntity owner = (HumanEntity) ((SpecialEnderChest) inventory).getBukkitOwner();
|
||||||
|
//noinspection ConstantConditions // Owner name can be null when loaded under certain conditions.
|
||||||
title = (owner.getName() != null ? owner.getName() : owner.getUniqueId().toString()) + "'s Ender Chest";
|
title = (owner.getName() != null ? owner.getName() : owner.getUniqueId().toString()) + "'s Ender Chest";
|
||||||
} else if (inventory instanceof SpecialPlayerInventory) {
|
} else if (inventory instanceof SpecialPlayerInventory) {
|
||||||
EntityHuman owner = ((PlayerInventory) inventory).player;
|
EntityHuman owner = ((PlayerInventory) inventory).player;
|
||||||
@@ -142,9 +143,9 @@ public class PlayerDataManager implements IPlayerDataManager {
|
|||||||
return Containers.GENERIC_9X3;
|
return Containers.GENERIC_9X3;
|
||||||
case 36:
|
case 36:
|
||||||
return Containers.GENERIC_9X4;
|
return Containers.GENERIC_9X4;
|
||||||
case 41: // PLAYER
|
|
||||||
case 45:
|
case 45:
|
||||||
return Containers.GENERIC_9X5;
|
return Containers.GENERIC_9X5;
|
||||||
|
case 41: // PLAYER
|
||||||
case 54:
|
case 54:
|
||||||
return Containers.GENERIC_9X6;
|
return Containers.GENERIC_9X6;
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,8 @@ package com.lishid.openinv.internal.v1_14_R1;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
||||||
|
import com.lishid.openinv.util.Pair;
|
||||||
|
import com.lishid.openinv.util.SingleFieldList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
@@ -32,12 +34,12 @@ import net.minecraft.server.v1_14_R1.EntityPlayer;
|
|||||||
import net.minecraft.server.v1_14_R1.EnumItemSlot;
|
import net.minecraft.server.v1_14_R1.EnumItemSlot;
|
||||||
import net.minecraft.server.v1_14_R1.IBlockData;
|
import net.minecraft.server.v1_14_R1.IBlockData;
|
||||||
import net.minecraft.server.v1_14_R1.IChatBaseComponent;
|
import net.minecraft.server.v1_14_R1.IChatBaseComponent;
|
||||||
|
import net.minecraft.server.v1_14_R1.IInventory;
|
||||||
import net.minecraft.server.v1_14_R1.Item;
|
import net.minecraft.server.v1_14_R1.Item;
|
||||||
import net.minecraft.server.v1_14_R1.ItemArmor;
|
import net.minecraft.server.v1_14_R1.ItemArmor;
|
||||||
import net.minecraft.server.v1_14_R1.ItemStack;
|
import net.minecraft.server.v1_14_R1.ItemStack;
|
||||||
import net.minecraft.server.v1_14_R1.NBTTagCompound;
|
import net.minecraft.server.v1_14_R1.NBTTagCompound;
|
||||||
import net.minecraft.server.v1_14_R1.NBTTagList;
|
import net.minecraft.server.v1_14_R1.NBTTagList;
|
||||||
import net.minecraft.server.v1_14_R1.NonNullList;
|
|
||||||
import net.minecraft.server.v1_14_R1.PacketPlayOutSetSlot;
|
import net.minecraft.server.v1_14_R1.PacketPlayOutSetSlot;
|
||||||
import net.minecraft.server.v1_14_R1.PlayerInventory;
|
import net.minecraft.server.v1_14_R1.PlayerInventory;
|
||||||
import net.minecraft.server.v1_14_R1.ReportedException;
|
import net.minecraft.server.v1_14_R1.ReportedException;
|
||||||
@@ -45,6 +47,7 @@ import net.minecraft.server.v1_14_R1.World;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftHumanEntity;
|
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftHumanEntity;
|
||||||
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventory;
|
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventory;
|
||||||
|
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryCrafting;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
@@ -56,8 +59,11 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
private final CraftInventory inventory;
|
private final CraftInventory inventory;
|
||||||
private boolean playerOnline;
|
private boolean playerOnline;
|
||||||
private EntityHuman player;
|
private EntityHuman player;
|
||||||
private NonNullList<ItemStack> items, armor, extraSlots;
|
private List<ItemStack> items, armor, extraSlots, crafting;
|
||||||
private List<NonNullList<ItemStack>> f;
|
@SuppressWarnings("MismatchedQueryAndUpdateOfCollection") // Backing field is mutable.
|
||||||
|
// TODO: cursor requires an additional slot listener
|
||||||
|
private final List<ItemStack> cursor = new SingleFieldList<>(this::getCarried, this::setCarried);
|
||||||
|
private List<List<ItemStack>> f;
|
||||||
|
|
||||||
public SpecialPlayerInventory(final Player bukkitPlayer, final Boolean online) {
|
public SpecialPlayerInventory(final Player bukkitPlayer, final Boolean online) {
|
||||||
super(PlayerDataManager.getHandle(bukkitPlayer));
|
super(PlayerDataManager.getHandle(bukkitPlayer));
|
||||||
@@ -67,7 +73,12 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
this.items = this.player.inventory.items;
|
this.items = this.player.inventory.items;
|
||||||
this.armor = this.player.inventory.armor;
|
this.armor = this.player.inventory.armor;
|
||||||
this.extraSlots = this.player.inventory.extraSlots;
|
this.extraSlots = this.player.inventory.extraSlots;
|
||||||
this.f = ImmutableList.of(this.items, this.armor, this.extraSlots);
|
this.crafting = this.getCrafting().getContents();
|
||||||
|
this.f = ImmutableList.of(this.items, this.armor, this.extraSlots, this.crafting, this.cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IInventory getCrafting() {
|
||||||
|
return ((CraftInventoryCrafting) this.player.defaultContainer.getBukkitView().getTopInventory()).getInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -79,11 +90,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
for (int i = 0; i < getSize(); ++i) {
|
for (int i = 0; i < getSize(); ++i) {
|
||||||
this.player.inventory.setItem(i, getRawItem(i));
|
this.player.inventory.setItem(i, getRawItem(i));
|
||||||
}
|
}
|
||||||
|
// Crafting/cursor are not insertable while player is offline and do not need special treatment.
|
||||||
this.player.inventory.itemInHandIndex = this.itemInHandIndex;
|
this.player.inventory.itemInHandIndex = this.itemInHandIndex;
|
||||||
this.items = this.player.inventory.items;
|
this.items = this.player.inventory.items;
|
||||||
this.armor = this.player.inventory.armor;
|
this.armor = this.player.inventory.armor;
|
||||||
this.extraSlots = this.player.inventory.extraSlots;
|
this.extraSlots = this.player.inventory.extraSlots;
|
||||||
this.f = ImmutableList.of(this.items, this.armor, this.extraSlots);
|
this.crafting = this.getCrafting().getContents();
|
||||||
|
this.f = ImmutableList.of(this.items, this.armor, this.extraSlots, this.crafting, this.cursor);
|
||||||
this.playerOnline = true;
|
this.playerOnline = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,8 +137,8 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ItemStack getRawItem(int i) {
|
private ItemStack getRawItem(int i) {
|
||||||
NonNullList<ItemStack> list = null;
|
List<ItemStack> list = null;
|
||||||
for (NonNullList<ItemStack> next : this.f) {
|
for (List<ItemStack> next : this.f) {
|
||||||
if (i < next.size()) {
|
if (i < next.size()) {
|
||||||
list = next;
|
list = next;
|
||||||
break;
|
break;
|
||||||
@@ -171,7 +184,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
return 45;
|
return 54;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -179,30 +192,35 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
return !this.getViewers().isEmpty();
|
return !this.getViewers().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private Pair<List<ItemStack>, Integer> getLocalizedIndex(int i) {
|
||||||
public void setItem(int i, final ItemStack itemstack) {
|
List<ItemStack> localList = null;
|
||||||
List<ItemStack> list = this.items;
|
for (List<ItemStack> list : this.f) {
|
||||||
|
if (i < list.size()) {
|
||||||
if (i >= list.size()) {
|
localList = list;
|
||||||
|
break;
|
||||||
|
}
|
||||||
i -= list.size();
|
i -= list.size();
|
||||||
list = this.armor;
|
}
|
||||||
} else {
|
|
||||||
|
if (localList == this.armor) {
|
||||||
|
i = this.getReversedArmorSlotNum(i);
|
||||||
|
} else if (localList == this.items) {
|
||||||
i = this.getReversedItemSlotNum(i);
|
i = this.getReversedItemSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= list.size()) {
|
return new Pair<>(localList, i);
|
||||||
i -= list.size();
|
}
|
||||||
list = this.extraSlots;
|
|
||||||
} else if (list == this.armor) {
|
|
||||||
i = this.getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= list.size()) {
|
@Override
|
||||||
|
public void setItem(int i, final ItemStack itemstack) {
|
||||||
|
Pair<List<ItemStack>, Integer> localizedIndex = getLocalizedIndex(i);
|
||||||
|
if (localizedIndex.getLeft() == null
|
||||||
|
// TODO: should this be a constant instead of comparing to transient slot containers?
|
||||||
|
|| !playerOnline && (localizedIndex.getLeft() == crafting || localizedIndex.getLeft() == cursor)) {
|
||||||
this.player.drop(itemstack, true);
|
this.player.drop(itemstack, true);
|
||||||
return;
|
} else {
|
||||||
|
localizedIndex.getLeft().set(localizedIndex.getRight(), itemstack);
|
||||||
}
|
}
|
||||||
|
|
||||||
list.set(i, itemstack);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -212,51 +230,26 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack splitStack(int i, final int j) {
|
public ItemStack splitStack(int i, final int j) {
|
||||||
List<ItemStack> list = this.items;
|
Pair<List<ItemStack>, Integer> localizedIndex = getLocalizedIndex(i);
|
||||||
|
|
||||||
if (i >= list.size()) {
|
if (localizedIndex.getLeft() == null) {
|
||||||
i -= list.size();
|
|
||||||
list = this.armor;
|
|
||||||
} else {
|
|
||||||
i = this.getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= list.size()) {
|
|
||||||
i -= list.size();
|
|
||||||
list = this.extraSlots;
|
|
||||||
} else if (list == this.armor) {
|
|
||||||
i = this.getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= list.size()) {
|
|
||||||
return ItemStack.a;
|
return ItemStack.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
return list.get(i).isEmpty() ? ItemStack.a : ContainerUtil.a(list, i, j);
|
return localizedIndex.getLeft().get(i).isEmpty() ? ItemStack.a : ContainerUtil.a(localizedIndex.getLeft(), localizedIndex.getRight(), j);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
public ItemStack splitWithoutUpdate(int i) {
|
||||||
List<ItemStack> list = this.items;
|
Pair<List<ItemStack>, Integer> localizedIndex = getLocalizedIndex(i);
|
||||||
|
|
||||||
if (i >= list.size()) {
|
if (localizedIndex.getLeft() == null) {
|
||||||
i -= list.size();
|
|
||||||
list = this.armor;
|
|
||||||
} else {
|
|
||||||
i = this.getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= list.size()) {
|
|
||||||
i -= list.size();
|
|
||||||
list = this.extraSlots;
|
|
||||||
} else if (list == this.armor) {
|
|
||||||
i = this.getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= list.size()) {
|
|
||||||
return ItemStack.a;
|
return ItemStack.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<ItemStack> list = localizedIndex.getLeft();
|
||||||
|
i = localizedIndex.getRight();
|
||||||
|
|
||||||
if (!list.get(i).isEmpty()) {
|
if (!list.get(i).isEmpty()) {
|
||||||
ItemStack itemstack = list.get(i);
|
ItemStack itemstack = list.get(i);
|
||||||
|
|
||||||
@@ -280,11 +273,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
@Override
|
@Override
|
||||||
public void onOpen(CraftHumanEntity who) {
|
public void onOpen(CraftHumanEntity who) {
|
||||||
this.transaction.add(who);
|
this.transaction.add(who);
|
||||||
|
this.getCrafting().getViewers().add(who);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClose(CraftHumanEntity who) {
|
public void onClose(CraftHumanEntity who) {
|
||||||
this.transaction.remove(who);
|
this.transaction.remove(who);
|
||||||
|
this.getCrafting().getViewers().remove(who);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -326,7 +321,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!this.a(itemstack, itemstack1)) {
|
if (!this.a(itemstack, itemstack1)) {
|
||||||
remains -= (itemstack1.getMaxStackSize() < this.getMaxStackSize() ? itemstack1.getMaxStackSize() : this.getMaxStackSize()) - itemstack1.getCount();
|
remains -= Math.min(itemstack1.getMaxStackSize(), this.getMaxStackSize()) - itemstack1.getCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remains <= 0) {
|
if (remains <= 0) {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2011-2018 lishid. All rights reserved.
|
* Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
2
pom.xml
2
pom.xml
@@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2011-2018 lishid. All rights reserved.
|
~ Copyright (C) 2011-2019 lishid. All rights reserved.
|
||||||
~
|
~
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ This program is free software: you can redistribute it and/or modify
|
||||||
~ it under the terms of the GNU General Public License as published by
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
Reference in New Issue
Block a user