Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/meyfa/scratchlib
Java library for working with Scratch/BYOB stage files
https://github.com/meyfa/scratchlib
binary byob generator java java-library library reader scratch scratch-extension
Last synced: 10 days ago
JSON representation
Java library for working with Scratch/BYOB stage files
- Host: GitHub
- URL: https://github.com/meyfa/scratchlib
- Owner: meyfa
- License: mit
- Created: 2017-01-29T10:41:20.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-08-02T10:44:21.000Z (over 4 years ago)
- Last Synced: 2024-11-30T18:28:24.674Z (2 months ago)
- Topics: binary, byob, generator, java, java-library, library, reader, scratch, scratch-extension
- Language: Java
- Size: 221 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# scratchlib
[![Build Status](https://travis-ci.com/meyfa/scratchlib.svg?branch=master)](https://travis-ci.com/meyfa/scratchlib)
[![Test Coverage](https://api.codeclimate.com/v1/badges/2906ba15e9327520e462/test_coverage)](https://codeclimate.com/github/meyfa/scratchlib/test_coverage)
[![Maintainability](https://api.codeclimate.com/v1/badges/2906ba15e9327520e462/maintainability)](https://codeclimate.com/github/meyfa/scratchlib/maintainability)This is a Java library for working with
[Scratch](https://scratch.mit.edu/scratch_1.4/) (up to v1.4) and
[BYOB](http://snap.berkeley.edu/old-byob.html) project files. You can load
projects created in those applications or create them with code, change all
objects they contain, and also write them out to files.## Loading a project
```java
ScratchReader r = new ScratchReader();
try {
ScratchProject scratchProject = r.read(new File("project.sb"));
ScratchProject byobProject = r.read(new File("project.ypr"));
} catch (IOException e) {
e.printStackTrace();
}
```## Creating a project
```java
ScratchProject project = new ScratchProject(ScratchVersion.SCRATCH14);
// project is a fully working, albeit empty, Scratch project
// the following actions are examples of what's possible// set metadata
project.setInfoProperty(ScratchProject.INFO_COMMENT, new ScratchObjectUtf8("My awesome project!"));// get the stage
ScratchObjectStageMorph stage = project.getStage();// add a sprite
ScratchObjectSpriteMorph sprite = new ScratchObjectSpriteMorph();
stage.addSprite(sprite);// ...
```## Saving a project
```java
ScratchProject project = new ScratchProject(ScratchVersion.SCRATCH14);
// ... or load it from somewhereScratchWriter w = new ScratchWriter(new File("project.sb"));
try {
w.write(project);
} catch (IOException e) {
e.printStackTrace();
}
```## Image to form conversion
Sprite costumes and stage backgrounds require images to be given as "forms"
(either `ScratchObjectForm` or `ScratchObjectColorForm`). Conversion to those
formats is rather involved, which is why `ScratchFormEncoder` exists:```java
BufferedImage img = /* obtain source image here */;
// convert to form
ScratchObjectForm form = ScratchFormEncoder.encode(img);// create media object
ScratchObjectImageMedia cos = new ScratchObjectImageMedia();
cos.setField(ScratchObjectMedia.FIELD_MEDIA_NAME, new ScratchObjectUtf8("costume name"));
cos.setField(ScratchObjectImageMedia.FIELD_FORM, form);// use media object - add to sprite, for example
ScratchObjectSpriteMorph sprite = new ScratchObjectSpriteMorph();
sprite.setField(ScratchObjectSpriteMorph.FIELD_MEDIA, new ScratchObjectOrderedCollection(Arrays.asList(cos)));
sprite.setField(ScratchObjectSpriteMorph.FIELD_COSTUME, cos);
```## Classes
### Inline: Constants
| ID | Package | Constant Name |
| --: | ------------------------- | -------------------------- |
| 1 | scratchlib.objects | ScratchObject.NIL |
| 2 | scratchlib.objects.inline | ScratchObjectBoolean.TRUE |
| 3 | scratchlib.objects.inline | ScratchObjectBoolean.FALSE |### Inline: Numbers
Package: `scratchlib.objects.inline`
Use the general `ScratchObjectAbstractNumber` for access, the other classes for
creation.| ID | Class Name | Use for |
| --: | ----------------------------------- | ---------------------------- |
| 4 | `ScratchObjectSmallInteger` | `int` values |
| 5 | `ScratchObjectSmallInteger16` | `short` values |
| 6 | `ScratchObjectLargePositiveInteger` | positive `BigDecimal` values |
| 7 | `ScratchObjectLargeNegativeInteger` | negative `BigDecimal` values |
| 8 | `ScratchObjectFloat` | `double` values |----
### Fixed format: data
Package: `scratchlib.objects.fixed.data`
For the string classes below, use the general `ScratchObjectAbstractString` for
access, the other classes for creation.| ID | Class Name | Use for |
| --: | -------------------------- | ------------------------------ |
| 9 | `ScratchObjectString` | ASCII strings |
| 10 | `ScratchObjectSymbol` | ASCII strings fixed by Scratch |
| 11 | `ScratchObjectByteArray` | `byte[]` data |
| 12 | `ScratchObjectSoundBuffer` | sound data |
| 13 | `ScratchObjectBitmap` | image data |
| 14 | `ScratchObjectUtf8` | UTF-8 strings |### Fixed format: collections
Package: `scratchlib.objects.fixed.collections`
For array, ordered collection, set and identity set, use the general
`ScratchObjectAbstractCollection` for access, the other classes for creation.
For dictionary and identity dictionary, use `ScratchObjectAbstractDictionary`.| ID | Class Name | Use for |
| --: | --------------------------------- | -------------------------------- |
| 20 | `ScratchObjectArray` | lists of objects |
| 21 | `ScratchObjectOrderedCollection` | lists of objects |
| 22 | `ScratchObjectSet` | lists of objects |
| 23 | `ScratchObjectIdentitySet` | lists of objects |
| 24 | `ScratchObjectDictionary` | maps of objects to other objects |
| 25 | `ScratchObjectIdentityDictionary` | maps of objects to other objects |### Fixed format: colors
Package: `scratchlib.objects.fixed.colors`
| ID | Class Name | Use for |
| --: | ------------------------------- | -------------------------------- |
| 30 | `ScratchObjectColor` | colors without transparency |
| 31 | `ScratchObjectTranslucentColor` | colors with transparency (alpha) |### Fixed format: dimensions
Package: `scratchlib.objects.fixed.dimensions`
| ID | Class Name | Use for |
| --: | ------------------------ | ----------------------------------- |
| 32 | `ScratchObjectPoint` | 2D points (x, y) |
| 33 | `ScratchObjectRectangle` | 2D rectangles (x, y, width, height) |### Fixed format: forms
Package: `scratchlib.objects.fixed.forms`
| ID | Class Name | Use for |
| --: | ------------------------ | ------------------------ |
| 34 | `ScratchObjectForm` | images |
| 35 | `ScratchObjectColorForm` | images with lookup table |----
### User-class: morphs
Package: `scratchlib.objects.user.morphs`
| ID | Class Name | Description |
| --: | -------------------------- | -------------------------------------- |
| 100 | `ScratchObjectMorph` | base class for all morphs |
| 124 | `ScratchObjectSpriteMorph` | sprites |
| 125 | `ScratchObjectStageMorph` | the stage |
| 125 | `ScratchObjectListMorph` | user-created list displayable on stage |### User-class: media
Package: `scratchlib.objects.user.media`
| ID | Class Name | Description |
| --: | --------------------------- | -------------------------- |
| 109 | `ScratchObjectSampledSound` | a sound split into samples |
| 162 | `ScratchObjectImageMedia` | media container for images |
| 164 | `ScratchObjectSoundMedia` | media container for sounds |### User-class: UI
Package: `scratchlib.objects.user.morphs.ui`
| ID | Class Name | Description |
| --: | --------------------------------------- | ---------------------------- |
| 104 | `ScratchObjectAlignmentMorph` | lays out other morphs stage |
| 105 | `ScratchObjectStringMorph` | fixed string display |
| 106 | `ScratchObjectUpdatingStringMorph` | dynamic string display |
| 107 | `ScratchObjectSimpleSliderMorph` | slider |
| 110 | `ScratchObjectImageMorph` | slider knob |
| 155 | `ScratchObjectWatcherMorph` | variable watcher |
| 173 | `ScratchObjectWatcherReadoutFrameMorph` | variable watcher readout |
| 174 | `ScratchObjectWatcherSliderMorph` | slider extension for watcher |### User-class: BYOB objects
Package: `scratchlib.objects.user`
| ID | Class Name | Description |
| --: | ------------------------------------ | ----------------------------- |
| 201 | `ScratchObjectCustomBlockDefinition` | BYOB's custom blocks |
| 205 | `ScratchObjectVariableFrame` | required for script variables |