diff --git a/projects/1.18-fabric/assets/hexal/hexal/README.md b/projects/1.18-fabric/assets/hexal/hexal/README.md new file mode 100644 index 000000000000..31fe86ec0ee1 --- /dev/null +++ b/projects/1.18-fabric/assets/hexal/hexal/README.md @@ -0,0 +1 @@ +[见主文档](/projects/1.20/assets/hexal/hexal) \ No newline at end of file diff --git a/projects/1.18-fabric/assets/hexal/hexal/lang/en_us.json b/projects/1.18-fabric/assets/hexal/hexal/lang/en_us.json new file mode 100644 index 000000000000..ad15ddea1226 --- /dev/null +++ b/projects/1.18-fabric/assets/hexal/hexal/lang/en_us.json @@ -0,0 +1,173 @@ +{ + "block.hexal.slipway": "Slipway", + + "entity.hexal.wisp.projectile": "Projectile Wisp", + "entity.hexal.wisp.ticking": "Cyclic Wisp", + "entity.hexal.wisp.wandering": "Wandering Wisp", + + "hexcasting.mishap.non_player": "%s expected to be cast by a player.", + "hexcasting.mishap.no_wisp": "%s expected to be cast by a wisp.", + "hexcasting.mishap.others_wisp": "That wisp is owned by %s, not you.", + "hexcasting.mishap.no_links": "%s has no links.", + "hexcasting.mishap.self_link": "Tried to link %s to itself.", + + "hexcasting.mishap.invalid_value.class.type.list.double": "a list of numbers", + "hexal.mishap.invalid_value.vecitem": "a vector or item entity", + + + "hexcasting.spell.hexal:compare/blocks": "Surveyor's Distillation", + "hexcasting.spell.hexal:compare/entities": "Physician's Distillation", + "hexcasting.spell.hexal:compare/types": "Classifier's Distillation", + + "hexcasting.spell.hexal:current_tick": "Timekeeper's Reflection", + "hexcasting.spell.hexal:remaining_evals": "Thanatos' Reflection", + "hexcasting.spell.hexal:breath": "Diver's Purification", + "hexcasting.spell.hexal:health": "Nurse's Purification", + "hexcasting.spell.hexal:light_level": "Lamplighter's Purification", + + "hexcasting.spell.hexal:factorial": "Factorial Purification", + "hexcasting.spell.hexal:running/sum": "Running Sum Purification", + "hexcasting.spell.hexal:running/mul": "Running Product Purification", + + "hexcasting.spell.hexal:everbook/read": "Mnemosyne's Gambit", + "hexcasting.spell.hexal:everbook/write": "Elysium's Gambit", + "hexcasting.spell.hexal:everbook/delete": "Lethe's Gambit", + "hexcasting.spell.hexal:everbook/toggle_macro": "Brigh's Gambit", + + "hexcasting.spell.hexal:smelt": "Smelt", + "hexcasting.spell.hexal:freeze": "Freeze", + "hexcasting.spell.hexal:falling_block": "Falling Block", + + "hexcasting.spell.hexal:wisp/summon/projectile": "Summon Projectile Wisp", + "hexcasting.spell.hexal:wisp/summon/ticking": "Summon Cyclic Wisp", + "hexcasting.spell.hexal:wisp/media": "Reservoir Reflection", + "hexcasting.spell.hexal:wisp/hex": "Manager's Purification", + "hexcasting.spell.hexal:wisp/owner": "Allegiance Distillation", + "hexcasting.spell.hexal:wisp/move/target/set": "Pathfinder's Gambit", + "hexcasting.spell.hexal:wisp/move/target/get": "Pathfinder's Reflection", + "hexcasting.spell.hexal:wisp/move/speed/set": "Haste", + "hexcasting.spell.hexal:wisp/move/speed/get": "Speedometer's Reflection", + "hexcasting.spell.hexal:wisp/trigger/tick": "Delay Wisp", + "hexcasting.spell.hexal:wisp/trigger/comm": "Listen", + "hexcasting.spell.hexal:wisp/trigger/move": "Wander", + "hexcasting.spell.hexal:wisp/consume": "Consume Wisp", + "hexcasting.spell.hexal:wisp/seon/set": "Bind Wisp", + "hexcasting.spell.hexal:wisp/seon/get": "Familiar's Reflection", + + "hexcasting.spell.hexal:get_entity/wisp": "Entity Purification: Wisp", + "hexcasting.spell.hexal:zone_entity/wisp": "Zone Distillation: Wisp", + "hexcasting.spell.hexal:zone_entity/not_wisp": "Zone Distillation: Non-Wisp", + + "hexcasting.spell.hexal:link/link_entity": "Link Entity", + "hexcasting.spell.hexal:link/link_two_entities": "Link Entities", + "hexcasting.spell.hexal:link/unlink": "Unlink", + "hexcasting.spell.hexal:link/get": "Phonebook Purification", + "hexcasting.spell.hexal:link/get_index": "Recognition Purification", + "hexcasting.spell.hexal:link/num": "Popularity Reflection", + + "hexcasting.spell.hexal:link/comm/send": "Send Iota", + "hexcasting.spell.hexal:link/comm/read": "Recitation Reflection", + "hexcasting.spell.hexal:link/comm/num": "Postmaster's Reflection", + "hexcasting.spell.hexal:link/comm/open_transmit": "Open Transmit", + "hexcasting.spell.hexal:link/comm/close_transmit": "Close Transmit", + + + + "hexcasting.spell.book.hexal:light_level": "Lamplighter's Prfn.", + + "hexcasting.spell.book.hexal:running/sum": "Running Sum Prfn.", + "hexcasting.spell.book.hexal:running/mul": "Running Product Prfn.", + + "hexcasting.spell.book.hexal:get_entity/wisp": "Entity Prfn.: Wisp", + "hexcasting.spell.book.hexal:zone_entity/wisp": "Zone Dstl.: Wisp", + "hexcasting.spell.book.hexal:zone_entity/not_wisp": "Zone Dstl.: Non-Wisp", + + + + + "hexal.entry.slipways": "Slipways", + "hexal.page.slipways": "I have heard tales of some geodes in which glowing portals called slipways lie. These slipways are regularly depicted with glowing sparks surrounding them that bear an incredible resemblance to the $(l:hexal:patterns/spells/wisps)$(thing)wisps/$ that I have heard tell of, which may be a connection to look into.", + + + "hexal.entry.hexal_basics": "Hexal Basic Patterns", + "hexal.page.hexal_basics.current_tick": "Adds a number to the stack which seems to be related to how Nature represents time; If I cast the pattern, then cast the same pattern a second later, the number it adds has increased by 20.", + "hexal.page.hexal_basics.remaining_evals": "Adds the number of evaluations a hex is still capable of to the stack. This is reduced by $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ and $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$.", + "hexal.page.hexal_basics.breath": "Removes a Living entity from the stack and returns how much breath it has left (i.e., how close it is to drowning).", + "hexal.page.hexal_basics.health": "Removes a Living entity from the stack and returns how much health it has left (i.e., how close it is to dying).", + "hexal.page.hexal_basics.light_level": "Removes a position vector from the stack and returns the light level at that position.", + + "hexal.entry.hexal_maths": "Hexal Maths", + "hexal.page.hexal_maths.factorial": "Removes a number from the stack and computes its factorial, for example inputting 4 would return 4*3*2*1=24.", + "hexal.page.hexal_maths.running/sum": "Takes a list from the stack and computes its running sum, for example inputting [1,2,5] would return [1,3,8].", + "hexal.page.hexal_maths.running/mul": "Takes a list from the stack and computes its running product, for example inputting [1,2,5] would return [1,2,10].", + + "hexal.entry.hexal_spell": "Hexal Spells", + "hexal.page.hexal_spell.smelt.0": "Remove a location or item entity from the stack, then either smelt the block at the location or smelt all the items in the item entity.", + "hexal.page.hexal_spell.smelt.1": "Costs three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ per item smelted (i.e. three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ for smelting a block, 6 $(l:items/amethyst)$(item)Amethyst Dust/$ to smelt a stack of 8 items.)", + "hexal.page.hexal_spell.freeze": "Freezes the block at a block location. For example, turns water into ice, and ice into packed ice. Costs three $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.falling_block": "Remove a location from the stack, and force the block there to fall as if it were sand or gravel. Costs one and a half $(l:items/amethyst)$(item)Amethyst Dust/$.", + + "hexal.entry.wisps": "Wisps", + "hexal.page.wisps.0": "I have discovered a way to create constructs from the media itself, visible to others and able to move and act somewhat on their own. They are able to cast hexes in my place, similar to how a $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ evaluates patterns. They do take some of my attention to operate this however, and if too many try and execute at once I will only be able to run some of them, leaving the rest for the next instant.", + "hexal.page.wisps.1": "When they are created I assign them a 'reservoir' of media that they have access to, which is taken from me and used to form the wisp. A wisp uses up part of its reservoir simply existing, and when it evaluates the pattern list it is carrying any costs incurred are removed from its reservoir. All wisps seem to take three $(l:items/amethyst)$(item)Amethyst Dust/$ to summon, in addition to whatever media is used for their reservoir.", + "hexal.page.wisps.wisp/summon/projectile.0": "This wisp is summoned and launched like an arrow, casting its hex on whatever it hits. The initial stack when it executes will be a reference to itself, then a reference to what it hit.", + "hexal.page.wisps.wisp/summon/projectile.1": "This could be a block position or an entity reference. The first vector accepted is the location the wisp will be summoned, while the direction of the second is the direction the wisp will be launched, and the second's magnitude seems to affect the wisp's velocity. The cost of the spell increases with the squared magnitude of velocity. The number accepted determines the wisp's reservoir in $(l:items/amethyst)$(item)Amethyst Dust/$. It loses one $(l:items/amethyst)$(item)Amethyst Dust/$ of media every second once summoned, and has a range of influence of 4 blocks.", + "hexal.page.wisps.wisp/summon/ticking.0": "Similar to Summon Projectile Wisp, but with only one vector input for the position to summon the wisp. Cyclic wisps are unmoving once summoned, instead executing their hex up to 20 times each second.", + "hexal.page.wisps.wisp/summon/ticking.1": "The first time it casts the stack will start with a reference to itself, from which point it will always start with the stack and ravenmind in the state they finished on the last cast. This wisp has a less stable form making it lose significantly more media every second, losing one $(l:items/amethyst)$(item)Amethyst Dust/$ per second once summoned, as well as an amount proportional to the amount remaining. It has a range of influence of 8 blocks.", + "hexal.page.wisps.wisp/media": "Add the amount of media in the wisp's reservoir to the stack. This must be cast by a wisp; trying to cast it through a staff will fail rather spectacularly.", + "hexal.page.wisps.wisp/hex": "Removes a reference to a wisp from the stack, and replaces it with the wisp's contained hex. Must be a wisp you summoned.", + "hexal.page.wisps.wisp/owner": "Removes a reference to a wisp and an entity from the stack, and returns one if that entity owns that wisp, and a zero otherwise.", + "hexal.page.wisps.wisp/move/target/set": "Removes a position vector from the stack; The Cyclic Wisp that executed this pattern will move in a straight line towards that position (colliding with terrain in its path) until it reaches it.", + "hexal.page.wisps.wisp/move/target/get": "Adds to the stack the position vector that the executing Cyclic Wisp is currently moving towards.", + "hexal.page.wisps.wisp/move/speed/set": "Removes a number from the stack, and sets the executing Cyclic Wisp's maximum speed to that number.", + "hexal.page.wisps.wisp/move/speed/get": "Gets the executing Cyclic Wisp's current maximum speed.", + "hexal.page.wisps.get_entity/wisp": "Transform the position on the stack into the wisp at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + "hexal.page.wisps.zone_entity/wisp": "Take a position and maximum distance on the stack, and combine them into a list of wisps near the position.", + "hexal.page.wisps.zone_entity/not_wisp": "Take a position and maximum distance on the stack, and combine them into a list of non-wisp entities near the position.", + "hexal.page.wisps.wisp/trigger/tick": "Removes an integer from the stack, then delays the wisp's next cast until at least that many twentieth's of a second have passed.", + "hexal.page.wisps.wisp/trigger/comm": "The wisp's next cast will not occur until it has received at least one $(l:hexal:patterns/spells/links#hexal:link/comm/send)$(action)communication/$.", + "hexal.page.wisps.wisp/trigger/move": "The wisp's next cast will not occur until it has reached the position it is $(l:hexal:patterns/spells/wisps#hexal:wisp/move/target/set)$(action)navigating/$ towards.", + + "hexal.entry.links": "Links", + "hexal.page.links.0": "These patterns outline a system that I have found for communicating information from one $(l:hexal:patterns/spells/wisps)$(thing)wisp/$ to another, among other things. There are a number of patterns related to creating these links that are able to transmit information, and a number of patterns related to sending and receiving iotas over a link once it is created. A wisp can have any number of links active, with each costing a negligible amount of media to maintain each twentieth of a second.", + "hexal.page.links.1": "As links are created connected to a wisp that wisp will assign an order to them, based on the order which they were created, which is used to reference the links in a number of patterns. Unless otherwise stated, these patterns must be evaluated by a wisp, with unpleasant consequences if I try to evaluate them myself.", + "hexal.page.links.link/link_entity": "Links the casting wisp to the entity removed from the stack, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/link_two_entities": "May be evaluated by any casting instrument. Links two entities, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/unlink": "Removes the link at the given index from the casting wisp's links. This costs two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/get": "Removes an index from the stack, and adds the entity connected to the link at that index to the stack.", + "hexal.page.links.link/get_index": "Removes an entity from the stack, and adds the index to the link to that entity to the stack (or -1 if the wisp isn't linked to that entity).", + "hexal.page.links.link/num": "Adds the number of links to the wisp to the stack.", + "hexal.page.links.link/comm/send": "Removes an iota from the stack, then removes an index from the stack and sends the iota along the link at the given index. This costs one hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/comm/read": "When a wisp receives an iota along a link it is added to a queue. This pattern adds the first iota in the queue to the stack, removing it from the queue.", + "hexal.page.links.link/comm/num": "Adds to the stack the number of unread iota in the wisp's received iota queue.", + "hexal.page.links.link/comm/open_transmit": "Similar to $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, until drawing a $(l:hexal:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ all patterns I draw are sent along the link whose index is at the top of the stack.", + "hexal.page.links.link/comm/close_transmit": "When drawn after $(l:hexal:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ I stop transmitting drawn patterns. If either $(l:hexal:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ or $(l:hexal:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ are executed by an intermediary caster such as a wisp, they will mishap.", + + "hexal.entry.great_wisps": "Great Wisp Spells", + "hexal.page.great_wisps.wisp/consume.0": "Remove a wisp from the stack, and disassemble the wisp. The patterns contained are lost, but the media that it contained can be repurposed if this spell is cast by another wisp.", + "hexal.page.great_wisps.wisp/consume.1": "Costs either an $(l:items/amethyst)$(item)Amethyst Crystal/$ if the wisp is owned by you, or half again as much media as the consumed wisp contains if the wisp is owned by another. Repurposing the media is not completely efficient, losing one twentieth of the consumed wisp's reserve in transfer.", + "hexal.page.great_wisps.wisp/seon/set": "Bind one of my wisps closer to me; I may only have one bound wisp at a time, but whichever wisp is bound costs significantly less upkeep.", + "hexal.page.great_wisps.wisp/seon/get": "Returns my currently bound wisp. (This is not a great spell, I have simply placed it here for convenience.)", + + "hexal.entry.type_comparison": "Type Comparisons", + "hexal.page.type_comparison.compare/blocks": "Remove two locations from the stack; if the block at the first is equal to the block at the second, return 1. Otherwise, return 0.", + "hexal.page.type_comparison.compare/entities": "Remove two entities from the stack; if the entities are the same type (with items comparing the type of item) return 1. Otherwise, return 0.", + "hexal.page.type_comparison.compare/types": "Remove two iota from the stack; if iota are the same type, return 1. Otherwise, return 0. For example, removing 0 and 5 would return 1, as would removing [] and [12], while removing 1 and (1,2,3) would return 0.", + + + + + "hexal.entry.everbook": "Everbook", + "hexal.page.everbook.0": "Your Everbook is a strange space that your broken mind can now reach. There are many yous that seem to share this record, worlds and worlds of progress, beginning again and again. Your Everbook can store patterns paired with iotas like an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$, though the fragile nature of your mind these days makes it best to route all access to your Everbook through an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$. Any world that you reach enlightenment in, you will have access to the entries you add to it now.", + "hexal.page.everbook.everbook/read": "Takes the position of an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and retrieves the iota at that key from your Everbook, storing it in the given $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$ if able.", + "hexal.page.everbook.everbook/write": "Takes the position of an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and stores the iota in that record at that key to your Everbook at the same key.", + "hexal.page.everbook.everbook/delete": "Takes a pattern and removes the entry with that pattern key from your Everbook.", + "hexal.page.everbook.everbook/toggle_macro.0": "Takes a pattern and marks that entry of your Everbook as a Pattern that when drawn by your hand will be treated as any other of Nature's patterns.", + "hexal.page.everbook.everbook/toggle_macro.1": "When you draw the key of an Everbook entry that has been marked as a Pattern, if that entry is a list Nature will execute each element of the list as it would with $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$, though it does not use up an evaluation. Attempting to mark an entry as a Pattern if it is non-existent or infinitely recursive will fail.", + + "hexal.entry.everbook_entries": "Everbook Entries", + "hexal.page.everbook_entries.0": "Every page in this entry displays the pattern key for one of the entries of your $(l:hexal:patterns/everbook)$(action)Everbook/$.", + + "hexal.everbook_pattern_entry.header": "Stored Key: %d", + "hexal.everbook_pattern_entry.macro_header": "Macro Key: %d" +} \ No newline at end of file diff --git a/projects/1.18-fabric/assets/hexal/hexal/packer-policy.json b/projects/1.18-fabric/assets/hexal/hexal/packer-policy.json new file mode 100644 index 000000000000..1ee9f40270c3 --- /dev/null +++ b/projects/1.18-fabric/assets/hexal/hexal/packer-policy.json @@ -0,0 +1,6 @@ +[ + { + "type": "indirect", + "source": "projects/1.18/assets/hexal/hexal" + } +] \ No newline at end of file diff --git a/projects/1.18/assets/hexal/hexal/README.md b/projects/1.18/assets/hexal/hexal/README.md new file mode 100644 index 000000000000..31fe86ec0ee1 --- /dev/null +++ b/projects/1.18/assets/hexal/hexal/README.md @@ -0,0 +1 @@ +[见主文档](/projects/1.20/assets/hexal/hexal) \ No newline at end of file diff --git a/projects/1.18/assets/hexal/hexal/lang/zh_cn.json b/projects/1.18/assets/hexal/hexal/lang/zh_cn.json index 0ab7eb5182f1..47c35ecc542a 100644 --- a/projects/1.18/assets/hexal/hexal/lang/zh_cn.json +++ b/projects/1.18/assets/hexal/hexal/lang/zh_cn.json @@ -3,7 +3,7 @@ "entity.hexal.wisp.projectile": "弹射式咒灵", "entity.hexal.wisp.ticking": "循环式咒灵", - "entity.hexal.wisp.wandering": "巡航中咒灵", + "entity.hexal.wisp.wandering": "游走咒灵", "hexcasting.mishap.non_player": "%s需由玩家执行", "hexcasting.mishap.no_wisp": "%s需由咒灵执行", diff --git a/projects/1.19/assets/hexal/hexal/README.md b/projects/1.19/assets/hexal/hexal/README.md new file mode 100644 index 000000000000..31fe86ec0ee1 --- /dev/null +++ b/projects/1.19/assets/hexal/hexal/README.md @@ -0,0 +1 @@ +[见主文档](/projects/1.20/assets/hexal/hexal) \ No newline at end of file diff --git a/projects/1.19/assets/hexal/hexal/lang/en_us.json b/projects/1.19/assets/hexal/hexal/lang/en_us.json new file mode 100644 index 000000000000..0feed156602b --- /dev/null +++ b/projects/1.19/assets/hexal/hexal/lang/en_us.json @@ -0,0 +1,411 @@ +{ + "block.hexal.slipway": "Slipway", + "block.hexal.mediafied_storage": "Mote Nexus", + "block.hexal.relay": "Relay", + + "entity.hexal.wisp.projectile": "Projectile Wisp", + "entity.hexal.wisp.ticking": "Cyclic Wisp", + "entity.hexal.wisp.wandering": "Wandering Wisp", + + + "hexcasting.mishap.non_player": "%s expected to be cast by a player.", + "hexcasting.mishap.no_wisp": "%s expected to be cast by a wisp.", + "hexcasting.mishap.others_wisp": "That wisp is owned by %s, not you.", + "hexcasting.mishap.no_links": "%s has no links.", + "hexcasting.mishap.self_link": "Tried to link %s to itself.", + "hexcasting.mishap.no_bound_storage": "No bound Mote Nexus.", + "hexcasting.mishap.storage_unloaded": "Bound Mote Nexus is unloaded.", + "hexcasting.mishap.excessive_reproduction": "Wisp %s tried to reproduce excessively; only 1 child per tick.", + "hexcasting.mishap.illegal_interworld_iota": "Attempted to bring iota %s interworld, this type of iota cannot be added to the Everbook.", + + "hexcasting.mishap.invalid_value.class.linkable": "a linkable", + "hexcasting.mishap.invalid_value.class.wisp": "a wisp", + "hexcasting.mishap.invalid_value.class.consumable_entity": "a consumable entity", + "hexcasting.mishap.invalid_value.class.wisp.casting": "a casting wisp", + "hexcasting.mishap.invalid_value.class.type.block": "a block type", + "hexcasting.mishap.invalid_value.class.type.item": "an item type", + "hexcasting.mishap.invalid_value.class.type.entity": "an entity or entity type", + "hexcasting.mishap.invalid_value.class.type.block.able": "an item type that has a block", + "hexcasting.mishap.invalid_value.class.type.list.double": "a list of numbers", + "hexcasting.mishap.invalid_value.class.gate": "a gate", + "hexcasting.mishap.invalid_value.class.mote": "a mote", + "hexcasting.mishap.invalid_value.class.moteentity.itemitemframe": "a mote, item entity, or item frame", + "hexcasting.mishap.invalid_value.moteitemtype": "a mote or item type", + "hexcasting.mishap.invalid_value.motemotelist": "a mote or list of motes", + "hexcasting.mishap.invalid_value.motemotelistmotelistlist": "a mote, list of motes, or list of lists of motes", + "hexcasting.mishap.invalid_value.veclist": "a vector or a list of vectors", + "hexcasting.mishap.invalid_value.blockitementityitemframeitem": "a block, item entity, item frame, or mote", + "hexcasting.mishap.invalid_value.entity.itemitemframe": "an item entity or item frame", + "hexcasting.mishap.invalid_value.int.strictly_positive": "a strictly positive integer", + "hexcasting.mishap.invalid_value.crafting_recipe": "a valid crafting recipe", + "hexcasting.mishap.invalid_value.mote_duplicated": "each mote to appear only once", + "hexcasting.mishap.invalid_value.cant_combine_motes": "two motes that can be combined", + "hexcasting.mishap.invalid_value.mote_not_size_one": "a mote with no NBT data or of size one", + "hexcasting.mishap.invalid_value.gate.offset": "an offset of at most %f blocks", + + + "hexcasting.iota.hexal:iota_type": "Iota Type", + "hexcasting.iota.hexal:entity_type": "Entity Type", + "hexcasting.iota.hexal:item_type": "Item Type", + "hexcasting.iota.hexal:gate": "Gate", + "hexcasting.iota.hexal:item": "Item", + + "hexal.spelldata.entity_type": "Type", + "hexal.spelldata.gate": "Gate %d", + "hexal.spelldata.item": "%s x%d", + + + "hexcasting.spell.hexal:type/iota": "Classifier's Purification", + "hexcasting.spell.hexal:type/entity": "Physician's Purification", + "hexcasting.spell.hexal:type/block_item": "Sorter's Purification", + "hexcasting.spell.hexal:type/item_held": "Sorter's Reflection", + + "hexcasting.spell.hexal:get_entity/type": "Entity Distillation: Type", + "hexcasting.spell.hexal:zone_entity/type": "Zone Exaltation: Type", + "hexcasting.spell.hexal:zone_entity/not_type": "Zone Exaltation: Not-Type", + + "hexcasting.spell.hexal:current_tick": "Timekeeper's Reflection", + "hexcasting.spell.hexal:remaining_evals": "Thanatos' Reflection", + "hexcasting.spell.hexal:breath": "Diver's Purification", + "hexcasting.spell.hexal:health": "Nurse's Purification", + "hexcasting.spell.hexal:armour": "Squire's Purification", + "hexcasting.spell.hexal:toughness": "Boxer's Purification", + "hexcasting.spell.hexal:light_level": "Lamplighter's Purification", + + "hexcasting.spell.hexal:factorial": "Factorial Purification", + "hexcasting.spell.hexal:running/sum": "Running Sum Purification", + "hexcasting.spell.hexal:running/mul": "Running Product Purification", + + "hexcasting.spell.hexal:everbook/read": "Mnemosyne's Gambit", + "hexcasting.spell.hexal:everbook/write": "Elysium's Gambit", + "hexcasting.spell.hexal:everbook/delete": "Lethe's Gambit", + "hexcasting.spell.hexal:everbook/toggle_macro": "Brigh's Gambit", + + "hexcasting.spell.hexal:smelt": "Smelt", + "hexcasting.spell.hexal:freeze": "Freeze", + "hexcasting.spell.hexal:falling_block": "Falling Block", + "hexcasting.spell.hexal:place_type": "Place Block II", + "hexcasting.spell.hexal:particles": "Particles", + + "hexcasting.spell.hexal:interop/fabric_only/phase_block": "Phase Block", + + "hexcasting.spell.hexal:wisp/summon/projectile": "Summon Projectile Wisp", + "hexcasting.spell.hexal:wisp/summon/ticking": "Summon Cyclic Wisp", + "hexcasting.spell.hexal:wisp/self": "Identity Reflection", + "hexcasting.spell.hexal:wisp/media": "Reservoir Reflection", + "hexcasting.spell.hexal:wisp/hex": "Manager's Purification", + "hexcasting.spell.hexal:wisp/owner": "Allegiance Distillation", + "hexcasting.spell.hexal:wisp/move/target/set": "Pathfinder's Gambit", + "hexcasting.spell.hexal:wisp/move/target/get": "Pathfinder's Reflection", + "hexcasting.spell.hexal:wisp/move/speed/set": "Haste", + "hexcasting.spell.hexal:wisp/move/speed/get": "Speedometer's Reflection", + "hexcasting.spell.hexal:wisp/trigger/tick": "Delay Wisp", + "hexcasting.spell.hexal:wisp/trigger/comm": "Listen", + "hexcasting.spell.hexal:wisp/trigger/move": "Wander", + "hexcasting.spell.hexal:wisp/consume": "Consume Wisp", + "hexcasting.spell.hexal:wisp/seon/set": "Bind Wisp", + "hexcasting.spell.hexal:wisp/seon/get": "Familiar's Reflection", + "hexcasting.spell.hexal:wisp/transfer/allow": "Allow Transfer", + "hexcasting.spell.hexal:wisp/transfer/disallow": "Disallow Transfer", + "hexcasting.spell.hexal:wisp/transfer/others/allow": "Allow Transfer Others", + "hexcasting.spell.hexal:wisp/transfer/others/disallow": "Disallow Transfer Others", + + "hexcasting.spell.hexal:get_entity/wisp": "Entity Purification: Wisp", + "hexcasting.spell.hexal:zone_entity/wisp": "Zone Distillation: Wisp", + "hexcasting.spell.hexal:zone_entity/not_wisp": "Zone Distillation: Non-Wisp", + + "hexcasting.spell.hexal:link": "Link", + "hexcasting.spell.hexal:link/others": "Link Others", + "hexcasting.spell.hexal:link/unlink": "Unlink", + "hexcasting.spell.hexal:link/unlink/others": "Unlink Others", + "hexcasting.spell.hexal:link/get": "Phonebook Purification", + "hexcasting.spell.hexal:link/get_index": "Recognition Purification", + "hexcasting.spell.hexal:link/num": "Popularity Reflection", + + "hexcasting.spell.hexal:link/comm/send": "Send Iota", + "hexcasting.spell.hexal:link/comm/read": "Recitation Reflection", + "hexcasting.spell.hexal:link/comm/num": "Postmaster's Reflection", + "hexcasting.spell.hexal:link/comm/clear": "Unclogging Gambit", + "hexcasting.spell.hexal:link/comm/open_transmit": "Open Transmit", + "hexcasting.spell.hexal:link/comm/close_transmit": "Close Transmit", + + "hexcasting.spell.hexal:gate/make": "Gate's Reflection", + "hexcasting.spell.hexal:gate/mark": "Gate's Opening", + "hexcasting.spell.hexal:gate/unmark": "Gate's Dismissal", + "hexcasting.spell.hexal:gate/mark/num/get": "Marked Purification", + "hexcasting.spell.hexal:gate/mark/get": "Marked Distillation", + "hexcasting.spell.hexal:gate/close": "Gate's Closing", + + "hexcasting.spell.hexal:mote/storage/bind": "Bind Storage", + "hexcasting.spell.hexal:mote/storage/bind/temp": "Bind Storage - Temporary", + "hexcasting.spell.hexal:mote/contained_type/get": "Stocktake Reflection", + "hexcasting.spell.hexal:mote/contained/get": "Stocktake Purification", + "hexcasting.spell.hexal:mote/storage/remaining_capacity/get": "Capacity Reflection", + "hexcasting.spell.hexal:mote/storage/contains": "Containment Distillation", + "hexcasting.spell.hexal:mote/make": "Mediafy Item", + "hexcasting.spell.hexal:mote/return": "Return Item", + "hexcasting.spell.hexal:mote/count/get": "Weighing Purification", + "hexcasting.spell.hexal:mote/combine": "Stacking Distillation", + "hexcasting.spell.hexal:mote/combinable": "Stacking Distillation II", + "hexcasting.spell.hexal:mote/split": "Splitting Gambit", + "hexcasting.spell.hexal:mote/storage/get": "Depot Purification", + "hexcasting.spell.hexal:mote/storage/set": "Depot Gambit", + "hexcasting.spell.hexal:mote/craft": "Craft", + "hexcasting.spell.hexal:mote/villager/level/get": "Seniority Purification", + "hexcasting.spell.hexal:mote/trade/get": "Offering Purification", + "hexcasting.spell.hexal:mote/trade": "Trade", + "hexcasting.spell.hexal:mote/use_on": "Use Item On", + + "hexcasting.spell.hexal:tick": "Accelerate", + + + + "hexcasting.spell.book.hexal:light_level": "Lamplighter's Prfn.", + + "hexcasting.spell.book.hexal:running/sum": "Running Sum Prfn.", + "hexcasting.spell.book.hexal:running/mul": "Running Product Prfn.", + + "hexcasting.spell.book.hexal:get_entity/wisp": "Entity Prfn.: Wisp", + "hexcasting.spell.book.hexal:zone_entity/wisp": "Zone Dstl.: Wisp", + "hexcasting.spell.book.hexal:zone_entity/not_wisp": "Zone Dstl.: Non-Wisp", + + "hexcasting.spell.book.hexal:mote/storage/bind/temp": "Bind Storage - Temp.", + + + + "hexal.entry.slipways": "Slipways", + "hexal.page.slipways": "I have heard tales of some geodes in which glowing portals called slipways lie. These slipways are regularly depicted with glowing sparks surrounding them that bear an incredible resemblance to the $(l:hexal:patterns/spells/wisps)$(thing)wisps/$ that I have heard tell of, which may be a connection to look into.", + + "hexal.entry.relay": "Relay", + "hexal.page.relay.0": "Often I wish to $(l:hexal:patterns/spells/links#hexal:link)$(action)link/$ together multiple $(l:hexal:patterns/spells/wisps)$(thing)wisps/$, so that they can share media and information over long distances. However running long chains of wisps to transfer these over great distances is inconvenient, and has great upkeep costs. To resolve this issue I have made Relays. Since they are solid blocks rather than media constructs themselves, they are able to maintain the links without any upkeep costs at all.", + "hexal.page.relay.1": "Any relays connected together will form a network, with any wisps connected to a relay network able to share media between each other as if they were directly connected. Further, any iota sent to one relay in the network is passed on to every other non-relay connected to the network. Relays have a range of 32 blocks (this means two relays can connect at a distance of 64 blocks). The colour of a network's links can be changed by right clicking on any relay with a colouriser.", + "hexal.page.relay.2": "Relays have no owner, so if you want your wisps to $(l:hexal:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)transfer media/$ with them you must specifically allow them to do so.", + + "hexal.entry.hexal_basics": "Hexal Basic Patterns", + "hexal.page.hexal_basics.current_tick": "Adds a number to the stack which seems to be related to how Nature represents time; If I cast the pattern, then cast the same pattern a second later, the number it adds has increased by 20.", + "hexal.page.hexal_basics.remaining_evals": "Adds the number of evaluations a hex is still capable of to the stack. This is reduced by $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ and $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$.", + "hexal.page.hexal_basics.breath": "Removes a Living entity from the stack and returns how much breath it has left (i.e., how close it is to drowning).", + "hexal.page.hexal_basics.health": "Removes a Living entity from the stack and returns how much health it has left (i.e., how close it is to dying).", + "hexal.page.hexal_basics.armour": "Removes a Living entity from the stack and returns how much armour it has.", + "hexal.page.hexal_basics.toughness": "Removes a Living entity from the stack and returns how much toughness it has (another property of armour).", + "hexal.page.hexal_basics.light_level": "Removes a position vector from the stack and returns the light level at that position.", + + "hexal.entry.hexal_maths": "Hexal Maths", + "hexal.page.hexal_maths.factorial": "Takes a number from the stack and computes its factorial, for example inputting 4 would return 4*3*2*1=24.", + "hexal.page.hexal_maths.running/sum": "Takes a list from the stack and computes its running sum, for example inputting [1,2,5] would return [1,3,8].", + "hexal.page.hexal_maths.running/mul": "Takes a list from the stack and computes its running product, for example inputting [1,2,5] would return [1,2,10].", + + "hexal.entry.hexal_spell": "Hexal Spells", + "hexal.page.hexal_spell.smelt.0": "Remove a location, item entity, or mote from the stack, then either smelt the block at the location or smelt all the items in the item entity or mote.", + "hexal.page.hexal_spell.smelt.1": "Costs three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ per item smelted (i.e. three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ for smelting a block, 6 $(l:items/amethyst)$(item)Amethyst Dust/$ to smelt a stack of 8 items.)", + "hexal.page.hexal_spell.freeze": "Freezes the block at a block location. For example, turns water into ice, and ice into packed ice. Costs one $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.falling_block": "Remove a location from the stack, and force the block there to fall as if it were sand or gravel. Costs one and a half $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.place_type": "Accepts an item type or mote and a location, and attempts to place a block of that item type at that location. If a mote was passed it will instead place from the record referenced by that mote. Costs an eighth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.particles": "Accepts a location or a list of locations, and either creates a particle at the location, or creates lines of particles between the locations in the list. Costs two thousandths of an $(l:items/amethyst)$(item)Amethyst Dust/$ per location.", + + "hexal.entry.fabric_only_hexal": "Fabric-Only Hexal Spells", + "hexal.page.fabric_only_hexal.interop/fabric_only/phase_block": "Takes a position and a number, and phases the block at that position out for that many seconds. Costs one ten-thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$ times the square of the time to phase out for.", + + "hexal.entry.wisps": "Wisps", + "hexal.page.wisps.0": "I have discovered a way to create constructs from the media itself, visible to others and able to move and act somewhat on their own. They are able to cast hexes in my place, similar to how a $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ evaluates patterns. They do take some of my attention to operate this however, and if too many try and execute at once I will only be able to run some of them, leaving the rest for the next instant.", + "hexal.page.wisps.1": "When they are created I assign them a 'reservoir' of media that they have access to, which is taken from me and used to form the wisp. A wisp uses up part of its reservoir simply existing, and when it evaluates the pattern list it is carrying any costs incurred are removed from its reservoir. All wisps seem to take three $(l:items/amethyst)$(item)Amethyst Dust/$ to summon, in addition to whatever media is used for their reservoir.", + "hexal.page.wisps.2": "Wisps are punished severely for attempting to hold onto another caster's truename, incurring a 20 times increase in the wisp's media upkeep per truename iota in any of the wisp's iota storage mechanisms.", + "hexal.page.wisps.wisp/summon/projectile.0": "This wisp is summoned and launched like an arrow, casting its hex on whatever it hits. The initial stack when it executes will be a reference to itself, then a reference to what it hit.", + "hexal.page.wisps.wisp/summon/projectile.1": "This could be a block position or an entity reference. The first vector accepted is the location the wisp will be summoned, while the direction of the second is the direction the wisp will be launched, and the second's magnitude seems to affect the wisp's velocity. The cost of the spell increases with the squared magnitude of velocity. The number accepted determines the wisp's reservoir in $(l:items/amethyst)$(item)Amethyst Dust/$. It loses approximately 3 tenths of an $(l:items/amethyst)$(item)Amethyst Dust/$ of media every second once summoned, and has a range of influence of 4 blocks.", + "hexal.page.wisps.wisp/summon/ticking.0": "Similar to Summon Projectile Wisp, but with only one vector input for the position to summon the wisp. Cyclic wisps are unmoving once summoned, instead executing their hex up to 20 times each second.", + "hexal.page.wisps.wisp/summon/ticking.1": "The first time it casts the stack will start with a reference to itself, from which point it will always start with the stack and ravenmind in the state they finished on the last cast. This wisp has a less stable form making it lose significantly more media every second, losing approximately seven tenths of an $(l:items/amethyst)$(item)Amethyst Dust/$ per second once summoned. It has a range of influence of 8 blocks.", + "hexal.page.wisps.wisp/self": "Add a reference to the casting wisp to the stack. This must be cast by a wisp; trying to cast it through a staff will fail rather spectacularly.", + "hexal.page.wisps.wisp/media": "Add the amount of media in the wisp's reservoir to the stack. This must be cast by a wisp; trying to cast it through a staff will fail rather spectacularly.", + "hexal.page.wisps.wisp/hex": "Removes a reference to a wisp from the stack, and replaces it with the wisp's contained hex. Must be a wisp you summoned, or a wisp that has $(l:hexal:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)allowed/$ transfer with the caster or caster's owner.", + "hexal.page.wisps.wisp/owner": "Removes a reference to a wisp and an entity from the stack, and returns true if that entity owns that wisp, and false otherwise.", + "hexal.page.wisps.wisp/move/target/set": "Removes a position vector from the stack; The Cyclic Wisp that executed this pattern will move in a straight line towards that position (colliding with terrain in its path) until it reaches it.", + "hexal.page.wisps.wisp/move/target/get": "Adds to the stack the position vector that the executing Cyclic Wisp is currently moving towards.", + "hexal.page.wisps.wisp/move/speed/set": "Removes a number from the stack, and sets the executing Cyclic Wisp's maximum speed to that number.", + "hexal.page.wisps.wisp/move/speed/get": "Gets the executing Cyclic Wisp's current maximum speed.", + "hexal.page.wisps.wisp/transfer/allow": "When two wisps are $(l:hexal:patterns/spells/links)$(thing)linked/$ together, they transfer media between each other until they are balanced. By default this only happens between wisps with the same owner. This takes an index, and explicitly allows the wisp to exchange media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/disallow": "Correspondingly, this takes an index and disallows the wisp from exchanging media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/others/allow": "This takes a wisp that you own and an index, and allows the wisp to exchange media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/others/disallow": "This takes a wisp that you own and an index, and disallows the wisp from exchanging media with the linkable at that index.", + "hexal.page.wisps.get_entity/wisp": "Transform the position on the stack into the wisp at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + "hexal.page.wisps.zone_entity/wisp": "Take a position and maximum distance on the stack, and combine them into a list of wisps near the position.", + "hexal.page.wisps.zone_entity/not_wisp": "Take a position and maximum distance on the stack, and combine them into a list of non-wisp entities near the position.", + "hexal.page.wisps.wisp/trigger/tick": "Removes an integer from the stack, then delays the wisp's next cast until at least that many twentieth's of a second have passed. This and other triggers like it will halve the wisp's upkeep cost while it isn't casting.", + "hexal.page.wisps.wisp/trigger/comm": "The wisp's next cast will not occur until it has received at least one $(l:hexal:patterns/spells/links#hexal:link/comm/send)$(action)communication/$.", + "hexal.page.wisps.wisp/trigger/move": "The wisp's next cast will not occur until it has reached the position it is $(l:hexal:patterns/spells/wisps#hexal:wisp/move/target/set)$(action)navigating/$ towards.", + + "hexal.entry.links": "Links", + "hexal.page.links.0": "These patterns outline a system that I have found for communicating information from one $(l:hexal:patterns/spells/wisps)$(thing)wisp/$ to another, among other things. There are a number of patterns related to creating these links, and a number of patterns related to sending and receiving iotas over a link once it is created. A wisp can have any number of links active, with each costing a negligible amount of media to maintain each twentieth of a second.", + "hexal.page.links.1": "The links of a given linkable are indexed by the order they are created, with this number used by a number of patterns. \"Linkable\" is not its own type, but a shorthand for any type that can be coerced into a linkable (e.g. Entity -> Linkable entities, Vec -> Linkable blocks, ...). Links can span up to double the sum of the two linkable's ranges. To connect linkables over truly vast distances I would do well to look into building some $(l:hexal:items/relay)$(item)Relays/$.", + "hexal.page.links.link": "Links the caster to the entity removed from the stack, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/others": "May be evaluated by any casting instrument. Links two entities, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/unlink": "Removes the link at the given index from the caster's links. This costs two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/unlink/others": "Takes two linkables and unlinks them if they are linked. This costs two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/get": "Removes an index from the stack, and adds the entity connected to the link at that index to the stack.", + "hexal.page.links.link/get_index": "Removes an entity from the stack, and adds the index to the link to that entity to the stack (or -1 if the caster isn't linked to that entity).", + "hexal.page.links.link/num": "Adds the number of links to the wisp to the stack.", + "hexal.page.links.link/comm/send": "Removes an iota from the stack, then removes an index from the stack and sends the iota along the link at the given index. This costs one hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/comm/read": "When something receives an iota along a link it is added to a queue. This pattern adds the first iota in the queue to the stack, removing it from the queue.", + "hexal.page.links.link/comm/num": "Adds to the stack the number of unread iota in the caster's received iota queue.", + "hexal.page.links.link/comm/clear": "Removes all unread iota from the caster's received iota queue.", + "hexal.page.links.link/comm/open_transmit": "Similar to $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, until drawing a $(l:hexal:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ all patterns I draw are sent along the link whose index is at the top of the stack.", + "hexal.page.links.link/comm/close_transmit": "When drawn after $(l:hexal:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ I stop transmitting drawn patterns. If either $(l:hexal:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ or $(l:hexal:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ are executed by an intermediary caster such as a wisp, they will mishap.", + + "hexal.entry.tick": "Accelerate", + "hexal.page.tick.tick.0": "Causes the block at the passed vector to perform its normal actions faster in the instant that this spell is cast.", + "hexal.page.tick.tick.1": "Casting it costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$, plus a thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$ for each time it has previously been cast on that block in this hex.", + + "hexal.entry.gates": "Gates", + "hexal.page.gates.0": "Gates are the latest in my long line of experimentation with breaking space to connect distant points and allow instantaneous travel. What gates allow me to do, that none of my previous attempts have succeeded at, is to do it $(o)efficiently$(). There are three varieties of gates that I have learned how to construct, all of which take a large amount of media to burn into reality, but are significantly cheaper to operate afterwards.", + "hexal.page.gates.1": "Location Anchored Gates are bound to a specific position in the world, and send all that move through them to that position. Entity Anchored Gates are bound to a being that inhabits the world, and send those moving through them to the position of that being (plus an offset, chosen when burning in the gate).", + "hexal.page.gates.2": "Drifting Gates are not bound at all, and can be used to send entities anywhere, however they lose efficiency as a result, and can only send entities to places that are in my ambit. When a gate is burnt in I will obtain on my stack a reference to that gate. With that gate reference, I can mark entities with that gate, and I can close the gate, which sends all entities marked with that gate to the gate's destination. Note that closing a gate doesn't use it up; once I have acquired a gate iota I can use it in perpetuity.", + "hexal.page.gates.gate/make": "Adds a new gate iota to the stack. Any copy of this iota will point to the same numbered gate. Costs 32 $(l:items/amethyst)$(item)Charged Amethyst/$. If passed null, makes a Drifting Gate. If passed a vector, makes a Location Anchored Gate, If passed a vector and an entity, makes an Entity Anchored Gate.", + "hexal.page.gates.gate/mark": "Consumes a gate iota and an entity. Marks that entity to be teleported the next time that gate is closed. Costs one twentieth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.gates.gate/unmark": "Consumes a gate iota and an entity. Unmarks that entity so that if it was marked with $(l:hexal:patterns/great_spells/gates#hexal:gate/mark)$(action) Gate's Opening/$ it will no longer be teleported the next time that gate is closed.", + "hexal.page.gates.gate/mark/num/get": "Consumes a gate iota, returns how many entities are marked by that gate.", + "hexal.page.gates.gate/mark/get": "Consumes a gate iota and an entity, returns whether that entity is marked by that gate.", + "hexal.page.gates.gate/close": "Consumes a non-drifing gate iota, or a drifting gate iota and a position. Transports all the entities marked with the passed gate to the stored or given position, as relevant. Costs half an $(l:items/amethyst)$(item)Amethyst Shard/$, plus an $(l:items/amethyst)$(item)Amethyst Dust/$ per metre transported per entity, if the gate was drifting.", + + "hexal.entry.motes": "Motes", + "hexal.page.motes.explanation.0": "This entry deals with bringing items into the media, making them referencable, countable, bringing order to them and to me and to my mind and-. A mediafied item iota (known as a mote) that has been added to the stack references a specific mote record in a Mote Nexus, since without something holding the thought-pattern of the item to this world it will wither away -away like my cognition is flensing-.", + "hexal.page.motes.explanation.1": "Any duplicate of that first mote iota referencing a record references the same record, and any change to one affects them all for they all point to the one and only in the media. Splitting and merging and crafting and trading all affect all affect all-.", + "hexal.page.motes.explanation.2": "A Mote Nexus is limited in some ways, but only some. It can contain 1023 different records, but each record can store items innumerable. I have yet to find any limit, I can merge and merge and merge forever and the record keeps growing and growing and growing...", + "hexal.page.motes.mediafed_storage_recipe": "The Mote Nexus is built from the mind of a cartographer endlessly mapping the contents of the $(item)Shulker Box/$ that it has been flayed into.", + "hexal.page.motes.mote/storage/bind": "Target a Mote Nexus block in the world and bind yourself to it, meaning all items you mediafy will be added to that nexus' capacity. Targeting any other block will unbind you from your currently bound nexus. Costs 32 $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/storage/bind/temp": "Target a Mote Nexus block in the world and bind to it for the remainder of this cast, temporarily overriding your primary binding. Costs one thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/contained_type/get": "Gets all the types of motes contained in the currently bound Mote Nexus.", + "hexal.page.motes.mote/contained/get": "Gets all the mote records from the currently bound Mote Nexus that match the passed item type or could be combined with the passed mote.", + "hexal.page.motes.mote/storage/remaining_capacity/get": "Gets the remaining capacity of the bound Mote Nexus.", + "hexal.page.motes.mote/storage/contains": "Returns true if the Mote Nexus at the given position contains a mote of the given type, or that would stack with the given mote, and false otherwise.", + "hexal.page.motes.mote/make": "Convert an item in the world (either an item entity or an item frame) into a mote on your stack. If passed an existing mote instead adds the items from the entity to the mote. Mediafying an item costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/return": "Returns all the items from a mote to the world at the location of your choosing. If passed a number returns at most that many items. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/count/get": "Accepts a mote and returns the number of items in the record referenced by that mote.", + "hexal.page.motes.mote/combine": "Combines two motes into one, merging the mote records they point to. Any pointers to the second mote will become null, any pointers to the first will remain. This can make motes holding many more items than I could carry in a stack naturally!", + "hexal.page.motes.mote/combinable": "Returns true if the first mote can be combined with the items in the second argument (which can be a mote, item entity, or item frame), and false otherwise.", + "hexal.page.motes.mote/split": "Splits the specified number of items off of the passed mote, creating a new mote pointing to a new mote record.", + "hexal.page.motes.mote/storage/get": "Get the position of the Mote Nexus that contains the passed mote.", + "hexal.page.motes.mote/storage/set": "Move the record referenced by the passed mote to the Mote Nexus at the passed position. This returns a new mote pointing to that record, and invalidates all previous motes pointing to that record.", + "hexal.page.motes.mote/craft.0": "Takes a mote, list of motes, or list of list of motes. returns a list containing the results of crafting with those items. For example, the input Stone x128 would return [Stone Button x128].", + "hexal.page.motes.mote/craft.1": "For more complex crafts, inserting nulls to space items properly will be required. A diamond pickaxe for example would require [[Diamond x2, Diamond x2, Diamond x2], [null, Stick x2], [null, Stick x2]] to get [Diamond Pickaxe x2]. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/villager/level/get": "Accepts a villager, returns a number representing that villager's seniority and skill at their craft.", + "hexal.page.motes.mote/trade/get.0": "Accepts a villager and returns all of the trades that villager is offering. This is a list of lists of lists. Each trade comprises two lists, the cost, and the returned items. The returned items is a list containing the type of item, and the number of items.", + "hexal.page.motes.mote/trade/get.1": "The cost is a list of one or two pairs of item and number of items required by the villager for the trade to be accepted. For example, one trade offer could be [[[Emerald, 1]], [Redstone, 1]].", + "hexal.page.motes.mote/trade.0": "Accepts a villager, a list of motes to trade with to villager, and optionally an int for which of that villager's trades to attempt. (int? above means that you can pass 2 or 3 arguments, the optional 3rd being an int).", + "hexal.page.motes.mote/trade.1": "If no trade number was passed, it will try each of the villager's trade until finding one that accepts the passed items. If a trade number was passed it will skip straight to using that trade. It will then repeat that trade for as long as it has enough items and the villager is still willing to trade. It will then return the items the villager traded away as a mote to the stack.", + "hexal.page.motes.mote/trade.2": "The villager will find this trade to be a learnable experience as it would if trading with you directly, and will improve its skills and trade offerings commensurately. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/use_on": "Accepts a mote, and either an entity, or a target block and a normal vector. Uses the item on the entity/block. The mote must either only have one item in it, or the items contained must be extremely simple (no NBT data).", + + "hexal.entry.great_wisps": "Great Wisp Spells", + "hexal.page.great_wisps.wisp/consume.0": "Remove a wisp from the stack, and disassemble the wisp. The patterns contained are lost, but the media that it contained can be repurposed if this spell is cast by another wisp.", + "hexal.page.great_wisps.wisp/consume.1": "Costs either an $(l:items/amethyst)$(item)Amethyst Shard/$ if the wisp is owned by you or has $(l:hexal:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)allowed/$ transfer with the caster or caster's owner, or half again as much media as the consumed wisp contains if the wisp is owned by another and has now allowed it. Repurposing the media is not completely efficient, losing one twentieth of the consumed wisp's reserve in transfer.", + "hexal.page.great_wisps.wisp/seon/set": "Bind one of my wisps closer to me; I may only have one bound wisp at a time, but whichever wisp is bound costs significantly less upkeep and increased range.", + "hexal.page.great_wisps.wisp/seon/get": "Returns my currently bound wisp. A new wisp can only be bound when this returns null. (This is not a great spell, I have simply placed it here for convenience.)", + + "hexal.entry.types": "Types", + "hexal.page.types.type/iota": "Remove an iota from the stack, and adds the type of that iota to the stack.", + "hexal.page.types.type/entity": "Remove an entity from the stack, and adds the type of the entity at that location to the stack.", + "hexal.page.types.type/block_item": "Remove a location, $(l:hexal:patterns/spells/motes)$(item)mote/$, item entity, or item frame from the stack, and adds the type of the block at that location, or type of that item, to the stack (e.g. Grass, Stone, Stick, etc.).", + "hexal.page.types.type/item_held": "Adds the type of the item in the caster's offhand to the stack if there is one present, or the type of the casting hand otherwise.", + + "hexal.page.types.get_entity/type": "Remove an entity type and a position from the stack, and returns an entity of that type at that position if one exists.", + "hexal.page.types.zone_entity/type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities of that type within that radius of that position.", + "hexal.page.types.zone_entity/not_type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities not of that type within that radius of that position", + + + "hexal.entry.everbook": "Everbook", + "hexal.page.everbook.0": "Your Everbook is a strange space that your broken mind can now reach. There are many yous that seem to share this record, worlds and worlds of progress, beginning again and again. Your Everbook can store patterns paired with iotas like an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$, though the fragile nature of your mind these days makes it best to route all access to your Everbook through an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$. Any world that you reach enlightenment in, you will have access to the entries you add to it now.", + "hexal.page.everbook.everbook/read": "Takes the position of an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and retrieves the iota at that key from your Everbook, storing it in the given $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$ if able.", + "hexal.page.everbook.everbook/write": "Takes the position of an $(l:hexcasting:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and stores the iota in that record at that key to your Everbook at the same key.", + "hexal.page.everbook.everbook/delete": "Takes a pattern and removes the entry with that pattern key from your Everbook.", + "hexal.page.everbook.everbook/toggle_macro.0": "Takes a pattern and marks that entry of your Everbook as a Pattern that when drawn by your hand will be treated as any other of Nature's patterns.", + "hexal.page.everbook.everbook/toggle_macro.1": "When you draw the key of an Everbook entry that has been marked as a Pattern, if that entry is a list Nature will execute each element of the list as it would with $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$, though it does not use up an evaluation. Attempting to mark an entry as a Pattern if it is non-existent or infinitely recursive will fail.", + + "hexal.entry.everbook_entries": "Everbook Entries", + "hexal.page.everbook_entries.0": "Every page in this entry displays the pattern key for one of the entries of your $(l:hexal:patterns/everbook)$(action)Everbook/$.", + + "hexal.everbook_pattern_entry.header": "Stored Key: %d", + "hexal.everbook_pattern_entry.macro_header": "Macro Key: %d", + + + + "_comment": "Config Entries", + "text.autoconfig.hexal.title": "Hexal Configs", + "text.autoconfig.hexal.category.common": "Common", + "text.autoconfig.hexal.category.client": "Client", + "text.autoconfig.hexal.category.server": "Server", + + "text.autoconfig.hexal.option.server.terrainGeneration": "Terrain Generation", + "text.autoconfig.hexal.option.server.generateSlipwayGeodes": "Should generate Slipway Geodes?", + + "text.autoconfig.hexal.option.server.miscSpells": "Miscellaneous Spells", + "text.autoconfig.hexal.option.server.miscSpells.fallingBlockCost": "Falling Block Cost", + "text.autoconfig.hexal.option.server.miscSpells.freezeCost": "Freeze Cost", + "text.autoconfig.hexal.option.server.miscSpells.particlesCost": "Particles Cost per Vector", + "text.autoconfig.hexal.option.server.miscSpells.placeTypeCost": "Place Type Cost", + "text.autoconfig.hexal.option.server.miscSpells.smeltCost": "Smelt Cost per Item", + + "text.autoconfig.hexal.option.server.wispSpells": "Wisp Spells", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost": "Move Speed Set Base Cost", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[0]": "Cost to increase the movement speed of a wisp by 1.", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[1]": "This is the base cost, with greater increases being quadratically based on this.", + "text.autoconfig.hexal.option.server.wispSpells.summonTickingWispCost": "Summon Cyclic Wisp Cost", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispCost": "Summon Projectile Wisp Cost per Velocity Squared", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispMinCost": "Summon Cyclic Wisp Minimum Cost", + + "text.autoconfig.hexal.option.server.wispUpkeep": "Wisp Upkeep", + "text.autoconfig.hexal.option.server.wispUpkeep.tickingWispUpkeepPerTick": "Cyclic Wisp Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.projectileWispUpkeepPerTick": "Projectile Wisp Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount": "Untriggered Wisp Upkeep Discount", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[0]": "The upkeep cost of untriggered cyclic wisps is multiplied by this number.", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[1]": "Bounded from 0.0 to 1.0.", + "text.autoconfig.hexal.option.server.wispUpkeep.linkUpkeepPerTick": "Link Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor": "Bound Wisp Discount Factor", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[0]": "The upkeep cost of bound wisps is divided by this number.", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[1]": "Bounded from 2.0 to 200.0.", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor": "Storing Player Cost Scale Factor", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[0]": "The multiplicative cost increase of wisps containing an iota of another player.", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[1]": "Bounded from 1.0 to 200.0.", + + "text.autoconfig.hexal.option.server.linkSpells": "Link Spells", + "text.autoconfig.hexal.option.server.linkSpells.linkCost": "Link Cost", + "text.autoconfig.hexal.option.server.linkSpells.sendIotaCost": "Send Iota Cost", + "text.autoconfig.hexal.option.server.linkSpells.unlinkCost": "Unlink Cost", + + "text.autoconfig.hexal.option.server.gateSpells": "Gate Spells", + "text.autoconfig.hexal.option.server.gateSpells.makeGateCost": "Make Gate Cost", + "text.autoconfig.hexal.option.server.gateSpells.markGateCost": "Mark Gate Cost", + "text.autoconfig.hexal.option.server.gateSpells.closeGateCost": "Close Gate Cost", + + "text.autoconfig.hexal.option.server.itemSpells": "Item Spells", + "text.autoconfig.hexal.option.server.itemSpells.bindStorageCost": "Bind Storage Cost", + "text.autoconfig.hexal.option.server.itemSpells.bindTemporaryStorageCost": "Bind Temporary Storage Cost", + "text.autoconfig.hexal.option.server.itemSpells.makeItemCost": "Make Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.returnItemCost": "Return Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.craftItemCost": "Craft Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.tradeItemCost": "Trade Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned": "Maximum Items Returned", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[0]": "Maximum number of items that can be returned by Return Item.", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[1]": "Bounded from 640 to 64,000.", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage": "Maximum Num. Records in Mote Nexus", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[0]": "Maximum number of records that can be stored in a Mote Nexus.", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[1]": "Bounded from 128 to 16,384.", + + + "text.autoconfig.hexal.option.server.greatSpells": "Great Spells", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost": "Consume Own Wisp Cost", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[0]": "Cost to consume a wisp you own,", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[1]": "or that doesn't fight back for some other reason.", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia": "Consume Other's Wisp Cost per Media", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[0]": "Cost to consume a wisp that fights back, this number is multiplied by", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[1]": "the media possessed by the wisp you are attempting to consume.", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[2]": "Bounded from 1.0 to 20.0.", + "text.autoconfig.hexal.option.server.greatSpells.seonWispSetCost": "Bind Wisp Cost", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost": "Tick Constant Cost", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost.@Tooltip": "Constant cost to tick a block. Always applies.", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked": "Tick Cost per Time Ticked", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[0]": "Cost to tick a block per time that block has already been ticked.", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[1]": "Added to the constant cost above.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb": "Tick Inverse Probability of Random Ticking", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[0]": "The inverse probability of tick randomly ticking a block.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[1]": "Higher numbers make random ticks less likely, lower numbers make them more likely.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[2]": "Bound from 600 to 2100." +} diff --git a/projects/1.19/assets/hexal/hexal/lang/zh_cn.json b/projects/1.19/assets/hexal/hexal/lang/zh_cn.json new file mode 100644 index 000000000000..f5ca5cab81e3 --- /dev/null +++ b/projects/1.19/assets/hexal/hexal/lang/zh_cn.json @@ -0,0 +1,412 @@ +{ + "block.hexal.slipway": "质道", + "block.hexal.mediafied_storage": "物元枢纽", + "block.hexal.relay": "继链器", + + "entity.hexal.wisp.projectile": "弹射式咒灵", + "entity.hexal.wisp.ticking": "循环式咒灵", + "entity.hexal.wisp.wandering": "游走咒灵", + + + "hexcasting.mishap.non_player": "%s需由玩家执行", + "hexcasting.mishap.no_wisp": "%s需由咒灵执行", + "hexcasting.mishap.others_wisp": "该咒灵为%s所有,而不是你", + "hexcasting.mishap.no_links": "%s没有链接", + "hexcasting.mishap.self_link": "试图将%s链接至其自身", + "hexcasting.mishap.no_bound_storage": "未绑定物元枢纽", + "hexcasting.mishap.storage_unloaded": "绑定的物元枢纽未被加载", + "hexcasting.mishap.excessive_reproduction": "咒灵%s试图过度复制,每刻仅可召唤1个子咒灵", + "hexcasting.mishap.illegal_interworld_iota": "试图将iota%s变为跨世界iota,此类型的iota无法加入永恒之书。", + + "hexcasting.mishap.invalid_value.class.linkable": "一个可链接的事物", + "hexcasting.mishap.invalid_value.class.wisp": "一个咒灵", + "hexcasting.mishap.invalid_value.class.consumable_entity": "一个可被拆解的实体", + "hexcasting.mishap.invalid_value.class.wisp.casting": "一个施法咒灵", + "hexcasting.mishap.invalid_value.class.type.block": "一个方块类型", + "hexcasting.mishap.invalid_value.class.type.item": "一个物品类型", + "hexcasting.mishap.invalid_value.class.type.entity": "一个实体或实体类型", + "hexcasting.mishap.invalid_value.class.type.block.able": "一个可代表方块的物品类型", + "hexcasting.mishap.invalid_value.class.type.list.double": "一个由数组成的列表", + "hexcasting.mishap.invalid_value.class.gate": "一个门径", + "hexcasting.mishap.invalid_value.class.mote": "一个物元", + "hexcasting.mishap.invalid_value.class.moteentity.itemitemframe": "一个物元、物品实体或物品展示框", + "hexcasting.mishap.invalid_value.moteitemtype": "一个物元或物品类型", + "hexcasting.mishap.invalid_value.motemotelist": "一个物元或物元列表", + "hexcasting.mishap.invalid_value.motemotelistmotelistlist": "一个物元、物元列表或由物元列表组成的列表", + "hexcasting.mishap.invalid_value.veclist": "一个向量或由向量组成的列表", + "hexcasting.mishap.invalid_value.blockitementityitemframeitem": "一个位置向量、物品实体、物品展示框或物品", + "hexcasting.mishap.invalid_value.entity.itemitemframe": "一个物品实体或物品展示框", + "hexcasting.mishap.invalid_value.int.strictly_positive": "一个严格大于零的整数", + "hexcasting.mishap.invalid_value.crafting_recipe": "一个有效的合成配方", + "hexcasting.mishap.invalid_value.mote_duplicated": "各物元仅出现一次", + "hexcasting.mishap.invalid_value.cant_combine_motes": "两个可合并的物元", + "hexcasting.mishap.invalid_value.mote_not_size_one": "一个不包含NBT数据或大小为1的物元", + "hexcasting.mishap.invalid_value.gate.offset": "不超过%f格的偏移量", + + + "hexcasting.iota.hexal:iota_type": "Iota类型", + "hexcasting.iota.hexal:entity_type": "实体类型", + "hexcasting.iota.hexal:item_type": "物品类型", + "hexcasting.iota.hexal:gate": "门径", + "hexcasting.iota.hexal:item": "物品", + + "hexal.spelldata.entity_type": "类型", + "hexal.spelldata.gate": "门径 %d", + "hexal.spelldata.item": "%s x%d", + + + "hexcasting.spell.hexal:type/iota": "分类学家之纯化", + "hexcasting.spell.hexal:type/entity": "内科医师之纯化", + "hexcasting.spell.hexal:type/block_item": "分拣员之纯化", + "hexcasting.spell.hexal:type/item_held": "分拣员之精思", + + "hexcasting.spell.hexal:get_entity/type": "实体之馏化:类型", + "hexcasting.spell.hexal:zone_entity/type": "区域之提整:类型", + "hexcasting.spell.hexal:zone_entity/not_type": "区域之提整:非类型", + + "hexcasting.spell.hexal:current_tick": "计时员之精思", + "hexcasting.spell.hexal:remaining_evals": "塔纳托斯之精思", + "hexcasting.spell.hexal:breath": "潜水员之纯化", + "hexcasting.spell.hexal:health": "护士之纯化", + "hexcasting.spell.hexal:armour": "乡绅之纯化", + "hexcasting.spell.hexal:toughness": "拳击手之纯化", + "hexcasting.spell.hexal:light_level": "灯夫之纯化", + + "hexcasting.spell.hexal:factorial": "阶乘之纯化", + "hexcasting.spell.hexal:running/sum": "前缀和之纯化", + "hexcasting.spell.hexal:running/mul": "前缀积之纯化", + + "hexcasting.spell.hexal:everbook/read": "谟涅摩叙涅之策略", + "hexcasting.spell.hexal:everbook/write": "极乐园之策略", + "hexcasting.spell.hexal:everbook/delete": "忘川之策略", + "hexcasting.spell.hexal:everbook/toggle_macro": "布莱之策略", + + "hexcasting.spell.hexal:smelt": "烧炼", + "hexcasting.spell.hexal:freeze": "冻结", + "hexcasting.spell.hexal:falling_block": "坠落方块", + "hexcasting.spell.hexal:place_type": "放置方块,第二型", + "hexcasting.spell.hexal:particles": "粒子", + + "hexcasting.spell.hexal:interop/fabric_only/phase_block": "暂消方块", + + "hexcasting.spell.hexal:wisp/summon/projectile": "召唤弹射式咒灵", + "hexcasting.spell.hexal:wisp/summon/ticking": "召唤循环式咒灵", + "hexcasting.spell.hexal:wisp/self": "自我之精思", + "hexcasting.spell.hexal:wisp/media": "储罐之精思", + "hexcasting.spell.hexal:wisp/hex": "经理之纯化", + "hexcasting.spell.hexal:wisp/owner": "效忠之馏化", + "hexcasting.spell.hexal:wisp/move/target/set": "开拓者之策略", + "hexcasting.spell.hexal:wisp/move/target/get": "开拓者之精思", + "hexcasting.spell.hexal:wisp/move/speed/set": "急速", + "hexcasting.spell.hexal:wisp/move/speed/get": "速度计之精思", + "hexcasting.spell.hexal:wisp/trigger/tick": "延迟咒灵", + "hexcasting.spell.hexal:wisp/trigger/comm": "监听", + "hexcasting.spell.hexal:wisp/trigger/move": "巡航", + "hexcasting.spell.hexal:wisp/consume": "拆解咒灵", + "hexcasting.spell.hexal:wisp/seon/set": "绑定咒灵", + "hexcasting.spell.hexal:wisp/seon/get": "密友之精思", + "hexcasting.spell.hexal:wisp/transfer/allow": "允许转送", + "hexcasting.spell.hexal:wisp/transfer/disallow": "禁止转送", + "hexcasting.spell.hexal:wisp/transfer/others/allow": "允许转送其他", + "hexcasting.spell.hexal:wisp/transfer/others/disallow": "禁止转送其他", + + "hexcasting.spell.hexal:get_entity/wisp": "实体之纯化:咒灵", + "hexcasting.spell.hexal:zone_entity/wisp": "区域之馏化:咒灵", + "hexcasting.spell.hexal:zone_entity/not_wisp": "区域之馏化:非咒灵", + + "hexcasting.spell.hexal:link": "链接", + "hexcasting.spell.hexal:link/others": "链接其他", + "hexcasting.spell.hexal:link/unlink": "解链接", + "hexcasting.spell.hexal:link/unlink/others": "解链接其他", + "hexcasting.spell.hexal:link/get": "电话簿之纯化", + "hexcasting.spell.hexal:link/get_index": "识别之纯化", + "hexcasting.spell.hexal:link/num": "名气之精思", + + "hexcasting.spell.hexal:link/comm/send": "发送Iota", + "hexcasting.spell.hexal:link/comm/read": "朗诵之精思", + "hexcasting.spell.hexal:link/comm/num": "邮政局长之精思", + "hexcasting.spell.hexal:link/comm/clear": "除塞之策略", + "hexcasting.spell.hexal:link/comm/open_transmit": "开始发信", + "hexcasting.spell.hexal:link/comm/close_transmit": "结束发信", + + "hexcasting.spell.hexal:gate/make": "门径之精思", + "hexcasting.spell.hexal:gate/mark": "开启门径", + "hexcasting.spell.hexal:gate/unmark": "解除门径", + "hexcasting.spell.hexal:gate/mark/num/get": "标径之纯化", + "hexcasting.spell.hexal:gate/mark/get": "标径之馏化", + "hexcasting.spell.hexal:gate/close": "关闭门径", + + "hexcasting.spell.hexal:mote/storage/bind": "绑定储库", + "hexcasting.spell.hexal:mote/storage/bind/temp": "绑定储库,临时型", + "hexcasting.spell.hexal:mote/contained_type/get": "盘货之精思", + "hexcasting.spell.hexal:mote/contained/get": "盘货之纯化", + "hexcasting.spell.hexal:mote/storage/remaining_capacity/get": "容量之精思", + "hexcasting.spell.hexal:mote/storage/contains": "容纳之馏化", + "hexcasting.spell.hexal:mote/make": "媒质化物品", + "hexcasting.spell.hexal:mote/return": "返还物品", + "hexcasting.spell.hexal:mote/count/get": "衡数之纯化", + "hexcasting.spell.hexal:mote/combine": "堆叠之馏化", + "hexcasting.spell.hexal:mote/combinable": "堆叠之馏化,第二型", + "hexcasting.spell.hexal:mote/split": "拆分之策略", + "hexcasting.spell.hexal:mote/storage/get": "货场之纯化", + "hexcasting.spell.hexal:mote/storage/set": "货场之策略", + "hexcasting.spell.hexal:mote/craft": "合成", + "hexcasting.spell.hexal:mote/villager/level/get": "资历之纯化", + "hexcasting.spell.hexal:mote/trade/get": "报价之纯化", + "hexcasting.spell.hexal:mote/trade": "交易", + "hexcasting.spell.hexal:mote/use_on": "使用物品", + + "hexcasting.spell.hexal:tick": "加速", + + + + "hexcasting.spell.book.hexal:light_level": "灯夫之纯化", + + "hexcasting.spell.book.hexal:running/sum": "前缀和之纯化", + "hexcasting.spell.book.hexal:running/mul": "前缀积之纯化", + + "hexcasting.spell.book.hexal:get_entity/wisp": "实体之纯化:咒灵", + "hexcasting.spell.book.hexal:zone_entity/wisp": "区域之馏化:咒灵", + "hexcasting.spell.book.hexal:zone_entity/not_wisp": "区域之馏化:非咒灵", + + "hexcasting.spell.book.hexal:mote/storage/bind/temp": "绑定储库,临时型", + + + + "hexal.entry.slipways": "质道", + "hexal.page.slipways": "我曾听说过某些晶洞中有形如泛着光的传送门的东西,它们被称作“质道”。这些质道通常“被莹莹光点围绕”,和我所知的$(l:hexal:patterns/spells/wisps)$(thing)咒灵/$十分相似。也许它们之间的联系值得研究。", + + "hexal.entry.relay": "继链器", + "hexal.page.relay.0": "我常希望有方法能$(l:hexal:patterns/spells/links#hexal:link)$(action)连接/$多个$(l:hexal:patterns/spells/wisps)$(thing)咒灵/$,以便远距共享媒质和信息。然而用咒灵远距中继相当不方便,常态消耗也很大。为解决这些问题,我制造出了继链器。它们是固态方块而非媒质构造体,也因此在维持链接时不会有常态消耗。", + "hexal.page.relay.1": "相互连接的继链器会形成网络,与之连接的咒灵会共享媒质,类似于咒灵间直接相连。此外,传给网络内任一继链器的 iota 会发送给连接至网络的所有非继链器事物。继链器的工作范围是 32 格(也即两个继链器可链接的最远距离为 64 格)。手持染色剂右击任一继链器即可改变网络链接的颜色。", + "hexal.page.relay.2": "继链器没有所有者,若要我的咒灵和其$(l:hexal:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)转送媒质/$,则必须先允许咒灵这么做。", + + "hexal.entry.hexal_basics": "咒法拓展:基础图案", + "hexal.page.hexal_basics.current_tick": "返回一个数,这个数似乎与自然记录时间的方式有关。如果先绘制一遍此图案,在 1 秒后再绘制一遍,返回的数会增加 20。", + "hexal.page.hexal_basics.remaining_evals": "将咒术在结束前还能运行图案的次数压入栈顶。结果会因$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$和$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$而减少。", + "hexal.page.hexal_basics.breath": "移除栈顶实体,并返回其剩余氧气值(也即距其溺水还有多少氧气值可消耗)。", + "hexal.page.hexal_basics.health": "移除栈顶实体,并返回其剩余生命值(也即距其死亡还有多少生命值可损失)。", + "hexal.page.hexal_basics.armour": "移除栈顶实体,并返回其护甲值。", + "hexal.page.hexal_basics.toughness": "移除栈顶实体,并返回其盔甲韧性(盔甲的另一属性)。", + "hexal.page.hexal_basics.light_level": "移除栈顶位置向量,并返回该处光照强度。", + + "hexal.entry.hexal_maths": "咒法拓展:数学", + "hexal.page.hexal_maths.factorial": "移除栈顶数,返回其阶乘。例如输入 4 则会返回 4 * 3 * 2 * 1 = 24。", + "hexal.page.hexal_maths.running/sum": "接受栈顶列表,并计算其前缀和。例如输入 [1, 2, 5] 则会返回 [1, 3, 8]。", + "hexal.page.hexal_maths.running/mul": "接受栈顶列表,并计算其前缀积。例如输入 [1, 2, 5] 则会返回 [1, 2, 10]。", + + "hexal.entry.hexal_spell": "咒法拓展:法术", + "hexal.page.hexal_spell.smelt.0": "移除栈顶位置向量、物品实体或物元,然后烧炼该处方块,或同时烧炼物品实体或物元中所有物品。", + "hexal.page.hexal_spell.smelt.1": "每烧炼一个物品消耗 3/4 个$(l:items/amethyst)$(item)紫水晶粉/$。(也即烧炼 1 个方块消耗 3/4 个$(l:items/amethyst)$(item)紫水晶粉/$,同时烧炼 8 个物品消耗 6 个$(l:items/amethyst)$(item)紫水晶粉/$。)", + "hexal.page.hexal_spell.freeze": "冻结所给坐标处方块。例如,水变为冰,冰变为浮冰。消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.hexal_spell.falling_block": "移除栈顶位置向量,并使该处方块下落,就像沙子和沙砾一样。消耗 3/2 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.hexal_spell.place_type": "接受一个物品类型或物元和一个位置向量,并会尝试在该位置处放置所给物品类型的方块。若传入物元,则会从对应的物元记录中放置。消耗 1/8 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.hexal_spell.particles": "接受一个位置向量或一个由位置向量组成的列表,并在所给位置处生成粒子,或在所给列表各位置之间生成粒子连线。每个位置向量消耗 1/500 个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.fabric_only_hexal": "咒术拓展:Fabric 独占法术", + "hexal.page.fabric_only_hexal.interop/fabric_only/phase_block": "接受一个位置向量和一个数,并使所给位置上方块的体积消失所给数秒。消耗 1/1000 与消失时间的平方的乘积个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.wisps": "咒灵", + "hexal.page.wisps.0": "我发现了一种能仅以媒质创造法术构造体的方式,它们能被他人看见,能移动,也有一定自主行动能力。它们能代替我施法,和$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。不过保持它们的形态确实要耗费我的注意力,而且如果太多咒灵要同时施法,我也只能同时运行其中一部分,剩下的则要稍作延迟。", + "hexal.page.wisps.1": "创造咒灵时需要给它们分配它们能访问的一块媒质“储库”(后称媒质库)。这些媒质由我提供,用于形成咒灵本身。咒灵会常态消耗媒质,而当其运行其携带的图案列表时,其中各操作要消耗的媒质也会从媒质库中抽取。所有种类的咒灵似乎都需要 3 个$(l:items/amethyst)$(item)紫水晶粉/$才能召唤,并同时消耗等同于其媒质库容量的媒质。", + "hexal.page.wisps.2": "试图持有其他施法者真名的咒灵会被严厉惩罚,其所有 iota 存储位置中每有一个真名都会使其常态消耗增加 20 倍。", + "hexal.page.wisps.wisp/summon/projectile.0": "这种咒灵被召唤时会像箭一样被弹射出去,而后会在其击中的事物上施放咒术。其初始栈包含一个代表其自身的 iota 和一个代表其击中的事物的 iota。", + "hexal.page.wisps.wisp/summon/projectile.1": "第二个 iota 可以是一个位置向量,也可以是一个实体。第二个向量的模似乎会影响咒灵的速度,此法术消耗的媒质量会以速度向量模的平方增加。接受的数代表咒灵媒质库的容量(以$(l:items/amethyst)$(item)紫水晶粉/$计)。召唤后它每秒会消耗 3/10 个$(l:items/amethyst)$(item)紫水晶粉/$,且其影响区域半径为 4 格。", + "hexal.page.wisps.wisp/summon/ticking.0": "此法术与召唤弹射式咒灵类似,但只会接受一个代表召唤位置的向量。循环式咒灵一经召唤就不再移动,并会以每秒 20 次的频率施法。", + "hexal.page.wisps.wisp/summon/ticking.1": "其初始栈包含一个代表其自身的 iota,而后每次施法开始时会保留上一次施法后的栈和渡鸦之思。这种咒灵的形态较不稳定,常态消耗率远大于弹射式咒灵。其每秒消耗 7/10 个$(l:items/amethyst)$(item)紫水晶粉/$。其影响区域半径为 8 格。", + "hexal.page.wisps.wisp/self": "返回一个代表施法咒灵的 iota。此操作必须由咒灵执行。尝试用法杖执行会招致可怖的事故。", + "hexal.page.wisps.wisp/media": "将咒灵媒质库中剩余的媒质量压入栈顶。此操作必须由咒灵执行。尝试用法杖执行会招致可怖的事故。", + "hexal.page.wisps.wisp/hex": "移除一个咒灵实体,并返回该咒灵所携带的咒术。所给 iota 必须代表由我召唤的咒灵,或$(l:hexal:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)允许/$与施法者或其所有者转送的咒灵。", + "hexal.page.wisps.wisp/owner": "移除一个咒灵实体和一个实体,若该实体是该咒灵的所有者,返回 True;否则返回 False。", + "hexal.page.wisps.wisp/move/target/set": "移除栈顶位置向量。运行此图案的循环式咒灵会沿直线移动至所给位置(会与途中地形地貌等碰撞),直至抵达该位置处。", + "hexal.page.wisps.wisp/move/target/get": "返回循环式咒灵当前目标位置的位置向量。", + "hexal.page.wisps.wisp/move/speed/set": "移除栈顶数,并将循环式咒灵自身的速度上限设为该数。", + "hexal.page.wisps.wisp/move/speed/get": "返回循环式咒灵自身当前速度上限。", + "hexal.page.wisps.wisp/transfer/allow": "当两咒灵$(l:hexal:patterns/spells/links)$(thing)连接/$时,它们会相互转送媒质,直至两者平衡。默认状况下,仅所有者相同的咒灵会自发转送。此操作接受一个编号数,并显式允许咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.wisp/transfer/disallow": "相应地,此操作接受一个编号数,并禁止咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.wisp/transfer/others/allow": "接受一个咒灵实体(所有者需是我)和一个编号数,并允许该咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.wisp/transfer/others/disallow": "接受一个咒灵实体(所有者需是我)和一个编号数,并禁止该咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.get_entity/wisp": "将栈顶位置向量变为该处咒灵(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + "hexal.page.wisps.zone_entity/wisp": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有咒灵的列表。", + "hexal.page.wisps.zone_entity/not_wisp": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非咒灵实体的列表。", + "hexal.page.wisps.wisp/trigger/tick": "移除栈顶数,然后将咒灵下一次施法时刻更改为延迟所给数个 1/20 秒。所有可用于延迟咒灵施法的操作均能使咒灵的常态消耗减半,直到下一次施法为止。", + "hexal.page.wisps.wisp/trigger/comm": "咒灵将在其收到至少一次$(l:hexal:patterns/spells/links#hexal:link/comm/send)$(action)通信/$后才进行下一次施法。", + "hexal.page.wisps.wisp/trigger/move": "咒灵将在其抵达被$(l:hexal:patterns/spells/wisps#hexal:wisp/move/target/set)$(action)导向/$的位置后才进行下一次施法。", + + "hexal.entry.links": "链接", + "hexal.page.links.0": "这些图案大致构建了一套能在$(l:hexal:patterns/spells/wisps)$(thing)咒灵/$间以及咒灵和其他事物间传递信息的系统。有若干图案与创建链接有关,也有些图案和通过链接发送和接收 iota 的方式相关。一个咒灵能同时维持任意数目的链接,每条每 1/20 秒常态消耗极少量媒质。", + "hexal.page.links.1": "可链接事物会以创建顺序为这些链接编号,此编号可用作图案的参数。介绍中的“可链接事物”(Linkable)不是具体参数类型,而是指代所有可被转换为可链接事物的类型。(例如,Entity -> Linkable entity,Vec -> Linkable block 等等。)链接仅会在两可链接事物影响范围之和的两倍内起效。若要跨更远的距离连接两者,应该转而使用$(l:hexal:items/relay)$(item)继链器/$。", + "hexal.page.links.link": "将施法者链接至栈顶实体,且实体必须为可链接的。消耗 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", + "hexal.page.links.link/others": "可在任意施法器件上运行。将两个实体链接,且两实体必须均为可链接的。消耗 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", + "hexal.page.links.link/unlink": "断开施法者的编号为所给数的链接。消耗 2 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.links.link/unlink/others": "接受两个可链接事物,若其间存在链接,则会将其断开。消耗 2 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.links.link/get": "移除栈顶数,并返回对应编号的链接所连的实体。", + "hexal.page.links.link/get_index": "移除栈顶实体,并返回自身与该实体相连的链接的编号。若施法者与其无链接则返回 -1。", + "hexal.page.links.link/num": "返回自身的链接个数。", + "hexal.page.links.link/comm/send": "移除栈顶元素与数,而后向编号为该数的链接发送该元素。消耗 1/100 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.links.link/comm/read": "当接收到 iota 时其将被加至一个队列中。此图案会将该队列中的首个 iota 压入栈顶并移出队列。", + "hexal.page.links.link/comm/num": "返回接收队列中未读 iota 的个数。", + "hexal.page.links.link/comm/clear": "移除施法者接收队列中所有未读 iota。", + "hexal.page.links.link/comm/open_transmit": "与$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$类似。在绘制$(l:hexal:patterns/spells/links#hexal:link/comm/close_transmit)$(action)结束发信/$后,所有我绘制的图案会通过编号为栈顶数的链接发送出去。", + "hexal.page.links.link/comm/close_transmit": "在$(l:hexal:patterns/spells/links#hexal:link/comm/open_transmit)$(action)开始发信/$之后绘制,意味着发信过程结束。如果$(l:hexal:patterns/spells/links#hexal:link/comm/open_transmit)$(action)开始发信/$或$(l:hexal:patterns/spells/links#hexal:link/comm/close_transmit)$(action)结束发信/$是由中介施法者(如咒灵)运行的话,则会产生事故。", + + "hexal.entry.tick": "加速", + "hexal.page.tick.tick.0": "在法术运行的那一刻,加速所给位置处方块的运作。", + "hexal.page.tick.tick.1": "施放此法术要消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$,在整个咒术内,每对同一方块加速一次,额外消耗 1/1000 个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.gates": "门径", + "hexal.page.gates.0": "门径是我有关空间远距连接和瞬间移动的长时间研究的最新成果。与我之前的试验不同的是,它能$(o)极为高效地$()完成传送任务。我已学会构造三种不同的门径,所有三种都需要巨量的媒质才能烧入现实,但后续的操作则相较之下极为便宜。", + "hexal.page.gates.1": "位置锚定门径与世界上某一位置绑定,会将所有穿过它们的事物送至该位置。实体锚定门径则与世界上某一实体绑定,会将所有穿过它们的事物送至该实体处(可附带一个偏移向量,需在烧入门径时提供)。", + "hexal.page.gates.2": "未锚定门径没有与任何事物绑定,可用于将实体送至任意位置。但其效率也会相应降低,只能将实体送至我所能影响的范围内的位置。门径烧入成功后,我的栈上便会出现一个代表其的 iota。我能以此 iota 标记实体,如此当我关闭门径时,所有被标记的实体就会被传送至门径终点。需注意关闭门径不会将其消耗,获得门径 iota 后便能永久使用。", + "hexal.page.gates.gate/make": "压入一个新的门径。所有此 iota 的复制品都指向同一个门径。消耗 32 个$(l:items/amethyst)$(item)充能紫水晶/$。若传入 Null,则构造未锚定门径;若传入一个向量,则构造位置锚定门径;若传入一个向量和一个实体,则构造实体锚定门径。", + "hexal.page.gates.gate/mark": "移除栈顶实体与门径,并标记该实体,被标记的实体会在对应门径关闭时被传送。消耗 1/20 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.gates.gate/unmark": "移除栈顶门径与实体,并取消该实体的标记。若其已被$(l:hexal:patterns/great_spells/gates#hexal:gate/mark)$(action)开启门径/$标记,下一次门径关闭时其将不会被传送。", + "hexal.page.gates.gate/mark/num/get": "移除栈顶门径,返回被该门径标记的实体的数量。", + "hexal.page.gates.gate/mark/get": "移除栈顶门径和实体,判断该实体是否被该门径标记。", + "hexal.page.gates.gate/close": "移除栈顶锚定门径,或未锚定门径与位置向量。将所有被所给门径标记的实体传送至其锚定位置或所给位置。消耗 1/2 个$(l:items/amethyst)$(item)紫水晶碎片/$。若为未锚定门径,则每个实体每传送 1 格额外消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.motes": "物元", + "hexal.page.motes.explanation.0": "此条目主要记述如何将物品本身拉进媒质,使其可被引用,可被计数,并将秩序带给它们也带给我也带给我的意识也带给——。压入栈中的媒质化物品 iota(称为“物元”)都代表着物元枢纽中的某个物元记录。这是因为假如没有东西承载物品中的思维模式,物品本身就会消亡——就像我的意识的剥脱——", + "hexal.page.motes.explanation.1": "所有物元 iota 的复制版本都指向同一物元记录,也正因此,对其中一个做出的修改将同步到所有复制版本中去。拆分与合并与合成与交易都影响所有影响所有——", + "hexal.page.motes.explanation.2": "物元枢纽也有部分限制,但也只是部分。它最多能存放 1023 条记录,但每条记录中物品的个数则没有上限。我还没发现任何能证明上限存在的证据,我能合并再合并再合并再合并直到永远记录增长然后增长然后增……", + "hexal.page.motes.mediafed_storage_recipe": "物元枢纽是用制图师的意识制成的,它会永不中断地标记和映射对应$(item)潜影盒/$中的物品。", + "hexal.page.motes.mote/storage/bind": "锚定一个物元枢纽,并将自身与其绑定,所有我媒质化的物品都会存入该枢纽。若锚定至其他枢纽则会自动解开与原枢纽的绑定。消耗 32 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/storage/bind/temp": "锚定一个物元枢纽,在当前咒术结束前将自身与其绑定。其在本咒术内会暂时覆盖永久性绑定的枢纽。消耗 1/1000 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/contained_type/get": "获取当前绑定的枢纽中所有物元的类型。", + "hexal.page.motes.mote/contained/get": "获取当前绑定的枢纽中所有和所给物品类型对应的,或所有可与所给物元合并的物元。", + "hexal.page.motes.mote/storage/remaining_capacity/get": "获取所绑定的枢纽剩余的空间。", + "hexal.page.motes.mote/storage/contains": "若所给位置的物元枢纽中包含所给类型的物元,或包含可与所给物元合并的物元,则返回 True,否则返回 False。", + "hexal.page.motes.mote/make": "将世界中的物品(物品实体、物品展示框)转换为物元。若传入物元,则会将所给物体与该物元合并。媒质化 1 份物品消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/return": "将物元中所有物品返还到所给位置处。若传入数,则最多返还该数个物品。消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/count/get": "接受物元,并返回该物元对应的记录中物品的个数。", + "hexal.page.motes.mote/combine": "将两个物元合并,也同时合并两者所指向的物元记录。指向第二条记录的物元会变为 Null,指向第一条的物元不会。如此就能在栈中放下远超我随身携带量的物品了!", + "hexal.page.motes.mote/combinable": "若第一参数物元可与第二参数(物元、物品实体、物品展示框)中物品合并,返回 True,否则返回 False。", + "hexal.page.motes.mote/split": "从所给物元中拆分出所给数个物品,以此创建一条物元记录并返回对应物元 iota。", + "hexal.page.motes.mote/storage/get": "获取存储所给物元的枢纽的位置。", + "hexal.page.motes.mote/storage/set": "将所给物元对应的记录转移到所给位置处的物元枢纽中,并会返回指向新记录的物元 iota,且所有指向原记录的物元均会失效。", + "hexal.page.motes.mote/craft.0": "接受物元,物元组成的列表,或物元列表组成的列表。并返回包含以对应物品合成所得产物的列表。例如,输入“石头 x128”会返回 [石头按钮 x128]。", + "hexal.page.motes.mote/craft.1": "更为复杂的合成表则需要在对应位置插入 Null。例如合成钻石镐,会需要 [[钻石 x2, 钻石 x2, 钻石 x2], [Null, 木棍 x2], [Null, 木棍 x2]],并返回 [钻石镐 x2]。消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/villager/level/get": "接受代表村民的 iota,并返回代表该村民在其职业上熟练度的数。", + "hexal.page.motes.mote/trade/get.0": "接受代表村民的 iota,并返回该村民所有的交易选项,返回结果是列表的列表的列表。每项交易由两个列表组成,内容分别为给出的物品和换得的物品。换得物品列表由对应的物品类型和可换得物品的数量组成。", + "hexal.page.motes.mote/trade/get.1": "给出物品列表则由一对或两对物品类型与对应数量组成。例如,一项交易可能形如 [[[绿宝石, 1]], [红石粉, 1]]。", + "hexal.page.motes.mote/trade.0": "接受代表村民的 iota,由物元组成的列表(用于交易),和代表交易次序的整数(可选)。(上方的 int? 表示可传入 2 或 3 个参数,可选的第三个参数需为整数。)", + "hexal.page.motes.mote/trade.1": "若不输入次序数,则会依次寻找交易选项,直到找到接受所给物品的选项为止。若输入,则会直接跳转至该交易选项处。这之后便会一直进行交易,直到物品耗尽或是村民停用该项为止。交易结束后会返回由所获得的物品组成的物元。", + "hexal.page.motes.mote/trade.2": "村民会将这些交易视作直接与我进行,且会获得经验,并以此精进技艺并改进交易选项。消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/use_on": "接受一个物元和一个实体或位置向量和法向量。并对实体或所给位置处方块使用物元中物品。物元本身需只能含有一个物品,除非其中物品极为简单(无 NBT 数据)。", + + "hexal.entry.great_wisps": "卓越咒灵法术", + "hexal.page.great_wisps.wisp/consume.0": "移除栈顶咒灵实体,并拆解该咒灵。咒灵携带的图案不可追回,但是如果此法术是由其他咒灵施放的,那么被拆解咒灵所剩的媒质还可再加利用。", + "hexal.page.great_wisps.wisp/consume.1": "若咒灵的所有者是我,或其被$(l:hexal:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)允许/$与施法者或其所有者转送,消耗 1 个$(l:items/amethyst)$(item)紫水晶碎片/$;若咒灵的所有者是他人且未被允许转送,则消耗该咒灵所拥有的媒质量的一半。媒质的再利用效率不算特别高,会在传输过程中损耗掉被拆解咒灵媒质库容量的 1/20。", + "hexal.page.great_wisps.wisp/seon/set": "在我的咒灵和我之间建立更紧密的联系。我只能同时绑定一个咒灵,但绑定咒灵的常态消耗将大大减少。", + "hexal.page.great_wisps.wisp/seon/get": "返回我当前绑定的咒灵。(这并不是卓越法术,记载于此是为了方便查找。)", + + "hexal.entry.types": "类型", + "hexal.page.types.type/iota": "移除栈顶元素,并返回该 iota 的类型。", + "hexal.page.types.type/entity": "移除栈顶实体,并返回该实体的类型。", + "hexal.page.types.type/block_item": "移除栈顶位置向量,$(l:hexal:patterns/spells/motes)$(item)物元/$,物品实体或物品展示框,并返回该处方块的类型或对应物品类型。(如草方块、石头、木棍等。)", + "hexal.page.types.type/item_held": "若施法者副手中有物品,则将其类型压入栈顶;若无,则压入施法用手中物品的类型。", + + "hexal.page.types.raycast/entity/type": "移除栈顶实体类型、位置向量和方向向量,返回该位置朝向该方向处符合该类型的实体或物品实体(若有)。", + "hexal.page.types.get_entity/type": "从栈顶获取实体类型和位置向量,返回该位置符合该类型的实体或物品实体(若有)。", + "hexal.page.types.zone_entity/type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有符合给定类型的实体或物品实体的列表。", + "hexal.page.types.zone_entity/not_type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有不符合给定类型的实体或物品实体的列表。", + + + "hexal.entry.everbook": "永恒之书", + "hexal.page.everbook.0": "永恒之书是一片奇特的空间,如今已对我残破的意识开放。似乎有许多个我共用所有永恒之书的记录,共享不同世界的研究成果,又不断重新研究。永恒之书能够将图案和 iota 对应并存储,和$(l:hexcasting:greatwork/akashiclib)$(item)阿卡夏记录/$类似。不过考虑到如今我意识的脆弱,可能还是把永恒之书的访问权限全部交给$(l:hexcasting:greatwork/akashiclib)$(item)阿卡夏记录/$比较好。只要在某个世界中获得启迪,我就能在那个世界中访问永恒之书的所有内容。", + "hexal.page.everbook.everbook/read": "接受指向$(l:hexcasting:greatwork/akashiclib)$(item)阿卡夏记录/$的位置向量,与一个作为键的图案,并返回永恒之书中对应键处的 iota,若能存储则同时会将其存至给定的$(l:hexcasting:greatwork/akashiclib)$(item)阿卡夏记录/$中。", + "hexal.page.everbook.everbook/write": "接受指向$(l:hexcasting:greatwork/akashiclib)$(item)阿卡夏记录/$的位置向量,与一个作为键的图案,并将阿卡夏记录中该图案对应的 iota 以同一图案存至永恒之书中。", + "hexal.page.everbook.everbook/delete": "接受一个图案,并移除永恒之书中该图案对应的条目。", + "hexal.page.everbook.everbook/toggle_macro.0": "接受一个图案,并以该图案标记永恒之书中对应条目,使得绘制该图案所产生的效果和自然创造的其他图案相仿。", + "hexal.page.everbook.everbook/toggle_macro.1": "当绘制被标记的永恒之书条目所对应的图案时,如果对应条目存有一个列表,则自然会如同$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$一样依次执行列表中各元素,但不会消耗递归层数。试图将不存在的条目或是会无限递归的条目标记为图案则会失败。", + + "hexal.entry.everbook_entries": "永恒之书条目", + "hexal.page.everbook_entries.0": "此条目中每一页都会显示我$(l:hexal:patterns/everbook)$(action)永恒之书/$中某一条目对应的图案键。", + + "hexal.everbook_pattern_entry.header": "存储键:%d", + "hexal.everbook_pattern_entry.macro_header": "宏键:%d", + + + + "_comment": "Config Entries", + "text.autoconfig.hexal.title": "咒法拓展(Hexal)配置", + "text.autoconfig.hexal.category.common": "Common", + "text.autoconfig.hexal.category.client": "Client", + "text.autoconfig.hexal.category.server": "Server", + + "text.autoconfig.hexal.option.server.terrainGeneration": "世界生成", + "text.autoconfig.hexal.option.server.generateSlipwayGeodes": "是否生成质道晶洞?", + + "text.autoconfig.hexal.option.server.miscSpells": "杂项法术", + "text.autoconfig.hexal.option.server.miscSpells.fallingBlockCost": "“坠落方块”媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.freezeCost": "“冻结”媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.particlesCost": "“粒子”每个向量的媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.placeTypeCost": "“放置方块,第二型”媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.smeltCost": "“烧炼”每个物品的媒质消耗", + + "text.autoconfig.hexal.option.server.wispSpells": "咒灵法术", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost": "“急速”基础媒质消耗", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[0]": "使咒灵的移动速度增加1所需的媒质量。", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[1]": "这个数值是基础媒质消耗,若单次增加更多,实际消耗量依照二次函数变化。", + "text.autoconfig.hexal.option.server.wispSpells.summonTickingWispCost": "“召唤循环式咒灵”媒质消耗", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispCost": "“召唤弹射式咒灵”每速度平方的媒质消耗", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispMinCost": "“召唤循环式咒灵”媒质消耗下限", + + "text.autoconfig.hexal.option.server.wispUpkeep": "咒灵维持", + "text.autoconfig.hexal.option.server.wispUpkeep.tickingWispUpkeepPerTick": "循环式咒灵每刻维持消耗", + "text.autoconfig.hexal.option.server.wispUpkeep.projectileWispUpkeepPerTick": "弹射式咒灵每刻维持消耗", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount": "不活跃咒灵维持消耗减免", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[0]": "不活跃的循环式咒灵的维持媒质消耗会与此数乘算。", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[1]": "取值范围为0.0到1.0。", + "text.autoconfig.hexal.option.server.wispUpkeep.linkUpkeepPerTick": "链接每刻维持消耗", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor": "绑定咒灵维持消耗减免因数", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[0]": "被绑定的咒灵的维持媒质消耗会除以此数。", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[1]": "取值范围为2.0到200.0。", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor": "存储玩家iota媒质消耗乘算因数", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[0]": "存有代表其他玩家的iota的咒灵的媒质消耗会与此数乘算。", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[1]": "取值范围为1.0到200.0。", + + "text.autoconfig.hexal.option.server.linkSpells": "链接法术", + "text.autoconfig.hexal.option.server.linkSpells.linkCost": "“链接”媒质消耗", + "text.autoconfig.hexal.option.server.linkSpells.sendIotaCost": "“发送Iota”媒质消耗", + "text.autoconfig.hexal.option.server.linkSpells.unlinkCost": "“解链接”媒质消耗", + + "text.autoconfig.hexal.option.server.gateSpells": "门径法术", + "text.autoconfig.hexal.option.server.gateSpells.makeGateCost": "“门径之精思”媒质消耗", + "text.autoconfig.hexal.option.server.gateSpells.markGateCost": "“开启门径”媒质消耗", + "text.autoconfig.hexal.option.server.gateSpells.closeGateCost": "“关闭门径”媒质消耗", + + "text.autoconfig.hexal.option.server.itemSpells": "物品法术", + "text.autoconfig.hexal.option.server.itemSpells.bindStorageCost": "“绑定储库”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.bindTemporaryStorageCost": "“绑定储库,临时型”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.makeItemCost": "“媒质化物品”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.returnItemCost": "“返还物品”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.craftItemCost": "“合成”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.tradeItemCost": "“交易”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned": "最大返还物品数", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[0]": "“返还物品”单次最多能返还的物品数量。", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[1]": "取值范围为640到64,000。", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage": "物元枢纽最大记录条数", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[0]": "单个物元枢纽中最多能存储的物元记录条数。", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[1]": "取值范围为128到16384。", + + + "text.autoconfig.hexal.option.server.greatSpells": "卓越法术", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost": "拆解自己的咒灵的媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[0]": "拆解咒灵(咒灵的所有者是自己)的媒质消耗,", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[1]": "也适用于拆解出于某些原因不会反抗的咒灵。", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia": "拆解他人的咒灵的单位媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[0]": "拆解会反抗的咒灵的媒质消耗,此数会与", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[1]": "被拆解的咒灵身上含有的媒质总量乘算。", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[2]": "取值范围为1.0到20.0。", + "text.autoconfig.hexal.option.server.greatSpells.seonWispSetCost": "“绑定咒灵”媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost": "“加速”常态媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost.@Tooltip": "加速方块运作常态媒质消耗。每次使用均会消耗。", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked": "“加速”每加速刻累计媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[0]": "加速方块运作时,之前每加速一刻额外消耗的增长量。", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[1]": "会与上方常态媒质消耗加算。", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb": "“加速”随机刻的逆概率", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[0]": "“加速”加速方块随机刻的逆概率。", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[1]": "此数越大,越不可能加速随机刻;此数越小,越可能加速随机刻。", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[2]": "取值范围为600到2100。" +} \ No newline at end of file diff --git a/projects/1.19/assets/moreiotas/moreiotas/README.md b/projects/1.19/assets/moreiotas/moreiotas/README.md new file mode 100644 index 000000000000..9f3a6e2c4891 --- /dev/null +++ b/projects/1.19/assets/moreiotas/moreiotas/README.md @@ -0,0 +1 @@ +[见主文档](/project/1.20/assets/moreiotas/moreiotas) \ No newline at end of file diff --git a/projects/1.19/assets/moreiotas/moreiotas/lang/en_us.json b/projects/1.19/assets/moreiotas/moreiotas/lang/en_us.json new file mode 100644 index 000000000000..923a462b70d7 --- /dev/null +++ b/projects/1.19/assets/moreiotas/moreiotas/lang/en_us.json @@ -0,0 +1,126 @@ +{ + "hexcasting.iota.moreiotas:string": "String", + "hexcasting.iota.moreiotas:matrix": "Matrix", + + "hexal.tooltip.string": "\"%s\"", + + "hexcasting.spell.moreiotas:string/empty": "Blank Reflection", + "hexcasting.spell.moreiotas:string/space": "Spacing Reflection", + "hexcasting.spell.moreiotas:string/comma": "Comma Reflection", + "hexcasting.spell.moreiotas:string/newline": "Breaking Reflection", + "hexcasting.spell.moreiotas:string/block/get": "Reader's Purification", + "hexcasting.spell.moreiotas:string/block/set": "Write", + "hexcasting.spell.moreiotas:string/chat/caster": "Whisper Reflection", + "hexcasting.spell.moreiotas:string/chat/all": "Listener's Reflection", + "hexcasting.spell.moreiotas:string/chat/prefix/get": "Sifter's Reflection", + "hexcasting.spell.moreiotas:string/chat/prefix/set": "Sifter's Gambit", + "hexcasting.spell.moreiotas:string/iota": "Scrivener's Purification", + "hexcasting.spell.moreiotas:string/action": "Patternmaster's Purification", + "hexcasting.spell.moreiotas:string/name/get": "Moniker Purification", + "hexcasting.spell.moreiotas:string/name/set": "Name", + "hexcasting.spell.moreiotas:string/add": "Concatenation Distillation", + "hexcasting.spell.moreiotas:string/split": "Separation Distillation", + "hexcasting.spell.moreiotas:string/parse": "Input Purification", + "hexcasting.spell.moreiotas:string/find": "Discoverer's Distillation", + "hexcasting.spell.moreiotas:string/sub": "Winnowing Distillation", + "hexcasting.spell.moreiotas:string/len": "Length Distillation: Str", + "hexcasting.spell.moreiotas:string/case": "Case Distillation", + + "hexcasting.spell.moreiotas:matrix/make": "Transformation Purification", + "hexcasting.spell.moreiotas:matrix/unmake": "Restoration Purification", + "hexcasting.action.moreiotas:matrix/unmake/direct": "Restoration Purification II", + "hexcasting.spell.moreiotas:matrix/identity": "Identity Purification", + "hexcasting.spell.moreiotas:matrix/zero": "Zero Distillation", + "hexcasting.spell.moreiotas:matrix/rotation": "Rotation Distillation", + "hexcasting.spell.moreiotas:matrix/add": "Addition Distillation: Matrix", + "hexcasting.spell.moreiotas:matrix/mul": "Multiplication Distillation: Matrix", + "hexcasting.spell.moreiotas:matrix/transpose": "Transpose Purification", + "hexcasting.spell.moreiotas:matrix/inverse": "Inverse Purification", + "hexcasting.spell.moreiotas:matrix/determinant": "Determinant Purification", + "hexcasting.spell.moreiotas:matrix/concat/vert": "Tower Distillation", + "hexcasting.spell.moreiotas:matrix/concat/hori": "Sprawling Distillation", + "hexcasting.spell.moreiotas:matrix/split/vert": "Toppling Gambit", + "hexcasting.spell.moreiotas:matrix/split/hori": "Mitosis Gambit", + + "hexcasting.spell.book.moreiotas:string/action": "Patternmaster's Prfct.", + "hexcasting.spell.book.moreiotas:string/len": "Length Dstl.: Str", + + "hexcasting.spell.book.moreiotas:matrix/make": "Transformation Prfct.", + "hexcasting.spell.book.moreiotas:matrix/unmake": "Restoration Prfct.", + "hexcasting.action.book.moreiotas:matrix/unmake/direct": "Restoration Prfct. II", + "hexcasting.spell.book.moreiotas:matrix/add": "Add. Dstl.: Matrix", + "hexcasting.spell.book.moreiotas:matrix/mul": "Mul. Dstl.: Matrix", + + "moreiotas.entry.strings": "Strings", + "moreiotas.page.strings.string/empty": "Add an empty string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/space": "Add a blank space string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/comma": "Add a comma string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/newline": "Add a string to the stack representing a break between lines, useful for combining with other strings.", + "moreiotas.page.strings.string/block/get": "Removes a vector from the stack. If that vector is pointing at a sign or lectern, it returns that sign or lectern's text to the stack. Otherwise, it returns null.", + "moreiotas.page.strings.string/block/set": "Removes a vector and a string from the stack. If that vector is pointing at a sign or lectern, it writes that string to that sign or lectern. Costs a hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "moreiotas.page.strings.string/chat/caster": "Adds the last message the caster sent to the stack as a string.", + "moreiotas.page.strings.string/chat/all": "Adds the last message anyone sent to the stack as a string.", + "moreiotas.page.strings.string/chat/prefix/set": "Accepts a string; All future chat messages starting with that string won't be seen by others, and only messages prefixed with that string can be read by $(l:moreiotas:patterns/strings#moreiotas:string/chat/caster)$(action)Whisper Reflection/$.", + "moreiotas.page.strings.string/chat/prefix/get": "Returns the last string you passed to $(l:moreiotas:patterns/strings#moreiotas:string/chat/prefix/set)$(action)Sifter's Gambit/$.", + "moreiotas.page.strings.string/iota": "Converts the iota on top of the stack into a string.", + "moreiotas.page.strings.string/action": "Converts the pattern on top of the stack into the string for that pattern's name. If there is no action associated with that pattern, or if the associated pattern is a Great Spell, it returns null.", + "moreiotas.page.strings.string/name/get": "Takes an entity and returns that entity's name. If it is an item entity, return the item's name.", + "moreiotas.page.strings.string/name/set": "Takes a string and an entity, and sets that entities name to the given string. If the entity is an item entity, also set the item's name. Costs a hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "moreiotas.page.strings.string/add": "Removes the top two strings from the stack and combines them together.", + "moreiotas.page.strings.string/split": "Removes the top two strings from the stack and splits the first string, using the second string as the delimiter and returning as a list.", + "moreiotas.page.strings.string/parse": "Removes a string from the top of the stack and returns the number that string parses as (or null if it doesn't parse).", + "moreiotas.page.strings.string/find": "Removes two strings from the top of the stack, and returns the first index of the first string where the second string is a substring.", + "moreiotas.page.strings.string/sub": "Removes a string and two positive integers from the top of the stack, and returns the substring from the first to the second (inclusive first, exclusive second).", + "moreiotas.page.strings.string/len": "Removes a string and returns its length.", + "moreiotas.page.strings.string/case": "Removes a string and a bool or null. If it was true, return the string in upper case. If false, lowercase. If null, toggle each character's case.", + + "moreiotas.entry.matrices": "Matrices", + "moreiotas.page.matrices.0": "Matrices are a helpful tool for manipulating vectors to do as I wish, able to represent any linear transformation that can be applied to a vector. Of note with these patterns is that many are forgiving with their inputs, accepting in place of matrices things that can be easily mapped to matrices, namely numbers and vectors.", + "moreiotas.page.matrices.1": "For example, attempting to multiply a 3x3 matrix with a vector, rather than mishapping, will return a new vector. For more information on how to make use of matrices to their fullest potential, the below is a helpful resource.", + "moreiotas.page.matrices.1.link_text": "3blue1brown", + "moreiotas.page.matrices.matrix/make.0": "Converts the iota on top of the stack into a matrix. This iota can be a number, vector, or list.", + "moreiotas.page.matrices.matrix/make.1": "If it is a number, it becomes a 1x1 matrix. If it's a vector, it becomes a 3x1 matrix. If it's a list, it must be a list of purely numbers, purely vectors, or purely lists of numbers (each of which must be the same length). If it's a list of numbers it'll be 1 by n, if it's a list of vectors it'll be 3 by n, and if it's a list of lists it'll be n by m, where n is the inner list length and m is the outer list length.", + "moreiotas.page.matrices.matrix/unmake.0": "Converts the iota on top of the stack back from a matrix into a number, vector, or list depending on the vector's size.", + "moreiotas.page.matrices.matrix/unmake.1": "A 1x1 matrix will become a number. A 1x3 or 3x1 matrix will become a vector. A 3 by n or n by 3 matrix will become a list of vectors, and any matrix not covered by the previous will become a list of lists of numbers, with each inner list being one column of the matrix.", + "moreiotas.page.matrices.matrix/unmake/direct": "As $(l:moreiotas:patterns/matrices#moreiotas:matrix/unmake)$(action)Restoration Purification/$, except it always returns a list of lists of numbers.", + "moreiotas.page.matrices.matrix/identity": "Accepts a positive integer n, and returns an n by n matrix with 1 along the diagonal and 0 elsewhere.", + "moreiotas.page.matrices.matrix/zero": "Accepts positive integers n and m, and returns an n by m matrix of zeros.", + "moreiotas.page.matrices.matrix/rotation": "Accepts a vec v and number θ, and returns a matrix representing rotating by θ radians around v.", + "moreiotas.page.matrices.matrix/add": "Adds two matrices together; they must have the same number of columns and rows.", + "moreiotas.page.matrices.matrix/mul": "Multiplies the first n by m by with an m by p matrix to get an n by p matrix.", + "moreiotas.page.matrices.matrix/transpose": "Accepts an n by m matrix and returns an m by n matrix where every entry has been flipped along the diagonal.", + "moreiotas.page.matrices.matrix/inverse": "Accepts an n by n matrix and returns the n by n matrix such that in*out = identity.", + "moreiotas.page.matrices.matrix/determinant": "Accepts a square matrix and returns the determinant of that matrix. Mishaps for matrices larger than 4x4.", + "moreiotas.page.matrices.matrix/concat/vert": "Accepts an n by m matrix and a p by m matrix and produces a (n+p) by m matrix by putting the first matrix on top of the second.", + "moreiotas.page.matrices.matrix/concat/hori": "Accepts an n by m matrix and an n by p matrix and produces an n by (m+p) matrix by putting the first matrix to the left of the second.", + "moreiotas.page.matrices.matrix/split/vert": "Accepts an n by m matrix and an int from 0 to n, and returns two matrices created by splitting the input matrix vertically at the inputted int.", + "moreiotas.page.matrices.matrix/split/hori": "Accepts an n by m matrix and an int from 0 to m, and returns two matrices created by splitting the input matrix horizontally at the inputted int.", + + "moreiotas.entry.types": "Types", + "moreiotas.page.types.type/iota": "Remove an iota from the stack, and adds the type of that iota to the stack.", + "moreiotas.page.types.type/entity": "Remove an entity from the stack, and adds the type of the entity at that location to the stack.", + "moreiotas.page.types.type/to_item": "Remove an iota with an associated item type (for example a location and the type of the block at that location, an item entity, or an item frame) from the stack and returns the item type to the stack (e.g. Grass, Stone, Stick, etc.).", + "moreiotas.page.types.type/item_held": "Adds the type of the item in the caster's offhand to the stack if there is one present, or the type of the casting hand otherwise.", + + "moreiotas.page.types.get_entity/type": "Remove an entity type and a position from the stack, and returns an entity of that type at that position if one exists.", + "moreiotas.page.types.zone_entity/type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities of that type within that radius of that position.", + "moreiotas.page.types.zone_entity/not_type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities not of that type within that radius of that position", + + "moreiotas.entry.items": "Items", + "moreiotas.page.items.item/prop/item": "Transforms the $(l:hexcasting:casting/item_iotas)Item Stack$() at the top of the stack into its Item.", + "moreiotas.page.items.item/prop/size": "Transforms the Item Stack at the top of the stack into its size.", + "moreiotas.page.items.item/prop/size/set": "Transforms the Item Stack at the top of the stack into its size.", + "moreiotas.page.items.item/main_hand": "Transforms the entity at the top of the stack into the Item Stack in its main hand. Also works on Item Frames and dropped items.", + "moreiotas.page.items.item/off_hand": "Transforms the entity at the top of the stack into the Item Stack in its off hand.", + "moreiotas.page.items.item/inventory/stacks": "Removes two vectors from the stack representing position and side. Returns a list of Item Stacks in the block at the given position accessible from the given side (or all if second vector is zero).", + "moreiotas.page.items.item/inventory/items": "Removes two vectors from the stack representing position and side. Returns a list of Items in the block at the given position accessible from the given side (or all if second vector is zero).", + + "hexcasting.mishap.invalid_value.class.string": "a string", + "hexcasting.mishap.invalid_value.class.matrix": "a matrix", + "hexcasting.mishap.invalid_value.class.matrix.square": "a square matrix", + "hexcasting.mishap.invalid_value.class.numvecmat": "a number, vector, or matrix", + "hexcasting.mishap.invalid_value.class.possible_matrix": "an iota able to be converted to a matrix", + "hexcasting.mishap.invalid_value.matrix.wrong_size": "a matrix %s by %s", + "hexcasting.mishap.invalid_value.matrix.max_size": "a final matrix less than %1$d by %1$d, was %2$d by %3$d", + "hexcasting.mishap.invalid_value.string.max_size": "a string less than %d chars long, was %d" +} \ No newline at end of file diff --git a/projects/1.19/assets/moreiotas/moreiotas/lang/zh_cn.json b/projects/1.19/assets/moreiotas/moreiotas/lang/zh_cn.json new file mode 100644 index 000000000000..5d8aeb4b6a91 --- /dev/null +++ b/projects/1.19/assets/moreiotas/moreiotas/lang/zh_cn.json @@ -0,0 +1,126 @@ +{ + "hexcasting.iota.moreiotas:string": "字符串", + "hexcasting.iota.moreiotas:matrix": "矩阵", + + "hexal.tooltip.string": "\"%s\"", + + "hexcasting.spell.moreiotas:string/empty": "空串之精思", + "hexcasting.spell.moreiotas:string/space": "空格之精思", + "hexcasting.spell.moreiotas:string/comma": "逗点之精思", + "hexcasting.spell.moreiotas:string/newline": "断句之精思", + "hexcasting.spell.moreiotas:string/block/get": "读者之纯化", + "hexcasting.spell.moreiotas:string/block/set": "书写", + "hexcasting.spell.moreiotas:string/chat/caster": "耳语之精思", + "hexcasting.spell.moreiotas:string/chat/all": "听者之精思", + "hexcasting.spell.moreiotas:string/chat/prefix/get": "筛具之精思", + "hexcasting.spell.moreiotas:string/chat/prefix/set": "筛具之策略", + "hexcasting.spell.moreiotas:string/iota": "代笔人之纯化", + "hexcasting.spell.moreiotas:string/action": "图案师之纯化", + "hexcasting.spell.moreiotas:string/name/get": "名号之纯化", + "hexcasting.spell.moreiotas:string/name/set": "命名", + "hexcasting.spell.moreiotas:string/add": "接串之馏化", + "hexcasting.spell.moreiotas:string/split": "分串之馏化", + "hexcasting.spell.moreiotas:string/parse": "输入之纯化", + "hexcasting.spell.moreiotas:string/find": "发现者之馏化", + "hexcasting.spell.moreiotas:string/sub": "簸具之提整", + "hexcasting.spell.moreiotas:string/len": "长度之纯化:字符串", + "hexcasting.spell.moreiotas:string/case": "大小写之馏化", + + "hexcasting.spell.moreiotas:matrix/make": "组阵之纯化", + "hexcasting.spell.moreiotas:matrix/unmake": "解阵之纯化", + "hexcasting.action.moreiotas:matrix/unmake/direct": "解阵之纯化,第二型", + "hexcasting.spell.moreiotas:matrix/identity": "单位阵之纯化", + "hexcasting.spell.moreiotas:matrix/zero": "零阵之馏化", + "hexcasting.spell.moreiotas:matrix/rotation": "旋转阵之馏化", + "hexcasting.spell.moreiotas:matrix/add": "加法之馏化:矩阵", + "hexcasting.spell.moreiotas:matrix/mul": "乘法之馏化:矩阵", + "hexcasting.spell.moreiotas:matrix/transpose": "转置之纯化", + "hexcasting.spell.moreiotas:matrix/inverse": "逆阵之纯化", + "hexcasting.spell.moreiotas:matrix/determinant": "行列式之纯化", + "hexcasting.spell.moreiotas:matrix/concat/vert": "纵接之馏化", + "hexcasting.spell.moreiotas:matrix/concat/hori": "横拼之馏化", + "hexcasting.spell.moreiotas:matrix/split/vert": "倒坠之策略", + "hexcasting.spell.moreiotas:matrix/split/hori": "有丝分裂之策略", + + "hexcasting.spell.book.moreiotas:string/action": "图案师之纯化", + "hexcasting.spell.book.moreiotas:string/len": "长度之纯化:字符串", + + "hexcasting.spell.book.moreiotas:matrix/make": "组阵之纯化", + "hexcasting.spell.book.moreiotas:matrix/unmake": "解阵之纯化", + "hexcasting.action.book.moreiotas:matrix/unmake/direct": "解阵之纯化,第二型", + "hexcasting.spell.book.moreiotas:matrix/add": "加法之馏化:矩阵", + "hexcasting.spell.book.moreiotas:matrix/mul": "乘法之馏化:矩阵", + + "moreiotas.entry.strings": "字符串", + "moreiotas.page.strings.string/empty": "压入一个空字符串。其在与其他字符串连接方面十分有用。", + "moreiotas.page.strings.string/space": "压入一个由单个空格组成的字符串。其在与其他字符串连接方面十分有用。", + "moreiotas.page.strings.string/comma": "压入一个由单个半角逗号组成的字符串。其在与其他字符串连接方面十分有用。", + "moreiotas.page.strings.string/newline": "压入一个由单个换行符组成的字符串。其在与其他字符串连接方面十分有用。", + "moreiotas.page.strings.string/block/get": "移除栈顶向量,若该向量坐标处有一告示牌或讲台,返回其上文本。否则返回 Null。", + "moreiotas.page.strings.string/block/set": "移除栈顶向量和字符串。若该向量坐标处有一告示牌或讲台,则会将所给字符串写至其上。消耗 1/100 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "moreiotas.page.strings.string/chat/caster": "将施法者发至聊天框的最后一条消息作为字符串压入栈顶。", + "moreiotas.page.strings.string/chat/all": "将任何人发至聊天框的最后一条消息作为字符串压入栈顶。", + "moreiotas.page.strings.string/chat/prefix/set": "接受一个字符串。所有此后发出的以此字符串起始的消息将不再可见。同时,$(l:moreiotas:patterns/strings#moreiotas:string/chat/caster)$(action)耳语之精思/$也将只能读取上述不再可见的消息。", + "moreiotas.page.strings.string/chat/prefix/get": "返回上一次传给$(l:moreiotas:patterns/strings#moreiotas:string/chat/prefix/set)$(action)筛具之策略/$的字符串。", + "moreiotas.page.strings.string/iota": "将栈顶元素转换为字符串。", + "moreiotas.page.strings.string/action": "将栈顶图案转换为其名称。如果该图案不对应任何操作,或对应的操作是卓越法术,则返回 Null。", + "moreiotas.page.strings.string/name/get": "接受栈顶实体,并返回其名称。若为物品实体,则返回物品的名称。", + "moreiotas.page.strings.string/name/set": "接受栈顶字符串和实体,并将该实体的名称设定为该字符串。若为物品实体,则会同时更改物品的名称。消耗 1/100 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "moreiotas.page.strings.string/add": "移除栈顶两字符串,并将其连接。", + "moreiotas.page.strings.string/split": "移除栈顶两字符串,并以第二个字符串为分隔符拆分第一个字符串,结果作为列表返回。", + "moreiotas.page.strings.string/parse": "移除栈顶字符串,并返回字符串所解析得的数(若无法解析则返回 Null)。", + "moreiotas.page.strings.string/find": "移除栈顶两字符串,并返回第二个字符串在第一个字符串中第一次出现的位置下标。", + "moreiotas.page.strings.string/sub": "移除栈顶字符串和两个数,并返回字符串中下标从第一个数(含)到第二个数(不含)间的子串。", + "moreiotas.page.strings.string/len": "移除栈顶字符串,并返回其长度。", + "moreiotas.page.strings.string/case": "移除栈顶字符串和布尔值(Null 也可)。若为 True,将字符串改为全大写并返回;若为 False,则改为全小写;若为 Null,则更改所有字符的大小写。", + + "moreiotas.entry.matrices": "矩阵", + "moreiotas.page.matrices.0": "矩阵是操纵向量的好帮手,它们能表示任何可作用于向量的线性变换。需注明的是,本条目里的图案在所接受 iota 的类型方面十分随和,它们会接受任何可直接映射为矩阵的 iota,如数和向量。", + "moreiotas.page.matrices.1": "例如,将一 3×3 矩阵与一向量相乘不会产生事故,而是会返回一个新向量。更多有关发掘矩阵潜能的信息可参见下方链接(译注:B 站官方账号同视频见$(l:https://www.bilibili.com/video/BV1ns41167b9)此/$和$(l:https://www.bilibili.com/video/BV1ys411472E?p=4)此/$)。", + "moreiotas.page.matrices.1.link_text": "3blue1brown", + "moreiotas.page.matrices.matrix/make.0": "将栈顶元素转换为矩阵。接受数、向量和列表。", + "moreiotas.page.matrices.matrix/make.1": "若该 iota 为数,其将变为 1×1 的矩阵。若该 iota 为向量,其将变为 3×1 的矩阵。若该 iota 为列表,则其需为一完全由数组成,或完全由向量组成,或完全由仅含数的列表(所有列表需等长)组成的列表。若组成元素为数,其将变为 1×n 的矩阵;若组成元素为向量,其将变为 3×n 的矩阵;若组成元素为列表,则变为 n×m 的矩阵,其中 n 为内层列表长度,m 为外层列表长度。", + "moreiotas.page.matrices.matrix/unmake.0": "将栈顶矩阵依其长宽转换为数、向量或列表。", + "moreiotas.page.matrices.matrix/unmake.1": "1×1 矩阵会变成数。1×3 或 3×1 矩阵会变成向量。3×n 或 n×3 矩阵会变成由向量组成的列表。所有其余矩阵会变成由仅含数的列表组成的列表,内层列表长度为矩阵列数。", + "moreiotas.page.matrices.matrix/unmake/direct": "与$(l:moreiotas:patterns/matrices#moreiotas:matrix/unmake)$(action)解阵之纯化/$类似,但此图案只会返回由仅含数的列表组成的列表。", + "moreiotas.page.matrices.matrix/identity": "接受一个正整数 n,返回一 n 阶单位矩阵(即主对角线处为 1,其余各处为 0 的方阵)。", + "moreiotas.page.matrices.matrix/zero": "接受两个正整数,返回一 n×m 的零矩阵(即处处为 0 的矩阵)。", + "moreiotas.page.matrices.matrix/rotation": "接受一向量 v 与一数 θ,返回对应以 v 为轴正向旋转 θ 弧度的旋转矩阵。", + "moreiotas.page.matrices.matrix/add": "将两矩阵相加。两矩阵的长宽必须一致。", + "moreiotas.page.matrices.matrix/mul": "将一 n×m 矩阵与一 m×p 矩阵相乘,所得为 n×p 矩阵。。", + "moreiotas.page.matrices.matrix/transpose": "接受一 n×m 矩阵并返回一 m×n 矩阵,其中所有元素按主对角线对称翻转。", + "moreiotas.page.matrices.matrix/inverse": "接受一 n×n 矩阵并返回一 n×n 矩阵,使得原矩阵和返回矩阵相乘得单位矩阵。", + "moreiotas.page.matrices.matrix/determinant": "接受一方阵并返回其行列式。若对 4×4 以上方阵使用,则会产生事故。", + "moreiotas.page.matrices.matrix/concat/vert": "接受一 n×m 矩阵与一 p×m 矩阵,返回一 (n+p)×m 矩阵,其中第一个矩阵位于第二个矩阵上方。", + "moreiotas.page.matrices.matrix/concat/hori": "接受一 n×m 矩阵与一 n×p 矩阵,返回一 n×(m+p) 矩阵,其中第一个矩阵位于第二个矩阵左方。", + "moreiotas.page.matrices.matrix/split/vert": "接受一 n×m 矩阵与一 0 到 n 间的整数,返回由原矩阵在所给整数行处上下分割所得的两个矩阵。", + "moreiotas.page.matrices.matrix/split/hori": "接受一 n×m 矩阵与一 0 到 m 间的整数,返回由原矩阵在所给整数列处左右分割所得的两个矩阵。", + + "moreiotas.entry.types": "类型", + "moreiotas.page.types.type/iota": "移除栈顶元素,并返回该 iota 的类型。", + "moreiotas.page.types.type/entity": "移除栈顶实体,并返回该实体的类型。", + "moreiotas.page.types.type/to_item": "移除栈顶位置向量,物品实体或物品展示框。并返回该处方块的类型或对应物品类型。(如草方块、石头、木棍等。)", + "moreiotas.page.types.type/item_held": "若施法者副手中有物品,则将其类型压入栈顶;若无,则压入施法用手中物品的类型。", + + "moreiotas.page.types.get_entity/type": "从栈顶获取实体类型和位置向量,返回该位置符合该类型的实体(若有)。", + "moreiotas.page.types.zone_entity/type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有符合给定类型的实体的列表。", + "moreiotas.page.types.zone_entity/not_type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有不符合给定类型的实体的列表。", + + "moreiotas.entry.items": "物品", + "moreiotas.page.items.item/prop/item": "接受栈顶$(l:hexcasting:casting/item_iotas)物品组$(),返回对应物品类型。", + "moreiotas.page.items.item/prop/size": "接受栈顶物品组,返回其中物品数量。", + "moreiotas.page.items.item/prop/size/set": "接受栈顶物品组,返回其中物品数量。", + "moreiotas.page.items.item/main_hand": "接受栈顶实体,返回其主手中的物品组。对物品展示框和物品实体同样有效。", + "moreiotas.page.items.item/off_hand": "接受栈顶实体,返回其副手中的物品组。", + "moreiotas.page.items.item/inventory/stacks": "移除栈顶位置向量和面向量,并返回与该位置处方块对应面交互时可获得的物品组列表(若面向量为零向量则检索所有面)。", + "moreiotas.page.items.item/inventory/items": "移除栈顶位置向量和面向量,并返回与该位置处方块对应面交互时可获得的物品类型列表(若面向量为零向量则检索所有面)。", + + "hexcasting.mishap.invalid_value.class.string": "一个字符串", + "hexcasting.mishap.invalid_value.class.matrix": "一个矩阵", + "hexcasting.mishap.invalid_value.class.matrix.square": "一个方阵", + "hexcasting.mishap.invalid_value.class.numvecmat": "一个数、向量或矩阵", + "hexcasting.mishap.invalid_value.class.possible_matrix": "一个可转换为矩阵的iota", + "hexcasting.mishap.invalid_value.matrix.wrong_size": "一个%s×%s的矩阵", + "hexcasting.mishap.invalid_value.matrix.max_size": "一个小于%1$d×%1$d的矩阵,而实际为%2$d×%3$d", + "hexcasting.mishap.invalid_value.string.max_size": "一个长度小于%d字符的字符串,而实际长度为%d" +} diff --git a/projects/1.20-fabric/assets/hexal/hexal/README.md b/projects/1.20-fabric/assets/hexal/hexal/README.md new file mode 100644 index 000000000000..31fe86ec0ee1 --- /dev/null +++ b/projects/1.20-fabric/assets/hexal/hexal/README.md @@ -0,0 +1 @@ +[见主文档](/projects/1.20/assets/hexal/hexal) \ No newline at end of file diff --git a/projects/1.20-fabric/assets/hexal/hexal/lang/en_us.json b/projects/1.20-fabric/assets/hexal/hexal/lang/en_us.json new file mode 100644 index 000000000000..b457a7660827 --- /dev/null +++ b/projects/1.20-fabric/assets/hexal/hexal/lang/en_us.json @@ -0,0 +1,410 @@ +{ + "block.hexal.slipway": "Slipway", + "block.hexal.mediafied_storage": "Mote Nexus", + "block.hexal.relay": "Relay", + + "entity.hexal.wisp.projectile": "Projectile Wisp", + "entity.hexal.wisp.ticking": "Cyclic Wisp", + "entity.hexal.wisp.wandering": "Wandering Wisp", + + + "hexcasting.mishap.non_player": "%s expected to be cast by a player.", + "hexcasting.mishap.no_wisp": "%s expected to be cast by a wisp.", + "hexcasting.mishap.others_wisp": "That wisp is owned by %s, not you.", + "hexcasting.mishap.no_links": "%s has no links.", + "hexcasting.mishap.self_link": "Tried to link %s to itself.", + "hexcasting.mishap.no_bound_storage": "No bound Mote Nexus.", + "hexcasting.mishap.storage_unloaded": "Bound Mote Nexus is unloaded.", + "hexcasting.mishap.excessive_reproduction": "Wisp %s tried to reproduce excessively; only 1 child per tick.", + "hexcasting.mishap.illegal_interworld_iota": "Attempted to bring iota %s interworld, this type of iota cannot be added to the Everbook.", + + "hexcasting.mishap.invalid_value.class.linkable": "a linkable", + "hexcasting.mishap.invalid_value.class.wisp": "a wisp", + "hexcasting.mishap.invalid_value.class.consumable_entity": "a consumable entity", + "hexcasting.mishap.invalid_value.class.wisp.casting": "a casting wisp", + "hexcasting.mishap.invalid_value.class.type.block": "a block type", + "hexcasting.mishap.invalid_value.class.type.item": "an item type", + "hexcasting.mishap.invalid_value.class.type.entity": "an entity or entity type", + "hexcasting.mishap.invalid_value.class.type.block.able": "an item type that has a block", + "hexcasting.mishap.invalid_value.class.type.list.double": "a list of numbers", + "hexcasting.mishap.invalid_value.class.gate": "a gate", + "hexcasting.mishap.invalid_value.class.mote": "a mote", + "hexcasting.mishap.invalid_value.class.moteentity.itemitemframe": "a mote, item entity, or item frame", + "hexcasting.mishap.invalid_value.moteitemtype": "a mote or item type", + "hexcasting.mishap.invalid_value.motemotelist": "a mote or list of motes", + "hexcasting.mishap.invalid_value.motemotelistmotelistlist": "a mote, list of motes, or list of lists of motes", + "hexcasting.mishap.invalid_value.veclist": "a vector or a list of vectors", + "hexcasting.mishap.invalid_value.blockitementityitemframeitem": "a block, item entity, item frame, or mote", + "hexcasting.mishap.invalid_value.entity.itemitemframe": "an item entity or item frame", + "hexcasting.mishap.invalid_value.int.strictly_positive": "a strictly positive integer", + "hexcasting.mishap.invalid_value.crafting_recipe": "a valid crafting recipe", + "hexcasting.mishap.invalid_value.mote_duplicated": "each mote to appear only once", + "hexcasting.mishap.invalid_value.cant_combine_motes": "two motes that can be combined", + "hexcasting.mishap.invalid_value.mote_not_size_one": "a mote with no NBT data or of size one", + "hexcasting.mishap.invalid_value.gate.offset": "an offset of at most %f blocks", + + + "hexcasting.iota.hexal:iota_type": "Iota Type", + "hexcasting.iota.hexal:entity_type": "Entity Type", + "hexcasting.iota.hexal:item_type": "Item Type", + "hexcasting.iota.hexal:gate": "Gate", + "hexcasting.iota.hexal:item": "Item", + + "hexal.spelldata.entity_type": "Type", + "hexal.spelldata.gate": "Gate %d", + "hexal.spelldata.mote": "%s x%d", + + "hexcasting.action.hexal:type/iota": "Classifier's Purification", + "hexcasting.action.hexal:type/entity": "Physician's Purification", + "hexcasting.action.hexal:type/block_item": "Sorter's Purification", + "hexcasting.action.hexal:type/item_held": "Sorter's Reflection", + + "hexcasting.action.hexal:get_entity/type": "Entity Distillation: Type", + "hexcasting.action.hexal:zone_entity/type": "Zone Exaltation: Type", + "hexcasting.action.hexal:zone_entity/not_type": "Zone Exaltation: Not-Type", + + "hexcasting.action.hexal:current_tick": "Timekeeper's Reflection", + "hexcasting.action.hexal:breath": "Diver's Purification", + "hexcasting.action.hexal:health": "Nurse's Purification", + "hexcasting.action.hexal:armour": "Squire's Purification", + "hexcasting.action.hexal:toughness": "Boxer's Purification", + "hexcasting.action.hexal:light_level": "Lamplighter's Purification", + + "hexcasting.action.hexal:factorial": "Factorial Purification", + "hexcasting.action.hexal:running/sum": "Running Sum Purification", + "hexcasting.action.hexal:running/mul": "Running Product Purification", + + "hexcasting.action.hexal:everbook/read": "Mnemosyne's Gambit", + "hexcasting.action.hexal:everbook/write": "Elysium's Gambit", + "hexcasting.action.hexal:everbook/delete": "Lethe's Gambit", + "hexcasting.action.hexal:everbook/toggle_macro": "Brigh's Gambit", + + "hexcasting.action.hexal:smelt": "Smelt", + "hexcasting.action.hexal:freeze": "Freeze", + "hexcasting.action.hexal:falling_block": "Falling Block", + "hexcasting.action.hexal:place_type": "Place Block II", + "hexcasting.action.hexal:particles": "Particles", + + "hexcasting.action.hexal:interop/fabric_only/phase_block": "Phase Block", + + "hexcasting.action.hexal:wisp/summon/projectile": "Summon Projectile Wisp", + "hexcasting.action.hexal:wisp/summon/ticking": "Summon Cyclic Wisp", + "hexcasting.action.hexal:wisp/self": "Identity Reflection", + "hexcasting.action.hexal:wisp/media": "Reservoir Reflection", + "hexcasting.action.hexal:wisp/hex": "Manager's Purification", + "hexcasting.action.hexal:wisp/owner": "Allegiance Distillation", + "hexcasting.action.hexal:wisp/move/target/set": "Pathfinder's Gambit", + "hexcasting.action.hexal:wisp/move/target/get": "Pathfinder's Reflection", + "hexcasting.action.hexal:wisp/move/speed/set": "Haste", + "hexcasting.action.hexal:wisp/move/speed/get": "Speedometer's Reflection", + "hexcasting.action.hexal:wisp/trigger/tick": "Delay Wisp", + "hexcasting.action.hexal:wisp/trigger/comm": "Listen", + "hexcasting.action.hexal:wisp/trigger/move": "Wander", + "hexcasting.action.hexal:wisp/consume": "Consume Wisp", + "hexcasting.action.hexal:wisp/seon/set": "Bind Wisp", + "hexcasting.action.hexal:wisp/seon/get": "Familiar's Reflection", + "hexcasting.action.hexal:wisp/transfer/allow": "Allow Transfer", + "hexcasting.action.hexal:wisp/transfer/disallow": "Disallow Transfer", + "hexcasting.action.hexal:wisp/transfer/others/allow": "Allow Transfer Others", + "hexcasting.action.hexal:wisp/transfer/others/disallow": "Disallow Transfer Others", + + "hexcasting.action.hexal:get_entity/wisp": "Entity Purification: Wisp", + "hexcasting.action.hexal:zone_entity/wisp": "Zone Distillation: Wisp", + "hexcasting.action.hexal:zone_entity/not_wisp": "Zone Distillation: Non-Wisp", + + "hexcasting.action.hexal:link": "Link", + "hexcasting.action.hexal:link/others": "Link Others", + "hexcasting.action.hexal:link/unlink": "Unlink", + "hexcasting.action.hexal:link/unlink/others": "Unlink Others", + "hexcasting.action.hexal:link/get": "Phonebook Purification", + "hexcasting.action.hexal:link/get_index": "Recognition Purification", + "hexcasting.action.hexal:link/num": "Popularity Reflection", + + "hexcasting.action.hexal:link/comm/send": "Send Iota", + "hexcasting.action.hexal:link/comm/read": "Recitation Reflection", + "hexcasting.action.hexal:link/comm/num": "Postmaster's Reflection", + "hexcasting.action.hexal:link/comm/clear": "Unclogging Gambit", + "hexcasting.action.hexal:link/comm/open_transmit": "Open Transmit", + "hexcasting.action.hexal:link/comm/close_transmit": "Close Transmit", + + "hexcasting.action.hexal:gate/make": "Gate's Reflection", + "hexcasting.action.hexal:gate/mark": "Gate's Opening", + "hexcasting.action.hexal:gate/unmark": "Gate's Dismissal", + "hexcasting.action.hexal:gate/mark/num/get": "Marked Purification", + "hexcasting.action.hexal:gate/mark/get": "Marked Distillation", + "hexcasting.action.hexal:gate/close": "Gate's Closing", + + "hexcasting.action.hexal:mote/storage/bind": "Bind Storage", + "hexcasting.action.hexal:mote/storage/bind/temp": "Bind Storage - Temporary", + "hexcasting.action.hexal:mote/contained_type/get": "Stocktake Reflection", + "hexcasting.action.hexal:mote/contained/get": "Stocktake Purification", + "hexcasting.action.hexal:mote/storage/remaining_capacity/get": "Capacity Reflection", + "hexcasting.action.hexal:mote/storage/contains": "Containment Distillation", + "hexcasting.action.hexal:mote/make": "Mediafy Item", + "hexcasting.action.hexal:mote/return": "Return Item", + "hexcasting.action.hexal:mote/count/get": "Weighing Purification", + "hexcasting.action.hexal:mote/combine": "Stacking Distillation", + "hexcasting.action.hexal:mote/combinable": "Stacking Distillation II", + "hexcasting.action.hexal:mote/split": "Splitting Gambit", + "hexcasting.action.hexal:mote/storage/get": "Depot Purification", + "hexcasting.action.hexal:mote/storage/set": "Depot Gambit", + "hexcasting.action.hexal:mote/craft": "Craft", + "hexcasting.action.hexal:mote/craft/preview": "Preview Craft", + "hexcasting.action.hexal:mote/villager/level/get": "Seniority Purification", + "hexcasting.action.hexal:mote/trade/get": "Offering Purification", + "hexcasting.action.hexal:mote/trade": "Trade", + "hexcasting.action.hexal:mote/use_on": "Use Item On", + + "hexcasting.action.hexal:tick": "Accelerate", + + + + "hexcasting.action.book.hexal:light_level": "Lamplighter's Prfn.", + + "hexcasting.action.book.hexal:running/sum": "Running Sum Prfn.", + "hexcasting.action.book.hexal:running/mul": "Running Product Prfn.", + + "hexcasting.action.book.hexal:get_entity/wisp": "Entity Prfn.: Wisp", + "hexcasting.action.book.hexal:zone_entity/wisp": "Zone Dstl.: Wisp", + "hexcasting.action.book.hexal:zone_entity/not_wisp": "Zone Dstl.: Non-Wisp", + + "hexcasting.action.book.hexal:mote/storage/bind/temp": "Bind Storage - Temp.", + + + + "hexal.entry.slipways": "Slipways", + "hexal.page.slipways": "I have heard tales of some geodes in which glowing portals called slipways lie. These slipways are regularly depicted with glowing sparks surrounding them that bear an incredible resemblance to the $(l:patterns/spells/wisps)$(thing)wisps/$ that I have heard tell of, which may be a connection to look into.", + + "hexal.entry.relay": "Relay", + "hexal.page.relay.0": "Often I wish to $(l:patterns/spells/links#hexal:link)$(action)link/$ together multiple $(l:patterns/spells/wisps)$(thing)wisps/$, so that they can share media and information over long distances. However running long chains of wisps to transfer these over great distances is inconvenient, and has great upkeep costs. To resolve this issue I have made Relays. Since they are solid blocks rather than media constructs themselves, they are able to maintain the links without any upkeep costs at all.", + "hexal.page.relay.1": "Any relays connected together will form a network, with any wisps connected to a relay network able to share media between each other as if they were directly connected. Further, any iota sent to one relay in the network is passed on to every other non-relay connected to the network. Relays have a range of 32 blocks (this means two relays can connect at a distance of 64 blocks). The colour of a network's links can be changed by right clicking on any relay with a colouriser.", + "hexal.page.relay.2": "Relays have no owner, so if you want your wisps to $(l:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)transfer media/$ with them you must specifically allow them to do so.", + + "hexal.entry.hexal_basics": "Hexal Basic Patterns", + "hexal.page.hexal_basics.current_tick": "Adds a number to the stack which seems to be related to how Nature represents time; If I cast the pattern, then cast the same pattern a second later, the number it adds has increased by 20.", + "hexal.page.hexal_basics.breath": "Removes a Living entity from the stack and returns how much breath it has left (i.e., how close it is to drowning).", + "hexal.page.hexal_basics.health": "Removes a Living entity from the stack and returns how much health it has left (i.e., how close it is to dying).", + "hexal.page.hexal_basics.armour": "Removes a Living entity from the stack and returns how much armour it has.", + "hexal.page.hexal_basics.toughness": "Removes a Living entity from the stack and returns how much toughness it has (another property of armour).", + "hexal.page.hexal_basics.light_level": "Removes a position vector from the stack and returns the light level at that position.", + + "hexal.entry.hexal_maths": "Hexal Maths", + "hexal.page.hexal_maths.factorial": "Takes a number from the stack and computes its factorial, for example inputting 4 would return 4*3*2*1=24.", + "hexal.page.hexal_maths.running/sum": "Takes a list from the stack and computes its running sum, for example inputting [1,2,5] would return [1,3,8].", + "hexal.page.hexal_maths.running/mul": "Takes a list from the stack and computes its running product, for example inputting [1,2,5] would return [1,2,10].", + + "hexal.entry.hexal_spell": "Hexal Spells", + "hexal.page.hexal_spell.smelt.0": "Remove a location, item entity, or mote from the stack, then either smelt the block at the location or smelt all the items in the item entity or mote.", + "hexal.page.hexal_spell.smelt.1": "Costs three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ per item smelted (i.e. three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ for smelting a block, 6 $(l:items/amethyst)$(item)Amethyst Dust/$ to smelt a stack of 8 items.)", + "hexal.page.hexal_spell.freeze": "Freezes the block at a block location. For example, turns water into ice, and ice into packed ice. Costs one $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.falling_block": "Remove a location from the stack, and force the block there to fall as if it were sand or gravel. Costs one and a half $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.place_type": "Accepts an item type or mote and a location, and attempts to place a block of that item type at that location. If a mote was passed it will instead place from the record referenced by that mote. Costs an eighth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.particles": "Accepts a location or a list of locations, and either creates a particle at the location, or creates lines of particles between the locations in the list. Costs two thousandths of an $(l:items/amethyst)$(item)Amethyst Dust/$ per location.", + + "hexal.entry.fabric_only_hexal": "Fabric-Only Hexal Spells", + "hexal.page.fabric_only_hexal.interop/fabric_only/phase_block": "Takes a position and a number, and phases the block at that position out for that many seconds. Costs one ten-thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$ times the square of the time to phase out for.", + + "hexal.entry.wisps": "Wisps", + "hexal.page.wisps.0": "I have discovered a way to create constructs from the media itself, visible to others and able to move and act somewhat on their own. They are able to cast hexes in my place, similar to how a $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ evaluates patterns. They do take some of my attention to operate this however, and if too many try and execute at once I will only be able to run some of them, leaving the rest for the next instant.", + "hexal.page.wisps.1": "When they are created I assign them a 'reservoir' of media that they have access to, which is taken from me and used to form the wisp. A wisp uses up part of its reservoir simply existing, and when it evaluates the pattern list it is carrying any costs incurred are removed from its reservoir. All wisps seem to take three $(l:items/amethyst)$(item)Amethyst Dust/$ to summon, in addition to whatever media is used for their reservoir.", + "hexal.page.wisps.2": "Wisps are punished severely for attempting to hold onto another caster's truename, incurring a 20 times increase in the wisp's media upkeep per truename iota in any of the wisp's iota storage mechanisms.", + "hexal.page.wisps.wisp/summon/projectile.0": "This wisp is summoned and launched like an arrow, casting its hex on whatever it hits. The initial stack when it executes will be a reference to itself, then a reference to what it hit.", + "hexal.page.wisps.wisp/summon/projectile.1": "This could be a block position or an entity reference. The first vector accepted is the location the wisp will be summoned, while the direction of the second is the direction the wisp will be launched, and the second's magnitude seems to affect the wisp's velocity. The cost of the spell increases with the squared magnitude of velocity. The number accepted determines the wisp's reservoir in $(l:items/amethyst)$(item)Amethyst Dust/$. It loses approximately 3 tenths of an $(l:items/amethyst)$(item)Amethyst Dust/$ of media every second once summoned, and has a range of influence of 4 blocks.", + "hexal.page.wisps.wisp/summon/ticking.0": "Similar to Summon Projectile Wisp, but with only one vector input for the position to summon the wisp. Cyclic wisps are unmoving once summoned, instead executing their hex up to 20 times each second.", + "hexal.page.wisps.wisp/summon/ticking.1": "The first time it casts the stack will start with a reference to itself, from which point it will always start with the stack and ravenmind in the state they finished on the last cast. This wisp has a less stable form making it lose significantly more media every second, losing approximately seven tenths of an $(l:items/amethyst)$(item)Amethyst Dust/$ per second once summoned. It has a range of influence of 8 blocks.", + "hexal.page.wisps.wisp/self": "Add a reference to the casting wisp to the stack. This must be cast by a wisp; trying to cast it through a staff will fail rather spectacularly.", + "hexal.page.wisps.wisp/media": "Add the amount of media in the wisp's reservoir to the stack. This must be cast by a wisp; trying to cast it through a staff will fail rather spectacularly.", + "hexal.page.wisps.wisp/hex": "Removes a reference to a wisp from the stack, and replaces it with the wisp's contained hex. Must be a wisp you summoned, or a wisp that has $(l:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)allowed/$ transfer with the caster or caster's owner.", + "hexal.page.wisps.wisp/owner": "Removes a reference to a wisp and an entity from the stack, and returns true if that entity owns that wisp, and false otherwise.", + "hexal.page.wisps.wisp/move/target/set": "Removes a position vector from the stack; The Cyclic Wisp that executed this pattern will move in a straight line towards that position (colliding with terrain in its path) until it reaches it.", + "hexal.page.wisps.wisp/move/target/get": "Adds to the stack the position vector that the executing Cyclic Wisp is currently moving towards.", + "hexal.page.wisps.wisp/move/speed/set": "Removes a number from the stack, and sets the executing Cyclic Wisp's maximum speed to that number.", + "hexal.page.wisps.wisp/move/speed/get": "Gets the executing Cyclic Wisp's current maximum speed.", + "hexal.page.wisps.wisp/transfer/allow": "When two wisps are $(l:patterns/spells/links)$(thing)linked/$ together, they transfer media between each other until they are balanced. By default this only happens between wisps with the same owner. This takes an index, and explicitly allows the wisp to exchange media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/disallow": "Correspondingly, this takes an index and disallows the wisp from exchanging media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/others/allow": "This takes a wisp that you own and an index, and allows the wisp to exchange media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/others/disallow": "This takes a wisp that you own and an index, and disallows the wisp from exchanging media with the linkable at that index.", + "hexal.page.wisps.get_entity/wisp": "Transform the position on the stack into the wisp at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + "hexal.page.wisps.zone_entity/wisp": "Take a position and maximum distance on the stack, and combine them into a list of wisps near the position.", + "hexal.page.wisps.zone_entity/not_wisp": "Take a position and maximum distance on the stack, and combine them into a list of non-wisp entities near the position.", + "hexal.page.wisps.wisp/trigger/tick": "Removes an integer from the stack, then delays the wisp's next cast until at least that many twentieth's of a second have passed. This and other triggers like it will halve the wisp's upkeep cost while it isn't casting.", + "hexal.page.wisps.wisp/trigger/comm": "The wisp's next cast will not occur until it has received at least one $(l:patterns/spells/links#hexal:link/comm/send)$(action)communication/$.", + "hexal.page.wisps.wisp/trigger/move": "The wisp's next cast will not occur until it has reached the position it is $(l:patterns/spells/wisps#hexal:wisp/move/target/set)$(action)navigating/$ towards.", + + "hexal.entry.links": "Links", + "hexal.page.links.0": "These patterns outline a system that I have found for communicating information from one $(l:patterns/spells/wisps)$(thing)wisp/$ to another, among other things. There are a number of patterns related to creating these links, and a number of patterns related to sending and receiving iotas over a link once it is created. A wisp can have any number of links active, with each costing a negligible amount of media to maintain each twentieth of a second.", + "hexal.page.links.1": "The links of a given linkable are indexed by the order they are created, with this number used by a number of patterns. \"Linkable\" is not its own type, but a shorthand for any type that can be coerced into a linkable (e.g. Entity -> Linkable entities, Vec -> Linkable blocks, ...). Links can span up to double the sum of the two linkable's ranges. To connect linkables over truly vast distances I would do well to look into building some $(l:items/relay)$(item)Relays/$.", + "hexal.page.links.link": "Links the caster to the entity removed from the stack, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/others": "May be evaluated by any casting instrument. Links two entities, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/unlink": "Removes the link at the given index from the caster's links. This costs two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/unlink/others": "Takes two linkables and unlinks them if they are linked. This costs two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/get": "Removes an index from the stack, and adds the entity connected to the link at that index to the stack.", + "hexal.page.links.link/get_index": "Removes an entity from the stack, and adds the index to the link to that entity to the stack (or -1 if the caster isn't linked to that entity).", + "hexal.page.links.link/num": "Adds the number of links to the wisp to the stack.", + "hexal.page.links.link/comm/send": "Removes an iota from the stack, then removes an index from the stack and sends the iota along the link at the given index. This costs one hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/comm/read": "When something receives an iota along a link it is added to a queue. This pattern adds the first iota in the queue to the stack, removing it from the queue.", + "hexal.page.links.link/comm/num": "Adds to the stack the number of unread iota in the caster's received iota queue.", + "hexal.page.links.link/comm/clear": "Removes all unread iota from the caster's received iota queue.", + "hexal.page.links.link/comm/open_transmit": "Similar to $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, until drawing a $(l:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ all patterns I draw are sent along the link whose index is at the top of the stack.", + "hexal.page.links.link/comm/close_transmit": "When drawn after $(l:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ I stop transmitting drawn patterns. If either $(l:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ or $(l:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ are executed by an intermediary caster such as a wisp, they will mishap.", + + "hexal.entry.tick": "Accelerate", + "hexal.page.tick.tick.0": "Causes the block at the passed vector to perform its normal actions faster in the instant that this spell is cast.", + "hexal.page.tick.tick.1": "Casting it costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$, plus a thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$ for each time it has previously been cast on that block in this hex.", + + "hexal.entry.gates": "Gates", + "hexal.page.gates.0": "Gates are the latest in my long line of experimentation with breaking space to connect distant points and allow instantaneous travel. What gates allow me to do, that none of my previous attempts have succeeded at, is to do it $(o)efficiently$(). There are three varieties of gates that I have learned how to construct, all of which take a large amount of media to burn into reality, but are significantly cheaper to operate afterwards.", + "hexal.page.gates.1": "Location Anchored Gates are bound to a specific position in the world, and send all that move through them to that position. Entity Anchored Gates are bound to a being that inhabits the world, and send those moving through them to the position of that being (plus an offset, chosen when burning in the gate).", + "hexal.page.gates.2": "Drifting Gates are not bound at all, and can be used to send entities anywhere, however they lose efficiency as a result, and can only send entities to places that are in my ambit. When a gate is burnt in I will obtain on my stack a reference to that gate. With that gate reference, I can mark entities with that gate, and I can close the gate, which sends all entities marked with that gate to the gate's destination. Note that closing a gate doesn't use it up; once I have acquired a gate iota I can use it in perpetuity.", + "hexal.page.gates.gate/make": "Adds a new gate iota to the stack. Any copy of this iota will point to the same numbered gate. Costs 32 $(l:items/amethyst)$(item)Charged Amethyst/$. If passed null, makes a Drifting Gate. If passed a vector, makes a Location Anchored Gate, If passed a vector and an entity, makes an Entity Anchored Gate.", + "hexal.page.gates.gate/mark": "Consumes a gate iota and an entity. Marks that entity to be teleported the next time that gate is closed. Costs one twentieth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.gates.gate/unmark": "Consumes a gate iota and an entity. Unmarks that entity so that if it was marked with $(l:patterns/great_spells/gates#hexal:gate/mark)$(action) Gate's Opening/$ it will no longer be teleported the next time that gate is closed.", + "hexal.page.gates.gate/mark/num/get": "Consumes a gate iota, returns how many entities are marked by that gate.", + "hexal.page.gates.gate/mark/get": "Consumes a gate iota and an entity, returns whether that entity is marked by that gate.", + "hexal.page.gates.gate/close": "Consumes a non-drifing gate iota, or a drifting gate iota and a position. Transports all the entities marked with the passed gate to the stored or given position, as relevant. Costs half an $(l:items/amethyst)$(item)Amethyst Shard/$, plus an $(l:items/amethyst)$(item)Amethyst Dust/$ per metre transported per entity, if the gate was drifting.", + + "hexal.entry.motes": "Motes", + "hexal.page.motes.explanation.0": "This entry deals with bringing items into the media, making them referencable, countable, bringing order to them and to me and to my mind and-. A mediafied item iota (known as a mote) that has been added to the stack references a specific mote record in a Mote Nexus, since without something holding the thought-pattern of the item to this world it will wither away -away like my cognition is flensing-.", + "hexal.page.motes.explanation.1": "Any duplicate of that first mote iota referencing a record references the same record, and any change to one affects them all for they all point to the one and only in the media. Splitting and merging and crafting and trading all affect all affect all-.", + "hexal.page.motes.explanation.2": "A Mote Nexus is limited in some ways, but only some. It can contain 1023 different records, but each record can store items innumerable. I have yet to find any limit, I can merge and merge and merge forever and the record keeps growing and growing and growing...", + "hexal.page.motes.mediafed_storage_recipe": "The Mote Nexus is built from the mind of a cartographer endlessly mapping the contents of the $(item)Shulker Box/$ that it has been flayed into.", + "hexal.page.motes.mote/storage/bind": "Target a Mote Nexus block in the world and bind yourself to it, meaning all items you mediafy will be added to that nexus' capacity. Targeting any other block will unbind you from your currently bound nexus. Costs 32 $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/storage/bind/temp": "Target a Mote Nexus block in the world and bind to it for the remainder of this cast, temporarily overriding your primary binding. Costs one thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/contained_type/get": "Gets all the types of motes contained in the currently bound Mote Nexus.", + "hexal.page.motes.mote/contained/get": "Gets all the mote records from the currently bound Mote Nexus that match the passed item type or could be combined with the passed mote.", + "hexal.page.motes.mote/storage/remaining_capacity/get": "Gets the remaining capacity of the bound Mote Nexus.", + "hexal.page.motes.mote/storage/contains": "Returns true if the Mote Nexus at the given position contains a mote of the given type, or that would stack with the given mote, and false otherwise.", + "hexal.page.motes.mote/make": "Convert an item in the world (either an item entity or an item frame) into a mote on your stack. If passed an existing mote instead adds the items from the entity to the mote. Mediafying an item costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/return": "Returns all the items from a mote to the world at the location of your choosing. If passed a number returns at most that many items. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/count/get": "Accepts a mote and returns the number of items in the record referenced by that mote.", + "hexal.page.motes.mote/combine": "Combines two motes into one, merging the mote records they point to. Any pointers to the second mote will become null, any pointers to the first will remain. This can make motes holding many more items than I could carry in a stack naturally!", + "hexal.page.motes.mote/combinable": "Returns true if the first mote can be combined with the items in the second argument (which can be a mote, item stack, item entity, or item frame), and false otherwise.", + "hexal.page.motes.mote/split": "Splits the specified number of items off of the passed mote, creating a new mote pointing to a new mote record.", + "hexal.page.motes.mote/storage/get": "Get the position of the Mote Nexus that contains the passed mote.", + "hexal.page.motes.mote/storage/set": "Move the record referenced by the passed mote to the Mote Nexus at the passed position. This returns a new mote pointing to that record, and invalidates all previous motes pointing to that record.", + "hexal.page.motes.mote/craft.0": "Takes a mote, list of motes, or list of list of motes. returns a list containing the results of crafting with those items. For example, the input Stone x128 would return [Stone Button x128].", + "hexal.page.motes.mote/craft.1": "For more complex crafts, inserting nulls to space items properly will be required. A diamond pickaxe for example would require [[Diamond x2, Diamond x2, Diamond x2], [null, Stick x2], [null, Stick x2]] to get [Diamond Pickaxe x2]. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/craft/preview": "Takes the same input as $(l:patterns/spells/motes#hexal:mote/craft)$(action)Craft/$, except it can take Item Stack Iotas as well as motes. Returns a list of Item Stack Iotas representing what the results of $(l:patterns/spells/motes#hexal:mote/craft)$(action)Craft/$ would have been with motes containing those inputs.", + "hexal.page.motes.mote/villager/level/get": "Accepts a villager, returns a number representing that villager's seniority and skill at their craft.", + "hexal.page.motes.mote/trade/get.0": "Accepts a villager and returns all of the trades that villager is offering. This is a list of lists of lists. Each trade comprises two lists, the cost, and the returned items. The returned items is a list containing the type of item, and the number of items.", + "hexal.page.motes.mote/trade/get.1": "The cost is a list of one or two pairs of item and number of items required by the villager for the trade to be accepted. For example, one trade offer could be [[[Emerald, 1]], [Redstone, 1]].", + "hexal.page.motes.mote/trade.0": "Accepts a villager, a list of motes to trade with to villager, and optionally an int for which of that villager's trades to attempt. (int? above means that you can pass 2 or 3 arguments, the optional 3rd being an int).", + "hexal.page.motes.mote/trade.1": "If no trade number was passed, it will try each of the villager's trade until finding one that accepts the passed items. If a trade number was passed it will skip straight to using that trade. It will then repeat that trade for as long as it has enough items and the villager is still willing to trade. It will then return the items the villager traded away as a mote to the stack.", + "hexal.page.motes.mote/trade.2": "The villager will find this trade to be a learnable experience as it would if trading with you directly, and will improve its skills and trade offerings commensurately. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/use_on": "Accepts a mote, and either an entity, or a target block and a normal vector. Uses the item on the entity/block. The mote must either only have one item in it, or the items contained must be extremely simple (no NBT data).", + + "hexal.entry.great_wisps": "Great Wisp Spells", + "hexal.page.great_wisps.wisp/consume.0": "Remove a wisp from the stack, and disassemble the wisp. The patterns contained are lost, but the media that it contained can be repurposed if this spell is cast by another wisp.", + "hexal.page.great_wisps.wisp/consume.1": "Costs either an $(l:items/amethyst)$(item)Amethyst Shard/$ if the wisp is owned by you or has $(l:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)allowed/$ transfer with the caster or caster's owner, or half again as much media as the consumed wisp contains if the wisp is owned by another and has now allowed it. Repurposing the media is not completely efficient, losing one twentieth of the consumed wisp's reserve in transfer.", + "hexal.page.great_wisps.wisp/seon/set": "Bind one of my wisps closer to me; I may only have one bound wisp at a time, but whichever wisp is bound costs significantly less upkeep and increased range.", + "hexal.page.great_wisps.wisp/seon/get": "Returns my currently bound wisp. A new wisp can only be bound when this returns null. (This is not a great spell, I have simply placed it here for convenience.)", + + "hexal.entry.types": "Types", + "hexal.page.types.type/iota": "Remove an iota from the stack, and adds the type of that iota to the stack.", + "hexal.page.types.type/entity": "Remove an entity from the stack, and adds the type of the entity at that location to the stack.", + "hexal.page.types.type/block_item": "Remove a location, $(l:hexal.entry.motes)$(item)mote/$, item entity, or item frame from the stack, and adds the type of the block at that location, or type of that item, to the stack (e.g. Grass, Stone, Stick, etc.).", + "hexal.page.types.type/item_held": "Adds the type of the item in the caster's offhand to the stack if there is one present, or the type of the casting hand otherwise.", + + "hexal.page.types.get_entity/type": "Remove an entity type and a position from the stack, and returns an entity of that type at that position if one exists.", + "hexal.page.types.zone_entity/type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities of that type within that radius of that position.", + "hexal.page.types.zone_entity/not_type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities not of that type within that radius of that position", + + + "hexal.entry.everbook": "Everbook", + "hexal.page.everbook.0": "Your Everbook is a strange space that your broken mind can now reach. There are many yous that seem to share this record, worlds and worlds of progress, beginning again and again. Your Everbook can store patterns paired with iotas like an $(l:greatwork/akashiclib)$(item)Akashic Record/$, though the fragile nature of your mind these days makes it best to route all access to your Everbook through an $(l:greatwork/akashiclib)$(item)Akashic Record/$. Any world that you reach enlightenment in, you will have access to the entries you add to it now.", + "hexal.page.everbook.everbook/read": "Takes the position of an $(l:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and retrieves the iota at that key from your Everbook, storing it in the given $(l:greatwork/akashiclib)$(item)Akashic Record/$ if able.", + "hexal.page.everbook.everbook/write": "Takes the position of an $(l:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and stores the iota in that record at that key to your Everbook at the same key.", + "hexal.page.everbook.everbook/delete": "Takes a pattern and removes the entry with that pattern key from your Everbook.", + "hexal.page.everbook.everbook/toggle_macro.0": "Takes a pattern and marks that entry of your Everbook as a Pattern that when drawn by your hand will be treated as any other of Nature's patterns.", + "hexal.page.everbook.everbook/toggle_macro.1": "When you draw the key of an Everbook entry that has been marked as a Pattern, if that entry is a list Nature will execute each element of the list as it would with $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$, though it does not use up an evaluation. Attempting to mark an entry as a Pattern if it is non-existent or infinitely recursive will fail.", + + "hexal.entry.everbook_entries": "Everbook Entries", + "hexal.page.everbook_entries.0": "Every page in this entry displays the pattern key for one of the entries of your $(l:patterns/everbook)$(action)Everbook/$.", + + "hexal.everbook_pattern_entry.header": "Stored Key: %d", + "hexal.everbook_pattern_entry.macro_header": "Macro Key: %d", + + + + "_comment": "Config Entries", + "text.autoconfig.hexal.title": "Hexal Configs", + "text.autoconfig.hexal.category.common": "Common", + "text.autoconfig.hexal.category.client": "Client", + "text.autoconfig.hexal.category.server": "Server", + + "text.autoconfig.hexal.option.server.terrainGeneration": "Terrain Generation", + "text.autoconfig.hexal.option.server.generateSlipwayGeodes": "Should generate Slipway Geodes?", + + "text.autoconfig.hexal.option.server.miscSpells": "Miscellaneous Spells", + "text.autoconfig.hexal.option.server.miscSpells.fallingBlockCost": "Falling Block Cost", + "text.autoconfig.hexal.option.server.miscSpells.freezeCost": "Freeze Cost", + "text.autoconfig.hexal.option.server.miscSpells.particlesCost": "Particles Cost per Vector", + "text.autoconfig.hexal.option.server.miscSpells.placeTypeCost": "Place Type Cost", + "text.autoconfig.hexal.option.server.miscSpells.smeltCost": "Smelt Cost per Item", + + "text.autoconfig.hexal.option.server.wispSpells": "Wisp Spells", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost": "Move Speed Set Base Cost", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[0]": "Cost to increase the movement speed of a wisp by 1.", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[1]": "This is the base cost, with greater increases being quadratically based on this.", + "text.autoconfig.hexal.option.server.wispSpells.summonTickingWispCost": "Summon Cyclic Wisp Cost", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispCost": "Summon Projectile Wisp Cost per Velocity Squared", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispMinCost": "Summon Cyclic Wisp Minimum Cost", + + "text.autoconfig.hexal.option.server.wispUpkeep": "Wisp Upkeep", + "text.autoconfig.hexal.option.server.wispUpkeep.tickingWispUpkeepPerTick": "Cyclic Wisp Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.projectileWispUpkeepPerTick": "Projectile Wisp Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount": "Untriggered Wisp Upkeep Discount", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[0]": "The upkeep cost of untriggered cyclic wisps is multiplied by this number.", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[1]": "Bounded from 0.0 to 1.0.", + "text.autoconfig.hexal.option.server.wispUpkeep.linkUpkeepPerTick": "Link Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor": "Bound Wisp Discount Factor", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[0]": "The upkeep cost of bound wisps is divided by this number.", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[1]": "Bounded from 2.0 to 200.0.", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor": "Storing Player Cost Scale Factor", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[0]": "The multiplicative cost increase of wisps containing an iota of another player.", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[1]": "Bounded from 1.0 to 200.0.", + + "text.autoconfig.hexal.option.server.linkSpells": "Link Spells", + "text.autoconfig.hexal.option.server.linkSpells.linkCost": "Link Cost", + "text.autoconfig.hexal.option.server.linkSpells.sendIotaCost": "Send Iota Cost", + "text.autoconfig.hexal.option.server.linkSpells.unlinkCost": "Unlink Cost", + + "text.autoconfig.hexal.option.server.gateSpells": "Gate Spells", + "text.autoconfig.hexal.option.server.gateSpells.makeGateCost": "Make Gate Cost", + "text.autoconfig.hexal.option.server.gateSpells.markGateCost": "Mark Gate Cost", + "text.autoconfig.hexal.option.server.gateSpells.closeGateCost": "Close Gate Cost", + + "text.autoconfig.hexal.option.server.itemSpells": "Item Spells", + "text.autoconfig.hexal.option.server.itemSpells.bindStorageCost": "Bind Storage Cost", + "text.autoconfig.hexal.option.server.itemSpells.bindTemporaryStorageCost": "Bind Temporary Storage Cost", + "text.autoconfig.hexal.option.server.itemSpells.makeItemCost": "Make Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.returnItemCost": "Return Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.craftItemCost": "Craft Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.tradeItemCost": "Trade Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned": "Maximum Items Returned", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[0]": "Maximum number of items that can be returned by Return Item.", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[1]": "Bounded from 640 to 64,000.", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage": "Maximum Num. Records in Mote Nexus", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[0]": "Maximum number of records that can be stored in a Mote Nexus.", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[1]": "Bounded from 128 to 16,384.", + + + "text.autoconfig.hexal.option.server.greatSpells": "Great Spells", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost": "Consume Own Wisp Cost", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[0]": "Cost to consume a wisp you own,", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[1]": "or that doesn't fight back for some other reason.", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia": "Consume Other's Wisp Cost per Media", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[0]": "Cost to consume a wisp that fights back, this number is multiplied by", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[1]": "the media possessed by the wisp you are attempting to consume.", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[2]": "Bounded from 1.0 to 20.0.", + "text.autoconfig.hexal.option.server.greatSpells.seonWispSetCost": "Bind Wisp Cost", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost": "Tick Constant Cost", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost.@Tooltip": "Constant cost to tick a block. Always applies.", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked": "Tick Cost per Time Ticked", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[0]": "Cost to tick a block per time that block has already been ticked.", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[1]": "Added to the constant cost above.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb": "Tick Inverse Probability of Random Ticking", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[0]": "The inverse probability of tick randomly ticking a block.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[1]": "Higher numbers make random ticks less likely, lower numbers make them more likely.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[2]": "Bound from 600 to 2100." +} diff --git a/projects/1.20-fabric/assets/hexal/hexal/packer-policy.json b/projects/1.20-fabric/assets/hexal/hexal/packer-policy.json new file mode 100644 index 000000000000..6120aa00cee9 --- /dev/null +++ b/projects/1.20-fabric/assets/hexal/hexal/packer-policy.json @@ -0,0 +1,6 @@ +[ + { + "type": "indirect", + "source": "projects/1.20/assets/hexal/hexal" + } +] \ No newline at end of file diff --git a/projects/1.20-fabric/assets/moreiotas/moreiotas/README.md b/projects/1.20-fabric/assets/moreiotas/moreiotas/README.md new file mode 100644 index 000000000000..9f3a6e2c4891 --- /dev/null +++ b/projects/1.20-fabric/assets/moreiotas/moreiotas/README.md @@ -0,0 +1 @@ +[见主文档](/project/1.20/assets/moreiotas/moreiotas) \ No newline at end of file diff --git a/projects/1.20-fabric/assets/moreiotas/moreiotas/lang/en_us.json b/projects/1.20-fabric/assets/moreiotas/moreiotas/lang/en_us.json new file mode 100644 index 000000000000..80ba96992172 --- /dev/null +++ b/projects/1.20-fabric/assets/moreiotas/moreiotas/lang/en_us.json @@ -0,0 +1,171 @@ +{ + "hexcasting.mishap.invalid_value.matrix.nonsingular": "a non-singular matrix.", + + "hexcasting.iota.moreiotas:string": "String", + "hexcasting.iota.moreiotas:matrix": "Matrix", + "hexcasting.iota.moreiotas:iota_type": "Iota Type", + "hexcasting.iota.moreiotas:entity_type": "Entity Type", + "hexcasting.iota.moreiotas:item_type": "Item Type", + "hexcasting.iota.moreiotas:item_stack": "Item Stack", + + "moreiotas.spelldata.entity_type": "Type", + + "moreiotas.tooltip.stack.empty": "Empty Stack", + "moreiotas.tooltip.stack.format": "%dx %s", + + "moreiotas.tooltip.string": "\"%s\"", + + "hexcasting.action.moreiotas:string/empty": "Blank Reflection", + "hexcasting.action.moreiotas:string/space": "Spacing Reflection", + "hexcasting.action.moreiotas:string/comma": "Comma Reflection", + "hexcasting.action.moreiotas:string/newline": "Breaking Reflection", + "hexcasting.action.moreiotas:string/block/get": "Reader's Purification", + "hexcasting.action.moreiotas:string/block/set": "Write", + "hexcasting.action.moreiotas:string/chat/caster": "Whisper Reflection", + "hexcasting.action.moreiotas:string/chat/all": "Listener's Reflection", + "hexcasting.action.moreiotas:string/chat/prefix/get": "Sifter's Reflection", + "hexcasting.action.moreiotas:string/chat/prefix/set": "Sifter's Gambit", + "hexcasting.action.moreiotas:string/iota": "Scrivener's Purification", + "hexcasting.action.moreiotas:string/action": "Patternmaster's Purification", + "hexcasting.action.moreiotas:string/name/get": "Moniker Purification", + "hexcasting.action.moreiotas:string/name/set": "Name", + "hexcasting.action.moreiotas:string/add": "Concatenation Distillation", + "hexcasting.action.moreiotas:string/split": "Separation Distillation", + "hexcasting.action.moreiotas:string/parse": "Input Purification", + "hexcasting.action.moreiotas:string/find": "Discoverer's Distillation", + "hexcasting.action.moreiotas:string/sub": "Winnowing Distillation", + "hexcasting.action.moreiotas:string/case": "Case Distillation", + + "hexcasting.action.moreiotas:altadd": "Additive Distillation II", + "hexcasting.action.moreiotas:altmul": "Multiplicative Distillation II", + "hexcasting.action.moreiotas:altdiv": "Division Distillation II", + "hexcasting.action.moreiotas:altpow": "Power Distillation II", + + "hexcasting.action.moreiotas:matrix/make": "Transformation Purification", + "hexcasting.action.moreiotas:matrix/unmake": "Restoration Purification", + "hexcasting.action.moreiotas:matrix/unmake/direct": "Restoration Purification II", + "hexcasting.action.moreiotas:matrix/identity": "Identity Purification", + "hexcasting.action.moreiotas:matrix/zero": "Zero Distillation", + "hexcasting.action.moreiotas:matrix/rotation": "Rotation Distillation", + "hexcasting.action.moreiotas:matrix/transpose": "Transpose Purification", + "hexcasting.action.moreiotas:matrix/inverse": "Inverse Purification", + "hexcasting.action.moreiotas:matrix/determinant": "Determinant Purification", + "hexcasting.action.moreiotas:matrix/concat/vert": "Tower Distillation", + "hexcasting.action.moreiotas:matrix/concat/hori": "Sprawling Distillation", + "hexcasting.action.moreiotas:matrix/split/vert": "Toppling Gambit", + "hexcasting.action.moreiotas:matrix/split/hori": "Mitosis Gambit", + + "hexcasting.action.moreiotas:type/iota": "Classifier's Purification", + "hexcasting.action.moreiotas:type/entity": "Physician's Purification", + "hexcasting.action.moreiotas:type/to_item": "Sorter's Purification", + "hexcasting.action.moreiotas:type/item_held": "Sorter's Reflection", + + "hexcasting.action.moreiotas:get_entity/type": "Entity Distillation: Type", + "hexcasting.action.moreiotas:zone_entity/type": "Zone Exaltation: Type", + "hexcasting.action.moreiotas:zone_entity/not_type": "Zone Exaltation: Not-Type", + + + "hexcasting.action.moreiotas:item/main_hand": "Duelist's Purification", + "hexcasting.action.moreiotas:item/off_hand": "Shieldbearer's Purification", + "hexcasting.action.moreiotas:item/inventory/stacks": "Hoarder's Distillation", + "hexcasting.action.moreiotas:item/inventory/items": "Collector's Distillation", + "hexcasting.action.moreiotas:item/prop/size/set": "Treasurer's Distillation", + + "hexcasting.action.book.moreiotas:string/action": "Patternmaster's Prfct.", + + "hexcasting.action.book.moreiotas:altadd": "Additive Dstl. II", + "hexcasting.action.book.moreiotas:altmul": "Multiplicative Dstl. II", + "hexcasting.action.book.moreiotas:altdiv": "Division Dstl. II", + + "hexcasting.action.book.moreiotas:matrix/make": "Transformation Prfct.", + "hexcasting.action.book.moreiotas:matrix/unmake": "Restoration Prfct.", + "hexcasting.action.book.moreiotas:matrix/unmake/direct": "Restoration Prfct. II", + + "moreiotas.entry.strings": "Strings", + "moreiotas.page.strings.string/empty": "Add an empty string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/space": "Add a blank space string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/comma": "Add a comma string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/newline": "Add a string to the stack representing a break between lines, useful for combining with other strings.", + "moreiotas.page.strings.string/block/get": "Removes a vector from the stack. If that vector is pointing at a sign or lectern, it returns that sign or lectern's text to the stack. Otherwise, it returns null.", + "moreiotas.page.strings.string/block/set": "Removes a vector and a string from the stack. If that vector is pointing at a sign or lectern, it writes that string to that sign or lectern. Costs a hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "moreiotas.page.strings.string/chat/caster": "Adds the last message the caster sent to the stack as a string.", + "moreiotas.page.strings.string/chat/all": "Adds the last message anyone sent to the stack as a string.", + "moreiotas.page.strings.string/chat/prefix/set": "Accepts a string; All future chat messages starting with that string won't be seen by others, and only messages prefixed with that string can be read by $(l:patterns/strings#moreiotas:string/chat/caster)$(action)Whisper Reflection/$.", + "moreiotas.page.strings.string/chat/prefix/get": "Returns the last string you passed to $(l:patterns/strings#moreiotas:string/chat/prefix/set)$(action)Sifter's Gambit/$.", + "moreiotas.page.strings.string/iota": "Converts the iota on top of the stack into a string.", + "moreiotas.page.strings.string/action": "Converts the pattern on top of the stack into the string for that pattern's name. If there is no action associated with that pattern, or if the associated pattern is a Great Spell, it returns null.", + "moreiotas.page.strings.string/name/get": "Takes an entity and returns that entity's name. If it is an item entity, return the item's name.", + "moreiotas.page.strings.string/name/set": "Takes a string and an entity, and sets that entities name to the given string. If the entity is an item entity, also set the item's name. Costs a hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "moreiotas.page.strings.string/add": "Removes the top two strings from the stack and combines them together.", + "moreiotas.page.strings.string/split": "Removes the top two strings from the stack and splits the first string, using the second string as the delimiter and returning as a list.", + "moreiotas.page.strings.string/parse": "Removes a string from the top of the stack and returns the number that string parses as (or null if it doesn't parse).", + "moreiotas.page.strings.string/find": "Removes two strings from the top of the stack, and returns the first index of the first string where the second string is a substring.", + "moreiotas.page.strings.string/sub": "Removes a string and two positive integers from the top of the stack, and returns the substring from the first to the second (inclusive first, exclusive second).", + "moreiotas.page.strings.string/len": "Removes a string and returns its length.", + "moreiotas.page.strings.string/case": "Removes a string and a bool or null. If it was true, return the string in upper case. If false, lowercase. If null, toggle each character's case.", + + + + + "moreiotas.entry.item_iotas": "Item Iotas", + "moreiotas.page.item_iotas.0": "I have discovered two additional types of iotas I can manipulate.$(br2) Item Type Iotas describe a singular item stripped of its properties, such as damage or enchantments.$(br2) Item Stack Iotas describe a stack of items as they might appear in my inventory, amount, custom names, enchantments, and all.", + "moreiotas.page.item_iotas.1": "It would also seem Item Stack iotas referring to Foci containing other Item Stack iotas are somewhat faulty. A limit to the depth of my thought perhaps.", + + + "moreiotas.entry.matrices": "Matrices", + "moreiotas.page.matrices.0": "Matrices are a helpful tool for manipulating vectors to do as I wish, able to represent any linear transformation that can be applied to a vector. Of note with these patterns is that many are forgiving with their inputs, accepting in place of matrices things that can be easily mapped to matrices, namely numbers and vectors.", + "moreiotas.page.matrices.1": "For example, attempting to multiply a 3x3 matrix with a vector, rather than mishapping, will return a new vector. For more information on how to make use of matrices to their fullest potential, the below is a helpful resource.", + "moreiotas.page.matrices.1.link_text": "3blue1brown", + "moreiotas.page.matrices.matrix/make.0": "Converts the iota on top of the stack into a matrix. This iota can be a number, vector, or list.", + "moreiotas.page.matrices.matrix/make.1": "If it is a number, it becomes a 1x1 matrix. If it's a vector, it becomes a 3x1 matrix. If it's a list, it must be a list of purely numbers, purely vectors, or purely lists of numbers (each of which must be the same length). If it's a list of numbers it'll be 1 by n, if it's a list of vectors it'll be 3 by n, and if it's a list of lists it'll be n by m, where n is the inner list length and m is the outer list length.", + "moreiotas.page.matrices.matrix/unmake.0": "Converts the iota on top of the stack back from a matrix into a number, vector, or list depending on the vector's size.", + "moreiotas.page.matrices.matrix/unmake.1": "A 1x1 matrix will become a number. A 1x3 or 3x1 matrix will become a vector. A 3 by n or n by 3 matrix will become a list of vectors, and any matrix not covered by the previous will become a list of lists of numbers, with each inner list being one column of the matrix.", + "moreiotas.page.matrices.matrix/unmake/direct": "As $(l:patterns/matrices#moreiotas:matrix/unmake)$(action)Restoration Purification/$, except it always returns a list of lists of numbers.", + "moreiotas.page.matrices.matrix/identity": "Accepts a positive integer n, and returns an n by n matrix with 1 along the diagonal and 0 elsewhere.", + "moreiotas.page.matrices.matrix/zero": "Accepts positive integers n and m, and returns an n by m matrix of zeros.", + "moreiotas.page.matrices.matrix/rotation": "Accepts a vec v and number θ, and returns a matrix representing rotating by θ radians around v.", + "moreiotas.page.matrices.matrix/add": "Adds two matrices together; they must have the same number of columns and rows.", + "moreiotas.page.matrices.matrix/mul": "Multiplies the first n by m by with an m by p matrix to get an n by p matrix.", + "moreiotas.page.matrices.matrix/div": "Divides the first n by m matrix with an m by m matrix to get an n by m matrix.", + "moreiotas.page.matrices.matrix/pow": "Accepts a square matrix and an integer, and raises the matrix to the power of the integer.", + "moreiotas.page.matrices.matrix/mul/elem": "Multiplies the first n by m matrix elementwise with another n by m matrix.", + "moreiotas.page.matrices.matrix/div/elem": "Divides the first n by m matrix elementwise by another n by m matrix.", + "moreiotas.page.matrices.matrix/pow/elem": "Raises the first n by m matrix elementwise to the power of another n by m matrix.", + "moreiotas.page.matrices.matrix/transpose": "Accepts an n by m matrix and returns an m by n matrix where every entry has been flipped along the diagonal.", + "moreiotas.page.matrices.matrix/inverse": "Accepts an n by n matrix and returns the n by n matrix such that in*out = identity.", + "moreiotas.page.matrices.matrix/determinant": "Accepts a square matrix and returns the determinant of that matrix. Mishaps for matrices larger than 4x4.", + "moreiotas.page.matrices.matrix/concat/vert": "Accepts an n by m matrix and a p by m matrix and produces a (n+p) by m matrix by putting the first matrix on top of the second.", + "moreiotas.page.matrices.matrix/concat/hori": "Accepts an n by m matrix and an n by p matrix and produces an n by (m+p) matrix by putting the first matrix to the left of the second.", + "moreiotas.page.matrices.matrix/split/vert": "Accepts an n by m matrix and an int from 0 to n, and returns two matrices created by splitting the input matrix vertically at the inputted int.", + "moreiotas.page.matrices.matrix/split/hori": "Accepts an n by m matrix and an int from 0 to m, and returns two matrices created by splitting the input matrix horizontally at the inputted int.", + + "moreiotas.entry.types": "Types", + "moreiotas.page.types.type/iota": "Remove an iota from the stack, and adds the type of that iota to the stack.", + "moreiotas.page.types.type/entity": "Remove an entity from the stack, and adds the type of the entity at that location to the stack.", + "moreiotas.page.types.type/to_item": "Remove an iota with an associated item type (for example a location and the type of the block at that location, an item entity, or an item frame) from the stack and returns the item type to the stack (e.g. Grass, Stone, Stick, etc.).", + "moreiotas.page.types.type/item_held": "Adds the type of the item in the caster's offhand to the stack if there is one present, or the type of the casting hand otherwise.", + + "moreiotas.page.types.get_entity/type": "Remove an entity type and a position from the stack, and returns an entity of that type at that position if one exists.", + "moreiotas.page.types.zone_entity/type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities of that type within that radius of that position.", + "moreiotas.page.types.zone_entity/not_type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities not of that type within that radius of that position", + + "moreiotas.entry.items": "Items", + "moreiotas.page.items.item/prop/item": "Transforms the $(l:casting/item_iotas)Item Stack$() at the top of the stack into its Item.", + "moreiotas.page.items.item/prop/size": "Transforms the Item Stack at the top of the stack into its size.", + "moreiotas.page.items.item/prop/size/set": "Transforms the Item Stack at the top of the stack into its size.", + "moreiotas.page.items.item/main_hand": "Transforms the entity at the top of the stack into the Item Stack in its main hand. Also works on Item Frames and dropped items.", + "moreiotas.page.items.item/off_hand": "Transforms the entity at the top of the stack into the Item Stack in its off hand.", + "moreiotas.page.items.item/inventory/stacks": "Removes two vectors from the stack representing position and side. Returns a list of Item Stacks in the block at the given position accessible from the given side (or all if second vector is zero).", + "moreiotas.page.items.item/inventory/items": "Removes two vectors from the stack representing position and side. Returns a list of Items in the block at the given position accessible from the given side (or all if second vector is zero).", + + "hexcasting.mishap.invalid_value.class.string": "a string", + "hexcasting.mishap.invalid_value.class.matrix": "a matrix", + "hexcasting.mishap.invalid_value.class.matrix.square": "a square matrix", + "hexcasting.mishap.invalid_value.class.numvecmat": "a number, vector, or matrix", + "hexcasting.mishap.invalid_value.class.possible_matrix": "an iota able to be converted to a matrix", + "hexcasting.mishap.invalid_value.matrix.wrong_size": "a matrix %s by %s", + "hexcasting.mishap.invalid_value.matrix.max_size": "a final matrix less than %1$d by %1$d, was %2$d by %3$d", + "hexcasting.mishap.invalid_value.string.max_size": "a string less than %d chars long, was %d", + "hexcasting.mishap.bad_item.item.read.offhand": "an entity with an offhand", + "hexcasting.mishap.bad_item.item.read.any": "an entity that can hold items" +} \ No newline at end of file diff --git a/projects/1.20-fabric/assets/moreiotas/moreiotas/packer-policy.json b/projects/1.20-fabric/assets/moreiotas/moreiotas/packer-policy.json new file mode 100644 index 000000000000..ef5a1bb6a5cc --- /dev/null +++ b/projects/1.20-fabric/assets/moreiotas/moreiotas/packer-policy.json @@ -0,0 +1,6 @@ +[ + { + "type": "indirect", + "source": "projects/1.20/assets/moreiotas/moreiotas" + } +] \ No newline at end of file diff --git a/projects/1.20/assets/hexal/hexal/README.md b/projects/1.20/assets/hexal/hexal/README.md new file mode 100644 index 000000000000..543b72a67746 --- /dev/null +++ b/projects/1.20/assets/hexal/hexal/README.md @@ -0,0 +1,24 @@ +### 总概 + +```mermaid +flowchart LR + 1.20.1 -->|indirect| 1.20.1-fabric + 1.19.2 + 1.18.2 -->|indirect| 1.18.2-fabric +``` + +``` +1.20.1 + └── 1.20.1-fabric +1.19.2 +1.18.2 + └── 1.18.2-fabric +``` + +### 链接区域 + +- [1.18.2](/projects/1.18/assets/hexal/hexal) +- [1.19.2](/projects/1.19/assets/hexal/hexal) +- [1.20.1](/projects/1.20/assets/hexal/hexal) +- [1.18.2-fabric](/projects/1.18-fabric/assets/hexal/hexal) +- [1.20.1-fabric](/projects/1.20-fabric/assets/hexal/hexal) \ No newline at end of file diff --git a/projects/1.20/assets/hexal/hexal/lang/en_us.json b/projects/1.20/assets/hexal/hexal/lang/en_us.json new file mode 100644 index 000000000000..b457a7660827 --- /dev/null +++ b/projects/1.20/assets/hexal/hexal/lang/en_us.json @@ -0,0 +1,410 @@ +{ + "block.hexal.slipway": "Slipway", + "block.hexal.mediafied_storage": "Mote Nexus", + "block.hexal.relay": "Relay", + + "entity.hexal.wisp.projectile": "Projectile Wisp", + "entity.hexal.wisp.ticking": "Cyclic Wisp", + "entity.hexal.wisp.wandering": "Wandering Wisp", + + + "hexcasting.mishap.non_player": "%s expected to be cast by a player.", + "hexcasting.mishap.no_wisp": "%s expected to be cast by a wisp.", + "hexcasting.mishap.others_wisp": "That wisp is owned by %s, not you.", + "hexcasting.mishap.no_links": "%s has no links.", + "hexcasting.mishap.self_link": "Tried to link %s to itself.", + "hexcasting.mishap.no_bound_storage": "No bound Mote Nexus.", + "hexcasting.mishap.storage_unloaded": "Bound Mote Nexus is unloaded.", + "hexcasting.mishap.excessive_reproduction": "Wisp %s tried to reproduce excessively; only 1 child per tick.", + "hexcasting.mishap.illegal_interworld_iota": "Attempted to bring iota %s interworld, this type of iota cannot be added to the Everbook.", + + "hexcasting.mishap.invalid_value.class.linkable": "a linkable", + "hexcasting.mishap.invalid_value.class.wisp": "a wisp", + "hexcasting.mishap.invalid_value.class.consumable_entity": "a consumable entity", + "hexcasting.mishap.invalid_value.class.wisp.casting": "a casting wisp", + "hexcasting.mishap.invalid_value.class.type.block": "a block type", + "hexcasting.mishap.invalid_value.class.type.item": "an item type", + "hexcasting.mishap.invalid_value.class.type.entity": "an entity or entity type", + "hexcasting.mishap.invalid_value.class.type.block.able": "an item type that has a block", + "hexcasting.mishap.invalid_value.class.type.list.double": "a list of numbers", + "hexcasting.mishap.invalid_value.class.gate": "a gate", + "hexcasting.mishap.invalid_value.class.mote": "a mote", + "hexcasting.mishap.invalid_value.class.moteentity.itemitemframe": "a mote, item entity, or item frame", + "hexcasting.mishap.invalid_value.moteitemtype": "a mote or item type", + "hexcasting.mishap.invalid_value.motemotelist": "a mote or list of motes", + "hexcasting.mishap.invalid_value.motemotelistmotelistlist": "a mote, list of motes, or list of lists of motes", + "hexcasting.mishap.invalid_value.veclist": "a vector or a list of vectors", + "hexcasting.mishap.invalid_value.blockitementityitemframeitem": "a block, item entity, item frame, or mote", + "hexcasting.mishap.invalid_value.entity.itemitemframe": "an item entity or item frame", + "hexcasting.mishap.invalid_value.int.strictly_positive": "a strictly positive integer", + "hexcasting.mishap.invalid_value.crafting_recipe": "a valid crafting recipe", + "hexcasting.mishap.invalid_value.mote_duplicated": "each mote to appear only once", + "hexcasting.mishap.invalid_value.cant_combine_motes": "two motes that can be combined", + "hexcasting.mishap.invalid_value.mote_not_size_one": "a mote with no NBT data or of size one", + "hexcasting.mishap.invalid_value.gate.offset": "an offset of at most %f blocks", + + + "hexcasting.iota.hexal:iota_type": "Iota Type", + "hexcasting.iota.hexal:entity_type": "Entity Type", + "hexcasting.iota.hexal:item_type": "Item Type", + "hexcasting.iota.hexal:gate": "Gate", + "hexcasting.iota.hexal:item": "Item", + + "hexal.spelldata.entity_type": "Type", + "hexal.spelldata.gate": "Gate %d", + "hexal.spelldata.mote": "%s x%d", + + "hexcasting.action.hexal:type/iota": "Classifier's Purification", + "hexcasting.action.hexal:type/entity": "Physician's Purification", + "hexcasting.action.hexal:type/block_item": "Sorter's Purification", + "hexcasting.action.hexal:type/item_held": "Sorter's Reflection", + + "hexcasting.action.hexal:get_entity/type": "Entity Distillation: Type", + "hexcasting.action.hexal:zone_entity/type": "Zone Exaltation: Type", + "hexcasting.action.hexal:zone_entity/not_type": "Zone Exaltation: Not-Type", + + "hexcasting.action.hexal:current_tick": "Timekeeper's Reflection", + "hexcasting.action.hexal:breath": "Diver's Purification", + "hexcasting.action.hexal:health": "Nurse's Purification", + "hexcasting.action.hexal:armour": "Squire's Purification", + "hexcasting.action.hexal:toughness": "Boxer's Purification", + "hexcasting.action.hexal:light_level": "Lamplighter's Purification", + + "hexcasting.action.hexal:factorial": "Factorial Purification", + "hexcasting.action.hexal:running/sum": "Running Sum Purification", + "hexcasting.action.hexal:running/mul": "Running Product Purification", + + "hexcasting.action.hexal:everbook/read": "Mnemosyne's Gambit", + "hexcasting.action.hexal:everbook/write": "Elysium's Gambit", + "hexcasting.action.hexal:everbook/delete": "Lethe's Gambit", + "hexcasting.action.hexal:everbook/toggle_macro": "Brigh's Gambit", + + "hexcasting.action.hexal:smelt": "Smelt", + "hexcasting.action.hexal:freeze": "Freeze", + "hexcasting.action.hexal:falling_block": "Falling Block", + "hexcasting.action.hexal:place_type": "Place Block II", + "hexcasting.action.hexal:particles": "Particles", + + "hexcasting.action.hexal:interop/fabric_only/phase_block": "Phase Block", + + "hexcasting.action.hexal:wisp/summon/projectile": "Summon Projectile Wisp", + "hexcasting.action.hexal:wisp/summon/ticking": "Summon Cyclic Wisp", + "hexcasting.action.hexal:wisp/self": "Identity Reflection", + "hexcasting.action.hexal:wisp/media": "Reservoir Reflection", + "hexcasting.action.hexal:wisp/hex": "Manager's Purification", + "hexcasting.action.hexal:wisp/owner": "Allegiance Distillation", + "hexcasting.action.hexal:wisp/move/target/set": "Pathfinder's Gambit", + "hexcasting.action.hexal:wisp/move/target/get": "Pathfinder's Reflection", + "hexcasting.action.hexal:wisp/move/speed/set": "Haste", + "hexcasting.action.hexal:wisp/move/speed/get": "Speedometer's Reflection", + "hexcasting.action.hexal:wisp/trigger/tick": "Delay Wisp", + "hexcasting.action.hexal:wisp/trigger/comm": "Listen", + "hexcasting.action.hexal:wisp/trigger/move": "Wander", + "hexcasting.action.hexal:wisp/consume": "Consume Wisp", + "hexcasting.action.hexal:wisp/seon/set": "Bind Wisp", + "hexcasting.action.hexal:wisp/seon/get": "Familiar's Reflection", + "hexcasting.action.hexal:wisp/transfer/allow": "Allow Transfer", + "hexcasting.action.hexal:wisp/transfer/disallow": "Disallow Transfer", + "hexcasting.action.hexal:wisp/transfer/others/allow": "Allow Transfer Others", + "hexcasting.action.hexal:wisp/transfer/others/disallow": "Disallow Transfer Others", + + "hexcasting.action.hexal:get_entity/wisp": "Entity Purification: Wisp", + "hexcasting.action.hexal:zone_entity/wisp": "Zone Distillation: Wisp", + "hexcasting.action.hexal:zone_entity/not_wisp": "Zone Distillation: Non-Wisp", + + "hexcasting.action.hexal:link": "Link", + "hexcasting.action.hexal:link/others": "Link Others", + "hexcasting.action.hexal:link/unlink": "Unlink", + "hexcasting.action.hexal:link/unlink/others": "Unlink Others", + "hexcasting.action.hexal:link/get": "Phonebook Purification", + "hexcasting.action.hexal:link/get_index": "Recognition Purification", + "hexcasting.action.hexal:link/num": "Popularity Reflection", + + "hexcasting.action.hexal:link/comm/send": "Send Iota", + "hexcasting.action.hexal:link/comm/read": "Recitation Reflection", + "hexcasting.action.hexal:link/comm/num": "Postmaster's Reflection", + "hexcasting.action.hexal:link/comm/clear": "Unclogging Gambit", + "hexcasting.action.hexal:link/comm/open_transmit": "Open Transmit", + "hexcasting.action.hexal:link/comm/close_transmit": "Close Transmit", + + "hexcasting.action.hexal:gate/make": "Gate's Reflection", + "hexcasting.action.hexal:gate/mark": "Gate's Opening", + "hexcasting.action.hexal:gate/unmark": "Gate's Dismissal", + "hexcasting.action.hexal:gate/mark/num/get": "Marked Purification", + "hexcasting.action.hexal:gate/mark/get": "Marked Distillation", + "hexcasting.action.hexal:gate/close": "Gate's Closing", + + "hexcasting.action.hexal:mote/storage/bind": "Bind Storage", + "hexcasting.action.hexal:mote/storage/bind/temp": "Bind Storage - Temporary", + "hexcasting.action.hexal:mote/contained_type/get": "Stocktake Reflection", + "hexcasting.action.hexal:mote/contained/get": "Stocktake Purification", + "hexcasting.action.hexal:mote/storage/remaining_capacity/get": "Capacity Reflection", + "hexcasting.action.hexal:mote/storage/contains": "Containment Distillation", + "hexcasting.action.hexal:mote/make": "Mediafy Item", + "hexcasting.action.hexal:mote/return": "Return Item", + "hexcasting.action.hexal:mote/count/get": "Weighing Purification", + "hexcasting.action.hexal:mote/combine": "Stacking Distillation", + "hexcasting.action.hexal:mote/combinable": "Stacking Distillation II", + "hexcasting.action.hexal:mote/split": "Splitting Gambit", + "hexcasting.action.hexal:mote/storage/get": "Depot Purification", + "hexcasting.action.hexal:mote/storage/set": "Depot Gambit", + "hexcasting.action.hexal:mote/craft": "Craft", + "hexcasting.action.hexal:mote/craft/preview": "Preview Craft", + "hexcasting.action.hexal:mote/villager/level/get": "Seniority Purification", + "hexcasting.action.hexal:mote/trade/get": "Offering Purification", + "hexcasting.action.hexal:mote/trade": "Trade", + "hexcasting.action.hexal:mote/use_on": "Use Item On", + + "hexcasting.action.hexal:tick": "Accelerate", + + + + "hexcasting.action.book.hexal:light_level": "Lamplighter's Prfn.", + + "hexcasting.action.book.hexal:running/sum": "Running Sum Prfn.", + "hexcasting.action.book.hexal:running/mul": "Running Product Prfn.", + + "hexcasting.action.book.hexal:get_entity/wisp": "Entity Prfn.: Wisp", + "hexcasting.action.book.hexal:zone_entity/wisp": "Zone Dstl.: Wisp", + "hexcasting.action.book.hexal:zone_entity/not_wisp": "Zone Dstl.: Non-Wisp", + + "hexcasting.action.book.hexal:mote/storage/bind/temp": "Bind Storage - Temp.", + + + + "hexal.entry.slipways": "Slipways", + "hexal.page.slipways": "I have heard tales of some geodes in which glowing portals called slipways lie. These slipways are regularly depicted with glowing sparks surrounding them that bear an incredible resemblance to the $(l:patterns/spells/wisps)$(thing)wisps/$ that I have heard tell of, which may be a connection to look into.", + + "hexal.entry.relay": "Relay", + "hexal.page.relay.0": "Often I wish to $(l:patterns/spells/links#hexal:link)$(action)link/$ together multiple $(l:patterns/spells/wisps)$(thing)wisps/$, so that they can share media and information over long distances. However running long chains of wisps to transfer these over great distances is inconvenient, and has great upkeep costs. To resolve this issue I have made Relays. Since they are solid blocks rather than media constructs themselves, they are able to maintain the links without any upkeep costs at all.", + "hexal.page.relay.1": "Any relays connected together will form a network, with any wisps connected to a relay network able to share media between each other as if they were directly connected. Further, any iota sent to one relay in the network is passed on to every other non-relay connected to the network. Relays have a range of 32 blocks (this means two relays can connect at a distance of 64 blocks). The colour of a network's links can be changed by right clicking on any relay with a colouriser.", + "hexal.page.relay.2": "Relays have no owner, so if you want your wisps to $(l:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)transfer media/$ with them you must specifically allow them to do so.", + + "hexal.entry.hexal_basics": "Hexal Basic Patterns", + "hexal.page.hexal_basics.current_tick": "Adds a number to the stack which seems to be related to how Nature represents time; If I cast the pattern, then cast the same pattern a second later, the number it adds has increased by 20.", + "hexal.page.hexal_basics.breath": "Removes a Living entity from the stack and returns how much breath it has left (i.e., how close it is to drowning).", + "hexal.page.hexal_basics.health": "Removes a Living entity from the stack and returns how much health it has left (i.e., how close it is to dying).", + "hexal.page.hexal_basics.armour": "Removes a Living entity from the stack and returns how much armour it has.", + "hexal.page.hexal_basics.toughness": "Removes a Living entity from the stack and returns how much toughness it has (another property of armour).", + "hexal.page.hexal_basics.light_level": "Removes a position vector from the stack and returns the light level at that position.", + + "hexal.entry.hexal_maths": "Hexal Maths", + "hexal.page.hexal_maths.factorial": "Takes a number from the stack and computes its factorial, for example inputting 4 would return 4*3*2*1=24.", + "hexal.page.hexal_maths.running/sum": "Takes a list from the stack and computes its running sum, for example inputting [1,2,5] would return [1,3,8].", + "hexal.page.hexal_maths.running/mul": "Takes a list from the stack and computes its running product, for example inputting [1,2,5] would return [1,2,10].", + + "hexal.entry.hexal_spell": "Hexal Spells", + "hexal.page.hexal_spell.smelt.0": "Remove a location, item entity, or mote from the stack, then either smelt the block at the location or smelt all the items in the item entity or mote.", + "hexal.page.hexal_spell.smelt.1": "Costs three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ per item smelted (i.e. three quarters of an $(l:items/amethyst)$(item)Amethyst Dust/$ for smelting a block, 6 $(l:items/amethyst)$(item)Amethyst Dust/$ to smelt a stack of 8 items.)", + "hexal.page.hexal_spell.freeze": "Freezes the block at a block location. For example, turns water into ice, and ice into packed ice. Costs one $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.falling_block": "Remove a location from the stack, and force the block there to fall as if it were sand or gravel. Costs one and a half $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.place_type": "Accepts an item type or mote and a location, and attempts to place a block of that item type at that location. If a mote was passed it will instead place from the record referenced by that mote. Costs an eighth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.hexal_spell.particles": "Accepts a location or a list of locations, and either creates a particle at the location, or creates lines of particles between the locations in the list. Costs two thousandths of an $(l:items/amethyst)$(item)Amethyst Dust/$ per location.", + + "hexal.entry.fabric_only_hexal": "Fabric-Only Hexal Spells", + "hexal.page.fabric_only_hexal.interop/fabric_only/phase_block": "Takes a position and a number, and phases the block at that position out for that many seconds. Costs one ten-thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$ times the square of the time to phase out for.", + + "hexal.entry.wisps": "Wisps", + "hexal.page.wisps.0": "I have discovered a way to create constructs from the media itself, visible to others and able to move and act somewhat on their own. They are able to cast hexes in my place, similar to how a $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ evaluates patterns. They do take some of my attention to operate this however, and if too many try and execute at once I will only be able to run some of them, leaving the rest for the next instant.", + "hexal.page.wisps.1": "When they are created I assign them a 'reservoir' of media that they have access to, which is taken from me and used to form the wisp. A wisp uses up part of its reservoir simply existing, and when it evaluates the pattern list it is carrying any costs incurred are removed from its reservoir. All wisps seem to take three $(l:items/amethyst)$(item)Amethyst Dust/$ to summon, in addition to whatever media is used for their reservoir.", + "hexal.page.wisps.2": "Wisps are punished severely for attempting to hold onto another caster's truename, incurring a 20 times increase in the wisp's media upkeep per truename iota in any of the wisp's iota storage mechanisms.", + "hexal.page.wisps.wisp/summon/projectile.0": "This wisp is summoned and launched like an arrow, casting its hex on whatever it hits. The initial stack when it executes will be a reference to itself, then a reference to what it hit.", + "hexal.page.wisps.wisp/summon/projectile.1": "This could be a block position or an entity reference. The first vector accepted is the location the wisp will be summoned, while the direction of the second is the direction the wisp will be launched, and the second's magnitude seems to affect the wisp's velocity. The cost of the spell increases with the squared magnitude of velocity. The number accepted determines the wisp's reservoir in $(l:items/amethyst)$(item)Amethyst Dust/$. It loses approximately 3 tenths of an $(l:items/amethyst)$(item)Amethyst Dust/$ of media every second once summoned, and has a range of influence of 4 blocks.", + "hexal.page.wisps.wisp/summon/ticking.0": "Similar to Summon Projectile Wisp, but with only one vector input for the position to summon the wisp. Cyclic wisps are unmoving once summoned, instead executing their hex up to 20 times each second.", + "hexal.page.wisps.wisp/summon/ticking.1": "The first time it casts the stack will start with a reference to itself, from which point it will always start with the stack and ravenmind in the state they finished on the last cast. This wisp has a less stable form making it lose significantly more media every second, losing approximately seven tenths of an $(l:items/amethyst)$(item)Amethyst Dust/$ per second once summoned. It has a range of influence of 8 blocks.", + "hexal.page.wisps.wisp/self": "Add a reference to the casting wisp to the stack. This must be cast by a wisp; trying to cast it through a staff will fail rather spectacularly.", + "hexal.page.wisps.wisp/media": "Add the amount of media in the wisp's reservoir to the stack. This must be cast by a wisp; trying to cast it through a staff will fail rather spectacularly.", + "hexal.page.wisps.wisp/hex": "Removes a reference to a wisp from the stack, and replaces it with the wisp's contained hex. Must be a wisp you summoned, or a wisp that has $(l:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)allowed/$ transfer with the caster or caster's owner.", + "hexal.page.wisps.wisp/owner": "Removes a reference to a wisp and an entity from the stack, and returns true if that entity owns that wisp, and false otherwise.", + "hexal.page.wisps.wisp/move/target/set": "Removes a position vector from the stack; The Cyclic Wisp that executed this pattern will move in a straight line towards that position (colliding with terrain in its path) until it reaches it.", + "hexal.page.wisps.wisp/move/target/get": "Adds to the stack the position vector that the executing Cyclic Wisp is currently moving towards.", + "hexal.page.wisps.wisp/move/speed/set": "Removes a number from the stack, and sets the executing Cyclic Wisp's maximum speed to that number.", + "hexal.page.wisps.wisp/move/speed/get": "Gets the executing Cyclic Wisp's current maximum speed.", + "hexal.page.wisps.wisp/transfer/allow": "When two wisps are $(l:patterns/spells/links)$(thing)linked/$ together, they transfer media between each other until they are balanced. By default this only happens between wisps with the same owner. This takes an index, and explicitly allows the wisp to exchange media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/disallow": "Correspondingly, this takes an index and disallows the wisp from exchanging media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/others/allow": "This takes a wisp that you own and an index, and allows the wisp to exchange media with the linkable at that index.", + "hexal.page.wisps.wisp/transfer/others/disallow": "This takes a wisp that you own and an index, and disallows the wisp from exchanging media with the linkable at that index.", + "hexal.page.wisps.get_entity/wisp": "Transform the position on the stack into the wisp at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + "hexal.page.wisps.zone_entity/wisp": "Take a position and maximum distance on the stack, and combine them into a list of wisps near the position.", + "hexal.page.wisps.zone_entity/not_wisp": "Take a position and maximum distance on the stack, and combine them into a list of non-wisp entities near the position.", + "hexal.page.wisps.wisp/trigger/tick": "Removes an integer from the stack, then delays the wisp's next cast until at least that many twentieth's of a second have passed. This and other triggers like it will halve the wisp's upkeep cost while it isn't casting.", + "hexal.page.wisps.wisp/trigger/comm": "The wisp's next cast will not occur until it has received at least one $(l:patterns/spells/links#hexal:link/comm/send)$(action)communication/$.", + "hexal.page.wisps.wisp/trigger/move": "The wisp's next cast will not occur until it has reached the position it is $(l:patterns/spells/wisps#hexal:wisp/move/target/set)$(action)navigating/$ towards.", + + "hexal.entry.links": "Links", + "hexal.page.links.0": "These patterns outline a system that I have found for communicating information from one $(l:patterns/spells/wisps)$(thing)wisp/$ to another, among other things. There are a number of patterns related to creating these links, and a number of patterns related to sending and receiving iotas over a link once it is created. A wisp can have any number of links active, with each costing a negligible amount of media to maintain each twentieth of a second.", + "hexal.page.links.1": "The links of a given linkable are indexed by the order they are created, with this number used by a number of patterns. \"Linkable\" is not its own type, but a shorthand for any type that can be coerced into a linkable (e.g. Entity -> Linkable entities, Vec -> Linkable blocks, ...). Links can span up to double the sum of the two linkable's ranges. To connect linkables over truly vast distances I would do well to look into building some $(l:items/relay)$(item)Relays/$.", + "hexal.page.links.link": "Links the caster to the entity removed from the stack, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/others": "May be evaluated by any casting instrument. Links two entities, which must be linkable. This costs one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "hexal.page.links.link/unlink": "Removes the link at the given index from the caster's links. This costs two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/unlink/others": "Takes two linkables and unlinks them if they are linked. This costs two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/get": "Removes an index from the stack, and adds the entity connected to the link at that index to the stack.", + "hexal.page.links.link/get_index": "Removes an entity from the stack, and adds the index to the link to that entity to the stack (or -1 if the caster isn't linked to that entity).", + "hexal.page.links.link/num": "Adds the number of links to the wisp to the stack.", + "hexal.page.links.link/comm/send": "Removes an iota from the stack, then removes an index from the stack and sends the iota along the link at the given index. This costs one hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.links.link/comm/read": "When something receives an iota along a link it is added to a queue. This pattern adds the first iota in the queue to the stack, removing it from the queue.", + "hexal.page.links.link/comm/num": "Adds to the stack the number of unread iota in the caster's received iota queue.", + "hexal.page.links.link/comm/clear": "Removes all unread iota from the caster's received iota queue.", + "hexal.page.links.link/comm/open_transmit": "Similar to $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, until drawing a $(l:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ all patterns I draw are sent along the link whose index is at the top of the stack.", + "hexal.page.links.link/comm/close_transmit": "When drawn after $(l:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ I stop transmitting drawn patterns. If either $(l:patterns/spells/links#hexal:link/comm/open_transmit)$(action)Open Transmit/$ or $(l:patterns/spells/links#hexal:link/comm/close_transmit)$(action)Close Transmit/$ are executed by an intermediary caster such as a wisp, they will mishap.", + + "hexal.entry.tick": "Accelerate", + "hexal.page.tick.tick.0": "Causes the block at the passed vector to perform its normal actions faster in the instant that this spell is cast.", + "hexal.page.tick.tick.1": "Casting it costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$, plus a thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$ for each time it has previously been cast on that block in this hex.", + + "hexal.entry.gates": "Gates", + "hexal.page.gates.0": "Gates are the latest in my long line of experimentation with breaking space to connect distant points and allow instantaneous travel. What gates allow me to do, that none of my previous attempts have succeeded at, is to do it $(o)efficiently$(). There are three varieties of gates that I have learned how to construct, all of which take a large amount of media to burn into reality, but are significantly cheaper to operate afterwards.", + "hexal.page.gates.1": "Location Anchored Gates are bound to a specific position in the world, and send all that move through them to that position. Entity Anchored Gates are bound to a being that inhabits the world, and send those moving through them to the position of that being (plus an offset, chosen when burning in the gate).", + "hexal.page.gates.2": "Drifting Gates are not bound at all, and can be used to send entities anywhere, however they lose efficiency as a result, and can only send entities to places that are in my ambit. When a gate is burnt in I will obtain on my stack a reference to that gate. With that gate reference, I can mark entities with that gate, and I can close the gate, which sends all entities marked with that gate to the gate's destination. Note that closing a gate doesn't use it up; once I have acquired a gate iota I can use it in perpetuity.", + "hexal.page.gates.gate/make": "Adds a new gate iota to the stack. Any copy of this iota will point to the same numbered gate. Costs 32 $(l:items/amethyst)$(item)Charged Amethyst/$. If passed null, makes a Drifting Gate. If passed a vector, makes a Location Anchored Gate, If passed a vector and an entity, makes an Entity Anchored Gate.", + "hexal.page.gates.gate/mark": "Consumes a gate iota and an entity. Marks that entity to be teleported the next time that gate is closed. Costs one twentieth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.gates.gate/unmark": "Consumes a gate iota and an entity. Unmarks that entity so that if it was marked with $(l:patterns/great_spells/gates#hexal:gate/mark)$(action) Gate's Opening/$ it will no longer be teleported the next time that gate is closed.", + "hexal.page.gates.gate/mark/num/get": "Consumes a gate iota, returns how many entities are marked by that gate.", + "hexal.page.gates.gate/mark/get": "Consumes a gate iota and an entity, returns whether that entity is marked by that gate.", + "hexal.page.gates.gate/close": "Consumes a non-drifing gate iota, or a drifting gate iota and a position. Transports all the entities marked with the passed gate to the stored or given position, as relevant. Costs half an $(l:items/amethyst)$(item)Amethyst Shard/$, plus an $(l:items/amethyst)$(item)Amethyst Dust/$ per metre transported per entity, if the gate was drifting.", + + "hexal.entry.motes": "Motes", + "hexal.page.motes.explanation.0": "This entry deals with bringing items into the media, making them referencable, countable, bringing order to them and to me and to my mind and-. A mediafied item iota (known as a mote) that has been added to the stack references a specific mote record in a Mote Nexus, since without something holding the thought-pattern of the item to this world it will wither away -away like my cognition is flensing-.", + "hexal.page.motes.explanation.1": "Any duplicate of that first mote iota referencing a record references the same record, and any change to one affects them all for they all point to the one and only in the media. Splitting and merging and crafting and trading all affect all affect all-.", + "hexal.page.motes.explanation.2": "A Mote Nexus is limited in some ways, but only some. It can contain 1023 different records, but each record can store items innumerable. I have yet to find any limit, I can merge and merge and merge forever and the record keeps growing and growing and growing...", + "hexal.page.motes.mediafed_storage_recipe": "The Mote Nexus is built from the mind of a cartographer endlessly mapping the contents of the $(item)Shulker Box/$ that it has been flayed into.", + "hexal.page.motes.mote/storage/bind": "Target a Mote Nexus block in the world and bind yourself to it, meaning all items you mediafy will be added to that nexus' capacity. Targeting any other block will unbind you from your currently bound nexus. Costs 32 $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/storage/bind/temp": "Target a Mote Nexus block in the world and bind to it for the remainder of this cast, temporarily overriding your primary binding. Costs one thousandth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/contained_type/get": "Gets all the types of motes contained in the currently bound Mote Nexus.", + "hexal.page.motes.mote/contained/get": "Gets all the mote records from the currently bound Mote Nexus that match the passed item type or could be combined with the passed mote.", + "hexal.page.motes.mote/storage/remaining_capacity/get": "Gets the remaining capacity of the bound Mote Nexus.", + "hexal.page.motes.mote/storage/contains": "Returns true if the Mote Nexus at the given position contains a mote of the given type, or that would stack with the given mote, and false otherwise.", + "hexal.page.motes.mote/make": "Convert an item in the world (either an item entity or an item frame) into a mote on your stack. If passed an existing mote instead adds the items from the entity to the mote. Mediafying an item costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/return": "Returns all the items from a mote to the world at the location of your choosing. If passed a number returns at most that many items. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/count/get": "Accepts a mote and returns the number of items in the record referenced by that mote.", + "hexal.page.motes.mote/combine": "Combines two motes into one, merging the mote records they point to. Any pointers to the second mote will become null, any pointers to the first will remain. This can make motes holding many more items than I could carry in a stack naturally!", + "hexal.page.motes.mote/combinable": "Returns true if the first mote can be combined with the items in the second argument (which can be a mote, item stack, item entity, or item frame), and false otherwise.", + "hexal.page.motes.mote/split": "Splits the specified number of items off of the passed mote, creating a new mote pointing to a new mote record.", + "hexal.page.motes.mote/storage/get": "Get the position of the Mote Nexus that contains the passed mote.", + "hexal.page.motes.mote/storage/set": "Move the record referenced by the passed mote to the Mote Nexus at the passed position. This returns a new mote pointing to that record, and invalidates all previous motes pointing to that record.", + "hexal.page.motes.mote/craft.0": "Takes a mote, list of motes, or list of list of motes. returns a list containing the results of crafting with those items. For example, the input Stone x128 would return [Stone Button x128].", + "hexal.page.motes.mote/craft.1": "For more complex crafts, inserting nulls to space items properly will be required. A diamond pickaxe for example would require [[Diamond x2, Diamond x2, Diamond x2], [null, Stick x2], [null, Stick x2]] to get [Diamond Pickaxe x2]. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/craft/preview": "Takes the same input as $(l:patterns/spells/motes#hexal:mote/craft)$(action)Craft/$, except it can take Item Stack Iotas as well as motes. Returns a list of Item Stack Iotas representing what the results of $(l:patterns/spells/motes#hexal:mote/craft)$(action)Craft/$ would have been with motes containing those inputs.", + "hexal.page.motes.mote/villager/level/get": "Accepts a villager, returns a number representing that villager's seniority and skill at their craft.", + "hexal.page.motes.mote/trade/get.0": "Accepts a villager and returns all of the trades that villager is offering. This is a list of lists of lists. Each trade comprises two lists, the cost, and the returned items. The returned items is a list containing the type of item, and the number of items.", + "hexal.page.motes.mote/trade/get.1": "The cost is a list of one or two pairs of item and number of items required by the villager for the trade to be accepted. For example, one trade offer could be [[[Emerald, 1]], [Redstone, 1]].", + "hexal.page.motes.mote/trade.0": "Accepts a villager, a list of motes to trade with to villager, and optionally an int for which of that villager's trades to attempt. (int? above means that you can pass 2 or 3 arguments, the optional 3rd being an int).", + "hexal.page.motes.mote/trade.1": "If no trade number was passed, it will try each of the villager's trade until finding one that accepts the passed items. If a trade number was passed it will skip straight to using that trade. It will then repeat that trade for as long as it has enough items and the villager is still willing to trade. It will then return the items the villager traded away as a mote to the stack.", + "hexal.page.motes.mote/trade.2": "The villager will find this trade to be a learnable experience as it would if trading with you directly, and will improve its skills and trade offerings commensurately. Costs a tenth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "hexal.page.motes.mote/use_on": "Accepts a mote, and either an entity, or a target block and a normal vector. Uses the item on the entity/block. The mote must either only have one item in it, or the items contained must be extremely simple (no NBT data).", + + "hexal.entry.great_wisps": "Great Wisp Spells", + "hexal.page.great_wisps.wisp/consume.0": "Remove a wisp from the stack, and disassemble the wisp. The patterns contained are lost, but the media that it contained can be repurposed if this spell is cast by another wisp.", + "hexal.page.great_wisps.wisp/consume.1": "Costs either an $(l:items/amethyst)$(item)Amethyst Shard/$ if the wisp is owned by you or has $(l:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)allowed/$ transfer with the caster or caster's owner, or half again as much media as the consumed wisp contains if the wisp is owned by another and has now allowed it. Repurposing the media is not completely efficient, losing one twentieth of the consumed wisp's reserve in transfer.", + "hexal.page.great_wisps.wisp/seon/set": "Bind one of my wisps closer to me; I may only have one bound wisp at a time, but whichever wisp is bound costs significantly less upkeep and increased range.", + "hexal.page.great_wisps.wisp/seon/get": "Returns my currently bound wisp. A new wisp can only be bound when this returns null. (This is not a great spell, I have simply placed it here for convenience.)", + + "hexal.entry.types": "Types", + "hexal.page.types.type/iota": "Remove an iota from the stack, and adds the type of that iota to the stack.", + "hexal.page.types.type/entity": "Remove an entity from the stack, and adds the type of the entity at that location to the stack.", + "hexal.page.types.type/block_item": "Remove a location, $(l:hexal.entry.motes)$(item)mote/$, item entity, or item frame from the stack, and adds the type of the block at that location, or type of that item, to the stack (e.g. Grass, Stone, Stick, etc.).", + "hexal.page.types.type/item_held": "Adds the type of the item in the caster's offhand to the stack if there is one present, or the type of the casting hand otherwise.", + + "hexal.page.types.get_entity/type": "Remove an entity type and a position from the stack, and returns an entity of that type at that position if one exists.", + "hexal.page.types.zone_entity/type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities of that type within that radius of that position.", + "hexal.page.types.zone_entity/not_type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities not of that type within that radius of that position", + + + "hexal.entry.everbook": "Everbook", + "hexal.page.everbook.0": "Your Everbook is a strange space that your broken mind can now reach. There are many yous that seem to share this record, worlds and worlds of progress, beginning again and again. Your Everbook can store patterns paired with iotas like an $(l:greatwork/akashiclib)$(item)Akashic Record/$, though the fragile nature of your mind these days makes it best to route all access to your Everbook through an $(l:greatwork/akashiclib)$(item)Akashic Record/$. Any world that you reach enlightenment in, you will have access to the entries you add to it now.", + "hexal.page.everbook.everbook/read": "Takes the position of an $(l:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and retrieves the iota at that key from your Everbook, storing it in the given $(l:greatwork/akashiclib)$(item)Akashic Record/$ if able.", + "hexal.page.everbook.everbook/write": "Takes the position of an $(l:greatwork/akashiclib)$(item)Akashic Record/$, as well as a Pattern as a key, and stores the iota in that record at that key to your Everbook at the same key.", + "hexal.page.everbook.everbook/delete": "Takes a pattern and removes the entry with that pattern key from your Everbook.", + "hexal.page.everbook.everbook/toggle_macro.0": "Takes a pattern and marks that entry of your Everbook as a Pattern that when drawn by your hand will be treated as any other of Nature's patterns.", + "hexal.page.everbook.everbook/toggle_macro.1": "When you draw the key of an Everbook entry that has been marked as a Pattern, if that entry is a list Nature will execute each element of the list as it would with $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$, though it does not use up an evaluation. Attempting to mark an entry as a Pattern if it is non-existent or infinitely recursive will fail.", + + "hexal.entry.everbook_entries": "Everbook Entries", + "hexal.page.everbook_entries.0": "Every page in this entry displays the pattern key for one of the entries of your $(l:patterns/everbook)$(action)Everbook/$.", + + "hexal.everbook_pattern_entry.header": "Stored Key: %d", + "hexal.everbook_pattern_entry.macro_header": "Macro Key: %d", + + + + "_comment": "Config Entries", + "text.autoconfig.hexal.title": "Hexal Configs", + "text.autoconfig.hexal.category.common": "Common", + "text.autoconfig.hexal.category.client": "Client", + "text.autoconfig.hexal.category.server": "Server", + + "text.autoconfig.hexal.option.server.terrainGeneration": "Terrain Generation", + "text.autoconfig.hexal.option.server.generateSlipwayGeodes": "Should generate Slipway Geodes?", + + "text.autoconfig.hexal.option.server.miscSpells": "Miscellaneous Spells", + "text.autoconfig.hexal.option.server.miscSpells.fallingBlockCost": "Falling Block Cost", + "text.autoconfig.hexal.option.server.miscSpells.freezeCost": "Freeze Cost", + "text.autoconfig.hexal.option.server.miscSpells.particlesCost": "Particles Cost per Vector", + "text.autoconfig.hexal.option.server.miscSpells.placeTypeCost": "Place Type Cost", + "text.autoconfig.hexal.option.server.miscSpells.smeltCost": "Smelt Cost per Item", + + "text.autoconfig.hexal.option.server.wispSpells": "Wisp Spells", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost": "Move Speed Set Base Cost", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[0]": "Cost to increase the movement speed of a wisp by 1.", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[1]": "This is the base cost, with greater increases being quadratically based on this.", + "text.autoconfig.hexal.option.server.wispSpells.summonTickingWispCost": "Summon Cyclic Wisp Cost", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispCost": "Summon Projectile Wisp Cost per Velocity Squared", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispMinCost": "Summon Cyclic Wisp Minimum Cost", + + "text.autoconfig.hexal.option.server.wispUpkeep": "Wisp Upkeep", + "text.autoconfig.hexal.option.server.wispUpkeep.tickingWispUpkeepPerTick": "Cyclic Wisp Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.projectileWispUpkeepPerTick": "Projectile Wisp Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount": "Untriggered Wisp Upkeep Discount", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[0]": "The upkeep cost of untriggered cyclic wisps is multiplied by this number.", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[1]": "Bounded from 0.0 to 1.0.", + "text.autoconfig.hexal.option.server.wispUpkeep.linkUpkeepPerTick": "Link Upkeep per Tick", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor": "Bound Wisp Discount Factor", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[0]": "The upkeep cost of bound wisps is divided by this number.", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[1]": "Bounded from 2.0 to 200.0.", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor": "Storing Player Cost Scale Factor", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[0]": "The multiplicative cost increase of wisps containing an iota of another player.", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[1]": "Bounded from 1.0 to 200.0.", + + "text.autoconfig.hexal.option.server.linkSpells": "Link Spells", + "text.autoconfig.hexal.option.server.linkSpells.linkCost": "Link Cost", + "text.autoconfig.hexal.option.server.linkSpells.sendIotaCost": "Send Iota Cost", + "text.autoconfig.hexal.option.server.linkSpells.unlinkCost": "Unlink Cost", + + "text.autoconfig.hexal.option.server.gateSpells": "Gate Spells", + "text.autoconfig.hexal.option.server.gateSpells.makeGateCost": "Make Gate Cost", + "text.autoconfig.hexal.option.server.gateSpells.markGateCost": "Mark Gate Cost", + "text.autoconfig.hexal.option.server.gateSpells.closeGateCost": "Close Gate Cost", + + "text.autoconfig.hexal.option.server.itemSpells": "Item Spells", + "text.autoconfig.hexal.option.server.itemSpells.bindStorageCost": "Bind Storage Cost", + "text.autoconfig.hexal.option.server.itemSpells.bindTemporaryStorageCost": "Bind Temporary Storage Cost", + "text.autoconfig.hexal.option.server.itemSpells.makeItemCost": "Make Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.returnItemCost": "Return Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.craftItemCost": "Craft Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.tradeItemCost": "Trade Item Cost", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned": "Maximum Items Returned", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[0]": "Maximum number of items that can be returned by Return Item.", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[1]": "Bounded from 640 to 64,000.", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage": "Maximum Num. Records in Mote Nexus", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[0]": "Maximum number of records that can be stored in a Mote Nexus.", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[1]": "Bounded from 128 to 16,384.", + + + "text.autoconfig.hexal.option.server.greatSpells": "Great Spells", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost": "Consume Own Wisp Cost", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[0]": "Cost to consume a wisp you own,", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[1]": "or that doesn't fight back for some other reason.", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia": "Consume Other's Wisp Cost per Media", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[0]": "Cost to consume a wisp that fights back, this number is multiplied by", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[1]": "the media possessed by the wisp you are attempting to consume.", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[2]": "Bounded from 1.0 to 20.0.", + "text.autoconfig.hexal.option.server.greatSpells.seonWispSetCost": "Bind Wisp Cost", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost": "Tick Constant Cost", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost.@Tooltip": "Constant cost to tick a block. Always applies.", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked": "Tick Cost per Time Ticked", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[0]": "Cost to tick a block per time that block has already been ticked.", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[1]": "Added to the constant cost above.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb": "Tick Inverse Probability of Random Ticking", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[0]": "The inverse probability of tick randomly ticking a block.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[1]": "Higher numbers make random ticks less likely, lower numbers make them more likely.", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[2]": "Bound from 600 to 2100." +} diff --git a/projects/1.20/assets/hexal/hexal/lang/zh_cn.json b/projects/1.20/assets/hexal/hexal/lang/zh_cn.json new file mode 100644 index 000000000000..619f8f5b43ef --- /dev/null +++ b/projects/1.20/assets/hexal/hexal/lang/zh_cn.json @@ -0,0 +1,410 @@ +{ + "block.hexal.slipway": "质道", + "block.hexal.mediafied_storage": "物元枢纽", + "block.hexal.relay": "继链器", + + "entity.hexal.wisp.projectile": "弹射式咒灵", + "entity.hexal.wisp.ticking": "循环式咒灵", + "entity.hexal.wisp.wandering": "游走咒灵", + + + "hexcasting.mishap.non_player": "%s需由玩家执行", + "hexcasting.mishap.no_wisp": "%s需由咒灵执行", + "hexcasting.mishap.others_wisp": "该咒灵为%s所有,而不是你", + "hexcasting.mishap.no_links": "%s没有链接", + "hexcasting.mishap.self_link": "试图将%s链接至其自身", + "hexcasting.mishap.no_bound_storage": "未绑定物元枢纽", + "hexcasting.mishap.storage_unloaded": "绑定的物元枢纽未被加载", + "hexcasting.mishap.excessive_reproduction": "咒灵%s试图过度复制,每刻仅可召唤1个子咒灵", + "hexcasting.mishap.illegal_interworld_iota": "试图将iota%s变为跨世界iota,此类型的iota无法加入永恒之书。", + + "hexcasting.mishap.invalid_value.class.linkable": "一个可链接的事物", + "hexcasting.mishap.invalid_value.class.wisp": "一个咒灵", + "hexcasting.mishap.invalid_value.class.consumable_entity": "一个可被拆解的实体", + "hexcasting.mishap.invalid_value.class.wisp.casting": "一个施法咒灵", + "hexcasting.mishap.invalid_value.class.type.block": "一个方块类型", + "hexcasting.mishap.invalid_value.class.type.item": "一个物品类型", + "hexcasting.mishap.invalid_value.class.type.entity": "一个实体或实体类型", + "hexcasting.mishap.invalid_value.class.type.block.able": "一个可代表方块的物品类型", + "hexcasting.mishap.invalid_value.class.type.list.double": "一个由数组成的列表", + "hexcasting.mishap.invalid_value.class.gate": "一个门径", + "hexcasting.mishap.invalid_value.class.mote": "一个物元", + "hexcasting.mishap.invalid_value.class.moteentity.itemitemframe": "一个物元、物品实体或物品展示框", + "hexcasting.mishap.invalid_value.moteitemtype": "一个物元或物品类型", + "hexcasting.mishap.invalid_value.motemotelist": "一个物元或物元列表", + "hexcasting.mishap.invalid_value.motemotelistmotelistlist": "一个物元、物元列表或由物元列表组成的列表", + "hexcasting.mishap.invalid_value.veclist": "一个向量或由向量组成的列表", + "hexcasting.mishap.invalid_value.blockitementityitemframeitem": "一个位置向量、物品实体、物品展示框或物品", + "hexcasting.mishap.invalid_value.entity.itemitemframe": "一个物品实体或物品展示框", + "hexcasting.mishap.invalid_value.int.strictly_positive": "一个严格大于零的整数", + "hexcasting.mishap.invalid_value.crafting_recipe": "一个有效的合成配方", + "hexcasting.mishap.invalid_value.mote_duplicated": "各物元仅出现一次", + "hexcasting.mishap.invalid_value.cant_combine_motes": "两个可合并的物元", + "hexcasting.mishap.invalid_value.mote_not_size_one": "一个不包含NBT数据或大小为1的物元", + "hexcasting.mishap.invalid_value.gate.offset": "不超过%f格的偏移量", + + + "hexcasting.iota.hexal:iota_type": "Iota类型", + "hexcasting.iota.hexal:entity_type": "实体类型", + "hexcasting.iota.hexal:item_type": "物品类型", + "hexcasting.iota.hexal:gate": "门径", + "hexcasting.iota.hexal:item": "物品", + + "hexal.spelldata.entity_type": "类型", + "hexal.spelldata.gate": "门径 %d", + "hexal.spelldata.mote": "%s x%d", + + "hexcasting.action.hexal:type/iota": "分类学家之纯化", + "hexcasting.action.hexal:type/entity": "内科医师之纯化", + "hexcasting.action.hexal:type/block_item": "分拣员之纯化", + "hexcasting.action.hexal:type/item_held": "分拣员之精思", + + "hexcasting.action.hexal:get_entity/type": "实体之馏化:类型", + "hexcasting.action.hexal:zone_entity/type": "区域之提整:类型", + "hexcasting.action.hexal:zone_entity/not_type": "区域之提整:非类型", + + "hexcasting.action.hexal:current_tick": "计时员之精思", + "hexcasting.action.hexal:breath": "潜水员之纯化", + "hexcasting.action.hexal:health": "护士之纯化", + "hexcasting.action.hexal:armour": "乡绅之纯化", + "hexcasting.action.hexal:toughness": "拳击手之纯化", + "hexcasting.action.hexal:light_level": "灯夫之纯化", + + "hexcasting.action.hexal:factorial": "阶乘之纯化", + "hexcasting.action.hexal:running/sum": "前缀和之纯化", + "hexcasting.action.hexal:running/mul": "前缀积之纯化", + + "hexcasting.action.hexal:everbook/read": "谟涅摩叙涅之策略", + "hexcasting.action.hexal:everbook/write": "极乐园之策略", + "hexcasting.action.hexal:everbook/delete": "忘川之策略", + "hexcasting.action.hexal:everbook/toggle_macro": "布莱之策略", + + "hexcasting.action.hexal:smelt": "烧炼", + "hexcasting.action.hexal:freeze": "冻结", + "hexcasting.action.hexal:falling_block": "坠落方块", + "hexcasting.action.hexal:place_type": "放置方块,第二型", + "hexcasting.action.hexal:particles": "粒子", + + "hexcasting.action.hexal:interop/fabric_only/phase_block": "暂消方块", + + "hexcasting.action.hexal:wisp/summon/projectile": "召唤弹射式咒灵", + "hexcasting.action.hexal:wisp/summon/ticking": "召唤循环式咒灵", + "hexcasting.action.hexal:wisp/self": "自我之精思", + "hexcasting.action.hexal:wisp/media": "储罐之精思", + "hexcasting.action.hexal:wisp/hex": "经理之纯化", + "hexcasting.action.hexal:wisp/owner": "效忠之馏化", + "hexcasting.action.hexal:wisp/move/target/set": "开拓者之策略", + "hexcasting.action.hexal:wisp/move/target/get": "开拓者之精思", + "hexcasting.action.hexal:wisp/move/speed/set": "急速", + "hexcasting.action.hexal:wisp/move/speed/get": "速度计之精思", + "hexcasting.action.hexal:wisp/trigger/tick": "延迟咒灵", + "hexcasting.action.hexal:wisp/trigger/comm": "监听", + "hexcasting.action.hexal:wisp/trigger/move": "巡航", + "hexcasting.action.hexal:wisp/consume": "拆解咒灵", + "hexcasting.action.hexal:wisp/seon/set": "绑定咒灵", + "hexcasting.action.hexal:wisp/seon/get": "密友之精思", + "hexcasting.action.hexal:wisp/transfer/allow": "允许转送", + "hexcasting.action.hexal:wisp/transfer/disallow": "禁止转送", + "hexcasting.action.hexal:wisp/transfer/others/allow": "允许转送其他", + "hexcasting.action.hexal:wisp/transfer/others/disallow": "禁止转送其他", + + "hexcasting.action.hexal:get_entity/wisp": "实体之纯化:咒灵", + "hexcasting.action.hexal:zone_entity/wisp": "区域之馏化:咒灵", + "hexcasting.action.hexal:zone_entity/not_wisp": "区域之馏化:非咒灵", + + "hexcasting.action.hexal:link": "链接", + "hexcasting.action.hexal:link/others": "链接其他", + "hexcasting.action.hexal:link/unlink": "解链接", + "hexcasting.action.hexal:link/unlink/others": "解链接其他", + "hexcasting.action.hexal:link/get": "电话簿之纯化", + "hexcasting.action.hexal:link/get_index": "识别之纯化", + "hexcasting.action.hexal:link/num": "名气之精思", + + "hexcasting.action.hexal:link/comm/send": "发送Iota", + "hexcasting.action.hexal:link/comm/read": "朗诵之精思", + "hexcasting.action.hexal:link/comm/num": "邮政局长之精思", + "hexcasting.action.hexal:link/comm/clear": "除塞之策略", + "hexcasting.action.hexal:link/comm/open_transmit": "开始发信", + "hexcasting.action.hexal:link/comm/close_transmit": "结束发信", + + "hexcasting.action.hexal:gate/make": "门径之精思", + "hexcasting.action.hexal:gate/mark": "开启门径", + "hexcasting.action.hexal:gate/unmark": "解除门径", + "hexcasting.action.hexal:gate/mark/num/get": "标径之纯化", + "hexcasting.action.hexal:gate/mark/get": "标径之馏化", + "hexcasting.action.hexal:gate/close": "关闭门径", + + "hexcasting.action.hexal:mote/storage/bind": "绑定储库", + "hexcasting.action.hexal:mote/storage/bind/temp": "绑定储库,临时型", + "hexcasting.action.hexal:mote/contained_type/get": "盘货之精思", + "hexcasting.action.hexal:mote/contained/get": "盘货之纯化", + "hexcasting.action.hexal:mote/storage/remaining_capacity/get": "容量之精思", + "hexcasting.action.hexal:mote/storage/contains": "容纳之馏化", + "hexcasting.action.hexal:mote/make": "媒质化物品", + "hexcasting.action.hexal:mote/return": "返还物品", + "hexcasting.action.hexal:mote/count/get": "衡数之纯化", + "hexcasting.action.hexal:mote/combine": "堆叠之馏化", + "hexcasting.action.hexal:mote/combinable": "堆叠之馏化,第二型", + "hexcasting.action.hexal:mote/split": "拆分之策略", + "hexcasting.action.hexal:mote/storage/get": "货场之纯化", + "hexcasting.action.hexal:mote/storage/set": "货场之策略", + "hexcasting.action.hexal:mote/craft": "合成", + "hexcasting.action.hexal:mote/craft/preview": "预览合成", + "hexcasting.action.hexal:mote/villager/level/get": "资历之纯化", + "hexcasting.action.hexal:mote/trade/get": "报价之纯化", + "hexcasting.action.hexal:mote/trade": "交易", + "hexcasting.action.hexal:mote/use_on": "使用物品", + + "hexcasting.action.hexal:tick": "加速", + + + + "hexcasting.action.book.hexal:light_level": "灯夫之纯化", + + "hexcasting.action.book.hexal:running/sum": "前缀和之纯化", + "hexcasting.action.book.hexal:running/mul": "前缀积之纯化", + + "hexcasting.action.book.hexal:get_entity/wisp": "实体之纯化:咒灵", + "hexcasting.action.book.hexal:zone_entity/wisp": "区域之馏化:咒灵", + "hexcasting.action.book.hexal:zone_entity/not_wisp": "区域之馏化:非咒灵", + + "hexcasting.action.book.hexal:mote/storage/bind/temp": "绑定储库,临时型", + + + + "hexal.entry.slipways": "质道", + "hexal.page.slipways": "我曾听说过某些晶洞中有形如泛着光的传送门的东西,它们被称作“质道”。这些质道通常“被莹莹光点围绕”,和我所知的$(l:patterns/spells/wisps)$(thing)咒灵/$十分相似。也许它们之间的联系值得研究。", + + "hexal.entry.relay": "继链器", + "hexal.page.relay.0": "我常希望有方法能$(l:patterns/spells/links#hexal:link)$(action)连接/$多个$(l:patterns/spells/wisps)$(thing)咒灵/$,以便远距共享媒质和信息。然而用咒灵远距中继相当不方便,常态消耗也很大。为解决这些问题,我制造出了继链器。它们是固态方块而非媒质构造体,也因此在维持链接时不会有常态消耗。", + "hexal.page.relay.1": "相互连接的继链器会形成网络,与之连接的咒灵会共享媒质,类似于咒灵间直接相连。此外,传给网络内任一继链器的 iota 会发送给连接至网络的所有非继链器事物。继链器的工作范围是 32 格(也即两个继链器可链接的最远距离为 64 格)。手持染色剂右击任一继链器即可改变网络链接的颜色。", + "hexal.page.relay.2": "继链器没有所有者,若要我的咒灵和其$(l:patterns/spells/wisps#hexal:wisp/transfer/allow)$(action)转送媒质/$,则必须先允许咒灵这么做。", + + "hexal.entry.hexal_basics": "咒法拓展:基础图案", + "hexal.page.hexal_basics.current_tick": "返回一个数,这个数似乎与自然记录时间的方式有关。如果先绘制一遍此图案,在 1 秒后再绘制一遍,返回的数会增加 20。", + "hexal.page.hexal_basics.breath": "移除栈顶实体,并返回其剩余氧气值(也即距其溺水还有多少氧气值可消耗)。", + "hexal.page.hexal_basics.health": "移除栈顶实体,并返回其剩余生命值(也即距其死亡还有多少生命值可损失)。", + "hexal.page.hexal_basics.armour": "移除栈顶实体,并返回其护甲值。", + "hexal.page.hexal_basics.toughness": "移除栈顶实体,并返回其盔甲韧性(盔甲的另一属性)。", + "hexal.page.hexal_basics.light_level": "移除栈顶位置向量,并返回该处光照强度。", + + "hexal.entry.hexal_maths": "咒法拓展:数学", + "hexal.page.hexal_maths.factorial": "移除栈顶数,返回其阶乘。例如输入 4 则会返回 4 * 3 * 2 * 1 = 24。", + "hexal.page.hexal_maths.running/sum": "接受栈顶列表,并计算其前缀和。例如输入 [1, 2, 5] 则会返回 [1, 3, 8]。", + "hexal.page.hexal_maths.running/mul": "接受栈顶列表,并计算其前缀积。例如输入 [1, 2, 5] 则会返回 [1, 2, 10]。", + + "hexal.entry.hexal_spell": "咒法拓展:法术", + "hexal.page.hexal_spell.smelt.0": "移除栈顶位置向量、物品实体或物元,然后烧炼该处方块,或同时烧炼物品实体或物元中所有物品。", + "hexal.page.hexal_spell.smelt.1": "每烧炼一个物品消耗 3/4 个$(l:items/amethyst)$(item)紫水晶粉/$。(也即烧炼 1 个方块消耗 3/4 个$(l:items/amethyst)$(item)紫水晶粉/$,同时烧炼 8 个物品消耗 6 个$(l:items/amethyst)$(item)紫水晶粉/$。)", + "hexal.page.hexal_spell.freeze": "冻结所给坐标处方块。例如,水变为冰,冰变为浮冰。消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.hexal_spell.falling_block": "移除栈顶位置向量,并使该处方块下落,就像沙子和沙砾一样。消耗 3/2 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.hexal_spell.place_type": "接受一个物品类型或物元和一个位置向量,并会尝试在该位置处放置所给物品类型的方块。若传入物元,则会从对应的物元记录中放置。消耗 1/8 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.hexal_spell.particles": "接受一个位置向量或一个由位置向量组成的列表,并在所给位置处生成粒子,或在所给列表各位置之间生成粒子连线。每个位置向量消耗 1/500 个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.fabric_only_hexal": "咒术拓展:Fabric 独占法术", + "hexal.page.fabric_only_hexal.interop/fabric_only/phase_block": "接受一个位置向量和一个数,并使所给位置上方块的体积消失所给数秒。消耗 1/1000 与消失时间的平方的乘积个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.wisps": "咒灵", + "hexal.page.wisps.0": "我发现了一种能仅以媒质创造法术构造体的方式,它们能被他人看见,能移动,也有一定自主行动能力。它们能代替我施法,和$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。不过保持它们的形态确实要耗费我的注意力,而且如果太多咒灵要同时施法,我也只能同时运行其中一部分,剩下的则要稍作延迟。", + "hexal.page.wisps.1": "创造咒灵时需要给它们分配它们能访问的一块媒质“储库”(后称媒质库)。这些媒质由我提供,用于形成咒灵本身。咒灵会常态消耗媒质,而当其运行其携带的图案列表时,其中各操作要消耗的媒质也会从媒质库中抽取。所有种类的咒灵似乎都需要 3 个$(l:items/amethyst)$(item)紫水晶粉/$才能召唤,并同时消耗等同于其媒质库容量的媒质。", + "hexal.page.wisps.2": "试图持有其他施法者真名的咒灵会被严厉惩罚,其所有 iota 存储位置中每有一个真名都会使其常态消耗增加 20 倍。", + "hexal.page.wisps.wisp/summon/projectile.0": "这种咒灵被召唤时会像箭一样被弹射出去,而后会在其击中的事物上施放咒术。其初始栈包含一个代表其自身的 iota 和一个代表其击中的事物的 iota。", + "hexal.page.wisps.wisp/summon/projectile.1": "第二个 iota 可以是一个位置向量,也可以是一个实体。第二个向量的模似乎会影响咒灵的速度,此法术消耗的媒质量会以速度向量模的平方增加。接受的数代表咒灵媒质库的容量(以$(l:items/amethyst)$(item)紫水晶粉/$计)。召唤后它每秒会消耗 3/10 个$(l:items/amethyst)$(item)紫水晶粉/$,且其影响区域半径为 4 格。", + "hexal.page.wisps.wisp/summon/ticking.0": "此法术与召唤弹射式咒灵类似,但只会接受一个代表召唤位置的向量。循环式咒灵一经召唤就不再移动,并会以每秒 20 次的频率施法。", + "hexal.page.wisps.wisp/summon/ticking.1": "其初始栈包含一个代表其自身的 iota,而后每次施法开始时会保留上一次施法后的栈和渡鸦之思。这种咒灵的形态较不稳定,常态消耗率远大于弹射式咒灵。其每秒消耗 7/10 个$(l:items/amethyst)$(item)紫水晶粉/$。其影响区域半径为 8 格。", + "hexal.page.wisps.wisp/self": "返回一个代表施法咒灵的 iota。此操作必须由咒灵执行。尝试用法杖执行会招致可怖的事故。", + "hexal.page.wisps.wisp/media": "将咒灵媒质库中剩余的媒质量压入栈顶。此操作必须由咒灵执行。尝试用法杖执行会招致可怖的事故。", + "hexal.page.wisps.wisp/hex": "移除一个咒灵实体,并返回该咒灵所携带的咒术。所给 iota 必须代表由我召唤的咒灵,或$(l:patterns/spells/wisps#hexal:wisp/transfer/allow)允许/$与施法者或其所有者转送的咒灵。", + "hexal.page.wisps.wisp/owner": "移除一个咒灵实体和一个实体,若该实体是该咒灵的所有者,返回 True;否则返回 False。", + "hexal.page.wisps.wisp/move/target/set": "移除栈顶位置向量。运行此图案的循环式咒灵会沿直线移动至所给位置(会与途中地形地貌等碰撞),直至抵达该位置处。", + "hexal.page.wisps.wisp/move/target/get": "返回循环式咒灵当前目标位置的位置向量。", + "hexal.page.wisps.wisp/move/speed/set": "移除栈顶数,并将循环式咒灵自身的速度上限设为该数。", + "hexal.page.wisps.wisp/move/speed/get": "返回循环式咒灵自身当前速度上限。", + "hexal.page.wisps.wisp/transfer/allow": "当两咒灵$(l:patterns/spells/links)$(thing)连接/$时,它们会相互转送媒质,直至两者平衡。默认状况下,仅所有者相同的咒灵会自发转送。此操作接受一个编号数,并显式允许咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.wisp/transfer/disallow": "相应地,此操作接受一个编号数,并禁止咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.wisp/transfer/others/allow": "接受一个咒灵实体(所有者需是我)和一个编号数,并允许该咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.wisp/transfer/others/disallow": "接受一个咒灵实体(所有者需是我)和一个编号数,并禁止该咒灵与该编号链接另一端的事物交换媒质。", + "hexal.page.wisps.get_entity/wisp": "将栈顶位置向量变为该处咒灵(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + "hexal.page.wisps.zone_entity/wisp": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有咒灵的列表。", + "hexal.page.wisps.zone_entity/not_wisp": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非咒灵实体的列表。", + "hexal.page.wisps.wisp/trigger/tick": "移除栈顶数,然后将咒灵下一次施法时刻更改为延迟所给数个 1/20 秒。所有可用于延迟咒灵施法的操作均能使咒灵的常态消耗减半,直到下一次施法为止。", + "hexal.page.wisps.wisp/trigger/comm": "咒灵将在其收到至少一次$(l:patterns/spells/links#hexal:link/comm/send)$(action)通信/$后才进行下一次施法。", + "hexal.page.wisps.wisp/trigger/move": "咒灵将在其抵达被$(l:patterns/spells/wisps#hexal:wisp/move/target/set)$(action)导向/$的位置后才进行下一次施法。", + + "hexal.entry.links": "链接", + "hexal.page.links.0": "这些图案大致构建了一套能在$(l:patterns/spells/wisps)$(thing)咒灵/$间以及咒灵和其他事物间传递信息的系统。有若干图案与创建链接有关,也有些图案和通过链接发送和接收 iota 的方式相关。一个咒灵能同时维持任意数目的链接,每条每 1/20 秒常态消耗极少量媒质。", + "hexal.page.links.1": "可链接事物会以创建顺序为这些链接编号,此编号可用作图案的参数。介绍中的“可链接事物”(Linkable)不是具体参数类型,而是指代所有可被转换为可链接事物的类型。(例如,Entity -> Linkable entity,Vec -> Linkable block 等等。)链接仅会在两可链接事物影响范围之和的两倍内起效。若要跨更远的距离连接两者,应该转而使用$(l:items/relay)$(item)继链器/$。", + "hexal.page.links.link": "将施法者链接至栈顶实体,且实体必须为可链接的。消耗 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", + "hexal.page.links.link/others": "可在任意施法器件上运行。将两个实体链接,且两实体必须均为可链接的。消耗 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", + "hexal.page.links.link/unlink": "断开施法者的编号为所给数的链接。消耗 2 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.links.link/unlink/others": "接受两个可链接事物,若其间存在链接,则会将其断开。消耗 2 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.links.link/get": "移除栈顶数,并返回对应编号的链接所连的实体。", + "hexal.page.links.link/get_index": "移除栈顶实体,并返回自身与该实体相连的链接的编号。若施法者与其无链接则返回 -1。", + "hexal.page.links.link/num": "返回自身的链接个数。", + "hexal.page.links.link/comm/send": "移除栈顶元素与数,而后向编号为该数的链接发送该元素。消耗 1/100 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.links.link/comm/read": "当接收到 iota 时其将被加至一个队列中。此图案会将该队列中的首个 iota 压入栈顶并移出队列。", + "hexal.page.links.link/comm/num": "返回接收队列中未读 iota 的个数。", + "hexal.page.links.link/comm/clear": "移除施法者接收队列中所有未读 iota。", + "hexal.page.links.link/comm/open_transmit": "与$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$类似。在绘制$(l:patterns/spells/links#hexal:link/comm/close_transmit)$(action)结束发信/$后,所有我绘制的图案会通过编号为栈顶数的链接发送出去。", + "hexal.page.links.link/comm/close_transmit": "在$(l:patterns/spells/links#hexal:link/comm/open_transmit)$(action)开始发信/$之后绘制,意味着发信过程结束。如果$(l:patterns/spells/links#hexal:link/comm/open_transmit)$(action)开始发信/$或$(l:patterns/spells/links#hexal:link/comm/close_transmit)$(action)结束发信/$是由中介施法者(如咒灵)运行的话,则会产生事故。", + + "hexal.entry.tick": "加速", + "hexal.page.tick.tick.0": "在法术运行的那一刻,加速所给位置处方块的运作。", + "hexal.page.tick.tick.1": "施放此法术要消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$,在整个咒术内,每对同一方块加速一次,额外消耗 1/1000 个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.gates": "门径", + "hexal.page.gates.0": "门径是我有关空间远距连接和瞬间移动的长时间研究的最新成果。与我之前的试验不同的是,它能$(o)极为高效地$()完成传送任务。我已学会构造三种不同的门径,所有三种都需要巨量的媒质才能烧入现实,但后续的操作则相较之下极为便宜。", + "hexal.page.gates.1": "位置锚定门径与世界上某一位置绑定,会将所有穿过它们的事物送至该位置。实体锚定门径则与世界上某一实体绑定,会将所有穿过它们的事物送至该实体处(可附带一个偏移向量,需在烧入门径时提供)。", + "hexal.page.gates.2": "未锚定门径没有与任何事物绑定,可用于将实体送至任意位置。但其效率也会相应降低,只能将实体送至我所能影响的范围内的位置。门径烧入成功后,我的栈上便会出现一个代表其的 iota。我能以此 iota 标记实体,如此当我关闭门径时,所有被标记的实体就会被传送至门径终点。需注意关闭门径不会将其消耗,获得门径 iota 后便能永久使用。", + "hexal.page.gates.gate/make": "压入一个新的门径。所有此 iota 的复制品都指向同一个门径。消耗 32 个$(l:items/amethyst)$(item)充能紫水晶/$。若传入 Null,则构造未锚定门径;若传入一个向量,则构造位置锚定门径;若传入一个向量和一个实体,则构造实体锚定门径。", + "hexal.page.gates.gate/mark": "移除栈顶实体与门径,并标记该实体,被标记的实体会在对应门径关闭时被传送。消耗 1/20 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.gates.gate/unmark": "移除栈顶门径与实体,并取消该实体的标记。若其已被$(l:patterns/great_spells/gates#hexal:gate/mark)$(action)开启门径/$标记,下一次门径关闭时其将不会被传送。", + "hexal.page.gates.gate/mark/num/get": "移除栈顶门径,返回被该门径标记的实体的数量。", + "hexal.page.gates.gate/mark/get": "移除栈顶门径和实体,判断该实体是否被该门径标记。", + "hexal.page.gates.gate/close": "移除栈顶锚定门径,或未锚定门径与位置向量。将所有被所给门径标记的实体传送至其锚定位置或所给位置。消耗 1/2 个$(l:items/amethyst)$(item)紫水晶碎片/$。若为未锚定门径,则每个实体每传送 1 格额外消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "hexal.entry.motes": "物元", + "hexal.page.motes.explanation.0": "此条目主要记述如何将物品本身拉进媒质,使其可被引用,可被计数,并将秩序带给它们也带给我也带给我的意识也带给——。压入栈中的媒质化物品 iota(称为“物元”)都代表着物元枢纽中的某个物元记录。这是因为假如没有东西承载物品中的思维模式,物品本身就会消亡——就像我的意识的剥脱——", + "hexal.page.motes.explanation.1": "所有物元 iota 的复制版本都指向同一物元记录,也正因此,对其中一个做出的修改将同步到所有复制版本中去。拆分与合并与合成与交易都影响所有影响所有——", + "hexal.page.motes.explanation.2": "物元枢纽也有部分限制,但也只是部分。它最多能存放 1023 条记录,但每条记录中物品的个数则没有上限。我还没发现任何能证明上限存在的证据,我能合并再合并再合并再合并直到永远记录增长然后增长然后增……", + "hexal.page.motes.mediafed_storage_recipe": "物元枢纽是用制图师的意识制成的,它会永不中断地标记和映射对应$(item)潜影盒/$中的物品。", + "hexal.page.motes.mote/storage/bind": "锚定一个物元枢纽,并将自身与其绑定,所有我媒质化的物品都会存入该枢纽。若锚定至其他枢纽则会自动解开与原枢纽的绑定。消耗 32 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/storage/bind/temp": "锚定一个物元枢纽,在当前咒术结束前将自身与其绑定。其在本咒术内会暂时覆盖永久性绑定的枢纽。消耗 1/1000 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/contained_type/get": "获取当前绑定的枢纽中所有物元的类型。", + "hexal.page.motes.mote/contained/get": "获取当前绑定的枢纽中所有和所给物品类型对应的,或所有可与所给物元合并的物元。", + "hexal.page.motes.mote/storage/remaining_capacity/get": "获取所绑定的枢纽剩余的空间。", + "hexal.page.motes.mote/storage/contains": "若所给位置的物元枢纽中包含所给类型的物元,或包含可与所给物元合并的物元,则返回 True,否则返回 False。", + "hexal.page.motes.mote/make": "将世界中的物品(物品实体、物品展示框)转换为物元。若传入物元,则会将所给物体与该物元合并。媒质化 1 份物品消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/return": "将物元中所有物品返还到所给位置处。若传入数,则最多返还该数个物品。消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/count/get": "接受物元,并返回该物元对应的记录中物品的个数。", + "hexal.page.motes.mote/combine": "将两个物元合并,也同时合并两者所指向的物元记录。指向第二条记录的物元会变为 Null,指向第一条的物元不会。如此就能在栈中放下远超我随身携带量的物品了!", + "hexal.page.motes.mote/combinable": "若第一参数物元可与第二参数(物元、物品组、物品实体、物品展示框)中物品合并,返回 True,否则返回 False。", + "hexal.page.motes.mote/split": "从所给物元中拆分出所给数个物品,以此创建一条物元记录并返回对应物元 iota。", + "hexal.page.motes.mote/storage/get": "获取存储所给物元的枢纽的位置。", + "hexal.page.motes.mote/storage/set": "将所给物元对应的记录转移到所给位置处的物元枢纽中,并会返回指向新记录的物元 iota,且所有指向原记录的物元均会失效。", + "hexal.page.motes.mote/craft.0": "接受物元,物元组成的列表,或物元列表组成的列表。并返回包含以对应物品合成所得产物的列表。例如,输入“石头 x128”会返回 [石头按钮 x128]。", + "hexal.page.motes.mote/craft.1": "更为复杂的合成表则需要在对应位置插入 Null。例如合成钻石镐,会需要 [[钻石 x2, 钻石 x2, 钻石 x2], [Null, 木棍 x2], [Null, 木棍 x2]],并返回 [钻石镐 x2]。消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/craft/preview": "参数与$(l:patterns/spells/motes#hexal:mote/craft)$(action)合成/$相同,且除物元外还能接受物品组。返回物品组列表,各元素代表$(l:patterns/spells/motes#hexal:mote/craft)$(action)合成/$接受相应物元时产出的各产物。", + "hexal.page.motes.mote/villager/level/get": "接受代表村民的 iota,并返回代表该村民在其职业上熟练度的数。", + "hexal.page.motes.mote/trade/get.0": "接受代表村民的 iota,并返回该村民所有的交易选项,返回结果是列表的列表的列表。每项交易由两个列表组成,内容分别为给出的物品和换得的物品。换得物品列表由对应的物品类型和可换得物品的数量组成。", + "hexal.page.motes.mote/trade/get.1": "给出物品列表则由一对或两对物品类型与对应数量组成。例如,一项交易可能形如 [[[绿宝石, 1]], [红石粉, 1]]。", + "hexal.page.motes.mote/trade.0": "接受代表村民的 iota,由物元组成的列表(用于交易),和代表交易次序的整数(可选)。(上方的 int? 表示可传入 2 或 3 个参数,可选的第三个参数需为整数。)", + "hexal.page.motes.mote/trade.1": "若不输入次序数,则会依次寻找交易选项,直到找到接受所给物品的选项为止。若输入,则会直接跳转至该交易选项处。这之后便会一直进行交易,直到物品耗尽或是村民停用该项为止。交易结束后会返回由所获得的物品组成的物元。", + "hexal.page.motes.mote/trade.2": "村民会将这些交易视作直接与我进行,且会获得经验,并以此精进技艺并改进交易选项。消耗 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "hexal.page.motes.mote/use_on": "接受一个物元和一个实体或位置向量和法向量。并对实体或所给位置处方块使用物元中物品。物元本身需只能含有一个物品,除非其中物品极为简单(无 NBT 数据)。", + + "hexal.entry.great_wisps": "卓越咒灵法术", + "hexal.page.great_wisps.wisp/consume.0": "移除栈顶咒灵实体,并拆解该咒灵。咒灵携带的图案不可追回,但是如果此法术是由其他咒灵施放的,那么被拆解咒灵所剩的媒质还可再加利用。", + "hexal.page.great_wisps.wisp/consume.1": "若咒灵的所有者是我,或其被$(l:patterns/spells/wisps#hexal:wisp/transfer/allow)允许/$与施法者或其所有者转送,消耗 1 个$(l:items/amethyst)$(item)紫水晶碎片/$;若咒灵的所有者是他人且未被允许转送,则消耗该咒灵所拥有的媒质量的一半。媒质的再利用效率不算特别高,会在传输过程中损耗掉被拆解咒灵媒质库容量的 1/20。", + "hexal.page.great_wisps.wisp/seon/set": "在我的咒灵和我之间建立更紧密的联系。我只能同时绑定一个咒灵,但绑定咒灵的常态消耗将大大减少。", + "hexal.page.great_wisps.wisp/seon/get": "返回我当前绑定的咒灵。(这并不是卓越法术,记载于此是为了方便查找。)", + + "hexal.entry.types": "类型", + "hexal.page.types.type/iota": "移除栈顶元素,并返回该 iota 的类型。", + "hexal.page.types.type/entity": "移除栈顶实体,并返回该实体的类型。", + "hexal.page.types.type/block_item": "移除栈顶位置向量,$(l:hexal.entry.motes)$(item)物元/$,物品实体或物品展示框,并返回该处方块的类型或对应物品类型。(如草方块、石头、木棍等。)", + "hexal.page.types.type/item_held": "若施法者副手中有物品,则将其类型压入栈顶;若无,则压入施法用手中物品的类型。", + + "hexal.page.types.get_entity/type": "从栈顶获取实体类型和位置向量,返回该位置符合该类型的实体(若有)。", + "hexal.page.types.zone_entity/type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有符合给定类型的实体的列表。", + "hexal.page.types.zone_entity/not_type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有不符合给定类型的实体的列表。", + + + "hexal.entry.everbook": "永恒之书", + "hexal.page.everbook.0": "永恒之书是一片奇特的空间,如今已对我残破的意识开放。似乎有许多个我共用所有永恒之书的记录,共享不同世界的研究成果,又不断重新研究。永恒之书能够将图案和 iota 对应并存储,和$(l:greatwork/akashiclib)$(item)阿卡夏记录/$类似。不过考虑到如今我意识的脆弱,可能还是把永恒之书的访问权限全部交给$(l:greatwork/akashiclib)$(item)阿卡夏记录/$比较好。只要在某个世界中获得启迪,我就能在那个世界中访问永恒之书的所有内容。", + "hexal.page.everbook.everbook/read": "接受指向$(l:greatwork/akashiclib)$(item)阿卡夏记录/$的位置向量,与一个作为键的图案,并返回永恒之书中对应键处的 iota,若能存储则同时会将其存至给定的$(l:greatwork/akashiclib)$(item)阿卡夏记录/$中。", + "hexal.page.everbook.everbook/write": "接受指向$(l:greatwork/akashiclib)$(item)阿卡夏记录/$的位置向量,与一个作为键的图案,并将阿卡夏记录中该图案对应的 iota 以同一图案存至永恒之书中。", + "hexal.page.everbook.everbook/delete": "接受一个图案,并移除永恒之书中该图案对应的条目。", + "hexal.page.everbook.everbook/toggle_macro.0": "接受一个图案,并以该图案标记永恒之书中对应条目,使得绘制该图案所产生的效果和自然创造的其他图案相仿。", + "hexal.page.everbook.everbook/toggle_macro.1": "当绘制被标记的永恒之书条目所对应的图案时,如果对应条目存有一个列表,则自然会如同$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$一样依次执行列表中各元素,但不会消耗递归层数。试图将不存在的条目或是会无限递归的条目标记为图案则会失败。", + + "hexal.entry.everbook_entries": "永恒之书条目", + "hexal.page.everbook_entries.0": "此条目中每一页都会显示我$(l:patterns/everbook)$(action)永恒之书/$中某一条目对应的图案键。", + + "hexal.everbook_pattern_entry.header": "存储键:%d", + "hexal.everbook_pattern_entry.macro_header": "宏键:%d", + + + + "_comment": "Config Entries", + "text.autoconfig.hexal.title": "咒法拓展(Hexal)配置", + "text.autoconfig.hexal.category.common": "Common", + "text.autoconfig.hexal.category.client": "Client", + "text.autoconfig.hexal.category.server": "Server", + + "text.autoconfig.hexal.option.server.terrainGeneration": "世界生成", + "text.autoconfig.hexal.option.server.generateSlipwayGeodes": "是否生成质道晶洞?", + + "text.autoconfig.hexal.option.server.miscSpells": "杂项法术", + "text.autoconfig.hexal.option.server.miscSpells.fallingBlockCost": "“坠落方块”媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.freezeCost": "“冻结”媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.particlesCost": "“粒子”每个向量的媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.placeTypeCost": "“放置方块,第二型”媒质消耗", + "text.autoconfig.hexal.option.server.miscSpells.smeltCost": "“烧炼”每个物品的媒质消耗", + + "text.autoconfig.hexal.option.server.wispSpells": "咒灵法术", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost": "“急速”基础媒质消耗", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[0]": "使咒灵的移动速度增加1所需的媒质量。", + "text.autoconfig.hexal.option.server.wispSpells.moveSpeedSetCost.@Tooltip[1]": "这个数值是基础媒质消耗,若单次增加更多,实际消耗量依照二次函数变化。", + "text.autoconfig.hexal.option.server.wispSpells.summonTickingWispCost": "“召唤循环式咒灵”媒质消耗", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispCost": "“召唤弹射式咒灵”每速度平方的媒质消耗", + "text.autoconfig.hexal.option.server.wispSpells.summonProjectileWispMinCost": "“召唤循环式咒灵”媒质消耗下限", + + "text.autoconfig.hexal.option.server.wispUpkeep": "咒灵维持", + "text.autoconfig.hexal.option.server.wispUpkeep.tickingWispUpkeepPerTick": "循环式咒灵每刻维持消耗", + "text.autoconfig.hexal.option.server.wispUpkeep.projectileWispUpkeepPerTick": "弹射式咒灵每刻维持消耗", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount": "不活跃咒灵维持消耗减免", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[0]": "不活跃的循环式咒灵的维持媒质消耗会与此数乘算。", + "text.autoconfig.hexal.option.server.wispUpkeep.untriggeredWispUpkeepDiscount.@Tooltip[1]": "取值范围为0.0到1.0。", + "text.autoconfig.hexal.option.server.wispUpkeep.linkUpkeepPerTick": "链接每刻维持消耗", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor": "绑定咒灵维持消耗减免因数", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[0]": "被绑定的咒灵的维持媒质消耗会除以此数。", + "text.autoconfig.hexal.option.server.wispUpkeep.seonDiscountFactor.@Tooltip[1]": "取值范围为2.0到200.0。", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor": "存储玩家iota媒质消耗乘算因数", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[0]": "存有代表其他玩家的iota的咒灵的媒质消耗会与此数乘算。", + "text.autoconfig.hexal.option.server.wispUpkeep.storingPlayerCostScaleFactor.@Tooltip[1]": "取值范围为1.0到200.0。", + + "text.autoconfig.hexal.option.server.linkSpells": "链接法术", + "text.autoconfig.hexal.option.server.linkSpells.linkCost": "“链接”媒质消耗", + "text.autoconfig.hexal.option.server.linkSpells.sendIotaCost": "“发送Iota”媒质消耗", + "text.autoconfig.hexal.option.server.linkSpells.unlinkCost": "“解链接”媒质消耗", + + "text.autoconfig.hexal.option.server.gateSpells": "门径法术", + "text.autoconfig.hexal.option.server.gateSpells.makeGateCost": "“门径之精思”媒质消耗", + "text.autoconfig.hexal.option.server.gateSpells.markGateCost": "“开启门径”媒质消耗", + "text.autoconfig.hexal.option.server.gateSpells.closeGateCost": "“关闭门径”媒质消耗", + + "text.autoconfig.hexal.option.server.itemSpells": "物品法术", + "text.autoconfig.hexal.option.server.itemSpells.bindStorageCost": "“绑定储库”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.bindTemporaryStorageCost": "“绑定储库,临时型”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.makeItemCost": "“媒质化物品”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.returnItemCost": "“返还物品”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.craftItemCost": "“合成”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.tradeItemCost": "“交易”媒质消耗", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned": "最大返还物品数", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[0]": "“返还物品”单次最多能返还的物品数量。", + "text.autoconfig.hexal.option.server.itemSpells.maxItemsReturned.@Tooltip[1]": "取值范围为640到64000。", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage": "物元枢纽最大记录条数", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[0]": "单个物元枢纽中最多能存储的物元记录条数。", + "text.autoconfig.hexal.option.server.itemSpells.maxRecordsInMediafiedStorage.@Tooltip[1]": "取值范围为128到16384。", + + + "text.autoconfig.hexal.option.server.greatSpells": "卓越法术", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost": "拆解自己的咒灵的媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[0]": "拆解咒灵(咒灵的所有者是自己)的媒质消耗,", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOwnCost.@Tooltip[1]": "也适用于拆解出于某些原因不会反抗的咒灵。", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia": "拆解他人的咒灵的单位媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[0]": "拆解会反抗的咒灵的媒质消耗,此数会与", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[1]": "被拆解的咒灵身上含有的媒质总量乘算。", + "text.autoconfig.hexal.option.server.greatSpells.consumeWispOthersCostPerMedia.@Tooltip[2]": "取值范围为1.0到20.0。", + "text.autoconfig.hexal.option.server.greatSpells.seonWispSetCost": "“绑定咒灵”媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost": "“加速”常态媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.tickConstantCost.@Tooltip": "加速方块运作常态媒质消耗。每次使用均会消耗。", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked": "“加速”每加速刻累计媒质消耗", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[0]": "加速方块运作时,之前每加速一刻额外消耗的增长量。", + "text.autoconfig.hexal.option.server.greatSpells.tickCostPerTicked.@Tooltip[1]": "会与上方常态媒质消耗加算。", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb": "“加速”随机刻的逆概率", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[0]": "“加速”加速方块随机刻的逆概率。", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[1]": "此数越大,越不可能加速随机刻;此数越小,越可能加速随机刻。", + "text.autoconfig.hexal.option.server.greatSpells.tickRandomTickIProb.@Tooltip[2]": "取值范围为600到2100。" +} diff --git a/projects/1.20/assets/moreiotas/moreiotas/README.md b/projects/1.20/assets/moreiotas/moreiotas/README.md new file mode 100644 index 000000000000..e355e9a60ec0 --- /dev/null +++ b/projects/1.20/assets/moreiotas/moreiotas/README.md @@ -0,0 +1,19 @@ +### 总概 + +```mermaid +flowchart LR + 1.20.1 -->|indirect| 1.20.1-fabric + 1.19.2 +``` + +``` +1.20.1 + └── 1.20.1-fabric +1.19.2 +``` + +### 链接区域 + +- [1.19.2](/projects/1.19/assets/moreiotas/moreiotas) +- [1.20.1](/projects/1.20/assets/moreiotas/moreiotas) +- [1.20.1-fabric](/projects/1.20-fabric/assets/moreiotas/moreiotas) \ No newline at end of file diff --git a/projects/1.20/assets/moreiotas/moreiotas/lang/en_us.json b/projects/1.20/assets/moreiotas/moreiotas/lang/en_us.json new file mode 100644 index 000000000000..80ba96992172 --- /dev/null +++ b/projects/1.20/assets/moreiotas/moreiotas/lang/en_us.json @@ -0,0 +1,171 @@ +{ + "hexcasting.mishap.invalid_value.matrix.nonsingular": "a non-singular matrix.", + + "hexcasting.iota.moreiotas:string": "String", + "hexcasting.iota.moreiotas:matrix": "Matrix", + "hexcasting.iota.moreiotas:iota_type": "Iota Type", + "hexcasting.iota.moreiotas:entity_type": "Entity Type", + "hexcasting.iota.moreiotas:item_type": "Item Type", + "hexcasting.iota.moreiotas:item_stack": "Item Stack", + + "moreiotas.spelldata.entity_type": "Type", + + "moreiotas.tooltip.stack.empty": "Empty Stack", + "moreiotas.tooltip.stack.format": "%dx %s", + + "moreiotas.tooltip.string": "\"%s\"", + + "hexcasting.action.moreiotas:string/empty": "Blank Reflection", + "hexcasting.action.moreiotas:string/space": "Spacing Reflection", + "hexcasting.action.moreiotas:string/comma": "Comma Reflection", + "hexcasting.action.moreiotas:string/newline": "Breaking Reflection", + "hexcasting.action.moreiotas:string/block/get": "Reader's Purification", + "hexcasting.action.moreiotas:string/block/set": "Write", + "hexcasting.action.moreiotas:string/chat/caster": "Whisper Reflection", + "hexcasting.action.moreiotas:string/chat/all": "Listener's Reflection", + "hexcasting.action.moreiotas:string/chat/prefix/get": "Sifter's Reflection", + "hexcasting.action.moreiotas:string/chat/prefix/set": "Sifter's Gambit", + "hexcasting.action.moreiotas:string/iota": "Scrivener's Purification", + "hexcasting.action.moreiotas:string/action": "Patternmaster's Purification", + "hexcasting.action.moreiotas:string/name/get": "Moniker Purification", + "hexcasting.action.moreiotas:string/name/set": "Name", + "hexcasting.action.moreiotas:string/add": "Concatenation Distillation", + "hexcasting.action.moreiotas:string/split": "Separation Distillation", + "hexcasting.action.moreiotas:string/parse": "Input Purification", + "hexcasting.action.moreiotas:string/find": "Discoverer's Distillation", + "hexcasting.action.moreiotas:string/sub": "Winnowing Distillation", + "hexcasting.action.moreiotas:string/case": "Case Distillation", + + "hexcasting.action.moreiotas:altadd": "Additive Distillation II", + "hexcasting.action.moreiotas:altmul": "Multiplicative Distillation II", + "hexcasting.action.moreiotas:altdiv": "Division Distillation II", + "hexcasting.action.moreiotas:altpow": "Power Distillation II", + + "hexcasting.action.moreiotas:matrix/make": "Transformation Purification", + "hexcasting.action.moreiotas:matrix/unmake": "Restoration Purification", + "hexcasting.action.moreiotas:matrix/unmake/direct": "Restoration Purification II", + "hexcasting.action.moreiotas:matrix/identity": "Identity Purification", + "hexcasting.action.moreiotas:matrix/zero": "Zero Distillation", + "hexcasting.action.moreiotas:matrix/rotation": "Rotation Distillation", + "hexcasting.action.moreiotas:matrix/transpose": "Transpose Purification", + "hexcasting.action.moreiotas:matrix/inverse": "Inverse Purification", + "hexcasting.action.moreiotas:matrix/determinant": "Determinant Purification", + "hexcasting.action.moreiotas:matrix/concat/vert": "Tower Distillation", + "hexcasting.action.moreiotas:matrix/concat/hori": "Sprawling Distillation", + "hexcasting.action.moreiotas:matrix/split/vert": "Toppling Gambit", + "hexcasting.action.moreiotas:matrix/split/hori": "Mitosis Gambit", + + "hexcasting.action.moreiotas:type/iota": "Classifier's Purification", + "hexcasting.action.moreiotas:type/entity": "Physician's Purification", + "hexcasting.action.moreiotas:type/to_item": "Sorter's Purification", + "hexcasting.action.moreiotas:type/item_held": "Sorter's Reflection", + + "hexcasting.action.moreiotas:get_entity/type": "Entity Distillation: Type", + "hexcasting.action.moreiotas:zone_entity/type": "Zone Exaltation: Type", + "hexcasting.action.moreiotas:zone_entity/not_type": "Zone Exaltation: Not-Type", + + + "hexcasting.action.moreiotas:item/main_hand": "Duelist's Purification", + "hexcasting.action.moreiotas:item/off_hand": "Shieldbearer's Purification", + "hexcasting.action.moreiotas:item/inventory/stacks": "Hoarder's Distillation", + "hexcasting.action.moreiotas:item/inventory/items": "Collector's Distillation", + "hexcasting.action.moreiotas:item/prop/size/set": "Treasurer's Distillation", + + "hexcasting.action.book.moreiotas:string/action": "Patternmaster's Prfct.", + + "hexcasting.action.book.moreiotas:altadd": "Additive Dstl. II", + "hexcasting.action.book.moreiotas:altmul": "Multiplicative Dstl. II", + "hexcasting.action.book.moreiotas:altdiv": "Division Dstl. II", + + "hexcasting.action.book.moreiotas:matrix/make": "Transformation Prfct.", + "hexcasting.action.book.moreiotas:matrix/unmake": "Restoration Prfct.", + "hexcasting.action.book.moreiotas:matrix/unmake/direct": "Restoration Prfct. II", + + "moreiotas.entry.strings": "Strings", + "moreiotas.page.strings.string/empty": "Add an empty string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/space": "Add a blank space string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/comma": "Add a comma string to the stack, useful for combining with other strings.", + "moreiotas.page.strings.string/newline": "Add a string to the stack representing a break between lines, useful for combining with other strings.", + "moreiotas.page.strings.string/block/get": "Removes a vector from the stack. If that vector is pointing at a sign or lectern, it returns that sign or lectern's text to the stack. Otherwise, it returns null.", + "moreiotas.page.strings.string/block/set": "Removes a vector and a string from the stack. If that vector is pointing at a sign or lectern, it writes that string to that sign or lectern. Costs a hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "moreiotas.page.strings.string/chat/caster": "Adds the last message the caster sent to the stack as a string.", + "moreiotas.page.strings.string/chat/all": "Adds the last message anyone sent to the stack as a string.", + "moreiotas.page.strings.string/chat/prefix/set": "Accepts a string; All future chat messages starting with that string won't be seen by others, and only messages prefixed with that string can be read by $(l:patterns/strings#moreiotas:string/chat/caster)$(action)Whisper Reflection/$.", + "moreiotas.page.strings.string/chat/prefix/get": "Returns the last string you passed to $(l:patterns/strings#moreiotas:string/chat/prefix/set)$(action)Sifter's Gambit/$.", + "moreiotas.page.strings.string/iota": "Converts the iota on top of the stack into a string.", + "moreiotas.page.strings.string/action": "Converts the pattern on top of the stack into the string for that pattern's name. If there is no action associated with that pattern, or if the associated pattern is a Great Spell, it returns null.", + "moreiotas.page.strings.string/name/get": "Takes an entity and returns that entity's name. If it is an item entity, return the item's name.", + "moreiotas.page.strings.string/name/set": "Takes a string and an entity, and sets that entities name to the given string. If the entity is an item entity, also set the item's name. Costs a hundredth of an $(l:items/amethyst)$(item)Amethyst Dust/$.", + "moreiotas.page.strings.string/add": "Removes the top two strings from the stack and combines them together.", + "moreiotas.page.strings.string/split": "Removes the top two strings from the stack and splits the first string, using the second string as the delimiter and returning as a list.", + "moreiotas.page.strings.string/parse": "Removes a string from the top of the stack and returns the number that string parses as (or null if it doesn't parse).", + "moreiotas.page.strings.string/find": "Removes two strings from the top of the stack, and returns the first index of the first string where the second string is a substring.", + "moreiotas.page.strings.string/sub": "Removes a string and two positive integers from the top of the stack, and returns the substring from the first to the second (inclusive first, exclusive second).", + "moreiotas.page.strings.string/len": "Removes a string and returns its length.", + "moreiotas.page.strings.string/case": "Removes a string and a bool or null. If it was true, return the string in upper case. If false, lowercase. If null, toggle each character's case.", + + + + + "moreiotas.entry.item_iotas": "Item Iotas", + "moreiotas.page.item_iotas.0": "I have discovered two additional types of iotas I can manipulate.$(br2) Item Type Iotas describe a singular item stripped of its properties, such as damage or enchantments.$(br2) Item Stack Iotas describe a stack of items as they might appear in my inventory, amount, custom names, enchantments, and all.", + "moreiotas.page.item_iotas.1": "It would also seem Item Stack iotas referring to Foci containing other Item Stack iotas are somewhat faulty. A limit to the depth of my thought perhaps.", + + + "moreiotas.entry.matrices": "Matrices", + "moreiotas.page.matrices.0": "Matrices are a helpful tool for manipulating vectors to do as I wish, able to represent any linear transformation that can be applied to a vector. Of note with these patterns is that many are forgiving with their inputs, accepting in place of matrices things that can be easily mapped to matrices, namely numbers and vectors.", + "moreiotas.page.matrices.1": "For example, attempting to multiply a 3x3 matrix with a vector, rather than mishapping, will return a new vector. For more information on how to make use of matrices to their fullest potential, the below is a helpful resource.", + "moreiotas.page.matrices.1.link_text": "3blue1brown", + "moreiotas.page.matrices.matrix/make.0": "Converts the iota on top of the stack into a matrix. This iota can be a number, vector, or list.", + "moreiotas.page.matrices.matrix/make.1": "If it is a number, it becomes a 1x1 matrix. If it's a vector, it becomes a 3x1 matrix. If it's a list, it must be a list of purely numbers, purely vectors, or purely lists of numbers (each of which must be the same length). If it's a list of numbers it'll be 1 by n, if it's a list of vectors it'll be 3 by n, and if it's a list of lists it'll be n by m, where n is the inner list length and m is the outer list length.", + "moreiotas.page.matrices.matrix/unmake.0": "Converts the iota on top of the stack back from a matrix into a number, vector, or list depending on the vector's size.", + "moreiotas.page.matrices.matrix/unmake.1": "A 1x1 matrix will become a number. A 1x3 or 3x1 matrix will become a vector. A 3 by n or n by 3 matrix will become a list of vectors, and any matrix not covered by the previous will become a list of lists of numbers, with each inner list being one column of the matrix.", + "moreiotas.page.matrices.matrix/unmake/direct": "As $(l:patterns/matrices#moreiotas:matrix/unmake)$(action)Restoration Purification/$, except it always returns a list of lists of numbers.", + "moreiotas.page.matrices.matrix/identity": "Accepts a positive integer n, and returns an n by n matrix with 1 along the diagonal and 0 elsewhere.", + "moreiotas.page.matrices.matrix/zero": "Accepts positive integers n and m, and returns an n by m matrix of zeros.", + "moreiotas.page.matrices.matrix/rotation": "Accepts a vec v and number θ, and returns a matrix representing rotating by θ radians around v.", + "moreiotas.page.matrices.matrix/add": "Adds two matrices together; they must have the same number of columns and rows.", + "moreiotas.page.matrices.matrix/mul": "Multiplies the first n by m by with an m by p matrix to get an n by p matrix.", + "moreiotas.page.matrices.matrix/div": "Divides the first n by m matrix with an m by m matrix to get an n by m matrix.", + "moreiotas.page.matrices.matrix/pow": "Accepts a square matrix and an integer, and raises the matrix to the power of the integer.", + "moreiotas.page.matrices.matrix/mul/elem": "Multiplies the first n by m matrix elementwise with another n by m matrix.", + "moreiotas.page.matrices.matrix/div/elem": "Divides the first n by m matrix elementwise by another n by m matrix.", + "moreiotas.page.matrices.matrix/pow/elem": "Raises the first n by m matrix elementwise to the power of another n by m matrix.", + "moreiotas.page.matrices.matrix/transpose": "Accepts an n by m matrix and returns an m by n matrix where every entry has been flipped along the diagonal.", + "moreiotas.page.matrices.matrix/inverse": "Accepts an n by n matrix and returns the n by n matrix such that in*out = identity.", + "moreiotas.page.matrices.matrix/determinant": "Accepts a square matrix and returns the determinant of that matrix. Mishaps for matrices larger than 4x4.", + "moreiotas.page.matrices.matrix/concat/vert": "Accepts an n by m matrix and a p by m matrix and produces a (n+p) by m matrix by putting the first matrix on top of the second.", + "moreiotas.page.matrices.matrix/concat/hori": "Accepts an n by m matrix and an n by p matrix and produces an n by (m+p) matrix by putting the first matrix to the left of the second.", + "moreiotas.page.matrices.matrix/split/vert": "Accepts an n by m matrix and an int from 0 to n, and returns two matrices created by splitting the input matrix vertically at the inputted int.", + "moreiotas.page.matrices.matrix/split/hori": "Accepts an n by m matrix and an int from 0 to m, and returns two matrices created by splitting the input matrix horizontally at the inputted int.", + + "moreiotas.entry.types": "Types", + "moreiotas.page.types.type/iota": "Remove an iota from the stack, and adds the type of that iota to the stack.", + "moreiotas.page.types.type/entity": "Remove an entity from the stack, and adds the type of the entity at that location to the stack.", + "moreiotas.page.types.type/to_item": "Remove an iota with an associated item type (for example a location and the type of the block at that location, an item entity, or an item frame) from the stack and returns the item type to the stack (e.g. Grass, Stone, Stick, etc.).", + "moreiotas.page.types.type/item_held": "Adds the type of the item in the caster's offhand to the stack if there is one present, or the type of the casting hand otherwise.", + + "moreiotas.page.types.get_entity/type": "Remove an entity type and a position from the stack, and returns an entity of that type at that position if one exists.", + "moreiotas.page.types.zone_entity/type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities of that type within that radius of that position.", + "moreiotas.page.types.zone_entity/not_type": "Remove an entity type, a position, and a radius from the stack, and returns a list of all entities not of that type within that radius of that position", + + "moreiotas.entry.items": "Items", + "moreiotas.page.items.item/prop/item": "Transforms the $(l:casting/item_iotas)Item Stack$() at the top of the stack into its Item.", + "moreiotas.page.items.item/prop/size": "Transforms the Item Stack at the top of the stack into its size.", + "moreiotas.page.items.item/prop/size/set": "Transforms the Item Stack at the top of the stack into its size.", + "moreiotas.page.items.item/main_hand": "Transforms the entity at the top of the stack into the Item Stack in its main hand. Also works on Item Frames and dropped items.", + "moreiotas.page.items.item/off_hand": "Transforms the entity at the top of the stack into the Item Stack in its off hand.", + "moreiotas.page.items.item/inventory/stacks": "Removes two vectors from the stack representing position and side. Returns a list of Item Stacks in the block at the given position accessible from the given side (or all if second vector is zero).", + "moreiotas.page.items.item/inventory/items": "Removes two vectors from the stack representing position and side. Returns a list of Items in the block at the given position accessible from the given side (or all if second vector is zero).", + + "hexcasting.mishap.invalid_value.class.string": "a string", + "hexcasting.mishap.invalid_value.class.matrix": "a matrix", + "hexcasting.mishap.invalid_value.class.matrix.square": "a square matrix", + "hexcasting.mishap.invalid_value.class.numvecmat": "a number, vector, or matrix", + "hexcasting.mishap.invalid_value.class.possible_matrix": "an iota able to be converted to a matrix", + "hexcasting.mishap.invalid_value.matrix.wrong_size": "a matrix %s by %s", + "hexcasting.mishap.invalid_value.matrix.max_size": "a final matrix less than %1$d by %1$d, was %2$d by %3$d", + "hexcasting.mishap.invalid_value.string.max_size": "a string less than %d chars long, was %d", + "hexcasting.mishap.bad_item.item.read.offhand": "an entity with an offhand", + "hexcasting.mishap.bad_item.item.read.any": "an entity that can hold items" +} \ No newline at end of file diff --git a/projects/1.20/assets/moreiotas/moreiotas/lang/zh_cn.json b/projects/1.20/assets/moreiotas/moreiotas/lang/zh_cn.json new file mode 100644 index 000000000000..6589fef7bd01 --- /dev/null +++ b/projects/1.20/assets/moreiotas/moreiotas/lang/zh_cn.json @@ -0,0 +1,170 @@ +{ + "hexcasting.mishap.invalid_value.matrix.nonsingular": "一个非奇异矩阵", + + "hexcasting.iota.moreiotas:string": "字符串", + "hexcasting.iota.moreiotas:matrix": "矩阵", + "hexcasting.iota.moreiotas:iota_type": "Iota类型", + "hexcasting.iota.moreiotas:entity_type": "实体类型", + "hexcasting.iota.moreiotas:item_type": "物品类型", + "hexcasting.iota.moreiotas:item_stack": "物品组", + + "moreiotas.spelldata.entity_type": "类型", + + "moreiotas.tooltip.stack.empty": "空物品组", + "moreiotas.tooltip.stack.format": "%dx %s", + + "moreiotas.tooltip.string": "\"%s\"", + + "hexcasting.action.moreiotas:string/empty": "空串之精思", + "hexcasting.action.moreiotas:string/space": "空格之精思", + "hexcasting.action.moreiotas:string/comma": "逗点之精思", + "hexcasting.action.moreiotas:string/newline": "断句之精思", + "hexcasting.action.moreiotas:string/block/get": "读者之纯化", + "hexcasting.action.moreiotas:string/block/set": "书写", + "hexcasting.action.moreiotas:string/chat/caster": "耳语之精思", + "hexcasting.action.moreiotas:string/chat/all": "听者之精思", + "hexcasting.action.moreiotas:string/chat/prefix/set": "筛具之策略", + "hexcasting.action.moreiotas:string/chat/prefix/get": "筛具之精思", + "hexcasting.action.moreiotas:string/iota": "代笔人之纯化", + "hexcasting.action.moreiotas:string/action": "图案师之纯化", + "hexcasting.action.moreiotas:string/name/get": "名号之纯化", + "hexcasting.action.moreiotas:string/name/set": "命名", + "hexcasting.action.moreiotas:string/add": "接串之馏化", + "hexcasting.action.moreiotas:string/split": "分串之馏化", + "hexcasting.action.moreiotas:string/parse": "输入之纯化", + "hexcasting.action.moreiotas:string/find": "发现者之馏化", + "hexcasting.action.moreiotas:string/sub": "簸具之提整", + "hexcasting.action.moreiotas:string/case": "大小写之馏化", + + "hexcasting.action.moreiotas:altadd": "加法之馏化,第二型", + "hexcasting.action.moreiotas:altmul": "乘法之馏化,第二型", + "hexcasting.action.moreiotas:altdiv": "除法之馏化,第二型", + "hexcasting.action.moreiotas:altpow": "乘方之馏化,第二型", + + "hexcasting.action.moreiotas:matrix/make": "组阵之纯化", + "hexcasting.action.moreiotas:matrix/unmake": "解阵之纯化", + "hexcasting.action.moreiotas:matrix/unmake/direct": "解阵之纯化,第二型", + "hexcasting.action.moreiotas:matrix/identity": "单位阵之纯化", + "hexcasting.action.moreiotas:matrix/zero": "零阵之馏化", + "hexcasting.action.moreiotas:matrix/rotation": "旋转阵之馏化", + "hexcasting.action.moreiotas:matrix/transpose": "转置之纯化", + "hexcasting.action.moreiotas:matrix/inverse": "逆阵之纯化", + "hexcasting.action.moreiotas:matrix/determinant": "行列式之纯化", + "hexcasting.action.moreiotas:matrix/concat/vert": "纵接之馏化", + "hexcasting.action.moreiotas:matrix/concat/hori": "横拼之馏化", + "hexcasting.action.moreiotas:matrix/split/vert": "倒坠之策略", + "hexcasting.action.moreiotas:matrix/split/hori": "有丝分裂之策略", + + "hexcasting.action.moreiotas:type/iota": "分类学家之纯化", + "hexcasting.action.moreiotas:type/entity": "内科医师之纯化", + "hexcasting.action.moreiotas:type/to_item": "分拣员之纯化", + "hexcasting.action.moreiotas:type/item_held": "分拣员之精思", + + "hexcasting.action.moreiotas:get_entity/type": "实体之馏化:类型", + "hexcasting.action.moreiotas:zone_entity/type": "区域之提整:类型", + "hexcasting.action.moreiotas:zone_entity/not_type": "区域之提整:非类型", + + + "hexcasting.action.moreiotas:item/main_hand": "决斗士之纯化", + "hexcasting.action.moreiotas:item/off_hand": "持盾士之纯化", + "hexcasting.action.moreiotas:item/inventory/stacks": "囤积者之馏化", + "hexcasting.action.moreiotas:item/inventory/items": "收集者之馏化", + "hexcasting.action.moreiotas:item/prop/size/set": "司库之馏化", + + "hexcasting.action.book.moreiotas:string/action": "图案师之纯化", + + "hexcasting.action.book.moreiotas:altadd": "加法之馏化,第二型", + "hexcasting.action.book.moreiotas:altmul": "乘法之馏化,第二型", + "hexcasting.action.book.moreiotas:altdiv": "除法之馏化,第二型", + + "hexcasting.action.book.moreiotas:matrix/make": "组阵之纯化", + "hexcasting.action.book.moreiotas:matrix/unmake": "解阵之纯化", + "hexcasting.action.book.moreiotas:matrix/unmake/direct": "解阵之纯化,第二型", + + "moreiotas.entry.strings": "字符串", + "moreiotas.page.strings.string/empty": "压入一个空字符串。其在连接其他字符串方面十分有用。", + "moreiotas.page.strings.string/space": "压入一个仅含单个空格的字符串。其在连接其他字符串方面十分有用。", + "moreiotas.page.strings.string/comma": "压入一个仅含单个半角逗号的字符串。其在连接其他字符串方面十分有用。", + "moreiotas.page.strings.string/newline": "压入一个仅含单个换行符的字符串。其在连接其他字符串方面十分有用。", + "moreiotas.page.strings.string/block/get": "移除栈顶向量,若该向量坐标处有一告示牌或讲台,返回其上文本。否则返回 Null。", + "moreiotas.page.strings.string/block/set": "移除栈顶向量和字符串。若该向量坐标处有一告示牌或讲台,则会将所给字符串写至其上。消耗 1/100 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "moreiotas.page.strings.string/chat/caster": "将施法者发至聊天框的最后一条消息作为字符串压入栈顶。", + "moreiotas.page.strings.string/chat/all": "将任何人发至聊天框的最后一条消息作为字符串压入栈顶。", + "moreiotas.page.strings.string/chat/prefix/set": "接受一个字符串。所有此后发出的以此字符串起始的消息将不再对他人可见。同时,$(l:patterns/strings#moreiotas:string/chat/caster)$(action)耳语之精思/$也将只能读取上述消息。", + "moreiotas.page.strings.string/chat/prefix/get": "返回上一次传给$(l:patterns/strings#moreiotas:string/chat/prefix/set)$(action)筛具之策略/$的字符串。", + "moreiotas.page.strings.string/iota": "将栈顶元素转换为字符串。", + "moreiotas.page.strings.string/action": "将栈顶图案转换为其名字。如果该图案不对应任何操作,或对应的操作是卓越法术,则返回 Null。", + "moreiotas.page.strings.string/name/get": "接受栈顶实体,并返回其名称。若为物品实体,则返回物品的名称。", + "moreiotas.page.strings.string/name/set": "接受栈顶字符串和实体,并将该实体的名称设定为该字符串。若为物品实体,则会同时更改物品的名称。消耗 1/100 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "moreiotas.page.strings.string/add": "移除栈顶两字符串,并将其连接。", + "moreiotas.page.strings.string/split": "移除栈顶两字符串,并以第二个字符串为分隔符拆分第一个字符串,结果作为列表返回。", + "moreiotas.page.strings.string/parse": "移除栈顶字符串,并返回字符串所解析得的数(若无法解析则返回 Null)。", + "moreiotas.page.strings.string/find": "移除栈顶两字符串,并返回第二个字符串在第一个字符串中第一次出现的位置下标。", + "moreiotas.page.strings.string/sub": "移除栈顶字符串和两个数,并返回字符串中下标从第一个数(含)到第二个数(不含)间的子串。", + "moreiotas.page.strings.string/len": "移除栈顶字符串,并返回其长度。", + "moreiotas.page.strings.string/case": "移除栈顶字符串和布尔值(Null 也可)。若为 True,将字符串改为全大写并返回;若为 False,则改为全小写;若为 Null,则切换所有字符的大小写。", + + + + "moreiotas.entry.item_iotas": "物品 Iota", + "moreiotas.page.item_iotas.0": "我发现了可供操控的两种全新 iota 类型。$(br2)物品类型 iota 代表一个不包含额外属性的物品,如耐久度和魔咒就不包含在内。$(br2)物品组 iota 代表任意个物品的物品组,包含物品数量、名称、魔咒等,并以其在物品栏时的格式表现。", + "moreiotas.page.item_iotas.1": "但似乎代表着存有物品组 iota 的核心的物品组 iota 会出些错误。看来我自己的意识和思维深度也有些限制。", + + + "moreiotas.entry.matrices": "矩阵", + "moreiotas.page.matrices.0": "矩阵是操纵向量的好帮手,它们能表示任何可作用于向量的线性变换。需注明的是,本条目里的图案能接受许多种 iota,矩阵参数能接受可直接映射为矩阵的任何 iota,如数和向量。", + "moreiotas.page.matrices.1": "例如,将 3×3 矩阵与向量相乘不会产生事故,而是会返回一个新向量。更多有关发掘矩阵潜能的信息可参见下方链接(译注:B 站官方账号同视频见$(l:https://www.bilibili.com/video/BV1ns41167b9)此/$和$(l:https://www.bilibili.com/video/BV1ys411472E?p=4)此/$)。", + "moreiotas.page.matrices.1.link_text": "3blue1brown", + "moreiotas.page.matrices.matrix/make.0": "将栈顶元素转换为矩阵。接受数、向量和列表。", + "moreiotas.page.matrices.matrix/make.1": "若该 iota 为数,其将变为 1×1 的矩阵。若该 iota 为向量,其将变为 3×1 的矩阵。若该 iota 为列表,则其需为一完全由数组成,或完全由向量组成,或完全由仅含数的列表(所有列表需等长)组成的列表。若组成元素为数,其将变为 1×n 的矩阵;若组成元素为向量,其将变为 3×n 的矩阵;若组成元素为列表,则变为 n×m 的矩阵,其中 n 为内层列表长度,m 为外层列表长度。", + "moreiotas.page.matrices.matrix/unmake.0": "将栈顶矩阵依其长宽转换为数、向量或列表。", + "moreiotas.page.matrices.matrix/unmake.1": "1×1 矩阵会变成数。1×3 或 3×1 矩阵会变成向量。3×n 或 n×3 矩阵会变成由向量组成的列表。所有其余矩阵会变成由仅含数的列表组成的列表,内层列表长度为矩阵列数。", + "moreiotas.page.matrices.matrix/unmake/direct": "与$(l:patterns/matrices#moreiotas:matrix/unmake)$(action)解阵之纯化/$类似,但此图案只会返回由仅含数的列表组成的列表。", + "moreiotas.page.matrices.matrix/identity": "接受一个正整数 n,返回 n 阶单位矩阵(即主对角线处为 1,其余各处为 0 的方阵)。", + "moreiotas.page.matrices.matrix/zero": "接受两个正整数 n 和 m,返回 n×m 的零矩阵(即处处为 0 的矩阵)。", + "moreiotas.page.matrices.matrix/rotation": "接受向量 v 与数 θ,返回对应以 v 为轴正向旋转 θ 弧度的旋转矩阵。", + "moreiotas.page.matrices.matrix/add": "将两矩阵相加。两矩阵的长宽必须一致。", + "moreiotas.page.matrices.matrix/mul": "将第一个 n×m 矩阵与 m×p 矩阵相乘,所得为 n×p 矩阵。", + "moreiotas.page.matrices.matrix/div": "将第一个 n×m 矩阵与 m×m 矩阵的逆相乘,所得为 n×m 矩阵。", + "moreiotas.page.matrices.matrix/pow": "接受方阵和整数,并计算指数为所给数的方阵幂。", + "moreiotas.page.matrices.matrix/mul/elem": "将第一个 n×m 矩阵中各元素与另一个 n×m 矩阵中相应元素相乘。", + "moreiotas.page.matrices.matrix/div/elem": "将第一个 n×m 矩阵中各元素与另一个 n×m 矩阵中相应元素相除。", + "moreiotas.page.matrices.matrix/pow/elem": "计算第一个 n×m 矩阵中各元素为底数,另一个 n×m 矩阵中相应元素为指数的幂矩阵。", + "moreiotas.page.matrices.matrix/transpose": "接受一个 n×m 矩阵并返回一个 m×n 矩阵,其中所有元素按主对角线对称翻转。", + "moreiotas.page.matrices.matrix/inverse": "接受一个 n×n 矩阵并返回一个 n×n 矩阵,使得原矩阵和返回矩阵相乘得单位矩阵。", + "moreiotas.page.matrices.matrix/determinant": "接受一方阵并返回其行列式。若对 4×4 以上方阵使用,则会产生事故。", + "moreiotas.page.matrices.matrix/concat/vert": "接受一个 m×n 矩阵与一个 p×n 矩阵,返回一个 (m+p)×n 矩阵,其中第一个矩阵位于第二个矩阵上方。", + "moreiotas.page.matrices.matrix/concat/hori": "接受一个 n×m 矩阵与一个 n×p 矩阵,返回一个 n×(m+p) 矩阵,其中第一个矩阵位于第二个矩阵左方。", + "moreiotas.page.matrices.matrix/split/vert": "接受一个 n×m 矩阵与一个 0 到 n 间的整数,返回由原矩阵在所给整数行处上下分割所得的两个矩阵。", + "moreiotas.page.matrices.matrix/split/hori": "接受一个 n×m 矩阵与一个 0 到 m 间的整数,返回由原矩阵在所给整数列处左右分割所得的两个矩阵。", + + "moreiotas.entry.types": "类型", + "moreiotas.page.types.type/iota": "移除栈顶元素,并返回该 iota 的类型。", + "moreiotas.page.types.type/entity": "移除栈顶实体,并返回该实体的类型。", + "moreiotas.page.types.type/to_item": "移除栈顶位置向量,物品实体或物品展示框。并返回该处方块的类型或对应物品类型。(如草方块、石头、木棍等。)", + "moreiotas.page.types.type/item_held": "若施法者副手中有物品,则将其类型压入栈顶;若无,则压入施法用手中物品的类型。", + + "moreiotas.page.types.get_entity/type": "从栈顶获取实体类型和位置向量,返回该位置符合该类型的实体(若有)。", + "moreiotas.page.types.zone_entity/type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有符合给定类型的实体的列表。", + "moreiotas.page.types.zone_entity/not_type": "从栈顶获取实体类型、位置向量及最大距离,返回该位置给定距离范围内所有不符合给定类型的实体的列表。", + + "moreiotas.entry.items": "物品", + "moreiotas.page.items.item/prop/item": "接受栈顶$(l:casting/item_iotas)物品组$(),返回对应物品类型。", + "moreiotas.page.items.item/prop/size": "接受栈顶物品组,返回其中物品数量。", + "moreiotas.page.items.item/prop/size/set": "接受栈顶物品组,返回其中物品数量。", + "moreiotas.page.items.item/main_hand": "接受栈顶实体,返回其主手中的物品组。对物品展示框和物品实体同样有效。", + "moreiotas.page.items.item/off_hand": "接受栈顶实体,返回其副手中的物品组。", + "moreiotas.page.items.item/inventory/stacks": "移除栈顶位置向量和面向量,并返回与该位置处方块对应面交互时可获得的物品组列表(若面向量为零向量则检索所有面)。", + "moreiotas.page.items.item/inventory/items": "移除栈顶位置向量和面向量,并返回与该位置处方块对应面交互时可获得的物品类型列表(若面向量为零向量则检索所有面)。", + + "hexcasting.mishap.invalid_value.class.string": "一个字符串", + "hexcasting.mishap.invalid_value.class.matrix": "一个矩阵", + "hexcasting.mishap.invalid_value.class.matrix.square": "一个方阵", + "hexcasting.mishap.invalid_value.class.numvecmat": "一个数、向量或矩阵", + "hexcasting.mishap.invalid_value.class.possible_matrix": "一个可转换为矩阵的iota", + "hexcasting.mishap.invalid_value.matrix.wrong_size": "一个%s×%s的矩阵", + "hexcasting.mishap.invalid_value.matrix.max_size": "一个小于%1$d×%1$d的矩阵,而实际为%2$d×%3$d", + "hexcasting.mishap.invalid_value.string.max_size": "一个长度小于%d字符的字符串,而实际长度为%d", + "hexcasting.mishap.bad_item.item.read.offhand": "一个拥有副手的实体", + "hexcasting.mishap.bad_item.item.read.any": "一个能持有物品的实体" +} \ No newline at end of file