Skip to content

Commit

Permalink
[ci skip] Add configurable max item stack count (#101)
Browse files Browse the repository at this point in the history
* Add configurable items

* del

* Fix the configuration name and logic of the previous patch
  • Loading branch information
FallingKey authored Sep 16, 2024
1 parent ee6983a commit 75fd4e2
Show file tree
Hide file tree
Showing 2 changed files with 313 additions and 0 deletions.
172 changes: 172 additions & 0 deletions patches/server/0099-Change-max-stack-count.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: FallingKey <FallingKey@Outlook.com>
Date: Sun, 11 Aug 2024 14:20:37 +0800
Subject: [PATCH] Change max stack count


diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index 3a27ef6da3d189f4f2211c9929dc1334790ab281..14eea6498e04f34a518988c978f27600715fe098 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -351,7 +351,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
private boolean isMergable() {
ItemStack itemstack = this.getItem();

- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate
+ // Leaf start - Change max stack count
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier; // Paper - Alternative item-despawn-rate
+ } else {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count; // Paper - Alternative item-despawn-rate
+ }
+ // Leaf end - Change max stack count
}

private void tryToMerge(ItemEntity other) {
@@ -369,11 +375,24 @@ public class ItemEntity extends Entity implements TraceableEntity {
}

public static boolean areMergable(ItemStack stack1, ItemStack stack2) {
- return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ // Leaf start - Change max stack count
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
+ return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ } else {
+ return stack2.getCount() + stack1.getCount() > org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ }
+ // Leaf end - Change max stack count
}

public static ItemStack merge(ItemStack stack1, ItemStack stack2, int maxCount) {
- int j = Math.min(Math.min(stack1.getMaxStackSize(), maxCount) - stack1.getCount(), stack2.getCount());
+ // Leaf start - Change max stack count
+ int j;
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
+ j = Math.min(Math.min(stack1.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier, maxCount) - stack1.getCount(), stack2.getCount());
+ } else {
+ j = Math.min(Math.min(org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count, maxCount) - stack1.getCount(), stack2.getCount());
+ }
+ // Leaf end - Change max stack count
ItemStack itemstack2 = stack1.copyWithCount(stack1.getCount() + j);

stack2.shrink(j);
@@ -381,7 +400,14 @@ public class ItemEntity extends Entity implements TraceableEntity {
}

private static void merge(ItemEntity targetEntity, ItemStack stack1, ItemStack stack2) {
- ItemStack itemstack2 = ItemEntity.merge(stack1, stack2, 64);
+ // Leaf start - Change max stack count
+ ItemStack itemstack2;
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
+ itemstack2 = ItemEntity.merge(stack1, stack2, 64);
+ } else {
+ itemstack2 = ItemEntity.merge(stack1, stack2, org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count);
+ }
+ // Leaf end - Change max stack count

targetEntity.setItem(itemstack2);
}
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index 7572c289758001c7417a192f0e6e994ffa8408b3..0e5fd0ba84bb139f23fc02482d54e5be582ced3c 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -34,6 +34,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import org.bukkit.event.block.BlockCanBuildEvent;
+import org.dreeam.leaf.config.modules.gameplay.MaxStackCount;
// CraftBukkit end

