43
Copyright © 2013-2015 Curt Hill Sounds, Resource Packs, JSON What more would you want?

Copyright © 2013-2015 Curt Hill Sounds, Resource Packs, JSON What more would you want?

Embed Size (px)

Citation preview

Copyright © 2013-2015 Curt Hill

Sounds, Resource Packs, JSON

What more would you want?

Introduction

• A resource pack allows replacement of a series of textures, sounds or music to be installed instead of the standard Minecraft versions

• In order to add new sounds we will put them in a resource pack– Then figure out how to use them

• We will need JSON as well– That is where we will start

Copyright © 2013-2015 Curt Hill

What is JSON?• JavaScript Object Notation• A language for data interchange

– Derived from JavaScript (ECMA standard)– Alternative to XML in that respect

• Both easy for people to read and easy for machines to parse

• Consists of sequences and attribute-value pairs

• It is an open standard

Copyright © 2013-2015 Curt Hill

Simple Types• Does not have many• Number

– A floating point type

• String– Enclosed in double quotes– Uses UNICODE characters

• Boolean– May be true or false

• null– Indicates an empty value

Copyright © 2013-2015 Curt Hill

Structured Types• Only two structuring types• Object

– Similar to a group, record, or struct, depending on language

– Unordered, comma separated list of name value pairs enclosed in braces { }

– The key is separated from the value by a colon

• Array– An ordered, comma separated list of

values enclosed in brackets [ ]

Copyright © 2013-2015 Curt Hill

Commentary

• White space may be interspersed for readability without changing meaning

• Hardly any programming language lacks these features– Most have a JSON interface

• Keys are merely strings– Enclosed in double quotes

Copyright © 2013-2015 Curt Hill

Example• A simple object to contain a name:

{ “first”:”Bill”, “lastname”: “Smith” }• An array of names inside an object:{ “employees” : [{“first”:”Bill”, “last”:“Sam” },{“first”:”John”, “last”:“Doe” },{“first”:”Curt”, “last”:“Hill” }] }

• We will see two examples in resource packs

Copyright © 2013-2015 Curt Hill

BSON

• Binary JSON also exists• This is a binary encoded

serialization of JSON objects• These should be more compact

and faster to parse• This we will not use in this class

Copyright © 2013-2015 Curt Hill

Resource Packs

• A resource pack is a zip file containing a directory tree

• Various parts of this tree contain the resources that Minecraft will replace its native resources

• We need to look at several parts of this tree– Starting at the root

Copyright © 2013-2015 Curt Hill

The root directory

• Contains three things:• An assets directory• The pack.mcdata file

– The first of our two JSON files in this presentation

• A pack.png file– For display

Copyright © 2013-2015 Curt Hill

pack.mcdata

• A JSON file that identifies the resource pack

• There may be several things in it, but the required information is the name and format of the pack

• See the next slide for an example

Copyright © 2013-2015 Curt Hill

Required Example

Copyright © 2013-2015 Curt Hill

{ "pack": { "description": "Curt's Minecraft Resources", "pack_format": 1 }}

Other things

• There may be other things in this file as well

• The template resource pack contains numerous language types

Copyright © 2013-2015 Curt Hill

Directory Structure

Copyright © 2013-2015 Curt Hill

Moving Down

• The assets directory is rooted in the top level directory

• It only contains the minecraft directory

• Inside the minecraft directory are several resource directories

• There is also the sounds.json file

Copyright © 2013-2015 Curt Hill

Minecraft directory

• Contains as many of the following subdirectories as you want to use:– icons– music– records– sounds– textures

• Today we are only interested in sounds

Copyright © 2013-2015 Curt Hill

Sounds Directory• May contain 15 or more subdirectories• Again, these depend on what you

want to replace• These include:

– Damage– Dig– Fire– Mob– Music– Step– Among others

Copyright © 2013-2015 Curt Hill

Example: Step Directory

• This contains the noise made when an entity steps on a particular type of block

• Usually there are several alternatives so the exact same noise is not used for every step

• In the template there are 4 cloth, 6 grass, 4 gravel etc.

Copyright © 2013-2015 Curt Hill

Built ins and not

• Most of the sounds are built-in– Their presence in the correct directory is

all that is needed

• Should you add something another file is needed: sound.json

• Yet another JSON file that gives additional control information to the game

• Sounds that are not standard need an entry in this file

Copyright © 2013-2015 Curt Hill

The sounds.json file

• First recall that this file is in the assets/minecraft directory

• It has one or more entries that give a name to a sound and then describe its location– Possibly other things as well

Copyright © 2013-2015 Curt Hill

Minimal Example File

