Skip to content

Commit 7231113

Browse files
authored
Merge pull request #370 from BentoBoxWorld/develop
Release 1.5.0
2 parents a92df39 + 23dae37 commit 7231113

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+6986
-4270
lines changed

pom.xml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@
4444
<!-- More visible way how to change dependency versions -->
4545
<spigot.version>1.21.3-R0.1-SNAPSHOT</spigot.version>
4646
<spigot-annotations.version>1.2.3-SNAPSHOT</spigot-annotations.version>
47-
<bentobox.version>2.7.1-SNAPSHOT</bentobox.version>
47+
<bentobox.version>3.2.4-SNAPSHOT</bentobox.version>
4848
<level.version>2.6.3</level.version>
4949
<vault.version>1.7</vault.version>
5050
<panelutils.version>1.2.0</panelutils.version>
5151
<!-- Revision variable removes warning about dynamic version -->
5252
<revision>${build.version}-SNAPSHOT</revision>
5353
<!-- This allows to change between versions and snapshots. -->
54-
<build.version>1.4.0</build.version>
54+
<build.version>1.5.0</build.version>
5555
<build.number>-LOCAL</build.number>
5656
<!-- Sonar Cloud -->
5757
<sonar.projectKey>BentoBoxWorld_Challenges</sonar.projectKey>
@@ -117,6 +117,11 @@
117117
<id>minecraft-repo</id>
118118
<url>https://libraries.minecraft.net/</url>
119119
</repository>
120+
<!-- Placeholder API -->
121+
<repository>
122+
<id>placeholderapi</id>
123+
<url>https://repo.extendedclip.com/releases/</url>
124+
</repository>
120125
</repositories>
121126

122127
<dependencies>
@@ -198,6 +203,13 @@
198203
<artifactId>commons-math3</artifactId>
199204
<version>3.6.1</version>
200205
</dependency>
206+
<!-- Placeholder API -->
207+
<dependency>
208+
<groupId>me.clip</groupId>
209+
<artifactId>placeholderapi</artifactId>
210+
<version>2.11.6</version>
211+
<scope>provided</scope>
212+
</dependency>
201213
</dependencies>
202214

203215
<build>

src/main/java/world/bentobox/challenges/ChallengesAddon.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType;
1616
import world.bentobox.bentobox.hooks.VaultHook;
1717
import world.bentobox.bentobox.managers.RanksManager;
18-
import world.bentobox.challenges.commands.ChallengesPlayerCommand;
1918
import world.bentobox.challenges.commands.ChallengesGlobalPlayerCommand;
19+
import world.bentobox.challenges.commands.ChallengesPlayerCommand;
2020
import world.bentobox.challenges.commands.admin.ChallengesAdminCommand;
2121
import world.bentobox.challenges.commands.admin.ChallengesGlobalAdminCommand;
2222
import world.bentobox.challenges.config.Settings;

src/main/java/world/bentobox/challenges/database/object/Challenge.java

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package world.bentobox.challenges.database.object;
22

33

4-
import java.util.*;
4+
import java.util.ArrayList;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Objects;
8+
import java.util.Set;
59
import java.util.stream.Collectors;
610

711
import org.bukkit.Material;
@@ -159,6 +163,12 @@ public enum ChallengeType
159163
@Expose
160164
private List<ItemStack> rewardItems = new ArrayList<>();
161165

