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:
Nassim Jahnke
2025-04-12 17:26:44 +02:00
parent 0767902699
commit f00727c57e
2092 changed files with 50551 additions and 48729 deletions
@@ -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