Changelog - ProjectZulu/JustAnotherSpawner GitHub Wiki

Minecraft Version Support

  • Minecraft 1.7 is supported from v0.14.1
  • Minecraft 1.6 is supported from v0.9.4 to v0.13.?
  • Minecraft 1.5 was supported from v0.1.0 to v0.13.3
  • Minecraft 1.4 was supported from v0.1.0 to v0.9.4

Just Another Spawner v0.17

UPDATE 06/06/2015: Just Another Spawner v0.17.0

  • To World Tags add boolean isClearWeather(); // Detect if it is Snow/Rain/Cloudy
  • Profile specific folders. i.e. WorldSettings/BASIC/ instead of WorldSettings/ Will be useful in the future. By default copies current world settings to new directory.
  • Add Setup_Spawnlistentry logging field to toggle detailed spawnlistentry adding / failing to add (failing only logged in debug mode)
  • Event Spawns. Ability to spawn entity upon certain conditions being triggered. Currently 'LIVING_DEATH', 'SLEEP', 'BREAK_CROP', and 'BREAK_TREE'. Configured under folder EventSpawns in WorldSettings. Any fileaname with a .CFG extention will work, and there can be multiple. File consists of array of elements each containing two fields TRIGGER and EXPRESSION. Trigger is when the expression will be evaluated. Expression (which is MVEL) determines what, if anything, will spawn.
  • Time Helper Functions added.
    • int timeOfDay(); // Time of the day between [0, 24000)
    • boolean isMidnight(); // 1 Hour before & after 18000
    • boolean isAfternoon(); // 1 Hour before & after 6000
    • boolean isDawn(); // 1 Hour before & after 0000
    • boolean isDusk(); // 1 Hour before & after 12000
    • int moonPhase(); // Moon phase from [0 == Full Moon, 7 == Waxing Gibbous]
    • boolean isFullMoon(); // Obvious names, otherwise see Minecraft wiki Day/Night Cycle
    • boolean isWaningGibbous();
    • boolean isLastQuarter();
    • boolean isWaningCrescent();
    • boolean isNewMoon();
    • boolean isWaxingCrescent();
    • boolean isFirstQuarter();
    • boolean isWaxingGibbous();

Just Another Spawner v0.16

UPDATE 05/15/2015: Just Another Spawner v0.16.19

  • Curseforge publishing of artifact and source jars; changelog autogenerated
  • Add Setup_Spawnlistentry logging field to toggle detailed spawnlistentry adding / failing to add (failing only logged in debug mode)
  • Add passive spawn rtestriction to chunk spawns. This is not typical of vanilla behaviour, but does seem the expected and intutive to users. Will result in reduced chunk spawns, but should not heavily influence vanilla mobs.
  • Fix isTame tag to correctly recognize tamed horses
  • Fix log call to actually report information
  • Add check to see if World is null before attempting to determine if location is present. Improves compatability with mods that cause the structure objects to not be fully initialized.
  • Add check to overworld structures to only enage when MapGenFeatures are enabled.

UPDATE 03/24/2015: Just Another Spawner v0.16.18

  • obj.countEntitiesInRange and obj.countJASEntitiesInRange accept wildcard (*) as an entity name indicating any entity

UPDATE 03/22/2015: Just Another Spawner v0.16.17

  • Fix command in the form of /jas killall TYPE
  • Tweak interaction with Forge ShouldSpawn event. If JAS livinghandler OR spawnlistentry is overriden; ignore spawn event result.

UPDATE 03/18/2015: Just Another Spawner v0.16.16

  • For the Air spawn medium, include implicitly a check for Material that is nonliquid and does not obstruct movements. Allows for partial blocks such as snow and tallgrass to allow entities to spawn on them.
    

UPDATE 03/07/2015: Just Another Spawner v0.16.15

  • Fix issue with writeNBT not correctly writing values if the value is already present

UPDATE 03/13/2015: Just Another Spawner v0.16.14

  • Fix issue with writeNBT not parsing value arguments properly; resulting in NPE. Fix #109
  • Ensure entityPersistance Event is only processed ServerSide, should fix #107
  • Fix issue with not extracting the proper tags from the Optional class for SpawnListEntry PostSpawn Tags. Fixes #108 - com.google.common.base.Present cannot be cast to org.mvel2.compiler.ExecutableStatement

UPDATE 01/05/2015: Just Another Spawner v0.16.13

  • Greatly increase spawn loop performance
  • Fix potential off-by-one error in Command CanSpawnHere due to rounding errors when converting position from double to int

UPDATE 12/23/2014: Just Another Spawner v0.16.12

  • Optimize entity count to scale better with number of players

UPDATE 12/21/2014: Just Another Spawner v0.16.11

  • Export ImportedSpawnlist to "ImportedSpawnlists.cfg"

UPDATE 12/21/2014: Just Another Spawner v0.16.10

  • Tweak reflection calls to improve performance
  • Fix issue with finding the correct player when using /jas killall with optional arguments

UPDATE 12/16/2014: Just Another Spawner v0.16.9

  • Update MVEL2 to 2.2.2 Final
  • Enable MVEL default ASM optimizer now that integer bug in MVEL is fixed
  • Reinstate cap check both at beggining and during spawn. i.e. Fix runaway vanilla squid spawns do to check only at begining of spawn cycle.
  • Fix Monster and Ambient using && instead of || during spawn conditiosn. Will fix the raining Zombies and Creeper issue.
  • MONSTER creature type MVEL expression altered to include forbidding difficulty during peaceful