public class BlockItem extends Item {
@@ -269,8 +270,20 @@ public class BlockItem extends Item {
ItemContainerContents itemcontainercontents = (ItemContainerContents) entity.getItem().set(DataComponents.CONTAINER, ItemContainerContents.EMPTY);

if (itemcontainercontents != null) {
- if (entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed && entity.getItem().is(Items.SHULKER_BOX)) // Purpur
- ItemUtils.onContainerDestroyed(entity, itemcontainercontents.nonEmptyItemsCopy());
+ // Leaf start - Change max stack count
+ if (entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed) { // Purpur
+ if (MaxStackCount.count < 1) {
+ ItemUtils.onContainerDestroyed(entity, itemcontainercontents.nonEmptyItemsCopy());
+ } else {
+ Level level = entity.level();
+ if (!level.isClientSide) {
+ for (int Count = Math.min(entity.getItem().getCount(), org.dreeam.leaf.config.modules.gameplay.MaxContainerDestroy.count); Count > 0; Count = Count - 1) {
+ itemcontainercontents.nonEmptyItemsCopy().forEach(stack -> level.addFreshEntity(new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), stack)));
+ }
+ }
+ }
+ }
+ // Leaf end - Change max stack count
}

}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
new file mode 100644
index 0000000000000000000000000000000000000000..503f80ed917302abdf0ab14c13ce61d14c4b4adc
--- /dev/null
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
@@ -0,0 +1,17 @@
+package org.dreeam.leaf.config.modules.gameplay;
+
+import org.dreeam.leaf.config.ConfigModules;
+import org.dreeam.leaf.config.EnumConfigCategory;
+
+public class ItemStackMultiplier extends ConfigModules {
+ public String getBasePath() {
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".item-stack-multiplier";
+ }
+
+ public static int multiplier = 1;
+
+ @Override
+ public void onLoaded() {
+ multiplier = config.getInt(getBasePath(), multiplier);
+ }
+}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxContainerDestroy.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxContainerDestroy.java
new file mode 100644
index 0000000000000000000000000000000000000000..254ce472cb872323fdd86ded689268e439b46d0d
--- /dev/null
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxContainerDestroy.java
@@ -0,0 +1,17 @@
+package org.dreeam.leaf.config.modules.gameplay;
+
+import org.dreeam.leaf.config.ConfigModules;
+import org.dreeam.leaf.config.EnumConfigCategory;
+
+public class MaxContainerDestroy extends ConfigModules {
+ public String getBasePath() {
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".max-container-destroy";
+ }
+
+ public static int count = 32767;
+
+ @Override
+ public void onLoaded() {
+ count = config.getInt(getBasePath(), count);
+ }
+}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
new file mode 100644
index 0000000000000000000000000000000000000000..01208acaac7ef34a4f6dff51a208ed66d2d28079
--- /dev/null
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
@@ -0,0 +1,17 @@
+package org.dreeam.leaf.config.modules.gameplay;
+
+import org.dreeam.leaf.config.ConfigModules;
+import org.dreeam.leaf.config.EnumConfigCategory;
+
+public class MaxStackCount extends ConfigModules {
+ public String getBasePath() {
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".change-max-stack-count";
+ }
+
+ public static int count = 0;
+
+ @Override
+ public void onLoaded() {
+ count = config.getInt(getBasePath(), count);
+ }
+}
141 changes: 141 additions & 0 deletions patches/server/0100-Add-configurable-items.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: FallingKey <FallingKey@Outlook.com>
Date: Wed, 14 Aug 2024 00:28:48 +0800
Subject: [PATCH] Add configurable items


diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index 14eea6498e04f34a518988c978f27600715fe098..023f4133c802ff0b0cdaf7b2730e09a786be8872 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -352,10 +352,10 @@ public class ItemEntity extends Entity implements TraceableEntity {
ItemStack itemstack = this.getItem();

// Leaf start - Change max stack count
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier; // Paper - Alternative item-despawn-rate
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count < 1) {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate
} else {
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count; // Paper - Alternative item-despawn-rate
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count; // Paper - Alternative item-despawn-rate
}
// Leaf end - Change max stack count
}
@@ -376,10 +376,10 @@ public class ItemEntity extends Entity implements TraceableEntity {

public static boolean areMergable(ItemStack stack1, ItemStack stack2) {
// Leaf start - Change max stack count
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
- return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count == 0) {
+ return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
} else {
- return stack2.getCount() + stack1.getCount() > org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ return stack2.getCount() + stack1.getCount() > org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
}
// Leaf end - Change max stack count
}
@@ -387,10 +387,10 @@ public class ItemEntity extends Entity implements TraceableEntity {
public static ItemStack merge(ItemStack stack1, ItemStack stack2, int maxCount) {
// Leaf start - Change max stack count
int j;
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
- j = Math.min(Math.min(stack1.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier, maxCount) - stack1.getCount(), stack2.getCount());
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count == 0) {
+ j = Math.min(Math.min(stack1.getMaxStackSize(), maxCount) - stack1.getCount(), stack2.getCount());
} else {
- j = Math.min(Math.min(org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count, maxCount) - stack1.getCount(), stack2.getCount());
+ j = Math.min(Math.min(org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count, maxCount) - stack1.getCount(), stack2.getCount());
}
// Leaf end - Change max stack count
ItemStack itemstack2 = stack1.copyWithCount(stack1.getCount() + j);
@@ -402,10 +402,10 @@ public class ItemEntity extends Entity implements TraceableEntity {
private static void merge(ItemEntity targetEntity, ItemStack stack1, ItemStack stack2) {
// Leaf start - Change max stack count
ItemStack itemstack2;
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count < 1) {
itemstack2 = ItemEntity.merge(stack1, stack2, 64);
} else {
- itemstack2 = ItemEntity.merge(stack1, stack2, org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count);
+ itemstack2 = ItemEntity.merge(stack1, stack2, org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count);
}
// Leaf end - Change max stack count

diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index 0e5fd0ba84bb139f23fc02482d54e5be582ced3c..0b6c6e3ed65552ee8b1feb9bb1c6669fbf130df9 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -34,7 +34,6 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import org.bukkit.event.block.BlockCanBuildEvent;
-import org.dreeam.leaf.config.modules.gameplay.MaxStackCount;
// CraftBukkit end

public class BlockItem extends Item {
@@ -272,16 +271,13 @@ public class BlockItem extends Item {
if (itemcontainercontents != null) {
// Leaf start - Change max stack count
if (entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed) { // Purpur
- if (MaxStackCount.count < 1) {
- ItemUtils.onContainerDestroyed(entity, itemcontainercontents.nonEmptyItemsCopy());
- } else {
- Level level = entity.level();
- if (!level.isClientSide) {
- for (int Count = Math.min(entity.getItem().getCount(), org.dreeam.leaf.config.modules.gameplay.MaxContainerDestroy.count); Count > 0; Count = Count - 1) {
- itemcontainercontents.nonEmptyItemsCopy().forEach(stack -> level.addFreshEntity(new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), stack)));
- }
+ Level level = entity.level();
+ if (!level.isClientSide) {
+ for (int Count = Math.min(entity.getItem().getCount(), org.dreeam.leaf.config.modules.gameplay.MaxContainerDestroy.count); Count > 0; Count = Count - 1) {
+ itemcontainercontents.nonEmptyItemsCopy().forEach(stack -> level.addFreshEntity(new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), stack)));
}
}
+
}
// Leaf end - Change max stack count
}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
deleted file mode 100644
index 503f80ed917302abdf0ab14c13ce61d14c4b4adc..0000000000000000000000000000000000000000
--- a/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.dreeam.leaf.config.modules.gameplay;
-
-import org.dreeam.leaf.config.ConfigModules;
-import org.dreeam.leaf.config.EnumConfigCategory;
-
-public class ItemStackMultiplier extends ConfigModules {
- public String getBasePath() {
- return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".item-stack-multiplier";
- }
-
- public static int multiplier = 1;
-
- @Override
- public void onLoaded() {
- multiplier = config.getInt(getBasePath(), multiplier);
- }
-}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxEntityItemsStackCount.java
similarity index 80%
rename from src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
rename to src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxEntityItemsStackCount.java
index 01208acaac7ef34a4f6dff51a208ed66d2d28079..858a41df2c29d1f87652dc3a49c739da453294ec 100644
--- a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxEntityItemsStackCount.java
@@ -3,9 +3,9 @@ package org.dreeam.leaf.config.modules.gameplay;
import org.dreeam.leaf.config.ConfigModules;
import org.dreeam.leaf.config.EnumConfigCategory;

-public class MaxStackCount extends ConfigModules {
+public class MaxEntityItemsStackCount extends ConfigModules {
public String getBasePath() {
- return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".change-max-stack-count";
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".max-entity-items-stack-count";
}

public static int count = 0;

0 comments on commit 75fd4e2

Please sign in to comment.