コード例 #1
0
        public override void Initialize(ICoreAPI api)
        {
            base.Initialize(api);


            if (api.Side == EnumAppSide.Server)
            {
                ICoreServerAPI sapi = api as ICoreServerAPI;

                tpLocation = manager.GetOrCreateLocation(Pos);

                RegisterGameTickListener(OnServerGameTick, 50);
            }
            else
            {
                RegisterGameTickListener(OnClientGameTick, 50);

                teleportingSound = (api as ICoreClientAPI).World.LoadSound(new SoundParams()
                {
                    Location         = new AssetLocation("sounds/block/teleporter.ogg"),
                    ShouldLoop       = true,
                    Position         = Pos.ToVec3f(),
                    RelativePosition = false,
                    DisposeOnFinish  = false,
                    Volume           = 0.5f
                });
            }

            ownBlock = Block as BlockTeleporter;
            posvec   = new Vec3d(Pos.X, Pos.Y + 1, Pos.Z);
        }
コード例 #2
0
        private void OnConfigEventServer(string eventName, ref EnumHandling handling, IAttribute data)
        {
            ITreeAttribute     tree   = data as ITreeAttribute;
            TeleporterLocation forLoc = GetOrCreateLocation(new BlockPos(tree.GetInt("posX"), tree.GetInt("posY"), tree.GetInt("posZ")));

            IServerPlayer player = sapi.World.PlayerByUid(tree.GetString("playerUid")) as IServerPlayer;

            serverChannel.SendPacket(new TpLocations()
            {
                ForLocation = forLoc,
                Locations   = Locations
            }, player);
        }
コード例 #3
0
        public override void FromTreeAttributes(ITreeAttribute tree, IWorldAccessor worldAccessForResolve)
        {
            base.FromTreeAttributes(tree, worldAccessForResolve);

            if (tpLocation == null || Api?.Side == EnumAppSide.Client)
            {
                tpLocation = new TeleporterLocation()
                {
                    SourceName = tree.GetString("sourceName"),
                    TargetName = tree.GetString("targetName"),
                };
            }
        }
コード例 #4
0
        private void OnSetLocationReceived(IServerPlayer fromPlayer, TeleporterLocation networkMessage)
        {
            Locations[networkMessage.SourcePos].SourcePos  = networkMessage.SourcePos;
            Locations[networkMessage.SourcePos].TargetPos  = networkMessage.TargetPos;
            Locations[networkMessage.SourcePos].SourceName = networkMessage.SourceName;
            Locations[networkMessage.SourcePos].TargetName = networkMessage.TargetName;

            BlockEntityTeleporter be = sapi.World.BlockAccessor.GetBlockEntity(networkMessage.SourcePos) as BlockEntityTeleporter;

            if (be != null)
            {
                be.MarkDirty();
            }
        }
コード例 #5
0
        internal TeleporterLocation GetOrCreateLocation(BlockPos pos)
        {
            TeleporterLocation loc = null;

            if (Locations.TryGetValue(pos, out loc))
            {
                return(loc);
            }

            loc = new TeleporterLocation()
            {
                SourceName = "Location-" + (Locations.Count + 1),
                SourcePos  = pos.Copy()
            };

            Locations[loc.SourcePos] = loc;

            return(loc);
        }
コード例 #6
0
        public override void Initialize(ICoreAPI api)
        {
            base.Initialize(api);
            manager = api.ModLoader.GetModSystem <TeleporterManager>();

            if (api.Side == EnumAppSide.Server)
            {
                ICoreServerAPI sapi = api as ICoreServerAPI;

                tpLocation = manager.GetOrCreateLocation(pos);

                RegisterGameTickListener(OnServerGameTick, 50);
            }
            else
            {
                RegisterGameTickListener(OnClientGameTick, 50);
            }

            block  = api.World.BlockAccessor.GetBlock(pos) as BlockTeleporter;
            posvec = new Vec3d(pos.X, pos.Y + 1, pos.Z);
        }
コード例 #7
0
 private void OnLocationsReceived(TpLocations networkMessage)
 {
     this.Locations = networkMessage.Locations;
     forLocation    = networkMessage.ForLocation;
     dialog.ReloadValues();
 }