UPDATE 12/14/2014: Just Another Spawner v0.16.8

  • Fix biome expression issue where A| B| were being backed by the wrong map.
  • Fix LivingHandler parsing issue where despawnrate value was assigned to entity cap. despawnAge and despawnRate are now correctly set.
  • Move CreatrueType max spawn check outside spawn loop. Should reduce unnecessary checks once caps are filled.
  • Add quickexit such that entities are not counted if there are no CreatureTypes ready to process it.

UPDATE 12/13/2014: Just Another Spawner v0.16.7

  • Fix issue with spawnlists not regenerating under all conditions

UPDATE 12/13/2014: Just Another Spawner v0.16.6

  • Fix entity duplication logic as well as logging format
  • Fix shouldspawn log printing for adding to the invalid spawnlist

UPDATE 12/12/2014: Just Another Spawner v0.16.5

  • Fix bug where BiomeGroups were being built without proper Attribute Map
  • Add toggle to determine if SpawnListEntries with a weight of zero are generated. True by default. Global such that it can be toggled before spawnlistentries are generated.

UPDATE 12/12/2014: Just Another Spawner v0.16.4

  • Fix default Creature spawn conditions: were supposed to be || but we &&.

UPDATE 12/09/2014: Just Another Spawner v0.16.3

  • Fix issue with BiomeSpawnList entries regenerating when they are set to not spawn (i.e. weight == 0) due to new mapping detection detecting new entities when they were already present.

UPDATE 12/09/2014: Just Another Spawner v0.16.2

  • Update working version of v0.16.1 that doesn't reset SpawnListEntry config files

UPDATE 12/07/2014: Just Another Spawner v0.16.1

  • Be more explicit defining Srings for Block, BlockFoot, Entities, and WriteNBT Tag conversion. Use ' instead of " to keep GSON happy and avoid clunky escaping (").
  • Add Expression to MVEL crash reporting.

UPDATE 12/06/2014: Just Another Spawner v0.16.0

Major Features

InstantDespawn Parent Tag

  • Add InstanctDespawn Tag. For compatability, only works if a despawn tag is present. Value key is "InstantDespawns Tags": add to livinghandler as you would despawn tags.

Additional Commands

Dimension Commands

  • Reports the current dimension the player is in that can be used with the dimension tag

EntityStats Commands

  • Add Command entitystats to calculate mean/median/mode for entity density and entity distance to player

Minor Features

Use AllowDespawn for despawn overriding

  • Switch from PersistenceRequired hackery to using AllowDespawn forge event.
  • Should provide better compatability, notably allowing entities to despawn normally once JAS is uninstalled or despawn tags are no longer used by user.

Duplicate Map Detection

  • Fix overly sensitive duplicate entity class / mappings detection. Should now no longer report false positives

Better MVEL crash reports

  • Prepend MVEL execution block error messages to better assist debugging

CanSpawnHere Command

  • Command CanSpawnHere now reports the probability success / # of trials of an entity to spawn in a given location, if at all. Ommitted if 100%

Add 2 Time WorldAccessor tags

  • long wrld.totalTime() // Total time for the world
  • long wrld.timeofDay() // The current world time in ticks, ranging from 0 to 23999.

Just Another Spawner v0.15

UPDATE 12/03/2014: Just Another Spawner v0.15.2

  • Fix issue where despawn field for saving was reading from the spawn expression field.

UPDATE 12/03/2014: Just Another Spawner v0.15.1

  • Fix issue where converter was not convtering maxspawnheigtht and minspawnheight tags properly

UPDATE 12/02/2014: Just Another Spawner v0.15.0

This versions significantly changes the format of multiple configuration files. All compatible changes are automatically converted. Only two previous features are however no longer supported. First, blockRange no longer exists. The new block expression function has the ability to accept range. If you were using the blockRange tag you will need to manually adjust the imported block function withe appropriate range. Second, LivingHandlers absorbed the functionality of LivingGroups except for the ability to reference other biomegroups. Attributes will need to be used for this. If you had LivinGroups referencing other LivingGroups you will need to correct the imported LivingHandler contents.

##Major Features

Config Generation

spawnlistentries are created for any newly added biome or entity mapping. Thus newly added mods should have their entities configured automativally.

Command: Effectivespawnlist

Generates a spawnlist per creaturetype by simulating the spawning of entities in the world. Format(s):

    /jas effectivespawnlist <Player; default CommanderSender> <CreatureType; default ALL=*> <cycles; default 3> <ChunkDistance; default 8>
    /jas effectivespawnlist <CreatureType> <cycles> <ChunkDistance>
    /jas effectivespawnlist <CreatureType> <cycles>
    /jas effectivespawnlist <CreatureType>

MVEL Scripts

Tags have been replaced with MVEL expressions. These are scripts based on Java syntax. See http://mvel.codehaus.org/Language Guide for 2.0.

