1
0
Fork 0
mirror of https://github.com/PaperMC/Paper.git synced 2025-04-28 06:39:20 +02:00

Fix reflection diff and order wrt commodore diff

This commit is contained in:
Jason Penilla 2024-04-23 13:36:31 -07:00
parent 7cdf804392
commit dd6ce09922
No known key found for this signature in database
GPG key ID: 0E75A301420E48F8
1044 changed files with 93 additions and 48 deletions
main.py
patches
server
unapplied/server
0024-build-replace-use-of-shadow-plugin.patch0025-Timings-v2.patch0026-Add-TickThread.patch0027-Further-improve-server-tick-loop.patch0028-Add-command-line-option-to-load-extra-plugin-jars-no.patch0029-Support-components-in-ItemMeta.patch0030-Configurable-cactus-bamboo-and-reed-growth-height.patch0031-Configurable-baby-zombie-movement-speed.patch0032-Configurable-fishing-time-ranges.patch0033-Allow-nerfed-mobs-to-jump.patch0034-Add-configurable-entity-despawn-distances.patch0035-Allow-for-toggling-of-spawn-chunks.patch0036-Drop-falling-block-and-tnt-entities-at-the-specified.patch0037-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch0038-Implement-Paper-VersionChecker.patch0039-Add-version-history-to-version-command.patch0040-Player-affects-spawning-API.patch0041-Only-refresh-abilities-if-needed.patch0042-fix-ItemMeta-removing-CustomModelData.patch0043-Entity-Origin-API.patch0044-Prevent-block-entity-and-entity-crashes.patch0045-Configurable-top-of-nether-void-damage.patch0046-Check-online-mode-before-converting-and-renaming-pla.patch0047-Add-more-entities-to-activation-range-ignore-list.patch0048-Configurable-end-credits.patch0049-Fix-lag-from-explosions-processing-dead-entities.patch0050-Optimize-explosions.patch0051-Disable-explosion-knockback.patch0052-Disable-thunder.patch0053-Disable-ice-and-snow.patch0054-Configurable-mob-spawner-tick-rate.patch0055-Implement-PlayerLocaleChangeEvent.patch0056-Add-BeaconEffectEvent.patch0057-Configurable-container-update-tick-rate.patch0058-Use-UserCache-for-player-heads.patch0059-Disable-spigot-tick-limiters.patch0060-Add-PlayerInitialSpawnEvent.patch0061-Configurable-Disabling-Cat-Chest-Detection.patch0062-Improve-Player-chat-API-handling.patch0063-All-chunks-are-slime-spawn-chunks-toggle.patch0064-Expose-server-CommandMap.patch0065-Be-a-bit-more-informative-in-maxHealth-exception.patch0066-Player-Tab-List-and-Title-APIs.patch0067-Add-configurable-portal-search-radius.patch0068-Add-velocity-warnings.patch0069-Configurable-inter-world-teleportation-safety.patch0070-Add-exception-reporting-event.patch0071-Disable-Scoreboards-for-non-players-by-default.patch0072-Add-methods-for-working-with-arrows-stuck-in-living-.patch0073-Chunk-Save-Reattempt.patch0074-Complete-resource-pack-API.patch0075-Default-loading-permissions.yml-before-plugins.patch0076-Allow-Reloading-of-Custom-Permissions.patch0077-Remove-Metadata-on-reload.patch0078-Handle-Item-Meta-Inconsistencies.patch0079-Configurable-Non-Player-Arrow-Despawn-Rate.patch0080-Add-World-Util-Methods.patch0081-Custom-replacement-for-eaten-items.patch0082-handle-NaN-health-absorb-values-and-repair-bad-data.patch0083-Use-a-Shared-Random-for-Entities.patch0084-Configurable-spawn-chances-for-skeleton-horses.patch0085-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch0086-Entity-AddTo-RemoveFrom-World-Events.patch0087-Configurable-Chunk-Inhabited-Time.patch0088-EntityPathfindEvent.patch0089-Sanitise-RegionFileCache-and-make-configurable.patch0090-Do-not-load-chunks-for-Pathfinding.patch0091-Add-PlayerUseUnknownEntityEvent.patch0092-Configurable-random-tick-rates-for-blocks.patch0093-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch0094-Optimize-DataBits.patch0095-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch0096-Configurable-Player-Collision.patch0097-Add-handshake-event-to-allow-plugins-to-handle-clien.patch0098-Configurable-RCON-IP-address.patch0099-EntityRegainHealthEvent-isFastRegen-API.patch0100-Add-ability-to-configure-frosted_ice-properties.patch0101-remove-null-possibility-for-getServer-singleton.patch0102-Don-t-save-empty-scoreboard-teams-to-scoreboard.dat.patch0103-LootTable-API-and-replenishable-lootables.patch0104-System-property-for-disabling-watchdoge.patch0105-Async-GameProfileCache-saving.patch0106-Optional-TNT-doesn-t-move-in-water.patch0107-Faster-redstone-torch-rapid-clock-removal.patch0108-Add-server-name-parameter.patch0109-Fix-global-sound-handling.patch0110-Avoid-blocking-on-Network-Manager-creation.patch0111-Don-t-lookup-game-profiles-that-have-no-UUID-and-no-.patch0112-Add-setting-for-proxy-online-mode-status.patch0113-Optimise-BlockState-s-hashCode-equals.patch0114-Configurable-packet-in-spam-threshold.patch0115-Configurable-flying-kick-messages.patch0116-Add-EntityZapEvent.patch0117-Filter-bad-block-entity-nbt-data-from-falling-blocks.patch0118-Cache-user-authenticator-threads.patch0119-Allow-Reloading-of-Command-Aliases.patch

