调整重复检测方法位置

This commit is contained in:
17146 2025-06-03 16:48:25 +08:00 committed by Light_Quanta
parent 0333ee50eb
commit 600a7c55b5
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
2 changed files with 92 additions and 92 deletions

View file

@ -50,6 +50,7 @@ import net.neoforged.neoforge.network.PacketDistributor;
import java.util.ArrayList;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Stream;
@EventBusSubscriber
@ -324,14 +325,16 @@ public class LivingEventHandler {
var laserCap = player.getCapability(ModCapabilities.LASER_CAPABILITY);
if (laserCap != null) laserCap.stop();
var oldTag = NBTTool.getTag(oldStack);
var newTag = NBTTool.getTag(newStack);
if (player instanceof ServerPlayer serverPlayer
&& (newStack.getItem() != oldStack.getItem()
if (player instanceof ServerPlayer serverPlayer) {
if (newStack.getItem() instanceof GunItem) {
checkCopyGuns(newStack, player);
}
if (newStack.getItem() != oldStack.getItem()
|| (newStack.getItem() instanceof GunItem && !GunData.from(newStack).initialized())
|| (oldStack.getItem() instanceof GunItem && !GunData.from(oldStack).initialized())
|| (newStack.getItem() instanceof GunItem && oldStack.getItem() instanceof GunItem && !Objects.equals(GunsTool.getGunUUID(newTag), GunsTool.getGunUUID(oldTag)))
)) {
|| (oldStack.getItem() instanceof GunItem && !GunData.from(newStack).initialized())
|| (newStack.getItem() instanceof GunItem && oldStack.getItem() instanceof GunItem && !Objects.equals(GunsTool.getGunUUID(NBTTool.getTag(newStack)), GunsTool.getGunUUID(NBTTool.getTag(oldStack))))
) {
if (oldStack.getItem() instanceof GunItem oldGun) {
stopGunReloadSound(serverPlayer, oldGun);
@ -403,6 +406,28 @@ public class LivingEventHandler {
}
}
}
}
private static void checkCopyGuns(ItemStack stack, Player player) {
var data = GunData.from(stack);
if (!data.initialized()) return;
if (data.data == null) return;
var uuid = data.data.getUUID("UUID");
for (var item : player.getInventory().items) {
if (item.equals(stack)) continue;
if (item.getItem() instanceof GunItem) {
var itemData = GunData.from(item);
var dataTag = itemData.data;
if (dataTag == null) continue;
if (!dataTag.hasUUID("UUID")) continue;
if (dataTag.getUUID("UUID").equals(uuid)) {
data.data.putUUID("UUID", UUID.randomUUID());
return;
}
}
}
}
private static void stopGunReloadSound(ServerPlayer player, GunItem gun) {
gun.getReloadSound().forEach(sound -> {

View file

@ -108,27 +108,6 @@ public abstract class GunItem extends Item implements CustomRendererItem, GeoIte
return false;
}
private void checkCopyGuns(ItemStack stack, Player player) {
var data = GunData.from(stack);
if (!data.initialized()) return;
if (data.data == null) return;
var uuid = data.data.getUUID("UUID");
for (var item : player.getInventory().items) {
if (item.equals(stack)) continue;
if (item.getItem() instanceof GunItem) {
var itemData = GunData.from(item);
var dataTag = itemData.data;
if (dataTag == null) continue;
if (!dataTag.hasUUID("UUID")) continue;
if (dataTag.getUUID("UUID").equals(uuid)) {
data.data.putUUID("UUID", UUID.randomUUID());
return;
}
}
}
}
@Override
@ParametersAreNonnullByDefault
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
@ -140,10 +119,6 @@ public abstract class GunItem extends Item implements CustomRendererItem, GeoIte
var data = GunData.from(stack);
if (living instanceof Player player && selected) {
checkCopyGuns(stack, player);
}
if (!data.initialized()) {
data.initialize();
if (level.getServer() != null && entity instanceof Player player && player.isCreative()) {