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); }
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); }
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"), }; } }
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(); } }
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); }
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); }
private void OnLocationsReceived(TpLocations networkMessage) { this.Locations = networkMessage.Locations; forLocation = networkMessage.ForLocation; dialog.ReloadValues(); }