Files
Purpur/patches/server/0154-Sneak-to-bulk-process-composter.patch
granny 5424457174 Updated Upstream (Paper & Pufferfish)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@c7d4c01 Ignore invalid jars inside of the updates folder (Fixes #7751)
PaperMC/Paper@4ecc338 WorldCreator#keepSpawnLoaded (#7673)
PaperMC/Paper@873bfa6 Remove World#refreshChunk deprecation (#7684)
PaperMC/Paper@76ed156 Grant temporary immunity from EAR to moving entities (Fixes #7637) (#7644)
PaperMC/Paper@567fce6 Don't apply previous potion when item is potion (fixes #7756) (#7757)
PaperMC/Paper@c449f6a Build updates
PaperMC/Paper@ef6a1a5 Revert to old createProfile(UUID, String) logic (#7723)
PaperMC/Paper@0f8aa4e Fix NPE for BlockDataMeta#getBlockData (#7670)
PaperMC/Paper@16f224a Trigger bee_nest_destroyed trigger in the correct place (#7436)
PaperMC/Paper@caf4a6f Remove or replace a few dumb deprecations (#7760)
PaperMC/Paper@47f43da Add missing javadoc deprecation msgs for PlayerProfile (#7688)
PaperMC/Paper@fbbc03a Add EntityDyeEvent and CollarColorable interface (#7625)
PaperMC/Paper@5b85ee3 Fire CauldronLevelChange on initial fill (#7678)
PaperMC/Paper@4dc78ae Fix some team color docs and added hasColor (#7602)
PaperMC/Paper@0bf7c95 Fix opening inv in PlayerRecipeBookClickEvent handler (#7552)
PaperMC/Paper@d70ac03 fix powder snow cauldrons not turning to water (#7229)
PaperMC/Paper@ce059b4 Fix V1451 dataconverter stat types

Pufferfish Changes:
pufferfish-gg/Pufferfish@52e42d7 Updated Upstream (Paper)
pufferfish-gg/Pufferfish@7b760fe Fix method profiler config
pufferfish-gg/Pufferfish@65a83aa Updated Upstream (Paper)
2022-04-27 02:02:01 -07:00

93 lines
5.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sun, 21 Mar 2021 15:49:15 -0500
Subject: [PATCH] Sneak to bulk process composter
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
index 415b6c2bbf11c5a2ac75d18f52b93f80b9e14fe4..a0e5ec1a3129fdb4facfbef936b68c43d2d2f710 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -603,7 +603,7 @@ public class ServerPlayerGameMode {
boolean flag1 = player.isSecondaryUseActive() && flag;
ItemStack itemstack1 = stack.copy();
- if (!flag1) {
+ if (!flag1 || (player.level.purpurConfig.composterBulkProcess && iblockdata.is(Blocks.COMPOSTER))) { // Purpur
enuminteractionresult = iblockdata.use(world, player, hand, hitResult);
if (enuminteractionresult.consumesAction()) {
diff --git a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java
index fb8b8a9733ac50096d8406487ab1ae167ef5f7b1..16598ca0fd953b6af98dfcdb6716e2e128d14bab 100644
--- a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java
@@ -217,16 +217,21 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
ItemStack itemstack = player.getItemInHand(hand);
if (i < 8 && ComposterBlock.COMPOSTABLES.containsKey(itemstack.getItem())) {
- if (i < 7 && !world.isClientSide) {
- BlockState iblockdata1 = ComposterBlock.addItem(state, world, pos, itemstack);
-
- world.levelEvent(1500, pos, state != iblockdata1 ? 1 : 0);
- player.awardStat(Stats.ITEM_USED.get(itemstack.getItem()));
- if (!player.getAbilities().instabuild) {
- itemstack.shrink(1);
- }
+ // Purpur start
+ BlockState newState = process(i, state, world, itemstack, pos, player);
+ if (world.purpurConfig.composterBulkProcess && player.isShiftKeyDown()) {
+ BlockState oldState;
+ int oldCount, newCount, oldLevel, newLevel;
+ do {
+ oldState = newState;
+ oldCount = itemstack.getCount();
+ oldLevel = oldState.getValue(ComposterBlock.LEVEL);
+ newState = process(oldLevel, oldState, world, itemstack, pos, player);
+ newCount = itemstack.getCount();
+ newLevel = newState.getValue(ComposterBlock.LEVEL);
+ } while (newCount > 0 && (newCount != oldCount || newLevel != oldLevel || newState != oldState));
}
-
+ // Purpur end
return InteractionResult.sidedSuccess(world.isClientSide);
} else if (i == 8) {
ComposterBlock.extractProduce(state, world, pos, (Entity) null); // CraftBukkit - no event for players
@@ -236,6 +241,21 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
}
}
+ // Purpur start
+ private static BlockState process(int level, BlockState state, Level world, ItemStack itemstack, BlockPos pos, Player player) {
+ if (level < 7) {
+ BlockState state1 = ComposterBlock.addItem(state, world, pos, itemstack);
+ world.levelEvent(1500, pos, state != state1 ? 1 : 0);
+ player.awardStat(Stats.ITEM_USED.get(itemstack.getItem()));
+ if (!player.getAbilities().instabuild) {
+ itemstack.shrink(1);
+ }
+ return state1;
+ }
+ return state;
+ }
+ // Purpur end
+
public static BlockState insertItem(BlockState iblockdata, ServerLevel worldserver, ItemStack itemstack, BlockPos blockposition, Entity entity) { // CraftBukkit
int i = (Integer) iblockdata.getValue(ComposterBlock.LEVEL);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index fb16a3541c86f73ea4922baa4e34788ee3c9112d..7a7fbc0f8d5f6e40c209666a83de9f7371f3e4d3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -462,6 +462,11 @@ public class PurpurWorldConfig {
chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop);
}
+ public boolean composterBulkProcess = false;
+ private void composterSettings() {
+ composterBulkProcess = getBoolean("blocks.composter.sneak-to-bulk-process", composterBulkProcess);
+ }
+
public boolean dispenserApplyCursedArmor = true;
public boolean dispenserPlaceAnvils = false;
private void dispenserSettings() {