Skip to content

Commit f821485

Browse files
committed
feat: Add initial API structure with models, flags, and services
1 parent e745cfc commit f821485

File tree

119 files changed

+6356
-0
lines changed

Some content is hidden

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

119 files changed

+6356
-0
lines changed

.gitattributes

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
. !text !filter !merge !diff
2+
gradle/wrapper/gradle-wrapper.jar filter=lfs diff=lfs merge=lfs -text
3+
*.gitignore filter=lfs diff=lfs merge=lfs -text
4+
*.kts filter=lfs diff=lfs merge=lfs -text
5+
*.java filter=lfs diff=lfs merge=lfs -text
6+
*.gitkeep filter=lfs diff=lfs merge=lfs -text
7+
*.json filter=lfs diff=lfs merge=lfs -text
8+
*.jar filter=lfs diff=lfs merge=lfs -text
9+
*.properties filter=lfs diff=lfs merge=lfs -text
10+
/gradlew filter=lfs diff=lfs merge=lfs -text
11+
*.bat filter=lfs diff=lfs merge=lfs -text
12+
*.yml filter=lfs diff=lfs merge=lfs -text
13+
*.xml filter=lfs diff=lfs merge=lfs -text
14+
*.toml filter=lfs diff=lfs merge=lfs -text
15+
*.kt filter=lfs diff=lfs merge=lfs -text
16+
/.gitlab/CODEOWNERS filter=lfs diff=lfs merge=lfs -text
17+
*.drawio filter=lfs diff=lfs merge=lfs -text
18+
*.LocationUtil filter=lfs diff=lfs merge=lfs -text
19+
*.PlayerUtil filter=lfs diff=lfs merge=lfs -text
20+
* !text !filter !merge !diff

AdapterDesign.drawio

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<mxfile host="drawio-plugin" modified="2024-09-07T19:44:58.412Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" etag="xQ23xC0ynlX2JH_Z8cBZ" version="22.1.22" type="embed">
2+
<diagram id="23iRSUPoRavnBvh4doch" name="Page-1">
3+
<mxGraphModel dx="876" dy="754" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
4+
<root>
5+
<mxCell id="0" />
6+
<mxCell id="1" parent="0" />
7+
<mxCell id="13" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
8+
<mxGeometry x="294" y="240" width="186" height="210" as="geometry" />
9+
</mxCell>
10+
<mxCell id="2" value="API" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
11+
<mxGeometry x="320" y="250" width="120" height="60" as="geometry" />
12+
</mxCell>
13+
<mxCell id="14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="3" target="10">
14+
<mxGeometry relative="1" as="geometry" />
15+
</mxCell>
16+
<mxCell id="15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="8">
17+
<mxGeometry relative="1" as="geometry" />
18+
</mxCell>
19+
<mxCell id="17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;" edge="1" parent="1" source="3" target="16">
20+
<mxGeometry relative="1" as="geometry" />
21+
</mxCell>
22+
<mxCell id="3" value="PandorasImpl" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
23+
<mxGeometry x="320" y="370" width="120" height="60" as="geometry" />
24+
</mxCell>
25+
<mxCell id="8" value="Bukkit Adapter" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
26+
<mxGeometry x="540" y="370" width="120" height="60" as="geometry" />
27+
</mxCell>
28+
<mxCell id="10" value="Database Adapter" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
29+
<mxGeometry x="130" y="300" width="120" height="60" as="geometry" />
30+
</mxCell>
31+
<mxCell id="16" value="MongoDB" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
32+
<mxGeometry x="130" y="450" width="120" height="60" as="geometry" />
33+
</mxCell>
34+
</root>
35+
</mxGraphModel>
36+
</diagram>
37+
</mxfile>

adapters/build.gradle.kts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
plugins {
2+
id("java")
3+
}
4+
5+
group = "net.onelitefeather"
6+
7+
repositories {
8+
mavenCentral()
9+
}
10+
11+
dependencies {
12+
testImplementation(platform("org.junit:junit-bom:5.10.0"))
13+
testImplementation("org.junit.jupiter:junit-jupiter")
14+
}
15+
16+
tasks.test {
17+
useJUnitPlatform()
18+
}

