Please make sure you are connected to the internet, and can access this cem_template_models.json file.
+
If you are unable to access the cem_template_models.json file, it may be blocked by your computer or your internet service provider. If it is not your computer blocking it, you may be able to use a VPN to bypass the block. One good example is Cloudflare WARP, which is a free program that commonly resolves this issue.
The OptiFine Entity format has limitations for the top level groups. You cannot:
+
+
+
Add new root groups
+
Remove root groups
+
Rename root groups
+
Move root groups
+
Rotate root groups
+
Move root group pivots
+
Have cubes or attachment points at root level
+
+
+
Doing any of the above can, and will, create broken/invalid models.
+
All elements added to OptiFine Entities must be placed within one of the existing groups. If you need to rotate something, create a subgroup and rotate that instead.
+
+
+
WARNING: It is highly recommended to leave restrictions enabled. This setting can be changed later in settings.
Please make sure you are connected to the internet, and can access this cem_animation_doc.json file.
+
If you are unable to access the cem_animation_doc.json file, it may be blocked by your computer or your internet service provider. If it is not your computer blocking it, you may be able to use a VPN to bypass the block. One good example is Cloudflare WARP, which is a free program that commonly resolves this issue.
+
+
+
+
+
{{ element.text }}
+
+
{{ element.text }}
+
+
+
+
+
+
+
+
+
Documentation version: {{ version }} Updated to: OptiFine {{ optifineVersion }}
+
+
+ `
+ },
+ onBuild() {
+ this.object.querySelector("#cem-container").addEventListener("click", e => {
+ if (e.target.classList.contains("cem-doc-tab-link")) {
+ this.content_vue.page = e.target.textContent
+ this.sidebar.page = e.target.textContent
+ this.sidebar.build()
+ }
+ })
}
- }
- $("#cem_doc_tabs>:first-child").addClass("selected")
- $("#cem_doc>:first-child").addClass("selected")
- $(".cem_doc_tab_link").on("click", evt => {
- $("#cem_doc_tabs>div").removeClass("selected")
- $("#cem_doc>div").removeClass("selected")
- $(`#cem_doc_tab_${evt.target.textContent.replace(/ /g, "-")}`).addClass("selected")
- $(`#cem_doc_page_${evt.target.textContent}`).addClass("selected")
- $("#cem_animation_documentation .dialog_content")[0].scrollTo(0, 0)
- })
- if (Blockbench.isWeb) $(".cem-doc-display-desktop").css("display", "none")
- else $(".cem-doc-display-web").css("display", "none")
- doc.append(
- E("hr"),
- E("p").html(`Documentation version: v${docData.version}\nUpdated to: OptiFine ${docData.optifineVersion}`)
- )
- } else documentation.show()
+ }).show()
+ }
+ }
+ if (window.cemTemplateAnimationDocReloaded) {
+ delete window.cemTemplateAnimationDocReloaded
+ showDocumentation()
}
}
- function addStyles() {
- styles = Blockbench.addCSS(`
- #panel_cem_animation .panel_vue_wrapper {
- flex: 1;
- padding: 8px;
- overflow: auto !important;
- display: flex;
- flex-direction: column;
- max-height: 100%;
- }
- #panel_cem_animation .prism-editor-wrapper {
- background-color: var(--color-back);
- }
- #panel_cem_animation .prism-editor__line-numbers {
- overflow: visible;
- min-height: 100% !important;
- position: sticky;
- left: 0;
- }
- #panel_cem_animation .prism-editor__line-number {
- background-color: var(--color-back);
- }
- #panel_cem_animation .prism-editor__code {
- overflow: visible !important;
- }
- #cem_animation_editor_container {
- overflow: auto;
- flex: 1;
- max-height: calc(100% - 40px);
- min-height: 3.5em;
- display: flex;
- }
- #cem_animation_controller_container {
- flex: 1;
- padding: 8px;
- display: flex;
- flex-direction: column;
- max-height: 100%;
- overflow: auto !important;
- }
- #cem_animation_editor {
- cursor: text;
- flex: 1;
- }
- #cem_animation_title {
- margin-left: 0;
- }
- #cem_animation_content {
- display: none;
- flex-direction: column;
- flex: 1;
- max-height: 100%;
- }
- .cem_animation_bar {
- display: flex;
- align-items: center;
- gap: 8px;
- }
- .cem_animation_bar span {
- display: flex;
- gap: 8px;
- align-items: center;
- }
- #cem_animation_part_name {
- display: inline !important;
- }
- .cem_animation_bar i, #cem_doc > div.selected {
- display: block;
- }
- .cem_animation_status {
- min-width: 25px;
- height: 25px;
- border-radius: 50%;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- #cem_animation_status_success {
- background-color: var(--color-confirm);
- color: var(--color-dark);
- }
- #cem_animation_status_error {
- background-color: var(--color-close);
- color: var(--color-light);
- display: none;
- }
- #cem_animation_status_warning {
- background-color: transparent;
- fill: #FFA500;
- display: none;
- position: relative;
- }
- #cem_animation_status_warning:after {
- content: "!";
- position: absolute;
- font-weight: 600;
- font-size: 20px;
- color: var(--color-dark);
- }
- #cem_animation_error_message {
- display: flex;
- margin-left: 8px;
- gap: 3px;
- overflow-x: auto;
- white-space: nowrap;
- }
- #cem_animation_error_message span {
- font-family: var(--font-code);
- color: #a6e22e;
- }
- .cem_animation_error_line {
- background-color: var(--color-close) !important;
- color: var(--color-light) !important;
- position: relative;
- padding-right: 4px;
- margin-right: -4px;
- }
- .cem_animation_error_line::after {
- content: "";
- position: absolute;
- left: 100%;
- border-top: 12px solid transparent;
- border-bottom: 12px solid transparent;
- border-left: 12px solid var(--color-close);
- }
- .spacer, .cem_animation_range input {
- flex: 1;
- }
- .cem_animation_bool {
- display: flex;
- align-items: center;
- gap: 8px;
- flex: 1 1 50%;
- padding-right: 8px;
- }
- .cem_animation_range {
- display: flex;
- align-items: center;
- margin: 0 !important;
- height: 30px;
- box-sizing: content-box;
- }
- .cem_animation_range p {
- margin: 0 8px 0 0;
- }
- .cem_animation_range_number {
- width: 2em;
- margin-left: 2px;
- }
- .cem_animation_button {
- height: 25px;
- min-width: 30px;
- cursor: pointer;
- position: relative;
- }
- .cem_animation_button:hover, #cem_animation_doc_button:hover {
- color: var(--color-light);
- }
- .cem_animation_button i {
- position: absolute;
- top: -3px;
- font-size: 30px;
- min-width: 30px;
- }
- .cem_animation_button_small {
- height: 15px;
- min-width: 20px;
- }
- .cem_animation_button_small i {
- font-size: 20px;
- min-width: 20px;
- }
- .cem_animation_button_disabled, .cem_animation_button_disabled div {
- color: var(--color-subtle_text) !important;
- cursor: default;
- }
- button.cem_animation_button_disabled {
- text-decoration: none;
- opacity: 0.5;
- }
- button.cem_animation_button_disabled:hover {
- background-color: var(--color-button);
- color: var(--color-subtle_text) !important;
- }
- #panel_cem_animation>h3>label, #panel_cem_animation_controller>h3>label {
- white-space: nowrap;
- text-overflow: ellipsis;
- }
- .cem_animation_range_number {
- min-width: 60px;
- }
- #cem_animation_controller_variables {
- position: relative;
- margin-top: 24px;
- display: flex;
- flex-direction: column;
- gap: 8px;
- }
- #cem_animation_controller_variables:not(:empty):before {
- content: "";
- position: absolute;
- bottom: calc(100% + 10px);
- left: 8px;
- right: 8px;
- height: 1px;
- background-color: var(--color-border);
- }
- #cem_animation_range_labels div {
- height: 30px;
- display: flex;
- align-items: center;
- }
- #cem_animation_ranges>div{
- display: flex;
- flex-direction: column;
- gap: 2px;
- }
- #cem_animation_bools {
- display: flex;
- flex-wrap: wrap;
- }
- #cem_animation_buttons {
- display: flex;
- flex-wrap: wrap;
- gap: 8px;
- }
- #cem_animation_doc_button {
- cursor: pointer;
- }
- #cem_animation_documentation .dialog_content {
- margin: 0;
- position: relative;
- }
- #cem_doc {
- margin: 16px;
- }
- #cem_doc > div {
- display: none;
- }
- #cem_doc * {
- white-space: pre-wrap;
- }
- #cem_doc h2 {
- font-size: 25px;
- }
- #cem_doc > div > :first-child {
- margin-top: -8px;
- }
- #cem_doc h2:not(:first-child) {
- padding-top: 16px;
- }
- #cem_doc td:not(:last-child) {
- padding-right: 16px;
- }
- #cem_doc code, #cem_doc pre {
- background-color: var(--color-back);
- padding: 0 4px;
- border: 1px solid var(--color-border);
- user-select: text;
- cursor: text;
- font-family: var(--font-code)
- }
- #cem_doc pre {
- margin-bottom: 16px;
- }
- #cem_doc img {
- margin: 8px;
- box-shadow: 0 3px 10px #0006;
- }
- #cem_doc_tabs {
- background-color: var(--color-frame);
- display: flex;
- gap: 2px;
- padding: 4px 4px 0;
- position: sticky;
- top: 0;
- border-bottom: 4px solid var(--color-ui);
- }
- #cem_doc_tabs > div {
- padding: 4px 12px;
- cursor: pointer;
- border-top: 2px solid transparent;
- background-color: var(--color-back);
- }
- #cem_doc_tabs > div.selected {
- background-color: var(--color-ui);
- border-top-color: var(--color-accent);
- cursor: default;
- }
- .cem_doc_table_list td:first-child {
- font-weight: 600;
- white-space: nowrap !important;
- display: list-item;
- list-style: inside;
- font-family: var(--font-code);
- }
- .cem-doc-tab-link {
- text-decoration: underline;
- cursor: pointer;
- color: var(--color-accent);
- }
- .cem-template-loader-links {
- display: flex;
- justify-content: space-around;
- margin: 20px 40px 0;
- }
- .cem-template-loader-links > a {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 5px;
- padding: 5px;
- text-decoration: none;
- flex-grow: 1;
- flex-basis: 0;
- color: var(--color-subtle_text);
- text-align: center;
- }
- .cem-template-loader-links > a:hover {
- background-color: var(--color-accent);
- color: var(--color-light);
- }
- .cem-template-loader-links > a > i {
- font-size: 32px;
- width: 100%;
- max-width: initial;
- height: 32px;
- text-align: center;
- }
- .cem-template-loader-links > a:hover > i {
- color: var(--color-light) !important;
- }
- .cem-template-loader-links > a > p {
- flex: 1;
- display: flex;
- align-items: center;
- }
- #format_page_cem_template_loader {
- padding-bottom: 0;
- }
- #format_page_cem_template_loader .format_target, #format_page_optifine_entity .format_target {
- margin-bottom: 6px;
- }
- #format_page_cem_template_loader div:nth-child(3), #format_page_cem_template_loader content {
- overflow-y: auto;
- }
- #format_page_optifine_entity h3.markdown {
- margin-bottom: -10px;
- }
- `)
+
+ function unloadOptiFineAnimationEditor() {
+ stopAnimations?.(true)
+ Blockbench.removeListener("update_selection", updateSelection)
+ Blockbench.removeListener("select_project", tabChange)
+ $("#cem_animation_editor_container > div")[0].removeEventListener("keydown", editorKeybinds)
+ groupObserver.disconnect()
+ $("[toggle='cem_animation_disable_rotations']").remove()
+ animationEditorPanel.delete()
+ animationControlPanel.delete()
+ animationStyles.delete()
+ optifineAnimationDocumentation.dialog?.close()
+ resizeWindow()
+ delete globalThis.optifineAnimationVariables
+ delete globalThis.optifineAnimationDocumentation
}
- Plugin.register(id, {
- title: name,
- icon: "icon.png",
- author,
- description: description + " Also includes an animation editor, so that you can create custom entity animations.",
- tags: ["Minecraft: Java Edition", "OptiFine", "Templates"],
- version: "7.8.0",
- min_version: "4.8.0",
- variant: "both",
- creation_date: "2020-02-02",
- async onload() {
- addStyles()
- await setupPlugin("https://wynem.com/assets/json/cem_template_models.json")
- setupAnimationPanel()
- new Setting("jem_restrictions", {
- value: false,
- category: "edit",
- name: "Remove OptiFine Entity Restrictions",
- description: "Remove the root group restrictions on the OptiFine Entity format. WARNING: You can easily break models with restrictions removed."
- })
- function editCheckProcess(entry) {
- if (entry.before.outliner) {
- for (const group of entry.before.outliner) {
- const postGroup = entry.post.outliner.find(e => e.uuid === group.uuid)
- if (!postGroup) return "You cannot remove root cubes/groups!"
- if (!group.origin.reduce((a, e, x) => a && e === postGroup.origin[x], true)) {
- return "You cannot move root groups!"
- } else if (group.name !== postGroup.name) {
- return "You cannot rename root groups!"
- }
- }
- }
- if (entry.post.outliner) {
- for (const group of entry.post.outliner) {
- const beforeGroup = entry.before.outliner.find(e => e.uuid === group.uuid)
- if (!beforeGroup) return "You cannot add new root cubes/groups!"
- }
- }
- if (entry.before.group && entry.post.group && Outliner.root.find(node => node instanceof Group && node.uuid == entry.before.group.uuid)) {
- if (!entry.before.group.rotation.reduce((a, e, x) => a && e === entry.post.group.rotation[x], true)) {
- return "You cannot rotate root groups!"
- } else if (!entry.before.group.origin.reduce((a, e, x) => a && e === entry.post.group.origin[x], true)) {
- return "You cannot move root group pivots!"
- }
- }
- }
- editCheck = () => {
- if (!settings.jem_restrictions.value && Format.id === "optifine_entity") {
- const entry = Undo.history[Undo.history.length-1]
- const check = editCheckProcess(entry)
- if (check) {
- Blockbench.showQuickMessage(check, 1200)
- Undo.loadSave(entry.before, entry.post)
- Undo.history.pop()
- Undo.index = Undo.history.length
- }
- }
- }
- Blockbench.on("finished_edit", editCheck)
- originalJEMFormat = {
- new: Formats.optifine_entity.new,
- format_page: Formats.optifine_entity.format_page,
- convertTo: Formats.optifine_entity.convertTo
- }
- Formats.optifine_entity.new = () => {
- if (settings.jem_restrictions.value) originalJEMFormat.new.bind(Formats.optifine_entity)()
- else loadInterface()
- }
- Formats.optifine_entity.format_page = JSON.parse(JSON.stringify(Formats.optifine_entity.format_page))
- Formats.optifine_entity.format_page.content.push({ type: "h3", text: "CEM Template Loader" }, { text: "Creating an OptiFine entity will open CEM Template Loader. It is extremely rare to need a blank OptiFine entity model. You can disable this behavour with **File > Preferences > Settings > Edit > Remove OptiFine Entity Restrictions**, however, this is not recommended." })
- Formats.optifine_entity.convertTo = () => {
- originalJEMFormat.convertTo.bind(Formats.optifine_entity)()
- if (!settings.jem_restrictions.value) {
- Blockbench.showMessageBox({
- title: "Conversion Warning",
- message: "Models converted into OptiFine entities are not valid entity models. If you are converting a model into an OptiFine entity to use in game, expect it to be broken. Instead load a new template entity model, and copy your elements across into the template model.",
- buttons: ["Load Template", "Continue"],
- icon: "warning"
- }, button => {
- if (button === 0) loadInterface()
- })
- }
- }
- if (Blockbench.isWeb) {
- const params = (new URL(location.href)).searchParams
- if (params.has("plugins") && params.get("plugins").split(",").includes("cem_template_loader") && params.has("model") && params.get("model") !== "") loadModel(params.get("model").toLowerCase(), null, params.has("texture"))
- }
- },
- onunload() {
- stopAnimations?.(true)
- Blockbench.removeListener("update_selection", updateSelection)
- Blockbench.removeListener("select_project", tabChange)
- Blockbench.removeListener("finished_edit", editCheck)
- $("#cem_animation_editor_container>div")[0].removeEventListener("keydown", editorKeybinds)
- groupObserver.disconnect()
- loader.delete()
- $("[toggle='cem_animation_disable_rotations']").remove()
- for (const action of generatorActions) action.delete?.()
- MenuBar.removeAction("tools.cem_template_loader")
- animationEditorPanel.delete()
- animationControlPanel.delete()
- styles.delete()
- Formats.optifine_entity.new = originalJEMFormat.new
- Formats.optifine_entity.format_page = originalJEMFormat.format_page
- Formats.optifine_entity.convertTo = originalJEMFormat.convertTo
- entitySelector?.close()
- documentation?.close()
- resizeWindow()
- }
- })
+
+ // PLUGIN
+
+ loadPlugin()
})()
\ No newline at end of file
diff --git a/plugins/cem_template_loader/changelog.json b/plugins/cem_template_loader/changelog.json
new file mode 100644
index 00000000..2d191c5b
--- /dev/null
+++ b/plugins/cem_template_loader/changelog.json
@@ -0,0 +1,848 @@
+{
+ "0.1.0": {
+ "title": "0.1.0",
+ "date": "2020-02-02",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Initial release"
+ ]
+ }
+ ]
+ },
+ "0.2.0": {
+ "title": "0.2.0",
+ "date": "2020-02-17",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added 1.15 and 1.16 template models"
+ ]
+ }
+ ]
+ },
+ "0.3.0": {
+ "title": "0.3.0",
+ "date": "2020-02-23",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed the \"minecart\" template model"
+ ]
+ }
+ ]
+ },
+ "0.4.0": {
+ "title": "0.4.0",
+ "date": "2020-02-26",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Added missing \"hat\" bone to the \"illusioner\" template model"
+ ]
+ }
+ ]
+ },
+ "0.5.0": {
+ "title": "0.5.0",
+ "date": "2020-03-05",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed the \"pufferfish_small\" template model"
+ ]
+ }
+ ]
+ },
+ "0.6.0": {
+ "title": "0.6.0",
+ "date": "2020-03-19",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added new \"player\", \"player_slim\", \"elytra\", \"trident\", \"shield\", and \"arrow\" template models",
+ "Added new \"melon_golem\", \"furnace_golem\", and \"tropical_slime\" Minecraft Earth template models"
+ ]
+ },
+ {
+ "title": "Changes",
+ "list": [
+ "Modified the \"banner\" template model"
+ ]
+ }
+ ]
+ },
+ "0.7.0": {
+ "title": "0.7.0",
+ "date": "2020-04-14",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added new Minecraft Earth template models"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed the \"wolf\" template model"
+ ]
+ }
+ ]
+ },
+ "0.8.0": {
+ "title": "0.8.0",
+ "date": "2020-05-15",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Removed Features",
+ "list": [
+ "Removed Minecraft Earth template models"
+ ]
+ },
+ {
+ "title": "Changes",
+ "list": [
+ "Added \"strider\", \"zoglin\", and \"zombified_piglin\" template models to the unsupported category"
+ ]
+ }
+ ]
+ },
+ "0.9.0": {
+ "title": "0.9.0",
+ "date": "2020-05-20",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Added a section showing what template models are currently compatible with 1.15"
+ ]
+ }
+ ]
+ },
+ "1.0.0": {
+ "title": "1.0.0",
+ "date": "2020-06-01",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added a new \"Legacy\" section which now contains the 1.14 chest template models",
+ "Replaced the chest template models with the 1.15 versions"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed the \"villager\" template model"
+ ]
+ }
+ ]
+ },
+ "2.0.0": {
+ "title": "2.0.0",
+ "date": "2020-07-17",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Complete revamp of all template models"
+ ]
+ }
+ ]
+ },
+ "2.1.0": {
+ "title": "2.1.0",
+ "date": "2020-07-17",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed \"player\" and \"player_slim\" template models"
+ ]
+ }
+ ]
+ },
+ "2.2.0": {
+ "title": "2.2.0",
+ "date": "2020-07-22",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed the \"villager\" template model failing to load"
+ ]
+ }
+ ]
+ },
+ "2.3.0": {
+ "title": "2.3.0",
+ "date": "2020-08-28",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added the \"piglin\", \"piglin_brute\", and \"zombified_piglin\" template models to the supported category"
+ ]
+ }
+ ]
+ },
+ "2.4.0": {
+ "title": "2.4.0",
+ "date": "2020-10-03",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Added unofficial \"axolotl\", \"goat\", and \"warden\" template models"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Minor bug fixes to various template models"
+ ]
+ }
+ ]
+ },
+ "2.5.0": {
+ "title": "2.5.0",
+ "date": "2020-10-04",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added an unofficial \"glow_squid\" template model"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed issues with the \"dolphin\", \"squid\", \"axolotl\", and \"warden\" template models"
+ ]
+ }
+ ]
+ },
+ "2.6.0": {
+ "title": "2.6.0",
+ "date": "2020-10-17",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Added template textures to lots of template models",
+ "Improved the unofficial \"goat\" template model"
+ ]
+ }
+ ]
+ },
+ "2.7.0": {
+ "title": "2.7.0",
+ "date": "2020-10-31",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed issues with the \"wither\" and \"parrot\" template models"
+ ]
+ }
+ ]
+ },
+ "2.8.0": {
+ "title": "2.8.0",
+ "date": "2020-12-16",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Replaced the unofficial \"axolotl\", \"goat\", and \"glow_squid\" model templates with the official models"
+ ]
+ }
+ ]
+ },
+ "2.9.0": {
+ "title": "2.9.0",
+ "date": "2021-01-25",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed a typo in the \"chest_large\" model"
+ ]
+ }
+ ]
+ },
+ "2.10.0": {
+ "title": "2.10.0",
+ "date": "2021-02-03",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed issues with the \"wither\", \"wither skull\", and \"rabbit\" models"
+ ]
+ }
+ ]
+ },
+ "3.0.0": {
+ "title": "3.0.0",
+ "date": "2021-03-25",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Template models are now loaded from an external model JSON file"
+ ]
+ }
+ ]
+ },
+ "3.1.0": {
+ "title": "3.1.0",
+ "date": "2021-03-27",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added the ability to reload the external external model JSON file",
+ "Added external model JSON version number"
+ ]
+ }
+ ]
+ },
+ "4.0.0": {
+ "title": "4.0.0",
+ "date": "2021-05-25",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Restructured the external model JSON file to reduce it's file size"
+ ]
+ }
+ ]
+ },
+ "5.0.0": {
+ "title": "5.0.0",
+ "date": "2021-08-07",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added a brand new interface for selecting template models"
+ ]
+ },
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Rewritten most of the plugin"
+ ]
+ }
+ ]
+ },
+ "5.0.1": {
+ "title": "5.0.1",
+ "date": "2021-08-12",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Add plugin about details"
+ ]
+ }
+ ]
+ },
+ "5.3.0": {
+ "title": "5.3.0",
+ "date": "2021-10-14",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Support for Blockbench v4.0.0"
+ ]
+ }
+ ]
+ },
+ "5.4.1": {
+ "title": "5.4.1",
+ "date": "2021-12-15",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Updated unable to connect dialog"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed a bug with reloading template models"
+ ]
+ }
+ ]
+ },
+ "5.10.2": {
+ "title": "5.10.2",
+ "date": "2022-10-17",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added info dialog that is shown when the plugin is first installed"
+ ]
+ },
+ {
+ "title": "Changes",
+ "list": [
+ "Added bug report button to the loader interface"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed \"CEM Template Loader\" not appeaing in the start screen"
+ ]
+ }
+ ]
+ },
+ "5.11.0": {
+ "title": "5.11.0",
+ "date": "2022-03-24",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Models can now be automatically loaded from URL queries in the webapp"
+ ]
+ }
+ ]
+ },
+ "6.0.0": {
+ "title": "6.0.0",
+ "date": "2022-05-05",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added an OptiFine animation editor with support for editing and previewing animations from OptiFine CEM"
+ ]
+ }
+ ]
+ },
+ "6.0.1": {
+ "title": "6.0.1",
+ "date": "2022-05-05",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Only try to read OptiFine animations when the current format is an \"OptiFine Entity\""
+ ]
+ }
+ ]
+ },
+ "6.0.2": {
+ "title": "6.0.2",
+ "date": "2022-05-05",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed switching project tabs breaking the OptiFine animation editor"
+ ]
+ }
+ ]
+ },
+ "6.0.3": {
+ "title": "6.0.3",
+ "date": "2022-05-09",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Only try to stop OptiFine animations when the current format is an \"OptiFine Entity\""
+ ]
+ }
+ ]
+ },
+ "6.0.4": {
+ "title": "6.0.4",
+ "date": "2022-05-10",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed selection update event listener when no format is loaded"
+ ]
+ }
+ ]
+ },
+ "6.1.0": {
+ "title": "6.1.0",
+ "date": "2022-05-29",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Restructured the plugin's info dialog and renamed it to the about dialog"
+ ]
+ },
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Changed all references to the \"Filter\" menu to the new \"Tools\" menu"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed \"CEM Template Loader\" not appeaing in the start screen"
+ ]
+ }
+ ]
+ },
+ "6.2.0": {
+ "title": "6.2.0",
+ "date": "2022-06-4",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Small edits to the plugin's structure"
+ ]
+ }
+ ]
+ },
+ "6.2.1": {
+ "title": "6.2.1",
+ "date": "2022-07-11",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "Replaced tutorials playlist link with a single tutorial video"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed playing animations when a non root group is selected"
+ ]
+ }
+ ]
+ },
+ "6.5.0": {
+ "title": "6.5.0",
+ "date": "2022-07-22",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added seeded randomness support to the \"random\" OptiFine animation function",
+ "Added new OptiFine animation variables: \"id\", \"rot_x/y\", \"player_pos_x/y/z\", \"player_rot_x/y\", \"death_time\", \"dimension\", \"frame_time\"",
+ "Added new OptiFine animation functions: \"printb\", \"lerp\"",
+ "Added support for OptiFine animation \"var.\" and \"varb.\" entity variables"
+ ]
+ },
+ {
+ "title": "Changes",
+ "list": [
+ "The \"print\" function has been updated to match the officially supported one"
+ ]
+ },
+ {
+ "title": "Removed Features",
+ "list": [
+ "Removed internal support for the \"idle_time\" and \"revenge_time\" OptiFine animation variables",
+ "Removed \"Invert this groups pivot point while playing animations\" group option"
+ ]
+ },
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Switched to using the new ModelLoaders"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed the \"sqrt\" OptiFine animation function when used with numbers that are zero or below",
+ "Fixed the \"if\" OptiFine animation function allowing non boolean inputs",
+ "Fixed OptiFine animations crashing if a cube is selected",
+ "Fixed having groups named the same as functions causing issues"
+ ]
+ }
+ ]
+ },
+ "6.5.1": {
+ "title": "6.5.1",
+ "date": "2022-07-25",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed a gap appearing between the OptiFine animation editor and the viewport"
+ ]
+ }
+ ]
+ },
+ "6.6.0": {
+ "title": "6.6.0",
+ "date": "2022-10-02",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added \"rule_index\" OptiFine animation variable",
+ "Added \".visible\" OptiFine animation property"
+ ]
+ }
+ ]
+ },
+ "6.6.1": {
+ "title": "6.6.1",
+ "date": "2022-10-11",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed issues with OptiFine animation validation",
+ "Fixed broken \".visible\" references"
+ ]
+ }
+ ]
+ },
+ "6.6.2": {
+ "title": "6.6.2",
+ "date": "2022-10-24",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed \"print\" and \"lerp\" functions"
+ ]
+ }
+ ]
+ },
+ "6.6.3": {
+ "title": "6.6.3",
+ "date": "2022-10-26",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Changes",
+ "list": [
+ "\"rule_index\" animation variable is now defaulted to \"0\"",
+ "\"frame_time\" is now affected by the animation timescale"
+ ]
+ }
+ ]
+ },
+ "6.6.4": {
+ "title": "6.6.4",
+ "date": "2022-11-07",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed issues with OptiFine animation validation"
+ ]
+ }
+ ]
+ },
+ "6.6.5": {
+ "title": "6.6.5",
+ "date": "2022-11-25",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Updated model source URL"
+ ]
+ }
+ ]
+ },
+ "6.11.0": {
+ "title": "6.11.0",
+ "date": "2023-01-17",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added autocomplete support to the OptiFine animation editor"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed about action not being removed on unload"
+ ]
+ }
+ ]
+ },
+ "6.11.1": {
+ "title": "6.11.1",
+ "date": "2023-01-18",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed autocomplete for bones with numbers in the name"
+ ]
+ }
+ ]
+ },
+ "7.0.0": {
+ "title": "7.0.0",
+ "date": "2023-02-03",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added JEM format restrictions"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed disable rotation toggles appearing on cubes",
+ "Fixed broken styles"
+ ]
+ }
+ ]
+ },
+ "7.1.0": {
+ "title": "7.1.0",
+ "date": "2023-9-18",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed tab key in OptiFine animation editor",
+ "Fixed OptiFine animation editor autocomplete"
+ ]
+ }
+ ]
+ },
+ "7.8.0": {
+ "title": "7.8.0",
+ "date": "2023-10-17",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "Removed Features",
+ "list": [
+ "Removed the ability to reload the template models"
+ ]
+ },
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Update to new plugin repository format"
+ ]
+ }
+ ]
+ },
+ "8.0.0": {
+ "title": "8.0.0",
+ "date": "2024-05-12",
+ "author": "Ewan Howell",
+ "categories": [
+ {
+ "title": "New Features",
+ "list": [
+ "Added a new dialog that shows when invalid operations are performed",
+ "Added an option to ignore unknown OptiFine animations",
+ "Loaded textures are now set as the default texture. This does not apply for models that load multiple textures"
+ ]
+ },
+ {
+ "title": "Changes",
+ "list": [
+ "\"Load vanilla texture\" will now be selected by default",
+ "Moved the pretty print button",
+ "The OptiFine animation editor will now always have a group selected",
+ "Changed the play animaions button's icon to be the regular play icon"
+ ]
+ },
+ {
+ "title": "Removed Features",
+ "list": [
+ "Removed \"Load into current project\"",
+ "Removed the ability to play only the current group's animations"
+ ]
+ },
+ {
+ "title": "Technical Changes",
+ "list": [
+ "Rewritten most of the plugin",
+ "The CEM Animation Editor can now be extended by other plugins",
+ "The CEM Animation Documentation can now be extended by other plugins",
+ "Added CDN url fallback system",
+ "The external model JSON file's version number will now be separated from the plugin's version number. I have reset that version number to 2.0.0 and it will increase separately from the plugin's version number from now on"
+ ]
+ },
+ {
+ "title": "Bug Fixes",
+ "list": [
+ "Fixed the page links in the CEM Animation Documentation"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/plugins/minecraft_title_generator/changelog.json b/plugins/minecraft_title_generator/changelog.json
index 57808173..a0b45aee 100644
--- a/plugins/minecraft_title_generator/changelog.json
+++ b/plugins/minecraft_title_generator/changelog.json
@@ -20,7 +20,7 @@
{
"title": "Bug Fixes",
"list": [
- "Fix resetting all tabs"
+ "Fixed resetting all tabs"
]
}
]
@@ -46,11 +46,11 @@
{
"title": "Bug Fixes",
"list": [
- "Fix missing pointer cursors",
- "Fix debug mode duplicating textures",
- "Fix plugin about action not getting removed on plugin unload",
- "Fix anchor links in Blockbench webapp",
- "Fix gradient overlay scaling"
+ "Fixed missing pointer cursors",
+ "Fixed debug mode duplicating textures",
+ "Fixed plugin about action not getting removed on plugin unload",
+ "Fixed anchor links in Blockbench webapp",
+ "Fixed gradient overlay scaling"
]
}
]
@@ -63,7 +63,7 @@
{
"title": "Bug Fixes",
"list": [
- "Fix for Safari versions older than version 16.4"
+ "Fixed for Safari versions older than version 16.4"
]
}
]
@@ -76,7 +76,7 @@
{
"title": "Bug Fixes",
"list": [
- "Fix the \"V\" character in the built-in font"
+ "Fixed the \"V\" character in the built-in font"
]
}
]
@@ -224,7 +224,7 @@
{
"title": "Bug Fixes",
"list": [
- "Fix fonts that are flat"
+ "Fixed fonts that are flat"
]
}
]
@@ -273,7 +273,7 @@
{
"title": "Bug Fixes",
"list": [
- "Fix debug mode thumbnails"
+ "Fixed debug mode thumbnails"
]
}
]
@@ -302,7 +302,7 @@
{
"title": "Bug Fixes",
"list": [
- "Fix backup CDN for if a CDN goes down after you have opened Blockbench and used the plugin"
+ "Fixed backup CDN for if a CDN goes down after you have opened Blockbench and used the plugin"
]
}
]
@@ -315,7 +315,7 @@
{
"title": "Bug Fixes",
"list": [
- "Fix ability to bypass EULA agreement"
+ "Fixed ability to bypass EULA agreement"
]
}
]
@@ -335,8 +335,8 @@
{
"title": "Bug Fixes",
"list": [
- "Fix render controls disappearing for some people",
- "Fix render controls missing in Blockbench v4.10.0"
+ "Fixed render controls disappearing for some people",
+ "Fixed render controls missing in Blockbench v4.10.0"
]
}
]
diff --git a/plugins/minecraft_title_generator/minecraft_title_generator.js b/plugins/minecraft_title_generator/minecraft_title_generator.js
index 45c8e62b..704e9eca 100644
--- a/plugins/minecraft_title_generator/minecraft_title_generator.js
+++ b/plugins/minecraft_title_generator/minecraft_title_generator.js
@@ -106,6 +106,8 @@
},
has_changelog: true,
website: "https://ewanhowell.com/plugins/minecraft-title-generator/",
+ repository: "https://github.com/ewanhowell5195/blockbenchPlugins/tree/main/minecraft-title-generator",
+ bug_tracker: "https://github.com/ewanhowell5195/blockbenchPlugins/issues/new?title=[Minecraft Title Generator]",
async onload() {
styles = Blockbench.addCSS(`
.minecraft-title-list {