gpt4 book ai didi

java - 我在滥用静电吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:05:21 26 4
gpt4 key购买 nike

为了将玩家伪装成另一个实体,我做了一个伪装类,你可以在这里看到:

public class Disguise
{
private static HashSet<Disguise> disguises = new HashSet<>();
private net.minecraft.server.v1_8_R2.EntityLiving nmsEntity;
private Player disguise;

public Disguise(Player disguise, EntityLiving entity, boolean affectLogin)
{
if(affectLogin)
disguises.add(this);

this.disguise = disguise;
this.nmsEntity = entity;
}

public Disguise(Player disguise, EntityLiving entity)
{
this(disguise, entity, true);
}

public void send(Player visible)
{
if(visible == disguise)
return;

EntityPlayer player = NMSUtils.getNMSPlayer(visible);

nmsEntity.setPosition(player.locX, player.locY, player.locZ);
nmsEntity.d(disguise.getEntityId());
nmsEntity.setCustomName(disguise.getDisplayName());
nmsEntity.setCustomNameVisible(true);

PacketPlayOutSpawnEntityLiving spawn = new PacketPlayOutSpawnEntityLiving(nmsEntity);
PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(disguise.getEntityId());

player.playerConnection.sendPacket(destroy);
player.playerConnection.sendPacket(spawn);
}

public void send(List<Player> visible)
{
for(Player player : visible)
send(player);
}

public void send(Player... visible)
{
send(Arrays.asList(visible));
}

public void send()
{
send(new ArrayList<>(Bukkit.getOnlinePlayers()));
}

public Player getDisguised()
{
return disguise;
}

public static HashSet<Disguise> getDisguises()
{
return disguises;
}
}

我还有一个静态 HashSet,它存储所有创建的实例。我这样做是因为我希望登录的玩家也能看到伪装,并且我想在玩家注销时从玩家身上移除伪装。静态 HashSet 是这样做的方式吗(就像我正在做的那样)?如果没有,应该怎么做?

最佳答案

static 要求它。从本质上讲,它很容易被“滥用”,但这只是挑战的一部分。

归根结底,如果您的 mod 完成了您需要它做的事情而没有错误,请不要过分强调这种粒度级别(特定变量)的最佳实践。它不太可能扩展到糟糕的设计会给您带来问题的程度。毕竟,它不是生命维持系统。

如果您想练习良好的形式以获得乐趣,我的第一直觉是将您的管理逻辑从伪装转移到(例如)DisguiseManager 类,并通过管理器类处理所有伪装的创建/销毁。不那么复杂的是伪装上的私有(private)构造函数和静态创建/销毁方法。像您发布的构造函数中的全局副作用通常是错误的形式。

关于java - 我在滥用静电吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30306868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com