mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-11-28 21:46:50 +01:00
Update to BentoBox 1.14-SNAPSHOT API.
Implement new API features. Replace deprecated methods. Add compatibility layer with Minecraft 1.16 version.
This commit is contained in:
parent
e85b687e36
commit
ce14c20126
2
pom.xml
2
pom.xml
@ -36,7 +36,7 @@
|
|||||||
<powermock.version>2.0.2</powermock.version>
|
<powermock.version>2.0.2</powermock.version>
|
||||||
<!-- More visible way how to change dependency versions -->
|
<!-- More visible way how to change dependency versions -->
|
||||||
<spigot.version>1.15.2-R0.1-SNAPSHOT</spigot.version>
|
<spigot.version>1.15.2-R0.1-SNAPSHOT</spigot.version>
|
||||||
<bentobox.version>1.13.1</bentobox.version>
|
<bentobox.version>1.14.0-SNAPSHOT</bentobox.version>
|
||||||
<level.version>1.6.0</level.version>
|
<level.version>1.6.0</level.version>
|
||||||
<vault.version>1.7</vault.version>
|
<vault.version>1.7</vault.version>
|
||||||
<!-- Revision variable removes warning about dynamic version -->
|
<!-- Revision variable removes warning about dynamic version -->
|
||||||
|
@ -549,7 +549,7 @@ public class ChallengesManager
|
|||||||
{
|
{
|
||||||
// Create the player data
|
// Create the player data
|
||||||
ChallengesPlayerData pd = new ChallengesPlayerData(uniqueID);
|
ChallengesPlayerData pd = new ChallengesPlayerData(uniqueID);
|
||||||
this.playersDatabase.saveObject(pd);
|
this.playersDatabase.saveObjectAsync(pd);
|
||||||
// Add to cache
|
// Add to cache
|
||||||
this.playerCacheData.put(uniqueID, pd);
|
this.playerCacheData.put(uniqueID, pd);
|
||||||
}
|
}
|
||||||
@ -696,7 +696,7 @@ public class ChallengesManager
|
|||||||
challengesID.forEach(challenge ->
|
challengesID.forEach(challenge ->
|
||||||
level.getChallenges().add(addonName + challenge.substring(world.getName().length())));
|
level.getChallenges().add(addonName + challenge.substring(world.getName().length())));
|
||||||
|
|
||||||
this.levelDatabase.saveObject(level);
|
this.levelDatabase.saveObjectAsync(level);
|
||||||
this.levelCacheData.put(level.getUniqueId(), level);
|
this.levelCacheData.put(level.getUniqueId(), level);
|
||||||
|
|
||||||
updated = true;
|
updated = true;
|
||||||
@ -740,7 +740,7 @@ public class ChallengesManager
|
|||||||
|
|
||||||
updated = true;
|
updated = true;
|
||||||
|
|
||||||
this.challengeDatabase.saveObject(challenge);
|
this.challengeDatabase.saveObjectAsync(challenge);
|
||||||
this.challengeCacheData.put(challenge.getUniqueId(), challenge);
|
this.challengeCacheData.put(challenge.getUniqueId(), challenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -783,7 +783,7 @@ public class ChallengesManager
|
|||||||
|
|
||||||
// This save should not involve any upgrades in other parts.
|
// This save should not involve any upgrades in other parts.
|
||||||
|
|
||||||
this.challengeDatabase.saveObject(challenge);
|
this.challengeDatabase.saveObjectAsync(challenge);
|
||||||
this.challengeCacheData.put(challenge.getUniqueId(), challenge);
|
this.challengeCacheData.put(challenge.getUniqueId(), challenge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -834,7 +834,7 @@ public class ChallengesManager
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.playersDatabase.saveObject(playerData);
|
this.playersDatabase.saveObjectAsync(playerData);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@ import com.google.gson.annotations.Expose;
|
|||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
|
|
||||||
import world.bentobox.bentobox.database.objects.DataObject;
|
import world.bentobox.bentobox.database.objects.DataObject;
|
||||||
|
import world.bentobox.bentobox.database.objects.Table;
|
||||||
|
import world.bentobox.challenges.database.object.adapters.EntityCompatibilityAdapter;
|
||||||
import world.bentobox.challenges.database.object.adapters.RequirementsAdapter;
|
import world.bentobox.challenges.database.object.adapters.RequirementsAdapter;
|
||||||
import world.bentobox.challenges.database.object.requirements.Requirements;
|
import world.bentobox.challenges.database.object.requirements.Requirements;
|
||||||
|
|
||||||
@ -28,6 +30,7 @@ import world.bentobox.challenges.database.object.requirements.Requirements;
|
|||||||
* @author tastybento
|
* @author tastybento
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@Table(name = "Challenge")
|
||||||
public class Challenge implements DataObject
|
public class Challenge implements DataObject
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -156,6 +159,7 @@ public class Challenge implements DataObject
|
|||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Expose
|
@Expose
|
||||||
|
@JsonAdapter(EntityCompatibilityAdapter.class)
|
||||||
private Map<EntityType, Integer> requiredEntities = new EnumMap<>(EntityType.class);
|
private Map<EntityType, Integer> requiredEntities = new EnumMap<>(EntityType.class);
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -14,6 +14,7 @@ import com.google.gson.annotations.Expose;
|
|||||||
|
|
||||||
import world.bentobox.bentobox.api.configuration.ConfigComment;
|
import world.bentobox.bentobox.api.configuration.ConfigComment;
|
||||||
import world.bentobox.bentobox.database.objects.DataObject;
|
import world.bentobox.bentobox.database.objects.DataObject;
|
||||||
|
import world.bentobox.bentobox.database.objects.Table;
|
||||||
import world.bentobox.challenges.ChallengesManager;
|
import world.bentobox.challenges.ChallengesManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,6 +22,7 @@ import world.bentobox.challenges.ChallengesManager;
|
|||||||
* @author tastybento
|
* @author tastybento
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@Table(name = "ChallengeLevel")
|
||||||
public class ChallengeLevel implements DataObject, Comparable<ChallengeLevel>
|
public class ChallengeLevel implements DataObject, Comparable<ChallengeLevel>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -14,6 +14,7 @@ import com.google.gson.annotations.Expose;
|
|||||||
|
|
||||||
import world.bentobox.bentobox.api.logs.LogEntry;
|
import world.bentobox.bentobox.api.logs.LogEntry;
|
||||||
import world.bentobox.bentobox.database.objects.DataObject;
|
import world.bentobox.bentobox.database.objects.DataObject;
|
||||||
|
import world.bentobox.bentobox.database.objects.Table;
|
||||||
import world.bentobox.bentobox.database.objects.adapters.Adapter;
|
import world.bentobox.bentobox.database.objects.adapters.Adapter;
|
||||||
import world.bentobox.bentobox.database.objects.adapters.LogEntryListAdapter;
|
import world.bentobox.bentobox.database.objects.adapters.LogEntryListAdapter;
|
||||||
|
|
||||||
@ -23,6 +24,7 @@ import world.bentobox.bentobox.database.objects.adapters.LogEntryListAdapter;
|
|||||||
* @author tastybento
|
* @author tastybento
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@Table(name = "ChallengesPlayerData")
|
||||||
public class ChallengesPlayerData implements DataObject
|
public class ChallengesPlayerData implements DataObject
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,92 @@
|
|||||||
|
//
|
||||||
|
// Created by BONNe
|
||||||
|
// Copyright - 2020
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
package world.bentobox.challenges.database.object.adapters;
|
||||||
|
|
||||||
|
|
||||||
|
import com.google.gson.*;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import world.bentobox.bentobox.BentoBox;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is compatibility class for dealing with Mojang renamed entities.
|
||||||
|
* Created for update 1.16.
|
||||||
|
*/
|
||||||
|
public class EntityCompatibilityAdapter implements
|
||||||
|
JsonSerializer<Map<EntityType, Integer>>, JsonDeserializer<Map<EntityType, Integer>>
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This method serializes input map as String Key and Integer value.
|
||||||
|
* @param src EnumMap that contains EntityType as key and Integer as value.
|
||||||
|
* @return serialized JsonElement.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(Map<EntityType, Integer> src, Type typeOfSrc, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
JsonObject jsonArray = new JsonObject();
|
||||||
|
|
||||||
|
src.forEach((entity, number) ->
|
||||||
|
{
|
||||||
|
jsonArray.addProperty(entity.name(), number);
|
||||||
|
});
|
||||||
|
|
||||||
|
return jsonArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method deserializes json object that stores Entity Name and amount as integer.
|
||||||
|
* @param json Json element that must be parsed.
|
||||||
|
* @return EnumMap that contains EntityType as key and Integer as value.
|
||||||
|
* @throws JsonParseException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<EntityType, Integer> deserialize(JsonElement json,
|
||||||
|
Type typeOfT,
|
||||||
|
JsonDeserializationContext context)
|
||||||
|
throws JsonParseException
|
||||||
|
{
|
||||||
|
Map<EntityType, Integer> map = new EnumMap<>(EntityType.class);
|
||||||
|
|
||||||
|
for (Map.Entry<String, JsonElement> entrySet : json.getAsJsonObject().entrySet())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
EntityType entityType = EntityType.valueOf(entrySet.getKey());
|
||||||
|
map.put(entityType, entrySet.getValue().getAsInt());
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException e)
|
||||||
|
{
|
||||||
|
if (entrySet.getKey().equals("PIG_ZOMBIE"))
|
||||||
|
{
|
||||||
|
// Hacky way how to get new entity name.
|
||||||
|
map.put(EntityType.valueOf("ZOMBIFIED_PIGLIN"),
|
||||||
|
entrySet.getValue().getAsInt());
|
||||||
|
}
|
||||||
|
else if (entrySet.getKey().equals("ZOMBIFIED_PIGLIN"))
|
||||||
|
{
|
||||||
|
// Hacky way how to get new entity name.
|
||||||
|
map.put(EntityType.valueOf("PIG_ZOMBIE"),
|
||||||
|
entrySet.getValue().getAsInt());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// No replacement for new entities in older server.
|
||||||
|
BentoBox.getInstance().logWarning("[ChallengesAddon] Entity with name `" +
|
||||||
|
entrySet.getKey() + "` does not exist in your Minecraft server version." +
|
||||||
|
" It will be skipped!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,9 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
|
||||||
import com.google.gson.annotations.Expose;
|
import com.google.gson.annotations.Expose;
|
||||||
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
|
|
||||||
|
import world.bentobox.challenges.database.object.adapters.EntityCompatibilityAdapter;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -193,6 +196,7 @@ public class IslandRequirements extends Requirements
|
|||||||
* Map that contains which entities and how many is necessary around player to complete challenge.
|
* Map that contains which entities and how many is necessary around player to complete challenge.
|
||||||
*/
|
*/
|
||||||
@Expose
|
@Expose
|
||||||
|
@JsonAdapter(EntityCompatibilityAdapter.class)
|
||||||
private Map<EntityType, Integer> requiredEntities = new EnumMap<>(EntityType.class);
|
private Map<EntityType, Integer> requiredEntities = new EnumMap<>(EntityType.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
name: Challenges
|
name: Challenges
|
||||||
main: world.bentobox.challenges.ChallengesAddon
|
main: world.bentobox.challenges.ChallengesAddon
|
||||||
version: ${version}${build.number}
|
version: ${version}${build.number}
|
||||||
api-version: 1.13.1
|
api-version: 1.14
|
||||||
repository: 'BentoBoxWorld/Challenges'
|
repository: 'BentoBoxWorld/Challenges'
|
||||||
metrics: true
|
metrics: true
|
||||||
|
|
||||||
@ -19,52 +19,12 @@ permissions:
|
|||||||
description: Let the player use the '/challenges' command
|
description: Let the player use the '/challenges' command
|
||||||
default: true
|
default: true
|
||||||
|
|
||||||
bskyblock.challenges:
|
'[gamemode].challenges':
|
||||||
description: Let the player use the '/island challenges' command
|
description: Let the player use the '/island challenges' command
|
||||||
default: true
|
default: true
|
||||||
bskyblock.challenges.multiple:
|
'[gamemode].challenges.multiple':
|
||||||
description: Let the player complete challenge multiple times
|
description: Let the player complete challenge multiple times
|
||||||
default: true
|
default: true
|
||||||
bskyblock.admin.challenges:
|
'[gamemode].admin.challenges':
|
||||||
description: Access challenge admin commands
|
|
||||||
default: op
|
|
||||||
|
|
||||||
acidisland.challenges:
|
|
||||||
description: Let the player use the '/ai challenges' command
|
|
||||||
default: true
|
|
||||||
acidisland.challenges.multiple:
|
|
||||||
description: Let the player complete challenge multiple times
|
|
||||||
default: true
|
|
||||||
acidisland.admin.challenges:
|
|
||||||
description: Access challenge admin commands
|
|
||||||
default: op
|
|
||||||
|
|
||||||
caveblock.challenges:
|
|
||||||
description: Let the player use the '/cave challenges' command
|
|
||||||
default: true
|
|
||||||
caveblock.challenges.multiple:
|
|
||||||
description: Let the player complete challenge multiple times
|
|
||||||
default: true
|
|
||||||
caveblock.admin.challenges:
|
|
||||||
description: Access challenge admin commands
|
|
||||||
default: op
|
|
||||||
|
|
||||||
skygrid.challenges:
|
|
||||||
description: Let the player use the '/skygrid challenges' command
|
|
||||||
default: true
|
|
||||||
skygrid.challenges.multiple:
|
|
||||||
description: Let the player complete challenge multiple times
|
|
||||||
default: true
|
|
||||||
skygrid.admin.challenges:
|
|
||||||
description: Access challenge admin commands
|
|
||||||
default: op
|
|
||||||
|
|
||||||
aoneblock.challenges:
|
|
||||||
description: Let the player use the '/aoneblock challenges' command
|
|
||||||
default: true
|
|
||||||
aoneblock.challenges.multiple:
|
|
||||||
description: Let the player complete challenge multiple times
|
|
||||||
default: true
|
|
||||||
aoneblock.admin.challenges:
|
|
||||||
description: Access challenge admin commands
|
description: Access challenge admin commands
|
||||||
default: op
|
default: op
|
Loading…
Reference in New Issue
Block a user