A forward-porting library that brings modern Minecraft (1.21+) API features back to Forge 1.20.1. Think of it as a bridge that lets mod developers use NeoForge-style APIs while targeting the stable 1.20.1 Forge ecosystem.
All networked and synced automatically. Each attribute has a sentiment indicator ( positive/neutral/negative) with colored tooltips:
| Attribute | Default | Description |
|---|---|---|
player.block_break_speed |
1.0 | Block breaking speed multiplier |
generic.burning_time |
1.0 | Burning time multiplier |
generic.explosion_knockback_resistance |
0.0 | Explosion knockback resistance |
generic.fall_damage_multiplier |
1.0 | Fall damage multiplier |
generic.flying_speed |
0.4 | Creative flight speed |
generic.jump_strength |
0.42 | Jump height |
generic.max_absorption |
0.0 | Maximum absorption health |
player.mining_efficiency |
0.0 | Mining speed modifier |
generic.movement_efficiency |
0.0 | Movement efficiency |
generic.oxygen_bonus |
0.0 | Underwater breathing bonus |
generic.safe_fall_distance |
3.0 | Safe fall distance |
generic.scale |
1.0 | Entity scale (0.0625 ~ 16.0) |
player.sneaking_speed |
0.3 | Sneaking movement speed |
player.submerged_mining_speed |
0.2 | Underwater mining speed |
player.sweeping_damage_ratio |
0.0 | Sweeping edge damage ratio |
generic.water_movement_efficiency |
0.0 | Water movement efficiency |
player.creative_flight |
false | Boolean: enable creative flight |
Attributes are automatically added to all living entities via
PortEntityAttributeModificationEvent.
A JSON-driven data system ported from 1.21 — attach typed, codec-backed values to any registry entry:
data/<namespace>/data_maps/ JSON filesBuilt-in data maps:
portlib:compostables) — override compost chances and villager behaviorportlib:furnace_fuels) — define custom fuel burn timesType-safe persistent data on ItemStacks, modeled after 1.21's data components:
Codec-based persistence + StreamCodec-based network syncPortModifyDefaultComponentsEvent for setting default componentsNeoForge-style data attachments for entities, block entities, and levels:
StreamCodecA comprehensive event system wrapping Forge events into a clean, caller-isolated API:
PortPlayerHeartTypeEvent, PortSweepAttackEvent, PortCriticalHitEvent,
PortArrowLooseEvent, PortItemTooltipEvent, PortAnvilRepairEvent,
PortTradeWithVillagerEvent, etc.PortLivingShieldBlockEvent, PortLivingIncomingDamageEvent,
PortLivingDrownEvent, PortLivingUseTotemEvent, PortMobDespawnEvent,
PortBabyEntitySpawnEvent, etc.PortRenderLevelStageEvent, PortRenderTooltipEvent, PortRenderHandEvent,
PortRenderArmEvent, PortRegisterGuiLayersEvent, PortRegisterKeyMappingsEvent,
PortComputeFovModifierEvent, PortSelectMusicEvent, etc.PortBlockDropsEvent, PortExplosionKnockbackEvent, PortPistonEvent,
PortItemExpireEvent, PortChunkWatchEvent, etc.PortPotionBrewEvent, PortEnchantmentLevelSetEventPortVillagerTradesEvent, PortWandererTradesEventEvents are dispatched on the caller mod's own event bus, keeping mod isolation clean.
FriendlyByteBuf extensions45+ vanilla classes gain new methods through interface injection + coremods:
Holder<T> → is(), getKey(), getRegisteredName(), getData()ItemStack → setData(), getData(), data component manipulationLivingEntity → getAttribute(Holder<Attribute>), removeEffectsCuredBy()Registry / IForgeRegistry → extended lookup methodsEntity / Player / Block / Item → various extension methodsc: namespace tags (chests, cobblestones, ores, sands, storage_blocks, etc.) for
cross-mod compatibility.
PortLib itself adds no gameplay content — it is a library mod. Install it if another mod requires it. You will see 17 new attributes on your player and entities, but they only take effect when modified by other mods.