Skip to content

Commit b9635c6

Browse files
Release of v1.0 (#1)
* Setup basic plugin and command layout * Basic implementation of plot and grid selection * Restore blocks on deselect * Update readme * Dump studd for other machine * First functional implementation with sbr 2.0 * Fix test dependencies * Save session to history * Add locale for error handling * Add save schematics command * Fix missing blocks on unselect * Small changes, fixes and additions * Update to latest SBR beta * Prevent grid function from being used in plot worlds * Add permissions to commands * Proper project setup * Update to latest SBR beta * Update readme * Update buildfile
1 parent 8e7a98c commit b9635c6

31 files changed

+1486
-64
lines changed

Diff for: FUNDING.yml

-12
This file was deleted.

Diff for: HEADER.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
SPDX-License-Identifier: AGPL-3.0-only
2+
3+
Copyright (C) 2021 EldoriaRPG Team and Contributor

Diff for: Readme.md

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
[![Wakatime_Badge](https://wakatime.com/badge/github/eldoriarpg/gridselector.svg)][wakatime]
2+
3+
[![Publish](https://img.shields.io/github/workflow/status/eldoriarpg/gridselector/Publish%20to%20Nexus?style=for-the-badge&label=Publish)][publish]
4+
[![Build](https://img.shields.io/github/workflow/status/eldoriarpg/gridselector/Verify%20state?style=for-the-badge&label=Build)][verify]
5+
6+
[![Releases](https://img.shields.io/nexus/maven-releases/de.eldoria/gridselector?label=Release&logo=Release&server=https%3A%2F%2Feldonexus.de&style=for-the-badge)][release]
7+
[![Development](https://img.shields.io/nexus/maven-dev/de.eldoria/gridselector?label=DEV&logo=Release&server=https%3A%2F%2Feldonexus.de&style=for-the-badge)][development]
8+
[![Snapshots](https://img.shields.io/nexus/s/de.eldoria/gridselector?color=orange&label=Snapshot&server=https%3A%2F%2Feldonexus.de&style=for-the-badge)][snapshot]
9+
10+
<!-- [![Text](image_link)][link_anchor] -->
11+
<!-- [anchor]: link> -->
12+
13+
[wakatime]: https://wakatime.com/badge/github/eldoriarpg/gridselector
14+
[publish]: https://github.com/eldoriarpg/gridselector/actions/workflows/publish_to_nexus.yml
15+
[verify]: https://github.com/eldoriarpg/gridselector/actions/workflows/verify.yml
16+
[release]: https://eldonexus.de/#browse/browse:maven-releases:de%2Feldoria%2Fgridselector
17+
[development]: https://eldonexus.de/#browse/browse:maven-dev:de%2Feldoria%2Fgridselector
18+
[snapshot]: https://eldonexus.de/#browse/browse:maven-snapshots:de%2Feldoria%2Fgridselector
19+
20+
# What is GridSelector
21+
GridSelector is an Add-On for [Schematic Brush 2.0](https://github.com/eldoriarpg/SchematicBrushReborn).
22+
23+
It allows to define grid worlds and select schematics directly from this grid. As an alternative plot squared worlds can be used.
24+
25+
Take a look at the [wiki](https://github.com/eldoriarpg/gridselector/wiki) for more information.

Diff for: build.gradle.kts

+31-50
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,58 @@
11
plugins {
2+
id("org.cadixdev.licenser") version "0.6.1"
23
id("com.github.johnrengelman.shadow") version "7.0.0"
4+
id("de.chojo.publishdata") version "1.0.2"
35
java
46
`maven-publish`
57
}
68

79
group = "de.eldoria"
810
version = "1.0"
9-
val publishData = PublishData(project)
10-
val shadebase = "de.eldoria.gridselector.libs"
11+
val shadebase = "de.eldoria." + rootProject.name + ".libs."
1112

1213
repositories {
14+
mavenCentral()
1315
maven("https://eldonexus.de/repository/maven-public/")
1416
maven("https://eldonexus.de/repository/maven-proxies/")
1517
}
1618

1719
dependencies {
18-
implementation("de.eldoria", "eldo-util", "1.10.3")
19-
compileOnly("de.eldoria", "schematicbrushreborn", "1.5.0-20210919.131332-5")
20+
compileOnly("de.eldoria", "schematicbrushreborn-api", "2.0.0-DEV")
21+
compileOnly("de.eldoria", "eldo-util", "1.12.8-DEV")
2022
compileOnly("org.spigotmc", "spigot-api", "1.16.5-R0.1-SNAPSHOT")
23+
compileOnly("com.sk89q.worldedit", "worldedit-bukkit", "7.2.6")
24+
compileOnly("com.plotsquared", "PlotSquared-Core", "6.1.2") // PlotSquared Core API
25+
compileOnly("com.plotsquared:PlotSquared-Bukkit:6.1.2") { isTransitive = false } // PlotSquared Bukkit API
2126

2227
testImplementation("org.junit.jupiter", "junit-jupiter-api", "5.6.0")
28+
testImplementation("org.spigotmc", "spigot-api", "1.16.5-R0.1-SNAPSHOT")
29+
testImplementation("de.eldoria", "eldo-util", "1.10.11-DEV")
2330
testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine")
2431
}
2532

33+
license {
34+
header(rootProject.file("HEADER.txt"))
35+
include("**/*.java")
36+
}
37+
2638
java {
2739
withSourcesJar()
2840
withJavadocJar()
29-
sourceCompatibility = JavaVersion.VERSION_11
41+
sourceCompatibility = JavaVersion.VERSION_16
42+
}
43+
44+
publishData {
45+
hashLength = 7
46+
useEldoNexusRepos()
47+
publishTask("jar")
48+
publishTask("shadowJar")
49+
publishTask("sourcesJar")
50+
publishTask("javadocJar")
3051
}
3152

3253
publishing {
3354
publications.create<MavenPublication>("maven") {
34-
artifact(tasks["shadowJar"])
35-
artifact(tasks["sourcesJar"])
36-
artifact(tasks["javadocJar"])
37-
groupId = project.group as String?
38-
artifactId = project.name.toLowerCase()
39-
version = publishData.getVersion()
55+
publishData.configurePublication(this)
4056
}
4157

4258
repositories {
@@ -48,8 +64,8 @@ publishing {
4864
}
4965
}
5066

67+
setUrl(publishData.getRepository())
5168
name = "EldoNexus"
52-
url = uri(publishData.getRepository())
5369
}
5470
}
5571
}
@@ -62,21 +78,22 @@ tasks {
6278
compileTestJava{
6379
options.encoding = "UTF-8"
6480
}
81+
6582
test {
6683
useJUnitPlatform()
6784
testLogging {
6885
events("passed", "skipped", "failed")
6986
}
7087
}
7188
shadowJar{
72-
relocate("de.eldoutilities", shadebase + "eldoutilities")
89+
relocate("de.eldoria.eldoutilities", "de.eldoria.schematicbrush.libs.eldoutilities")
7390
mergeServiceFiles()
7491
}
7592
processResources {
7693
from(sourceSets.main.get().resources.srcDirs) {
7794
filesMatching("plugin.yml") {
7895
expand(
79-
"version" to project.version
96+
"version" to publishData.getVersion(true)
8097
)
8198
}
8299
duplicatesStrategy = DuplicatesStrategy.INCLUDE
@@ -92,39 +109,3 @@ tasks {
92109
destinationDir = File(path.toString())
93110
}
94111
}
95-
96-
class PublishData(private val project: Project) {
97-
var type: Type = getReleaseType()
98-
var hashLength: Int = 7
99-
100-
private fun getReleaseType(): Type {
101-
val branch = getCheckedOutBranch()
102-
return when {
103-
branch.contentEquals("master") -> Type.RELEASE
104-
branch.startsWith("dev") -> Type.DEV
105-
else -> Type.SNAPSHOT
106-
}
107-
}
108-
109-
private fun getCheckedOutGitCommitHash(): String = System.getenv("GITHUB_SHA")?.substring(0, hashLength) ?: "local"
110-
111-
private fun getCheckedOutBranch(): String = System.getenv("GITHUB_REF")?.replace("refs/heads/", "") ?: "local"
112-
113-
fun getVersion(): String = getVersion(false)
114-
115-
fun getVersion(appendCommit: Boolean): String =
116-
type.append(getVersionString(), appendCommit, getCheckedOutGitCommitHash())
117-
118-
private fun getVersionString(): String = (project.version as String).replace("-SNAPSHOT", "").replace("-DEV", "")
119-
120-
fun getRepository(): String = type.repo
121-
122-
enum class Type(private val append: String, val repo: String, private val addCommit: Boolean) {
123-
RELEASE("", "https://eldonexus.de/repository/maven-releases/", false),
124-
DEV("-DEV", "https://eldonexus.de/repository/maven-dev/", true),
125-
SNAPSHOT("-SNAPSHOT", "https://eldonexus.de/repository/maven-snapshots/", true);
126-
127-
fun append(name: String, appendCommit: Boolean, commitHash: String): String =
128-
name.plus(append).plus(if (appendCommit && addCommit) "-".plus(commitHash) else "")
129-
}
130-
}

Diff for: gradle/wrapper/gradle-wrapper.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

Diff for: settings.gradle.kts

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,13 @@
1-
rootProject.name = "GridSelector"
1+
rootProject.name = "gridselector"
22

3+
pluginManagement{
4+
repositories{
5+
mavenLocal()
6+
gradlePluginPortal()
7+
maven{
8+
name = "EldoNexus"
9+
url = uri("https://eldonexus.de/repository/maven-public/")
10+
11+
}
12+
}
13+
}
+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* SPDX-License-Identifier: AGPL-3.0-only
3+
*
4+
* Copyright (C) 2021 EldoriaRPG Team and Contributor
5+
*/
6+
7+
package de.eldoria.gridselector;
8+
9+
10+
import com.plotsquared.core.PlotSquared;
11+
import de.eldoria.eldoutilities.localization.ILocalizer;
12+
import de.eldoria.eldoutilities.messages.MessageSender;
13+
import de.eldoria.eldoutilities.plugin.EldoPlugin;
14+
import de.eldoria.gridselector.adapter.WorldAdapter;
15+
import de.eldoria.gridselector.adapter.regionadapter.GridWorldAdapter;
16+
import de.eldoria.gridselector.adapter.regionadapter.PlotWorldAdapter;
17+
import de.eldoria.gridselector.adapter.regionadapter.RegionAdapter;
18+
import de.eldoria.gridselector.adapter.regionadapter.RegionResult;
19+
import de.eldoria.gridselector.command.Grid;
20+
import de.eldoria.gridselector.config.Configuration;
21+
import de.eldoria.gridselector.config.elements.GridWorld;
22+
import de.eldoria.gridselector.listener.SelectionListener;
23+
import de.eldoria.gridselector.schematics.GridSchematics;
24+
import de.eldoria.gridselector.selector.GridProvider;
25+
import de.eldoria.schematicbrush.SchematicBrushReborn;
26+
import org.bukkit.Location;
27+
import org.bukkit.configuration.serialization.ConfigurationSerializable;
28+
29+
import java.util.ArrayList;
30+
import java.util.List;
31+
import java.util.Objects;
32+
import java.util.Optional;
33+
34+
public class GridSelector extends EldoPlugin {
35+
36+
@Override
37+
public void onPluginEnable() throws Throwable {
38+
var config = new Configuration(this);
39+
40+
var sbr = (SchematicBrushReborn) Objects.requireNonNull(getPluginManager().getPlugin("SchematicBrushReborn"));
41+
42+
var messageSender = MessageSender.create(this, "§3[GS]");
43+
44+
var gridSchematics = new GridSchematics(this);
45+
46+
var iLocalizer = ILocalizer.create(this, "en_US");
47+
iLocalizer.setLocale("en_US");
48+
sbr.brushSettingsRegistry().registerSelector(new GridProvider(sbr.schematics()));
49+
sbr.schematics().register(GridSchematics.KEY, gridSchematics);
50+
51+
List<RegionAdapter> regionAdapters = new ArrayList<>();
52+
regionAdapters.add(new GridWorldAdapter(config));
53+
54+
RegionAdapter plotWorldAdapter;
55+
if (getPluginManager().isPluginEnabled("PlotSquared")) {
56+
logger().info("Found plot squared. Registering plot squared world adapter");
57+
var plotSquared = PlotSquared.get();
58+
plotWorldAdapter = new PlotWorldAdapter(plotSquared);
59+
regionAdapters.add(plotWorldAdapter);
60+
} else {
61+
plotWorldAdapter = new RegionAdapter() {
62+
@Override
63+
public boolean isApplicable(Location location) {
64+
return false;
65+
}
66+
67+
@Override
68+
public Optional<RegionResult> getRegion(Location location) {
69+
return Optional.empty();
70+
}
71+
};
72+
}
73+
74+
var worldAdapter = new WorldAdapter(regionAdapters);
75+
var selectionListener = new SelectionListener(worldAdapter, gridSchematics, messageSender);
76+
77+
registerListener(selectionListener);
78+
79+
registerCommand(new Grid(this, sbr, selectionListener, config, gridSchematics, plotWorldAdapter));
80+
}
81+
82+
@Override
83+
public List<Class<? extends ConfigurationSerializable>> getConfigSerialization() {
84+
return List.of(GridWorld.class);
85+
}
86+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* SPDX-License-Identifier: AGPL-3.0-only
3+
*
4+
* Copyright (C) 2021 EldoriaRPG Team and Contributor
5+
*/
6+
7+
package de.eldoria.gridselector.adapter;
8+
9+
import com.sk89q.worldedit.bukkit.BukkitAdapter;
10+
import com.sk89q.worldedit.util.Location;
11+
import de.eldoria.gridselector.adapter.regionadapter.RegionAdapter;
12+
import de.eldoria.gridselector.adapter.regionadapter.RegionResult;
13+
14+
import java.util.Arrays;
15+
import java.util.List;
16+
import java.util.Optional;
17+
18+
public class WorldAdapter {
19+
private final List<RegionAdapter> adapters;
20+
21+
public WorldAdapter(List<RegionAdapter> adapters) {
22+
this.adapters = adapters;
23+
}
24+
25+
public Optional<RegionResult> getRegion(Location location) {
26+
var loc = BukkitAdapter.adapt(location);
27+
return adapters.stream()
28+
.filter(a -> a.isApplicable(loc))
29+
.findFirst()
30+
.flatMap(adaper -> adaper.getRegion(loc));
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* SPDX-License-Identifier: AGPL-3.0-only
3+
*
4+
* Copyright (C) 2021 EldoriaRPG Team and Contributor
5+
*/
6+
7+
package de.eldoria.gridselector.adapter.regionadapter;
8+
9+
import de.eldoria.gridselector.config.Configuration;
10+
import org.bukkit.Location;
11+
12+
import java.util.Optional;
13+
14+
public class GridWorldAdapter implements RegionAdapter {
15+
private final Configuration configuration;
16+
17+
public GridWorldAdapter(Configuration configuration) {
18+
this.configuration = configuration;
19+
}
20+
21+
@Override
22+
public boolean isApplicable(Location location) {
23+
return configuration.getGridWorld(location).isPresent();
24+
}
25+
26+
@Override
27+
public Optional<RegionResult> getRegion(Location location) {
28+
return configuration.getGridWorld(location)
29+
.map(world -> new RegionResult(world.getGridItentifier(location), world.getGridElement(location)));
30+
}
31+
}

0 commit comments

Comments
 (0)