Old tags are imported from fileVersion=1.0 config files and automatically converted to the new expression format. The format is similar: {spawn:sky} is now just sky().

  • Old CreatureType Monster Tag: "Tags": "{spawn:!solidside,1,0,[0/-1/0]:liquid,0:normal,0:normal,0,[0/1/0]:!opaque,0,[0/-1/0]}"
  • New CreatureType Monster Tag: "Spawn Tag": "!solidside(1,{0,0,0},{0,-1,0})||liquid({0,0,0},{0,0,0})||normal({0,0,0},{0,0,0})||normal({0,0,0},{0,1,0})||!opaque({0,0,0},{0,-1,0})"

All MVEL expressions are on their own 'line'. They no longer split from a single line i.e. {spawn}{depsawn} MVEL supports brackets, if-else statements, ternary operator, ^, &&, ||. Note that if using " that because " is considered special is GSON it must be escaped i.e. "Entity Tags": ""Zombie"", needs to be "Entity Tags": "\"Zombie\"".

MVEL automatically assumed the result of the expression based on the output i.e. sky() && blockfoot() is clearly a boolean result and MVEL will handle it automatically. There are functions ('tags') that will not return a boolean function. i.e. count.getLocalEntityTypeCount(String entityType) returns an integer. To be valid it must be compared to something i.e. count.getLocalEntityTypeCount(String entityType) < 5.

CreatureType Fields

CreatureType now has the following fields:

  • "Spawn Tag": MVEL spawn expression. Expects a boolean value.
  • "Iterations Per Chunk": Number of times to try to spawn different entities per chunk per CreatureType
  • "Iterations Per Pack": Number of times to try to spawn a particular entity per 'iteration per chunk'

LivingHandler Fields

  • "Contents": String value containing Attribtues (marked with A|) or mapping names from LivingGroups.CFG to indicate which entities this should spawn. Multiple entities are chosen randomly to spawn with equal weights.
  • "Spawn Operand": Whether LH Spawn Tag is && or || with SpawnListEntry.
  • "Spawn Tag": MVEL spawn expression. Expects a boolean value. Absent if empty.
  • "Despawn Tags": MVEL despawn expression. Expects a boolean value. Absent if empty.
  • "PostSpawn Tags": MVEL postspawn expression. Expects a boolean value. Absent if empty.
  • "Entity Tags": MVEL spawn expression. Overrides what Entity this LH should spawn. Expects a String value, a JAS mapping. Absent if empty.
  • "Min Despawn Range": Minimum range the entity should be before being eligible for despawning.
  • "Max Despawn Range": Range this entity should instantly despawn at.
  • "Despawn Age": Minimum age the entity should be before being eligible for despawning.
  • "Despawn Rate": Rate at which this entity should despawn once eligible.
  • "Entity Cap": Maximum number of this entity that should be allowed to spawn in loaded chunks.

SpawnListEntryTags Fields

  • "Spawn Operand": Whether SPL Spawn Tag is && or || with LivingHandler.
  • "Spawn Tag": MVEL spawn expression. Expects a boolean value. Absent if empty.
  • "PostSpawn Tags": MVEL postspawn expression. Expects a boolean value. Absent if empty.

MVEL SCRIPTS

Variables

Access to the following fields are variables are provided and accessed in the form "Spawn Tag": "posX > 200"

  • posX: X coordinate of the spawning location
  • posY: Y coordinate of the spawning location
  • posZ: Z coordinate of the spawning location
  • entity: The entity to be spawned (not always present but mostly i.e. during CreatureType spawning)

Functions:

Access to the following methods are provided and accessed in the form "Spawn Tag": "sky()". If a specific size array is marked with the form [N] where N is the number of values required. If unlimited it will say N. Typically 3 and that means X,Y,Z coords/range/offsets. If 2 it would mean min/max or X/Z (i.e. biomes which are same no matter Y). Common Functions:

  • boolean sky()
  • boolean block(String[N] blockKeys, Integer[3] searchRange, Integer[3] searchOffsets)
  • boolean block(String[N] blockKeys, Integer[N] metas, Integer[3] searchRange, Integer[3] searchOffsets)
  • boolean blockFoot(String[N] blockKeys)
  • boolean blockFoot(String[N] blockKeys, Integer[N] metas)
  • boolean normal(Integer[3] searchRange, Integer[3] searchOffsets)
  • boolean liquid(Integer[3] searchRange, Integer[3] searchOffsets)
  • boolean solidside(Integer side, Integer[3] searchRange, Integer[3] searchOffsets)
  • boolean opaque(Integer[3] searchRange, Integer[3] searchOffsets)
  • boolean ground()
  • boolean random(int range, int offset, int maxValue) // True if [0, range - 1] + offset <= maxValue
  • boolean modspawn() // Default entity.getCanSpawnHere methods
  • boolean isTamed()
  • boolean isTameable()
  • boolean biome(String biomeName, int[3] range, int[3] offset) // BiomeName can be G|group, A|attribute, or mapping.
  • writenbt(String[] nbtOperations) // Like the previous tag, except instead of linking each op together with , you have each as element in list

Legacy Tags

Plenty of old-style tag equivalents that are less useful now that expressions can be made on the users own

  • boolean lgcy.height(int minHeight, int maxHeight)
  • boolean lgcy.light(int minLight, int maxLight)
  • boolean lgcy.torchlight(int minLight, int maxLight)
  • boolean lgcy.origin(int minDistance, int maxDistance)
  • boolean lgcy.height(int minHeight, int maxHeight)
  • boolean lgcy.top() // Block at foot is same as biomes specified top block
  • boolean lgcy.filler() // Block at foot is same as biomes specified filler block
  • boolean lgcy.dimension(int dimension)
  • boolean lgcy.location(int[3] offset, int[3] range)
  • boolean lgcy.players(int[2] searchRange, int[2] minMaxBounds)
  • boolean lgcy.entities(String[N] searchNames, int[2] searchRange, int[2] minMaxBounds)
  • boolean lgcy.difficulty(int desiredDifficulty)

