Compare commits

..

23 Commits

Author SHA1 Message Date
ca8ef90c1e Update to 1.21.8 2025-07-20 23:17:22 +02:00
70822899fa Update to 1.21.5 2025-04-16 20:08:55 +02:00
5c5b307664 Update 2024-12-23 08:48:41 +01:00
f3d06b275a Update to 1.21.4 2024-12-05 14:22:38 +01:00
e78966f133 Update 2024-11-01 23:28:44 +01:00
419a5ab607 Fix update stuff
Some checks failed
build / build (17, ubuntu-22.04) (push) Failing after 1m58s
build / build (17, windows-2022) (push) Has been cancelled
2024-08-18 11:50:01 +02:00
da2d60bf72 Update Fabric API
Some checks failed
build / build (17, ubuntu-22.04) (push) Failing after 4m9s
build / build (17, windows-2022) (push) Has been cancelled
2024-08-14 18:34:53 +02:00
0aa33920ab Update Fabric API
Some checks failed
build / build (17, ubuntu-22.04) (push) Has been cancelled
build / build (17, windows-2022) (push) Has been cancelled
2024-06-28 22:09:10 +02:00
15334b7221 Fix fabric API
Some checks failed
build / build (17, ubuntu-22.04) (push) Has been cancelled
build / build (17, windows-2022) (push) Has been cancelled
Update polymer
2024-06-18 16:05:26 +02:00
1da82f241b Update polymer
Some checks failed
build / build (17, ubuntu-22.04) (push) Has been cancelled
build / build (17, windows-2022) (push) Has been cancelled
2024-06-14 15:40:13 +02:00
f3d3cfb6ee Bump server translations
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-06-14 15:08:42 +02:00
9d4a291086 Bump server translations
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-06-14 15:01:46 +02:00
38f4464789 Bump server translations
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-06-14 14:39:28 +02:00
719702cb6d Update to 1.21
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-06-14 14:37:18 +02:00
24a61bcd23 Change icon
Some checks failed
build / build (17, ubuntu-22.04) (push) Has been cancelled
build / build (17, windows-2022) (push) Has been cancelled
2024-05-25 14:22:35 +02:00
23bb09f795 Fix texture
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-05-25 14:14:50 +02:00
0c372eaa8c Add texture from YeahAkis_
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-05-25 14:06:28 +02:00
706cb823e7 Bump versions
Some checks failed
build / build (17, ubuntu-22.04) (push) Has been cancelled
build / build (17, windows-2022) (push) Has been cancelled
2024-05-24 07:57:36 +02:00
5e7ff98f05 Bump versions
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-05-24 07:55:45 +02:00
caf573fc55 bump java
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-05-24 07:51:41 +02:00
d59a623213 Change recepie
Some checks failed
build / build (17, ubuntu-22.04) (push) Has been cancelled
build / build (17, windows-2022) (push) Has been cancelled
2024-05-07 20:07:41 +02:00
40887164a9 Change recepie
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run
2024-05-07 20:07:21 +02:00
e33be889a4 Merge fix from Archie Lamb 2024-05-07 20:03:17 +02:00
21 changed files with 144 additions and 155 deletions

View File

