UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

1 lines 16.3 kB
"use strict";(self.webpackChunkmctools_app=self.webpackChunkmctools_app||[]).push([[445],{43445:(e,t,s)=>{s.d(t,{default:()=>E});var a=s(74848),r=s(96540),i=s(30541),o=s(36747),l=s(40267),n=s(60982),c=s(86816),u=s(10690),d=s(14466);class h{static cubeEnsureBedrockProperties(e){for(let t=0;t<e.maxX;t++)for(let s=0;s<e.maxY;s++)for(let a=0;a<e.maxZ;a++){const r=e.x(t).y(s).z(a);r.isEmpty||this.blockEnsureBedrockProperties(r)}}static blockEnsureBedrockProperties(e){for(const t in e.properties){const s=e.getProperty(t);switch(t){case"facing":"east"===s.value?e.ensureProperty("facing_direction").value=u.Rk.east:"west"===s.value?e.ensureProperty("facing_direction").value=u.Rk.west:"north"===s.value?e.ensureProperty("facing_direction").value=u.Rk.north:"south"===s.value&&(e.ensureProperty("facing_direction").value=u.Rk.south);break;case"age":case"face":case"bottom":case"charges":case"extended":case"has_book":case"has_record":case"instrument":case"inverted":case"lit":case"locked":case"shape":case"short":case"signal_fire":case"snowy":case"down":case"up":case"east":case"west":case"north":case"south":break;case"attached":e.ensureProperty("attached_bit").value=s.asBoolean(!1);break;case"attachment":let a="hanging";switch(s.asString("ceiling").toLowerCase()){case"ceiling":a="hanging";break;case"single_wall":case"double_wall":a="side";break;case"floor":a="floor"}e.ensureProperty("attachment").value=a;break;case"axis":const r=s.asString("x");e.shortTypeId&&e.shortTypeId.indexOf("nether")>=0?"x"===r?e.ensureProperty("portal_axis").value="x":"z"===r&&(e.ensureProperty("portal_axis").value="z"):"x"===r?e.ensureProperty("facing_direction").value=u.Rk.north:"y"===r?e.ensureProperty("facing_direction").value=u.Rk.up:"z"===r&&(e.ensureProperty("facing_direction").value=u.Rk.east);break;case"bites":e.ensureProperty("bite_counter").value=s.asNumber(0);break;case"conditional":e.ensureProperty("conditional_bit").value=s.asBoolean(!1);break;case"delay":e.ensureProperty("repeater_delay").value=s.asNumber(1)-1;break;case"disarmed":e.ensureProperty("disarmed_bit").value=s.asBoolean(!1);break;case"distance":let i=s.asNumber(1);i>5&&(i=5),e.ensureProperty("stability").value=i;break;case"drag":e.ensureProperty("drag_down").value=s.asBoolean(!1);break;case"eggs":const o=s.asNumber(1);let l="one_egg";2===o?l="two_egg":3===o?l="three_egg":4===o&&(l="four_egg"),e.ensureProperty("turtle_egg_count").value=l;break;case"enabled":e.ensureProperty("toggle_bit").value=s.asBoolean(!0);break;case"eye":e.ensureProperty("end_portal_eye_bit").value=s.asBoolean(!0);break;case"half":switch(s.asString("lower").toLowerCase()){case"lower":case"bottom":e.ensureProperty("upper_block_bit").value=!1;break;default:e.ensureProperty("upper_block_bit").value=!0}break;case"hanging":e.ensureProperty("hanging").value=s.asBoolean(!0);break;case"has_bottle_0":e.ensureProperty("brewing_stand_slot_a_bit").value=s.asBoolean(!1);break;case"has_bottle_1":e.ensureProperty("brewing_stand_slot_b_bit").value=s.asBoolean(!1);break;case"has_bottle_2":e.ensureProperty("brewing_stand_slot_c_bit").value=s.asBoolean(!1);break;case"hatch":const n=s.asNumber(0);0===n||1===n?e.ensureProperty("cracked").value="no_cracks":2===n&&(e.ensureProperty("cracked").value="max_cracked");break;case"hinge":const c=s.asString("hinge");e.ensureProperty("door_hinge_bit").value="left"!==c;break;case"in_wall":e.ensureProperty("in_wall_bit").value=s.asBoolean(!0);break;case"layers":e.ensureProperty("height").value=s.asNumber(1)-1;break;case"leaves":switch(s.asString("small")){case"large":e.ensureProperty("bamboo_leaf_size").value="large_leaves";break;case"none":e.ensureProperty("bamboo_leaf_size").value="no_leaves";break;default:e.ensureProperty("bamboo_leaf_size").value="small_leaves"}break;case"level":const h=s.asNumber(0);"cauldron"===e.shortTypeId?e.ensureProperty("fill_level").value=2*h:"water"!==e.shortTypeId&&"lava"!==e.shortTypeId||(e.ensureProperty("liquid_depth").value=h);break;case"mode":const p=s.asString("compare");"structure"===e.shortTypeId?e.ensureProperty("structure_block_type").value=p:e.ensureProperty("output_subtract_bit").value="subtract"===p;break;case"moisture":e.ensureProperty("moisturized_amount").value=s.asNumber(0);break;case"occupied":e.ensureProperty("occupied_bit").value=s.asBoolean(!1);break;case"open":e.ensureProperty("open_bit").value=s.asBoolean(!1);break;case"part":"head"===s.asString("head")?e.ensureProperty("head_piece_bit").value=!0:e.ensureProperty("head_piece_bit").value=!1;break;case"persistent":e.ensureProperty("persistent_bit").value=s.asBoolean(!1);break;case"pickles":e.ensureProperty("cluster_count").value=s.asNumber(1)-1;break;case"power":e.ensureProperty("redstone_signal").value=s.asNumber(0);break;case"powered":"rail"===e.shortTypeId||"activator_rail"===e.shortTypeId?e.ensureProperty("rail_data_bit").value=s.asBoolean(!1):e.ensureProperty("powered_bit").value=s.asBoolean(!1);break;case"orientation":e.ensureProperty("ground_sign_direction").value=s.asNumber(0);break;case"stage":e.ensureProperty("age_bit").value=s.asBoolean(!0);break;case"triggered":e.ensureProperty("triggered_bit").value=s.asBoolean(!0);break;case"type":const b=e.ensureProperty("type").asString("normal");"top"===b?e.ensureProperty("top_slot_bit").value=!0:"bottom"===b&&(e.ensureProperty("top_slot_bit").value=!1);break;case"waterlogged":!0===s.asBoolean(!1)?e.extraLiquidDepth=u.Ay.MAX_WATER_LEVEL:e.extraLiquidDepth=0;break;case"unstable":e.ensureProperty("explode_bit").value=s.asBoolean(!1);break;default:d.Ay.debugAlert("Unsupported property found: "+t+" with value '"+s.value+"' at block "+e.x+" "+e.y+" "+e.z)}}}}var p=s(50779),b=s(2071),_=s(73896),y=s(94134),g=s(11641),k=s(28211);class v{static setBlocksTypeProperty="setblockstypeproperty";static setBlockProperty="setblockproperty"}var m=s(51044),f=s(14188),x=s(3234),C=s(42224),P=s(66940),B=s(74239);class S extends r.Component{_lastFile;_searchBlockCube;_mainWorld;_id;_toolbarPortalEl=null;static count=0;constructor(e){super(e),this._handleContentUpdated=this._handleContentUpdated.bind(this),this._updateFile=this._updateFile.bind(this),this._setMainWorld=this._setMainWorld.bind(this),this._resetViewClick=this._resetViewClick.bind(this),this._handleSearchTextChanged=this._handleSearchTextChanged.bind(this),this._handleSelectedBlocksChanged=this._handleSelectedBlocksChanged.bind(this),this._handleSearchBlockClicked=this._handleSearchBlockClicked.bind(this),this._excludeEdgesToggle=this._excludeEdgesToggle.bind(this),this._handleSuggestionClick=this._handleSuggestionClick.bind(this),this._pushToMinecraft=this._pushToMinecraft.bind(this),this._handleEntitySelect=this._handleEntitySelect.bind(this),this._handleAddEntityClick=this._handleAddEntityClick.bind(this),this._handleResizeRequested=this._handleResizeRequested.bind(this),this._id="I:"+S.count,S.count++,this._searchBlockCube=new o.A,this._searchBlockCube.setMaxDimensions(1,1,1)}componentDidUpdate(e,t){this._updateFile()}componentDidMount(){this._updateFile()}async _updateFile(){if(this._lastFile!==this.props.file){this._lastFile=this.props.file;let e=!1;null!=this.state&&(e=this.state.excludeEdges);const t=this.props.file;if(d.Ay.verbose(`StructureEditor._updateFile: file=${t?t.storageRelativePath:"undefined"} isContentLoaded=${t?.isContentLoaded} type=${t?.type} contentKind=${void 0===t?"no-file":void 0===t.content?"undefined":null===t.content?"null":"string"==typeof t.content?`string(len=${t.content.length})`:t.content instanceof Uint8Array?`Uint8Array(len=${t.content.length})`:`other(${typeof t.content})`}`),void 0!==this.props.file&&this.props.file.isContentLoaded){const t=this.props.file;if(void 0!==this.props.setActivePersistable&&this.props.setActivePersistable(this),void 0!==t.content)if("snbt"===t.type&&"string"==typeof t.content){const s=new n.A;s.loadFromSnbtText(t.content),void 0!==s.cube&&h.cubeEnsureBedrockProperties(s.cube),this.setState({structure:s,blockCube:s.cube,excludeEdges:e})}else if("mcstructure"===t.type&&t.content instanceof Uint8Array){const s=new n.A;if(await s.loadFromNbtBytes(t.content),m.A.isDebug)try{const e=new n.A;e.shallowCopyFrom(s);const a=e.createNbt();if(void 0!==a){let e=!1;try{void 0!==s.nbt&&a.getJsonString()!==s.nbt.getJsonString()&&(e=!0)}catch(e){}if(e)throw new Error("NBT structures are not in sync");const r=a.toBinary();void 0!==r&&m.A.throwIfUint8ArraysNotEqual(t.content,r)}}catch(e){d.Ay.debug("Structure sync validation error: "+e)}this.setState({structure:s,blockCube:s.cube,excludeEdges:e})}}}}_handleSearchTextChanged(e){this._handleSearchText(e.target.value)}_handleSearchText(e){let t;const s=[];if(e.length>3){const a=l.A.getMatchingBlocks(e);a.length>0&&(t=a[0]);for(let t=0;t<a.length&&s.length<3;t++)a[t].title.toLowerCase()!==e.toLowerCase()&&s.push(a[t].shortId)}void 0!==t?(this._searchBlockCube.x(0).y(0).z(0).typeName=t.id,this.setState({structure:this.state.structure,blockCube:this.state.blockCube,activeSearchBlockType:t,selectedEntity:this.state.selectedEntity,searchTerm:e,excludeEdges:this.state.excludeEdges,autocompleteSuggestions:s})):void 0!==this.state&&void 0!==this.state.activeSearchBlockType?this.setState({structure:this.state.structure,blockCube:this.state.blockCube,activeSearchBlockType:void 0,selectedEntity:this.state.selectedEntity,searchTerm:e,excludeEdges:this.state.excludeEdges,selectedBlocks:this.state.selectedBlocks,autocompleteSuggestions:s}):void 0!==this.state&&this.state.autocompleteSuggestions!==s&&this.setState({structure:this.state.structure,blockCube:this.state.blockCube,activeSearchBlockType:this.state.activeSearchBlockType,selectedEntity:this.state.selectedEntity,excludeEdges:this.state.excludeEdges,searchTerm:e,selectedBlocks:this.state.selectedBlocks,autocompleteSuggestions:s})}async persist(){if(void 0!==this.props.file&&this.props.file.isContentLoaded&&null!==this.state&&void 0!==this.state.blockCube){const e=this.props.file;if("mcstructure"===e.type){let t=new n.A;void 0!==this.state.structure&&(t=this.state.structure),t.cube=this.state.blockCube;const s=t.getMCStructureBytes();if(void 0!==s)return e.setContent(s)}}return!1}async _handleResizeRequested(e,t,s){this.state?.blockCube&&(this.state.blockCube.resize(e,t,s),this.setState({blockCube:this.state.blockCube}),await this.persist())}runCommand(e,t){switch(d.Ay.message("Command run: "+e.command),e.command){case v.setBlockProperty:if(void 0!==this.state.blockCube){const t=e;this.state.blockCube.x(t.x).y(t.y).z(t.z).getProperty(t.propertyName).value=t.propertyValue}break;case v.setBlocksTypeProperty:if(void 0!==this.state.blockCube){const t=e;for(let e=0;e<t.updatedBlocks.length;e++){const s=t.updatedBlocks[e];this.state.blockCube.x(s.location.x).y(s.location.y).z(s.location.z).typeName=s.newTypeId}}}}_handleContentUpdated(e){this.props.file.setContent(e)}_handleAddEntityClick(){}_handleSearchBlockClicked(){if(null!==this.state&&void 0!==this.state.activeSearchBlockType&&void 0!==this.state.selectedBlocks){const e=[],t=[];for(let s=0;s<this.state.selectedBlocks.length;s++){const a=this.state.selectedBlocks[s];if(void 0===a.x||void 0===a.y||void 0===a.z||void 0===a.typeName)d.Ay.fail("Unexpected untyped block in attempting to set blocks");else{const s=new c.A(a.x,a.y,a.z);t.push({newTypeId:a.typeName,location:s}),e.push({newTypeId:this.state.activeSearchBlockType.id,location:s})}}if(0===e.length)return void d.Ay.fail("No blocks to update in apply command.");const s={command:v.setBlocksTypeProperty,updatedBlocks:e,undoCommand:{command:v.setBlocksTypeProperty,updatedBlocks:t}};this.runCommand(s,!0)}}_resetViewClick(){void 0!==this._mainWorld&&this._mainWorld.resetCamera()}_excludeEdgesToggle(){null!==this.state&&this.setState({structure:this.state.structure,blockCube:this.state.blockCube,activeSearchBlockType:this.state.activeSearchBlockType,selectedEntity:this.state.selectedEntity,excludeEdges:!this.state.excludeEdges,selectedBlocks:this.state.selectedBlocks})}async _pushToMinecraft(){if(null===this.state||null===this.state.blockCube||void 0===this.state.blockCube)return;const e=this.state.blockCube.getCommandList(1,1,1),t=this.props.creatorTools,s=await t.notifyOperationStarted("Pushing this structure to Minecraft");C.A.runCommandList(this.props.creatorTools,e),await t.notifyOperationEnded(s,"Done pushing this structure to Minecraft")}_setMainWorld(e){this._mainWorld=e,void 0!==this._mainWorld&&null!==this._mainWorld&&this._mainWorld.resize()}_handleSuggestionClick(e){const t=l.A.getBlockType(e);null!==t&&this._handleSearchText(t.title)}_handleSelectedBlocksChanged(e){this.setState({structure:this.state.structure,blockCube:this.state.blockCube,activeSearchBlockType:this.state.activeSearchBlockType,excludeEdges:this.state.excludeEdges,selectedEntity:void 0,selectedBlocks:e,autocompleteSuggestions:this.state.autocompleteSuggestions})}_generateTitleForEntity(e,t){return m.A.humanifyMinecraftName(e.typeId)+" "+t}_handleEntitySelect(e){if(null===this.state||void 0===this.state.structure||void 0===this.state.structure.entities)return;const t=e.target.value;if(void 0!==t){const e=this.state.structure.entities;for(let s=0;s<e.length;s++){const a=e[s];this._generateTitleForEntity(a,s)===t&&this.setState({blockCube:this.state.blockCube,activeSearchBlockType:void 0,excludeEdges:this.state.excludeEdges,selectedEntity:e[s],selectedBlocks:void 0,structure:this.state.structure,autocompleteSuggestions:this.state.autocompleteSuggestions})}}}render(){let e=(0,a.jsx)("div",{className:"ste-loading-area",children:this.props.intl.formatMessage({id:"project_editor.struct_ed.loading"},{path:this.props.file.storageRelativePath})}),t=this.props.heightOffset+50,s=!1;P.A.getWidth()<1160&&(s=!0),this.props.readOnly&&(t-=10);const r="calc(100vh - "+this.props.heightOffset+"px)";this._updateFile();const o=[];if(null!==this.state&&void 0!==this.state.structure&&void 0!==this.state.structure.entities&&this.state.structure.entities.length>0){const e=[];let t="";for(let s=0;s<this.state.structure.entities.length;s++){const a=this.state.structure.entities[s],r=this._generateTitleForEntity(a,s);a===this.state.selectedEntity&&(t=r),e.push(r)}const s="("+this.state.structure.entities.length+" entities)";o.push((0,a.jsx)("div",{className:"ste-entityselector-area",children:(0,a.jsx)(p.A,{size:"small",sx:{minWidth:200},children:(0,a.jsx)(b.A,{value:t,displayEmpty:!0,onChange:this._handleEntitySelect,renderValue:e=>e||s,children:e.map(e=>(0,a.jsx)(_.A,{value:e,children:e},e))})})},"entityselector"))}if(null!==this.state&&void 0!==this.state.blockCube){let s;const r=this.state.blockCube;this.state.excludeEdges&&r.maxX>2&&r.maxY>2&&r.maxZ>2&&(s={fromX:1,fromY:0,fromZ:1,toX:r.maxX-1,toY:r.maxY-1,toZ:r.maxZ-1}),e=(0,a.jsx)(i.Ay,{onApplyRequested:this._handleSearchBlockClicked,onSelectedBlocksChanged:this._handleSelectedBlocksChanged,onResizeRequested:this._handleResizeRequested,blockVolume:r,heightOffset:t,viewBounds:s,viewMode:i.Yh.Structure,ref:e=>this._setMainWorld(e),toolbarPortalTarget:this._toolbarPortalEl})}return void 0!==this._mainWorld&&this._mainWorld.resize(),(0,a.jsxs)("div",{className:"ste-area",style:{minHeight:r,maxHeight:r},children:[(0,a.jsx)("div",{className:"ste-toolbar",children:(0,a.jsxs)("div",{className:"ste-toolbar-area",children:[(0,a.jsxs)("div",{className:"ste-toolbar-inner",children:[(0,a.jsxs)(y.A,{direction:"row",spacing:1,"aria-label":this.props.intl.formatMessage({id:"project_editor.struct_ed.toolbar_aria"}),children:[(0,a.jsx)(g.A,{onClick:this._resetViewClick,title:this.props.intl.formatMessage({id:"project_editor.struct_ed.reset_camera"}),size:"small",children:(0,a.jsx)(f.GT,{})}),!this.props.readOnly&&(0,a.jsx)(k.A,{value:"excludeEdges",selected:this.state?.excludeEdges??!1,onChange:this._excludeEdgesToggle,title:this.props.intl.formatMessage({id:"project_editor.struct_ed.exclude_edges"}),size:"small",children:(0,a.jsx)(f.xY,{isCompact:s})}),x.A.hasAppServiceOrDebug&&(0,a.jsx)(g.A,{onClick:this._pushToMinecraft,title:this.props.intl.formatMessage({id:"project_editor.struct_ed.push_to_mc"}),size:"small",children:(0,a.jsx)(f.P,{isCompact:s})})]}),(0,a.jsx)("div",{ref:e=>{e&&e!==this._toolbarPortalEl&&(this._toolbarPortalEl=e,this.forceUpdate())},className:"ste-ve-toolbar-portal"})]}),o]})}),(0,a.jsx)("div",{className:"ste-threedarea-lg",children:e})]})}}const E=(0,B.g)(S)}}]);