Billy12345 发表于 2020-4-2 11:06
读取实体的UUID,在客户端根据UUID找到这个实体
- @SubscribeEvent
- public void onUseItem(RightClickItem event) {
- EntityLivingBase player=event.getEntityPlayer();
- World worldIn=player.getEntityWorld();
- ItemStack Mainhand=player.getHeldItemMainhand();
- if(Mainhand.getDisplayName()=="book") {
- if (!worldIn.isRemote) {
- EntityMagicBullet entity=new EntityMagicBullet(worldIn, player);
- entity.setTime(360);
- worldIn.spawnEntity(entity);
- entity.setname("magicbullet.png");
-
- MessagePositionHistory message = new MessagePositionHistory();
- UUID uuid=entity.getUniqueID();
- message.nbt = new NBTTagCompound();
-
- message.nbt.setString("name","magicbullet.png");
- message.nbt.setUniqueId("ID", uuid);
- NetworkLoader.instance.sendToAll(message);
- }
- }
-
- }
- public static class Handler implements IMessageHandler<MessagePositionHistory, IMessage>
- {
- @Override
- public IMessage onMessage(MessagePositionHistory message, MessageContext ctx)
- {
- if (ctx.side == Side.CLIENT)
- {
- final String name = message.nbt.getString("name");
- final UUID uuid = message.nbt.getUniqueId("ID");
- Minecraft.getMinecraft().addScheduledTask(new Runnable()
- {
- @Override
- public void run()
- {
- EntityPlayerSP player=Minecraft.getMinecraft().player;
- World world =player.world;
- List<Entity> i=world.loadedEntityList;
- Entity t=i.get(0);
- int u=1;
-
- while((!uuid.equals(t.getUniqueID()))&&u<i.size()) {
- t=i.get(u);
- u++;
- }
-
- if(u<=i.size()) {((EntityMagicBullet) t).setname(name);}
- }
- });
- }
- return null;
- }
- }
没必要这么搞,直接用DataParameter<?>
Billy12345 发表于 2020-4-2 15:27
没必要这么搞,直接用DataParameter
- private static final DataParameter<Float> Yaw = EntityDataManager.<Float>createKey(EntityMagicBullet.class, DataSerializers.FLOAT);
- private static final DataParameter<Float> Pitch = EntityDataManager.<Float>createKey(EntityMagicBullet.class, DataSerializers.FLOAT);
- private static final DataParameter<String> Name = EntityDataManager.<String>createKey(Entity.class, DataSerializers.STRING);
-
- protected void entityInit() {
- this.dataManager.register(Yaw,Float.valueOf(15.0f) );
- this.dataManager.register(Pitch, Float.valueOf(15.0f) );
- this.dataManager.register(Name, "");
- }
- public void setrotation(Float t1,Float t2) {
- this.dataManager.set(Yaw, t1);
- this.dataManager.set(Pitch, t2);
- }
- public Float getYaw() {
- return (Float)this.dataManager.get(Yaw);
- }
- public Float getPitch() {
- return (Float)this.dataManager.get(Pitch);
- }
数据system 发表于 2020-4-9 13:33
那个大佬,请问一下,Yaw和Pitch的同步似乎都没有问题,但加上this.dataManager.register(Name, "");这条 ...
有什么报错吗?
我这样写是没问题的啊
数据system 发表于 2020-4-9 18:53
召唤实体时游戏没有崩溃,控制台输出了这些东西
private static final DataParameter<String> Name = EntityDataManager.<String>createKey(Entity.class, DataSerializers.STRING);
改成
private static final DataParameter<String> Name = EntityDataManager.<String>createKey(EntityMagicBullet.class, DataSerializers.STRING);