166+
/**
167+
* Hide the list of reward items in the GUI
168+
*/
169+
@Expose
170+
private Boolean hideRewardItems;
171+
162172
/**
163173
* Experience point reward
164174
*/
@@ -853,37 +863,49 @@ public Challenge clone()
853863
try
854864
{
855865
clone = new Challenge();
866+
// Copy primitive and String fields
856867
clone.setUniqueId(this.uniqueId);
857868
clone.setFriendlyName(this.friendlyName);
858869
clone.setDeployed(this.deployed);
870+
clone.setOrder(this.order);
871+
clone.setLevel(this.level);
872+
873+
// Clone collections (Strings are immutable so shallow copy is fine)
859874
clone.setDescription(new ArrayList<>(this.description));
875+
clone.setEnvironment(new HashSet<>(this.environment));
876+
clone.setRewardCommands(new ArrayList<>(this.rewardCommands));
877+
clone.setIgnoreRewardMetaData(new HashSet<>(this.ignoreRewardMetaData));
878+
879+
// Clone mutable objects (ItemStacks, etc.)
860880
clone.setIcon(this.icon.clone());
861-
clone.setOrder(this.order);
881+
clone.setRewardItems(this.rewardItems.stream().map(ItemStack::clone)
882+
.collect(Collectors.toCollection(() -> new ArrayList<>(this.rewardItems.size()))));
883+
clone.setRepeatItemReward(this.repeatItemReward.stream().map(ItemStack::clone)
884+
.collect(Collectors.toCollection(() -> new ArrayList<>(this.repeatItemReward.size()))));
885+
clone.setRepeatRewardCommands(new ArrayList<>(this.repeatRewardCommands));
886+
887+
// Clone enum field
862888
clone.setChallengeType(ChallengeType.valueOf(this.challengeType.name()));
863-
clone.setEnvironment(new HashSet<>(this.environment));
864-
clone.setLevel(this.level);
889+
890+
// Clone boolean and numeric fields
865891
clone.setRemoveWhenCompleted(this.removeWhenCompleted);
866-
clone.setRequirements(this.requirements.copy());
867-
clone.setRewardText(this.rewardText);
868-
clone.setRewardItems(
869-
this.rewardItems.stream().
870-
map(ItemStack::clone).
871-
collect(Collectors.toCollection(() -> new ArrayList<>(this.rewardItems.size()))));
872892
clone.setRewardExperience(this.rewardExperience);
873893
clone.setRewardMoney(this.rewardMoney);
874-
clone.setRewardCommands(new ArrayList<>(this.rewardCommands));
875894
clone.setRepeatable(this.repeatable);
895+
clone.setTimeout(this.timeout);
876896
clone.setRepeatRewardText(this.repeatRewardText);
877897
clone.setMaxTimes(this.maxTimes);
878898
clone.setRepeatExperienceReward(this.repeatExperienceReward);
879-
clone.setRepeatItemReward(
880-
this.repeatItemReward.stream().
881-
map(ItemStack::clone).
882-
collect(Collectors.toCollection(() -> new ArrayList<>(this.repeatItemReward.size()))));
883899
clone.setRepeatMoneyReward(this.repeatMoneyReward);
884-
clone.setRepeatRewardCommands(new ArrayList<>(this.repeatRewardCommands));
885-
clone.setTimeout(this.timeout);
886-
clone.setIgnoreRewardMetaData(new HashSet<>(this.ignoreRewardMetaData));
900+
901+
// Copy custom objects
902+
clone.setRequirements(this.requirements.copy());
903+
904+
// Clone the remaining String field
905+
clone.setRewardText(this.rewardText);
906+
907+
// Clone the Boolean field
908+
clone.setHideRewardItems(this.hideRewardItems);
887909
}
888910
catch (Exception e)
889911
{
@@ -895,4 +917,18 @@ public Challenge clone()
895917

896918
return clone;
897919
}
920+
921+
/**
922+
* @return the hideRewardItems
923+
*/
924+
public boolean isHideRewardItems() {
925+
return Objects.requireNonNullElse(hideRewardItems, false);
926+
}
927+
928+
/**
929+
* @param hideRewardItems the hideRewardItems to set
930+
*/
931+
public void setHideRewardItems(Boolean hideRewardItems) {
932+
this.hideRewardItems = hideRewardItems;
933+
}
898934
}

src/main/java/world/bentobox/challenges/database/object/ChallengeLevel.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package world.bentobox.challenges.database.object;
22

33

4-
import java.util.*;
4+
import java.util.ArrayList;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Objects;
8+
import java.util.Set;
59
import java.util.stream.Collectors;
610

711
import org.bukkit.Material;
@@ -70,7 +74,8 @@ public ChallengeLevel()
7074

