Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
# github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
# patreon: # Replace with a single Patreon username
# open_collective: # Replace with a single Open Collective username
ko_fi: snavesutit
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
# liberapay: # Replace with a single Liberapay username
# issuehunt: # Replace with a single IssueHunt username
# otechie: # Replace with a single Otechie username
# lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
# custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
147 changes: 10 additions & 137 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,146 +1,19 @@
# Blockbench

- [x] ~~Add a root NBT blueprint setting~~ Add a custom summon commands setting.
- [x] Custom animation properties dialog
- [x] Prevent the user setting their export namespace to 'global' or 'minecraft'
- [x] Add affected bones list to variant, and animation properties.
- [x] Variant Properties
- [x] Animation Properties
- [x] Implement .ajmodel to blueprint conversion.
- [x] Change .ajmeta to use relative file paths.
- [x] Resolve env variables in blueprint settings.
- [x] Add renderbox options to the blueprint settings.
- [x] Render and handle invalid cubes with a red outline.
- [x] Force animations to be at least 1 tick long
- [x] Respect Variant inheritance when applying variants in the animation preview.
- [x] Add a transparency option to the variant texture map selection. (And don't export completely transparent bones)
- [x] Locators
- [x] Custom command keyframes.
- [x] Locator config.
- [x] Data Pack Compiler support.
- [x] Natively support step keyframes.
- [x] When upgrading old ajmodels, if they have command keyframes in the effect animator, create a locator at 0 0 0 with those keyframes.
- [x] Add support for Text Displays
- [x] Basic rendering
- [x] Word wrapping - Thanks Fetchbot!
- [x] Italic
- [x] Bold
- [x] Underline
- [x] Strikethrough
- [x] Array style inheritance
- [x] Support vanilla fonts
- [x] minecraft:default
- [x] minecraft:alt
- [x] minecraft:illageralt
- [x] User interface
- [x] Figure out a nice way to configure text displays...
- [x] Include an option to change the text.
- [x] Include an option to change the max line width.
- [x] Animation
- [x] Make sure the text display is animatable.
- [x] Add a TextDisplay config.
- [x] Add support for billboarding to TextDisplays.
- [ ] Add an option to change the alignment of the text.
- [x] Respect inheritance in the bone config.
- [x] Change font rendering to use a geometry for each character instead of a single plane for the entire text display. This will open the possibility of loading custom fonts and spacing.
- [x] Add vanilla block displays
- [x] Create a custom element type for block displays.
- [x] Add rendering for vanilla block models.
- [x] Use Blockstates to select models.
- [x] Parent model inheritance
- [x] block/block
- [x] Add overrides for entity-based block models.
- [x] chest
- [x] ender_chest
- [x] mob heads
- [x] shulker boxes
- [x] beds
- [x] multi-parts like walls throw an intneral error if they don't have any elements.
- [x] Add an option to Locators to use the old entity-based functionality.
- [x] Add an about page.
- [x] Camera Plugin Support
- [x] Data Pack Compiler support.
- [x] Add vanilla item displays
- [x] Create a custom element type for item displays.
- [x] Add rendering for vanilla item models.
- [x] Parent model inheritance
- [x] item/generated
- [x] item/handheld
- [x] item/handheld_rod
- [x] item/handheld_mace
- [ ] Add overrides for entity-based models.
- [x] conduit
- [x] decorated_pot
- [x] template_banner
- [x] template_shulker_box
- [x] template_skull
- [x] banners
- [x] shield
- [x] trident
- [ ] Change the Collection setting type to allow single-click swapping of items between lists.
- [ ] Look into adding a color picker for tintable vanilla items.
- [ ] Add Variants to the UndoSystem (Blocked by vanilla Blockbench not supporting custom undo actions).
- [ ] Remove `easingArgs` and `easingMode` from saved keyframes if `easingType` is `linear`.
- [ ] Add an option to generate a `damage_flash` variant for mob-type entities.
- [ ] Add a fix for 360 rotation snap by using `set_frame` instead of `apply_frame` for the first frame of the animation.
- [ ] Add a view_range option to DisplayEntityConfig, and a default view_range in the Rig page of Blueprint Settings
- [ ] Look into adding a color picker for tintable vanilla items.
- [ ] Add Variants to the UndoSystem (Blocked by vanilla Blockbench not supporting custom undo actions).
- [ ] Add an option to generate a `damage_flash` variant for mob-type entities.
- [ ] Add a fix for 360 rotation snap by using `set_frame` instead of `apply_frame` for the first frame of the animation.

# Data Pack Compiler

- [x] Merge on_tick and on_load function tags
- [x] When merging the new minecraft:tick tag with old one, try and find any old style function references (AKA animated_java:my_project/zzzzzz/tick), and remove them.
- [x] Animation Tweening
- [x] Implement animation loop mode tech.
- [x] Write files after compilaion is done by using a queue system.
- [x] Make data pack compiler as async as possible.
- [x] Actually respect variant config options.
- [x] Warn the user when a previously summoned rig needs to be re-summoned due to changes in the blueprint.
- [x] Figure out how to add repeating functionality to command keyframes.
- [x] Add toggles to command keyframes to allow continuously running the commands in the keyframe instead of only once when the keyframe is reached.
- [x] Teleport the rig to the execution location of the summon command.
- [x] Rotate the bones with the root entity.
- [x] Add default saved Locator positions to the summoned rig.
- [x] Add support for text displays.
- [x] Add support for vanilla item displays.
- [x] Add support for vanilla block displays.
- [x] Locator rotation inheritance support - looks like they've supported it all this time...
- [x] Apply variant keyframes in animations.
- [x] Figure out how cameras will work.
- [x] See how much swapping to a static list of UUIDs for selecting bones effects performance.
- [x] Split up animation storage data command to avoid command length limit.
- [x] Check for references to non-existant functions in merged function tags, and remove them.
- [ ] When applying variants, remove / replace any bones that have / had no elements with textured faces.
- [ ] When applying variants, remove / replace any bones that have / had no elements with textured faces.

- [x] Add a toast notification for when the model has invalid rotations.
# Resource Pack

- [x] Warn the user when they have custom elements in their model, but have disabled the resource pack export.

# Plugin Exporter

- [x] Add an option to export a JSON file.

# List of numbers to track

- [ ] Total exports
- Stored in amount per day
- [ ] Total functions created by the data pack compiler
- Stored in amount per day

# Github

- [x] Reorganize the repo's branches.
- [x] Create a `release` branch.
- [x] Create a `dev` branch.
- [x] Create a `legacy-beta` tag.
- [x] Create a `legacy-armorstands` tag.
- [ ] Reorganize the repo's tags.
- [ ] Create a `v1.0.0` tag.
- [x] Create a `legacy-beta` tag.
- [x] Create a `legacy-armorstands` tag.
- [x] Add a toast notification for when the model has invalid rotations.

# Post 1.0.0

- [ ] Add support for [block-display.com's API](https://wiki.block-display.com/api/get-api)
- [ ] Add support for custom fonts in TextDisplays.
- [ ] Add support and previewing for interaction entity based locators.
- [ ] Add support for previewing player skins on heads.
- [ ] Add support for [block-display.com's API](https://wiki.block-display.com/api/get-api)
- [ ] Add support for custom fonts in TextDisplays.
- [ ] Add support for previewing player skins on heads.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"title": "Animated Java",
"icon": "icon.svg",
"description": "Effortlessly craft complex animations for Minecraft: Java Edition",
"version": "1.10.0-beta.7",
"version": "1.10.0",
"min_blockbench_version": "5.1.4",
"variant": "desktop",
"tags": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"credit": "Made with Blockbench",
"texture_size": [64, 64],
"textures": {
"0": "entity/banner_base",
"tint": "entity/banner_base"
"0": "entity/banner/base",
"tint": "entity/banner/base"
},
"elements": [
{
Expand Down
4 changes: 2 additions & 2 deletions src/dialogs/blueprintSettings/blueprintSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const localize = createScopedTranslator('dialog.blueprint_settings')
export function openBlueprintSettings() {
const dialog = new SvelteDialogSidebar({
id: `animated_java_blueprint_settings`,
title: 'Blueprint Settings',
title: localize('title'),
pages: {
general: {
component: GeneralComponent,
Expand Down Expand Up @@ -79,7 +79,7 @@ export function openBlueprintSettings() {
width: 1024,
defaultPage: 'general',
disableKeybinds: true,
buttons: ['Close'],
buttons: [tl('dialog.close')],
onClose: () => {
updateRotationConstraints()
updateAllCubeOutlines()
Expand Down
6 changes: 5 additions & 1 deletion src/dialogs/blueprintSettings/footer.svelte
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
<div><span>*</span> = Required</div>
<script lang="ts">
import { localize } from '../../util/lang'
</script>

<div><span>*</span> = {localize('dialog.blueprint_settings.required_footer')}</div>

<style>
div {
Expand Down
114 changes: 114 additions & 0 deletions src/dialogs/entityCount/entityCount.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
<script lang="ts">
import { Interaction } from '../../outliner/interaction'
import { TextDisplay } from '../../outliner/textDisplay'
import { VanillaBlockDisplay } from '../../outliner/vanillaBlockDisplay'
import { VanillaItemDisplay } from '../../outliner/vanillaItemDisplay'
import { createScopedTranslator } from '../../util/lang'

const localize = createScopedTranslator('dialog.entity_count_dialog')

let groupEntities = $state(0)
let displayEntities = $state(0)
let locatorEntities = $state(0)
let cameraEntities = $state(0)
let interactionEntities = $state(0)
let totalEntities = $derived(
1 + groupEntities + displayEntities + locatorEntities + cameraEntities + interactionEntities
)

for (const group of Group.all) {
groupEntities += Number(group.children.some(child => child instanceof Cube))
}

displayEntities =
TextDisplay.all.length + VanillaBlockDisplay.all.length + VanillaItemDisplay.all.length

interactionEntities = Interaction.all.length

if (OutlinerElement.types.camera) {
// @ts-expect-error - Camera class isn't typed as a class.
cameraEntities = OutlinerElement.types.camera.all.length
}
</script>

<div class="entity-count-dialog">
<div class="entity-count-description">{@html localize('description')}</div>
<hr />
<div class="entity-count-row">
<div class="entity-count-label">{localize('root_entities')}</div>
<div class="spacer"></div>
<div class="entity-count-value">{1}</div>
</div>
<div class="entity-count-row">
<div class="entity-count-label">{localize('group_entities')}</div>
<div class="spacer"></div>
<div class="entity-count-value">{groupEntities}</div>
</div>
<div class="entity-count-row">
<div class="entity-count-label">{localize('display_entities')}</div>
<div class="spacer"></div>
<div class="entity-count-value">{displayEntities}</div>
</div>
<div class="entity-count-row">
<div class="entity-count-label">{localize('locator_entities')}</div>
<div class="spacer"></div>
<div class="entity-count-value">{locatorEntities}</div>
</div>
<div class="entity-count-row">
<div class="entity-count-label">{localize('camera_entities')}</div>
<div class="spacer"></div>
<div class="entity-count-value">{cameraEntities}</div>
</div>
<div class="entity-count-row">
<div class="entity-count-label">{localize('interaction_entities')}</div>
<div class="spacer"></div>
<div class="entity-count-value">{interactionEntities}</div>
</div>
<hr />
<div class="entity-count-row total">
<div class="entity-count-label">{localize('total_entities')}</div>
<div class="spacer"></div>
<div class="entity-count-value">{totalEntities}</div>
</div>
</div>

<style>
.entity-count-dialog {
display: flex;
flex-direction: column;
gap: 8px;
}

.entity-count-description {
font-size: 0.9em;
color: var(--color-text-secondary);
}

.entity-count-row {
display: flex;
justify-content: space-between;
align-items: center;
}

.entity-count-value {
font-family: monospace;
}

hr {
border-top: 2px solid var(--color-button);
}

.total .entity-count-label {
font-size: 1.1em;
}

.total .entity-count-value {
font-size: 1.1em;
}

.spacer {
flex-grow: 1;
border-bottom: 2px dashed var(--color-button);
margin: 0 16px;
}
</style>
17 changes: 17 additions & 0 deletions src/dialogs/entityCount/entityCount.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { SvelteDialog } from 'svelte-patching-tools/blockbench'
import { PACKAGE } from '../../constants'
import { localize as translate } from '../../util/lang'
import EntityCountDialog from './entityCount.svelte'

export const DIALOG_ID = `${PACKAGE.name}:entityCountDialog`

export function openEntityCountDialog() {
new SvelteDialog({
id: DIALOG_ID,
title: translate('dialog.entity_count_dialog.title'),
width: 400,
component: EntityCountDialog,
buttons: [tl('dialog.close')],
disableKeybinds: true,
}).show()
}
Loading
Loading