Objective Functions

These do not return boolean values, but quantities of values at spawn location

  • String obj.block() // returns name of block
  • int obj.light() // returns light level
  • int obj.torchlight()
  • int obj.origin() // Distance to Server-spawnpoint
  • String obj.material()
  • int obj.difficulty // 0 == Peaceful, 1 == Easy, 2 == normal, 3 == Hard
  • int obj.highestResistentBlock() // Highest block that restrics movement and is not Leaves, wood, glass, or foliage
  • int obj.playersInRange(int minRange, int maxRange) // Number of players in sphere specfified by min/max range
  • int obj.countEntitiesInRange(String[N] searchNames, int minRange, int maxRange) // Number of players in sphere specfified by min/max range, searchName is FML name
  • int obj.countJASEntitiesInRange(String[N] searchNames, int minRange, int maxRange) // Number of players in sphere specfified by min/max range, searchName is JAS name

Utility

Less useful tags used by other tags internally or by advanced users

  • boolean util.inRange(int current, int minRange, int maxRange) // Is the current value between the min and max
  • String util.material(Material material) // String name for the provided Material reference
  • int util.rand(int value) //random value between 0 and value-1
  • void util.log(String string) // Logs measage to FML log under [JAS] header. Is prepended with [TAG_LOG]

World-Acc

Access to certain function similar to native world functions modders have access to. Used to check arbitrary nearby blocks to spawn position.

  • int lightAt(int coordX, int coordY, int coordZ)
  • int torchlightAt(int coordX, int coordY, int coordZ)
  • String blockNameAt(Integer offsetX, Integer offsetY, Integer offsetZ)
  • Block blockAt(int coordX, int coordY, int coordZ) // returns Block object at coord
  • Block biomeTop(int coordX, int coordZ) // returns Block object of specified top block of Biome at coord
  • Block biomeFiller(int coordX, int coordZ) // returns Block object of specified filler block of Biome at coord
  • BiomeGenBase biomeAt(int coordX, int coordZ) // returns Biome object at coord
  • Material materialAt(int coordX, int coordY, int coordZ) // returns Material object at coord
  • ChunkCoordinates originPos() // Server Spawn point
  • boolean skyVisibleAt(int coordX, int coordY, int coordZ) // call to World.canBlockSeeSky(int coordX, int coordY, int coordZ)
  • int dimension() // Current Dimension, 0 == overworld

Count-Acc

Access to the current entity count

  • int getLocalEntityTypeCount(String entityType) // Number of CreatureType in the current chunk
  • int getLocalEntityClassCount(String entityJasName) // Number of JAS mapping in the current chunk
  • int getGlobalEntityTypeCount(String entityType) // Number of CreatureType across countable chunks
  • int getGlobalEntityClassCount(String entityJasName) // Number of JAS mapping across countable chunks
  • int entitiesSpawnedThisChunk() // Counts all entities spawned during all "Iterations Per Chunk" CreatureType settings
  • int entitiesSpawnedThisPack() // Counts all entities spawned during all "Iterations Per Pack" CreatureType settings
  • int clodCount(String entityType) // Number of CreatureType in a 2x2 chunk radius, same area used in BiomeCap

Just Another Spawner v0.14

UPDATE 10/25/2014: Just Another Spawner v0.14.13

  • 'Fix' issue with entities that use client side classes. They will ('should') now print an error log when detected.

UPDATE 09/18/2014: Just Another Spawner v0.14.12

  • Fix issue with canspawnhere never finding matching entities in Structures

UPDATE 09/04/2014: Just Another Spawner v0.14.11

  • EmptyVanillaSpawnlists also clears nether structure spawnlist

UPDATE 08/31/2014: Just Another Spawner v0.14.10

  • Fix issue with spawnrange and despawnage not being called properly

UPDATE 08/30/2014: Just Another Spawner v0.14.9

  • Fix issue with SpawnRange tag crash caused to accessing objects before construction

UPDATE 08/29/2014: Just Another Spawner v0.14.8

  • Fix issue with CommandCanSpawnHere using FML instead of JAS mapping.

UPDATE 04/15/2014: Just Another Spawner v0.14.7

  • Fix ChunkSpawnChance being read as an integer.

UPDATE 04/15/2014: Just Another Spawner v0.14.6

  • Fixed a bug where newly deleted spawnlistentry files did not populate as added or re-populate themselves when removed entirely
  • Files with invalid JSON now also print the file name and path to the log along with the exception.

UPDATE 04/15/2014: Just Another Spawner v0.14.5

  • Use isNormalCube() and not isBlockNormalCube() as one is randomly client side only for no raisin.

UPDATE 04/14/2014: Just Another Spawner v0.14.4

  • Fix livingroup parsing issue with multiple entity modids
  • Fix saveworld error trying to delete already deleted files
  • Attempt to handle null biome names

UPDATE 04/14/2014: Just Another Spawner v0.14.3

  • Only Cancel chunkspawning for non-blacklisted biomes. Also, create a toggle in global properties.

