public static void GetRules(Client c) { var si = new SlotItem(BlockID.BookAndQuill, 1, 0); si.Data = Content; var s = new SetSlot(0, 36, si); c.Queue.Queue(s); }
async Task IHandle <SetSlot> .Handle(SetSlot message) { var state = State; if (state.CurrentRecipe == null && message.Index == 0) { await UpdateRecipe(); } if (message.Index == 1) { await UpdateFuel(); } if (!state.IsCooking && CanCook()) { Register(); } }
async Task IHandle <SetSlot> .Handle(SetSlot message) { await UpdateItem(message.Slot); }
/// <summary> /// What the Server sends to the client /// </summary> protected virtual void FromServerGaming(PacketFromServer packet) { try { byte pid = packet.PacketID; if (pid == PassThrough.ID) { Player.SendToClient(packet); return; } //Before we rewrite the eid //Record all presented mobs, so far we have no method of cleaning this up so hold your thumbs if (pid == SpawnMob.ID) { World.Main.UpdateEntity((SpawnMob)packet); } if (pid == EntityMetadata.ID) { World.Main.UpdateEntity((EntityMetadata)packet); } //if (pid == SpawnPlayer.ID) //World.Main.UpdateEntity((SpawnPlayer)packet); if (pid == SpawnObject.ID) { World.Main.UpdateEntity((SpawnObject)packet); } if (pid == SpawnPainting.ID) { World.Main.UpdateEntity((SpawnPainting)packet); } //Rewrite own EID, Fix eid to client eid player if (packet is IEntity) { IEntity ie = (IEntity)packet; if (ie.EID == EID) { ie.EID = Player.EntityID; packet.SetPacketBuffer(null); } } if (pid == SpawnObject.ID) { var so = (SpawnObject)packet; if (so.SourceEntity == EID) { so.SourceEntity = Player.EntityID; packet.SetPacketBuffer(null); } } //Region filters if (CurrentRegion != null && CurrentRegion.FilterServer(this, packet)) { return; } //Cloak and Nick if (Cloak.Filter(this, packet)) { return; } switch (pid) { case SpawnPlayer.ID: //Change reported uuid from offline to the known with names var sp = (SpawnPlayer)packet; var p = PlayerList.GetPlayerByVanillaUUID(sp.PlayerUUID); if (p != null) { Debug.WriteLine("SpawnPlayer changed from " + sp.PlayerUUID); Debug.WriteLine("SpawnPlayer changed to " + p.UUID); sp.PlayerUUID = p.UUID; sp.SetPacketBuffer(null); } else { Debug.WriteLine("SpawnPlayer not changed: " + sp.PlayerUUID); } break; case ChangeGameState.ID: ChangeGameState ns = packet as ChangeGameState; if (ns.Reason == GameState.BeginRaining || ns.Reason == GameState.EndRaining) { World.Main.Weather = ns; } if (ns.Reason == GameState.ChangeGameMode) { Mode = (GameMode)ns.Value; } break; case SpawnObject.ID: var so = (SpawnObject)packet; if (so.Type != Vehicles.Item) { break; } OreTracker.Spawn(so, Position); break; case EntityMetadata.ID: OreTracker.Track((EntityMetadata)packet); break; case EntityEffect.ID: EntityEffect ee = (EntityEffect)packet; if (ee.Effect == PlayerEffects.MoveSpeed) { EffectSpeed.Active = true; EffectSpeed.Amplifier = ee.Amplifier; } if (ee.Effect == PlayerEffects.MoveSlowdown) { EffectSlow.Active = true; EffectSlow.Amplifier = ee.Amplifier; } break; case RemoveEntityEffect.ID: RemoveEntityEffect re = (RemoveEntityEffect)packet; if (re.Effect == PlayerEffects.MoveSpeed) { EffectSpeed.Active = false; } if (re.Effect == PlayerEffects.MoveSlowdown) { EffectSlow.Active = false; } break; case TimeUpdate.ID: World.Main.Time = packet as TimeUpdate; break; case UseBed.ID: UseBed ub = (UseBed)packet; if (ub.EID == Player.EntityID) { Sleeping = true; } break; //Waking up, among other things case Animation.ID: Animation a = (Animation)packet; if (a.EID == Player.EntityID) { if (a.Animate == Animations.LeaveBed) { Sleeping = false; } } break; #region Position and speed //Regions and player position case PlayerPositionLookServer.ID: var pp = (PlayerPositionLookServer)packet; if (pp.Position.Y % 1 > 0.95) { //Console.WriteLine(pp.Position.ToString("0.00") + " " + pp.HeadY); pp.Position.Y = Math.Ceiling(Position.Y); //pp.HeadPosition = Position.Y + 1.62; //Console.WriteLine(pp.Position.ToString("0.00") + " " + pp.Stance); packet.SetPacketBuffer(null); } SetPosition(pp.Position, false); break; case Respawn.ID: Dimension = ((Respawn)packet).Dimension; SetPosition(Position, false); break; //Boats and carts case AttachEntity.ID: AttachEntity ae = (AttachEntity)packet; if (ae.EID == Player.EntityID) { AttachedEntity = ae.VehicleID; } break; case UpdateBlockEntity.ID: if (Player.Admin(Permissions.AnyAdmin)) { var ute = (UpdateBlockEntity)packet; if (ute.Action == UpdateBlockEntity.Actions.MobSpawner) { if (Spawners.Contains(ute.Pos) == false) { Spawners.Add(ute.Pos); } } } break; case EntityTeleport.ID: if (AttachedEntity != 0) { EntityTeleport et = (EntityTeleport)packet; if (et.EID == AttachedEntity) { SetPosition(et.Position, false); } } break; case EntityRelativeMove.ID: if (AttachedEntity != 0) { EntityRelativeMove er = (EntityRelativeMove)packet; if (er.EID == AttachedEntity) { SetPosition(Position + er.Delta, false); } } break; #endregion case ChatMessageServer.ID: if (ServerParser.ParseServer(this.Player, (ChatMessageServer)packet)) { return; } break; //Inventory case WindowItems.ID: var wi = (WindowItems)packet; for (int n = 0; n < wi.Items.Length; n++) { if (wi.Items[n] == null) { continue; } if (wi.Items[n].Count > 64) { wi.Items[n] = null; packet.SetPacketBuffer(null); } } break; case SetSlot.ID: //Debug.WriteLine(packet); SetSlot ss = (SetSlot)packet; if (0 <= ss.Slot && ss.Slot < Inventory.Length) { Inventory[ss.Slot] = ss.Item; } break; //Tab player list items: Block Player, managed in PlayerList thread case PlayerListItem.ID: return; case HeldItemServer.ID: //Active item var hc = (HeldItemServer)packet; if (hc.SlotID >= 0 && hc.SlotID <= 8) { ActiveInventoryIndex = hc.SlotID; } else { Log.Write( new InvalidOperationException("Invalid holding slot id: " + hc.SlotID), this.Player ); } break; //Keep a record of what window is open case WindowOpen.ID: WorldRegion r = LastClickRegion ?? CurrentRegion; var wo = (WindowOpen)packet; if (OpenWindows.ContainsKey(wo.WindowID)) { OpenWindows.Remove(wo.WindowID); } OpenWindows.Add(wo.WindowID, new OpenWindowRegion(wo, r)); if (r == null || (Player.Admin(Permissions.AnyAdmin) == false) && (Mode == GameMode.Creative)) { //Leave unmodified } else { if (r.Type == Protected.Type && r.IsResident(Player) == false && wo.InventoryType != "CraftingTable" && wo.InventoryType != "Enchant" && wo.WindowTitle != "container.enderchest") { var cj = new ChatJson(); cj.Text = "Locked: " + r.Name; wo.WindowTitle = cj.Serialize(); wo.SetPacketBuffer(null); } } break; //Turn off pvp when you die case UpdateHealth.ID: UpdateHealth uh = (UpdateHealth)packet; if (Player.PvP && uh.Health <= 0) { Player.PvP = false; Player.TellSystem(Chat.Purple, "PvP off"); } break; case WindowCloseServer.ID: WindowClose((WindowCloseServer)packet); break; //Disconnect while running the game //For disconnect at login see the handshake part case Disconnect.ID: Disconnect d = (Disconnect)packet; if (d.Reason.Text == "Flying is not enabled on this server") { #if !DEBUG Player.BanByServer(DateTime.Now.AddMinutes(2), d.Reason.Text); #else Chatting.Parser.Say(Chat.Yellow + Player.Name + Chat.Blue, " was kicked for flying"); #endif return; } if (d.Reason.Text == "Internal server error") { Log.WritePlayer( this.Player, "Backend: Internal error - Restarting connection" ); Player.SetWorld(World.Main); return; } Player.SetWorld(World.Construct); return; } //////////////Sending packet Player.SendToClient(packet); ////////////// #if !DEBUG } catch (Exception e) { thread.State = "ServerGamingException: " + e.Message; Log.Write(e, this.Player); Player.Queue.Queue(packet); #endif } finally { } }
public void OnSetSlot(SetSlot packet) { }
private void InvokeSetSlot(SetSlot packet) { packetListener.OnSetSlot(packet); }
public void NetThread() { SessionIDRequest sessionID = new SessionIDRequest(Storage.Network.UserName, Storage.Network.Password); sessionID.SendRequest(); SharedSecretGenerator sharedSecret = new SharedSecretGenerator(); //random byte[16] gen Timer positionUpdater = new Timer(PositionSender, null, Timeout.Infinite, 50); //create position updater Socket networkSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); networkSocket.Connect(Storage.Network.Server, Storage.Network.Port); _stream = new EnhancedStream(networkSocket); Handshake handshake = new Handshake(_stream); handshake.Send(Storage.Network.UserName, Storage.Network.Server, Storage.Network.Port); // connect Storage.Network.IsConnected = true; while (Storage.Network.IsConnected) { switch (_packetIDbuffer = (byte)_stream.ReadByte()) { case 0x00: KeepAlive keepAlive = new KeepAlive(_stream); break; case 0x01: LoginRequest loginRequest = new LoginRequest(_stream); //positionUpdater.Change(0, 50); ClientSettings clientSettings = new ClientSettings(_stream); clientSettings.Send(); break; case 0x03: ChatMessage chatMessage = new ChatMessage(_stream); break; case 0x04: TimeUpdate timeUpdate = new TimeUpdate(_stream); break; case 0x05: EntityEquipment entityEquipment = new EntityEquipment(_stream); break; case 0x06: SpawnPosition spawnPosition = new SpawnPosition(_stream); break; case 0x08: UpdateHealth updateHealth = new UpdateHealth(_stream); break; case 0x09: RespawnPacket respawnPacket = new RespawnPacket(_stream); break; case 0x0D: _playerPositionLook = new PlayerPositionLook(_stream); break; case 0x10: HeldItemChange heldItemChange = new HeldItemChange(_stream); break; case 0x11: UseBed useBed = new UseBed(_stream); break; case 0x12: Animation animation = new Animation(_stream); break; case 0x14: SpawnNamedEntity spawnNamedEntity = new SpawnNamedEntity(_stream); break; case 0x16: CollectItem collectItem = new CollectItem(_stream); break; case 0x17: SpawnObjectVehicle spawnObjectVehicle = new SpawnObjectVehicle(_stream); break; case 0x18: SpawnMob spawnMob = new SpawnMob(_stream); break; case 0x19: SpawnPainting spawnPainting = new SpawnPainting(_stream); break; case 0x1A: SpawnExperienceOrb spawnExperienceOrb = new SpawnExperienceOrb(_stream); break; case 0x1C: EntityVelocity entityVelocity = new EntityVelocity(_stream); break; case 0x1D: DestroyEntity destroyEntity = new DestroyEntity(_stream); break; case 0x1E: Entity entity = new Entity(_stream); break; case 0x1F: EntityRelativeMove entityRelativeMove = new EntityRelativeMove(_stream); break; case 0x20: EntityLook entityLook = new EntityLook(_stream); break; case 0x21: EntityLookRelativeMove entityLookRelativeMove = new EntityLookRelativeMove(_stream); break; case 0x22: EntityTeleport entityTeleport = new EntityTeleport(_stream); break; case 0x23: EntityHeadLook entityHeadLook = new EntityHeadLook(_stream); break; case 0x26: EntityStatus entityStatus = new EntityStatus(_stream); break; case 0x27: AttachEntity attachEntity = new AttachEntity(_stream); break; case 0x28: EntityMetadata entityMetadata = new EntityMetadata(_stream); break; case 0x29: EntityEffect entityEffect = new EntityEffect(_stream); break; case 0x2A: RemoveEntityEffect removeEntityEffect = new RemoveEntityEffect(_stream); break; case 0x2B: SetExperience setExperience = new SetExperience(_stream); break; case 0x33: ChunkData mapChunk = new ChunkData(_stream); break; case 0x34: MultiBlockChange multiBlockChange = new MultiBlockChange(_stream); break; case 0x35: BlockChange blockChange = new BlockChange(_stream); break; case 0x36: BlockAction blockAction = new BlockAction(_stream); break; case 0x37: BlockBreakAnimation blockBreakAnimation = new BlockBreakAnimation(_stream); break; case 0x38: MapChunkBulk mapChunkBulk = new MapChunkBulk(_stream); break; case 0x3C: Explosion explosion = new Explosion(_stream); break; case 0x3D: SoundParticleEffect soundParticleEffect = new SoundParticleEffect(_stream); break; case 0x3E: NamedSoundEffect namedSoundEffect = new NamedSoundEffect(_stream); break; case 0x46: ChangeGameState changeGameState = new ChangeGameState(_stream); break; case 0x47: Thunderbolt thunderbolt = new Thunderbolt(_stream); break; case 0x64: OpenWindow openWindow = new OpenWindow(_stream); break; case 0x65: CloseWindow closeWindow = new CloseWindow(_stream); break; case 0x67: SetSlot setSlot = new SetSlot(_stream); break; case 0x68: SetWindowItems setWindowItems = new SetWindowItems(_stream); break; case 0x69: UpdateWindowProperty updateWindowProperty = new UpdateWindowProperty(_stream); break; case 0x6A: ConfirmTransaction confirmTransaction = new ConfirmTransaction(_stream); break; case 0x6B: CreativeInventoryAction creativeInventoryAction = new CreativeInventoryAction(_stream); break; case 0x6C: EnchantItem enchantItem = new EnchantItem(_stream); break; case 0x82: UpdateSign updateSign = new UpdateSign(_stream); break; case 0x83: ItemData itemData = new ItemData(_stream); break; case 0x84: UpdateTileEntity updateTileEntity = new UpdateTileEntity(_stream); break; case 0xC8: IncrementStatistic incrementStatistic = new IncrementStatistic(_stream); break; case 0xC9: PlayerListItem playerListItem = new PlayerListItem(_stream); break; case 0xCA: PlayerAbilities playerAbilities = new PlayerAbilities(_stream); break; case 0xCB: TabComplete tabcomplete = new TabComplete(_stream); break; case 0xFA: PluginMessage pluginMessage = new PluginMessage(_stream); break; case 0xFC: EncryptionKeyResponse encryptionKeyResponse = new EncryptionKeyResponse(_stream); encryptionKeyResponse.Get(); _stream = new AesStream(networkSocket, _stream, sharedSecret.Get); ClientStatuses clientStatuses = new ClientStatuses(_stream); clientStatuses.Send(0); break; case 0xFD: EncryptionKeyRequest encryptionKeyRequest = new EncryptionKeyRequest(_stream, sharedSecret.Get, sessionID.GetID(), Storage.Network.UserName); // encryptionKeyResponse = new EncryptionKeyResponse(_stream); encryptionKeyResponse.Send(encryptionKeyRequest.GetEncSharedSecret(), encryptionKeyRequest.GetEncToken()); break; case 0xFF: positionUpdater = null; DisconnectKick disconnectKick = new DisconnectKick(_stream); networkSocket.Disconnect(false); break; default: throw new Exception("We got a Unknown Packet (" + _packetIDbuffer + ")from the Server. This should not happen: Error in Packet parser"); } } }