mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-23 08:59:23 +00:00
97 lines
4.4 KiB
Diff
97 lines
4.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: wangxyper <wangxyper@163.com>
|
|
Date: Mon, 9 Jan 2023 12:40:56 +0800
|
|
Subject: [PATCH] Hearse: Fix some problems in ItemEntity
|
|
|
|
Original license: MIT
|
|
Original project: https://github.com/NaturalCodeClub/HearseRewrite
|
|
|
|
diff --git a/src/main/java/co/earthme/hearse/HearseConfig.java b/src/main/java/co/earthme/hearse/HearseConfig.java
|
|
index 912da4787f83f656da67e9533b60183c17e6c345..0a1de52bcdf675b9bfcbf14d39959818a7a0cbbb 100644
|
|
--- a/src/main/java/co/earthme/hearse/HearseConfig.java
|
|
+++ b/src/main/java/co/earthme/hearse/HearseConfig.java
|
|
@@ -1,4 +1,5 @@
|
|
package co.earthme.hearse;
|
|
|
|
public class HearseConfig {
|
|
+
|
|
}
|
|
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 c58496c84b2b3f86890050813041fa49711f3a01..3e8b68b4390a6086b1b1983fe6f8b545c2847ef8 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
|
@@ -4,6 +4,8 @@ import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.UUID;
|
|
+import java.util.concurrent.locks.Lock;
|
|
+import java.util.concurrent.locks.ReentrantLock;
|
|
import javax.annotation.Nullable;
|
|
import net.minecraft.world.damagesource.DamageSource;
|
|
import net.minecraft.world.entity.Entity;
|
|
@@ -239,21 +241,24 @@ public class ItemEntity extends Entity {
|
|
this.setDeltaMovement(vec3d.x * 0.949999988079071D, vec3d.y + (double) (vec3d.y < 0.05999999865889549D ? 5.0E-4F : 0.0F), vec3d.z * 0.949999988079071D);
|
|
}
|
|
|
|
+ private final Lock mergeLock = new ReentrantLock();
|
|
+
|
|
private void mergeWithNeighbours() {
|
|
- if (this.isMergable()) {
|
|
- // Spigot start
|
|
- double radius = level.spigotConfig.itemMerge;
|
|
- List<ItemEntity> list = this.level.getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate(radius, radius - 0.5D, radius), (entityitem) -> {
|
|
- // Spigot end
|
|
- return entityitem != this && entityitem.isMergable();
|
|
- });
|
|
- Iterator iterator = list.iterator();
|
|
-
|
|
- while (iterator.hasNext()) {
|
|
- ItemEntity entityitem = (ItemEntity) iterator.next();
|
|
-
|
|
- if (entityitem.isMergable()) {
|
|
- // Paper Start - Fix items merging through walls
|
|
+ if (!this.mergeLock.tryLock()){
|
|
+ return;
|
|
+ }
|
|
+ try {
|
|
+ if (this.isMergable()) {
|
|
+ // Spigot start
|
|
+ double radius = level.spigotConfig.itemMerge;
|
|
+ List<ItemEntity> list = this.level.getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate(radius, radius - 0.5D, radius), (entityitem) -> {
|
|
+ // Spigot end
|
|
+ return entityitem != this && entityitem.isMergable();
|
|
+ });
|
|
+
|
|
+ for (ItemEntity entityitem : list) {
|
|
+ if (entityitem.isMergable()) {
|
|
+ // Paper Start - Fix items merging through walls
|
|
if (this.level.paperConfig().fixes.fixItemsMergingThroughWalls) {
|
|
// Pufferfish start - skip the allocations
|
|
/*
|
|
@@ -263,17 +268,19 @@ public class ItemEntity extends Entity {
|
|
if (rayTraceResult.getType() == net.minecraft.world.phys.HitResult.Type.BLOCK) continue;
|
|
*/
|
|
if (level.rayTraceDirect(this.position(), entityitem.position(), net.minecraft.world.phys.shapes.CollisionContext.of(this)) ==
|
|
- net.minecraft.world.phys.HitResult.Type.BLOCK) continue;
|
|
+ net.minecraft.world.phys.HitResult.Type.BLOCK) continue;
|
|
// Pufferfish end
|
|
}
|
|
- // Paper End
|
|
- this.tryToMerge(entityitem);
|
|
- if (this.isRemoved()) {
|
|
- break;
|
|
+ // Paper End
|
|
+ this.tryToMerge(entityitem);
|
|
+ if (this.isRemoved()) {
|
|
+ break;
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
-
|
|
+ }finally {
|
|
+ this.mergeLock.unlock();
|
|
}
|
|
}
|
|
|