Skip to content

Commit

Permalink
Merge pull request #30 from LaBoulangerie/1.21
Browse files Browse the repository at this point in the history
1.21
  • Loading branch information
GroobleDierne authored Dec 7, 2024
2 parents 1332eaa + d8494c9 commit 3d16db1
Show file tree
Hide file tree
Showing 29 changed files with 244 additions and 168 deletions.
20 changes: 10 additions & 10 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
java
`maven-publish`
id("io.papermc.paperweight.userdev") version "1.5.10"
id("io.papermc.paperweight.userdev") version "1.7.3"
id("com.github.johnrengelman.shadow") version "7.1.2"
}

Expand Down Expand Up @@ -56,22 +56,22 @@ repositories {
}

dependencies {
paperDevBundle("1.20.2-R0.1-SNAPSHOT")
implementation("net.kyori:adventure-api:4.14.0")
paperDevBundle("1.21.1-R0.1-SNAPSHOT")
implementation("net.kyori:adventure-api:4.17.0")
compileOnly("com.github.luben:zstd-jni:1.5.0-4")
compileOnly("redis.clients:jedis:5.1.3")
paperweight.paperDevBundle("1.20.2-R0.1-SNAPSHOT")
compileOnly("com.comphenix.protocol:ProtocolLib:5.1.0")
paperweight.paperDevBundle("1.21.1-R0.1-SNAPSHOT")
compileOnly("com.comphenix.protocol:ProtocolLib:5.3.0")
compileOnly("com.github.MilkBowl:VaultAPI:1.7.1")
compileOnly("me.clip:placeholderapi:2.11.4")
compileOnly("com.palmergames.bukkit.towny:towny:0.100.0.0")
compileOnly("pl.betoncraft:betonquest:1.12.10")
compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.9-SNAPSHOT")
compileOnly("me.clip:placeholderapi:2.11.6")
compileOnly("com.palmergames.bukkit.towny:towny:0.100.4.0")
compileOnly("org.betonquest:betonquest:2.1.3")
compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.12")
compileOnly("io.lumine:Mythic-Dist:5.4.1")
}

group = "net.laboulangerie"
version = "2.3.1"
version = "2.3.2"
description = "LaBoulangerieMmo"
java.sourceCompatibility = JavaVersion.VERSION_17

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@
import java.util.Arrays;
import java.util.Locale;
import java.util.logging.Level;
import org.betonquest.betonquest.BetonQuest;
import org.betonquest.betonquest.Instruction;
import org.betonquest.betonquest.api.quest.PlayerQuestFactory;
import org.betonquest.betonquest.api.quest.condition.PlayerCondition;
import org.betonquest.betonquest.api.quest.condition.PlayerConditionFactory;
import org.betonquest.betonquest.api.quest.event.Event;
import org.betonquest.betonquest.exceptions.InstructionParseException;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import net.laboulangerie.laboulangeriemmo.api.ability.AbilitiesRegistry;
Expand All @@ -26,18 +33,17 @@
import net.laboulangerie.laboulangeriemmo.core.blockus.BlockusManager;
import net.laboulangerie.laboulangeriemmo.core.blockus.redis.RedisBlockusHolder;
import net.laboulangerie.laboulangeriemmo.core.combo.ComboDispatcher;
import net.laboulangerie.laboulangeriemmo.core.json.GsonSerializer;
import net.laboulangerie.laboulangeriemmo.core.mapleaderboard.LeaderBoardManager;
import net.laboulangerie.laboulangeriemmo.core.particles.EffectRegistry;
import net.laboulangerie.laboulangeriemmo.expansions.MmoExpansion;
import net.laboulangerie.laboulangeriemmo.json.GsonSerializer;
import net.laboulangerie.laboulangeriemmo.listener.AbilitiesRegisterer;
import net.laboulangerie.laboulangeriemmo.listener.GrindingListener;
import net.laboulangerie.laboulangeriemmo.listener.MmoListener;
import net.laboulangerie.laboulangeriemmo.listener.ServerListener;
import net.laboulangerie.laboulangeriemmo.listener.XpBoostListener;
import net.laboulangerie.laboulangeriemmo.utils.WolrdGuardSupport;
import net.milkbowl.vault.economy.Economy;
import pl.betoncraft.betonquest.BetonQuest;

