Update paperweight & build config for Spigot changes

This commit is contained in:
Kyle Wood 2021-06-11 06:23:18 -05:00
parent 7dd61c6238
commit a637254968
12 changed files with 44 additions and 5607 deletions

7
.giattributes Normal file
View file

@ -0,0 +1,7 @@
* text=auto
*.sh text eol=lf
gradlew text eol=lf
*.bat text eol=crlf
*.jar binary

3
.gitignore vendored
View file

@ -1,3 +1,6 @@
.gradle/
build/
# Eclipse stuff
.classpath
.project

View file

@ -3,22 +3,20 @@
# Hopper.getLevel()
# Entity.getCommandSenderWorld()
# to getWorld(), which confuses our ability to map this method properly. This patch disambiguates it
net/minecraft/world/level/block/entity/IHopper v ()Lnet/minecraft/world/level/World; getLevel
net/minecraft/world/entity/vehicle/EntityMinecartHopper v ()Lnet/minecraft/world/level/World; getLevel
net/minecraft/world/item/trading/IMerchant eV ()Lnet/minecraft/world/level/World; getLevel
net/minecraft/world/entity/npc/EntityVillagerAbstract eV ()Lnet/minecraft/world/level/World; getLevel
net/minecraft/world/item/trading/IMerchant fD ()Lnet/minecraft/world/level/World; getLevel
net/minecraft/world/entity/npc/EntityVillagerAbstract fD ()Lnet/minecraft/world/level/World; getLevel
# CraftBukkit mappings sometimes have mappings for child classes and not parent classes
# We handle this fine for deobf but this breaks reobf. These Patches fix those cases
# BossBattle -> BossBattleServer
net/minecraft/world/BossBattle a (F)V setProgress
net/minecraft/world/BossBattle c (Z)Lnet/minecraft/world/BossBattle; setCreateFog
net/minecraft/world/BossBattle a (Z)Lnet/minecraft/world/BossBattle; setDarkenSky
net/minecraft/world/BossBattle b (Z)Lnet/minecraft/world/BossBattle; setPlayMusic
# net/minecraft/world/BossBattle a (F)V setProgress
# net/minecraft/world/BossBattle c (Z)Lnet/minecraft/world/BossBattle; setCreateFog
# net/minecraft/world/BossBattle a (Z)Lnet/minecraft/world/BossBattle; setDarkenSky
# net/minecraft/world/BossBattle b (Z)Lnet/minecraft/world/BossBattle; setPlayMusic
# IChunkProvider -> ChunkProviderServer
net/minecraft/world/level/chunk/IChunkProvider b (II)Z isLoaded
# net/minecraft/world/level/chunk/IChunkProvider b (II)Z isLoaded
# BehaviorWorkComposter -> BehaviorWork
net/minecraft/world/entity/ai/behavior/BehaviorWorkComposter a (Lnet/minecraft/server/level/WorldServer;Lnet/minecraft/world/entity/npc/EntityVillager;)V doWork
# net/minecraft/world/entity/ai/behavior/BehaviorWorkComposter a (Lnet/minecraft/server/level/WorldServer;Lnet/minecraft/world/entity/npc/EntityVillager;)V doWork

View file