UPDATE 04/13/2014: Just Another Spawner v0.14.2

  • PopulateChunkEvent.Populate event should set result not be cancelled

UPDATE 04/12/2014: Just Another Spawner v0.14.1

Major Changes

  • Ported to 1.7
  • TF compatability split into seperate module, JustAnotherSpawnerCompatability Addon (JASCA).
  • Configuration files ported to JSON. This means saving and reading are completely decoupled. That combines with each file containing a version number should allow any future changes to be backwards compatible: no more config breakings.

Notable config changes

  • Blacklist were moved to its own file at /JustAnotherSpawner/BiomeBlacklist.cfg
  • Logging settings were moved to its own file at /JustAnotherSpawner/LoggingProperties.cfg
  • SaveConfigGson.cfg now used a DefaultProfile to set all worlds. A world specific configuration may be created by adding the world name under worldprofiles but it is not created automatically. This should save space and be easier to use with multiple worlds.
  • ModEntitySettings folder was split into two: EntityHandlers and SpawnListEntries containing their namesakes.
  • Tags are no longer appened to "Type-Enabled": "MONSTER-true" in the "MONSTER-true{spawn}" fashion. They are added as a seperate element "Type-Enabled": "MONSTER-true", "Tags": "{spawn}". If the tag is empty "Tags": "" the serializer will be omitted, saving space. This is also true for spawn list entries.
  • As part of Read-Write decoupling the CFGs are rewritten on each run. Iinvalid entries that cannot be read will - generally - not be written: effectively being deleted. This has the advantage/disadvantage of removing entries to mods that are no longer present. Setting files to Read-Only should prevent this if desired.
  • Blacklist were moved to its own file at /JustAnotherSpawner/BiomeBlacklist.cfg
  • Logging settings were moved to its own file at /JustAnotherSpawner/LoggingProperties.cfg
  • SaveConfigGson.cfg now used a DefaultProfile to set all worlds. A world specific configuration may be created by adding the world name under worldprofiles but it is not created automatically. This should save space and be easier to use with multiple worlds.
  • ModEntitySettings folder was split into two: EntityHandlers and SpawnListEntries containing their namesakes.
  • Tags are no longer appened to "Type-Enabled": "MONSTER-true" in the "MONSTER-true{spawn}" fashion. They are added as a seperate element "Type-Enabled": "MONSTER-true", "Tags": "{spawn}". If the tag is empty "Tags": "" the serializer will be omitted, saving space. This is also true for spawn list entries.
  • As part of Read-Write decoupling the CFGs are rewritten on each run. Iinvalid entries that cannot be read will - generally - not be written: effectively being deleted. This has the advantage/disadvantage of removing entries to mods that are no longer present. Setting files to Read-Only should prevent this if desired.

Just Another Spawner v0.13

UPDATE 03/19/2014: Just Another Spawner v0.13.6

  • Fix Water Creature Type issue not properly building the correct spawn medium

UPDATE 02/11/2014: Just Another Spawner v0.13.5

  • Fix off by one error when selecting entities to spawn. Essentially, the first entity on a spawnlist was receiving +1 to spawn weight while the last entity was receiving -1.

UPDATE 01/26/2014: Just Another Spawner v0.13.4

  • Added errorhandling to generating Fml->Jas name mappings. Conflicting mappigns will not be added, but are documented with either A or B depending on if it occurs during reading config or generating entries not in the config.

    • A: 'Duplicate entity class detected. Ignoring FML,JasName pair [{FmlName},{JasName}] for class, class {JavaClass}' or

    • B: 'Duplicate entity mapping generating new entities. Entity-FML mapping Mapping [{JasName}] already exists. Iggnoring: [FMLname:class]=[{FmlName}:{javaClass}]'

UPDATE 19/11/2013: Just Another Spawner v0.13.3

  • Fix biomegroups not sorting groups with operators properly.

UPDATE 14/11/2013: Just Another Spawner v0.13.2

  • Extend BiomeTag functionality to allow BiomeAttributes or BiomeGroups by prefixing with A| or G| repsectively.

UPDATE 10/11/2013: Just Another Spawner v0.13.1

  • Fix issue with Custom Entity Categories not saving

UPDATE 03/11/2013: JustAnotherSpawnv0.13.0

Biome Caps
Biome Chunk Caps are a per creature type entity cap method. They work by similar to regular caps except they count entities in a small localized area (currently 2 chunk radius). They are enabled by settings the "Default Biome Cap" to greater than -1. Specific biome caps can be changed by speciied by adding the appropriate biome mapping (see BiomeGroups) tot he biome caps category. Example:

####################
# biomecaps
#===================
# Format biomeMapping=Cap. See BiomeGroups.cfg for BiomeMappings.
####################

biomecaps {
	Plains=2
}

PostSpawn Parent Tag
Add 'postspawn' parent tag. Called after entity intialization during spawning. Identical to 'spawn' parent tag in terms of valid child tags. Can be attached to LivingHandler or SpawnListEntry As it occurs after the entity has spawned, 'restricting' or not has no effect on the entity. Pretty much only useful for NBT writing.

Biome Tag
Add Biome Tag. Format is similar to liquid.

:Biome,Range,Offset,BiomeMapping
:Biome,Range,BiomeMapping (Offset is assumed 0)
:Biome,BiomeMapping (Range & Offset are assumed 0)