@@ -1,40 +0,0 @@
# Automatically build the project and run any configured tests for every push
# and submitted pull request. This can help catch issues that only occur on
# certain platforms or Java versions, and provides a first line of defence
# against bad commits.
name: build
on: [pull_request, push]
jobs:
build:
strategy:
matrix:
# Use these Java versions
java: [
17, # Current Java LTS & minimum supported by Minecraft
]
# and run on both Linux and Windows
os: [ubuntu-22.04, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- name: checkout repository
uses: actions/checkout@v3
- name: validate gradle wrapper
uses: gradle/wrapper-validation-action@v1
- name: setup jdk ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: 'microsoft'
- name: make gradle wrapper executable
if: ${{ runner.os != 'Windows' }}
run: chmod +x ./gradlew
- name: build
run: ./gradlew build
- name: capture build artifacts
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS
uses: actions/upload-artifact@v3
with:
name: Artifacts
path: build/libs/

View File

@@ -1,6 +1,6 @@
# Televator - A Fabric Server-Side Elevator Mod # Televator - A Fabric Server-Side Elevator Mod
based on [JumpVader](https://github.com/StimzRx/JumpVaderMod) by [StimzRx](https://github.com/StimzRx/JumpVaderMod) based on [JumpVader](https://github.com/StimzRx/JumpVaderMod) by [StimzRx](https://github.com/StimzRx)
## What is it ## What is it
It's a mod that lets you place "Televator" blocks similar to the Quark mod's elevators. It's a mod that lets you place "Televator" blocks similar to the Quark mod's elevators.
@@ -8,7 +8,16 @@ You simply place one above the other at any vertical distance, and jump/crouch o
block to go in between the different heights. block to go in between the different heights.
## Crafting ## Crafting
![Crafting Recipe](https://github.com/VenomCodeDev/TelevatorMod/blob/d1cd96ccd846d3249a4a7fcb298e740775ee344c/assets/TelevatorCraftingRecipe.png?raw=true)
```
G A G
A P A
G A G
```
```A``` is amethyst shard
```G``` is glass
```P``` is an ender pearl
## Removal ## Removal

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -1,5 +1,5 @@
plugins { plugins {
id 'fabric-loom' version '1.6-SNAPSHOT' id 'fabric-loom' version '1.11-SNAPSHOT'
} }
version = project.mod_version version = project.mod_version
@@ -30,6 +30,7 @@ dependencies {
include(modImplementation("eu.pb4:polymer-core:${project.polymer_version}")) include(modImplementation("eu.pb4:polymer-core:${project.polymer_version}"))
modImplementation include("eu.pb4:polymer-resource-pack:${project.polymer_version}") modImplementation include("eu.pb4:polymer-resource-pack:${project.polymer_version}")
modImplementation include("eu.pb4:polymer-resource-pack-extras:${project.polymer_version}")
modImplementation include("eu.pb4:polymer-autohost:${project.polymer_version}") modImplementation include("eu.pb4:polymer-autohost:${project.polymer_version}")
modImplementation include("eu.pb4:polymer-blocks:${project.polymer_version}") modImplementation include("eu.pb4:polymer-blocks:${project.polymer_version}")
include(modImplementation("xyz.nucleoid:server-translations-api:${project.server_translations_api_version}")) include(modImplementation("xyz.nucleoid:server-translations-api:${project.server_translations_api_version}"))
@@ -37,9 +38,15 @@ dependencies {
processResources { processResources {
inputs.property "version", project.version inputs.property "version", project.version
inputs.property "minecraft_version", project.minecraft_version
inputs.property "loader_version", project.loader_version
inputs.property "loader_version", project.loader_version
filesMatching("fabric.mod.json") { filesMatching("fabric.mod.json") {
expand "version": project.version expand "version": project.version,
"minecraft_version": project.minecraft_version,
"fabric_version": project.fabric_version,
"loader_version": project.loader_version
} }
} }
@@ -53,8 +60,8 @@ java {
// If you remove this line, sources will not be generated. // If you remove this line, sources will not be generated.
withSourcesJar() withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_21
} }
jar { jar {

View File

@@ -1,19 +1,19 @@
# Done to increase the memory available to gradle. # Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G org.gradle.jvmargs=-Xmx1G
org.gradle.parallel=true org.gradle.parallel=true
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/develop # check these on https://fabricmc.net/develop
minecraft_version=1.20.6 minecraft_version=1.21.8
yarn_mappings=1.20.6+build.1 yarn_mappings=1.21.8+build.1
loader_version=0.15.11 loader_version=0.16.14
# Mod Properties # Mod Properties
mod_version = 1.0.11+1.20.6 mod_version=1.2.5
maven_group = systems.brn.televator maven_group=systems.brn.televator
archives_base_name = televator archives_base_name=televator
# Dependencies
fabric_version=0.129.0+1.21.8
# Dependencies # Dependencies
fabric_version=0.97.8+1.20.6 polymer_version=0.13.7+1.21.8
polymer_version=0.8.0-beta.8+1.20.6 server_translations_api_version=2.5.1+1.21.5
server_translations_api_version=2.3.0+1.20.5-rc2

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -1,20 +1,28 @@
package systems.brn.televator; package systems.brn.televator;
import com.mojang.authlib.GameProfile;
import eu.pb4.polymer.resourcepack.extras.api.ResourcePackExtras;
import eu.pb4.polymer.resourcepack.impl.client.rendering.PolymerResourcePack;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import systems.brn.televator.blocks.TelevatorBlock; import systems.brn.televator.blocks.TelevatorBlock;
import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import java.util.HashMap;
import java.util.UUID;
public class Televator implements ModInitializer { public class Televator implements ModInitializer {
public static final String MODID = "televator"; public static final String MODID = "televator";
public static final String MODELID = "televator"; public static final String MODELID = "televator";
public static final HashMap<UUID, Boolean> primed = new HashMap<>();
@Override @Override
public void onInitialize() public void onInitialize() {
{
PolymerResourcePackUtils.addModAssets(MODID); PolymerResourcePackUtils.addModAssets(MODID);
ResourcePackExtras.forDefault().addBridgedModelsFolder(Identifier.of(MODID, "item"));
PolymerResourcePackUtils.markAsRequired(); PolymerResourcePackUtils.markAsRequired();
TelevatorBlock.register(); TelevatorBlock.register();
@@ -24,24 +32,24 @@ public class Televator implements ModInitializer {
// Iterate over all online players // Iterate over all online players
server.getPlayerManager().getPlayerList().forEach(player -> { server.getPlayerManager().getPlayerList().forEach(player -> {
// Check if the player is sneaking // Check if the player is sneaking
if (player.isSneaking() && player.isOnGround()) { if (!player.getPlayerInput().sneak() && !player.getPlayerInput().jump()) {
BlockPos testPos = player.getBlockPos().down(); primed.put(player.getUuid(), true);
if(player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock jumpVaderBlock) {
jumpVaderBlock.handleMovement(testPos, player, false);
} }
} if (primed.getOrDefault(player.getUuid(), false)) {
if (player.getPlayerInput().sneak()) {
// Check if the player is jumping
if (player.getVelocity().y > 0 && !player.isOnGround()) {
BlockPos testPos = player.getBlockPos().down(); BlockPos testPos = player.getBlockPos().down();
if(player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock jumpVaderBlock) if (player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock televatorBlock) {
{ televatorBlock.handleMovement(testPos, player, false);
jumpVaderBlock.handleMovement(testPos, player, true); }
} else if (player.getPlayerInput().jump()) {
BlockPos testPos = player.getBlockPos().down();
if (player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock televatorBlock) {
televatorBlock.handleMovement(testPos, player, true);
}
} }
} }
}); });
}); });
} }
public static TelevatorBlock JUMP_VADER_BLOCK;
} }

View File

@@ -1,12 +0,0 @@
package systems.brn.televator;
public class TelevatorConfig {
public static int getMaxVerticalBlocks()
{
return 128;
}
public static String getAlternativeBlock()
{
return "minecraft:orange_wool";
}
}

View File

@@ -1,8 +1,13 @@
package systems.brn.televator.blocks; package systems.brn.televator.blocks;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock;
import net.minecraft.item.ItemGroups;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.text.Text;
import net.minecraft.world.Heightmap;
import systems.brn.televator.Televator; import systems.brn.televator.Televator;
import systems.brn.televator.TelevatorConfig;
import systems.brn.televator.items.TelevatorBlockItem; import systems.brn.televator.items.TelevatorBlockItem;
import eu.pb4.polymer.blocks.api.BlockModelType; import eu.pb4.polymer.blocks.api.BlockModelType;
import eu.pb4.polymer.blocks.api.PolymerBlockModel; import eu.pb4.polymer.blocks.api.PolymerBlockModel;
@@ -21,6 +26,9 @@ import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents; import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import xyz.nucleoid.packettweaker.PacketContext;
import static systems.brn.televator.Televator.primed;
public class TelevatorBlock extends Block implements PolymerTexturedBlock { public class TelevatorBlock extends Block implements PolymerTexturedBlock {
@@ -28,44 +36,49 @@ public class TelevatorBlock extends Block implements PolymerTexturedBlock {
public TelevatorBlock(Settings settings, BlockModelType type, String modelId) { public TelevatorBlock(Settings settings, BlockModelType type, String modelId) {
super(settings); super(settings);
this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(type, PolymerBlockModel.of(new Identifier(Televator.MODID, modelId))); this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(type, PolymerBlockModel.of(Identifier.of(Televator.MODID, "block/" + modelId)));
} }
@Override @Override
public BlockState getPolymerBlockState(BlockState state) { public BlockState getPolymerBlockState(BlockState state, PacketContext packetContext) {
return this.polymerBlockState; return this.polymerBlockState;
} }
public static void register() { public static void register() {
var modId = new Identifier(Televator.MODID, Televator.MODELID); var modId = Identifier.of(Televator.MODID, Televator.MODELID);
var block = Registry.register(Registries.BLOCK, modId, var block = Registry.register(Registries.BLOCK, modId,
new TelevatorBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, Televator.MODELID)); new TelevatorBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL).registryKey(RegistryKey.of(RegistryKeys.BLOCK, modId)), BlockModelType.FULL_BLOCK, Televator.MODELID));
Registry.register(Registries.ITEM, modId, new TelevatorBlockItem(new Item.Settings(), block, Televator.MODELID)); Item item = Registry.register(Registries.ITEM, modId, new TelevatorBlockItem(new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, modId)), block, Televator.MODELID));
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item));
} }
public void handleMovement(BlockPos pos, ServerPlayerEntity player, boolean isJumping) { public void handleMovement(BlockPos pos, ServerPlayerEntity player, boolean isJumping) {
pos = isJumping ? pos.up() : pos.down(); pos = isJumping ? pos.up() : pos.down();
ServerWorld world = (ServerWorld) player.getWorld(); ServerWorld world = (ServerWorld) player.getWorld();
int count = 0; int maxY = world.getDimension().height() + world.getDimension().minY();
int minY = world.getDimension().minY();
while (count < TelevatorConfig.getMaxVerticalBlocks() && pos.getY() < world.getTopY() && pos.getY() >= world.getBottomY()) { while (pos.getY() <= maxY && pos.getY() >= minY) {
Block blk = world.getBlockState(pos).getBlock(); Block blk = world.getBlockState(pos).getBlock();
if (blk instanceof TelevatorBlock) { if (blk instanceof TelevatorBlock) {
final BlockPos tpPos = pos.up(); final BlockPos tpPos = pos.up();
if (world.getBlockState(tpPos).getBlock().equals(Blocks.AIR) && world.getBlockState(tpPos.up()).getBlock().equals(Blocks.AIR)) { if (tpPos.getY() + 1 > maxY || (world.getBlockState(tpPos).getBlock().equals(Blocks.AIR) && world.getBlockState(tpPos.up()).getBlock().equals(Blocks.AIR))) {
teleportWithEffect(player, world, tpPos); teleportWithEffect(player, world, tpPos);
primed.put(player.getUuid(), false);
break;
} }
} }
pos = isJumping ? pos.up() : pos.down(); pos = isJumping ? pos.up() : pos.down();
count++;
} }
} }
private void teleportWithEffect(ServerPlayerEntity player, ServerWorld w, BlockPos tpPos) { private void teleportWithEffect(ServerPlayerEntity player, ServerWorld w, BlockPos tpPos) {
player.teleport(tpPos.getX() + 0.5f, tpPos.getY(), tpPos.getZ() + 0.5f);
player.teleport(tpPos.getX() + 0.5d, tpPos.getY(), tpPos.getZ() + 0.5d, true);
player.setVelocity(0, 0, 0);
player.setSneaking(false);
w.playSound(null, tpPos, SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.PLAYERS, 0.5f, 1.5f); w.playSound(null, tpPos, SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.PLAYERS, 0.5f, 1.5f);
w.spawnParticles(ParticleTypes.POOF, tpPos.getX() + 0.5f, tpPos.getY(), tpPos.getZ() + 0.5f, 5, 0, 0, 0, 0.25f); w.spawnParticles(ParticleTypes.POOF, tpPos.getX() + 0.5f, tpPos.getY(), tpPos.getZ() + 0.5f, 5, 0, 0, 0, 0.25f);
} }

