Make chat history edits saved temporarily
This commit is contained in:
parent
5e5088e3ef
commit
8de638eb1a
@ -3,4 +3,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
void title_screen_load_splashes(std::vector<std::string> &splashes);
|
void title_screen_load_splashes(std::vector<std::string> &splashes);
|
||||||
|
}
|
||||||
|
@ -60,9 +60,9 @@ void chat_handle_packet_send(Minecraft *minecraft, ChatPacket *packet) {
|
|||||||
RakNetInstance *rak_net_instance = minecraft->rak_net_instance;
|
RakNetInstance *rak_net_instance = minecraft->rak_net_instance;
|
||||||
if (rak_net_instance->vtable->isServer(rak_net_instance)) {
|
if (rak_net_instance->vtable->isServer(rak_net_instance)) {
|
||||||
// Hosting Multiplayer
|
// Hosting Multiplayer
|
||||||
char *message = packet->message;
|
const char *message = packet->message.c_str();
|
||||||
ServerSideNetworkHandler *server_side_network_handler = (ServerSideNetworkHandler *) minecraft->network_handler;
|
ServerSideNetworkHandler *server_side_network_handler = (ServerSideNetworkHandler *) minecraft->network_handler;
|
||||||
chat_send_message(server_side_network_handler, Strings_default_username, message);
|
chat_send_message(server_side_network_handler, Strings_default_username, (char *) message);
|
||||||
} else {
|
} else {
|
||||||
// Client
|
// Client
|
||||||
rak_net_instance->vtable->send(rak_net_instance, (Packet *) packet);
|
rak_net_instance->vtable->send(rak_net_instance, (Packet *) packet);
|
||||||
@ -82,8 +82,8 @@ static void ServerSideNetworkHandler_handle_ChatPacket_injection(ServerSideNetwo
|
|||||||
Player *player = ServerSideNetworkHandler_getPlayer(server_side_network_handler, rak_net_guid);
|
Player *player = ServerSideNetworkHandler_getPlayer(server_side_network_handler, rak_net_guid);
|
||||||
if (player != NULL) {
|
if (player != NULL) {
|
||||||
const char *username = player->username.c_str();
|
const char *username = player->username.c_str();
|
||||||
char *message = chat_packet->message;
|
const char *message = chat_packet->message.c_str();
|
||||||
chat_send_message(server_side_network_handler, (char *) username, message);
|
chat_send_message(server_side_network_handler, (char *) username, (char *) message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,10 +15,6 @@ static std::vector<std::string> &get_history() {
|
|||||||
return history;
|
return history;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string index_vec(const std::vector<std::string> &vec, int pos) {
|
|
||||||
return pos == int(vec.size()) ? "" : vec.at(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Structure
|
// Structure
|
||||||
struct ChatScreen {
|
struct ChatScreen {
|
||||||
TextInputScreen super;
|
TextInputScreen super;
|
||||||
@ -29,6 +25,7 @@ struct ChatScreen {
|
|||||||
CUSTOM_VTABLE(chat_screen, Screen) {
|
CUSTOM_VTABLE(chat_screen, Screen) {
|
||||||
TextInputScreen::setup(vtable);
|
TextInputScreen::setup(vtable);
|
||||||
// Init
|
// Init
|
||||||
|
static std::vector<std::string> local_history = {};
|
||||||
static Screen_init_t original_init = vtable->init;
|
static Screen_init_t original_init = vtable->init;
|
||||||
vtable->init = [](Screen *super) {
|
vtable->init = [](Screen *super) {
|
||||||
original_init(super);
|
original_init(super);
|
||||||
@ -39,6 +36,8 @@ CUSTOM_VTABLE(chat_screen, Screen) {
|
|||||||
self->chat->init(super->font);
|
self->chat->init(super->font);
|
||||||
self->chat->setFocused(true);
|
self->chat->setFocused(true);
|
||||||
self->history_pos = get_history().size();
|
self->history_pos = get_history().size();
|
||||||
|
local_history = get_history();
|
||||||
|
local_history.push_back("");
|
||||||
// Determine Max Length
|
// Determine Max Length
|
||||||
std::string prefix = _chat_get_prefix(Strings_default_username);
|
std::string prefix = _chat_get_prefix(Strings_default_username);
|
||||||
int max_length = MAX_CHAT_MESSAGE_LENGTH - prefix.length();
|
int max_length = MAX_CHAT_MESSAGE_LENGTH - prefix.length();
|
||||||
@ -87,35 +86,40 @@ CUSTOM_VTABLE(chat_screen, Screen) {
|
|||||||
vtable->keyPressed = [](Screen *super, int key) {
|
vtable->keyPressed = [](Screen *super, int key) {
|
||||||
// Handle Enter
|
// Handle Enter
|
||||||
ChatScreen *self = (ChatScreen *) super;
|
ChatScreen *self = (ChatScreen *) super;
|
||||||
if (key == 0x0d && self->chat->isFocused()) {
|
if (self->chat->isFocused()) {
|
||||||
|
if (key == 0x0d) {
|
||||||
if (self->chat->getText().length() > 0) {
|
if (self->chat->getText().length() > 0) {
|
||||||
std::string text = self->chat->getText();
|
std::string text = self->chat->getText();
|
||||||
std::vector<std::string> &history = get_history();
|
if (get_history().size() == 0 || text != get_history().back()) {
|
||||||
if (history.size() == 0 || text != history.back()) {
|
get_history().push_back(text);
|
||||||
history.push_back(text);
|
|
||||||
}
|
}
|
||||||
_chat_queue_message(text.c_str());
|
_chat_queue_message(text.c_str());
|
||||||
}
|
}
|
||||||
Minecraft_setScreen(super->minecraft, NULL);
|
Minecraft_setScreen(super->minecraft, NULL);
|
||||||
} else if (key == 0x26 && self->chat->isFocused()) {
|
} else if (key == 0x26) {
|
||||||
// Up
|
// Up
|
||||||
|
local_history.at(self->history_pos) = self->chat->getText();
|
||||||
|
// Change
|
||||||
int old_pos = self->history_pos;
|
int old_pos = self->history_pos;
|
||||||
self->history_pos -= 1;
|
self->history_pos -= 1;
|
||||||
if (self->history_pos < 0) self->history_pos = get_history().size();
|
if (self->history_pos < 0) self->history_pos = local_history.size() - 1;
|
||||||
if (old_pos != self->history_pos) {
|
if (old_pos != self->history_pos) {
|
||||||
self->chat->setText(index_vec(get_history(), self->history_pos));
|
self->chat->setText(local_history.at(self->history_pos));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (key == 0x28 && self->chat->isFocused()) {
|
} else if (key == 0x28) {
|
||||||
// Down
|
// Down
|
||||||
|
local_history.at(self->history_pos) = self->chat->getText();
|
||||||
|
// Change
|
||||||
int old_pos = self->history_pos;
|
int old_pos = self->history_pos;
|
||||||
self->history_pos += 1;
|
self->history_pos += 1;
|
||||||
if (self->history_pos > int(get_history().size())) self->history_pos = 0;
|
if (self->history_pos > int(local_history.size()) - 1) self->history_pos = 0;
|
||||||
if (old_pos != self->history_pos) {
|
if (old_pos != self->history_pos) {
|
||||||
self->chat->setText(index_vec(get_history(), self->history_pos));
|
self->chat->setText(local_history.at(self->history_pos));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Call Original Method
|
// Call Original Method
|
||||||
original_keyPressed(super, key);
|
original_keyPressed(super, key);
|
||||||
};
|
};
|
||||||
|
@ -37,5 +37,6 @@ property float height_offset = 0x68;
|
|||||||
property int fire_timer = 0xa0;
|
property int fire_timer = 0xa0;
|
||||||
property int renderer_id = 0xa8;
|
property int renderer_id = 0xa8;
|
||||||
property bool on_ground = 0xb2;
|
property bool on_ground = 0xb2;
|
||||||
|
property bool pending_removal = 0xb8;
|
||||||
property bool freeze_physics = 0xb9;
|
property bool freeze_physics = 0xb9;
|
||||||
property float fall_distance = 0xac;
|
property float fall_distance = 0xac;
|
||||||
|
@ -3,3 +3,5 @@ constructor () = 0x6096c;
|
|||||||
method void assign(uchar entity_id, EntityRenderer *renderer) = 0x6094c;
|
method void assign(uchar entity_id, EntityRenderer *renderer) = 0x6094c;
|
||||||
method void render(Entity *entity, float x, float y, float z, float rot, float unknown) = 0x60674;
|
method void render(Entity *entity, float x, float y, float z, float rot, float unknown) = 0x60674;
|
||||||
static-method EntityRenderDispatcher *getInstance() = 0x60e90;
|
static-method EntityRenderDispatcher *getInstance() = 0x60e90;
|
||||||
|
|
||||||
|
property ItemInHandRenderer *item_renderer = 0x0;
|
||||||
|
@ -5,5 +5,3 @@ property Minecraft *mc = 0x18;
|
|||||||
|
|
||||||
method void renderItem(Mob *mob, ItemInstance *item) = 0x4b824;
|
method void renderItem(Mob *mob, ItemInstance *item) = 0x4b824;
|
||||||
method void render(float param_1) = 0x4bfcc;
|
method void render(float param_1) = 0x4bfcc;
|
||||||
|
|
||||||
static-property ItemInHandRenderer **instance = 0x137bc0;
|
|
@ -3,13 +3,20 @@ extends LevelSource;
|
|||||||
vtable 0x10fcf0;
|
vtable 0x10fcf0;
|
||||||
|
|
||||||
method void saveLevelData() = 0xa2e94;
|
method void saveLevelData() = 0xa2e94;
|
||||||
|
method void setTile(int x, int y, int z, int id) = 0xa3904;
|
||||||
method void setTileAndData(int x, int y, int z, int id, int data) = 0xa38b4;
|
method void setTileAndData(int x, int y, int z, int id, int data) = 0xa38b4;
|
||||||
method void setTileAndDataNoUpdate(int x, int y, int z, int id, int data) = 0xa33d0;
|
method void setTileAndDataNoUpdate(int x, int y, int z, int id, int data) = 0xa33d0;
|
||||||
method HitResult clip(uchar *param_1, uchar *param_2, bool clip_liquids, bool param_3) = 0xa3db0;
|
// clip_liquids and clip_hitboxes default to true
|
||||||
|
// If clip_hitboxes is true it will ignore blocks that have their getAABB return NULL
|
||||||
|
method HitResult clip(uchar *param_1, uchar *param_2, bool clip_liquids, bool clip_hitboxes) = 0xa3db0;
|
||||||
|
// Valid particles are crit, flame, lava, smoke, largesmoke, reddust, snowballpoof, and explode
|
||||||
|
// There is also bubble which only works under water and ironcrack which will crash the game
|
||||||
method void addParticle(std::string *particle, float x, float y, float z, float deltaX, float deltaY, float deltaZ, int count) = 0xa449c;
|
method void addParticle(std::string *particle, float x, float y, float z, float deltaX, float deltaY, float deltaZ, int count) = 0xa449c;
|
||||||
method Entity *getEntity(int id) = 0xa45a4;
|
method Entity *getEntity(int id) = 0xa45a4;
|
||||||
method bool addEntity(Entity *entity) = 0xa7cbc;
|
method bool addEntity(Entity *entity) = 0xa7cbc;
|
||||||
method int getBrightness2(LightLayer *layer, int x, int y, int z) = 0xa3c70;
|
method int getBrightness2(LightLayer *layer, int x, int y, int z) = 0xa3c70;
|
||||||
|
method int getRawBrightness(int x, int y, int z) = 0xa3b70;
|
||||||
|
// See mods/src/sound/repository.cpp for a list of sounds
|
||||||
method void playSound(Entity *entity, std::string *name, float volume, float pitch) = 0xa42a8;
|
method void playSound(Entity *entity, std::string *name, float volume, float pitch) = 0xa42a8;
|
||||||
// Searches aabb for entities, ignores the entity "ignore", overwrites the same vector each time
|
// Searches aabb for entities, ignores the entity "ignore", overwrites the same vector each time
|
||||||
method std::vector<Entity*> *getEntities(Entity *ignore, AABB *aabb) = 0xa5a4c;
|
method std::vector<Entity*> *getEntities(Entity *ignore, AABB *aabb) = 0xa5a4c;
|
||||||
@ -19,7 +26,16 @@ method int getEntitiesOfType(int type_id, AABB *aabb, std::vector<Entity*> *buff
|
|||||||
method int getEntitiesOfClass(int base_type, AABB *aabb, std::vector<Entity*> *buff) = 0xa6240;
|
method int getEntitiesOfClass(int base_type, AABB *aabb, std::vector<Entity*> *buff) = 0xa6240;
|
||||||
// This will implicitly make the tile entity if the tile at x, y, z doesn't have one and is an EntityTile
|
// This will implicitly make the tile entity if the tile at x, y, z doesn't have one and is an EntityTile
|
||||||
method TileEntity *getTileEntity(int x, int y, int z) = 0xa55d4;
|
method TileEntity *getTileEntity(int x, int y, int z) = 0xa55d4;
|
||||||
|
method void removeTileEntity(int x, int y, int z) = 0xa7aac;
|
||||||
method void animateTick(int x, int y, int z) = 0xa5920;
|
method void animateTick(int x, int y, int z) = 0xa5920;
|
||||||
|
// Called by trapdoors, doors, and tnt
|
||||||
|
method bool hasNeighborSignal(int x, int y, int z) = 0xa5f08;
|
||||||
|
// Called by hasNeighborSignal
|
||||||
|
method bool getSignal(int x, int y, int z, int direction) = 0xa5e6c;
|
||||||
|
// Called by getSignal
|
||||||
|
method bool hasDirectSignal(int x, int y, int z) = 0xa5d88;
|
||||||
|
// Called by hasDirectSignal
|
||||||
|
method bool getDirectSignal(int x, int y, int z, int direction) = 0xa5d2c;
|
||||||
|
|
||||||
virtual-method void tick() = 0x28;
|
virtual-method void tick() = 0x28;
|
||||||
virtual-method void updateSleepingPlayerList() = 0x2c;
|
virtual-method void updateSleepingPlayerList() = 0x2c;
|
||||||
|
@ -4,4 +4,5 @@ virtual-method bool isSolid() = 0x8;
|
|||||||
static-property Material *dirt = 0x180a94;
|
static-property Material *dirt = 0x180a94;
|
||||||
static-property Material *stone = 0x180a9c;
|
static-property Material *stone = 0x180a9c;
|
||||||
static-property Material *metal = 0x180aa0;
|
static-property Material *metal = 0x180aa0;
|
||||||
|
static-property Material *plant = 0x180ab0;
|
||||||
static-property Material *glass = 0x180acc;
|
static-property Material *glass = 0x180acc;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
extends Level;
|
extends Level;
|
||||||
|
|
||||||
|
vtable 0x109da0;
|
||||||
size 0xb80;
|
size 0xb80;
|
||||||
|
|
||||||
constructor (uchar *storage, uchar *name, LevelSettings *settings, int param_4, Dimension *dimension) = 0x7692c;
|
constructor (uchar *storage, uchar *name, LevelSettings *settings, int param_4, Dimension *dimension) = 0x7692c;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
constructor () = 0xb64a0;
|
||||||
vtable 0x10e530;
|
vtable 0x10e530;
|
||||||
vtable-size 0x10;
|
vtable-size 0x10;
|
||||||
|
|
||||||
|
@ -5,6 +5,9 @@ size 0x24;
|
|||||||
constructor (std::string name) = 0x69740;
|
constructor (std::string name) = 0x69740;
|
||||||
|
|
||||||
method bool getBoolean(std::string *name) = 0xd1b28;
|
method bool getBoolean(std::string *name) = 0xd1b28;
|
||||||
|
method char getByte(std::string *name) = 0x7f00c;
|
||||||
|
method void putByte(std::string *name, char i) = 0x7d6d0;
|
||||||
method short getShort(std::string *name) = 0x459c0;
|
method short getShort(std::string *name) = 0x459c0;
|
||||||
|
method void putShort(std::string *name, short i) = 0x7d60c;
|
||||||
method bool contains(std::string *name, int type) = 0x7d130;
|
method bool contains(std::string *name, int type) = 0x7d130;
|
||||||
method void put(std::string *name, Tag *tag) = 0x6a040;
|
method void put(std::string *name, Tag *tag) = 0x6a040;
|
||||||
|
@ -2,4 +2,4 @@ extends Packet;
|
|||||||
|
|
||||||
vtable 0x108a98;
|
vtable 0x108a98;
|
||||||
|
|
||||||
property char *message = 0xc;
|
property std::string message = 0xc;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
constructor () = 0x6fc18;
|
constructor () = 0x6fc18;
|
||||||
size 0x10;
|
|
||||||
|
size 0x8;
|
||||||
vtable 0x1024d8;
|
vtable 0x1024d8;
|
||||||
vtable-size 0x14;
|
vtable-size 0x14;
|
||||||
|
|
||||||
|
@ -4,4 +4,5 @@ vtable 0x111348;
|
|||||||
vtable-size 0x108;
|
vtable-size 0x108;
|
||||||
size 0x5c;
|
size 0x5c;
|
||||||
|
|
||||||
|
// Pure virtual
|
||||||
virtual-method TileEntity *newTileEntity() = 0x104;
|
virtual-method TileEntity *newTileEntity() = 0x104;
|
||||||
|
@ -19,17 +19,32 @@ virtual-method int getTexture2(int face, int data) = 0x2c;
|
|||||||
virtual-method int getTexture3(LevelSource *level, int x, int y, int z, int face) = 0x30;
|
virtual-method int getTexture3(LevelSource *level, int x, int y, int z, int face) = 0x30;
|
||||||
virtual-method AABB *getAABB(Level *level, int x, int y, int z) = 0x34;
|
virtual-method AABB *getAABB(Level *level, int x, int y, int z) = 0x34;
|
||||||
virtual-method bool isSolidRender() = 0x40;
|
virtual-method bool isSolidRender() = 0x40;
|
||||||
|
virtual-method bool mayPlace(Level *level, int x, int y, int z, uchar face) = 0x4c;
|
||||||
|
virtual-method bool mayPlace2(Level *level, int x, int y, int z) = 0x50;
|
||||||
virtual-method void tick(Level *level, int x, int y, int z) = 0x58;
|
virtual-method void tick(Level *level, int x, int y, int z) = 0x58;
|
||||||
virtual-method void neighborChanged(Level *level, int x, int y, int z, int neighborId) = 0x64;
|
virtual-method void neighborChanged(Level *level, int x, int y, int z, int neighborId) = 0x64;
|
||||||
virtual-method void onPlace(Level *level, int x, int y, int z) = 0x68;
|
virtual-method void onPlace(Level *level, int x, int y, int z) = 0x68;
|
||||||
virtual-method void onRemove(Level *level, int x, int y, int z) = 0x6c;
|
virtual-method void onRemove(Level *level, int x, int y, int z) = 0x6c;
|
||||||
|
// Resource is the dropped item
|
||||||
virtual-method int getResource(int data, Random *random) = 0x70;
|
virtual-method int getResource(int data, Random *random) = 0x70;
|
||||||
virtual-method int getResourceCount(Random *random) = 0x74;
|
virtual-method int getResourceCount(Random *random) = 0x74;
|
||||||
|
// Returns 1 (default, not transparent), 2 (transparent when the texture is, like bushes), or 3 (semi-transparent, like water)
|
||||||
virtual-method int getRenderLayer() = 0x94;
|
virtual-method int getRenderLayer() = 0x94;
|
||||||
virtual-method int use(Level *level, int x, int y, int z, Player *player) = 0x98;
|
virtual-method int use(Level *level, int x, int y, int z, Player *player) = 0x98;
|
||||||
virtual-method void setPlacedBy(Level *level, int x, int y, int z, Mob *placer) = 0xa8;
|
virtual-method void setPlacedBy(Level *level, int x, int y, int z, Mob *placer) = 0xa8;
|
||||||
virtual-method void handleEntityInside(Level *level, int x, int y, int z, Entity *entity, Vec3 *speed) = 0xb4;
|
virtual-method void handleEntityInside(Level *level, int x, int y, int z, Entity *entity, Vec3 *speed) = 0xb4;
|
||||||
|
// Note that this may be ignored depending on the value of getRenderShape
|
||||||
virtual-method int getColor(LevelSource *level_source, int x, int y, int z) = 0xb8;
|
virtual-method int getColor(LevelSource *level_source, int x, int y, int z) = 0xb8;
|
||||||
|
// This doesn't mean that it *is* producing a signal, rather that it might be
|
||||||
|
// Called by trapdoors, doors, and tnt. Never overridden (always returns false)
|
||||||
|
virtual-method bool isSignalSource() = 0xbc;
|
||||||
|
// Doesn't seem to be used, but it's hard to tell with virtual methods
|
||||||
|
// Yes, this IS a bool and not a char.
|
||||||
|
virtual-method bool getSignal(LevelSource *level, int x, int y, int z) = 0xc0;
|
||||||
|
// Called at the end of Level_getSignal
|
||||||
|
virtual-method bool getSignal2(LevelSource *level, int x, int y, int z, int direction) = 0xc4;
|
||||||
|
// Called by Level_hasDirectSignal
|
||||||
|
virtual-method bool getDirectSignal(Level *level, int x, int y, int z, int direction) = 0xc8;
|
||||||
virtual-method void entityInside(Level *level, int x, int y, int z, Entity *entity) = 0xcc;
|
virtual-method void entityInside(Level *level, int x, int y, int z, Entity *entity) = 0xcc;
|
||||||
virtual-method std::string getDescriptionId() = 0xdc;
|
virtual-method std::string getDescriptionId() = 0xdc;
|
||||||
virtual-method Tile *setDescriptionId(std::string *description_id) = 0xe0;
|
virtual-method Tile *setDescriptionId(std::string *description_id) = 0xe0;
|
||||||
@ -46,6 +61,8 @@ property float z1 = 0x14;
|
|||||||
property float x2 = 0x18;
|
property float x2 = 0x18;
|
||||||
property float y2 = 0x1c;
|
property float y2 = 0x1c;
|
||||||
property float z2 = 0x20;
|
property float z2 = 0x20;
|
||||||
|
property float destroyTime = 0x34;
|
||||||
|
property float explodeable = 0x38;
|
||||||
property int category = 0x3c;
|
property int category = 0x3c;
|
||||||
property AABB aabb = 0x40;
|
property AABB aabb = 0x40;
|
||||||
|
|
||||||
@ -55,6 +72,8 @@ static-property-array float lightEmission = 0x181214;
|
|||||||
static-property-array bool isEntityTile = 0x181f20;
|
static-property-array bool isEntityTile = 0x181f20;
|
||||||
|
|
||||||
// Tiles
|
// Tiles
|
||||||
|
static-property Tile *grass = 0x181b14;
|
||||||
|
static-property Tile *leaves = 0x18120c;
|
||||||
static-property Tile *chest = 0x181d60;
|
static-property Tile *chest = 0x181d60;
|
||||||
static-property Tile *water = 0x181b3c;
|
static-property Tile *water = 0x181b3c;
|
||||||
static-property Tile *lava = 0x181cc8;
|
static-property Tile *lava = 0x181cc8;
|
||||||
@ -74,11 +93,10 @@ static-property Tile *stoneSlab = 0x181b44;
|
|||||||
static-property Tile *fire = 0x181de0;
|
static-property Tile *fire = 0x181de0;
|
||||||
|
|
||||||
// "Carried" Tiles
|
// "Carried" Tiles
|
||||||
static-property Tile *leaves = 0x18120c;
|
|
||||||
static-property Tile *leaves_carried = 0x181dd8;
|
static-property Tile *leaves_carried = 0x181dd8;
|
||||||
static-property Tile *grass = 0x181b14;
|
|
||||||
static-property Tile *grass_carried = 0x181dd4;
|
static-property Tile *grass_carried = 0x181dd4;
|
||||||
|
|
||||||
// Sounds
|
// Sounds
|
||||||
static-property Tile_SoundType SOUND_STONE = 0x181c80;
|
static-property Tile_SoundType SOUND_STONE = 0x181c80;
|
||||||
static-property Tile_SoundType SOUND_WOOD = 0x181cb4;
|
static-property Tile_SoundType SOUND_WOOD = 0x181cb4;
|
||||||
|
static-property Tile_SoundType SOUND_GRASS = 0x181c94;
|
||||||
|
Loading…
Reference in New Issue
Block a user