mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-16 04:21:49 +00:00
added experience tracking and automatic role assigning at given levels
includes: set role command to set a role to a given level (it clears out previous levels) automatic level config generation on startup min/max/multiplier configuration job to persist the xp of the previous minute added delayed scheduler start, so that events have a discord context in order to function added role listener to automatically add and mark roles when they are created/deleted fixed user in a server not being created correctly added role service to give users role given by id added server reference to role
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||
<artifactId>utility</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>experience-tracking-int</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>dev.sheldan.abstracto.templating</groupId>
|
||||
<artifactId>templating-interface</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>dev.sheldan.abstracto.scheduling</groupId>
|
||||
<artifactId>scheduling-int</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.experience.models.database;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Builder
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "experience_level")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AExperienceLevel {
|
||||
@Id
|
||||
private Integer level;
|
||||
private Long experienceNeeded;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package dev.sheldan.abstracto.experience.models.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "experience_role")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AExperienceRole {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
|
||||
@JoinColumn(name = "level_id")
|
||||
private AExperienceLevel level;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@Getter
|
||||
@Setter
|
||||
@JoinColumn(name = "server_id")
|
||||
private AServer roleServer;
|
||||
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
|
||||
@JoinColumn(name = "role_id")
|
||||
private ARole role;
|
||||
|
||||
@OneToMany(
|
||||
fetch = FetchType.LAZY,
|
||||
cascade = CascadeType.ALL,
|
||||
orphanRemoval = true)
|
||||
@Builder.Default
|
||||
@JoinColumn(name = "experience_role_id")
|
||||
private List<AUserExperience> users = new ArrayList<>();
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package dev.sheldan.abstracto.experience.models.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
@Builder
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "user_experience")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AUserExperience {
|
||||
|
||||
@Id
|
||||
private Long id;
|
||||
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
|
||||
@PrimaryKeyJoinColumn
|
||||
private AUserInAServer user;
|
||||
|
||||
private Long experience;
|
||||
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
|
||||
@JoinColumn(name = "level_id")
|
||||
private AExperienceLevel currentLevel;
|
||||
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
|
||||
@JoinColumn(name = "experience_role_id")
|
||||
private AExperienceRole currentExperienceRole;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package dev.sheldan.abstracto.experience.service;
|
||||
|
||||
public interface ExperienceLevelService {
|
||||
void createExperienceLevel(Integer level, Long experienceNeeded);
|
||||
Long calculateExperienceForLevel(Integer level);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.experience.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
||||
|
||||
public interface ExperienceRoleService {
|
||||
void setRoleToLevel(ARole role, Integer level, AServer server);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.experience.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
||||
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
||||
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public interface ExperienceTrackerService {
|
||||
void addExperience(AUserInAServer userInAServer);
|
||||
HashMap<Long, List<AServer>> getRuntimeExperience();
|
||||
Integer calculateLevel(AUserExperience userInAServer, List<AExperienceLevel> levels);
|
||||
AExperienceRole calculateRole(AUserExperience userInAServer, List<AExperienceRole> roles);
|
||||
void increaseExpForUser(AUserExperience userInAServer, Long experience, List<AExperienceLevel> levels);
|
||||
void handleExperienceGain(List<AServer> serverExp);
|
||||
void handleExperienceRoleForUser(AUserExperience userExperience, List<AExperienceRole> roles);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.experience.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ExperienceLevelManagementService {
|
||||
AExperienceLevel createExperienceLevel(Integer level, Long neededExperience);
|
||||
boolean levelExists(Integer level);
|
||||
AExperienceLevel getLevel(Integer level);
|
||||
AExperienceLevel getLevelClosestTo(Long experience);
|
||||
List<AExperienceLevel> getLevelConfig();
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.experience.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
||||
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ExperienceRoleManagementService {
|
||||
void setLevelToRole(AExperienceLevel level, ARole role, AServer server);
|
||||
void unSetLevelInServer(AExperienceLevel level, AServer server);
|
||||
List<AExperienceRole> getExperienceRoleForServer(AServer server);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.experience.service.management;
|
||||
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
|
||||
|
||||
public interface UserExperienceManagementService {
|
||||
void setExperienceTo(AUserExperience aUserInAServer, Long experience);
|
||||
AUserExperience findUserInServer(AUserInAServer aUserInAServer);
|
||||
AUserExperience createUserInServer(AUserInAServer aUserInAServer);
|
||||
void saveUser(AUserExperience userExperience);
|
||||
}
|
||||
Reference in New Issue
Block a user