View File

@@ -1,33 +1,36 @@
package systems.brn.televator.items; package systems.brn.televator.items;
import eu.pb4.polymer.resourcepack.extras.api.ResourcePackExtras;
import eu.pb4.polymer.resourcepack.extras.api.format.item.model.BasicItemModel;
import eu.pb4.polymer.resourcepack.impl.client.rendering.PolymerResourcePack;
import net.minecraft.resource.ResourcePack;
import systems.brn.televator.Televator; import systems.brn.televator.Televator;
import eu.pb4.polymer.core.api.item.PolymerItem; import eu.pb4.polymer.core.api.item.PolymerItem;
import eu.pb4.polymer.resourcepack.api.PolymerModelData;
import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable; import xyz.nucleoid.packettweaker.PacketContext;
public class TelevatorBlockItem extends BlockItem implements PolymerItem { public class TelevatorBlockItem extends BlockItem implements PolymerItem {
private final PolymerModelData polymerModel; private final Identifier polymerModel;
public TelevatorBlockItem(Settings settings, Block block, String modelId) { public TelevatorBlockItem(Settings settings, Block block, String modelId) {
super(block, settings); super(block, settings);
this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, new Identifier(Televator.MODID, modelId)); this.polymerModel = Identifier.of(Televator.MODID, modelId);
} }
@Override @Override
public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) { public Item getPolymerItem(ItemStack itemStack, PacketContext packetContext) {
return this.polymerModel.item(); return Items.BARRIER;
} }
@Override @Override
public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) { public Identifier getPolymerItemModel(ItemStack stack, PacketContext context) {
return this.polymerModel.value(); return polymerModel;
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "televator:item/televator"
}
}

