Initial commit

This commit is contained in:
KingRainbow44 2022-05-03 18:58:04 -04:00
commit c733f2d1bc
No known key found for this signature in database
GPG Key ID: FC2CB64B00D257BE
11 changed files with 258 additions and 0 deletions

38
.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

8
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

7
.idea/discord.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DiscordProjectSettings">
<option name="show" value="PROJECT_FILES" />
<option name="description" value="" />
</component>
</project>

19
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="SwUserDefinedSpecifications">
<option name="specTypeByUrl">
<map />
</option>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

34
pom.xml Normal file
View File

@ -0,0 +1,34 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>xyz.grasscutters</groupId> <!-- Replace with your groupId -->
<artifactId>PluginTemplate</artifactId> <!-- Replace with your plugin name. -->
<version>1.0.3-dev</version> <!-- The template's version corresponds to the latest API version. -->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<repositories>
<!--
While Grasscutter is on Maven Central, we include Sonatype to update quickly.
Usually, builds take an hour to go from Sonatype to Maven Central.
-->
<repository>
<id>sonatype</id>
<url>https://s01.oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>xyz.grasscutters</groupId> <!-- Versions below 1.0.3-dev are on 'tech.xigam' -->
<artifactId>grasscutter</artifactId>
<version>1.0.3-dev</version> <!-- Replace with the latest version of the API. -->
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,23 @@
package xyz.grasscutters.pltm;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.event.player.PlayerJoinEvent;
import xyz.grasscutters.pltm.objects.PluginConfig;
/**
* A class containing all event handlers.
*/
public final class EventListeners {
private static final PluginConfig config = PluginTemplate.getInstance().getConfiguration();
/**
* Called when the player joins the server.
* @param event PlayerJoinEvent.
*/
public static void onJoin(PlayerJoinEvent event) {
if(!config.sendJoinMessage) return;
Player player = event.getPlayer();
player.dropMessage(config.joinMessage);
}
}

View File

@ -0,0 +1,96 @@
package xyz.grasscutters.pltm;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.plugin.Plugin;
import emu.grasscutter.server.event.EventHandler;
import emu.grasscutter.server.event.HandlerPriority;
import emu.grasscutter.server.event.player.PlayerJoinEvent;
import org.slf4j.Logger;
import xyz.grasscutters.pltm.objects.PluginConfig;
import java.io.*;
import java.util.stream.Collectors;
/**
* The Grasscutter plugin template.
* This is the main class for the plugin.
*/
public final class PluginTemplate extends Plugin {
/* Turn the plugin into a singleton. */
private static PluginTemplate instance;
/**
* Gets the plugin instance.
* @return A plugin singleton.
*/
public static PluginTemplate getInstance() {
return instance;
}
/* A proper plugin logger will be introduced in v1.0.4-dev. */
private final Logger logger = Grasscutter.getLogger();
/* The plugin's configuration instance. */
private PluginConfig configuration;
/**
* This method is called immediately after the plugin is first loaded into system memory.
*/
@Override public void onLoad() {
// Set the plugin instance.
instance = this;
// Get the configuration file.
File config = new File(this.getDataFolder(), "config.json");
// Load the configuration.
try {
if(!config.exists() && !config.createNewFile()) {
this.logger.error("Failed to create config file.");
} else {
try (FileWriter writer = new FileWriter(config)) {
InputStream configStream = this.getResource("config.json");
if(configStream == null) {
this.logger.error("Failed to save default config file.");
} else {
writer.write(new BufferedReader(
new InputStreamReader(configStream)).lines().collect(Collectors.joining("\n"))
); writer.close();
this.logger.info("Saved default config file.");
}
}
}
// Put the configuration into an instance of the config class.
this.configuration = Grasscutter.getGsonFactory().fromJson(new FileReader(config), PluginConfig.class);
} catch (IOException exception) {
this.logger.error("Failed to create config file.", exception);
}
}
/**
* This method is called before the servers are started, or when the plugin enables.
*/
@Override public void onEnable() {
// Register event listeners.
new EventHandler<>(PlayerJoinEvent.class)
.priority(HandlerPriority.LOW)
.listener(EventListeners::onJoin)
.register();
}
/**
* This method is called when the plugin is disabled.
*/
@Override public void onDisable() {
}
/**
* Gets the plugin's configuration.
* @return A plugin config instance.
*/
public PluginConfig getConfiguration() {
return this.configuration;
}
}

View File

@ -0,0 +1,9 @@
package xyz.grasscutters.pltm.objects;
/**
* A data container for the plugin configuration.
*/
public final class PluginConfig {
public boolean sendJoinMessage;
public String joinMessage;
}

View File

@ -0,0 +1,4 @@
{
"sendJoinMessage": true,
"joinMessage": "This is the example Grasscutter plugin!"
}

View File

@ -0,0 +1,14 @@
{
"name": "PluginTemplate",
"description": "The Grasscutter example plugin, which uses Maven.",
"version": "1.0.2-dev",
"authors": [ "KingRainbow44" ],
"mainClass": "xyz.grasscutters.pltm.PluginTemplate",
"comments": [
"This comments block doesn't need to be in your plugin.json.",
"The mainClass should include the FQDN of the main plugin class.",
"Required fields are: 'name', 'description', and 'mainClass'."
]
}