-
Notifications
You must be signed in to change notification settings - Fork 5
[REFERENCE ONLY DO NOT REVIEW!!!] Implement Mojang WebAPI, common user root class, and playerheads #56
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
base: master
Are you sure you want to change the base?
[REFERENCE ONLY DO NOT REVIEW!!!] Implement Mojang WebAPI, common user root class, and playerheads #56
Changes from all commits
5972a00
b8a5bf6
8dae48a
7d74d10
3db73ff
004fbf0
b014f6b
329515f
ab69d97
67a9c4b
680655b
8c113ec
ac010e4
0b15f04
b6f0496
6d4bcec
c4a023e
0fb226b
c44992f
b278a81
8c6b7b5
786590d
cacaefb
ade9f94
223a6f9
84c0b3b
6b4316f
42b1739
d16c439
3aaa25b
6fc4385
263164b
26c8415
614816b
e6a97e1
94683c6
aa23150
7f2cab7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -70,3 +70,4 @@ jobs: | |
| with: | ||
| name: failed-javadocs-options-file | ||
| path: build/tmp/javadoc/javadoc.options | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,19 +14,21 @@ jacoco { | |
| } | ||
|
|
||
| group = 'com.dumbdogdiner' | ||
|
|
||
| version = '2.1.0' | ||
| version = '2.3.0' | ||
|
|
||
| // License Plugin Options | ||
| license { | ||
| header = project.file('LICENSE_HEADER') | ||
| ext.year = Calendar.getInstance().get(Calendar.YEAR) | ||
| mapping("java", "SLASHSTAR_STYLE") | ||
| exclude("**/*.json") | ||
| } | ||
|
|
||
| tasks.withType(JavaCompile) { | ||
| options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-XDignore.symbol.file" | ||
| options.encoding = "UTF-8" | ||
| } | ||
|
|
||
| // Run the license formatter before compiling the source code. | ||
| tasks.compileJava.dependsOn licenseFormatMain, licenseFormatTest | ||
|
|
||
|
|
@@ -39,6 +41,7 @@ configurations { | |
| repositories { | ||
| mavenCentral() | ||
| jcenter() | ||
| google() | ||
|
|
||
| maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } | ||
| maven { url 'https://papermc.io/repo/repository/maven-public/' } | ||
|
|
@@ -50,17 +53,34 @@ dependencies { | |
|
|
||
| compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT' | ||
| compileOnly 'net.md-5:bungeecord-api:1.16-R0.5-SNAPSHOT' | ||
|
|
||
| implementation 'org.jetbrains:annotations:20.1.0' | ||
| implementation 'com.google.code.gson:gson:2.8.6' | ||
| implementation 'io.github.classgraph:classgraph:4.8.100' | ||
| implementation 'com.github.seancfoley:ipaddress:5.3.3' | ||
| implementation 'com.squareup.okhttp3:okhttp:4.9.0' | ||
| implementation 'commons-validator:commons-validator:1.7' | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please use Guava's preconditions rather than shading in deps to StickyAPI.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please explain
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See the JavaDocs for preconditions. This is included in both bukkit and bungee so will work at runtime. No need to shade in extra dependencies.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unless you're intending to use this for a completely different reason.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Validator is used primarily to check url formatting for validity, and determine if a URL is validly formatted (and I think it also checks if it's resolvable). There are a couple other ways I plan to use it.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We can also theoretically call the minimize() function to reduce jar size
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Google preconditions does thissssss - just include a URL regex.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This has side effects, we've already tried it.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we even need to validate the URL ourselves? OkHttp should throw an exception when unable to parse a URL, and if we don't want to use OkHttp, a regular expression will do for URL validity
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could also probably test URL validity by attempting to construct a URL object using the string and seeing if a MalformedURLException is thrown |
||
| implementation 'com.google.guava:guava:30.1-jre' | ||
|
|
||
| // Tests - JUnit 5 | ||
| testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") | ||
| testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") | ||
|
|
||
| // Tests - Mocking Suite (eg. mocking Bukkit for tests) | ||
| testImplementation("org.mockito:mockito-core:3.7.7") | ||
|
|
||
| // Tests - Mocked Bukkit Project (Has some additional features) | ||
| testImplementation 'com.github.seeseemelk:MockBukkit-v1.16:0.5.0' | ||
| testImplementation 'it.unimi.dsi:fastutil:8.4.4' | ||
| } | ||
|
|
||
| task downloadTextures(type: Download) { | ||
| sourceUrl = 'https://dumbdogdiner.github.io/mc-heads-resource/textures.json' | ||
| target = new File('src/main/resources/generated/textures.json') | ||
| } | ||
|
|
||
| task cleanGenerated(type: Delete){ | ||
| delete('src/main/resources/generated') | ||
| } | ||
|
|
||
| test { | ||
|
|
@@ -70,6 +90,7 @@ test { | |
| // Show System.out for code ran by tests | ||
| showStandardStreams = true | ||
| } | ||
| //ignoreFailures = true | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. remove this line if it's commented.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Its there for testing. I will try to fold into a new task |
||
| finalizedBy jacocoTestReport // report is always generated after tests run | ||
| } | ||
|
|
||
|
|
@@ -86,15 +107,22 @@ task sources(type: Jar, dependsOn: classes) { | |
| from sourceSets.main.allSource | ||
| } | ||
|
|
||
| tasks.delombok.shouldRunAfter(sources) | ||
| tasks.publish.dependsOn build | ||
| tasks.build.shouldRunAfter(clean) | ||
| tasks.javadoc.shouldRunAfter(clean) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm a little hesitant to have javadoc and build run after clean... @NotZachery thoughts?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't see how this could become an issue so I'm fine by it.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. They are set to run after as should, not forced. This prevents (if you did, say,
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah okay - thanks! |
||
| tasks.build.finalizedBy(sources) | ||
| tasks.clean.dependsOn(cleanGenerated) | ||
| tasks.processResources.dependsOn(downloadTextures) | ||
|
|
||
| // Javadoc Fixes | ||
| // Some environments (such as the builder image) do not use UTF-8 as the default encoding! | ||
| // This sets UTF-8 as the encoding for the following tasks: delombok, compileJava, compileTestJava and javadoc. | ||
| delombok.encoding = "UTF-8" | ||
|
|
||
| compileJava.options.encoding = "UTF-8" | ||
| compileTestJava.options.encoding = "UTF-8" | ||
| javadoc.options.encoding = "UTF-8" | ||
| delombok { | ||
| finalizedBy(javadoc) | ||
| print(true) | ||
| encoding = "UTF-8" | ||
| //verbose(true) | ||
| } | ||
|
|
||
|
|
||
| // Build Info | ||
|
|
@@ -127,10 +155,35 @@ task processSourceTokens(type: Sync) { | |
| } | ||
| // Use the filter task as the input for compileJava | ||
| compileJava.source = processSourceTokens.outputs | ||
| tasks.publish.dependsOn build, sources | ||
|
|
||
| tasks.withType(JavaCompile) { | ||
| options.encoding = "UTF-8" | ||
| } | ||
| tasks.withType(Test) { | ||
| systemProperty "file.encoding", "UTF-8" | ||
| } | ||
|
|
||
| javadoc { | ||
| options.addBooleanOption('XDignore.symbol.file', true) | ||
| options.addBooleanOption('-frames', true) | ||
| options.addBooleanOption('private', true) | ||
| test.ignoreFailures true; | ||
| options.encoding = 'UTF-8' | ||
| dependsOn delombok | ||
| } | ||
|
|
||
| tasks.publish.dependsOn build, sources | ||
| task browseJavadoc { | ||
| dependsOn javadoc | ||
| doLast { | ||
| java.awt.Desktop.desktop.browse new URI(("file:///" << System.getProperty("user.dir").replace('\\','/') << "/build/docs/javadoc/index.html").toString()) | ||
| } | ||
| } | ||
|
|
||
| task rebuild { | ||
| dependsOn clean | ||
| finalizedBy build | ||
| } | ||
|
|
||
|
|
||
|
|
||
|
|
@@ -152,3 +205,16 @@ publishing { | |
| } | ||
| } | ||
| } | ||
|
|
||
| class Download extends DefaultTask { | ||
| @Input | ||
| String sourceUrl | ||
|
|
||
| @OutputFile | ||
| File target | ||
|
|
||
| @TaskAction | ||
| void download() { | ||
| ant.get(src: sourceUrl, dest: target) | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1 @@ | ||||||||
| systemProp.file.encoding=utf-8 | ||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,5 @@ | ||
| distributionBase=GRADLE_USER_HOME | ||
| distributionPath=wrapper/dists | ||
| distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip | ||
| distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For future reference: please don't change Gradle versions without asking one of us! |
||
| zipStoreBase=GRADLE_USER_HOME | ||
| zipStorePath=wrapper/dists | ||
| compileJava.options.encoding=UTF-8 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| /* | ||
| * Copyright (c) 2020-2021 DumbDogDiner <dumbdogdiner.com>. All rights reserved. | ||
| * Licensed under the MIT license, see LICENSE for more information... | ||
| */ | ||
| package com.dumbdogdiner.stickyapi.annotation; | ||
|
|
||
| import java.lang.annotation.Documented; | ||
|
|
||
|
|
||
| /** | ||
| * Do not call a method annotated with this, it will do bad things | ||
| */ | ||
| @Documented | ||
| public @interface DoNotCall { | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What is the point of this exactly? If a method shouldn't be called why does it exist.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would prefer it if we can write things in a way where methods that are strictly internal can't be called externally. |
||
|
|
||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -30,7 +30,7 @@ | |
| * | ||
| * @deprecated Use | ||
| * {@link com.dumbdogdiner.stickyapi.bukkit.command.BukkitCommandBuilder} | ||
| * as this will be removed in the next release | ||
| * as this will be removed in a future release | ||
| */ | ||
| @Deprecated | ||
| public abstract class AsyncCommand extends Command implements PluginIdentifiableCommand { | ||
|
|
@@ -43,7 +43,7 @@ public abstract class AsyncCommand extends Command implements PluginIdentifiable | |
| * @param commandName The name of the command the user will execute | ||
| * @param owner The plugin that owns this command. | ||
| */ | ||
| public AsyncCommand(String commandName, Plugin owner) { | ||
| public AsyncCommand(@NotNull String commandName, Plugin owner) { | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For future reference: please keep changes unrelated to the branch somewhere else! |
||
| super(commandName); | ||
| this.owner = owner; | ||
| } | ||
|
|
@@ -60,7 +60,7 @@ public AsyncCommand(String commandName, Plugin owner) { | |
| // public abstract int executeCommand(Sender sender, String commandLabel, | ||
| // String[] args); | ||
|
|
||
| public abstract ExitCode executeCommand(CommandSender sender, String commandLabel, String[] args); | ||
| public abstract @NotNull ExitCode executeCommand(CommandSender sender, String commandLabel, String[] args); | ||
|
|
||
| /** | ||
| * This is a vastly simplified command class. We only check if the plugin is | ||
|
|
@@ -77,17 +77,17 @@ public AsyncCommand(String commandName, Plugin owner) { | |
| * @return {@link ExitCode} | ||
| */ | ||
| @Override | ||
| public final boolean execute(CommandSender sender, String commandLabel, String[] args) { | ||
| public final boolean execute(@NotNull CommandSender sender, String commandLabel, String[] args) { | ||
| if (!this.owner.isEnabled()) | ||
| throw new CommandException(String.format("Cannot execute command \"%s\" in plugin %s - plugin is disabled.", | ||
| commandLabel, this.owner.getDescription().getFullName())); | ||
|
|
||
| AsyncCommand self = this; | ||
| FutureTask<Boolean> t = new FutureTask<>(new Callable<Boolean>() { | ||
| @NotNull AsyncCommand self = this; | ||
| @NotNull FutureTask<Boolean> t = new FutureTask<>(new Callable<Boolean>() { | ||
| @Override | ||
| public Boolean call() { | ||
| public @NotNull Boolean call() { | ||
| try { | ||
| ExitCode resultingExitCode = self.executeCommand(sender, commandLabel, args); | ||
| @NotNull ExitCode resultingExitCode = self.executeCommand(sender, commandLabel, args); | ||
|
|
||
| if (resultingExitCode == null) { | ||
| throw new IllegalArgumentException("A null exit code was returned"); | ||
|
|
@@ -116,7 +116,7 @@ public Boolean call() { | |
| * @return Plugin that owns this command | ||
| */ | ||
| @Override | ||
| public Plugin getPlugin() { | ||
| public @NotNull Plugin getPlugin() { | ||
| return this.owner; | ||
| } | ||
|
|
||
|
|
@@ -181,16 +181,16 @@ public void setTabCompleter(TabCompleter completer) { | |
| */ | ||
| @Override | ||
| public java.util.@NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, | ||
| String[] args) throws CommandException, IllegalArgumentException { | ||
| String @org.jetbrains.annotations.Nullable [] args) throws CommandException, IllegalArgumentException { | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Wacky import? If this can be imported as normal, would be appreciated. |
||
| if (args == null) | ||
| throw new NullPointerException("arguments to tabComplete cannot be null"); | ||
|
|
||
| List<String> completions = null; | ||
| @org.jetbrains.annotations.Nullable List<String> completions = null; | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe these annotations are for the KLS to help infer things properly - don't think we need them in internal Java code. |
||
| try { | ||
| if (completer != null) | ||
| completions = completer.onTabComplete(sender, this, alias, args); | ||
| } catch (Throwable ex) { | ||
| StringBuilder message = new StringBuilder(); | ||
| @NotNull StringBuilder message = new StringBuilder(); | ||
| message.append("Unhandled exception during tab completion for command '/").append(alias).append(' '); | ||
| for (String arg : args) | ||
| message.append(arg).append(' '); | ||
|
|
@@ -212,8 +212,8 @@ public void setTabCompleter(TabCompleter completer) { | |
| * @return the human readable name of the class | ||
| */ | ||
| @Override | ||
| public String toString() { | ||
| StringBuilder stringBuilder = new StringBuilder(super.toString()); | ||
| public @NotNull String toString() { | ||
| @NotNull StringBuilder stringBuilder = new StringBuilder(super.toString()); | ||
| stringBuilder.deleteCharAt(stringBuilder.length() - 1); | ||
| stringBuilder.append(", ").append(owner.getDescription().getFullName()).append(')'); | ||
| return stringBuilder.toString(); | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.