Range can be singular value for isometric range, can specify x/y/z. Y is optional. Values cannot be negative.
Offset can be specified by x/y/z. Y is optional. Values can be negative.

Instant Despawn Distance
Expose the default/global instant despawn distance via configuration.

JAS CanDespawnHere
Format identical to CanSpawnHere. Reports, as its name implies, if the specified entity is capable of despawning at the location of the player.

Just Another Spawner v0.12

UPDATE 02/11/2013: Just Another Spawner v0.12.9

  • Fixup spawnlistentries not saving optional parameters

UPDATE 31/10/2013: Just Another Spawner v0.12.8

  • Fixup Package Name lookup to cache by BiomeID. Should incompatability issue with WrapperBiomes in Mystcraft et al.

UPDATE 20/10/2013: Just Another Spawner v0.12.7

  • Fix KillAll command filter not filtering.

UPDATE 18/10/2013: Just Another Spawner v0.12.6

  • Add Chunk Spawn Chance variable to each creature type. Controls how oftren this entity will chunks spawn, if at all. 0 == never, 1.0 == always.

UPDATE 18/10/2013: Just Another Spawner v0.12.5

  • Expose Entity chunk spawn distance in GlobalProperties. Must be >= 1.
  • Create Entity chunk count distance parameter which limits the number of chunks away from a player entities must be within to be counted. Setting to <=0 will impose no limit and use all currently loaded chunks. Exposed via GlobalProperties. Default is 8 chunks.
  • Commands Composition, Locate and CountCap are all determined within the bound of EntityChunkCountDistance.

UPDATE 16/10/2013: Just Another Spawner v0.12.4

  • Fix bug in despawning where non-despawning entities were still eligible for instant-despawning.

UPDATE 12/10/2013: Just Another Spawner v0.12.3 (1.5/1.6)

  • Correct issue in random selection of entities from groups being off by one

UPDATE 10/10/2013: Just Another Spawner v0.12.2 (1.5/1.6)

  • Fix issue with biome groups being incorrectly composed

UPDATE 10/10/2013: Just Another Spawner v0.12.1 (1.5/1.6)

  • Fix biome not regenerating when empty.
  • Tweak entity to generate groups for new entity mapping identical to biomes.

UPDATE 08/10/2013: Just Another Spawner v0.12.0 (1.5/1.6) [The configuration files in this update are not backwards compatible. Make backups before updating. The biome format has changed, it will read biomeList= entries and duplicate them. Upon which time they should be deleted. See [2].]

  • Entity Groups. Groups are set via LivingGroups.cfg. Each unique group appears in the EntityCFGs in place of where entity livinghandlers used to be. See below for specific details [1].
  • Dynamic Biome Groups. Groups are read from the actual categories and a seperate line cotaining the explicit custom group names is no longer neccesary. Default groups only when the category is empty or missing. Thus, disabling groups can be done by simply deleting them in their entirety and they will not regenerate.
  • Attribute and Group support the Intersection (&) operator. The result is the elements contained in both sets. i.e. Forest group & Snow groups would yeild Snow Forest: All Forests that also have snow.
  • Group can contain other groups by prefixing with G| and attributes can contain other attributes. Creating circular references will provide an error an crash the game: i.e. B|Forest contains B| beach which contains B|Forest.

[1]: Entity Groups Detail Entity Groups are set via the LivingGroups.cfg. The CFG is setup similarly to BiomeGroups: customentityname allows setting the JASName mapping from the vanilla name, livinggroups allows grouping entities into a single unit. Technically attribtues are also supported, but none generate by default. Simple create an 'attributegroups' category and create groups there if desired.

Custom entity names are specified as:

customentityname {
S:Bat=Bat
S:Blaze=MoC.Blaze
}
livinggroups {
	S:Bat=Bat
	moc {
		S:MoC.Bat=MoC.Bat
	}
}

Note that the first term before the '.' represents the 'modID' though it can be user specified to allow corrections or groupings in seperate files as desired. The above also demonstrates the default generation. If desired they can be moved easily and still function i.e.

livinggroups {
	S:Bat=Bat
	S:MoC.Bat=MoC.Bat
}

This ability applied to biome groups (and attributes) as well.

[2]: i.e. somthing like this

####################
# foresthills
####################

foresthills {
	S:BiomeList=ForestHills
}

becomes

####################
# foresthills
####################

foresthills {
	S:BiomeList=ForestHills
	S:foresthills=ForestHills
}

which should be edited to

####################
# foresthills
####################

foresthills {
S:foresthills=ForestHills
}

Just Another Spawner v0.11

UPDATE 27/09/2013: Just Another Spawner v0.11.9 Released for (1.5/1.6)

  • Add dim tag. Format :dim,integer;. Compares current dimension id for equality. Invertible and chainable.

UPDATE 14/09/2013: Just Another Spawner v0.11.8 Released for (1.5/1.6)

  • Fix killall command error when specifying TYPE without player.
  • Change chunk spawner random from world random() to the chunk random() instance.

UPDATE 14/09/2013: Just Another Spawner v0.11.7 Released for (1.5/1.6)

  • Fix location bug conditioning to be validX, validY, validZ.
  • Tweak /canspawnhere color codes for absnet biome tags and absent spawnlist.
  • Fix sneaky logger lieing about spawning biome.