adapters/database/build.gradle.kts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
plugins {
2+
id("java")
3+
}
4+
5+
repositories {
6+
mavenCentral()
7+
}
8+
9+
dependencies {
10+
11+
// Database
12+
implementation(libs.hibernateCore)
13+
implementation(libs.mariadbJavaClient)
14+
implementation(libs.hibernateHikariCP)
15+
16+
implementation("org.glassfish.jaxb:jaxb-runtime:4.0.5")
17+
implementation("org.postgresql:postgresql:42.7.4") //DATABASE
18+
19+
implementation("net.kyori:adventure-api:4.17.0")
20+
21+
compileOnly(project(":api"))
22+
23+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package net.onelitefeather.pandorascluster.database.mapper;
2+
3+
import net.onelitefeather.pandorascluster.api.chunk.ClaimedChunk;
4+
import net.onelitefeather.pandorascluster.api.land.LandArea;
5+
import net.onelitefeather.pandorascluster.api.mapper.MapperStrategy;
6+
import net.onelitefeather.pandorascluster.api.mapper.MappingContext;
7+
import net.onelitefeather.pandorascluster.api.mapper.PandorasModel;
8+
import net.onelitefeather.pandorascluster.database.mapper.land.LandAreaMappingStrategy;
9+
import net.onelitefeather.pandorascluster.database.models.chunk.ClaimedChunkEntity;
10+
import net.onelitefeather.pandorascluster.database.models.land.LandAreaEntity;
11+
12+
import java.util.function.Function;
13+
14+
public final class ClaimedChunkMappingStrategy implements MapperStrategy {
15+
16+
public static ClaimedChunkMappingStrategy create() {
17+
return new ClaimedChunkMappingStrategy();
18+
}
19+
20+
@Override
21+
public Function<PandorasModel, PandorasModel> entityToModel() {
22+
return entity -> {
23+
if (!(entity instanceof ClaimedChunkEntity claimedChunkEntity)) return null;
24+
25+
MappingContext mappingContext = MappingContext.create();
26+
mappingContext.setMappingStrategy(LandAreaMappingStrategy.create());
27+
mappingContext.setMappingType(MapperType.ENTITY_TO_MODEL);
28+
29+
LandArea landArea = (LandArea) mappingContext.doMapping(claimedChunkEntity.landArea());
30+
return new ClaimedChunk(claimedChunkEntity.id(), claimedChunkEntity.chunkIndex(), landArea);
31+
};
32+
}
33+
34+
@Override
35+
public Function<PandorasModel, PandorasModel> modelToEntity() {
36+
return model -> {
37+
38+
if (model == null) return null;
39+
if (!(model instanceof ClaimedChunk claimedChunk)) return null;
40+
41+
MappingContext mappingContext = MappingContext.create();
42+
mappingContext.setMappingStrategy(LandAreaMappingStrategy.create());
43+
mappingContext.setMappingType(MapperType.MODEL_TO_ENTITY);
44+
45+
LandAreaEntity landArea = (LandAreaEntity) mappingContext.doMapping(claimedChunk.getLandArea());
46+
47+
return new ClaimedChunkEntity(claimedChunk.getId(), claimedChunk.getChunkIndex(), landArea);
48+
};
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package net.onelitefeather.pandorascluster.database.mapper.flag;
2+
3+
import net.onelitefeather.pandorascluster.api.flag.FlagContainer;
4+
import net.onelitefeather.pandorascluster.api.land.flag.LandEntityCapFlag;
5+
import net.onelitefeather.pandorascluster.api.mapper.MapperStrategy;
6+
import net.onelitefeather.pandorascluster.api.mapper.MappingContext;
7+
import net.onelitefeather.pandorascluster.api.mapper.PandorasModel;
8+
import net.onelitefeather.pandorascluster.database.models.flag.FlagContainerEntity;
9+
import net.onelitefeather.pandorascluster.database.models.flag.LandEntityCapFlagEntity;
10+
import net.onelitefeather.pandorascluster.dto.flag.EntityCapFlagDto;
11+
12+
import java.util.function.Function;
13+
14+
public final class EntityCapFlagMappingStrategy implements MapperStrategy {
15+
16+
@Override
17+
public Function<PandorasModel, PandorasModel> entityToModel() {
18+
return entity -> {
19+
if (entity == null) return null;
20+
if (!(entity instanceof EntityCapFlagDto flag)) return null;
21+
22+
MappingContext mappingContext = MappingContext.create();
23+
mappingContext.setMappingStrategy(FlagContainerMappingStrategy.create());
24+
mappingContext.setMappingType(MapperType.ENTITY_TO_MODEL);
25+
26+
FlagContainer flagContainer = (FlagContainer) mappingContext.doMapping(flag.flagContainer());
27+
28+
return new LandEntityCapFlag(flag.id(), flag.name(), flag.spawnLimit(), flagContainer);
29+
};
30+
}
31+
32+
@Override
33+
public Function<PandorasModel, PandorasModel> modelToEntity() {
34+
return model -> {
35+
if (model == null) return null;
36+
if (!(model instanceof LandEntityCapFlag flag)) return null;
37+
38+
MappingContext mappingContext = MappingContext.create();
39+
mappingContext.setMappingStrategy(FlagContainerMappingStrategy.create());
40+
mappingContext.setMappingType(MapperType.MODEL_TO_ENTITY);
41+
42+
FlagContainerEntity flagContainer = (FlagContainerEntity) mappingContext.doMapping(flag.getParent());
43+
return new LandEntityCapFlagEntity(flag.getId(), flag.getName(), flag.getSpawnLimit(), flagContainer);
44+
};
45+
}
46+
47+
public static EntityCapFlagMappingStrategy create() {
48+
return new EntityCapFlagMappingStrategy();
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package net.onelitefeather.pandorascluster.database.mapper.flag;
2+
3+
import net.onelitefeather.pandorascluster.api.flag.FlagContainer;
4+
import net.onelitefeather.pandorascluster.api.land.Land;
5+
import net.onelitefeather.pandorascluster.api.land.flag.LandEntityCapFlag;
6+
import net.onelitefeather.pandorascluster.api.land.flag.LandNaturalFlag;
7+
import net.onelitefeather.pandorascluster.api.land.flag.LandRoleFlag;
8+
import net.onelitefeather.pandorascluster.api.mapper.MapperStrategy;
9+
import net.onelitefeather.pandorascluster.api.mapper.MappingContext;
10+
import net.onelitefeather.pandorascluster.api.mapper.PandorasModel;
11+
import net.onelitefeather.pandorascluster.database.mapper.land.LandMappingStrategy;
12+
import net.onelitefeather.pandorascluster.database.models.flag.FlagContainerEntity;
13+
import net.onelitefeather.pandorascluster.database.models.flag.LandEntityCapFlagEntity;
14+
import net.onelitefeather.pandorascluster.database.models.flag.LandNaturalFlagEntity;
15+
import net.onelitefeather.pandorascluster.database.models.flag.LandRoleFlagEntity;
16+
import net.onelitefeather.pandorascluster.database.models.land.LandEntity;
17+
import net.onelitefeather.pandorascluster.dto.flag.FlagContainerDto;
18+
19+
import java.util.List;
20+
import java.util.function.Function;
21+
22+
public final class FlagContainerMappingStrategy implements MapperStrategy {
23+
24+
@Override
25+
public Function<PandorasModel, PandorasModel> entityToModel() {
26+
return entity -> {
27+
if (entity == null) return null;
28+
if (!(entity instanceof FlagContainerDto flagContainer)) return null;
29+
30+
MappingContext mappingContext = MappingContext.create();
31+
mappingContext.setMappingStrategy(LandMappingStrategy.create());
32+
mappingContext.setMappingType(MapperType.ENTITY_TO_MODEL);
33+
34+
Land land = (Land) mappingContext.doMapping(flagContainer.land());
35+
36+
List<LandNaturalFlag> naturalFlags = flagContainer.naturalFlags()
37+
.stream()
38+
.map(naturalFlagDBO -> (LandNaturalFlag) mappingContext.doMapping(naturalFlagDBO))
39+
.toList();
40+
41+
List<LandRoleFlag> roleFlags = flagContainer.roleFlags()
42+
.stream()
43+
.map(naturalFlagDBO -> (LandRoleFlag) mappingContext.doMapping(naturalFlagDBO))
44+
.toList();
45+
46+
List<LandEntityCapFlag> entityCapFlags = flagContainer.entityCapFlags()
47+
.stream()
48+
.map(naturalFlagDBO -> (LandEntityCapFlag) mappingContext.doMapping(naturalFlagDBO))
49+
.toList();
50+
51+
return new FlagContainer(flagContainer.id(), land, naturalFlags, roleFlags, entityCapFlags);
52+
};
53+
}
54+
55+
@Override
56+
public Function<PandorasModel, PandorasModel> modelToEntity() {
57+
return model -> {
58+
59+
if (model == null) return null;
60+
if(!(model instanceof FlagContainer flagContainer)) return null;
61+
62+
MappingContext mappingContext = MappingContext.create();
63+
mappingContext.setMappingStrategy(LandMappingStrategy.create());
64+
mappingContext.setMappingType(MapperType.MODEL_TO_ENTITY);
65+
66+
List<LandNaturalFlagEntity> naturalFlags = flagContainer.getNaturalFlags()
67+
.stream()
68+
.map(naturalFlagDBO -> (LandNaturalFlagEntity) mappingContext.doMapping(naturalFlagDBO))
69+
.toList();
70+
71+
List<LandRoleFlagEntity> roleFlags = flagContainer.getRoleFlags()
72+
.stream()
73+
.map(naturalFlagDBO -> (LandRoleFlagEntity) mappingContext.doMapping(naturalFlagDBO))
74+
.toList();
75+
76+
List<LandEntityCapFlagEntity> entityCapFlags = flagContainer.getEntityCapFlags()
77+
.stream()
78+
.map(naturalFlagDBO -> (LandEntityCapFlagEntity) mappingContext.doMapping(naturalFlagDBO))
79+
.toList();
80+
81+
LandEntity land = (LandEntity) mappingContext.doMapping(flagContainer.getLand());
82+
83+
return new FlagContainerEntity(flagContainer.getId(), land, naturalFlags, roleFlags, entityCapFlags);
84+
};
85+
}
86+
87+
public static FlagContainerMappingStrategy create() {
88+
return new FlagContainerMappingStrategy();
89+
}
90+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package net.onelitefeather.pandorascluster.database.mapper.flag;
2+
3+
import net.onelitefeather.pandorascluster.api.flag.FlagContainer;
4+
import net.onelitefeather.pandorascluster.api.land.flag.LandNaturalFlag;
5+
import net.onelitefeather.pandorascluster.api.mapper.MapperStrategy;
6+
import net.onelitefeather.pandorascluster.api.mapper.MappingContext;
7+
import net.onelitefeather.pandorascluster.api.mapper.PandorasModel;
8+
import net.onelitefeather.pandorascluster.database.models.flag.FlagContainerEntity;
9+
import net.onelitefeather.pandorascluster.database.models.flag.LandNaturalFlagEntity;
10+
import net.onelitefeather.pandorascluster.dto.flag.NaturalFlagDto;
11+
12+
import java.util.function.Function;
13+
14+
public final class NaturalFlagMappingStrategy implements MapperStrategy {
15+
16+
@Override
17+
public Function<PandorasModel, PandorasModel> entityToModel() {
18+
return entity -> {
19+
if (entity == null) return null;
20+
if (!(entity instanceof NaturalFlagDto flag)) return null;
21+
22+
MappingContext mappingContext = MappingContext.create();
23+
mappingContext.setMappingStrategy(FlagContainerMappingStrategy.create());
24+
mappingContext.setMappingType(MapperType.ENTITY_TO_MODEL);
25+
26+
FlagContainer flagContainer = (FlagContainer) mappingContext.doMapping(flag.flagContainer());
27+
28+
return new LandNaturalFlag(flag.id(), flag.name(), flag.state(), flagContainer);
29+
};
30+
}
31+
32+
@Override
33+
public Function<PandorasModel, PandorasModel> modelToEntity() {
34+
return model -> {
35+
if (model == null) return null;
36+
if (!(model instanceof LandNaturalFlag flag)) return null;
37+
38+
MappingContext mappingContext = MappingContext.create();
39+
mappingContext.setMappingStrategy(FlagContainerMappingStrategy.create());
40+
mappingContext.setMappingType(MapperType.MODEL_TO_ENTITY);
41+
42+
FlagContainerEntity flagContainer = (FlagContainerEntity) mappingContext.doMapping(flag.getParent());
43+
44+
return new LandNaturalFlagEntity(flag.getId(), flag.getName(), flag.getState(), flagContainer);
45+
};
46+
}
47+
48+
public static NaturalFlagMappingStrategy create() {
49+
return new NaturalFlagMappingStrategy();
50+
}
51+
}

0 commit comments

Comments
 (0)