Copyright © 2013-2015 Curt Hill

{ "lightblock": { "category": "neutral", "sounds": [ "step/lightblock" ] }, "step.lightblock": { "category": "neutral", "sounds": [ "step/lightblock" ] }}

Commentary

• This file gave two names for the same file– This is done in two entries

• First entry is the name– This identifies an object

• The object may contain two or more entries– Only two were shown: category and

sounds

Copyright © 2013-2015 Curt Hill

Object entries

• Category determines the volume controls

• Several options here:– ambient– weather– player– neutral– block– record– Among others

Copyright © 2013-2015 Curt Hill

Volume Controls

Copyright © 2013-2015 Curt Hill

Testing

• Once we have established a named sound in:– The resource pack– sounds.json

• We should be able to use it• In the client we should be able to

type:/playsound soundname @p– The sound should play or the console

record the error

Copyright © 2013-2015 Curt Hill

Playing

Copyright © 2013-2015 Curt Hill

Played

Copyright © 2013-2015 Curt Hill

Commentary

• The screen said it was played, but what he really means is that he tried to play it

• The console will have a complaint if it tried to play it but could not find it

• Later we will consider the Java code to play it

• Before that we continue with the resource pack

Copyright © 2013-2015 Curt Hill

Template Pack

• A template resource pack is at:http://hypixel.net/threads/official-resource-pack-template.7540/

• This is the basis of what I have used

• Download and extract it to a directory– Not your minecraft directory

• Then modify it to suit Copyright © 2013-2015 Curt Hill

Modification

• Modify the pack.mcdata and pack.png– Only the name of the resource pack

• Create and edit the new sounds• Add these new sounds to whichever

directory seems appropriate • Create and add the sounds.json file to

the minecraft directory• Rezip it and copy to the correct

directory

Copyright © 2013-2015 Curt Hill

Rezip• There are several zip utilities• The built-in in Windows Explorer is

the easiest• Enter the top level directory• Select all of these

– assets directory– pack.mcdata– pack.png

• Right click and choose Send to compressed file

• Rename it to your own name

Copyright © 2013-2015 Curt Hill

Getting Minecraft to use it

• The resource file needs to be in a particular directory

• This can be easily found by clicking the options and resource buttons

• Then click on Open Resource Pack folder– This will open a Windows Explorer in

the right directory

Copyright © 2013-2015 Curt Hill

Selected Resource Packs

Copyright © 2013-2015 Curt Hill

Finding location

Copyright © 2013-2015 Curt Hill

Selection

• Once Minecraft knows it is available it should be in the left column

• Move to right column• Make it first• Now it should be available when

you play• Next we consider sounds and

playing them at appropriate times

Copyright © 2013-2015 Curt Hill

Sounds• We have already seen the Block

method setStepSound• It takes as a parameter a

Block.SoundType class• Up to now we have used one of the

constant sounds:– soundTypeAnvil, soundTypeCloth,

soundTypeGlass, soundTypeGrass, soundTypeGravel, soundTypeMetal, soundTypeSand, etc.

• Now we want more

Copyright © 2013-2015 Curt Hill

Block.SoundType• A class in its own right• Has three properties:

– float frequency– String soundName– float volume

• The constructor takes all three – Name, frequency, volume

Copyright © 2013-2015 Curt Hill

Constructor Again

• The frequency is more like playback speed 1.0F means normal– Less than one means slow it down– More than one speeds it up

• The volume should be between 0-1– Moderated by sliders

• The name is the name in sounds.json• This is usually used inside the

setStepSound or similar method

Copyright © 2013-2015 Curt Hill

Ways to play sound

• Blocks contain the setStepSound– Strangely, there is no setDigSound

method

• The other way is playSound– This is a method in Entity

Copyright © 2013-2015 Curt Hill

setStepSound

• We have seen this using a constant sound

• Here is the example using a new sound:setStepSound( new Block.SoundType ("lightblock",1.0F,1.0F));

• The lightblock is in the sounds.json file

Copyright © 2013-2015 Curt Hill

playSound

• This one is somewhat different• It is a member of Entity• The signature is:void playSound(String name, float freq, float vol);–  Where

• Freq is the playback speed • Vol is the volume

Copyright © 2013-2015 Curt Hill

Where?• The playSound method may be

used in anything with access to an Entity

• In particular this is usually in event handlers:– onEntityWalking– onEntityCollidedWithBlock

• These both have a parameter that gives the entity that did the action

Copyright © 2013-2015 Curt Hill

Finally

• Now we know about using sounds– Putting them in resource packs– Construction JSON files that describe

• Time for the demo

Copyright © 2013-2015 Curt Hill