Skip to content

Add public Adapter API. #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .jitpack.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
jdk: openjdk8
46 changes: 46 additions & 0 deletions .run/jitpack.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="jitpack" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings" />
<option name="myRunnerSettings">
<MavenRunnerSettings>
<option name="delegateBuildToMaven" value="false" />
<option name="environmentProperties">
<map>
<entry key="JITPACK" value="true" />
</map>
</option>
<option name="jreName" value="#USE_PROJECT_JDK" />
<option name="mavenProperties">
<map />
</option>
<option name="passParentEnv" value="true" />
<option name="runMavenInBackground" value="true" />
<option name="skipTests" value="false" />
<option name="vmOptions" value="" />
</MavenRunnerSettings>
</option>
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="clean" />
<option value="install" />
<option value="-DskipTests" />
</list>
</option>
<option name="pomFileName" />
<option name="profilesMap">
<map />
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
<method v="2" />
</configuration>
</component>
83 changes: 83 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# skript-variable-dump

[![](https://jitpack.io/v/goingoffskript/skript-variable-dump.svg)](https://jitpack.io/#goingoffskript/skript-variable-dump "Get maven artifacts on JitPack")
[![](https://img.shields.io/badge/License-MIT-blue)](./LICENSE "Project license: MIT")
[![](https://img.shields.io/badge/Java-8-orange)](# "This project targets Java 8")
[![](https://img.shields.io/badge/View-Javadocs-%234D7A97)](https://javadoc.jitpack.io/com/github/goingoffskript/skript-variable-dump/latest/javadoc/ "View javadocs")

Dump [Skript](https://github.com/SkriptLang/Skript/) variables to YAML.

Expand All @@ -14,3 +16,84 @@ All loaded variables will be dumped into a YAML file generated at:
`/plugins/Skript/dumps/`

That's all.

## Example

📜 ➡️ 📑

- Variables: `/plugins/Skript/variables.csv`

```csv
# === Skript's variable storage ===
# Please do not modify this file manually!
#
# version: 2.5.3

numbers::1, string, 80036F6E65
numbers::2, string, 800374776F
numbers::3, string, 80057468726565
numbers::4, long, 0000000000000004
numbers::5, long, 0000000000000005
numbers::6, long, 0000000000000006
numbers::7, double, 401E000000000000
numbers::8, double, 4020666666666666
numbers::9, double, 4022333333333333
wait, timespan, 81066D696C6C6973040000000000000BB8
```

- Run: **/skript-variable-dump**
- Generates: `/plugins/Skript/dumps/skript-variables-dump.2021-05-12_1.yml`

```yaml
# Skript Variable Dump: 2021-05-12T16:53:30.636775
# Skript Version: 2.5.3

numbers:
'1': one
'2': two
'3': three
'4': 4
'5': 5
'6': 6
'7': 7.5
'8': 8.2
'9': 9.1
wait:
==: Timespan
milliseconds: 3000
```

## Addons

Addons can register adapters for their data types with:

```java
import com.github.goingoffskript.skriptvariabledump.SkriptToYaml;

SkriptToYaml.adapts(ExampleType.class, (example, map) -> {
map.put("thing", example.thing());
map.put("amount", example.amount());
});
```

### Dependency

Get it from JitPack: https://jitpack.io/#goingoffskript/skript-variable-dump

```xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>com.github.goingoffskript</groupId>
<artifactId>skript-variable-dump</artifactId>
<version><!-- Released Version --></version>
<scope>provided</scope>
</dependency>
</dependencies>
```
58 changes: 57 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@

<groupId>io.github.goingoffskript</groupId>
<artifactId>skript-variable-dump</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<repositories>
Expand All @@ -26,13 +27,15 @@

<dependencies>
<!-- Paper API (via papermc) -->
<!-- Few versions behind to ensure compatibility -->
<dependency>
<groupId>com.destroystokyo.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.14.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Skript (via jitpack) -->
<!-- Few versions behind to ensure compatibility -->
<dependency>
<groupId>com.github.skriptlang</groupId>
<artifactId>skript</artifactId>
Expand All @@ -50,6 +53,7 @@
<groupId>pl.tlinkowski.annotation</groupId>
<artifactId>pl.tlinkowski.annotation.basic</artifactId>
<version>0.2.0</version>
<!-- Note: scope must be visible to dependent projects otherwise nullness annotations will not work as intended -->
</dependency>
</dependencies>

Expand Down Expand Up @@ -79,4 +83,56 @@
</resource>
</resources>
</build>

<profiles>
<!-- JitPack (activated with `JITPACK=true` environment variable) -->
<profile>
<id>jitpack</id>
<activation>
<activeByDefault>false</activeByDefault>
<property>
<name>env.JITPACK</name>
</property>
</activation>
<build>
<plugins>
<!-- Generate javadocs -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<doclint>none</doclint>
<links>
<link>https://javadoc.io/doc/pl.tlinkowski.annotation/pl.tlinkowski.annotation.basic/0.2.0/</link>
</links>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Attach sources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>

</project>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.goingoffskript.skriptvariabledump;
package com.github.goingoffskript.skriptvariabledump;

import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.util.Color;
Expand All @@ -11,11 +11,14 @@
import java.util.Map;
import java.util.function.BiConsumer;

/**
* Skript data-to-YAML adapters.
*/
public class SkriptToYaml
{
private SkriptToYaml() {}

private static final Map<Class<?>, BiConsumer<Object, Map<String, Object>>> ADAPTERS = new HashMap<>();
private static final Map<Class<?>, Adapter<?>> ADAPTERS = new HashMap<>();

static
{
Expand All @@ -36,22 +39,48 @@ private SkriptToYaml() {}
});
}

/**
* Adapts data from a specific type into a
* {@code Map<String, Object>}.
*
* @param <T> data type
*/
@FunctionalInterface
public interface Adapter<T> extends BiConsumer<T, Map<String, Object>> {}

/**
* Registers an adapter for a specific data type.
*
* @param clazz the data type's class
* @param adapter the adapter to register
* @param <T> data type
*/
@SuppressWarnings("unchecked")
public static <T> void adapts(Class<T> clazz, BiConsumer<T, Map<String, Object>> adapter)
public static <T> void adapts(Class<T> clazz, Adapter<T> adapter)
{
ADAPTERS.put(clazz, (object, map) -> {
map.put("==", clazz.getSimpleName());
adapter.accept((T) object, map);
});
}

/**
* Adapts an object into a string map or returns
* it as-is if no adapter exists for its type.
*
* @param object the object to adapt
*
* @return the provided object
* or a {@code Map<String, Object>}
*/
@SuppressWarnings("unchecked")
public static Object adapt(Object object)
{
@NullOr BiConsumer<Object, Map<String, Object>> adapter = ADAPTERS.get(object.getClass());
@NullOr Adapter<?> adapter = ADAPTERS.get(object.getClass());
if (adapter == null) { return object; }

Map<String, Object> map = new LinkedHashMap<>();
adapter.accept(object, map);
((Adapter<Object>) adapter).accept(object, map);
return map;
}
}
Loading