1.21.5
Co-authored-by: Bjarne Koll <git@lynxplay.dev> Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com> Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Co-authored-by: MiniDigger | Martin <admin@minidigger.dev> Co-authored-by: Nassim Jahnke <nassim@njahnke.dev> Co-authored-by: Noah van der Aa <ndvdaa@gmail.com> Co-authored-by: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Co-authored-by: Shane Freeder <theboyetronic@gmail.com> Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com> Co-authored-by: Tamion <70228790+notTamion@users.noreply.github.com> Co-authored-by: Warrior <50800980+Warriorrrr@users.noreply.github.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
* Stores relevant information for plugin listeners
|
||||
*/
|
||||
public class RegisteredListener {
|
||||
|
||||
private final Listener listener;
|
||||
private final EventPriority priority;
|
||||
private final Plugin plugin;
|
||||
@@ -79,7 +80,6 @@ public class RegisteredListener {
|
||||
return ignoreCancelled;
|
||||
}
|
||||
|
||||
// Paper start
|
||||
/**
|
||||
* Get the executor for this registration.
|
||||
*
|
||||
@@ -100,5 +100,4 @@ public class RegisteredListener {
|
||||
+ "\", ignoringCancelled=" + this.ignoreCancelled
|
||||
+ "}";
|
||||
}
|
||||
// Paper end
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.bukkit.plugin.java;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.base.Preconditions;
|
||||
import io.papermc.paper.command.brigadier.BasicCommand;
|
||||
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
|
||||
@@ -13,6 +12,7 @@ import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -165,7 +165,7 @@ public abstract class JavaPlugin extends PluginBase {
|
||||
protected final @Nullable Reader getTextResource(String file) {
|
||||
final InputStream in = getResource(file);
|
||||
|
||||
return in == null ? null : new InputStreamReader(in, Charsets.UTF_8);
|
||||
return in == null ? null : new InputStreamReader(in, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -177,7 +177,7 @@ public abstract class JavaPlugin extends PluginBase {
|
||||
return;
|
||||
}
|
||||
|
||||
newConfig.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(defConfigStream, Charsets.UTF_8)));
|
||||
newConfig.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(defConfigStream, StandardCharsets.UTF_8)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -39,11 +39,9 @@ import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.PluginLoader;
|
||||
import org.bukkit.plugin.RegisteredListener;
|
||||
import org.bukkit.plugin.SimplePluginManager;
|
||||
import org.bukkit.plugin.TimedRegisteredListener;
|
||||
import org.bukkit.plugin.UnknownDependencyException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spigotmc.CustomTimingsHandler; // Spigot
|
||||
import org.yaml.snakeyaml.error.YAMLException;
|
||||
|
||||
/**
|
||||
@@ -232,13 +230,12 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
Preconditions.checkArgument(plugin != null, "Plugin can not be null");
|
||||
Preconditions.checkArgument(listener != null, "Listener can not be null");
|
||||
|
||||
boolean useTimings = server.getPluginManager().useTimings();
|
||||
Map<Class<? extends Event>, Set<RegisteredListener>> ret = new HashMap<Class<? extends Event>, Set<RegisteredListener>>();
|
||||
Map<Class<? extends Event>, Set<RegisteredListener>> ret = new HashMap<>();
|
||||
Set<Method> methods;
|
||||
try {
|
||||
Method[] publicMethods = listener.getClass().getMethods();
|
||||
Method[] privateMethods = listener.getClass().getDeclaredMethods();
|
||||
methods = new HashSet<Method>(publicMethods.length + privateMethods.length, 1.0f);
|
||||
methods = new HashSet<>(publicMethods.length + privateMethods.length, 1.0f);
|
||||
for (Method method : publicMethods) {
|
||||
methods.add(method);
|
||||
}
|
||||
@@ -267,7 +264,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
method.setAccessible(true);
|
||||
Set<RegisteredListener> eventSet = ret.get(eventClass);
|
||||
if (eventSet == null) {
|
||||
eventSet = new HashSet<RegisteredListener>();
|
||||
eventSet = new HashSet<>();
|
||||
ret.put(eventClass, eventSet);
|
||||
}
|
||||
|
||||
@@ -308,11 +305,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
}
|
||||
}, plugin, method, eventClass); // Paper
|
||||
if (false) { // Spigot - RL handles useTimings check now
|
||||
eventSet.add(new TimedRegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled()));
|
||||
} else {
|
||||
eventSet.add(new RegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled()));
|
||||
}
|
||||
eventSet.add(new RegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled()));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -376,8 +369,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
|
||||
try {
|
||||
loader.close();
|
||||
} catch (IOException ex) {
|
||||
//
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// CHECKSTYLE:OFF
|
||||
package org.bukkit.plugin.java;
|
||||
|
||||
import java.io.File;
|
||||
@@ -38,9 +37,8 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
// Paper start
|
||||
@org.jetbrains.annotations.ApiStatus.Internal
|
||||
public class LibraryLoader
|
||||
public class LibraryLoader {
|
||||
// Paper end
|
||||
{
|
||||
|
||||
private final Logger logger;
|
||||
private final RepositorySystem repository;
|
||||
@@ -49,83 +47,83 @@ public class LibraryLoader
|
||||
public static java.util.function.BiFunction<URL[], ClassLoader, URLClassLoader> LIBRARY_LOADER_FACTORY; // Paper - rewrite reflection in libraries
|
||||
public static java.util.function.Function<List<java.nio.file.Path>, List<java.nio.file.Path>> REMAPPER; // Paper - remap libraries
|
||||
|
||||
public LibraryLoader(@NotNull Logger logger)
|
||||
{
|
||||
public LibraryLoader(@NotNull Logger logger) {
|
||||
this.logger = logger;
|
||||
|
||||
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
|
||||
locator.addService( RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class );
|
||||
locator.addService( TransporterFactory.class, HttpTransporterFactory.class );
|
||||
locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
|
||||
locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
|
||||
|
||||
this.repository = locator.getService( RepositorySystem.class );
|
||||
this.repository = locator.getService(RepositorySystem.class);
|
||||
this.session = MavenRepositorySystemUtils.newSession();
|
||||
|
||||
session.setSystemProperties(System.getProperties()); // Paper - paper plugins, backport system properties fix for transitive dependency parsing, see #10116
|
||||
session.setChecksumPolicy( RepositoryPolicy.CHECKSUM_POLICY_FAIL );
|
||||
session.setLocalRepositoryManager( repository.newLocalRepositoryManager( session, new LocalRepository( "libraries" ) ) );
|
||||
session.setTransferListener( new AbstractTransferListener()
|
||||
{
|
||||
session.setChecksumPolicy(RepositoryPolicy.CHECKSUM_POLICY_FAIL);
|
||||
session.setLocalRepositoryManager(repository.newLocalRepositoryManager(session, new LocalRepository("libraries")));
|
||||
session.setTransferListener(new AbstractTransferListener() {
|
||||
@Override
|
||||
public void transferStarted(@NotNull TransferEvent event) throws TransferCancelledException
|
||||
{
|
||||
logger.log( Level.INFO, "Downloading {0}", event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
|
||||
public void transferStarted(@NotNull TransferEvent event) {
|
||||
logger.log(Level.INFO, "Downloading {0}", event.getResource().getRepositoryUrl() + event.getResource().getResourceName());
|
||||
}
|
||||
} );
|
||||
});
|
||||
|
||||
// SPIGOT-7638: Add system properties,
|
||||
// since JdkVersionProfileActivator needs 'java.version' when a profile has the 'jdk' element
|
||||
// otherwise it will silently fail and not resolves the dependencies in the affected pom.
|
||||
session.setSystemProperties( System.getProperties() );
|
||||
session.setSystemProperties(System.getProperties());
|
||||
session.setReadOnly();
|
||||
|
||||
this.repositories = repository.newResolutionRepositories( session, Arrays.asList( new RemoteRepository.Builder( "central", "default", "https://repo.maven.apache.org/maven2" ).build() ) );
|
||||
this.repositories = repository.newResolutionRepositories(session, Arrays.asList(new RemoteRepository.Builder("central", "default", "https://repo.maven.apache.org/maven2").build()));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassLoader createLoader(@NotNull PluginDescriptionFile desc)
|
||||
{
|
||||
public ClassLoader createLoader(@NotNull PluginDescriptionFile desc) {
|
||||
// Paper start - plugin loader api
|
||||
return this.createLoader(desc, null);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassLoader createLoader(@NotNull PluginDescriptionFile desc, java.util.@Nullable List<java.nio.file.Path> paperLibraryPaths) {
|
||||
if ( desc.getLibraries().isEmpty() && paperLibraryPaths == null )
|
||||
// Paper end - plugin loader api
|
||||
{
|
||||
if (desc.getLibraries().isEmpty() && paperLibraryPaths == null) {
|
||||
// Paper end - plugin loader api
|
||||
return null;
|
||||
}
|
||||
logger.log( Level.INFO, "[{0}] Loading {1} libraries... please wait", new Object[]
|
||||
{
|
||||
java.util.Objects.requireNonNullElseGet(desc.getPrefix(), desc::getName), desc.getLibraries().size() // Paper - use configured log prefix
|
||||
} );
|
||||
logger.log(Level.INFO, "[{0}] Loading {1} libraries... please wait", new Object[]
|
||||
{
|
||||
java.util.Objects.requireNonNullElseGet(desc.getPrefix(), desc::getName), desc.getLibraries().size() // Paper - use configured log prefix
|
||||
});
|
||||
|
||||
List<Dependency> dependencies = new ArrayList<>();
|
||||
for ( String library : desc.getLibraries() )
|
||||
{
|
||||
Artifact artifact = new DefaultArtifact( library );
|
||||
Dependency dependency = new Dependency( artifact, null );
|
||||
for (String library : desc.getLibraries()) {
|
||||
Artifact artifact = new DefaultArtifact(library);
|
||||
Dependency dependency = new Dependency(artifact, null);
|
||||
|
||||
dependencies.add( dependency );
|
||||
dependencies.add(dependency);
|
||||
}
|
||||
|
||||
DependencyResult result;
|
||||
if (!dependencies.isEmpty()) try // Paper - plugin loader api
|
||||
{
|
||||
result = repository.resolveDependencies( session, new DependencyRequest( new CollectRequest( (Dependency) null, dependencies, repositories ), null ) );
|
||||
} catch ( DependencyResolutionException ex )
|
||||
{
|
||||
throw new RuntimeException( "Error resolving libraries", ex );
|
||||
} else result = null; // Paper - plugin loader api
|
||||
if (!dependencies.isEmpty()) {
|
||||
// Paper - plugin loader api
|
||||
try
|
||||
{
|
||||
result = repository.resolveDependencies(session, new DependencyRequest(new CollectRequest((Dependency) null, dependencies, repositories), null));
|
||||
} catch (DependencyResolutionException ex) {
|
||||
throw new RuntimeException("Error resolving libraries", ex);
|
||||
}
|
||||
} else {
|
||||
result = null; // Paper - plugin loader api
|
||||
}
|
||||
|
||||
List<URL> jarFiles = new ArrayList<>();
|
||||
List<java.nio.file.Path> jarPaths = new ArrayList<>(); // Paper - remap libraries
|
||||
// Paper start - plugin loader api
|
||||
if (paperLibraryPaths != null) jarPaths.addAll(paperLibraryPaths);
|
||||
if (result != null) for ( ArtifactResult artifact : result.getArtifactResults() )
|
||||
// Paper end - plugin loader api
|
||||
{
|
||||
// Paper start - remap libraries
|
||||
jarPaths.add(artifact.getArtifact().getFile().toPath());
|
||||
if (result != null) {
|
||||
for (ArtifactResult artifact : result.getArtifactResults()) {
|
||||
// Paper end - plugin loader api
|
||||
// Paper start - remap libraries
|
||||
jarPaths.add(artifact.getArtifact().getFile().toPath());
|
||||
}
|
||||
}
|
||||
if (REMAPPER != null) {
|
||||
jarPaths = REMAPPER.apply(jarPaths);
|
||||
@@ -135,27 +133,25 @@ public class LibraryLoader
|
||||
// Paper end - remap libraries
|
||||
|
||||
URL url;
|
||||
try
|
||||
{
|
||||
try {
|
||||
url = file.toURI().toURL();
|
||||
} catch ( MalformedURLException ex )
|
||||
{
|
||||
throw new AssertionError( ex );
|
||||
} catch (MalformedURLException ex) {
|
||||
throw new AssertionError(ex);
|
||||
}
|
||||
|
||||
jarFiles.add( url );
|
||||
logger.log( Level.INFO, "[{0}] Loaded library {1}", new Object[]
|
||||
{
|
||||
java.util.Objects.requireNonNullElseGet(desc.getPrefix(), desc::getName), file // Paper - use configured log prefix
|
||||
} );
|
||||
jarFiles.add(url);
|
||||
logger.log(Level.INFO, "[{0}] Loaded library {1}", new Object[]
|
||||
{
|
||||
java.util.Objects.requireNonNullElseGet(desc.getPrefix(), desc::getName), file // Paper - use configured log prefix
|
||||
});
|
||||
}
|
||||
|
||||
// Paper start - rewrite reflection in libraries
|
||||
URLClassLoader loader;
|
||||
if (LIBRARY_LOADER_FACTORY == null) {
|
||||
loader = new URLClassLoader( jarFiles.toArray( new URL[ jarFiles.size() ] ), getClass().getClassLoader() );
|
||||
loader = new URLClassLoader(jarFiles.toArray(new URL[jarFiles.size()]), getClass().getClassLoader());
|
||||
} else {
|
||||
loader = LIBRARY_LOADER_FACTORY.apply(jarFiles.toArray( new URL[ jarFiles.size() ] ), getClass().getClassLoader());
|
||||
loader = LIBRARY_LOADER_FACTORY.apply(jarFiles.toArray(new URL[jarFiles.size()]), getClass().getClassLoader());
|
||||
}
|
||||
// Paper end - rewrite reflection in libraries
|
||||
|
||||
|
||||
Reference in New Issue
Block a user