UPDATE 11/09/2013: Just Another Spawner v0.11.6 Released for (1.5/1.6)

  • Additional Spawn logging options in GlobalProperties.
    • SPAWNING, as it has before, controls whether a spawn message is logged.
    • SPAWNING_NAME toggles appending the entity name.
    • SPAWNING_TYPE toggles appending the creature type.
    • SPAWNING_POS toggles appending the entity position.
    • SPAWNING_BIOME toggles appending the biome at position.

[b]UPDATE 10/09/2013[/b] Just Another Spawner v0.11.5 Released for (1.5/1.6)

  • Fix location tag parameter parsing being off by 1.

UPDATE 08/09/2013: Just Another Spawner v0.11.4 Released for (1.5/1.6)

  • Fixed crash when saving after changing save configuration
  • SaveConfig sortByBiome correctly inherits from GlobalProperties.
  • Fix bug in maxHeight and minHeight tag where they were evaluated backwards. They are now also invertible.

UPDATE 07/09/2013: Just Another Spawner v0.11.3 Released for 1.5

UPDATE 07/09/2013: Just Another Spawner v0.11.3

  • Fix NPE when creating accessing world settings when creating new worlds.

UPDATE 05/09/2013: Just Another Spawner v0.11.2

  • Fix critical error in determining entity age. 1.6 causes persistenceRequired to set age to 0. Circumvented by using seperate entity age counter.

UPDATE 05/09/2013: Just Another Spawner v0.11.1

  • Fix buildscript not including Compatability module.
  • Fix ClassNotFoundException when using KillAll and Locate on a dedicated server.
  • Fix bug with Entities Tag which consulted the localized name. It instead uses the registration name. It is not case sensitive.

UPDATE 03/09/2013" Just Another Spawner v0.11.0 (1.6 only until a port is made)

  • Mods List will list an additional mod JASCompatability. It is still only one download.
  • Twilight Forest structure support if back.

JAS Commands JAS Wiki: http://minecraft.gamepedia.com/NBT_format for valid tag IDs. It helps to think of it as folders, telling the system to dig down until you find the tag you want to set and then providing a value. Container tags (TAG_Compound and TAG_List) do not have values, they merely move you along the hierarchy. The operations are get or set; meaning if a tag is called that does not exist, it is created.

The name of tags are case sensitive. To figure out what tags you need an NBT editor is recommended. The Project Zulu limited mob spawner allows you to explore the NBT tree graphically and test adding/removing tags to see their effects.

Value tags are typically just one value, setting a short would be done like 'id/2/30'. For arrays such as byte array, keep including values for as long as you want the array to be; i.e. 'myArray/7/20/30/40/2/254'. As you may have noticed already, all tags fetch using name (with one exception). Thus the first value is a string of the name. The exception is TAG_List, which uses an index instead.

Example, make an entity hold glass block in hand. ":writenbt,Equipment/9,0/10,id/2/20,Damage/2/0,Count/1/1".

=== Biome Attributes === Biome Attributes are an interesting addition to biome groups. Functionally, they are identical with the exception that they do not show up in your entity CFG reducing clutter. By default there is an attribute group for each entry in the biome dictionary and on representing all biomes. They can be added to biome groups in the same way biome mappings are, with the exception that they must be prefixed by an A|.

An additional feature introduced with attributes is the ability to add and subtract them and mappings by placing a '+' or '-' in front of their names. They are parsed left to right. Biomes cannot be added twice, and will simply 'overwrite' the other if tried.

Just Another Spawner v0.8

UPDATE 10/06/2013: JASv0.8.4

  • (Hopefully) fix the NPE when accessing entity name for logging after spawning.

UPDATE 09/06/2013: JASv0.8.3

  • Added default Save_name property in Save CFG.

UPDATE 07/06/2013: JASv0.8.2

  • Fix bug with accessing entity name before initializing entity

UPDATE 05/06/2013: JASv0.8.1

  • Fix recursive issue

UPDATE 04/06/2013: JAS v0.8.0 ============== BiomeGroups ============== BiomeGroup files prior to v0.8.0 are no longer valid. The groups themselves can be with minor changes.

The referencebiomes list is gone, replaced with packagenamemappings. Allowing you to map the complex packages names to a shorter version. Instead of writing "net.minecraft.world.biome.BiomeGenBeach.Beach" you can write "Beach". The mapped name can be changed to any valid string, duplicated are ignored. They are case sensitive.

The allgroups property is gone and replaced with customgroups. The main change is that the default biomegroups (1 for each unique biome name) are always created. They can still be disabled by removing all biomes from the group; any group with no biomes will not be declared and will not show up in the entity CFGs.

============== World Save Configurations ============== The World-Master configuration pattern is abandoned. Instead the SaveConfig.cfg in WorldSettings contains a Save_Name propertry for each world which controls where it looks for and saves settings. Defaults to world name. Multiple worlds can use one folder by setting the save nam eto the same. There is also an import name option, which is used only when the Save_Name folder is missing. It will COPY the files from the import name to the Save_Name folder. This pattern should be more user friendly.

============== Tags ==============

  • ModSpawn Tag. Valid only got livinghandler {spawn} parent tag. Calls default entity spawn method. Chainable and invertable.
  • Light and Torchlight tags are now invertable.
  • Fixed issue in range Calculation for cases where min>max. When max>min, range is min->max. When min>max, range is max->+INF & -INF->min.
  • Add Origin Range Tag. Invertable and chainable. Checks if distance to spawn is within range. Format identical to light or torchlight. Limited to integers.
  • Add nearby player tag. Format :player,minSearch,maxSearch,min#,max#. Chainable, invertible.

