Nukkit stores attachments in a set, not a list (#1046)

This commit is contained in:
Luck 2018-06-11 17:07:56 +01:00
parent 194790110d
commit 8b181b877b
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B

View File

@ -46,8 +46,6 @@ import cn.nukkit.plugin.Plugin;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -116,18 +114,18 @@ public class LPPermissible extends PermissibleBase {
} }
/** /**
* Injects a fake 'attachments' list into the superclass, for dumb plugins * Injects a fake 'attachments' set into the superclass, for dumb plugins
* which for some reason decided to add attachments via reflection. * which for some reason decided to add attachments via reflection.
* *
* The fake list proxies (some) calls back to the proper methods on this permissible. * The fake list proxies (some) calls back to the proper methods on this permissible.
*/ */
private void injectFakeAttachmentsList() { private void injectFakeAttachmentsList() {
FakeAttachmentList fakeList = new FakeAttachmentList(); FakeAttachmentSet fakeSet = new FakeAttachmentSet();
try { try {
// the field we need to modify is in the superclass - it has private // the field we need to modify is in the superclass - it has private
// and final modifiers so we have to use reflection to modify it. // and final modifiers so we have to use reflection to modify it.
ATTACHMENTS_FIELD.set(this, fakeList); ATTACHMENTS_FIELD.set(this, fakeSet);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -314,7 +312,7 @@ public class LPPermissible extends PermissibleBase {
} }
/** /**
* A fake list to be injected into the superclass. This implementation simply * A fake set to be injected into the superclass. This implementation simply
* proxies calls back to this permissible instance. * proxies calls back to this permissible instance.
* *
* Some (clever/dumb??) plugins attempt to add/remove/query attachments using reflection. * Some (clever/dumb??) plugins attempt to add/remove/query attachments using reflection.
@ -322,7 +320,7 @@ public class LPPermissible extends PermissibleBase {
* An instance of this map is injected into the super instance so these plugins continue * An instance of this map is injected into the super instance so these plugins continue
* to work with LuckPerms. * to work with LuckPerms.
*/ */
private final class FakeAttachmentList implements List<PermissionAttachment> { private final class FakeAttachmentSet implements Set<PermissionAttachment> {
@Override @Override
public boolean add(PermissionAttachment attachment) { public boolean add(PermissionAttachment attachment) {
@ -367,11 +365,6 @@ public class LPPermissible extends PermissibleBase {
return ImmutableList.<PermissionAttachment>copyOf(LPPermissible.this.lpAttachments).iterator(); return ImmutableList.<PermissionAttachment>copyOf(LPPermissible.this.lpAttachments).iterator();
} }
@Override
public ListIterator<PermissionAttachment> listIterator() {
return ImmutableList.<PermissionAttachment>copyOf(LPPermissible.this.lpAttachments).listIterator();
}
@Nonnull @Nonnull
@Override @Override
public Object[] toArray() { public Object[] toArray() {
@ -387,16 +380,7 @@ public class LPPermissible extends PermissibleBase {
@Override public int size() { throw new UnsupportedOperationException(); } @Override public int size() { throw new UnsupportedOperationException(); }
@Override public boolean isEmpty() { throw new UnsupportedOperationException(); } @Override public boolean isEmpty() { throw new UnsupportedOperationException(); }
@Override public boolean containsAll(@Nonnull Collection<?> c) { throw new UnsupportedOperationException(); } @Override public boolean containsAll(@Nonnull Collection<?> c) { throw new UnsupportedOperationException(); }
@Override public boolean addAll(int index, @Nonnull Collection<? extends PermissionAttachment> c) { throw new UnsupportedOperationException(); }
@Override public boolean removeAll(@Nonnull Collection<?> c) { throw new UnsupportedOperationException(); } @Override public boolean removeAll(@Nonnull Collection<?> c) { throw new UnsupportedOperationException(); }
@Override public boolean retainAll(@Nonnull Collection<?> c) { throw new UnsupportedOperationException(); } @Override public boolean retainAll(@Nonnull Collection<?> c) { throw new UnsupportedOperationException(); }
@Override public PermissionAttachment get(int index) { throw new UnsupportedOperationException(); }
@Override public PermissionAttachment set(int index, PermissionAttachment element) { throw new UnsupportedOperationException(); }
@Override public void add(int index, PermissionAttachment element) { throw new UnsupportedOperationException(); }
@Override public PermissionAttachment remove(int index) { throw new UnsupportedOperationException(); }
@Override public int indexOf(Object o) { throw new UnsupportedOperationException(); }
@Override public int lastIndexOf(Object o) { throw new UnsupportedOperationException(); }
@Nonnull @Override public ListIterator<PermissionAttachment> listIterator(int index) { throw new UnsupportedOperationException(); }
@Nonnull @Override public List<PermissionAttachment> subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException(); }
} }
} }