@ -1,17 +0,0 @@
--- a/net/minecraft/world/entity/ai/behavior/BehaviorWorkComposter.patch
+++ b/net/minecraft/world/entity/ai/behavior/BehaviorWorkComposter.patch
@@ -0,0 +0,0 @@
--- a/net/minecraft/world/entity/ai/behavior/BehaviorWorkComposter.java
+++ b/net/minecraft/world/entity/ai/behavior/BehaviorWorkComposter.java
-@@ -0,0 +0,0 @@
- public BehaviorWorkComposter() {}
-
- @Override
-- protected void a(WorldServer worldserver, EntityVillager entityvillager) {
-+ protected void doWork(WorldServer worldserver, EntityVillager entityvillager) { // PAIL
- Optional<GlobalPos> optional = entityvillager.getBehaviorController().getMemory(MemoryModuleType.JOB_SITE);
-
- if (optional.isPresent()) {
@@ -0,0 +0,0 @@
BlockPosition blockposition = globalpos.getBlockPosition();

View file

@ -1,40 +0,0 @@
--- a/net/minecraft/server/level/ChunkProviderServer.patch
+++ b/net/minecraft/server/level/ChunkProviderServer.patch
@@ -0,0 +0,0 @@
+ return playerchunk == null || playerchunk.oldTicketLevel > i; // CraftBukkit using oldTicketLevel for isLoaded checks
}
- public boolean isLoaded(int i, int j) {
-@@ -0,0 +0,0 @@
+ @Override
+@@ -0,0 +0,0 @@
public boolean a(Entity entity) {
long i = ChunkCoordIntPair.pair(MathHelper.floor(entity.locX()) >> 4, MathHelper.floor(entity.locZ()) >> 4);
@@ -0,0 +0,0 @@
}
private boolean a(long i, Function<PlayerChunk, CompletableFuture<Either<Chunk, PlayerChunk.Failure>>> function) {
-@@ -0,0 +0,0 @@
+@@ -0,0 +0,0 @@
@Override
public void close() throws IOException {
@@ -0,0 +0,0 @@
public void tick(BooleanSupplier booleansupplier) {
this.world.getMethodProfiler().enter("purge");
this.chunkMapDistance.purgeTickets();
-@@ -0,0 +0,0 @@
+@@ -0,0 +0,0 @@
this.lastTickTime = i;
WorldData worlddata = this.world.getWorldData();
boolean flag = this.world.isDebugWorld();
@@ -0,0 +0,0 @@
this.world.getMethodProfiler().enter("naturalSpawnCount");
int l = this.chunkMapDistance.b();
-@@ -0,0 +0,0 @@
+@@ -0,0 +0,0 @@
@Override
protected boolean executeNext() {

View file

@ -10,41 +10,41 @@ c net/minecraft/world/level/World net/minecraft/world/level/Level
# CraftBukkit adds the server field, clashes with a Mojang field
c net/minecraft/server/network/PlayerConnection net/minecraft/server/network/ServerGamePacketListenerImpl
f Lorg/bukkit/craftbukkit/CraftServer; server craftServer
m ()Lorg/bukkit/craftbukkit/entity/CraftPlayer; getPlayer getCraftPlayer
# CraftBukkit adds the player field, clashes with a Mojang field
c net/minecraft/world/inventory/ContainerWorkbench net/minecraft/world/inventory/CraftingMenu
f Lnet/minecraft/world/entity/player/PlayerInventory; player playerInventory
#c net/minecraft/world/inventory/ContainerWorkbench net/minecraft/world/inventory/CraftingMenu
# f Lnet/minecraft/world/entity/player/PlayerInventory; player playerInventory
# CraftBukkit adds the getType() method, clashes with a Mojang method
c net/minecraft/world/entity/EntityAreaEffectCloud net/minecraft/world/entity/AreaEffectCloud
m ()Ljava/lang/String; getType getTypeCb
m ()Ljava/lang/String; getType getPotionType
# CraftBukkit adds the getType() method, clashes with a Mojang method
c net/minecraft/world/entity/projectile/EntityTippedArrow net/minecraft/world/entity/projectile/Arrow
m ()Ljava/lang/String; getType getTypeCb
m ()Ljava/lang/String; getType getPotionType
# CraftBukkit adds the getLevel() method, clashes with original method
c net/minecraft/world/level/block/entity/TileEntityBeacon net/minecraft/world/level/block/entity/BeaconBlockEntity
m ()I getLevel getLevelCb
#c net/minecraft/world/level/block/entity/TileEntityBeacon net/minecraft/world/level/block/entity/BeaconBlockEntity
# m ()I getLevel getLevelCb
# CraftBukkit adds the getLootTable() method, clashes with original method
c net/minecraft/world/entity/EntityInsentient net/minecraft/world/entity/Mob
m ()Lnet/minecraft/resources/MinecraftKey; getLootTable getLootTableCb
#c net/minecraft/world/entity/EntityInsentient net/minecraft/world/entity/Mob
# m ()Lnet/minecraft/resources/MinecraftKey; getLootTable getLootTableCb
# CraftBukkit adds the canCollideWith() method, clashes with original method
c net/minecraft/world/entity/Entity net/minecraft/world/entity/Entity
m (Lnet/minecraft/world/entity/Entity;)Z canCollideWith canCollideWithCb
#c net/minecraft/world/entity/Entity net/minecraft/world/entity/Entity
# m (Lnet/minecraft/world/entity/Entity;)Z canCollideWith canCollideWithCb
# CraftBukkit adds a new `a` method which allows passing the Entity parameter
# It uses `a` to match the original method (with just 1 param), so this patch makes them match
c net/minecraft/server/level/WorldServer net/minecraft/server/level/ServerLevel
m (Lnet/minecraft/server/level/WorldServer;Lnet/minecraft/world/entity/Entity;)V a makeObsidianPlatform
#c net/minecraft/server/level/WorldServer net/minecraft/server/level/ServerLevel
# m (Lnet/minecraft/server/level/WorldServer;Lnet/minecraft/world/entity/Entity;)V a makeObsidianPlatform
# CraftBukkit adds `getMinecraftWorld()` to `GeneratorAccess`, which matches `WorldAccess.getMinecraftWorld()`
# But that method in `WorldAccess` is called `getLevel()` in Mojang mappings
c net/minecraft/world/level/GeneratorAccess net/minecraft/world/level/LevelAccessor
m ()Lnet/minecraft/server/level/WorldServer; getMinecraftWorld getLevel
#c net/minecraft/world/level/GeneratorAccess net/minecraft/world/level/LevelAccessor
# m ()Lnet/minecraft/server/level/WorldServer; getMinecraftWorld getLevel
# SpecialSource2 automatically maps methods to the name of synthetic methods that point to it in an attempt to
# normalize method names with what is expected by the super class. This is _extremely_ stupid and flawed however
@ -68,9 +68,9 @@ c net/minecraft/world/level/GeneratorAccess net/minecraft/world/level/LevelAcces
# This is allowed because the synthetic method for serialize() has a different descriptor, using Object as the second
# parameter. This breaks when SpecialSource2 does it's "magic" of course. This patch manually fixes this case by adding
# both correct mappings
c net/minecraft/world/level/storage/loot/entries/LootEntryAbstract$Serializer net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer$Serializer
m (Lcom/google/gson/JsonObject;Lnet/minecraft/world/level/storage/loot/entries/LootEntryAbstract;Lcom/google/gson/JsonSerializationContext;)V a serialize
p 0 json
p 1 entry
p 2 context
m (Lcom/google/gson/JsonObject;Lnet/minecraft/world/level/storage/loot/entries/LootEntryAbstract;Lcom/google/gson/JsonSerializationContext;)V serializeType serializeCustom
#c net/minecraft/world/level/storage/loot/entries/LootEntryAbstract$Serializer net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer$Serializer
# m (Lcom/google/gson/JsonObject;Lnet/minecraft/world/level/storage/loot/entries/LootEntryAbstract;Lcom/google/gson/JsonSerializationContext;)V a serialize
# p 0 json
# p 1 entry
# p 2 context
# m (Lcom/google/gson/JsonObject;Lnet/minecraft/world/level/storage/loot/entries/LootEntryAbstract;Lcom/google/gson/JsonSerializationContext;)V serializeType serializeCustom

View file

@ -1,7 +1,7 @@
plugins {
java
id("com.github.johnrengelman.shadow") version "7.0.0" apply false
id("io.papermc.paperweight") version "1.0.0-SNAPSHOT"
id("io.papermc.paperweight.core") version "1.0.0-SNAPSHOT"
}
group = "com.destroystokyo.paper"
@ -15,7 +15,7 @@ allprojects {
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(11))
languageVersion.set(JavaLanguageVersion.of(16))
}
}
}
@ -62,7 +62,7 @@ repositories {
}
dependencies {
paramMappings("org.quiltmc:yarn:1.16.5+build.6:mergedv2")
paramMappings("org.quiltmc:yarn:1.17+build.2:mergedv2")
remapper("org.quiltmc:tiny-remapper:0.3.2:fat@jar")
decompiler("net.minecraftforge:forgeflower:1.5.498.5@jar")
paperclip("io.papermc:paperclip:2.0.0-SNAPSHOT@jar")
@ -77,7 +77,5 @@ paperweight {
mappingsPatch.set(file("build-data/mappings-patch.tiny"))
additionalSpigotMemberMappings.set(file("build-data/additional-spigot-member-mappings.csrg"))
craftBukkitPatchPatchesDir.set(file("build-data/craftbukkit-patch-patches"))
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,3 @@
mcVersion = 1.16
mcVersion = 1.17
projectVersion = 1.17-R0.1-SNAPSHOT
packageVersion = 1_17_R1

258
paper
View file

@ -1,258 +0,0 @@
#!/usr/bin/env bash
# resolve shell-specifics
case "$(echo "$SHELL" | sed -E 's|/usr(/local)?||g')" in
"/bin/zsh")
RCPATH="$HOME/.zshrc"
SOURCE="${BASH_SOURCE[0]:-${(%):-%N}}"
;;
*)
RCPATH="$HOME/.bashrc"
if [[ -f "$HOME/.bash_aliases" ]]; then
RCPATH="$HOME/.bash_aliases"
fi
SOURCE="${BASH_SOURCE[0]}"
;;
esac
# get base dir regardless of execution location
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
SOURCE=$([[ "$SOURCE" = /* ]] && echo "$SOURCE" || echo "$PWD/${SOURCE#./}")
basedir=$(dirname "$SOURCE")
gitcmd="git -c commit.gpgsign=false"
source "$basedir/scripts/functions.sh"
"$basedir"/scripts/requireDeps.sh || exit 1
failed=0
case "$1" in
"rb" | "rbp" | "rebuild")
(
set -e
cd "$basedir"
scripts/rebuildPatches.sh "$basedir" $2 || exit 1
) || failed=1
;;
"rbf" | "rbfull")
(
set -e
cd "$basedir"
scripts/rebuildPatches.sh "$basedir" "nofilter" || exit 1
) || failed=1
;;
"p" | "patch")
(
set -e
cd "$basedir"
scripts/build.sh "$basedir" || exit 1
) || failed=1
;;
"j" | "jar")
(
set -e
cd "$basedir"
scripts/build.sh "$basedir" "--jar" || exit 1
) || failed=1
;;
"b" | "build")
(
set -e
cd "$basedir"
scripts/build.sh "$basedir" || exit 1
(cd Paper-API ; mvn clean install) || exit 1
(cd Paper-MojangAPI ; mvn clean install) || exit 1
(cd Paper-Server ; mvn clean package) || exit 1
echo "Paper jar successfully built"
ls -la Paper-Server/target/paper*.jar
) || failed=1
;;
"i" | "install")
(
set -e
cd "$basedir"
scripts/build.sh "$basedir" || exit 1
mvn clean install || exit 1
echo "Paper jar successfully built and installed to local repo"
) || failed=1
;;
"pc" | "paperclip")
(
set -e
cd "$basedir"
scripts/paperclip.sh "$basedir" || exit 1
) || failed=1
;;
"make")
(
if [[ "$2" = "bacon" ]] ; then
set -e
cd "$basedir"
scripts/build.sh "$basedir" "--jar"
fi
)
;;
"m" | "mcdev")
(
set -e
cd "$basedir"
scripts/makemcdevsrc.sh "$basedir"
)
;;
"t" | "test" | "testserver")
(
cd "$basedir"
shift
scripts/testServer.sh "$basedir" "$@"
)
;;
"td" | "testdir")
cd "${PAPER_TEST_DIR:-$basedir/work/test-server}"
;;
"u" | "up" | "upstream")
(
cd "$basedir"
scripts/upstreamMerge.sh "$basedir" "$2"
)
;;
"cu" | "commitup" | "commitupstream" | "upc" | "upcommit" | "upstreamcommit")
(
cd "$basedir"
shift
scripts/upstreamCommit.sh "$@"
)
;;
"r" | "root")
cd "$basedir"
;;
"a" | "api")
cd "$basedir/Paper-API"
;;
"s" | "server")
cd "$basedir/Paper-Server"
;;
"c" | "clean")
rm -rf Paper-API
rm -rf Paper-Server
rm -rf work
echo "Cleaned build files"
;;
"con" | "continue")
if [ -d ".git/rebase-apply" ]; then
git -c commit.gpgsign=false am --continue
elif [ -d ".git/rebase-merge" ]; then
git -c commit.gpgsign=false rebase --continue
fi
;;
"e" | "edit")
case "$2" in
"s" | "server")
mkdir -p "$basedir/work/Temp"
echo "$basedir/Paper-Server" > "$basedir/work/Temp/PAPER_LAST_EDIT"
cd "$basedir/Paper-Server"
(
set -e
paperstash
$gitcmd rebase -i upstream/upstream
paperunstash
)
;;
"a" | "api")
mkdir -p "$basedir/work/Temp"
echo "$basedir/Paper-API" > "$basedir/work/Temp/PAPER_LAST_EDIT"
cd "$basedir/Paper-API"
(
set -e
paperstash
$gitcmd rebase -i upstream/upstream
paperunstash
)
;;
"c" | "continue")
cd "$( < "$basedir/work/Temp/PAPER_LAST_EDIT")"
rm -f "$basedir/work/Temp/PAPER_LAST_EDIT"
(
set -e
$gitcmd add .
$gitcmd commit --amend
$gitcmd rebase --continue
cd "$basedir"
scripts/rebuildPatches.sh "$basedir"
)
;;
*)
echo "You must edit either the api or server."
;;
esac
;;
"setup")
if [[ -f "$RCPATH" ]] ; then
NAME="paper"
if [[ ! -z "${2+x}" ]] ; then
NAME="$2"
fi
(grep "alias $NAME=" "$RCPATH" > /dev/null) && (sed -i "s|alias $NAME=.*|alias $NAME='. $SOURCE'|g" "$RCPATH") || (echo "alias $NAME='. $SOURCE'" >> "$RCPATH")
alias "$NAME=. $SOURCE"
echo "You can now just type '$NAME' at any time to access the paper tool."
else
echo "We were unable to setup the paper build tool alias: $RCPATH is missing"
fi
;;
*)
echo "PaperMC build tool command. This provides a variety of commands to build and manage the PaperMC build"
echo "environment. For all of the functionality of this command to be available, you must first run the"
echo "'setup' command. View below for details. For essential building and patching, you do not need to do the setup."
echo ""
echo " Normal commands:"
echo " * rb, rebuild | Rebuild patches, can be called from anywhere."
echo " * p, patch | Apply all patches to the project without building it. Can be run from anywhere."
echo " * j, jar | Apply all patches and build the project, paperclip.jar will be output. Can be run from anywhere."
echo " * i, install | Build and install paper into the local repo. Can be run from anywhere."
echo " * m, mcdev | Setup decompiled sources for non-modified NMS files to be imported into an IDE. Can be run from anywhere."
echo " * u, up, upstream | Updates the submodules used by Paper to their latest upstream versions."
echo " * upc, upstreamcommit | Creates the correctly-formatted upstream commit after updating upstream."
echo " * c, clean | Removes all generated files, Paper-API, Paper-Server, and work."
echo " * t, testserver | Run the test server with the set of plugins Paper uses as a basis for server tests."
echo " * con, continue | Shortcut command for running git am --continue, or git rebase --continue."
echo ""
echo " These commands require the setup command before use:"
echo " * r, root | Change directory to the root of the project."
echo " * a. api | Move to the Paper-API directory."
echo " * s, server | Move to the Paper-Server directory."
echo " * td, testdirectory | Move to the test-server directory."
echo " * e, edit | Use to edit a specific patch, give it the argument \"server\" or \"api\""
echo " | respectively to edit the correct project. Use the argument \"continue\" after"
echo " | the changes have been made to finish and rebuild patches. Can be called from anywhere."
echo ""
echo " * setup | Add an alias to $RCPATH to allow full functionality of this script. Run as:"
echo " | . ./paper setup"
echo " | After you run this command you'll be able to just run 'paper' from anywhere."
echo " | The default name for the resulting alias is 'paper', you can give an argument to override"
echo " | this default, such as:"
echo " | . ./paper setup example"
echo " | Which will allow you to run 'example' instead."
;;
esac
unset RCPATH
unset SOURCE
unset basedir
unset -f color
unset -f colorend
unset -f paperstash
unset -f paperunstash
if [[ "$failed" == "1" ]]; then
unset failed
false
else
unset failed
true
fi

55
pom.xml
View file

@ -1,55 +0,0 @@
<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>
<!-- Avoid making changes to this file, it has to be deployed manually -->
<groupId>com.destroystokyo.paper</groupId>
<artifactId>paper-parent</artifactId>
<version>dev-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Paper-Parent</name>
<description>Parent project for all Paper modules.</description>
<url>https://github.com/PaperMC/Paper</url>
<modules>
<module>Paper-API</module>
<module>Paper-MojangAPI</module>
<module>Paper-Server</module>
</modules>
<build>
<defaultGoal>clean install</defaultGoal>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>md_5-releases</id>
<url>https://repo.md-5.net/content/repositories/releases/</url>
</repository>
<repository>
<id>aikar</id>
<url>https://repo.aikar.co/content/groups/aikar/</url>
</repository>
<repository>
<id>destroystokyo-repo</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>papermc-releases</id>
<url>https://papermc.io/repo/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>papermc-snapshots</id>
<url>https://papermc.io/repo/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>

View file

@ -2,10 +2,9 @@ pluginManagement {
repositories {
gradlePluginPortal()
maven("https://wav.jfrog.io/artifactory/repo/")
mavenLocal()
}
}
rootProject.name = "Paper"
include("Paper-API", "Paper-Server", "Paper-MojangAPI")
include("Paper-API", "Paper-Server")