AString cCaveTunnel::ExportAsSVG(int a_Color, int a_OffsetX, int a_OffsetZ) const { AString SVG; SVG.reserve(m_Points.size() * 20 + 200); AppendPrintf(SVG, "<path style=\"fill:none;stroke:#%06x;stroke-width:1px;\"\nd=\"", a_Color); char Prefix = 'M'; // The first point needs "M" prefix, all the others need "L" for (cCaveDefPoints::const_iterator itr = m_Points.begin(); itr != m_Points.end(); ++itr) { AppendPrintf(SVG, "%c %d, %d ", Prefix, a_OffsetX + itr->m_BlockX, a_OffsetZ + itr->m_BlockZ); Prefix = 'L'; } SVG.append("\"/>\n"); return SVG; }
void cSHA1Checksum::DigestToJava(const Checksum & a_Digest, AString & a_Out) { Checksum Digest; memcpy(Digest, a_Digest, sizeof(Digest)); bool IsNegative = (Digest[0] >= 0x80); if (IsNegative) { // Two's complement: bool carry = true; // Add one to the whole number for (int i = 19; i >= 0; i--) { Digest[i] = ~Digest[i]; if (carry) { carry = (Digest[i] == 0xff); Digest[i]++; } } } a_Out.clear(); a_Out.reserve(40); for (int i = 0; i < 20; i++) { AppendPrintf(a_Out, "%02x", Digest[i]); } while ((a_Out.length() > 0) && (a_Out[0] == '0')) { a_Out.erase(0, 1); } if (IsNegative) { a_Out.insert(0, "-"); } }
AString cWebAdmin::GetDefaultPage(void) { AString Content; Content += "<h4>Server Name:</h4>"; Content += "<p>" + AString( cRoot::Get()->GetServer()->GetServerID() ) + "</p>"; Content += "<h4>Plugins:</h4><ul>"; cPluginManager * PM = cPluginManager::Get(); const cPluginManager::PluginMap & List = PM->GetAllPlugins(); for (cPluginManager::PluginMap::const_iterator itr = List.begin(); itr != List.end(); ++itr) { if (itr->second == NULL) { continue; } AString VersionNum; AppendPrintf(Content, "<li>%s V.%i</li>", itr->second->GetName().c_str(), itr->second->GetVersion()); } Content += "</ul>"; Content += "<h4>Players:</h4><ul>"; cPlayerAccum PlayerAccum; cWorld * World = cRoot::Get()->GetDefaultWorld(); // TODO - Create a list of worlds and players if( World != NULL ) { World->ForEachPlayer(PlayerAccum); Content.append(PlayerAccum.m_Contents); } Content += "</ul><br>"; return Content; }
void cHTTPConnection::Send(const void * a_Data, size_t a_Size) { ASSERT(m_State == wcsSendingResp); AppendPrintf(m_OutgoingData, SIZE_T_FMT_HEX "\r\n", a_Size); m_OutgoingData.append((const char *)a_Data, a_Size); m_OutgoingData.append("\r\n"); m_HTTPServer.NotifyConnectionWrite(*this); }
AString cEnchantments::ToString(void) const { // Serialize all the enchantments into a string AString res; for (cEnchantments::cMap::const_iterator itr = m_Enchantments.begin(), end = m_Enchantments.end(); itr != end; ++itr) { AppendPrintf(res, "%d=%d;", itr->first, itr->second); } // for itr - m_Enchantments[] return res; }
AString cFireworkItem::FadeColoursToString(const cFireworkItem & a_FireworkItem) { AString Result; for (std::vector<int>::const_iterator itr = a_FireworkItem.m_FadeColours.begin(); itr != a_FireworkItem.m_FadeColours.end(); ++itr) { AppendPrintf(Result, "%i;", *itr); } return Result; }
AString cStructGenWormNestCaves::cCaveSystem::ExportAsSVG(int a_Color, int a_OffsetX, int a_OffsetZ) const { AString SVG; SVG.reserve(512 * 1024); for (cCaveTunnels::const_iterator itr = m_Tunnels.begin(), end = m_Tunnels.end(); itr != end; ++itr) { SVG.append((*itr)->ExportAsSVG(a_Color, a_OffsetX, a_OffsetZ)); } // for itr - m_Tunnels[] // Base point highlight: AppendPrintf(SVG, "<path style=\"fill:none;stroke:#ff0000;stroke-width:1px;\"\nd=\"M %d,%d L %d,%d\"/>\n", a_OffsetX + m_BlockX - 5, a_OffsetZ + m_BlockZ, a_OffsetX + m_BlockX + 5, a_OffsetZ + m_BlockZ ); AppendPrintf(SVG, "<path style=\"fill:none;stroke:#ff0000;stroke-width:1px;\"\nd=\"M %d,%d L %d,%d\"/>\n", a_OffsetX + m_BlockX, a_OffsetZ + m_BlockZ - 5, a_OffsetX + m_BlockX, a_OffsetZ + m_BlockZ + 5 ); // A gray line from the base point to the first point of the ravine, for identification: AppendPrintf(SVG, "<path style=\"fill:none;stroke:#cfcfcf;stroke-width:1px;\"\nd=\"M %d,%d L %d,%d\"/>\n", a_OffsetX + m_BlockX, a_OffsetZ + m_BlockZ, a_OffsetX + m_Tunnels.front()->m_Points.front().m_BlockX, a_OffsetZ + m_Tunnels.front()->m_Points.front().m_BlockZ ); // Offset guides: if (a_OffsetX > 0) { AppendPrintf(SVG, "<path style=\"fill:none;stroke:#0000ff;stroke-width:1px;\"\nd=\"M %d,0 L %d,1024\"/>\n", a_OffsetX, a_OffsetX ); } if (a_OffsetZ > 0) { AppendPrintf(SVG, "<path style=\"fill:none;stroke:#0000ff;stroke-width:1px;\"\nd=\"M 0,%d L 1024,%d\"/>\n", a_OffsetZ, a_OffsetZ ); } return SVG; }
cWSSAnvil::cMCAFile * cWSSAnvil::LoadMCAFile(const cChunkCoords & a_Chunk) { // ASSUME m_CS is locked ASSERT(m_CS.IsLocked()); const int RegionX = FAST_FLOOR_DIV(a_Chunk.m_ChunkX, 32); const int RegionZ = FAST_FLOOR_DIV(a_Chunk.m_ChunkZ, 32); ASSERT(a_Chunk.m_ChunkX - RegionX * 32 >= 0); ASSERT(a_Chunk.m_ChunkZ - RegionZ * 32 >= 0); ASSERT(a_Chunk.m_ChunkX - RegionX * 32 < 32); ASSERT(a_Chunk.m_ChunkZ - RegionZ * 32 < 32); // Is it already cached? for (cMCAFiles::iterator itr = m_Files.begin(); itr != m_Files.end(); ++itr) { if (((*itr) != NULL) && ((*itr)->GetRegionX() == RegionX) && ((*itr)->GetRegionZ() == RegionZ)) { // Move the file to front and return it: cMCAFile * f = *itr; if (itr != m_Files.begin()) { m_Files.erase(itr); m_Files.push_front(f); } return f; } } // Load it anew: AString FileName; Printf(FileName, "%s/region", m_World->GetName().c_str()); cFile::CreateFolder(FILE_IO_PREFIX + FileName); AppendPrintf(FileName, "/r.%d.%d.mca", RegionX, RegionZ); cMCAFile * f = new cMCAFile(FileName, RegionX, RegionZ); if (f == NULL) { return NULL; } m_Files.push_front(f); // If there are too many MCA files cached, delete the last one used: if (m_Files.size() > MAX_MCA_FILES) { delete m_Files.back(); m_Files.pop_back(); } return f; }
void cForgeHandshake::HandleModList(cClientHandle * a_Client, const char * a_Data, size_t a_Size) { LOGD("Received ModList"); auto ClientMods = ParseModList(a_Data + 1, a_Size - 1); AString ClientModsString; for (auto & item: ClientMods) { AppendPrintf(ClientModsString, "%s@%s, ", item.first.c_str(), item.second.c_str()); } LOG("Client connected with %zu mods: %s", ClientMods.size(), ClientModsString.c_str()); m_Client->m_ForgeMods = ClientMods; // Let the plugins know about this event, they may refuse the player: if (cRoot::Get()->GetPluginManager()->CallHookLoginForge(*a_Client, ClientMods)) { SetError("Modded client refused by plugin"); return; } // Send server ModList // Send server-side Forge mods registered by plugins const auto & ServerMods = m_Client->GetForgeMods(); const auto ModCount = ServerMods.size(); cByteBuffer Buf(256 * ModCount); Buf.WriteBEInt8(Discriminator::ModList); Buf.WriteVarInt32(static_cast<UInt32>(ModCount)); for (const auto & item: ServerMods) { Buf.WriteVarUTF8String(item.first); // name Buf.WriteVarUTF8String(item.second); // version } AString ServerModList; Buf.ReadAll(ServerModList); m_Client->SendPluginMessage("FML|HS", ServerModList); }
void cSpringStatsFactory::SaveStatistics(const cSpringStats::cStats::SpringStats & a_Stats, const AString & a_FileName) { cFile f(a_FileName, cFile::fmWrite); if (!f.IsOpen()) { LOG("Cannot open file \"%s\" for writing!", a_FileName.c_str()); return; } for (int Height = 0; Height < 256; Height++) { AString Line; Line.reserve(2000); Printf(Line, "%d\t", Height); for (int Biome = 0; Biome < 256; Biome++) { AppendPrintf(Line, "%llu\t", a_Stats[Height][Biome]); } Line.append("\n"); f.Write(Line.c_str(), Line.size()); } }
AString cStructGenRavines::cRavine::ExportAsSVG(int a_Color, int a_OffsetX, int a_OffsetZ) const { AString SVG; AppendPrintf(SVG, "<path style=\"fill:none;stroke:#%06x;stroke-width:1px;\"\nd=\"", a_Color); char Prefix = 'M'; // The first point needs "M" prefix, all the others need "L" for (cRavDefPoints::const_iterator itr = m_Points.begin(); itr != m_Points.end(); ++itr) { AppendPrintf(SVG, "%c %d, %d ", Prefix, a_OffsetX + itr->m_BlockX, a_OffsetZ + itr->m_BlockZ); Prefix = 'L'; } SVG.append("\"/>\n"); // Base point highlight: AppendPrintf(SVG, "<path style=\"fill:none;stroke:#ff0000;stroke-width:1px;\"\nd=\"M %d, %d L %d, %d\"/>\n", a_OffsetX + m_OriginX - 5, a_OffsetZ + m_OriginZ, a_OffsetX + m_OriginX + 5, a_OffsetZ + m_OriginZ ); AppendPrintf(SVG, "<path style=\"fill:none;stroke:#ff0000;stroke-width:1px;\"\nd=\"M %d, %d L %d, %d\"/>\n", a_OffsetX + m_OriginX, a_OffsetZ + m_OriginZ - 5, a_OffsetX + m_OriginX, a_OffsetZ + m_OriginZ + 5 ); // A gray line from the base point to the first point of the ravine, for identification: AppendPrintf(SVG, "<path style=\"fill:none;stroke:#cfcfcf;stroke-width:1px;\"\nd=\"M %d, %d L %d, %d\"/>\n", a_OffsetX + m_OriginX, a_OffsetZ + m_OriginZ, a_OffsetX + m_Points.front().m_BlockX, a_OffsetZ + m_Points.front().m_BlockZ ); // Offset guides: if (a_OffsetX > 0) { AppendPrintf(SVG, "<path style=\"fill:none;stroke:#0000ff;stroke-width:1px;\"\nd=\"M %d, 0 L %d, 1024\"/>\n", a_OffsetX, a_OffsetX ); } if (a_OffsetZ > 0) { AppendPrintf(SVG, "<path style=\"fill:none;stroke:#0000ff;stroke-width:1px;\"\nd=\"M 0, %d L 1024, %d\"/>\n", a_OffsetZ, a_OffsetZ ); } return SVG; }
void cHTTPConnection::SendNeedAuth(const AString & a_Realm) { AppendPrintf(m_OutgoingData, "HTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Basic realm=\"%s\"\r\nContent-Length: 0\r\n\r\n", a_Realm.c_str()); m_HTTPServer.NotifyConnectionWrite(*this); m_State = wcsRecvHeaders; }
void cHTTPConnection::SendStatusAndReason(int a_StatusCode, const AString & a_Response) { AppendPrintf(m_OutgoingData, "%d %s\r\nContent-Length: 0\r\n\r\n", a_StatusCode, a_Response.c_str()); m_HTTPServer.NotifyConnectionWrite(*this); m_State = wcsRecvHeaders; }
nsCString DDLifetime::Printf() const { nsCString s; AppendPrintf(s); return s; }