the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 214 lines 5.4 kB view raw
1#include "stdafx.h" 2#include "com.mojang.nbt.h" 3#include "net.minecraft.world.level.h" 4#include "net.minecraft.world.entity.item.h" 5#include "net.minecraft.world.entity.player.h" 6#include "net.minecraft.world.item.h" 7#include "net.minecraft.world.entity.h" 8#include "net.minecraft.world.phys.h" 9#include "net.minecraft.network.packet.h" 10#include "SignTileEntity.h" 11#include <xuiapp.h> 12#include "..\Minecraft.Client\ClientConnection.h" 13#include "..\Minecraft.Client\Minecraft.h" 14#include "..\Minecraft.Client\ServerLevel.h" 15#include "..\Minecraft.World\Level.h" 16 17 18 19const int SignTileEntity::MAX_LINE_LENGTH = 15; 20 21SignTileEntity::SignTileEntity() : TileEntity() 22{ 23 m_wsmessages[0] = L""; 24 m_wsmessages[1] = L""; 25 m_wsmessages[2] = L""; 26 m_wsmessages[3] = L""; 27 m_bVerified=true; 28 m_bCensored=false; 29 30 m_iSelectedLine = -1; 31 32 _isEditable = true; 33 34 playerWhoMayEdit = nullptr; 35} 36 37SignTileEntity::~SignTileEntity() 38{ 39 // TODO ORBIS_STUBBED; 40#ifndef __ORBIS__ 41 // 4J-PB - we don't need to verify strings anymore - InputManager.CancelQueuedVerifyStrings(&SignTileEntity::StringVerifyCallback,(LPVOID)this); 42#endif 43} 44 45void SignTileEntity::save(CompoundTag *tag) 46{ 47 TileEntity::save(tag); 48 tag->putString(L"Text1", m_wsmessages[0] ); 49 tag->putString(L"Text2", m_wsmessages[1] ); 50 tag->putString(L"Text3", m_wsmessages[2] ); 51 tag->putString(L"Text4", m_wsmessages[3] ); 52#ifndef _CONTENT_PACKAGE 53 OutputDebugStringW(L"### - Saving a sign with text - \n"); 54 for(int i=0;i<4;i++) 55 { 56 OutputDebugStringW(m_wsmessages[i].c_str()); 57 OutputDebugStringW(L"\n"); 58 } 59#endif 60} 61 62void SignTileEntity::load(CompoundTag *tag) 63{ 64 _isEditable = false; 65 TileEntity::load(tag); 66 for (int i = 0; i < MAX_SIGN_LINES; i++) 67 { 68 wchar_t *buf = new wchar_t[256]; 69 swprintf(buf, 256, L"Text%d", (i+1) ); 70 m_wsmessages[i] = tag->getString( buf ); 71 if (m_wsmessages[i].length() > MAX_LINE_LENGTH) m_wsmessages[i] = m_wsmessages[i].substr(0, MAX_LINE_LENGTH); 72 } 73#ifndef _CONTENT_PACKAGE 74 OutputDebugStringW(L"### - Loaded a sign with text - \n"); 75 for(int i=0;i<4;i++) 76 { 77 OutputDebugStringW(m_wsmessages[i].c_str()); 78 OutputDebugStringW(L"\n"); 79 } 80#endif 81 82 // 4J Stu - Fix for #13531 - Bug: Signs do not Censor after loading a save 83 // Set verified as false so that it can be re-verified 84 m_bVerified=false; 85 86 setChanged(); 87} 88 89shared_ptr<Packet> SignTileEntity::getUpdatePacket() 90{ 91 wstring copy[MAX_SIGN_LINES]; 92 for (int i = 0; i < MAX_SIGN_LINES; i++) 93 { 94 copy[i] = m_wsmessages[i]; 95 } 96 return shared_ptr<SignUpdatePacket>( new SignUpdatePacket(x, y, z, m_bVerified, m_bCensored, copy) ); 97} 98 99bool SignTileEntity::isEditable() 100{ 101 return _isEditable; 102} 103 104void SignTileEntity::setEditable(bool isEditable) 105{ 106 this->_isEditable = isEditable; 107 if (!isEditable) 108 { 109 playerWhoMayEdit = nullptr; 110 } 111} 112 113void SignTileEntity::setAllowedPlayerEditor(shared_ptr<Player> player) 114{ 115 playerWhoMayEdit = player; 116} 117 118shared_ptr<Player> SignTileEntity::getPlayerWhoMayEdit() 119{ 120 return playerWhoMayEdit; 121} 122 123void SignTileEntity::setChanged() 124{ 125 Minecraft *pMinecraft=Minecraft::GetInstance(); 126 127 // 4J-PB - For TU14 we are allowed to not verify strings anymore ! 128 m_bVerified=true; 129 /* 130 if(!g_NetworkManager.IsLocalGame() && !m_bVerified) 131 //if (pMinecraft->level->isClientSide) 132 { 133 WCHAR *wcMessages[MAX_SIGN_LINES]; 134 for (int i = 0; i < MAX_SIGN_LINES; ++i) 135 { 136 wcMessages[i]=new WCHAR [MAX_LINE_LENGTH+1]; 137 ZeroMemory(wcMessages[i],sizeof(WCHAR)*(MAX_LINE_LENGTH+1)); 138 if(m_wsmessages[i].length()>0) 139 { 140 memcpy(wcMessages[i],m_wsmessages[i].c_str(),m_wsmessages[i].length()*sizeof(WCHAR)); 141 } 142 } 143 // at this point, we can ask the online string verifier if our sign text is ok 144#ifdef __ORBIS__ 145 m_bVerified=true; 146#else 147 148 if(!InputManager.VerifyStrings((WCHAR**)&wcMessages,MAX_SIGN_LINES,&SignTileEntity::StringVerifyCallback,(LPVOID)this)) 149 { 150 // Nothing to verify 151 m_bVerified=true; 152 } 153 for(unsigned int i = 0; i < MAX_SIGN_LINES; ++i) 154 { 155 delete [] wcMessages[i]; 156 } 157#endif 158 } 159 else 160 { 161 // set the sign to allowed (local game) 162 m_bVerified=true; 163 } 164 */ 165} 166 167 168void SignTileEntity::SetMessage(int iIndex,wstring &wsText) 169{ 170 m_wsmessages[iIndex]=wsText; 171 172} 173 174// 4J-PB - added for string verification 175int SignTileEntity::StringVerifyCallback(LPVOID lpParam,STRING_VERIFY_RESPONSE *pResults) 176{ 177 // results will be in m_pStringVerifyResponse 178 SignTileEntity *pClass=(SignTileEntity *)lpParam; 179 180 pClass->m_bVerified=true; 181 pClass->m_bCensored=false; 182 for(int i=0;i<pResults->wNumStrings;i++) 183 { 184 if(pResults->pStringResult[i]!=ERROR_SUCCESS) 185 { 186 pClass->m_bCensored=true; 187 } 188 } 189 190 if(!pClass->level->isClientSide) 191 { 192 ServerLevel *serverLevel = (ServerLevel *)pClass->level; 193 // 4J Stu - This callback gets called on the main thread, but tried to access things on the server thread. Change to go through the protected method. 194 //pClass->level->sendTileUpdated(pClass->x, pClass->y, pClass->z); 195 serverLevel->queueSendTileUpdate(pClass->x, pClass->y, pClass->z); 196 } 197 198 return 0; 199} 200 201// 4J Added 202shared_ptr<TileEntity> SignTileEntity::clone() 203{ 204 shared_ptr<SignTileEntity> result = shared_ptr<SignTileEntity>( new SignTileEntity() ); 205 TileEntity::clone(result); 206 207 result->m_wsmessages[0] = m_wsmessages[0]; 208 result->m_wsmessages[1] = m_wsmessages[1]; 209 result->m_wsmessages[2] = m_wsmessages[2]; 210 result->m_wsmessages[3] = m_wsmessages[3]; 211 result->m_bVerified = m_bVerified; 212 result->m_bCensored = m_bCensored; 213 return result; 214}