Skip to content

Commit 9b94690

Browse files
BillyGalbreathgranny
authored andcommitted
Sneak to bulk process composter
1 parent dd22eee commit 9b94690

4 files changed

Lines changed: 82 additions & 104 deletions

File tree

patches/server/0137-Sneak-to-bulk-process-composter.patch

Lines changed: 0 additions & 104 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
2+
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
3+
@@ -506,7 +_,7 @@
4+
boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty();
5+
boolean flag1 = player.isSecondaryUseActive() && flag;
6+
ItemStack itemStack = stack.copy();
7+
- if (!flag1) {
8+
+ if (!flag1 || (player.level().purpurConfig.composterBulkProcess && blockState.is(net.minecraft.world.level.block.Blocks.COMPOSTER))) { // Purpur - Sneak to bulk process composter
9+
InteractionResult interactionResult = blockState.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult);
10+
if (interactionResult.consumesAction()) {
11+
CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockPos, itemStack);
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
--- a/net/minecraft/world/level/block/ComposterBlock.java
2+
+++ b/net/minecraft/world/level/block/ComposterBlock.java
3+
@@ -241,23 +_,52 @@
4+
) {
5+
int levelValue = state.getValue(LEVEL);
6+
if (levelValue < 8 && COMPOSTABLES.containsKey(stack.getItem())) {
7+
- if (levelValue < 7 && !level.isClientSide) {
8+
- BlockState blockState = addItem(player, state, level, pos, stack);
9+
- // Paper start - handle cancelled events
10+
- if (blockState == null) {
11+
- return InteractionResult.PASS;
12+
- }
13+
- // Paper end
14+
- level.levelEvent(1500, pos, state != blockState ? 1 : 0);
15+
- player.awardStat(Stats.ITEM_USED.get(stack.getItem()));
16+
- stack.consume(1, player);
17+
- }
18+
+ // Purpur start - sneak to bulk process composter
19+
+ BlockState newState = process(levelValue, player, state, level, pos, stack);
20+
+ if (newState == null) {
21+
+ return InteractionResult.PASS;
22+
+ }
23+
+ if (level.purpurConfig.composterBulkProcess && player.isShiftKeyDown() && newState != state) {
24+
+ BlockState oldState;
25+
+ int oldCount, newCount, oldLevel, newLevel;
26+
+ do {
27+
+ oldState = newState;
28+
+ oldCount = stack.getCount();
29+
+ oldLevel = oldState.getValue(ComposterBlock.LEVEL);
30+
+ newState = process(oldLevel, player, oldState, level, pos, stack);
31+
+ if (newState == null) {
32+
+ return InteractionResult.PASS;
33+
+ }
34+
+ newCount = stack.getCount();
35+
+ newLevel = newState.getValue(ComposterBlock.LEVEL);
36+
+ } while (newCount > 0 && (newCount != oldCount || newLevel != oldLevel || newState != oldState));
37+
+ }
38+
+ // Purpur end - Sneak to bulk process composter
39+
40+
return InteractionResult.SUCCESS;
41+
} else {
42+
return super.useItemOn(stack, state, level, pos, player, hand, hitResult);
43+
}
44+
}
45+
+
46+
+ // Purpur start - sneak to bulk process composter
47+
+ private static @Nullable BlockState process(int levelValue, Player player, BlockState state, Level level, BlockPos pos, ItemStack stack) {
48+
+ if (levelValue < 7 && !level.isClientSide) {
49+
+ BlockState iblockdata1 = ComposterBlock.addItem(player, state, level, pos, stack);
50+
+ // Paper start - handle cancelled events
51+
+ if (iblockdata1 == null) {
52+
+ return null;
53+
+ }
54+
+ // Paper end
55+
+
56+
+ level.levelEvent(1500, pos, state != iblockdata1 ? 1 : 0);
57+
+ player.awardStat(Stats.ITEM_USED.get(stack.getItem()));
58+
+ stack.consume(1, player);
59+
+ return iblockdata1;
60+
+ }
61+
+ return state;
62+
+ }
63+
+ // Purpur end - Sneak to bulk process composter
64+
65+
@Override
66+
protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {

purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,11 @@ private void chestSettings() {
433433
chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop);
434434
}
435435

436+
public boolean composterBulkProcess = false;
437+
private void composterSettings() {
438+
composterBulkProcess = getBoolean("blocks.composter.sneak-to-bulk-process", composterBulkProcess);
439+
}
440+
436441
public boolean dispenserApplyCursedArmor = true;
437442
public boolean dispenserPlaceAnvils = false;
438443
private void dispenserSettings() {

0 commit comments

Comments
 (0)