View File

@@ -1,3 +1,4 @@
{ {
"block.televator.televator": "Televator" "block.televator.televator": "Televator",
"item.televator.televator": "Televator"
} }

View File

@@ -0,0 +1,7 @@
{
"parent": "block/cube_column",
"textures": {
"end": "televator:block/televator_top",
"side": "televator:block/televator_side"
}
}

View File

@@ -1,6 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"all": "televator:block/televator"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

View File

@@ -7,15 +7,9 @@
"#A#" "#A#"
], ],
"key": { "key": {
"#": { "#": "minecraft:glass",
"item": "minecraft:glass" "A": "minecraft:amethyst_shard",
}, "E": "minecraft:ender_pearl"
"A": {
"item": "minecraft:amethyst_shard"
},
"E": {
"item": "minecraft:ender_pearl"
}
}, },
"result": { "result": {
"id": "televator:televator", "id": "televator:televator",

View File

@@ -25,10 +25,9 @@
}, },
"depends": { "depends": {
"fabricloader": ">=0.15.11", "fabricloader": ">=${loader_version}",
"minecraft": "~1.20.6", "minecraft": ">=${minecraft_version}",
"java": ">=17", "java": ">=21",
"fabric-api": ">=0.97.8+1.20.6", "fabric-api": ">=${fabric_version}"
"polymer-core": ">=0.8.0-beta.8+1.20.6"
} }
} }