mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-19 15:09:25 +00:00
Update some Leaf server patches
This commit is contained in:
23
.github/workflows/build-1201.yml
vendored
23
.github/workflows/build-1201.yml
vendored
@@ -1,5 +1,9 @@
|
||||
name: Build Leaf 1.20.1
|
||||
on: [ push, pull_request ]
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "ver/1.20.1" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -26,8 +30,23 @@ jobs:
|
||||
- name: Rename Paperclip Jar
|
||||
run: mv build/libs/Leaf-paperclip-1.20.1-R0.1-SNAPSHOT-reobf.jar ./leaf-1.20.1.jar
|
||||
|
||||
# - name: Publish API
|
||||
# if: github.event_name != 'pull_request'
|
||||
# run: |
|
||||
# ./gradlew :leaf-api:publish
|
||||
# ./gradlew publishDevBundlePublicationToLeafRepository -PpublishDevBundle=true
|
||||
# env:
|
||||
# ORG_GRADLE_PROJECT_leafUsername: ${{ secrets.REPO_USER }}
|
||||
# ORG_GRADLE_PROJECT_leafPassword: ${{ secrets.REPO_PASSWORD }}
|
||||
|
||||
- name: Upload Leaf
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: Leaf 1.20.1
|
||||
path: ./leaf-1.20.1.jar
|
||||
|
||||
- name: Release Leaf
|
||||
if: github.ref_name == 'ver/1.20.1'
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: marvinpinto/action-automatic-releases@master
|
||||
with:
|
||||
title: "Leaf 1.20.1"
|
||||
|
||||
@@ -4,6 +4,7 @@ plugins {
|
||||
java
|
||||
`maven-publish`
|
||||
id("com.github.johnrengelman.shadow") version "8.1.1" apply false
|
||||
id("io.github.goooler.shadow") version "8.1.7" apply false
|
||||
id("io.papermc.paperweight.patcher") version "1.5.9-SNAPSHOT"
|
||||
}
|
||||
|
||||
|
||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-rc-1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
20
gradlew.bat
vendored
20
gradlew.bat
vendored
@@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
@@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ index 9afc81ccb237c3655d64cdbe8a0db9a4d7791043..1679f0a3d095a7b758b468c77b6d3a4c
|
||||
private String descriptionId;
|
||||
@Nullable
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
index 035a0a8620fc46dbf026c65ccf2542d9f49e22b0..979b76d58d05c9d83dfae45d3052eea9431dfc65 100644
|
||||
index 2ea1916ef44d1cd5920351c0c6566d4714653488..8bd04d423a444c9b66a1ff787906eb7879721459 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -224,10 +224,10 @@ public abstract class Mob extends LivingEntity implements Targeting {
|
||||
@@ -260,7 +260,7 @@ index 9ca38f97f5d0d533187cdcd549b1accebc93bc95..55d5aad6ee98bc61dac415b106d0b6d1
|
||||
super.customServerAiStep();
|
||||
if ((this.tickCount + this.getId()) % 120 == 0) {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
||||
index ae3628efe7628427c53bb7d0f7fc6e457a511b94..67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce 100644
|
||||
index ae3628efe7628427c53bb7d0f7fc6e457a511b94..e0fd0b00057bd715d80d1c223027618eb9c385e4 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
||||
@@ -143,6 +143,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -280,15 +280,14 @@ index ae3628efe7628427c53bb7d0f7fc6e457a511b94..67d3ce0dc480aa457e4a9ef5e08ae7c6
|
||||
@Override
|
||||
@Deprecated // Paper
|
||||
protected void customServerAiStep() {
|
||||
@@ -254,7 +257,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -254,7 +257,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
}
|
||||
protected void customServerAiStep(final boolean inactive) {
|
||||
// Paper end
|
||||
- if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper
|
||||
+ // Pufferfish start
|
||||
+ if (!inactive) {
|
||||
+ if (this.behaviorTick++ % this.activatedPriority == 0)
|
||||
+ this.getBrain().tick((ServerLevel) this.level(), this); // Paper
|
||||
+ if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) {
|
||||
+ this.getBrain().tick((ServerLevel) this.level(), this); // Paper
|
||||
+ }
|
||||
+ // Pufferfish end
|
||||
if (this.assignProfessionWhenSpawned) {
|
||||
@@ -357,7 +356,7 @@ index 5d161351e7517acf57e98203bab8c9f9ab9d4005..47c7b75b721bb2210eded56a7590612f
|
||||
|
||||
private static void network() {
|
||||
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
index 392c57d0365cc4371f58637ebac11e2b7492bf97..de4ea65a2bead3f20b205df28656d43636ba16df 100644
|
||||
index aa68ff1abced10ad03957c9c0ac24beaf112adcf..7d2b6657b0dbf5f899446d674dfc01b326fbc9c3 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -40,6 +40,9 @@ import net.minecraft.world.level.Level;
|
||||
|
||||
@@ -12514,7 +12514,7 @@ index 5f407535298a31a34cfe114dd863fd6a9b977707..29c7e33fe961020e5a0007287fe9b663
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
||||
index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9b2433616 100644
|
||||
index e0fd0b00057bd715d80d1c223027618eb9c385e4..03b4f279b3ec2898445a745bb2af02afb0beaa9d 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
||||
@@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -12626,7 +12626,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9
|
||||
}
|
||||
|
||||
brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F));
|
||||
@@ -318,7 +404,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -317,7 +403,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) {
|
||||
if (this.isBaby()) {
|
||||
this.setUnhappy();
|
||||
@@ -12635,7 +12635,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9
|
||||
} else {
|
||||
boolean flag = this.getOffers().isEmpty();
|
||||
|
||||
@@ -331,9 +417,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -330,9 +416,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
@@ -12648,7 +12648,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9
|
||||
this.startTrading(player);
|
||||
}
|
||||
|
||||
@@ -502,7 +589,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -501,7 +588,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
while (iterator.hasNext()) {
|
||||
MerchantOffer merchantrecipe = (MerchantOffer) iterator.next();
|
||||
|
||||
@@ -12657,7 +12657,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9
|
||||
}
|
||||
|
||||
}
|
||||
@@ -752,7 +839,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -751,7 +838,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
|
||||
@Override
|
||||
public boolean canBreed() {
|
||||
@@ -12666,7 +12666,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9
|
||||
}
|
||||
|
||||
private boolean hungry() {
|
||||
@@ -966,6 +1053,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -965,6 +1052,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
|
||||
public boolean hasFarmSeeds() {
|
||||
return this.getInventory().hasAnyMatching((itemstack) -> {
|
||||
@@ -12678,7 +12678,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9
|
||||
return itemstack.is(ItemTags.VILLAGER_PLANTABLE_SEEDS);
|
||||
});
|
||||
}
|
||||
@@ -1015,6 +1107,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -1014,6 +1106,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
}
|
||||
|
||||
public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) {
|
||||
@@ -12686,7 +12686,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9
|
||||
if (this.wantsToSpawnGolem(time)) {
|
||||
AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D);
|
||||
List<Villager> list = world.getEntitiesOfClass(Villager.class, axisalignedbb);
|
||||
@@ -1088,6 +1181,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
@@ -1087,6 +1180,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||
|
||||
@Override
|
||||
public void startSleeping(BlockPos pos) {
|
||||
@@ -18653,45 +18653,6 @@ index 2959f713ce75a1df9c6c7cf5e021690cfcb6e1e7..3fa9539cfb2c35beeba6d44fa05cee97
|
||||
DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "experience", "Allows the user to give themselves or others arbitrary values of experience", PermissionDefault.OP, commands); // Paper - wrong permission; redirects are de-redirected and the root literal name is used, so xp -> experience
|
||||
DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "defaultgamemode", "Allows the user to change the default gamemode of the server", PermissionDefault.OP, commands);
|
||||
DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands);
|
||||
diff --git a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
|
||||
index 7fee1c2779ab390586b2d3f75f56890846323500..5fdb227acfd1d8f55b770c8a66e97494c36db33c 100644
|
||||
--- a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
|
||||
+++ b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
|
||||
@@ -68,7 +68,7 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher {
|
||||
// Gale end - branding changes - version fetcher
|
||||
final Component history = getHistory();
|
||||
|
||||
- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage;
|
||||
+ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur
|
||||
}
|
||||
|
||||
protected @Nullable String getMinecraftVersion() { // Gale - branding changes - version fetcher
|
||||
@@ -120,13 +120,13 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher {
|
||||
|
||||
switch (distance) {
|
||||
case -1:
|
||||
- return Component.text("Error obtaining version information", NamedTextColor.YELLOW);
|
||||
+ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur
|
||||
case 0:
|
||||
- return Component.text("You are running the latest version", NamedTextColor.GREEN);
|
||||
+ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur
|
||||
case -2:
|
||||
- return Component.text("Unknown version", NamedTextColor.YELLOW);
|
||||
+ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur
|
||||
default:
|
||||
- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW)
|
||||
+ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur
|
||||
.append(Component.newline())
|
||||
.append(Component.text("Download the new version at: ")
|
||||
.append(Component.text(this.downloadPage, NamedTextColor.GOLD) // Gale - branding changes - version fetcher
|
||||
@@ -174,6 +174,6 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher {
|
||||
return null;
|
||||
}
|
||||
|
||||
- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC);
|
||||
+ return org.bukkit.ChatColor.parseMM("<grey>Previous: %s", oldVersion); // Purpur
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..8299aab5c29c8c6d996087537d9522b653b03ffa
|
||||
|
||||
53
patches/server/0012-Configurable-server-GUI-name.patch
Normal file
53
patches/server/0012-Configurable-server-GUI-name.patch
Normal file
@@ -0,0 +1,53 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com>
|
||||
Date: Sun, 14 Jan 2024 05:14:09 -0500
|
||||
Subject: [PATCH] Configurable server GUI name
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java
|
||||
index be7b3fe2dc84493dcde9e185717b0b7c7c2e9822..a1dc1924039b7d51dc2915cefda02d0ba5d0e439 100644
|
||||
--- a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java
|
||||
+++ b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java
|
||||
@@ -56,7 +56,7 @@ public class MinecraftServerGui extends JComponent {
|
||||
;
|
||||
}
|
||||
|
||||
- final JFrame jframe = new JFrame("Purpur Minecraft server"); // Purpur
|
||||
+ final JFrame jframe = new JFrame(org.dreeam.leaf.LeafConfig.serverGUIName); // Purpur // Leaf - Configurable server GUI name
|
||||
final MinecraftServerGui servergui = new MinecraftServerGui(server);
|
||||
|
||||
jframe.setDefaultCloseOperation(2);
|
||||
@@ -64,7 +64,7 @@ public class MinecraftServerGui extends JComponent {
|
||||
jframe.pack();
|
||||
jframe.setLocationRelativeTo((Component) null);
|
||||
jframe.setVisible(true);
|
||||
- jframe.setName("Purpur Minecraft server"); // Paper // Purpur
|
||||
+ jframe.setName(org.dreeam.leaf.LeafConfig.serverGUIName); // Paper // Purpur // Leaf - Configurable server GUI name
|
||||
|
||||
// Paper start - Add logo as frame image
|
||||
try {
|
||||
@@ -76,7 +76,7 @@ public class MinecraftServerGui extends JComponent {
|
||||
jframe.addWindowListener(new WindowAdapter() {
|
||||
public void windowClosing(WindowEvent windowevent) {
|
||||
if (!servergui.isClosing.getAndSet(true)) {
|
||||
- jframe.setTitle("Purpur Minecraft server - shutting down!"); // Purpur
|
||||
+ jframe.setTitle(org.dreeam.leaf.config.modules.misc.ServerBrand.serverGUIName + " - shutting down!"); // Purpur // Leaf - Configurable server GUI name
|
||||
server.halt(true);
|
||||
servergui.runFinalizers();
|
||||
}
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 80a196442edbc6b4eb44bb6a405100871aea2f6a..ffed6b74b1bc2137e238f7d2955e2f39cb82b42d 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -169,6 +169,11 @@ public class LeafConfig {
|
||||
serverModName = getString("server-mod-name", serverModName);
|
||||
}
|
||||
|
||||
+ public static String serverGUIName = "Leaf Console";
|
||||
+ private static void serverGUIName() {
|
||||
+ serverGUIName = getString("server-gui-name", serverGUIName);
|
||||
+ }
|
||||
+
|
||||
private static void removal() {
|
||||
}
|
||||
|
||||
@@ -22,11 +22,11 @@ index badb262810effd22ca1ba021a1e746a777a19cbc..9baf55e9c3259aed431022a50c12d4f2
|
||||
ServerLoginPacketListenerImpl.this.disconnect("Failed to verify username!");
|
||||
return;
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 80a196442edbc6b4eb44bb6a405100871aea2f6a..1e9a440d790bdd521c58dfc9c1575e2759006d02 100644
|
||||
index ffed6b74b1bc2137e238f7d2955e2f39cb82b42d..ceda895277f3358f0cd37d50ca496c3e211b6a45 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -169,7 +169,11 @@ public class LeafConfig {
|
||||
serverModName = getString("server-mod-name", serverModName);
|
||||
@@ -174,7 +174,11 @@ public class LeafConfig {
|
||||
serverGUIName = getString("server-gui-name", serverGUIName);
|
||||
}
|
||||
|
||||
+ public static boolean removeMojangUsernameCheck = true;
|
||||
@@ -18,10 +18,10 @@ index 2821de09a36fc315897129f4691ba713386737db..5468b2fe5d0dd3e2b0ef774dff57e42e
|
||||
this.connection.send(new ClientboundLoginDisconnectPacket(chatmessage));
|
||||
this.connection.disconnect(chatmessage);
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 1e9a440d790bdd521c58dfc9c1575e2759006d02..267f88d799fe98d1741a837c33d8c748362077ee 100644
|
||||
index ceda895277f3358f0cd37d50ca496c3e211b6a45..41e43d7b0b3627c3f2771008ef7d91cdd03f074e 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -170,10 +170,14 @@ public class LeafConfig {
|
||||
@@ -175,10 +175,14 @@ public class LeafConfig {
|
||||
}
|
||||
|
||||
public static boolean removeMojangUsernameCheck = true;
|
||||
@@ -7,7 +7,7 @@ This Check is added in 1.17.x -> 1.18.x update by Mojang.
|
||||
By removing this check, it enable hackers to use some modules of hack clients.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 40f32af1976323fd5ffe9aef0725025284daffb3..97958536a31f4a5f3b1935f5afeb9c81ecfa458b 100644
|
||||
index 89d40b2e1fbd0f0de03b90922c71e33db9efd3ae..c373f084d846e12faa42455c76f580b67b634717 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2101,7 +2101,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -20,10 +20,10 @@ index 40f32af1976323fd5ffe9aef0725025284daffb3..97958536a31f4a5f3b1935f5afeb9c81
|
||||
|
||||
this.player.resetLastActionTime();
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 267f88d799fe98d1741a837c33d8c748362077ee..83fee46886a21349d652b6bc871bd03ffbac2a7d 100644
|
||||
index 41e43d7b0b3627c3f2771008ef7d91cdd03f074e..39c81e23a260aba4cbe70fb68adb5ebbceafefd4 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -171,6 +171,8 @@ public class LeafConfig {
|
||||
@@ -176,6 +176,8 @@ public class LeafConfig {
|
||||
|
||||
public static boolean removeMojangUsernameCheck = true;
|
||||
public static boolean removeSpigotCheckBungeeConfig = true;
|
||||
@@ -32,7 +32,7 @@ index 267f88d799fe98d1741a837c33d8c748362077ee..83fee46886a21349d652b6bc871bd03f
|
||||
private static void removal() {
|
||||
removeMojangUsernameCheck = getBoolean("remove-Mojang-username-check", removeMojangUsernameCheck,
|
||||
"Remove username check of Mojang",
|
||||
@@ -178,6 +180,9 @@ public class LeafConfig {
|
||||
@@ -183,6 +185,9 @@ public class LeafConfig {
|
||||
removeSpigotCheckBungeeConfig = getBoolean("remove-Spigot-check-bungee-config", removeSpigotCheckBungeeConfig,
|
||||
"Enable player enter backend server through proxy",
|
||||
"without backend server enabling its bungee mode");
|
||||
@@ -1,15 +1,15 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Bjarne Koll <lynxplay101@gmail.com>
|
||||
Date: Sun, 19 Feb 2023 16:14:28 +0100
|
||||
Subject: [PATCH] KTP: Optimize spigot event bus
|
||||
Subject: [PATCH] KTP: Allow unknown event thread execution
|
||||
|
||||
Original license: GPL v3
|
||||
Original project: https://github.com/lynxplay/ktp
|
||||
|
||||
This patch contains a lot of small optimizations to the spigot event bus
|
||||
to improve its speed as much as possible, allowing for a large amount of
|
||||
events to be published by the server without impacting the overall
|
||||
performance too much.
|
||||
This patch allows events to actively define that they may or may not be
|
||||
called on the main thread of the server.
|
||||
This is preferred over passing the "asyncness" of the event as async
|
||||
bool parameter to the event instance every time.
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||
index a1c9726d25479b5326fe2fa2b0f5a98d6b2da4c5..06dfd0b27ac0006a2be07f54a0702519a691c6ec 100644
|
||||
@@ -7,7 +7,7 @@ Original license: MIT
|
||||
Original project: https://github.com/KeYiMC/KeYi
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 668d825a2469706e4de11629a0b41877de700ca6..441e6e70a9bc40fe986c05d4c4b46e498aa849ea 100644
|
||||
index 720a81da72a8002ff02cc39e5fca42354519c742..27203a4f30f719652dab80103eb3bd4c2104a9e3 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -29,6 +29,11 @@ import java.util.Optional;
|
||||
@@ -20,10 +20,10 @@ index 3ff5c2a4a2cca5c9a89ceafd9fddeb1012344433..90ab4610026b23ac84e6c941c6581d13
|
||||
} else {
|
||||
ItemEntity.merge(other, itemstack1, this, itemstack);
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 83fee46886a21349d652b6bc871bd03ffbac2a7d..fc3938c16c43277e22b7a322177fa2a9150f1ff8 100644
|
||||
index 39c81e23a260aba4cbe70fb68adb5ebbceafefd4..dc492bc4aab5f5e305282f4ebb239341fe8f30f0 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -194,6 +194,7 @@ public class LeafConfig {
|
||||
@@ -199,6 +199,7 @@ public class LeafConfig {
|
||||
public static int activationDistanceMod = 8;
|
||||
public static boolean throttleInactiveGoalSelectorTick = true;
|
||||
public static Map<String, Integer> projectileTimeouts;
|
||||
@@ -31,7 +31,7 @@ index 83fee46886a21349d652b6bc871bd03ffbac2a7d..fc3938c16c43277e22b7a322177fa2a9
|
||||
private static void performance() {
|
||||
boolean asyncMobSpawning = getBoolean("performance.enable-async-mob-spawning", enableAsyncMobSpawning,
|
||||
"Whether or not asynchronous mob spawning should be enabled.",
|
||||
@@ -242,6 +243,7 @@ public class LeafConfig {
|
||||
@@ -247,6 +248,7 @@ public class LeafConfig {
|
||||
String type = EntityType.getKey(entityType).getPath().toUpperCase(Locale.ROOT);
|
||||
entityType.ttl = config.getInt("entity_timeouts." + type, -1);
|
||||
}
|
||||
@@ -7,7 +7,7 @@ Original license: MIT
|
||||
Original project: https://github.com/Cryptite/Slice
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
index 54807be5d539fd768f9cb7a8ce912983ae328b46..26f904d5c63bd25d7aac3ab667ec45900d84ae5a 100644
|
||||
index 7206e59afd73e8b00993518a671dd2de1af34242..e3b66651df8a67b3cddfd027316a57986510788c 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -284,6 +284,7 @@ public class ServerPlayer extends Player {
|
||||
@@ -38,7 +38,7 @@ index e3d1e030063a8746dbdaea14c6de7d900bc1ad0f..ec1dd7c0046ac9091d5b6b2cd7032378
|
||||
|
||||
// entityplayer1.connection.teleport(entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot());
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 441e6e70a9bc40fe986c05d4c4b46e498aa849ea..70459d17c359d4cb90f9ca1d40492acf657d733f 100644
|
||||
index 27203a4f30f719652dab80103eb3bd4c2104a9e3..41d67b3c57f55c6b5f685d8b00ca98ae1cd82881 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1265,6 +1265,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -81,10 +81,10 @@ index 62e4e6e840dd1d5dcbab14d2f5708839a08a8d4d..5c7264f1f1147d27b22164c905ebfaa1
|
||||
// world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty
|
||||
world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean))
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index fc3938c16c43277e22b7a322177fa2a9150f1ff8..9445177d2cb64ae1cd0bd88d0c0b2ad89ef924f6 100644
|
||||
index dc492bc4aab5f5e305282f4ebb239341fe8f30f0..46ab8b1b5edad18c1283db012efe25cada186630 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -246,7 +246,9 @@ public class LeafConfig {
|
||||
@@ -251,7 +251,9 @@ public class LeafConfig {
|
||||
useSpigotItemMergingMechanism = getBoolean("performance.use-spigot-item-merging-mechanism", useSpigotItemMergingMechanism);
|
||||
}
|
||||
|
||||
@@ -57,10 +57,10 @@ index 5c7264f1f1147d27b22164c905ebfaa1de438faf..164f07df76b10521b0f946258d4667ac
|
||||
// world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty
|
||||
world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean))
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 9445177d2cb64ae1cd0bd88d0c0b2ad89ef924f6..56dc6cb0b5659619ec5df42088fbecf758e652c6 100644
|
||||
index 46ab8b1b5edad18c1283db012efe25cada186630..1de68bd11291f7ccb38365212904ef5874b8e492 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -247,8 +247,10 @@ public class LeafConfig {
|
||||
@@ -252,8 +252,10 @@ public class LeafConfig {
|
||||
}
|
||||
|
||||
public static boolean jadeProtocol = false;
|
||||
@@ -19,7 +19,7 @@ index 7637dbf519568693fd1b707490d4cd8a2776c3a7..605da20aa58e5fbe9b306078c458d932
|
||||
// CraftBukkit start - handle player weather
|
||||
// entityplayer.connection.send(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.START_RAINING, 0.0F));
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 56dc6cb0b5659619ec5df42088fbecf758e652c6..4cf74bc39f61e024b7d453759cdc9397f0e3d4f5 100644
|
||||
index 1de68bd11291f7ccb38365212904ef5874b8e492..7725cadfdae94c88b77bb1eb51d66609f20adc60 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -19,6 +19,7 @@ import java.util.Collections;
|
||||
@@ -30,7 +30,7 @@ index 56dc6cb0b5659619ec5df42088fbecf758e652c6..4cf74bc39f61e024b7d453759cdc9397
|
||||
|
||||
public class LeafConfig {
|
||||
|
||||
@@ -248,9 +249,13 @@ public class LeafConfig {
|
||||
@@ -253,9 +254,13 @@ public class LeafConfig {
|
||||
|
||||
public static boolean jadeProtocol = false;
|
||||
public static boolean appleskinProtocol = false;
|
||||
@@ -14,7 +14,7 @@ This patch was ported downstream from the Petal fork.
|
||||
Makes most pathfinding-related work happen asynchronously
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
index b27b1df608bca3242bed8bc5b7603d0e88fa50bf..34789645c9c0dd69e1c6787853c3ea17bfcc2145 100644
|
||||
index 455a0a96ac6aa6106e9011cd41be228b5a880fe5..211099df1a84748eafccfba984926fc545ed3c14 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -292,6 +292,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
|
||||
@@ -943,7 +943,7 @@ index 0e2b14e7dfedf209d63279c81723fd7955122d78..079b278e2e262af433bb5bd0c12b3d8d
|
||||
|
||||
public SwimNodeEvaluator(boolean canJumpOutOfWater) {
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 4cf74bc39f61e024b7d453759cdc9397f0e3d4f5..4ec2954384a7c99b4f489b1b2a666f93ee69e98f 100644
|
||||
index 7725cadfdae94c88b77bb1eb51d66609f20adc60..13c2e89a84905dd988b4d296158b9985b960aad7 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableMap;
|
||||
@@ -962,7 +962,7 @@ index 4cf74bc39f61e024b7d453759cdc9397f0e3d4f5..4ec2954384a7c99b4f489b1b2a666f93
|
||||
|
||||
public class LeafConfig {
|
||||
|
||||
@@ -196,6 +198,9 @@ public class LeafConfig {
|
||||
@@ -201,6 +203,9 @@ public class LeafConfig {
|
||||
public static boolean throttleInactiveGoalSelectorTick = true;
|
||||
public static Map<String, Integer> projectileTimeouts;
|
||||
public static boolean useSpigotItemMergingMechanism = true;
|
||||
@@ -972,7 +972,7 @@ index 4cf74bc39f61e024b7d453759cdc9397f0e3d4f5..4ec2954384a7c99b4f489b1b2a666f93
|
||||
private static void performance() {
|
||||
boolean asyncMobSpawning = getBoolean("performance.enable-async-mob-spawning", enableAsyncMobSpawning,
|
||||
"Whether or not asynchronous mob spawning should be enabled.",
|
||||
@@ -245,6 +250,17 @@ public class LeafConfig {
|
||||
@@ -250,6 +255,17 @@ public class LeafConfig {
|
||||
entityType.ttl = config.getInt("entity_timeouts." + type, -1);
|
||||
}
|
||||
useSpigotItemMergingMechanism = getBoolean("performance.use-spigot-item-merging-mechanism", useSpigotItemMergingMechanism);
|
||||
@@ -64,10 +64,10 @@ index c9b7b12470afac45b0132858407aacb8f91aac68..c27ffbc08a206a1e270b6419d38a7ad1
|
||||
while (iterator.hasNext()) {
|
||||
Entity entity1 = (Entity) iterator.next();
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index 4ec2954384a7c99b4f489b1b2a666f93ee69e98f..d9477d6570ac6bfb9a0256a0dc734b1cfe5ea6c9 100644
|
||||
index 13c2e89a84905dd988b4d296158b9985b960aad7..3113970b5cb5d9b1a18c7f82b44c29afe89a0730 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -201,6 +201,7 @@ public class LeafConfig {
|
||||
@@ -206,6 +206,7 @@ public class LeafConfig {
|
||||
public static boolean asyncPathfinding = false;
|
||||
public static int asyncPathfindingMaxThreads = 0;
|
||||
public static int asyncPathfindingKeepalive = 60;
|
||||
@@ -75,7 +75,7 @@ index 4ec2954384a7c99b4f489b1b2a666f93ee69e98f..d9477d6570ac6bfb9a0256a0dc734b1c
|
||||
private static void performance() {
|
||||
boolean asyncMobSpawning = getBoolean("performance.enable-async-mob-spawning", enableAsyncMobSpawning,
|
||||
"Whether or not asynchronous mob spawning should be enabled.",
|
||||
@@ -261,6 +262,9 @@ public class LeafConfig {
|
||||
@@ -266,6 +267,9 @@ public class LeafConfig {
|
||||
asyncPathfindingMaxThreads = 0;
|
||||
else
|
||||
Bukkit.getLogger().log(Level.INFO, "Using " + asyncPathfindingMaxThreads + " threads for Async Pathfinding");
|
||||
@@ -6,7 +6,7 @@ Subject: [PATCH] Reduce canSee work
|
||||
Credit by: Martijn Muijsers <martijnmuijsers@live.nl>, MachineBreaker<machinebreaker>
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
||||
index 7f7d5b9ac42bd510e29834d1df7f49d5659fbfa2..97c7e9c8dc2dc3860de4e697ecd2c1179ef6fd56 100644
|
||||
index 78f2bea7ae34be7a2152d7c31e90a524eac1ddfe..9ce1676e9a51ae7fd59bc4ef29efdcb160a86657 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Level.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
||||
@@ -442,11 +442,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -35,7 +35,7 @@ index 7f7d5b9ac42bd510e29834d1df7f49d5659fbfa2..97c7e9c8dc2dc3860de4e697ecd2c117
|
||||
return false;
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 70459d17c359d4cb90f9ca1d40492acf657d733f..8ee373cacbc1f9c7cb4f8300dcdbeeae4195fdae 100644
|
||||
index 41d67b3c57f55c6b5f685d8b00ca98ae1cd82881..b988261eebba51f4205df8ffe8661e7539c72c9c 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -578,12 +578,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Faster Random for xaeroMapServerID generation
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index d9477d6570ac6bfb9a0256a0dc734b1cfe5ea6c9..bf4c5ce82ecee2e7040d6cea173df7827606a8b8 100644
|
||||
index 3113970b5cb5d9b1a18c7f82b44c29afe89a0730..4974ba174afe8cfd30e4dbbd59d4e88f62f45380 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -2,6 +2,7 @@ package org.dreeam.leaf;
|
||||
@@ -16,7 +16,7 @@ index d9477d6570ac6bfb9a0256a0dc734b1cfe5ea6c9..bf4c5ce82ecee2e7040d6cea173df782
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -270,7 +271,7 @@ public class LeafConfig {
|
||||
@@ -275,7 +276,7 @@ public class LeafConfig {
|
||||
public static boolean jadeProtocol = false;
|
||||
public static boolean appleskinProtocol = false;
|
||||
public static boolean xaeroMapProtocol = false;
|
||||
@@ -40,10 +40,10 @@ index 004dce26ff073f1de52a84cd425c4f60fdab5e50..a02d4233c9dbb4e37532c3ab6c20bb1c
|
||||
if (flag1) {
|
||||
this.notifyNeighbors(world, pos, enumdirection);
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index bf4c5ce82ecee2e7040d6cea173df7827606a8b8..f24c52777e3f73a6b432d4b407e32217bcd6e038 100644
|
||||
index 4974ba174afe8cfd30e4dbbd59d4e88f62f45380..e25b4f2ad080d0fbd6782cee305a7c5f4f206a2a 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -288,4 +288,9 @@ public class LeafConfig {
|
||||
@@ -293,4 +293,9 @@ public class LeafConfig {
|
||||
gg.pufferfish.pufferfish.sentry.SentryManager.init();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com>
|
||||
Date: Thu, 22 Feb 2024 18:30:22 -0500
|
||||
Subject: [PATCH] Fix MC-249136: lag when attempting to locate a buried
|
||||
treasure or opening/breaking a chest containing a map
|
||||
|
||||
This patch ported from 1.20.5 snapshot - 24w04a
|
||||
Mojang issues: https://bugs.mojang.com/browse/MC-249136
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/StructureManager.java b/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
index 09c85ed428b8eaf51f8b3c6e45cce925f05ab354..07a0be7393215ce891799b444c27b4b34e2d293d 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
@@ -23,6 +23,7 @@ import net.minecraft.world.level.levelgen.structure.StructureCheck;
|
||||
import net.minecraft.world.level.levelgen.structure.StructureCheckResult;
|
||||
import net.minecraft.world.level.levelgen.structure.StructurePiece;
|
||||
import net.minecraft.world.level.levelgen.structure.StructureStart;
|
||||
+import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement;
|
||||
|
||||
public class StructureManager {
|
||||
public final LevelAccessor level;
|
||||
@@ -163,9 +164,11 @@ public class StructureManager {
|
||||
return this.level.getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES).getAllReferences();
|
||||
}
|
||||
|
||||
- public StructureCheckResult checkStructurePresence(ChunkPos chunkPos, Structure structure, boolean skipExistingChunk) {
|
||||
- return this.structureCheck.checkStart(chunkPos, structure, skipExistingChunk);
|
||||
+ // Leaf start - Fix MC-249136
|
||||
+ public StructureCheckResult checkStructurePresence(ChunkPos chunkPos, Structure structure, StructurePlacement placement, boolean skipExistingChunk) {
|
||||
+ return this.structureCheck.checkStart(chunkPos, structure, placement, skipExistingChunk);
|
||||
}
|
||||
+ // Leaf end
|
||||
|
||||
public void addReference(StructureStart structureStart) {
|
||||
structureStart.addReference();
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
||||
index d5c2a608e1b4c8099c96b33d9d758e968350a46d..91c1e312ca50abbe8cf04a45bb421551dba03c25 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
||||
@@ -302,7 +302,7 @@ public abstract class ChunkGenerator {
|
||||
}
|
||||
|
||||
holder = (Holder) iterator.next();
|
||||
- structurecheckresult = structureAccessor.checkStructurePresence(pos, (Structure) holder.value(), skipReferencedStructures);
|
||||
+ structurecheckresult = structureAccessor.checkStructurePresence(pos, (Structure) holder.value(), placement, skipReferencedStructures); // Leaf - Fix MC-249136
|
||||
} while (structurecheckresult == StructureCheckResult.START_NOT_PRESENT);
|
||||
|
||||
if (!skipReferencedStructures && structurecheckresult == StructureCheckResult.START_PRESENT) {
|
||||
diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java b/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java
|
||||
index 16356d7f388561300e794a52f3f263b8e7d9b880..1e973bcbc79de7fdbeb22e3b577ea51c8a165c79 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java
|
||||
@@ -32,6 +32,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator;
|
||||
import net.minecraft.world.level.chunk.storage.ChunkScanAccess;
|
||||
import net.minecraft.world.level.chunk.storage.ChunkStorage;
|
||||
import net.minecraft.world.level.levelgen.RandomState;
|
||||
+import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@@ -161,7 +162,7 @@ public class StructureCheck {
|
||||
this.structureConfigs = registryManager.registryOrThrow(Registries.STRUCTURE);
|
||||
}
|
||||
|
||||
- public StructureCheckResult checkStart(ChunkPos pos, Structure type, boolean skipReferencedStructures) {
|
||||
+ public StructureCheckResult checkStart(ChunkPos pos, Structure type, StructurePlacement placement, boolean skipReferencedStructures) { // Leaf - Fix MC-249136
|
||||
long l = pos.toLong();
|
||||
Object2IntMap<Structure> object2IntMap = this.loadedChunksSafe.get(l); // Paper - rewrite chunk system - synchronise this class
|
||||
if (object2IntMap != null) {
|
||||
@@ -171,6 +172,11 @@ public class StructureCheck {
|
||||
if (structureCheckResult != null) {
|
||||
return structureCheckResult;
|
||||
} else {
|
||||
+ // Leaf start - Fix MC-249136
|
||||
+ if (!placement.applyAdditionalChunkRestrictions(pos.x, pos.z, this.seed, null)) {
|
||||
+ return StructureCheckResult.START_NOT_PRESENT;
|
||||
+ }
|
||||
+ // Leaf end
|
||||
boolean bl = this.featureChecksSafe.computeIfAbsent(type, (structure2) -> { // Paper - rewrite chunk system - synchronise this class
|
||||
return new SynchronisedLong2BooleanMap(PER_FEATURE_CHECK_LIMIT); // Paper - rewrite chunk system - synchronise this class
|
||||
}).getOrCompute(l, (chunkPos) -> { // Paper - rewrite chunk system - synchronise this class
|
||||
diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java b/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java
|
||||
index 594a2dd3b1d4c29c969d1992b8e93795da00e682..463f8f20136cc2615f4fb3fdda26c0c91254d3d9 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java
|
||||
@@ -74,14 +74,20 @@ public abstract class StructurePlacement {
|
||||
}
|
||||
}
|
||||
// Paper end
|
||||
- if (!this.isPlacementChunk(calculator, chunkX, chunkZ)) {
|
||||
- return false;
|
||||
- } else if (this.frequency < 1.0F && !this.frequencyReductionMethod.shouldGenerate(calculator.getLevelSeed(), this.salt, chunkX, chunkZ, this.frequency, saltOverride)) { // Paper
|
||||
- return false;
|
||||
- } else {
|
||||
- return !this.exclusionZone.isPresent() || !this.exclusionZone.get().isPlacementForbidden(calculator, chunkX, chunkZ);
|
||||
- }
|
||||
+ // Leaf start - Fix MC-249136
|
||||
+ return this.isPlacementChunk(calculator, chunkX, chunkZ)
|
||||
+ && this.applyAdditionalChunkRestrictions(chunkX, chunkZ, calculator.getLevelSeed(), saltOverride)
|
||||
+ && this.applyInteractionsWithOtherStructures(calculator, chunkX, chunkZ);
|
||||
+ }
|
||||
+
|
||||
+ public boolean applyAdditionalChunkRestrictions(int chunkX, int chunkZ, long levelSeed, Integer saltOverride) {
|
||||
+ return !(this.frequency < 1.0f) || this.frequencyReductionMethod.shouldGenerate(levelSeed, this.salt, chunkX, chunkZ, this.frequency, saltOverride); // Paper - Add missing structure set seed configs
|
||||
+ }
|
||||
+
|
||||
+ public boolean applyInteractionsWithOtherStructures(ChunkGeneratorStructureState calculator, int chunkX, int chunkZ) {
|
||||
+ return this.exclusionZone.isEmpty() || !this.exclusionZone.get().isPlacementForbidden(calculator, chunkX, chunkZ);
|
||||
}
|
||||
+ // Leaf end
|
||||
|
||||
protected abstract boolean isPlacementChunk(ChunkGeneratorStructureState calculator, int chunkX, int chunkZ);
|
||||
|
||||
58
patches/server/0043-Fix-MC-172047.patch
Normal file
58
patches/server/0043-Fix-MC-172047.patch
Normal file
@@ -0,0 +1,58 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: HaHaWTH <fsjk947@gmail.com>
|
||||
Date: Fri, 15 Mar 2024 02:12:38 +0800
|
||||
Subject: [PATCH] Fix MC-172047
|
||||
|
||||
Mojang issues: https://bugs.mojang.com/browse/MC-172047
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
|
||||
index 64bceae4d06b35fcbecb0daca2496ba30e39d995..47d1ca92aa71a6101496f8fdbd70d02ef75a55df 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
|
||||
@@ -58,6 +58,7 @@ import net.minecraft.world.entity.ai.goal.target.OwnerHurtTargetGoal;
|
||||
import net.minecraft.world.entity.ai.goal.target.ResetUniversalAngerTargetGoal;
|
||||
import net.minecraft.world.entity.animal.horse.AbstractHorse;
|
||||
import net.minecraft.world.entity.animal.horse.Llama;
|
||||
+import net.minecraft.world.entity.decoration.ArmorStand;
|
||||
import net.minecraft.world.entity.monster.AbstractSkeleton;
|
||||
import net.minecraft.world.entity.monster.Creeper;
|
||||
import net.minecraft.world.entity.monster.Ghast;
|
||||
@@ -670,17 +671,29 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
||||
|
||||
@Override
|
||||
public boolean wantsToAttack(LivingEntity target, LivingEntity owner) {
|
||||
- if (!(target instanceof Creeper) && !(target instanceof Ghast)) {
|
||||
- if (target instanceof Wolf) {
|
||||
- Wolf entitywolf = (Wolf) target;
|
||||
-
|
||||
- return !entitywolf.isTame() || entitywolf.getOwner() != owner;
|
||||
- } else {
|
||||
- return target instanceof Player && owner instanceof Player && !((Player) owner).canHarmPlayer((Player) target) ? false : (target instanceof AbstractHorse && ((AbstractHorse) target).isTamed() ? false : !(target instanceof TamableAnimal) || !((TamableAnimal) target).isTame());
|
||||
- }
|
||||
- } else {
|
||||
+ // Leaf start - Improve readability
|
||||
+ if (target instanceof Creeper || target instanceof Ghast || target instanceof ArmorStand) { // Leaf - Fix MC-172047
|
||||
return false;
|
||||
}
|
||||
+
|
||||
+ if (target instanceof Wolf entityWolf) {
|
||||
+ return !entityWolf.isTame() || entityWolf.getOwner() != owner;
|
||||
+ }
|
||||
+
|
||||
+ if (target instanceof Player targetPlayer && owner instanceof Player ownerPlayer) {
|
||||
+ return ownerPlayer.canHarmPlayer(targetPlayer);
|
||||
+ }
|
||||
+
|
||||
+ if (target instanceof AbstractHorse targetHorse) {
|
||||
+ return !targetHorse.isTamed();
|
||||
+ }
|
||||
+
|
||||
+ if (target instanceof TamableAnimal tamableAnimalTarget) {
|
||||
+ return !tamableAnimalTarget.isTame();
|
||||
+ }
|
||||
+
|
||||
+ return true;
|
||||
+ // Leaf end
|
||||
}
|
||||
|
||||
@Override
|
||||
61
patches/server/0044-Configurable-bamboo-collision.patch
Normal file
61
patches/server/0044-Configurable-bamboo-collision.patch
Normal file
@@ -0,0 +1,61 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: HaHaWTH <fsjk947@gmail.com>
|
||||
Date: Sun, 12 May 2024 16:04:13 +0800
|
||||
Subject: [PATCH] Configurable-bamboo-collision
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java
|
||||
index a5d391af2c6b733d653188f4aeeec2afffd96adf..5413c59c50f8cf60eaddbb0dce62b5e72f90e4fd 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java
|
||||
@@ -33,7 +33,7 @@ public class BambooStalkBlock extends Block implements BonemealableBlock {
|
||||
protected static final float COLLISION_AABB_OFFSET = 1.5F;
|
||||
protected static final VoxelShape SMALL_SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 16.0D, 11.0D);
|
||||
protected static final VoxelShape LARGE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 16.0D, 13.0D);
|
||||
- protected static final VoxelShape COLLISION_SHAPE = Block.box(6.5D, 0.0D, 6.5D, 9.5D, 16.0D, 9.5D);
|
||||
+ protected static final VoxelShape COLLISION_SHAPE = org.dreeam.leaf.config.modules.gameplay.ConfigurableBambooCollision.enableCollision ? Block.box(6.5D, 0.0D, 6.5D, 9.5D, 16.0D, 9.5D) : Block.box(0.0D, 15.9D, 0.0D, 16.0D, 16.0D, 16.0D); // Leaf - Configurable bamboo collision
|
||||
public static final IntegerProperty AGE = BlockStateProperties.AGE_1;
|
||||
public static final EnumProperty<BambooLeaves> LEAVES = BlockStateProperties.BAMBOO_LEAVES;
|
||||
public static final IntegerProperty STAGE = BlockStateProperties.STAGE;
|
||||
@@ -73,9 +73,17 @@ public class BambooStalkBlock extends Block implements BonemealableBlock {
|
||||
|
||||
@Override
|
||||
public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
||||
- Vec3 vec3d = state.getOffset(world, pos);
|
||||
+ // Leaf start - Configurable bamboo collision
|
||||
+ if (org.dreeam.leaf.config.modules.gameplay.ConfigurableBambooCollision.enableCollision) {
|
||||
+ Vec3 vec3d = state.getOffset(world, pos);
|
||||
|
||||
- return BambooStalkBlock.COLLISION_SHAPE.move(vec3d.x, vec3d.y, vec3d.z);
|
||||
+ return BambooStalkBlock.COLLISION_SHAPE.move(vec3d.x, vec3d.y, vec3d.z);
|
||||
+ } else {
|
||||
+ return context.isAbove(net.minecraft.world.phys.shapes.Shapes.block(), pos, true)
|
||||
+ ? COLLISION_SHAPE // Prevent desync
|
||||
+ : net.minecraft.world.phys.shapes.Shapes.empty();
|
||||
+ }
|
||||
+ // Leaf end
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
index e25b4f2ad080d0fbd6782cee305a7c5f4f206a2a..4eadad401c642ec28845f60ed7485bd35bc6b488 100644
|
||||
--- a/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.dreeam.leaf;
|
||||
|
||||
+import com.electronwill.nightconfig.core.file.CommentedFileConfig;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
@@ -295,7 +296,9 @@ public class LeafConfig {
|
||||
}
|
||||
|
||||
public static boolean fixTripwireDupe = true;
|
||||
- private static void tripwireDupe() {
|
||||
+ public static boolean configurableBambooCollision = true;
|
||||
+ private static void gameplay() {
|
||||
fixTripwireDupe = getBoolean("gameplay.fix-tripwire-dupe", fixTripwireDupe);
|
||||
+ configurableBambooCollision = getBoolean("gameplay.configurable_bamboo_collision", configurableBambooCollision);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalfinals <yuu8583@proton.me>
|
||||
Date: Tue, 12 Mar 2024 01:10:54 +0800
|
||||
Subject: [PATCH] Use a shadow fork that supports Java 21
|
||||
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 99cf0bebf6bd1579c1f347e0c1750c7b13f74566..09dd1b8b9471b3e742b102e8ddf205f9be66e412 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -3,7 +3,7 @@ import io.papermc.paperweight.util.*
|
||||
plugins {
|
||||
java
|
||||
`maven-publish`
|
||||
- id("com.github.johnrengelman.shadow")
|
||||
+ id("io.github.goooler.shadow") // Leaf - use a shadow fork that supports Java 21
|
||||
}
|
||||
|
||||
val log4jPlugins = sourceSets.create("log4jPlugins")
|
||||
359
patches/work/0012-Fix-Pufferfish-and-Purpur-patches.patch
Normal file
359
patches/work/0012-Fix-Pufferfish-and-Purpur-patches.patch
Normal file
@@ -0,0 +1,359 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com>
|
||||
Date: Mon, 29 Apr 2024 14:18:58 -0400
|
||||
Subject: [PATCH] Fix Pufferfish and Purpur patches
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
|
||||
index e94224ed280247ee69dfdff8dc960f2b8729be33..5b9725a9a81c0850dc2809c150529e5f67a88b66 100644
|
||||
--- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
|
||||
+++ b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
|
||||
@@ -241,6 +241,8 @@ public class PaperPluginsCommand extends BukkitCommand {
|
||||
|
||||
if (!paperPlugins.isEmpty()) {
|
||||
sender.sendMessage(PAPER_HEADER.append(Component.text(" (%s):".formatted(paperPlugins.size())))); // Purpur
|
||||
+ } else {
|
||||
+ sender.sendMessage(PAPER_HEADER.append(Component.text(" (0):"))); // Leaf - Purpur - Makes plugins command better if no plugins
|
||||
}
|
||||
|
||||
for (Component component : formatProviders(paperPlugins, sender)) { // Purpur
|
||||
@@ -249,6 +251,8 @@ public class PaperPluginsCommand extends BukkitCommand {
|
||||
|
||||
if (!spigotPlugins.isEmpty()) {
|
||||
sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (%s):".formatted(spigotPlugins.size())))); // Purpur
|
||||
+ } else {
|
||||
+ sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (0):"))); // Leaf - Purpur - Makes plugins command better if no plugins
|
||||
}
|
||||
|
||||
for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index c7c4a56cb09ca513abdbaf5674c325e551ea2909..ede6cd55688e573e003a6568100b18d5e620f878 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -293,7 +293,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
public static final int TICK_TIME = 1000000000 / MinecraftServer.TPS;
|
||||
private static final int SAMPLE_INTERVAL = 20; // Paper - improve server tick loop
|
||||
@Deprecated(forRemoval = true) // Paper
|
||||
- public final double[] recentTps = new double[ 3 ];
|
||||
+ public final double[] recentTps = new double[ 4 ]; // Purpur
|
||||
// Spigot end
|
||||
public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files
|
||||
public final GaleConfigurations galeConfigurations; // Gale - Gale configuration
|
||||
@@ -306,7 +306,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
public volatile boolean abnormalExit = false; // Paper
|
||||
public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation
|
||||
|
||||
- public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning
|
||||
+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("pufferfish-async-mob-spawning"); // Pufferfish - optimize mob spawning // Leaf - Unify thread name
|
||||
|
||||
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
|
||||
AtomicReference<S> atomicreference = new AtomicReference();
|
||||
@@ -974,6 +974,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
LOGGER.error("[UPnP] Failed to close port {}", this.getPort());
|
||||
}
|
||||
}
|
||||
+ // Purpur end
|
||||
// CraftBukkit start
|
||||
if (this.server != null) {
|
||||
this.server.disablePlugins();
|
||||
@@ -1228,9 +1229,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
tps15.add(currentTps, diff);
|
||||
|
||||
// Backwards compat with bad plugins
|
||||
- this.recentTps[0] = tps1.getAverage();
|
||||
- this.recentTps[1] = tps5.getAverage();
|
||||
- this.recentTps[2] = tps15.getAverage();
|
||||
+ // Purpur start
|
||||
+ this.recentTps[0] = tps5s.getAverage();
|
||||
+ this.recentTps[1] = tps1.getAverage();
|
||||
+ this.recentTps[2] = tps5.getAverage();
|
||||
+ this.recentTps[3] = tps15.getAverage();
|
||||
+ // Purpur end
|
||||
lagging = recentTps[0] < org.purpurmc.purpur.PurpurConfig.laggingThreshold; // Purpur
|
||||
tickSection = currentTime;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/gui/StatsComponent.java b/src/main/java/net/minecraft/server/gui/StatsComponent.java
|
||||
index 096c89bd01cec2abd151bf6fffc4847d1bcd548f..cd0a8a6a1be75cab8bbb8ee3ac17bb732b9e7108 100644
|
||||
--- a/src/main/java/net/minecraft/server/gui/StatsComponent.java
|
||||
+++ b/src/main/java/net/minecraft/server/gui/StatsComponent.java
|
||||
@@ -45,7 +45,7 @@ public class StatsComponent extends JComponent {
|
||||
this.msgs[1] = "Avg tick: "
|
||||
+ DECIMAL_FORMAT.format((double)this.server.getAverageTickTimeNanos() / (double)TimeUtil.NANOSECONDS_PER_MILLISECOND)
|
||||
+ " ms";
|
||||
- this.msgs[2] = "TPS from last 1m, 5m, 15m: " + String.join(", ", tpsAvg);
|
||||
+ this.msgs[2] = "TPS from last 5s, 1m, 5m, 15m: " + String.join(", ", tpsAvg); // Purpur
|
||||
// Paper end - Improve ServerGUI
|
||||
this.values[this.vp++ & 0xFF] = (int)(l * 100L / Runtime.getRuntime().maxMemory());
|
||||
this.repaint();
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
index af4fe64e190e73dcc5f2495d0b533547d8f57f1d..1af3a2c078dc802aca2297d188c5ac068e073d26 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
@@ -540,7 +540,7 @@ public class ServerChunkCache extends ChunkSource {
|
||||
//this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously
|
||||
// Gale start - MultiPaper - skip unnecessary mob spawning computations
|
||||
} else {
|
||||
- spawnercreature_d = null;
|
||||
+ lastSpawnState = null; // Leaf - Pufferfish - Optimize mob spawning
|
||||
}
|
||||
// Gale end - MultiPaper - skip unnecessary mob spawning computations
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index b9d9ef327753272a537bebccc54d9fbc16ed3bdc..f8d11853af6bfc08d1bd8a0f537fd5760bfc04be 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -843,7 +843,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
|
||||
long j;
|
||||
|
||||
- if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) {
|
||||
+ if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) { // Purpur
|
||||
// CraftBukkit start
|
||||
j = this.levelData.getDayTime() + 24000L;
|
||||
TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime());
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index a1fae61c8d238b06915037eacec2cb0943e8d996..47928af7b85543fe74ad7272286df4e8b1921426 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -568,13 +568,29 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
||||
}
|
||||
|
||||
// Purpur start - copied from Mob
|
||||
+ // Gale start - JettPack - optimize sun burn tick - cache eye blockpos
|
||||
+ private BlockPos cached_eye_blockpos;
|
||||
+ private int cached_position_hashcode;
|
||||
+ // Gale end - JettPack - optimize sun burn tick - cache eye blockpos
|
||||
+
|
||||
public boolean isSunBurnTick() {
|
||||
if (this.level().isDay() && !this.level().isClientSide) {
|
||||
- float f = this.getLightLevelDependentMagicValue();
|
||||
- BlockPos blockposition = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ());
|
||||
+ // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos
|
||||
+ int positionHashCode = this.position.hashCode();
|
||||
+ if (this.cached_position_hashcode != positionHashCode) {
|
||||
+ this.cached_eye_blockpos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ());
|
||||
+ this.cached_position_hashcode = positionHashCode;
|
||||
+ }
|
||||
+
|
||||
+ float f = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness
|
||||
+
|
||||
+ // Check brightness first
|
||||
+ if (f <= 0.5F) return false;
|
||||
+ if (this.random.nextFloat() * 30.0F >= (f - 0.4F) * 2.0F) return false;
|
||||
+ // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos
|
||||
boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow;
|
||||
|
||||
- if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level().canSeeSky(blockposition)) {
|
||||
+ if (!flag && this.level().canSeeSky(this.cached_eye_blockpos)) { // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -891,7 +907,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
||||
public void tick() {
|
||||
// Pufferfish start - entity TTL
|
||||
if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) {
|
||||
- discard();
|
||||
+ discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur
|
||||
return;
|
||||
}
|
||||
// Pufferfish end - entity TTL
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
index d06c5d16d312187b6a53c8995d524c0ec2d9f921..d55d869f0a389d58d001e59e26b1b5912b5c94a8 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -1068,17 +1068,19 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
if (entity != null) {
|
||||
EntityType<?> entitytypes = entity.getType();
|
||||
|
||||
+ // Gale start - Petal - reduce skull ItemStack lookups for reduced visibility
|
||||
// Purpur start
|
||||
- if (entitytypes == EntityType.SKELETON && itemstack.is(Items.SKELETON_SKULL)) {
|
||||
+ if (entitytypes == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL)) {
|
||||
d0 *= entity.level().purpurConfig.skeletonHeadVisibilityPercent;
|
||||
- } else if (entitytypes == EntityType.ZOMBIE && itemstack.is(Items.ZOMBIE_HEAD)) {
|
||||
+ } else if (entitytypes == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD)) {
|
||||
d0 *= entity.level().purpurConfig.zombieHeadVisibilityPercent;
|
||||
- } else if (entitytypes == EntityType.CREEPER && itemstack.is(Items.CREEPER_HEAD)) {
|
||||
+ } else if (entitytypes == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) {
|
||||
d0 *= entity.level().purpurConfig.creeperHeadVisibilityPercent;
|
||||
- } else if ((entitytypes == EntityType.PIGLIN || entitytypes == EntityType.PIGLIN_BRUTE) && itemstack.is(Items.PIGLIN_HEAD)) {
|
||||
+ } else if ((entitytypes == EntityType.PIGLIN || entitytypes == EntityType.PIGLIN_BRUTE) && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD)) {
|
||||
d0 *= entity.level().purpurConfig.piglinHeadVisibilityPercent;
|
||||
}
|
||||
// Purpur end
|
||||
+ // Gale end - Petal - reduce skull ItemStack lookups for reduced visibility
|
||||
|
||||
// Purpur start
|
||||
if (entity instanceof LivingEntity entityliving) {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
index 1f787798b6d557a2379546f9a4910a7e7a12b178..6264d70f45be0aaee26c0ed0478228ceb36614d0 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -747,7 +747,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
|
||||
@Override
|
||||
public void aiStep() {
|
||||
super.aiStep();
|
||||
- if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) {
|
||||
+ if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // Purpur
|
||||
Vec3i baseblockposition = this.getPickupReach();
|
||||
List<ItemEntity> list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ()));
|
||||
Iterator iterator = list.iterator();
|
||||
@@ -1860,11 +1860,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
|
||||
return flag;
|
||||
}
|
||||
|
||||
- // Gale start - JettPack - optimize sun burn tick - cache eye blockpos
|
||||
- private BlockPos cached_eye_blockpos;
|
||||
- private int cached_position_hashcode;
|
||||
- // Gale end - JettPack - optimize sun burn tick - cache eye blockpos
|
||||
-
|
||||
public boolean isSunBurnTick() {
|
||||
return super.isSunBurnTick();
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java
|
||||
index 7db823e9edd70808c5629f0a7efd84fe40f42dd9..833858eacaf5ba788cb9f08a939379f0ff04b2cb 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java
|
||||
@@ -20,6 +20,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
public class TradeWithVillager extends Behavior<Villager> {
|
||||
// Gale start - optimize villager data storage
|
||||
private static final Item[] WHEAT_SINGLETON_ARRAY = {Items.WHEAT};
|
||||
+ private static final Item[] NETHER_WART_SINGLETON_ARRAY = {Items.NETHER_WART}; // Leaf - sync with Gale's Optimize-villager-data-storage.patch
|
||||
private @NotNull Item @Nullable [] trades = null;
|
||||
// Gale end - optimize villager data storage
|
||||
|
||||
@@ -65,7 +66,7 @@ public class TradeWithVillager extends Behavior<Villager> {
|
||||
|
||||
// Purpur start
|
||||
if (world.purpurConfig.villagerClericsFarmWarts && world.purpurConfig.villagerClericFarmersThrowWarts && entity.getVillagerData().getProfession() == VillagerProfession.CLERIC && entity.getInventory().countItem(Items.NETHER_WART) > Items.NETHER_WART.getDefaultMaxStackSize() / 2) {
|
||||
- throwHalfStack(entity, ImmutableSet.of(Items.NETHER_WART), villager);
|
||||
+ throwHalfStack(entity, NETHER_WART_SINGLETON_ARRAY, villager); // Leaf - sync with Gale's Optimize-villager-data-storage.patch
|
||||
}
|
||||
// Purpur end
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java
|
||||
index 9419f230910d0338fc4ac6e2e7b749ee7d5ee362..2fe25397526c77c3b6b5e96d71d3681c6e26a54e 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java
|
||||
@@ -24,19 +24,15 @@ public class SecondaryPoiSensor extends Sensor<Villager> {
|
||||
|
||||
@Override
|
||||
protected void doTick(ServerLevel world, Villager entity) {
|
||||
- // Gale start - Lithium - skip secondary POI sensor if absent
|
||||
- var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi();
|
||||
- if (secondaryPoi == null) { // Gale - optimize villager data storage
|
||||
- entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE);
|
||||
- return;
|
||||
- }
|
||||
- // Gale end - Lithium - skip secondary POI sensor if absent
|
||||
// Purpur start - make sure clerics don't wander to soul sand when the option is off
|
||||
Brain<?> brain = entity.getBrain();
|
||||
- if (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC) {
|
||||
+ // Gale start - Lithium - skip secondary POI sensor if absent
|
||||
+ var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi();
|
||||
+ if (secondaryPoi == null || (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { // Gale - optimize villager data storage
|
||||
brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE);
|
||||
return;
|
||||
}
|
||||
+ // Gale end - Lithium - skip secondary POI sensor if absent
|
||||
// Purpur end
|
||||
ResourceKey<Level> resourceKey = world.dimension();
|
||||
BlockPos blockPos = entity.blockPosition();
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||
index 92521cbedcf89a855f10a3401933acaf84bc3f98..0bd72f76a65b6248f4e700877b2bda702f9590df 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||
@@ -680,7 +680,7 @@ public class ArmorStand extends LivingEntity {
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
- maxUpStep = level().purpurConfig.armorstandStepHeight;
|
||||
+ maxUpStep = level().purpurConfig.armorstandStepHeight; // Purpur
|
||||
// Paper start - Allow ArmorStands not to tick
|
||||
if (!this.canTick) {
|
||||
if (this.noTickPoseDirty) {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java
|
||||
index 27db17e19dd95e99f7bd67747eba3c3072b48ed5..4c87fa47a97a75a270a0f1332ee6aea69f9cf9c5 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java
|
||||
@@ -72,7 +72,6 @@ public class Blaze extends Monster {
|
||||
setDeltaMovement(mot.scale(0.9D));
|
||||
}
|
||||
}
|
||||
- // Purpur end
|
||||
|
||||
@Override
|
||||
public void initAttributes() {
|
||||
@@ -83,6 +82,7 @@ public class Blaze extends Monster {
|
||||
protected boolean isAlwaysExperienceDropper() {
|
||||
return this.level().purpurConfig.blazeAlwaysDropExp;
|
||||
}
|
||||
+ // Purpur end
|
||||
|
||||
@Override
|
||||
protected void registerGoals() {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java
|
||||
index 8f36f113e8eb3236ce53ad9cce320c3d6253d248..ebe79d9ad2934b53085c8a720fdfca0a6eda05ca 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java
|
||||
@@ -31,7 +31,7 @@ public record VillagerProfession(
|
||||
public static final VillagerProfession ARMORER = register("armorer", PoiTypes.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER);
|
||||
public static final VillagerProfession BUTCHER = register("butcher", PoiTypes.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER);
|
||||
public static final VillagerProfession CARTOGRAPHER = register("cartographer", PoiTypes.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER);
|
||||
- public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, ImmutableSet.of(Items.NETHER_WART), ImmutableSet.of(Blocks.SOUL_SAND), SoundEvents.VILLAGER_WORK_CLERIC); // Purpur
|
||||
+ public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, new Item[] {Items.NETHER_WART}, Blocks.SOUL_SAND, SoundEvents.VILLAGER_WORK_CLERIC); // Purpur // Leaf - sync with Gale's Optimize-villager-data-storage.patch
|
||||
public static final VillagerProfession FARMER = register(
|
||||
"farmer",
|
||||
PoiTypes.FARMER,
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
||||
index 330d6badfbd096e4aec873dcb419df7975cb60a3..abb950417bf5db30f37e50605e897150bba67352 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
||||
@@ -71,7 +71,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
||||
int maxChunkLoadsPerProjectile = maxProjectileChunkLoadsConfig.perProjectile.max;
|
||||
if (maxChunkLoadsPerProjectile >= 0 && this.chunksLoadedByProjectile >= maxChunkLoadsPerProjectile) {
|
||||
if (maxProjectileChunkLoadsConfig.perProjectile.removeFromWorldAfterReachLimit) {
|
||||
- this.discard();
|
||||
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur
|
||||
} else if (maxProjectileChunkLoadsConfig.perProjectile.resetMovementAfterReachLimit) {
|
||||
this.setDeltaMovement(0, this.getDeltaMovement().y, 0);
|
||||
}
|
||||
diff --git a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
|
||||
index 7fee1c2779ab390586b2d3f75f56890846323500..5fdb227acfd1d8f55b770c8a66e97494c36db33c 100644
|
||||
--- a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
|
||||
+++ b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
|
||||
@@ -68,7 +68,7 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher {
|
||||
// Gale end - branding changes - version fetcher
|
||||
final Component history = getHistory();
|
||||
|
||||
- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage;
|
||||
+ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur
|
||||
}
|
||||
|
||||
protected @Nullable String getMinecraftVersion() { // Gale - branding changes - version fetcher
|
||||
@@ -120,13 +120,13 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher {
|
||||
|
||||
switch (distance) {
|
||||
case -1:
|
||||
- return Component.text("Error obtaining version information", NamedTextColor.YELLOW);
|
||||
+ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur
|
||||
case 0:
|
||||
- return Component.text("You are running the latest version", NamedTextColor.GREEN);
|
||||
+ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur
|
||||
case -2:
|
||||
- return Component.text("Unknown version", NamedTextColor.YELLOW);
|
||||
+ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur
|
||||
default:
|
||||
- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW)
|
||||
+ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur
|
||||
.append(Component.newline())
|
||||
.append(Component.text("Download the new version at: ")
|
||||
.append(Component.text(this.downloadPage, NamedTextColor.GOLD) // Gale - branding changes - version fetcher
|
||||
@@ -174,6 +174,6 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher {
|
||||
return null;
|
||||
}
|
||||
|
||||
- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC);
|
||||
+ return org.bukkit.ChatColor.parseMM("<grey>Previous: %s", oldVersion); // Purpur
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user