Add JDK 11+ support.

* Add missing contexts for global option lookups.
* Fix min/max claim size messages.
This commit is contained in:
bloodshot 2019-07-28 17:37:34 -04:00
parent d23e070e68
commit ebf5f6ad3e
8 changed files with 106 additions and 127 deletions

View File

@ -134,6 +134,15 @@ public class GDBootstrap extends JavaPlugin {
name = "me.lucko:jar-relocator:1.3";
file = this.jarMap.get(name);
BootstrapUtil.addUrlToClassLoader(name, file);
// inject reflect helper
final String javaVersion = System.getProperty("java.version");
if (javaVersion.startsWith("11") || javaVersion.startsWith("12")) {
name = "com.griefdefender:reflect-helper:2.0";
} else {
name = "com.griefdefender:reflect-helper:1.0";
}
file = this.jarMap.get(name);
BootstrapUtil.addUrlToClassLoader(name, file);
}
public void downloadLibrary(String name, String relocate, String sha1, String url, Path libPath) {

View File

@ -707,7 +707,7 @@ public class GDClaim implements Claim {
public double getOwnerEconomyBlockCost(GDPlayerData playerData) {
final GDPermissionHolder subject = playerData == null ? GriefDefenderPlugin.DEFAULT_HOLDER : playerData.getSubject();
return GDPermissionManager.getInstance().getGlobalInternalOptionValue(subject, Options.ECONOMY_BLOCK_COST, playerData).intValue();
return GDPermissionManager.getInstance().getGlobalInternalOptionValue(subject, Options.ECONOMY_BLOCK_COST, this, playerData).intValue();
}
public int getOwnerMinClaimLevel() {
@ -716,7 +716,7 @@ public class GDClaim implements Claim {
public int getOwnerMinClaimLevel(GDPlayerData playerData) {
final GDPermissionHolder subject = playerData == null ? GriefDefenderPlugin.DEFAULT_HOLDER : playerData.getSubject();
return GDPermissionManager.getInstance().getGlobalInternalOptionValue(subject, Options.MIN_LEVEL, playerData).intValue();
return GDPermissionManager.getInstance().getGlobalInternalOptionValue(subject, Options.MIN_LEVEL, this, playerData).intValue();
}
public int getOwnerMaxClaimLevel() {
@ -725,7 +725,7 @@ public class GDClaim implements Claim {
public int getOwnerMaxClaimLevel(GDPlayerData playerData) {
final GDPermissionHolder subject = playerData == null ? GriefDefenderPlugin.DEFAULT_HOLDER : playerData.getSubject();
return GDPermissionManager.getInstance().getGlobalInternalOptionValue(subject, Options.MAX_LEVEL, playerData).intValue();
return GDPermissionManager.getInstance().getGlobalInternalOptionValue(subject, Options.MAX_LEVEL, this, playerData).intValue();
}
@Override
@ -1428,6 +1428,15 @@ public class GDClaim implements Claim {
}
}
Component message = null;
String maxCuboidArea = maxClaimX + "x" + maxClaimY + "x" + maxClaimZ;
if (maxClaimX == 0 && maxClaimY == 0 && maxClaimZ == 0) {
maxCuboidArea = "";
}
String maxArea = maxClaimX + "x" + maxClaimZ;
if (maxClaimX == 0 && maxClaimZ == 0) {
maxArea = "";
}
if (maxClaimX > 0) {
int size = Math.abs(greaterCorner.getX() - lesserCorner.getX()) + 1;
if (size > maxClaimX) {
@ -1436,16 +1445,16 @@ public class GDClaim implements Claim {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MAX, ImmutableMap.of(
"axis", "x",
"size", size,
"max-size", maxClaimX,
"max-size", maxClaimX == 0 ? "" : maxClaimX,
"min-area", minClaimX + "x" + minClaimY + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimY + "x" + minClaimZ));
"max-area", maxCuboidArea));
} else {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MAX, ImmutableMap.of(
"axis", "x",
"size", size,
"max-size", maxClaimX,
"max-size", maxClaimX == 0 ? "" : maxClaimX,
"min-area", minClaimX + "x" + minClaimZ,
"max-area", maxClaimX + "x" + minClaimZ));
"max-area", maxArea));
}
GriefDefenderPlugin.sendMessage(player, message);
}
@ -1460,16 +1469,16 @@ public class GDClaim implements Claim {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MAX, ImmutableMap.of(
"axis", "y",
"size", size,
"max-size", maxClaimY,
"max-size", maxClaimY == 0 ? "" : maxClaimY,
"min-area", minClaimX + "x" + minClaimY + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimY + "x" + minClaimZ));
"max-area", maxCuboidArea));
} else {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MAX, ImmutableMap.of(
"axis", "y",
"size", size,
"max-size", maxClaimY,
"max-size", maxClaimY == 0 ? "" : maxClaimY,
"min-area", minClaimX + "x" + minClaimZ,
"max-area", maxClaimX + "x" + minClaimZ));
"max-area", maxArea));
}
GriefDefenderPlugin.sendMessage(player, message);
}
@ -1484,16 +1493,16 @@ public class GDClaim implements Claim {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MAX, ImmutableMap.of(
"axis", "z",
"size", size,
"max-size", maxClaimY,
"max-size", maxClaimZ == 0 ? "" : maxClaimZ,
"min-area", minClaimX + "x" + minClaimY + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimY + "x" + minClaimZ));
"max-area", maxCuboidArea));
} else {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MAX, ImmutableMap.of(
"axis", "z",
"size", size,
"max-size", maxClaimY,
"max-size", maxClaimZ == 0 ? "" : maxClaimZ,
"min-area", minClaimX + "x" + minClaimZ,
"max-area", maxClaimX + "x" + minClaimZ));
"max-area", maxArea));
}
GriefDefenderPlugin.sendMessage(player, message);
}
@ -1508,16 +1517,16 @@ public class GDClaim implements Claim {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MIN, ImmutableMap.of(
"axis", "x",
"size", size,
"min-size", minClaimX,
"min-size", minClaimX == 0 ? "" : minClaimX,
"min-area", minClaimX + "x" + minClaimY + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimY + "x" + maxClaimZ));
"max-area", maxCuboidArea));
} else {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MIN, ImmutableMap.of(
"axis", "x",
"size", size,
"min-size", minClaimX,
"min-area", minClaimX + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimZ));
"max-area", maxArea));
}
GriefDefenderPlugin.sendMessage(player, message);
}
@ -1532,16 +1541,16 @@ public class GDClaim implements Claim {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MIN, ImmutableMap.of(
"axis", "y",
"size", size,
"min-size", minClaimX,
"min-size", minClaimY == 0 ? "" : minClaimY,
"min-area", minClaimX + "x" + minClaimY + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimY + "x" + maxClaimZ));
"max-area", maxCuboidArea));
} else {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MIN, ImmutableMap.of(
"axis", "y",
"size", size,
"min-size", minClaimX,
"min-size", minClaimY == 0 ? "" : minClaimY,
"min-area", minClaimX + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimZ));
"max-area", maxArea));
}
GriefDefenderPlugin.sendMessage(player, message);
}
@ -1556,16 +1565,16 @@ public class GDClaim implements Claim {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MIN, ImmutableMap.of(
"axis", "z",
"size", size,
"min-size", minClaimX,
"min-size", minClaimZ == 0 ? "" : minClaimZ,
"min-area", minClaimX + "x" + minClaimY + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimY + "x" + maxClaimZ));
"max-area", maxCuboidArea));
} else {
message = messageData.getMessage(MessageStorage.CLAIM_SIZE_MIN, ImmutableMap.of(
"axis", "z",
"size", size,
"min-size", minClaimX,
"min-size", minClaimZ == 0 ? "" : minClaimZ,
"min-area", minClaimX + "x" + minClaimZ,
"max-area", maxClaimX + "x" + maxClaimZ));
"max-area", maxArea));
}
GriefDefenderPlugin.sendMessage(player, message);
}