============== Miscellaneous ==============

  • JAS should alwasy now load last. This should resolve issues with JAS not clearing certain mods spawnlists.
  • Fix issue where blockRange was not considered valid tag for spawning.

Just Another Spawner v0.7

UPDATE 23/05/2013: JASv0.7.2

  • Fixed bug with maxSpawnRange tag

UPDATE 23/05/2013: JASv0.7.1

  • Remove forced living handler isInLiquid check for all entities using {spawn}

UPDATE 20/05/2013: JASv0.7.0 ==== Major Changes ====

  • Categories now allow tags to cutomize output, default tags are auto-generated to provide identical functionality. Entering an empty string (or unreadable) instead of tags will result in pre-0.7.0 behaviour to be used.
  • Custom Entity Categories can be added by entering their names in the extra categories section of CreatureType.cfg

==== Tags ====

  • Change Sky tag to strict can see sky check (calls to heightmap).
  • Ground tag ("ground"): Gets top block and iterates downward, ignoring leaves, wood, foliage, and blocks the player can move through.
  • Torch Light tag ("torchLight"): Identical to light tag but ignores time of day.
  • Difficulty tag ("difficulty"): 0-3 to
  • Added tags represented block functions: Liquid, Normal, Opaque, and solidSide.
  • Top Biome Block Tag ("top"): Check if entity is on the "top block" of the biome it is standing in.
  • Filler Biome Block Tag ("fill"): Check if entity is on the "filler block" of the biome it is standing in.

==== Misc. Changes ====

  • Allow toggling Spawn logging independent of debug logging. Debug logging still functions as master switch.

Just Another Spawner v0.6

UPDATE: Just Another Spawner v0.6.0 (1.4.7/1.5+)

  • Can see sky check was tweaked to check if higher than highest non-opaque block.
  • Two new tags: minSpawnHeight, and maxSpawnHeight. Function as their names imply, identical to the light tag with the exception that min and max are their own tags.
  • Chainable Tags. These are tags that are parsed with either an AND or OR status. Chainable tags are block, light, sky, minSpawnHeight, and maxSpawnHeight. Tags are formatted identically as before, except they can be prefixed by | or & to set their behaviour. Previous versions parsed all tags as OR and this is still the default behaviour.

On Chainable Tags. This is the most exciting feature of the update. The importance is best illustrated with an example. Tag: {!spawn:sky:block,12} What this means: Don't Spawn this entity unless it can see sky OR it is on a sand block. So this will spawn on the surface anywhere (such as plains), and anywhere there is sand (such as deserts, possibly underground if sand is there).

As mentioned previously, the default behaviour for chainable tags is to OR them. The above is equivalent to {!spawn:sky:|block,12}. Note how the ':' is still required even if '|' or '&' are present. If we change the tag to an '&' the restrictions are only activated if both restrictions are valid.

Tag: {!spawn:sky:&block,12} What this means: Don't Spawn this entity unless it can see sky AND it is on a sand block. So this entity will only spawn on the surface with sand. (Such as surface of deserts).

Chainable tags are parsed left to right and can be interrupted with non-chainable tags at will. Tag: {!spawn:sky:cap,10:&block,12} What this means: Nothing has changed, sky and &block are parsed as above. Except the entity also has an entity cap of 10.

Chainable tags may also be inserted multiple times for complex effects. Tag: {!spawn:sky:&block,2:block,87} What this means: The above entity has two valid cases it will spawn. First, if it is on sand and can see sky. The Second is if it on netherack.

Just Another Spawner v0.5

UPDATE 24/04/2013:

  • Fix crash caused by null spawnlists
  • Fix debug mode crashing due to improperly formatted messages
  • Vanilla Spawnlists are now cleared (if enabled) at end of post-initialization and on world start. Should catch most everything.

UPDATE 17/04/2013: JASv0.5.0 Changelog

  • Add MinDespawnAge as global paramaters with despawn property tag "despawnAge"
  • Add MaxDespawnDist (for instant despawn) as global paramaters with despawn property tag "maxSpawnRange"
  • Entity extended counting is now done at the pack level
  • Fix Monster Spawn Lists triggering during peaceful
  • Entity Specific Caps: Relevent Wiki

Just Another Spawner v0.3

UPDATE 11/04/2013: JAS v0.3.0 Changelog

  • Spawnlist entries generated independently of shouldSpawn toggle. Still won't be added to spawnList if false.
  • Twilight Forest Structure Support Added
  • Add Config options to disable doMobSpawning gamerule on server start. False by default.
  • Add Config options to empty vanilla spawnLists on server start. False by default.
  • LivingHandler Format Change. Adds many additional settings for Spawning and Despoawning conditions. See: Wiki Page

Just Another Spawner v0.2

UPDATE 07/04/2013: JAS v0.2.0

  • Structure spawning is now supported for vanilla structures; Swamp - Witch, Nether - NetherFortress.
  • Additional options are present for users to add Structure Spawns to Mineshafts and Strongholds.
  • Fixed bug where setting UseModLocationCheck to false did nothing
⚠️ **GitHub.com Fallback** ⚠️