调整重复检测方法位置

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.ArrayList;
import java.util.Objects; import java.util.Objects;
import java.util.UUID;
import java.util.stream.Stream; import java.util.stream.Stream;
@EventBusSubscriber @EventBusSubscriber
@ -324,14 +325,16 @@ public class LivingEventHandler {
var laserCap = player.getCapability(ModCapabilities.LASER_CAPABILITY); var laserCap = player.getCapability(ModCapabilities.LASER_CAPABILITY);
if (laserCap != null) laserCap.stop(); if (laserCap != null) laserCap.stop();
var oldTag = NBTTool.getTag(oldStack); if (player instanceof ServerPlayer serverPlayer) {
var newTag = NBTTool.getTag(newStack); if (newStack.getItem() instanceof GunItem) {
if (player instanceof ServerPlayer serverPlayer checkCopyGuns(newStack, player);
&& (newStack.getItem() != oldStack.getItem() }
if (newStack.getItem() != oldStack.getItem()
|| (newStack.getItem() instanceof GunItem && !GunData.from(newStack).initialized()) || (newStack.getItem() instanceof GunItem && !GunData.from(newStack).initialized())
|| (oldStack.getItem() instanceof GunItem && !GunData.from(oldStack).initialized()) || (oldStack.getItem() instanceof GunItem && !GunData.from(newStack).initialized())
|| (newStack.getItem() instanceof GunItem && oldStack.getItem() instanceof GunItem && !Objects.equals(GunsTool.getGunUUID(newTag), GunsTool.getGunUUID(oldTag))) || (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) { if (oldStack.getItem() instanceof GunItem oldGun) {
stopGunReloadSound(serverPlayer, 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) { private static void stopGunReloadSound(ServerPlayer player, GunItem gun) {
gun.getReloadSound().forEach(sound -> { gun.getReloadSound().forEach(sound -> {

View file

@ -108,27 +108,6 @@ public abstract class GunItem extends Item implements CustomRendererItem, GeoIte
return false; 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 @Override
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) { 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); var data = GunData.from(stack);
if (living instanceof Player player && selected) {
checkCopyGuns(stack, player);
}
if (!data.initialized()) { if (!data.initialized()) {
data.initialize(); data.initialize();
if (level.getServer() != null && entity instanceof Player player && player.isCreative()) { if (level.getServer() != null && entity instanceof Player player && player.isCreative()) {