Fix sponge default user permission migration.
Sponge default user permission data will now be migrated to LP's default group. * Fix NPE during entity move.
This commit is contained in:
parent
29824075e2
commit
6bd5bcf2c4
|
@ -296,7 +296,7 @@ public class CommonEntityEventHandler {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (user != null) {
|
||||
if (player != null) {
|
||||
final boolean showGpPrefix = GriefDefenderPlugin.getGlobalConfig().getConfig().message.enterExitShowGdPrefix;
|
||||
user.getInternalPlayerData().lastClaim = new WeakReference<>(toClaim);
|
||||
Component welcomeMessage = gpEvent.getEnterMessage().orElse(null);
|
||||
|
|
|
@ -28,6 +28,7 @@ import com.griefdefender.GriefDefenderPlugin;
|
|||
import com.griefdefender.api.permission.ContextKeys;
|
||||
import com.griefdefender.api.permission.flag.Flag;
|
||||
import com.griefdefender.registry.FlagRegistryModule;
|
||||
import com.griefdefender.util.PermissionUtil;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.spongepowered.api.service.context.Context;
|
||||
import org.spongepowered.api.service.permission.PermissionService;
|
||||
|
@ -138,7 +139,7 @@ public class GPSpongeMigrator {
|
|||
}
|
||||
}
|
||||
// migrate default user
|
||||
migrateSubject(GriefDefenderPlugin.getInstance().permissionService.getDefaults(), false);
|
||||
migrateSubject(GriefDefenderPlugin.getInstance().permissionService.getDefaults(), false, true);
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Performing user permission migration: 100%");
|
||||
});
|
||||
});
|
||||
|
@ -160,6 +161,10 @@ public class GPSpongeMigrator {
|
|||
}
|
||||
|
||||
public void migrateSubject(Subject subject, boolean isGroup) {
|
||||
migrateSubject(subject, isGroup, false);
|
||||
}
|
||||
|
||||
public void migrateSubject(Subject subject, boolean isGroup, boolean isDefault) {
|
||||
boolean migrated = false;
|
||||
try {
|
||||
for (Map.Entry<Set<Context>, Map<String, Boolean>> mapEntry : subject.getSubjectData().getAllPermissions().entrySet()) {
|
||||
|
@ -192,18 +197,34 @@ public class GPSpongeMigrator {
|
|||
final Flag flag = FlagRegistryModule.getInstance().getById(flagBase).orElse(null);
|
||||
if (flag == null) {
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Detected legacy permission '" + originalPermission + "' on subject " + subject.getFriendlyIdentifier().orElse(subject.getIdentifier()) + "'. Migrating...");
|
||||
subject.getSubjectData().setPermission(originalContexts, originalPermission, Tristate.UNDEFINED);
|
||||
if (isDefault) {
|
||||
PermissionUtil.getInstance().setPermissionValue(GriefDefenderPlugin.DEFAULT_HOLDER, originalPermission, com.griefdefender.api.Tristate.UNDEFINED, this.getGDContexts(originalContexts));
|
||||
} else {
|
||||
subject.getSubjectData().setPermission(originalContexts, originalPermission, Tristate.UNDEFINED);
|
||||
}
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Removed legacy permission '" + originalPermission + "'.");
|
||||
subject.getSubjectData().setPermission(originalContexts, currentPermission, Tristate.fromBoolean(entry.getValue()));
|
||||
if (isDefault) {
|
||||
PermissionUtil.getInstance().setPermissionValue(GriefDefenderPlugin.DEFAULT_HOLDER, currentPermission, com.griefdefender.api.Tristate.fromBoolean(entry.getValue()), this.getGDContexts(originalContexts));
|
||||
} else {
|
||||
subject.getSubjectData().setPermission(originalContexts, currentPermission, Tristate.fromBoolean(entry.getValue()));
|
||||
}
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Set new permission '" + currentPermission + "' with contexts " + originalContexts);
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Successfully migrated permission " + currentPermission + " to " + currentPermission + " with contexts " + originalContexts);
|
||||
} else {
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Detected legacy flag permission '" + originalPermission + "' on subject " + subject.getFriendlyIdentifier().orElse(subject.getIdentifier()) + "'. Migrating...");
|
||||
subject.getSubjectData().setPermission(originalContexts, originalPermission, Tristate.UNDEFINED);
|
||||
if (isDefault) {
|
||||
PermissionUtil.getInstance().setPermissionValue(GriefDefenderPlugin.DEFAULT_HOLDER, originalPermission, com.griefdefender.api.Tristate.UNDEFINED, this.getGDContexts(originalContexts));
|
||||
} else {
|
||||
subject.getSubjectData().setPermission(originalContexts, originalPermission, Tristate.UNDEFINED);
|
||||
}
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Removed legacy flag permission '" + originalPermission + "'.");
|
||||
Set<Context> newContextSet = new HashSet<>(gdContexts);
|
||||
applyContexts(flagBase, currentPermission, newContextSet);
|
||||
subject.getSubjectData().setPermission(newContextSet, flag.getPermission(), Tristate.fromBoolean(entry.getValue()));
|
||||
if (isDefault) {
|
||||
PermissionUtil.getInstance().setPermissionValue(GriefDefenderPlugin.DEFAULT_HOLDER, flag.getPermission(), com.griefdefender.api.Tristate.fromBoolean(entry.getValue()), this.getGDContexts(newContextSet));
|
||||
} else {
|
||||
subject.getSubjectData().setPermission(newContextSet, flag.getPermission(), Tristate.fromBoolean(entry.getValue()));
|
||||
}
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Set new flag permission '" + flag.getPermission() + "' with contexts " + newContextSet);
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Successfully migrated flag permission " + currentPermission + " to " + flag.getPermission() + " with contexts " + newContextSet);
|
||||
}
|
||||
|
@ -223,6 +244,14 @@ public class GPSpongeMigrator {
|
|||
}
|
||||
}
|
||||
|
||||
private Set<com.griefdefender.api.permission.Context> getGDContexts(Set<Context> spongeContexts) {
|
||||
Set<com.griefdefender.api.permission.Context> gdContexts = new HashSet<>();
|
||||
for (Context context : spongeContexts) {
|
||||
gdContexts.add(new com.griefdefender.api.permission.Context(context.getKey(), context.getValue()));
|
||||
}
|
||||
return gdContexts;
|
||||
}
|
||||
|
||||
private void applyContexts(String flagBase, String currentPermission, Set<Context> contexts) {
|
||||
final int permLength = currentPermission.split("\\.").length;
|
||||
if (permLength == 3) {
|
||||
|
|
Loading…
Reference in New Issue