Compare commits
23 Commits
d018c369ae
...
1.20.4
Author | SHA1 | Date | |
---|---|---|---|
ca8ef90c1e
|
|||
70822899fa
|
|||
5c5b307664
|
|||
f3d06b275a
|
|||
e78966f133
|
|||
419a5ab607 | |||
da2d60bf72 | |||
0aa33920ab | |||
15334b7221 | |||
1da82f241b | |||
f3d3cfb6ee | |||
9d4a291086 | |||
38f4464789 | |||
719702cb6d | |||
24a61bcd23 | |||
23bb09f795 | |||
0c372eaa8c | |||
706cb823e7 | |||
5e7ff98f05 | |||
caf573fc55 | |||
d59a623213 | |||
40887164a9 | |||
e33be889a4 |
40
.github/workflows/build.yml
vendored
40
.github/workflows/build.yml
vendored
@@ -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/
|
13
README.md
13
README.md
@@ -1,6 +1,6 @@
|
||||
# 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
|
||||
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.
|
||||
|
||||
## Crafting
|
||||

|
||||
|
||||
```
|
||||
G A G
|
||||
A P A
|
||||
G A G
|
||||
```
|
||||
```A``` is amethyst shard
|
||||
```G``` is glass
|
||||
```P``` is an ender pearl
|
||||
|
||||
|
||||
## Removal
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 27 KiB |
15
build.gradle
15
build.gradle
@@ -1,5 +1,5 @@
|
||||
plugins {
|
||||
id 'fabric-loom' version '1.6-SNAPSHOT'
|
||||
id 'fabric-loom' version '1.11-SNAPSHOT'
|
||||
}
|
||||
|
||||
version = project.mod_version
|
||||
@@ -30,6 +30,7 @@ dependencies {
|
||||
|
||||
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-extras:${project.polymer_version}")
|
||||
modImplementation include("eu.pb4:polymer-autohost:${project.polymer_version}")
|
||||
modImplementation include("eu.pb4:polymer-blocks:${project.polymer_version}")
|
||||
include(modImplementation("xyz.nucleoid:server-translations-api:${project.server_translations_api_version}"))
|
||||
@@ -37,9 +38,15 @@ dependencies {
|
||||
|
||||
processResources {
|
||||
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") {
|
||||
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.
|
||||
withSourcesJar()
|
||||
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
sourceCompatibility = JavaVersion.VERSION_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
}
|
||||
|
||||
jar {
|
||||
|
@@ -1,19 +1,19 @@
|
||||
# Done to increase the memory available to gradle.
|
||||
org.gradle.jvmargs=-Xmx1G
|
||||
org.gradle.parallel=true
|
||||
|
||||
# Fabric Properties
|
||||
# check these on https://fabricmc.net/develop
|
||||
minecraft_version=1.20.6
|
||||
yarn_mappings=1.20.6+build.1
|
||||
loader_version=0.15.11
|
||||
|
||||
minecraft_version=1.21.8
|
||||
yarn_mappings=1.21.8+build.1
|
||||
loader_version=0.16.14
|
||||
# Mod Properties
|
||||
mod_version = 1.0.11+1.20.6
|
||||
mod_version=1.2.5
|
||||
maven_group=systems.brn.televator
|
||||
archives_base_name=televator
|
||||
# Dependencies
|
||||
fabric_version=0.129.0+1.21.8
|
||||
|
||||
|
||||
# Dependencies
|
||||
fabric_version=0.97.8+1.20.6
|
||||
polymer_version=0.8.0-beta.8+1.20.6
|
||||
server_translations_api_version=2.3.0+1.20.5-rc2
|
||||
polymer_version=0.13.7+1.21.8
|
||||
server_translations_api_version=2.5.1+1.21.5
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
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
|
||||
zipStorePath=wrapper/dists
|
||||
|
@@ -1,20 +1,28 @@
|
||||
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 eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Televator implements ModInitializer {
|
||||
public static final String MODID = "televator";
|
||||
public static final String MODELID = "televator";
|
||||
public static final HashMap<UUID, Boolean> primed = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public void onInitialize()
|
||||
{
|
||||
|
||||
public void onInitialize() {
|
||||
PolymerResourcePackUtils.addModAssets(MODID);
|
||||
ResourcePackExtras.forDefault().addBridgedModelsFolder(Identifier.of(MODID, "item"));
|
||||
PolymerResourcePackUtils.markAsRequired();
|
||||
|
||||
TelevatorBlock.register();
|
||||
@@ -24,24 +32,24 @@ public class Televator implements ModInitializer {
|
||||
// Iterate over all online players
|
||||
server.getPlayerManager().getPlayerList().forEach(player -> {
|
||||
// Check if the player is sneaking
|
||||
if (player.isSneaking() && player.isOnGround()) {
|
||||
BlockPos testPos = player.getBlockPos().down();
|
||||
if(player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock jumpVaderBlock) {
|
||||
jumpVaderBlock.handleMovement(testPos, player, false);
|
||||
if (!player.getPlayerInput().sneak() && !player.getPlayerInput().jump()) {
|
||||
primed.put(player.getUuid(), true);
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the player is jumping
|
||||
if (player.getVelocity().y > 0 && !player.isOnGround()) {
|
||||
if (primed.getOrDefault(player.getUuid(), false)) {
|
||||
if (player.getPlayerInput().sneak()) {
|
||||
BlockPos testPos = player.getBlockPos().down();
|
||||
if(player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock jumpVaderBlock)
|
||||
{
|
||||
jumpVaderBlock.handleMovement(testPos, player, true);
|
||||
if (player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock televatorBlock) {
|
||||
televatorBlock.handleMovement(testPos, player, false);
|
||||
}
|
||||
} 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;
|
||||
|
||||
}
|
||||
|
@@ -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";
|
||||
}
|
||||
}
|
@@ -1,8 +1,13 @@
|
||||
package systems.brn.televator.blocks;
|
||||
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||
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.TelevatorConfig;
|
||||
import systems.brn.televator.items.TelevatorBlockItem;
|
||||
import eu.pb4.polymer.blocks.api.BlockModelType;
|
||||
import eu.pb4.polymer.blocks.api.PolymerBlockModel;
|
||||
@@ -21,6 +26,9 @@ import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.util.Identifier;
|
||||
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 {
|
||||
|
||||
@@ -28,44 +36,49 @@ public class TelevatorBlock extends Block implements PolymerTexturedBlock {
|
||||
|
||||
public TelevatorBlock(Settings settings, BlockModelType type, String modelId) {
|
||||
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
|
||||
public BlockState getPolymerBlockState(BlockState state) {
|
||||
public BlockState getPolymerBlockState(BlockState state, PacketContext packetContext) {
|
||||
return this.polymerBlockState;
|
||||
}
|
||||
|
||||
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,
|
||||
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) {
|
||||
pos = isJumping ? pos.up() : pos.down();
|
||||
ServerWorld world = (ServerWorld) player.getWorld();
|
||||
int count = 0;
|
||||
|
||||
while (count < TelevatorConfig.getMaxVerticalBlocks() && pos.getY() < world.getTopY() && pos.getY() >= world.getBottomY()) {
|
||||
int maxY = world.getDimension().height() + world.getDimension().minY();
|
||||
int minY = world.getDimension().minY();
|
||||
while (pos.getY() <= maxY && pos.getY() >= minY) {
|
||||
Block blk = world.getBlockState(pos).getBlock();
|
||||
|
||||
if (blk instanceof TelevatorBlock) {
|
||||
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);
|
||||
primed.put(player.getUuid(), false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
pos = isJumping ? pos.up() : pos.down();
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
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.spawnParticles(ParticleTypes.POOF, tpPos.getX() + 0.5f, tpPos.getY(), tpPos.getZ() + 0.5f, 5, 0, 0, 0, 0.25f);
|
||||
}
|
||||
|
@@ -1,33 +1,36 @@
|
||||
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 eu.pb4.polymer.core.api.item.PolymerItem;
|
||||
import eu.pb4.polymer.resourcepack.api.PolymerModelData;
|
||||
import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.nucleoid.packettweaker.PacketContext;
|
||||
|
||||
public class TelevatorBlockItem extends BlockItem implements PolymerItem {
|
||||
private final PolymerModelData polymerModel;
|
||||
private final Identifier polymerModel;
|
||||
|
||||
public TelevatorBlockItem(Settings settings, Block block, String modelId) {
|
||||
super(block, settings);
|
||||
this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, new Identifier(Televator.MODID, modelId));
|
||||
this.polymerModel = Identifier.of(Televator.MODID, modelId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
|
||||
return this.polymerModel.item();
|
||||
public Item getPolymerItem(ItemStack itemStack, PacketContext packetContext) {
|
||||
return Items.BARRIER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
|
||||
return this.polymerModel.value();
|
||||
public Identifier getPolymerItemModel(ItemStack stack, PacketContext context) {
|
||||
return polymerModel;
|
||||
}
|
||||
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 2.1 KiB |
6
src/main/resources/assets/televator/items/televator.json
Normal file
6
src/main/resources/assets/televator/items/televator.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"model": {
|
||||
"type": "minecraft:model",
|
||||
"model": "televator:item/televator"
|
||||
}
|
||||
}
|
@@ -1,3 +1,4 @@
|
||||
{
|
||||
"block.televator.televator": "Televator"
|
||||
"block.televator.televator": "Televator",
|
||||
"item.televator.televator": "Televator"
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"parent": "block/cube_column",
|
||||
"textures": {
|
||||
"end": "televator:block/televator_top",
|
||||
"side": "televator:block/televator_side"
|
||||
}
|
||||
}
|
@@ -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 |
@@ -7,15 +7,9 @@
|
||||
"#A#"
|
||||
],
|
||||
"key": {
|
||||
"#": {
|
||||
"item": "minecraft:glass"
|
||||
},
|
||||
"A": {
|
||||
"item": "minecraft:amethyst_shard"
|
||||
},
|
||||
"E": {
|
||||
"item": "minecraft:ender_pearl"
|
||||
}
|
||||
"#": "minecraft:glass",
|
||||
"A": "minecraft:amethyst_shard",
|
||||
"E": "minecraft:ender_pearl"
|
||||
},
|
||||
"result": {
|
||||
"id": "televator:televator",
|
@@ -25,10 +25,9 @@
|
||||
},
|
||||
|
||||
"depends": {
|
||||
"fabricloader": ">=0.15.11",
|
||||
"minecraft": "~1.20.6",
|
||||
"java": ">=17",
|
||||
"fabric-api": ">=0.97.8+1.20.6",
|
||||
"polymer-core": ">=0.8.0-beta.8+1.20.6"
|
||||
"fabricloader": ">=${loader_version}",
|
||||
"minecraft": ">=${minecraft_version}",
|
||||
"java": ">=21",
|
||||
"fabric-api": ">=${fabric_version}"
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user