v1.33.0 (The UI Update) Changelog
Additions
Bounty System
- Added a bounty system, it is part of the new player menu.
Commands
- Added the
\clearchat
command. It has one alias:\cc
. - Added the
\playermenu
command. It has two aliases:\pmenu
and\pm
.
Items
- Added the Player Menu (
andexdb:player_menu
) item. This item opens the new Player Menu.
Leaderboards UI
- Added a leaderboards UI, it is part of the new player menu.
Player Menu
Introducing the Player Menu.
It is like the Main Menu but it is for regular players instead of admins.
It includes many features, such as:
- A homes system UI.
- A TPA system UI.
- A warps system UI.
- A bounty system UI.
- A leaderboards UI.
- A button to access the Server Shops UI.
- A button to access the Player Shops UI.
- A money transfer system UI.
- A code redemption system UI. You can create codes that players can enter into this menu that give them a specific item when they enter it, and each person can only enter each code once.
The player menu can be accessed through either the "Player Menu" item, or the \playermenu
command.
Spawn Protection
Added the ability to create custom advanced protected area categories, so instad of using one of the 6 built-in categories, you can make your own ones that are highly customizable.
You can customize these to do things such as prevent placing and/or breaking of only certain blocks types, allow players with specific items or tags to bypass it, make it only affect players holding specific items, etc.
The settings for a category apply to all protected areas in that category.
Here is a list of things these custom areas can do:
- Block Placement Prevention
- Block Breaking Prevention
- Block Interaction Prevention
- Entity Interaction Prevention
- Item Use Prevention
- Item Use On Prevention
- Explosion Prevention
- Entity Effect Add Prevention
- Player Chat Message Send Prevention
- Player Game Mode Change Prevention
- PVP Prevention
- Tag Area
Here are a list of ways each of these can be customized:
- Allowing players with certain tags to bypass it.
- Making the area only affect players holding specific item types.
- Making the area not affect players holding specific item types.
- Filtering whether to prevent things like block placement, breaking, interaction, and explosions based on filtering the blocks with a BlockMask.
- Filtering things like entity interaction based on a filter for the target entity, the filter can exclude or include entities with certain types and/or tags.
- Filtering things like explosions and entities gaining effects based on a filter for the source entity, the filter can exclude or include entities with certain types and/or tags.
- Filtering things like entities gaining effects based on the effect type and duration.
- Filtering things like player game mode changes based on the game modes they are switching from and to.
- Making tag zones give players certain tags when they enter it, and optionally making it remove the tag from the player when they leave it.
Texture Presets
Added a texture presets feature, this allows for you to select a texture from a menu, so that when setting the texture for things such as items and pages in the player shops, you don't have to know the exact path of the texture.
This menu also allows you to search for specific textures.
It currently has 5 sections:
- Vanilla Item Textures - Has all the textures from the vanilla
item_textures.json
file. - Vanilla Block Textures - Has all the textures from the vanilla
terrain_textures.json
file. - Vanilla Textures List - Has all of the vanilla textures.
- Debug Sticks Textures List - Has all of the textures from this add-on.
- Entity Scale Textures List - Has all of the textures from my entity scale add-on. This section will only appear when my entity scale add-on is active on the world/realm/server.
UIs
Settings
- The "Eval Auto Execute Settings" menu has been moved into the "Advanced" settings section.
- Added a new "UI Settings" section to the settings menu.
- The old "UI Settings" menu has been moved inside of this new menu at "Main Menu > Settings > UI Settings > Main".
- Added the "Menu Configurations" settings menu to the new "UI Settings" settings menu.
- Added the "Main Menu" settings menus to the new "Menu Configurations" settings menu.
- Added the "Main Settings" settings menu to this menu.
- This menu contains the main settings for the main menu, such as whether buttons for upcoming features should be shown.
- Added the "Main Settings" settings menu to this menu.
- Added the "Player Menu" settings menus to the new "Menu Configurations" settings menu.
- Added the "Main Settings" settings menu to this menu.
- This menu contains the main settings for the player menu, such as whether or not it is enabled, whether buttons for upcoming features should be shown, and the item name for the item that players use to open the player menu.
- Added the "Edit Buttons" settings menu to this menu.
- This menu allows you to rearrange and/or remove the buttons in the player menu.
- Added the "Leaderboards Settings" settings menu to this menu.
- This menu allows you customize the leaderboards menu in the player menu.
- Added the "Edit Warps" settings menu to this menu.
- This menu allows you to add, edit, and remove warps for the warps section of the player menu.
- Added the "Edit Redeemable Codes" settings menu to this menu.
- This menu allows you to create/remove redeemable codes that players can redeem in the redeem code section of the player menu.
- Added the "Main Settings" settings menu to this menu.
- Added the "Main Menu" settings menus to the new "Menu Configurations" settings menu.
- Added a new "Teleport Systems Settings" menu to the settings menu.
- Added a "Player Menu Settings" button to the settings menu, this button is an alias of "Main Menu > Settings > UI Settings > Menu Configurations > Player Menu".
- Replaced the "Chat Ranks Settings" button with the "Chat & Name Tags Settings" button, which opens a new user-friendly sub-menu.
- Added the "Teleport Systems Settings" menu. This menu allows you to do things such as change the PVP cooldown for players to teleport, changing the teleport cooldown, setting how long they have to stand still for to teleport, etc.
Changes
Ban System
- Made the ban system a lot more user-friendly, you can now leave the ban duration blank to make it permanent, the ban duration now takes a duration string (ex.
5y 7mo 6w 4d 3h 2m 17s 546ms
) instead of an integer for the number of seconds, and the ban reason field is now just the reason text, and does not include all the extra stuff, that is now added automatically, and you can leave the reason blank and it will default to"§cYOU HAVE BEEN BANNED BY THE BAN HAMMER"
. - The manage bans menu now is split up into pages.
- The manage bans menu now displays id bans with the player's name rather than their ID, making it easiser to identify which player the ban belongs to.
Chat Ranks & Name Tags
- Massive internal overhaul to the chat ranks and name tags systems, this will make them much easier to improve in the furure.
- The
Chat Ranks Settings
menu is now a lot more user-friendly. Instead of a bunch of settings crammed into one singular menu, they are now split up into a bunch of sub-menus. There are now also menus to preview what the chat ranks and name tags look like with your current settings.
Commands
- The
\\protectarea
command now supports custom protected area categories. The built-in ones are still specified exactly the same way, but for the custom ones, you just put the same id that you put when creating the category, with the custom categories, you do not include a:
at the end. - Added the
o
flag to the\\protectarea
command. This flag causes the command to overwrite the saved protected area if one exists with the same id.
Performance
- Made massive performance improvements to the Manage Players menu.
- The list of bans is now cached to improve performance, and is automatically refreshed when you try to get the list of bans if the last refresh was at least a second before.
- Made a massive performance improvement to the money system.
- The protected areas refresher repeating interval has been disabled as it is no longer needed, the new protected area system applies modifications to the protected areas list cache as they are made. If you need to manually refresh the protected areas cache, just go to
Main Menu > Manage Restricted Areas
and click the refresh button in the top left, or if you want to do it with script eval, just use the following script:srun(async()=>{const protAreas = await import("init/variables/protectedAreaVariables"); protAreas.ProtectedAreas.load();})
. To refresh it with a command block, just do/scriptevent s:e srun(async()=>{const protAreas = await import("init/variables/protectedAreaVariables"); protAreas.ProtectedAreas.load();})
.
Settings
Settings Options
- The
gametestStructureDefaultSpawnLocation
option has been added to theconfig
class and has been given a default value of{x: 1000000000, y: 100, z: 1000000000}
, this will make it so by default the structure will spawn in a place in your world where you can't go, so that when you do things like spawn simulated players or no AI entities, they won't leave behind a structure when they spawn in. The option also can no longer be unset, if it is removed, it will just give the default value. config.chatRanks.defaultRankTemplateString
(Main Menu > Settings > Chat Ranks Settings > Default Rank For Players With No Rank) has had its default value changed from""
, to"[§bMember§r]"
.
UIs
- Renamed the Global Settings menu to General Settings.
- Lots of updates to almost every UI in the add-on.
- Added a close button to the Manage Commands menu.
- Changed many places in the add-on where it said
GMT
to sayUTC
instead.
Main Menu
- Hid many of the deprecated buttons that were on the Main Menu. They can still be added back in the settings (Main Menu > Settings > UI Settings > Menu Configurations > Main Menu > Main Settings).
Misc.
- Updated all the links to my website in the add-on to be https://www.8crafter.com instead of https://sites.google.com/view/8craftermods/home.
Removals
Settings
Settings Options
config.chatRanks.defaultRankTemplateString
(Main Menu > Settings > Chat Ranks Settings > Default Rank For Players With No Rank) has been removed, please useconfig.chatRanks.defaultRank
instead, with this new option, it is not evaluated as a JavaScript template string, instead it is treated like a regular chat rank, if you still want to make it dynamically determine the default rank, switch the rank style mode toCustom(Advanced)
, set the default rank to a specific value likedynamicallyCalculatedRank
, and set the rank template string to be something like"[${rank!='dynamicallyCalculatedRank'?rank:(My code to determine the rank here.)}§r]"
.
Script Form UI
- Removed the scrollable checkbox from the text fields, as the multiline mode without the scrollable capability is unnecessary. Now when you check the multiline checkbox, it acts like what enabling both multiline and scrollable would have done before.
Fixes
Ban System
- The ban system now waits a few ticks after a player starts joining, before it kicks them, so that they will actually see the kick reason messsage, instead of just "Disconnected from server.".
Chat Ranks
- When using a custom chat message color gradient, it will now automatically exclude areas where you have applied a color formatting code. Before it would only exclude areas after
§!
or in between two§?
, you can still use these codes. You can also still use§#
to force the gradient to start applying again.
Commands
- Fixed the
\swapitems
command. - Fixed the
\swaprows
command. - The
\selectionrender
command now works when the selected area contains unloaded chunks.
Entities
- Fixed a bug where the following entities were attacked by wardens:
andexdb:player_inventory_save_storage
andexdb:player_shop_recieved_shop_items_storage
andexdb:saved_item
andexdb:saved_shop_item
andexdb:tickingarea
andexdb:tickingarea_2
andexdb:tickingarea_3
andexdb:tickingarea_4
andexdb:tickingarea_5
andexdb:tickingarea_6
Items
- Fixed the Ultra Bundle (
andexdb:ultra_bundle
).
Player Data Save System
- Fixed a bug where if a player left while their data was being saved, it would throw an error. Now it just warns you in the console instead. It can give any of the following warnings:
Async player inventory save canceled for ${player.id} because the player is no longer valid, likely because they left during the save process.
Player inventory save canceled for ${player.id} because the player is no longer valid, likely because they left during the save process.
Player data save canceled for ${player.id} because the player is no longer valid, likely because they left during the save process.
Player inventory save skipped for ${p.id} because the player is no longer valid, likely because they left during the save process.
Script Form UI
- Fixed a bug where to select the multiline checkbox above the text fields when using controller, you had to use the right joystick to move the entire ui, instead of just being able to select it directly. A side effect of this is that if you click anywhere to the right of the multiline checkbox on touch or mouse, it will select it, which makes it much easier to press it.
UIs
- Fixed a bug where the search query would be cleared when switching pages in the manage players and view players with permission menus.
Ultra Security Mode
- Fixed a bug where the
andexdb.useOwnerLevelCommands
,andexdb.useHeadAdminLevelCommands
,andexdb.useAdminLevelCommands
, andandexdb.useModeratorLevelCommands
permissions did not do anything. - Fixed a bug where the menu to edit the required permission level for a command was broken and threw an error when you tried to open it.
Technical Additions
- Added the following methods to
Boolean.prototype
:toFormattedStringYN(): "§aYes" | "§cNo";
toFormattedStringYNB(): "§2Yes" | "§4No";
- Added
config.banSystem.enabled
to theconfig
class. - Added the Moment.js node module, and the moment-precise-range-plugin node module.
- The
moment
object is now available onglobalThis
. - Added the mcbe-ipc node module.
- Added the global
IPC
,IPC_NET
,IPC_PROTO
objects. - Added the following method to
Array.prototype
:
/**
* Returns a random element from the array.
* @returns {T[number]} The random element.
*/
randomElement(): T;
- Added the following method to
Entity.prototype
andexecuteCommandPlayerW.prototype
:
/**
* Deletes a string from an entity's dynamic properties.
*
* @param {Entity} entity - The entity from which the string will be deleted.
* @param {string} propertyName - The name of the property the string is saved under.
*
* @throws {TypeError} If `propertyName` is not a string.
*/
deleteStringFromDynamicProperties(propertyName: string): void;
- Added the following method to
World.prototype
:
/**
* Deletes a string from dynamic properties.
*
* @param {string} propertyName - The name of the property the string is saved under.
*
* @throws {TypeError} If `propertyName` is not a string.
*/
deleteStringFromDynamicProperties(propertyName: string): void;
- Added a partial
intl
polyfill. - Added the
ScoreboardV2
class:
export declare class ScoreboardV2 {
static addObjective(objectiveId: string, displayName?: string): ScoreboardV2Objective;
static getObjective(objectiveId: string): ScoreboardV2Objective | undefined;
static getObjectives(): ScoreboardV2Objective[];
static getObjectiveIds(): string[];
static removeObjective(objectiveId: ScoreboardV2Objective | string): boolean;
}
- Added the
ScoreboardV2Objective
class:
export declare class ScoreboardV2Objective {
displayName: string;
id: string;
private scores;
constructor(id: string);
addScore(participant: string, scoreToAdd: bigint): bigint;
getParticipants(): string[];
getScore(participant: string): bigint | undefined;
getScores(): {
participant: string;
score: bigint;
}[];
hasParticipant(participant: string): boolean;
isValid(): boolean;
transferFromScoreboard(scoreboard: ScoreboardObjective): void;
removeParticipant(participant: string): boolean;
setScore(participant: string, score: bigint): void;
private save;
/**
* @throws Throws if the scoreboard has not been saved.
*/
private load;
delete(): void;
toJSON(): {
id: string;
displayName: string;
scores: {
[playerId: string]: bigint;
};
};
static get(objectiveId: string): ScoreboardV2Objective | undefined;
static new(objectiveId: string, displayName?: string): ScoreboardV2Objective;
}
- Added the following methods and properties to the
savedPlayer
class:
saveMode: PlayerDataSaveMode;
addOnJoinAction(action: SavedPlayerOnJoinAction): this;
addOnJoinActions(actions: SavedPlayerOnJoinActions): this;
removeOnJoinActionsOfType(type: SavedPlayerOnJoinAction["type"]): this;
/**
* Returns true if the player's saved inventory data is using the legacy pre-1.5.0 format, this would be the case if the player's inventory was saved before the 1.5.0 player save format version, or the {@linkcode config.system.useLegacyPlayerInventoryDataSaveSystem} option was set to true when the player's inventory was saved.
*/
get hasLegacyInventorySave(): boolean;
get hasModernInventorySave(): boolean;
- Made the following changes to a few methos of the
savedPlayer
class:
- static savePlayer(player: Player): string;
- static savePlayerAsync(player: Player): Promise<string>;
- static getSavedPlayer(savedPlayerId: string): savedPlayer;
+ static savePlayer(player: Player): string | undefined;
+ static savePlayerAsync(player: Player): Promise<string | undefined>;
+ static getSavedPlayer(savedPlayerId: string): savedPlayer | undefined;
Technical Changes
- Updated the global
stack
getter to remove the part of the stack that includes the stack getter itself. JSONB.stringify
now supports getting the value of an object to stringify based on itstoJSONB
method- Massive update to the
testForObjectTypeExtension
function. Check thebp/scripts/functions/testForObjectTypeExtension.js
andbp/declaration/functions/testForObjectTypeExtension.d.ts
files for more information. - Updated the
ban_format_version
from1.2.0
to1.3.0
; - Updated the
player_save_format_version
from1.6.0
to1.7.0
; - Updated the
spawn_protection_format_version
from1.0.1
to3.0.0
;
Technical Removals
- Removed the
ui_format_version
file, as it is not used. - Removed the
coordinates_format_version
file, as it is not used. - Removed the entire
lagacyModuleAliases
folder.
Technical Fixes
- Fixed a bug where
JSONB.stringify
would log stuff to the console.