Giter Club home page Giter Club logo

resource-pack-converter's People

Contributors

renovate-bot avatar spgoding avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

langyo

resource-pack-converter's Issues

Rename File to Resource in utils

/**
 * Reprensets an resource in the resource pack.
 */
export interface Resource {
    /**
     * The content of the resource.
     */
    content: Buffer,
    /**
     * The type of the resource.
     */
    type: string
    /**
     * The namespaced string of the resource.
     */
    namespacedString: string
}

Handle clock.

Warn Useless File:

  • assets/minecraft/textures/items/clock.png.mcmeta

If model minecraft:item/clock doesn't exist

Split texture minecraft:items/clock.

Else

Split model minecraft:item/clock and the texture defined in it.

Change the PathAdapter

The new PathAdapter should still provide methods to change paths (or we call the namespaced strings) of specific files.

The new PathAdapterOptions should be like this:

interface PathAdapterOptions {
    operations: {
        filter: FileFilter,
        set: string
    }[]
}

class FileFilter {
    constructor(
        private readonly type: string,
        private readonly namespacedIDs: RegExp[],
        private readonly extensions: string[]
    ) { }

    public test() {
        throw new Error('Method not implemented.')
    }
}

So now we can change the previous PathAdapter constructions defined in conversions to this:

new PathAdapter({
    operations: [
            filter: new FileFilter('textures', [/^minecraft:items\/fish_raw$/], ['png', 'png.mcmeta']),
            set: 'minecraft:items/fish_cod_raw'
        }
    ]
})

Add adapter factories.

When a conversion begin, get an object called whole containing all blockstates and models.

Then, run adapter factories to get adapters. An adapter factory will return adapter(s) according to the whole. Adapters provided by adapter factories will be appended in the adapters filed of the conversion.

e.g. The ClockAdapterFactory will return an ClockAdapter which will split specfic textute defined in model minecraft:item/clock.

Handle compass textures.

Warn Useless Files:

  • assets/minecraft/models/item/compass.json
  • assets/minecraft/textures/items/compass.png.mcmeta

Split Files:

  • assets/minecraft/textures/items/compass.png to /minecraft/textures/items/compass_${x}.png.

See also: #9

I18n of the logger

It will also be great to generate human-readable documents about what an adapter does.

Combine models.

Combine models to a simple model for hences, glass panes, etc.

Change PathAdapter logic.

We have changed PathAdapter before in #7, but that's incompleted. Since models were introduced in JE1.8 and blockstates were introduced in JE1.9, the namespaced IDs of textures are not fixed anymore.

In JE1.8, models determine the namespaced IDs of textures. In JE1.9, blockstates determine the namespaced IDs of block models.

So when wiring the conversion of JE1.8 into JE1.9, what we should do is not to change textures locations, but to change the locations of models accordingly. Only if the model is omitted in the resource pack, we should apply the changes of models in vanilla resource pack to the textures.

So, don't split texture minecraft:items/clock hardcodely, but to split textures defined in model minecraft:item/clock. To implement this, we need an object like this:

{
    "models": {
        "minecraft:item/clock": {
            "parent": "builtin/clock",
            "textures": {
                "...": "....."
            }
        },
       "...": {}
    }
}

And we merge the model definitions in input resource pack (identified with "RPC$isReplaced": true) with the object. At last we find out the specific model, check if the parent is set to builtin/clock, get the namespaced ID of clock texture, split textures (and models if RPC$isReplaced).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.