pta-1.21.1-2.1.0.jar
Curse Maven Snippet
What's new
[1.21.1-2.1.0] — NeoForge
The NeoForge 1.21.1 release. The JSON you write is unchanged (schema_version: 2), but where you put it changed: interactions are now datapack data.
⚠️ Migrating from 1.20.1 (2.0.x)
- Interactions move to a datapack. Copy your files from
config/punchthemall/interactions/intodata/<namespace>/pta/interaction/inside a datapack. Ids come from the path (data/mypack/pta/interaction/early/flint.json→mypack:early/flint). - Only
schema_version: 2is accepted. The legacy (schema 1) format is gone — convert first, using the mapping table in docs/interaction-format.md. - The
Loaderconfig section is gone (recursive_discovery,lowercase_generated_ids,load_from_datapacks). All other config sections are unchanged.
Added
- Interactions are datapack data, at
data/<namespace>/pta/interaction/*.json. They reload with/reload, can be overridden by pack order, and supportneoforge:conditions. The server syncs its loaded set to clients on join and after every reload, so JEI/EMI are correct on dedicated servers with no setup. - Native EMI support, alongside JEI (now JEI 19).
- Biome
#tagsinconditions.biomes, in addition to exact biome/dimension ids. - JSON schema (
docs/interaction.schema.json) for editor autocomplete and validation. - Example datapack at
examples/punchthemall-examples— 40 interactions covering every field of the format, each catalogued with what it shows and how to trigger it in game. - Item conditions are spelled out in JEI and EMI. The hand/target tooltips used to print the tag structure back at you (
Enchantments[].lvl : [1 - 5] where {id:"minecraft:efficiency"}). They now read as two plain blocks — The item must have / The item must NOT have — with enchantments named and levelled ("Efficiency I - V"). EMI shows them too, where it previously showed none. left_clickonairnow works. It never could before, on either loader: the event behind it is client-only, so the server never saw the swing. The client now reports it, and only when a pack actually defines such an interaction.
Changed
- Ported to NeoForge 21.1.x / Java 21 (ModDevGradle).
- Item data now uses Data Components internally (1.20.5+ removed item NBT). PTA matches items against a version-stable view (
Damage,Enchantments:[{id,lvl}],custom), so yournbt/nbt_predicatesexpressions keep working unchanged across mod versions. - Interactions are synced by a small server-to-client payload sent on join and after each
/reload. (A datapack registry would sync for free, but/reloadcannot re-read one — see docs/porting/neoforge-1.21.1-plan.md.)
Fixed
- NBT range checks compare numerically. A
RangeTagwas matched by exact tag type, so a file mixing widths —{Damage:{RangeTag:[0,500]}}(ints) against a short value, or[2s,7s]against an int — could silently never match, or throw. Whitelists and blacklists now both compare as numbers. target.kind: "any"no longer reports a phantom error. Trying both a block and a fluid lookup is the whole point ofany, but the failing side loggedUnknown block/fluideven when the other succeeded, sending pack makers after a problem that did not exist.- JEI drop tooltips no longer carry a "Recipe By: PunchThemAll" line.
- Weighted drop selection no longer has an off-by-one bias (it slightly over-weighted the first entry and under-weighted the last — noticeable with
weight: 1fillers). - Random rolls now use the world's random source consistently, instead of a global RNG.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include
This mod has no related projects