public class LaBoulangerieMmo extends JavaPlugin {
public static LaBoulangerieMmo PLUGIN;
Expand Down Expand Up @@ -115,8 +121,31 @@ public void onEnable() {
}

if (getServer().getPluginManager().getPlugin("BetonQuest") != null) {
BetonQuest.getInstance().registerConditions("lbmmo_level", LevelCondition.class);
BetonQuest.getInstance().registerEvents("lbmmo_xp", XpEvent.class);
BetonQuest.getInstance().getQuestRegistries().getConditionTypes().register("lbmmo_level", new PlayerConditionFactory() {
@Override
public PlayerCondition parsePlayer(Instruction instruction) throws InstructionParseException {
int level;
try {
level = Integer.parseInt(instruction.getPart(2));
} catch (Exception e) {
throw new InstructionParseException("You didn't pass an integer value to lbmmo_level condition");
}
return new LevelCondition(instruction.getPart(1), level);
}
}, null);
BetonQuest.getInstance().getQuestRegistries().getEventTypes().register("lbmmo_xp", new PlayerQuestFactory<Event>() {
@Override
public Event parsePlayer(Instruction instruction) throws InstructionParseException {
char op = instruction.getPart(2).charAt(0);
double xp;
try {
xp = Double.parseDouble(instruction.getPart(2).substring(1));
} catch (Exception e) {
throw new InstructionParseException("You didn't pass a decimal value to lbmmo_level condition");
}
return new XpEvent(instruction.getPart(0), op, xp);
}
});
getLogger().info("Hooked in BetonQuest!");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import net.laboulangerie.laboulangeriemmo.LaBoulangerieMmo;
import net.laboulangerie.laboulangeriemmo.api.ability.AbilityArchetype;
import net.laboulangerie.laboulangeriemmo.core.json.GsonSerializable;

public class CooldownsHolder {
public class CooldownsHolder implements GsonSerializable {
private HashMap<String, Date> cooldowns;

public CooldownsHolder() {
Expand All @@ -35,18 +34,15 @@ public List<Long> getCooldowns(String abilityId) {
}).collect(Collectors.toList());
}

public HashMap<AbilityArchetype, Long> getArchetypeCooldowns(String abilityId) {
return (HashMap<AbilityArchetype, Long>) cooldowns.entrySet().stream()
/**
* Maps every talent that has this ability to the last time it was used for each of them
* @param abilityId
* @return key is the talent identifier associated to this instance of the ability and value is the time elapsed since it's last use
*/
public HashMap<String, Long> getTimeSinceUsed(String abilityId) {
return (HashMap<String, Long>) cooldowns.entrySet().stream()
.filter(entry -> entry.getKey().endsWith("/" + abilityId))
.collect(Collectors.toMap(e -> LaBoulangerieMmo.talentsRegistry
.getTalent(e.getKey().split("/")[0]).abilitiesArchetypes
.get(e.getKey().split("/")[1]),
Entry::getValue))
.entrySet().stream()
.collect(Collectors.toMap(Entry::getKey,
e -> e.getKey().cooldownUnit.convert(
new Date().getTime() - e.getValue().getTime(),
TimeUnit.MILLISECONDS)));
.collect(Collectors.toMap(e -> e.getKey().split("/")[0], e -> new Date().getTime()-e.getValue().getTime()));
}

public boolean isCooldownElapsed(AbilityArchetype ability, String talentId) {
Expand Down Expand Up @@ -81,4 +77,20 @@ public boolean hasUsed(String abilityId) {
private String getId(AbilityArchetype ability, String talentId) {
return talentId + "/" + ability.identifier;
}

public HashMap<String, Date> getCooldowns() {
return cooldowns;
}

/**
* Intended for internal use (data deserialisation)
*
* Will set the cooldowns to match the given { @link HashMap } if the
* internal one is empty.
* @param cooldowns
*/
public void setCooldowns(HashMap<String, Date> cooldowns) {
if (!this.cooldowns.isEmpty()) return;
this.cooldowns = cooldowns;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
import net.laboulangerie.laboulangeriemmo.api.ability.AbilityArchetype;
import net.laboulangerie.laboulangeriemmo.api.talent.Talent;
import net.laboulangerie.laboulangeriemmo.api.talent.TalentArchetype;
import net.laboulangerie.laboulangeriemmo.core.PostProcessingEnabler;
import net.laboulangerie.laboulangeriemmo.core.XpCountDown;
import net.laboulangerie.laboulangeriemmo.core.json.GsonSerializable;
import net.laboulangerie.laboulangeriemmo.core.json.PostProcessingEnabler;
import net.laboulangerie.laboulangeriemmo.core.particles.EffectRegistry;
import net.laboulangerie.laboulangeriemmo.events.PlayerEarnsXpEvent;
import net.laboulangerie.laboulangeriemmo.events.PlayerLevelUpEvent;
import net.laboulangerie.laboulangeriemmo.json.GsonSerializable;

public class MmoPlayer implements GsonSerializable, PostProcessingEnabler.PostProcessable {
private transient FileConfiguration config = LaBoulangerieMmo.PLUGIN.getConfig();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Level;
import java.util.stream.Stream;

import com.google.gson.JsonSyntaxException;
Expand All @@ -13,7 +14,7 @@
import org.bukkit.entity.Player;

import net.laboulangerie.laboulangeriemmo.LaBoulangerieMmo;
import net.laboulangerie.laboulangeriemmo.json.GsonSerializer;
import net.laboulangerie.laboulangeriemmo.core.json.GsonSerializer;
import net.laboulangerie.laboulangeriemmo.utils.FileUtils;

public class MmoPlayerManager {
Expand Down Expand Up @@ -57,16 +58,21 @@ public void loadPlayerData(OfflinePlayer player) {

try {
File file = new File(playersFolder, uniqueId + ".json");
if (!file.exists()) throw new JsonSyntaxException("hacky");
if (!file.exists()) {
MmoPlayer mmoPlayer = new MmoPlayer(player);
playersMap.put(uniqueId, mmoPlayer);
return;
}
String json = FileUtils.read(file);

if (!json.equals("")) {
MmoPlayer mmoPlayer = (MmoPlayer) serializer.deserialize(json, MmoPlayer.class);
playersMap.put(uniqueId, mmoPlayer);
}
} catch (JsonSyntaxException e) {
MmoPlayer mmoPlayer = new MmoPlayer(player);
playersMap.put(uniqueId, mmoPlayer);
LaBoulangerieMmo.PLUGIN.getLogger().log(Level.SEVERE, "Failed to load player data, disabling plugin to preserve saves's integrity.");
e.printStackTrace();
Bukkit.getPluginManager().disablePlugin(LaBoulangerieMmo.PLUGIN);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,36 +1,26 @@
package net.laboulangerie.laboulangeriemmo.betonquest;

import java.util.UUID;

import org.bukkit.Bukkit;

import org.betonquest.betonquest.api.profiles.Profile;
import org.betonquest.betonquest.api.quest.condition.PlayerCondition;
import org.betonquest.betonquest.exceptions.QuestRuntimeException;
import net.laboulangerie.laboulangeriemmo.LaBoulangerieMmo;
import net.laboulangerie.laboulangeriemmo.api.player.MmoPlayer;
import pl.betoncraft.betonquest.Instruction;
import pl.betoncraft.betonquest.api.Condition;
import pl.betoncraft.betonquest.exceptions.InstructionParseException;
import pl.betoncraft.betonquest.exceptions.QuestRuntimeException;

public class LevelCondition extends Condition {

@SuppressWarnings("deprecation")
public LevelCondition(Instruction instruction) {
super(instruction);
public class LevelCondition implements PlayerCondition {
private String talentName;
private int level;
public LevelCondition(String talentName, int level) {
this.talentName = talentName;
this.level = level;
}

@Override
protected Boolean execute(String playerID) throws QuestRuntimeException {
public boolean check(Profile profile) throws QuestRuntimeException {
MmoPlayer mmoPlayer = LaBoulangerieMmo.PLUGIN.getMmoPlayerManager()
.getPlayer(Bukkit.getPlayer(UUID.fromString(playerID)));
.getPlayer(profile.getPlayer().getPlayer());
if (mmoPlayer == null) return false; // Shouldn't happen but just in case

String talentName = "";
try {
talentName = instruction.getPart(1);
} catch (InstructionParseException e) {
e.printStackTrace();
}
return instruction.getAllNumbers().get(0) <= mmoPlayer.getTalent(talentName).getLevel();

return level <= mmoPlayer.getTalent(talentName).getLevel();
}

}
Original file line number Diff line number Diff line change
@@ -1,56 +1,39 @@
package net.laboulangerie.laboulangeriemmo.betonquest;

import java.util.UUID;

import org.bukkit.Bukkit;

import org.betonquest.betonquest.api.profiles.Profile;
import org.betonquest.betonquest.api.quest.event.Event;
import org.betonquest.betonquest.exceptions.QuestRuntimeException;
import net.laboulangerie.laboulangeriemmo.LaBoulangerieMmo;
import net.laboulangerie.laboulangeriemmo.api.player.MmoPlayer;
import pl.betoncraft.betonquest.Instruction;
import pl.betoncraft.betonquest.api.QuestEvent;
import pl.betoncraft.betonquest.exceptions.InstructionParseException;
import pl.betoncraft.betonquest.exceptions.QuestRuntimeException;

public class XpEvent extends QuestEvent {
public class XpEvent implements Event {
String talentName;
char op;
double xp;

@SuppressWarnings("deprecation")
public XpEvent(Instruction instruction) throws InstructionParseException {
super(instruction);
public XpEvent(String talentName, char op, double xp) {
this.talentName = talentName;
this.op = op;
this.xp = xp;
}

@Override
protected Void execute(String playerID) throws QuestRuntimeException {
public void execute(Profile profile) throws QuestRuntimeException {
MmoPlayer mmoPlayer = LaBoulangerieMmo.PLUGIN.getMmoPlayerManager()
.getPlayer(Bukkit.getPlayer(UUID.fromString(playerID)));
if (mmoPlayer == null) return null; // Shouldn't happen but just in case
.getPlayer(profile.getPlayer().getPlayer());
if (mmoPlayer == null) return; // Shouldn't happen but just in case

String talentName = "";
String rawValue = "";
try {
talentName = instruction.getPart(1);
rawValue = instruction.getPart(2);
} catch (InstructionParseException e) {
e.printStackTrace();
}
double value = 0;
try {
value = Double.parseDouble(rawValue.substring(1));
} catch (NumberFormatException error) {
throw new QuestRuntimeException("Unable to parse given value to a decimal number",
error);
}
switch (rawValue.charAt(0)) {
switch (op) {
case '+':
mmoPlayer.getTalent(talentName).incrementXp(value);
mmoPlayer.getTalent(talentName).incrementXp(xp);
break;
case '-':
mmoPlayer.getTalent(talentName).decrementXp(value);
mmoPlayer.getTalent(talentName).decrementXp(xp);
break;
default:
throw new QuestRuntimeException("Unknown operation: " + rawValue.charAt(0)
throw new QuestRuntimeException("Unknown operation: " + op
+ ", should be either '+' or '-'");
}
return null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public void run() {

updatedBlock.setType(cropMaterial);
updatedBlock.getWorld().spawnParticle(
Particle.VILLAGER_HAPPY,
Particle.HAPPY_VILLAGER,
updatedBlock.getLocation().toCenterLocation().add(0, -0.2, 0),
5, 0.1, 0.1, 0.1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void trigger(Event baseEvent, int level) {
player.sendMessage(
"§eVous gagnez Haste " + (amplifier + 1) + " pendant " + duration + " secondes");
player.addPotionEffect(
new PotionEffect(PotionEffectType.FAST_DIGGING, duration * 20, amplifier, true));
new PotionEffect(PotionEffectType.HASTE, duration * 20, amplifier, true));
EffectRegistry.playEffect("default", player);
}
}
Loading

0 comments on commit 3d16db1

Please sign in to comment.