7175
@ConfigComment("")
7276
@ConfigComment("The number of undone challenges that can be left on this level before")
73-
@ConfigComment("unlocking next level.")
77+
@ConfigComment("unlocking next level. Give players more with the permission")
78+
@ConfigComment("[gamemode].challenges.waiver-add.x where x is a number")
7479
@Expose
7580
private int waiverAmount = 1;
7681

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package world.bentobox.challenges.database.object.adapters;
2+
3+
4+
import java.lang.reflect.Type;
5+
import java.util.Spliterator;
6+
import java.util.Spliterators;
7+
import java.util.stream.StreamSupport;
8+
9+
import org.bukkit.Bukkit;
10+
import org.bukkit.advancement.Advancement;
11+
12+
import com.google.gson.JsonDeserializationContext;
13+
import com.google.gson.JsonDeserializer;
14+
import com.google.gson.JsonElement;
15+
import com.google.gson.JsonObject;
16+
import com.google.gson.JsonParseException;
17+
import com.google.gson.JsonPrimitive;
18+
import com.google.gson.JsonSerializationContext;
19+
import com.google.gson.JsonSerializer;
20+
21+
22+
public class AdvancementsAdapter implements JsonSerializer<Advancement>, JsonDeserializer<Advancement>
23+
{
24+
@Override
25+
public JsonElement serialize(Advancement src, Type typeOfSrc, JsonSerializationContext context)
26+
{
27+
JsonObject result = new JsonObject();
28+
result.add("name", new JsonPrimitive(src.getKey().getKey()));
29+
return result;
30+
}
31+
32+
@Override
33+
public Advancement deserialize(JsonElement json,
34+
Type typeOfT,
35+
JsonDeserializationContext context)
36+
throws JsonParseException
37+
{
38+
JsonObject jsonObject = json.getAsJsonObject();
39+
String name = jsonObject.get("name").getAsString();
40+
41+
return StreamSupport
42+
.stream(Spliterators.spliteratorUnknownSize(Bukkit.advancementIterator(), Spliterator.ORDERED), false)
43+
.filter(a -> a.getKey().getKey().equals(name)).findFirst().orElse(null);
44+
}
45+
46+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package world.bentobox.challenges.database.object.adapters;
2+
3+
import com.google.gson.*;
4+
import org.bukkit.advancement.Advancement;
5+
6+
import java.lang.reflect.Type;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
public class AdvancementsListAdapter implements JsonSerializer<List<Advancement>>, JsonDeserializer<List<Advancement>> {
11+
12+
// Reuse your existing adapter for individual advancements
13+
private final AdvancementsAdapter advancementAdapter = new AdvancementsAdapter();
14+
15+
@Override
16+
public JsonElement serialize(List<Advancement> src, Type typeOfSrc, JsonSerializationContext context) {
17+
JsonArray array = new JsonArray();
18+
for (Advancement advancement : src) {
19+
// Serialize each advancement using existing adapter
20+
JsonElement element = advancementAdapter.serialize(advancement, advancement.getClass(), context);
21+
array.add(element);
22+
}
23+
return array;
24+
}
25+
26+
@Override
27+
public List<Advancement> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
28+
throws JsonParseException {
29+
List<Advancement> advancements = new ArrayList<>();
30+
JsonArray array = json.getAsJsonArray();
31+
for (JsonElement element : array) {
32+
Advancement advancement = advancementAdapter.deserialize(element, Advancement.class, context);
33+
if (advancement != null) {
34+
advancements.add(advancement);
35+
}
36+
}
37+
return advancements;
38+
}
39+
}

src/main/java/world/bentobox/challenges/database/object/adapters/EntityCompatibilityAdapter.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,20 @@
77
package world.bentobox.challenges.database.object.adapters;
88

99

10-
import com.google.gson.*;
11-
import org.bukkit.entity.EntityType;
1210
import java.lang.reflect.Type;
1311
import java.util.EnumMap;
1412
import java.util.Map;
1513

14+
import org.bukkit.entity.EntityType;
15+
16+
import com.google.gson.JsonDeserializationContext;
17+
import com.google.gson.JsonDeserializer;
18+
import com.google.gson.JsonElement;
19+
import com.google.gson.JsonObject;
20+
import com.google.gson.JsonParseException;
21+
import com.google.gson.JsonSerializationContext;
22+
import com.google.gson.JsonSerializer;
23+
1624
import world.bentobox.bentobox.BentoBox;
1725

1826

src/main/java/world/bentobox/challenges/database/object/adapters/TypeMigrationAdapter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,16 @@
77
package world.bentobox.challenges.database.object.adapters;
88

99

10-
import com.google.gson.*;
1110
import java.lang.reflect.Type;
1211

12+
import com.google.gson.JsonDeserializationContext;
13+
import com.google.gson.JsonDeserializer;
14+
import com.google.gson.JsonElement;
15+
import com.google.gson.JsonParseException;
16+
import com.google.gson.JsonPrimitive;
17+
import com.google.gson.JsonSerializationContext;
18+
import com.google.gson.JsonSerializer;
19+
1320
import world.bentobox.challenges.database.object.Challenge;
1421

1522

0 commit comments

Comments
 (0)