View File

@ -799,6 +799,11 @@ public class GDPermissionManager implements PermissionManager {
contexts.addAll(PermissionUtil.getInstance().getActiveContexts(holder, playerData, claim));
}
if (claim != null) {
contexts.add(claim.getDefaultTypeContext());
contexts.add(claim.getOverrideTypeContext());
contexts.add(claim.getOverrideClaimContext());
}
Contexts context = Contexts.global().setContexts(contexts);
MetaData metaData = holder.getLuckPermsHolder().getCachedData().getMetaData(context);
String value = metaData.getMeta().get(option.getPermission());
@ -846,7 +851,8 @@ public class GDPermissionManager implements PermissionManager {
if (playerData != null) {
playerData.ignoreActiveContexts = true;
}
contexts.addAll(PermissionUtil.getInstance().getActiveContexts(holder));
//contexts.addAll(PermissionUtil.getInstance().getActiveContexts(holder));
contexts.addAll(PermissionUtil.getInstance().getActiveContexts(holder, playerData, claim));
}
// Check type override
@ -878,8 +884,13 @@ public class GDPermissionManager implements PermissionManager {
return this.getDoubleValue(value);
}
// Check global
return this.getGlobalInternalOptionValue(holder, option, claim, playerData);
// Check default holder
if (holder != GriefDefenderPlugin.DEFAULT_HOLDER) {
return getInternalOptionValue(GriefDefenderPlugin.DEFAULT_HOLDER, option, claim, type, playerData);
}
// Should never happen
return 0.0;
}
private Double getDoubleValue(String option) {

View File

@ -1,98 +0,0 @@
/*
* This file is part of GriefDefender, licensed under the MIT License (MIT).
*
* Copyright (c) SpongePowered <https://www.spongepowered.org>
* Copyright (c) contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.griefdefender.util;
import com.griefdefender.GriefDefenderPlugin;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import javax.annotation.Nullable;
public final class RegistryHelper {
public static boolean mapFields(Class<?> apiClass, Map<String, ?> mapping) {
return mapFields(apiClass, mapping, null);
}
public static boolean mapFields(Class<?> apiClass, Map<String, ?> mapping, @Nullable Set<String> ignoredFields) {
return mapFields(apiClass, fieldName -> mapping.get(fieldName.toLowerCase(Locale.ENGLISH)), ignoredFields, false);
}
public static boolean mapFields(Class<?> apiClass, Function<String, ?> mapFunction) {
return mapFields(apiClass, mapFunction, null, false);
}
public static boolean mapFields(Class<?> apiClass, Function<String, ?> mapFunction, @Nullable Set<String> ignoredFields, boolean ignore) {
boolean mappingSuccess = true;
for (Field f : apiClass.getDeclaredFields()) {
final String fieldName = f.getName();
if (ignoredFields != null && ignoredFields.contains(fieldName)) {
continue;
}
try {
Object value = mapFunction.apply(fieldName);
if (value == null) {
// check for minecraft id
value = mapFunction.apply("minecraft:" + fieldName);
}
if (value == null && !ignore) {
GriefDefenderPlugin.getInstance().getLogger().warning("Skipping " + f.getDeclaringClass().getName() + "." + fieldName);
continue;
}
f.setAccessible(true);
Field modifiers = f.getClass().getDeclaredField("modifiers");
modifiers.setAccessible(true);
modifiers.setInt(f, f.getModifiers() & ~Modifier.FINAL);
f.set(null, value);
} catch (Exception e) {
if (!ignore) {
GriefDefenderPlugin.getInstance().getLogger().severe("Error while mapping " + f.getDeclaringClass().getName() + "." + fieldName);
e.printStackTrace();
}
mappingSuccess = false;
}
}
return mappingSuccess;
}
public static void setFinalStatic(Class<?> clazz, String fieldName, Object newValue) {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
Field modifiers = field.getClass().getDeclaredField("modifiers");
modifiers.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
} catch (Exception e) {
GriefDefenderPlugin.getInstance().getLogger().severe("Error while setting field " + clazz.getName() + "." + fieldName);
e.printStackTrace();
}
}
}

View File

@ -13,6 +13,18 @@
"path": "com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar"
},
{
"name": "com.griefdefender:reflect-helper:1.0",
"sha1": "7a50bffa9f0062ac4ca376d95a0e6599aa5f3257",
"path": "com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar"
},
{
"name": "com.griefdefender:reflect-helper:2.0",
"sha1": "ee45d077344ae67e155e37eb61025401944ffabc",
"path": "com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar"
},
{
"name": "org.ow2.asm:asm-debug-all:5.2",
"sha1": "3354e11e2b34215f06dab629ab88e06aca477c19",

View File

@ -13,6 +13,18 @@
"path": "com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar"
},
{
"name": "com.griefdefender:reflect-helper:1.0",
"sha1": "7a50bffa9f0062ac4ca376d95a0e6599aa5f3257",
"path": "com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar"
},
{
"name": "com.griefdefender:reflect-helper:2.0",
"sha1": "ee45d077344ae67e155e37eb61025401944ffabc",
"path": "com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar"
},
{
"name": "org.ow2.asm:asm-debug-all:5.2",
"sha1": "3354e11e2b34215f06dab629ab88e06aca477c19",

View File

@ -13,6 +13,18 @@
"path": "com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar"
},
{
"name": "com.griefdefender:reflect-helper:1.0",
"sha1": "7a50bffa9f0062ac4ca376d95a0e6599aa5f3257",
"path": "com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar"
},
{
"name": "com.griefdefender:reflect-helper:2.0",
"sha1": "ee45d077344ae67e155e37eb61025401944ffabc",
"path": "com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar"
},
{
"name": "org.ow2.asm:asm-debug-all:5.2",
"sha1": "3354e11e2b34215f06dab629ab88e06aca477c19",

View File

@ -13,6 +13,18 @@
"path": "com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/api/1.0.0-SNAPSHOT/api-1.0.0-20190727.235445-3.jar"
},
{
"name": "com.griefdefender:reflect-helper:1.0",
"sha1": "7a50bffa9f0062ac4ca376d95a0e6599aa5f3257",
"path": "com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/1.0/reflect-helper-1.0.jar"
},
{
"name": "com.griefdefender:reflect-helper:2.0",
"sha1": "ee45d077344ae67e155e37eb61025401944ffabc",
"path": "com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/reflect-helper/2.0/reflect-helper-2.0.jar"
},
{
"name": "org.ow2.asm:asm-debug-all:5.2",
"sha1": "3354e11e2b34215f06dab629ab88e06aca477c19",