View file

@ -25,7 +25,7 @@ for file in files:
description = match.group(2)
# Calculate the new number
new_number = current_number + 4
new_number = current_number + 1
# Construct the new file name
new_file_name = f'{str(new_number).zfill(4)}-{description}'

View file

@ -8,7 +8,7 @@ our own relocation. Also lets us rewrite NMS calls for when we're
debugging in an IDE pre-relocate.
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4e3e948f2 100644
index 0ecd298fead1a75bfc9ef535b550f5178fc3d3c8..072153a601eb257bd36bba24f356d4eb085e3636 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
@@ -7,6 +7,7 @@ import java.io.InputStream;
@ -19,7 +19,7 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -15,6 +16,7 @@ import java.util.jar.JarEntry;
@@ -16,6 +17,7 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
@ -27,17 +27,7 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
@@ -23,7 +25,9 @@ import org.bukkit.plugin.AuthorNagException;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Handle;
+import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
@@ -51,6 +55,40 @@ public class Commodore {
@@ -62,6 +64,40 @@ public class Commodore {
"org/spigotmc/event/entity/EntityDismountEvent", "org/bukkit/event/entity/EntityDismountEvent"
);
@ -75,31 +65,13 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
+ }
+ // Paper end - Plugin rewrites
+
public static void main(String[] args) {
OptionParser parser = new OptionParser();
OptionSpec<File> inputFlag = parser.acceptsAll(Arrays.asList("i", "input")).withRequiredArg().ofType(File.class).required();
@@ -118,12 +156,67 @@ public class Commodore {
ClassWriter cw = new ClassWriter(cr, 0);
private static final Map<String, RerouteMethodData> FIELD_RENAME_METHOD_REROUTE = RerouteBuilder.buildFromClass(FieldRename.class);
cr.accept(new ClassRemapper(new ClassVisitor(Opcodes.ASM9, cw) {
+
+ // Paper start - Rewrite plugins
+ @Override
+ public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
+ {
+ desc = getOriginalOrRewrite(desc);
+ if ( signature != null ) {
+ signature = getOriginalOrRewrite(signature);
+ }
+
+ return super.visitField( access, name, desc, signature, value) ;
+ }
+ // Paper end
+
public static void main(String[] args) {
@@ -190,9 +226,49 @@ public class Commodore {
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
return new MethodVisitor(this.api, super.visitMethod(access, name, desc, signature, exceptions)) {
+ // Paper start - Plugin rewrites
+ @Override
+ public void visitTypeInsn(int opcode, String type) {
@ -133,8 +105,8 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
+
+ super.visitLocalVariable(name, descriptor, signature, start, end, index);
+ }
+ // Paper end
+
+ // Paper end - Plugin rewrites
@Override
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
+ // Paper start - Rewrite plugins
@ -143,21 +115,24 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
+ desc = getOriginalOrRewrite(desc);
+ }
+ // Paper end
if (owner.equals("org/bukkit/block/Biome")) {
switch (name) {
case "NETHER":
@@ -278,6 +371,10 @@ public class Commodore {
name = FieldRename.rename(pluginVersion, owner, name);
if (modern) {
@@ -296,6 +372,13 @@ public class Commodore {
return;
}
// Paper start - Rewrite plugins
+ // Paper start - Rewrite plugins
+ owner = getOriginalOrRewrite(owner) ;
+ if (desc != null) {
+ desc = getOriginalOrRewrite(desc);
+ }
if ((owner.equals("org/bukkit/OfflinePlayer") || owner.equals("org/bukkit/entity/Player")) && name.equals("getPlayerProfile") && desc.equals("()Lorg/bukkit/profile/PlayerProfile;")) {
super.visitMethodInsn(opcode, owner, name, "()Lcom/destroystokyo/paper/profile/PlayerProfile;", itf);
return;
@@ -374,6 +471,13 @@ public class Commodore {
+ // Paper end - Rewrite plugins
+
if (modern) {
if (owner.equals("org/bukkit/Material") || (instantiatedMethodType != null && instantiatedMethodType.getDescriptor().startsWith("(Lorg/bukkit/Material;)"))) {
switch (name) {
@@ -399,6 +482,13 @@ public class Commodore {
@Override
public void visitLdcInsn(Object value) {
@ -171,7 +146,7 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
if (value instanceof String && ((String) value).equals("com.mysql.jdbc.Driver")) {
super.visitLdcInsn("com.mysql.cj.jdbc.Driver");
return;
@@ -384,6 +488,14 @@ public class Commodore {
@@ -409,6 +499,14 @@ public class Commodore {
@Override
public void visitInvokeDynamicInsn(String name, String descriptor, Handle bootstrapMethodHandle, Object... bootstrapMethodArguments) {
@ -186,7 +161,7 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
if (bootstrapMethodHandle.getOwner().equals("java/lang/invoke/LambdaMetafactory")
&& bootstrapMethodHandle.getName().equals("metafactory") && bootstrapMethodArguments.length == 3) {
Type samMethodType = (Type) bootstrapMethodArguments[0];
@@ -400,7 +512,7 @@ public class Commodore {
@@ -425,7 +523,7 @@ public class Commodore {
methodArgs.add(new Handle(newOpcode, newOwner, newName, newDescription, newItf));
methodArgs.add(newInstantiated);
@ -195,3 +170,16 @@ index 6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97..31714ce05b1023b82e96b36ba52254b4
}, implMethod.getTag(), implMethod.getOwner(), implMethod.getName(), implMethod.getDesc(), implMethod.isInterface(), samMethodType, instantiatedMethodType);
return;
}
@@ -476,6 +574,12 @@ public class Commodore {
@Override
public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) {
+ // Paper start - Rewrite plugins
+ descriptor = getOriginalOrRewrite(descriptor);
+ if ( signature != null ) {
+ signature = getOriginalOrRewrite(signature);
+ }
+ // Paper end
return new FieldVisitor(this.api, super.visitField(access, name, descriptor, signature, value)) {
@Override
public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) {

View file

@ -657,3 +657,60 @@ index 457a963ee6ebd3cf5c3831f6660e3850335af49f..61744d8fde3ba98585cf261fc09f0acc
boolean runNext(Level world);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
index 072153a601eb257bd36bba24f356d4eb085e3636..432ad62a82573901673d654b06e87b62369bea7a 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java
@@ -65,36 +65,20 @@ public class Commodore {
);
// Paper start - Plugin rewrites
- private static final Map<String, String> SEARCH_AND_REMOVE = initReplacementsMap();
- private static Map<String, String> initReplacementsMap() {
- Map<String, String> getAndRemove = new HashMap<>();
- // Be wary of maven shade's relocations
-
- final java.util.jar.Manifest manifest = io.papermc.paper.util.JarManifests.manifest(Commodore.class);
- if (Boolean.getBoolean( "debug.rewriteForIde") && manifest != null)
- {
- // unversion incoming calls for pre-relocate debug work
- final String NMS_REVISION_PACKAGE = "v" + manifest.getMainAttributes().getValue("CraftBukkit-Package-Version") + "/";
-
- getAndRemove.put("org/bukkit/".concat("craftbukkit/" + NMS_REVISION_PACKAGE), NMS_REVISION_PACKAGE);
- }
-
- return getAndRemove;
- }
+ private static final String CB_PACKAGE_PREFIX = "org/bukkit/".concat("craftbukkit/");
+ private static final String LEGACY_CB_PACKAGE_PREFIX = CB_PACKAGE_PREFIX + io.papermc.paper.util.MappingEnvironment.LEGACY_CB_VERSION + "/";
@Nonnull
private static String getOriginalOrRewrite(@Nonnull String original)
{
- String rewrite = null;
- for ( Map.Entry<String, String> entry : SEARCH_AND_REMOVE.entrySet() )
- {
- if ( original.contains( entry.getKey() ) )
- {
- rewrite = original.replace( entry.getValue(), "" );
+ // Relocation is applied in reobf, and when mappings are present they handle the relocation
+ if (!io.papermc.paper.util.MappingEnvironment.reobf() && !io.papermc.paper.util.MappingEnvironment.hasMappings()) {
+ if (original.contains(LEGACY_CB_PACKAGE_PREFIX)) {
+ original = original.replace(LEGACY_CB_PACKAGE_PREFIX, CB_PACKAGE_PREFIX);
}
}
- return rewrite != null ? rewrite : original;
+ return original;
}
// Paper end - Plugin rewrites
@@ -167,7 +151,7 @@ public class Commodore {
ClassReader cr = new ClassReader(b);
ClassWriter cw = new ClassWriter(cr, 0);
- cr.accept(new ClassRemapper(new ClassVisitor(Opcodes.ASM9, cw) {
+ cr.accept(new ClassRemapper(new ClassVisitor(Opcodes.ASM9, io.papermc.paper.pluginremap.reflect.ReflectionRemapper.visitor(cw)) { // Paper
final Set<RerouteMethodData> rerouteMethodData = new HashSet<>();
String className;
boolean isInterface;

Some files were not shown because too many files have changed in this diff Show more