Update
Some checks are pending
build / build (17, ubuntu-22.04) (push) Waiting to run
build / build (17, windows-2022) (push) Waiting to run

This commit is contained in:
2024-04-09 21:17:17 +02:00
parent 64c6f17d7f
commit 6c2df592c5
21 changed files with 206 additions and 331 deletions

View File

@@ -1,43 +0,0 @@
package dev.venomcode.jumpvader;
import org.spongepowered.configurate.CommentedConfigurationNode;
import org.spongepowered.configurate.ConfigurateException;
import org.spongepowered.configurate.hocon.HoconConfigurationLoader;
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
import org.spongepowered.configurate.objectmapping.meta.Comment;
import org.spongepowered.configurate.objectmapping.meta.Setting;
import org.spongepowered.configurate.serialize.SerializationException;
import java.io.IOException;
import java.nio.file.Path;
@ConfigSerializable
public class JumpVaderConfig
{
public boolean getEnabled()
{
return enabled;
}
public int getMaxVerticalBlocks()
{
return maxVerticleBlocks;
}
public String getAlternativeBlock()
{
return placeholderBlockRaw;
}
@Setting("mod enabled")
@Comment("Toggles the entire mod on/off. Doesnt delete blocks/items if set to off!")
private boolean enabled = true;
@Setting("max vertical blocks")
@Comment("The maximum amount of blocks a player can move vertically using the jump vader")
private int maxVerticleBlocks = 128;
@Setting("display block")
@Comment("Sets the 'fake' block to display as a placeholder for the jump vader block.")
private String placeholderBlockRaw = "minecraft:orange_wool";
}

View File

@@ -1,104 +0,0 @@
package dev.venomcode.jumpvader;
import dev.venomcode.jumpvader.blocks.JumpVaderBlock;
import dev.venomcode.serverapi.api.ServerAPI;
import dev.venomcode.serverapi.api.event.SAPIPlayerEvents;
import eu.pb4.polymer.core.api.item.PolymerBlockItem;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.spongepowered.configurate.CommentedConfigurationNode;
import org.spongepowered.configurate.ConfigurateException;
import org.spongepowered.configurate.hocon.HoconConfigurationLoader;
import java.nio.file.Path;
public class JumpVaderMod implements ModInitializer {
// This logger is used to write text to the console and the log file.
// It is considered best practice to use your mod id as the logger's name.
// That way, it's clear which mod wrote info, warnings, and errors.
public static final String MODID = "jumpvader";
public static final Logger LOGGER = LoggerFactory.getLogger(MODID);
@Override
public void onInitialize()
{
JumpVaderConfig config = getConfig();
saveConfig();
Identifier jumpVaderProxyIdent = new Identifier(config.getAlternativeBlock());
Item jumpVaderProxyItem = Registries.ITEM.get(jumpVaderProxyIdent);
JUMP_VADER_BLOCK = new JumpVaderBlock(FabricBlockSettings.copyOf(Blocks.BAMBOO_PLANKS), Registries.BLOCK.get(jumpVaderProxyIdent));
Registry.register(Registries.BLOCK, new Identifier(JumpVaderMod.MODID, "jumpvader_block"), JUMP_VADER_BLOCK);
Registry.register( Registries.ITEM, new Identifier(JumpVaderMod.MODID, "jumpvader_block"), new PolymerBlockItem( JUMP_VADER_BLOCK, new FabricItemSettings(), jumpVaderProxyItem ) );
SAPIPlayerEvents.JUMP.register((player -> {
if(!config.getEnabled())
return true;
BlockPos testPos = player.getBlockPos().down();
if(player.getWorld().getBlockState(testPos).getBlock() instanceof JumpVaderBlock jumpVaderBlock)
{
return !jumpVaderBlock.onJump(testPos, player);
}
return true;
}));
SAPIPlayerEvents.SNEAK.register((player -> {
if(!config.getEnabled())
return true;
BlockPos testPos = player.getBlockPos().down();
if(player.getWorld().getBlockState(testPos).getBlock() instanceof JumpVaderBlock jumpVaderBlock) {
jumpVaderBlock.onCrouch(testPos, player);
}
return true;
}));
}
public static JumpVaderBlock JUMP_VADER_BLOCK;
public static JumpVaderConfig getConfig() {
if(_configCached != null)
return _configCached;
try {
CommentedConfigurationNode node = configLoader.load();
_configCached = node.get(JumpVaderConfig.class);
}
catch (ConfigurateException ex) {
LOGGER.error(ServerAPI.Logger.Error("[ERROR]Failed to load jump_vader config."));
}
return _configCached;
}
public static void saveConfig() {
CommentedConfigurationNode node = CommentedConfigurationNode.root();
try {
node.set(JumpVaderConfig.class, _configCached);
configLoader.save(node);
}
catch (ConfigurateException ex) {
LOGGER.error(ServerAPI.Logger.Error("[ERROR]Failed to save jump_vader config."));
}
}
private static final HoconConfigurationLoader configLoader = HoconConfigurationLoader.builder()
.path(Path.of(ServerAPI.CONFIG_PATH + "jump_vader.conf"))
.build();
private static JumpVaderConfig _configCached = null;
}

View File

@@ -1,94 +0,0 @@
package dev.venomcode.jumpvader.blocks;
import dev.venomcode.jumpvader.JumpVaderMod;
import dev.venomcode.jumpvader.ifaces.IJumpVaderListener;
import eu.pb4.polymer.core.api.block.PolymerBlock;
import eu.pb4.polymer.core.api.block.SimplePolymerBlock;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
public class JumpVaderBlock extends SimplePolymerBlock implements IJumpVaderListener {
public JumpVaderBlock(Settings settings, Block polymerBlock) {
super(settings, polymerBlock);
}
@Override
public boolean onJump(BlockPos pos , ServerPlayerEntity player )
{
if(!JumpVaderMod.getConfig().getEnabled())
return false;
pos = pos.up();
ServerWorld w = (ServerWorld) player.getWorld();
int count = 0;
while(count < JumpVaderMod.getConfig().getMaxVerticalBlocks() && pos.getY() < 316)
{
Block blk = w.getBlockState( pos ).getBlock();
if(blk instanceof JumpVaderBlock)
{
final BlockPos tpPos = pos.up();
if(w.getBlockState( tpPos ).getBlock().equals( Blocks.AIR ) && w.getBlockState( tpPos.up() ).getBlock().equals( Blocks.AIR ))
{
player.teleport( tpPos.getX() + 0.5f, tpPos.getY(), tpPos.getZ() + 0.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 );
return true;
}
}
pos = pos.up();
count++;
}
return false;
}
@Override
public void onCrouch( BlockPos pos , ServerPlayerEntity player )
{
if(!JumpVaderMod.getConfig().getEnabled())
return;
pos = pos.down();
ServerWorld w = (ServerWorld) player.getWorld();
int count = 0;
while(count < JumpVaderMod.getConfig().getMaxVerticalBlocks() && pos.getY() >= -64)
{
Block blk = w.getBlockState( pos ).getBlock();
if(blk instanceof JumpVaderBlock)
{
final BlockPos tpPos = pos.up();
if(w.getBlockState( tpPos ).getBlock().equals( Blocks.AIR ) && w.getBlockState( tpPos.up() ).getBlock().equals( Blocks.AIR ))
{
player.teleport( tpPos.getX() + 0.5f, tpPos.getY(), tpPos.getZ() + 0.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 );
return;
}
}
pos = pos.down();
count++;
}
}
private static final Identifier _identifier = new Identifier( JumpVaderMod.MODID, "jumpvader_block" );
}

View File

@@ -1,10 +0,0 @@
package dev.venomcode.jumpvader.ifaces;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
public interface IJumpVaderListener
{
boolean onJump(BlockPos pos, ServerPlayerEntity player );
void onCrouch( BlockPos pos, ServerPlayerEntity player );
}

View File

@@ -0,0 +1,47 @@
package systems.brn.televator;
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;
public class Televator implements ModInitializer {
public static final String MODID = "televator";
public static final String MODELID = "televator";
@Override
public void onInitialize()
{
PolymerResourcePackUtils.addModAssets(MODID);
PolymerResourcePackUtils.markAsRequired();
TelevatorBlock.register();
ServerTickEvents.END_SERVER_TICK.register(server -> {
// 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);
}
}
// Check if the player is jumping
if (player.getVelocity().y > 0 && !player.isOnGround()) {
BlockPos testPos = player.getBlockPos().down();
if(player.getWorld().getBlockState(testPos).getBlock() instanceof TelevatorBlock jumpVaderBlock)
{
jumpVaderBlock.handleMovement(testPos, player, true);
}
}
});
});
}
public static TelevatorBlock JUMP_VADER_BLOCK;
}

View File

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

View File

@@ -0,0 +1,77 @@
package systems.brn.televator.blocks;
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;
import eu.pb4.polymer.blocks.api.PolymerTexturedBlock;
import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.Item;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
public class TelevatorBlock extends Block implements PolymerTexturedBlock {
private final BlockState polymerBlockState;
public TelevatorBlock(Settings settings, BlockModelType type, String modelId) {
super(settings);
this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(type, PolymerBlockModel.of(new Identifier(Televator.MODID, modelId)));
}
@Override
public Block getPolymerBlock(BlockState state) {
return this.polymerBlockState.getBlock();
}
@Override
public BlockState getPolymerBlockState(BlockState state) {
return this.polymerBlockState;
}
public static void register() {
var modId = new Identifier(Televator.MODID, Televator.MODELID);
var block = Registry.register(Registries.BLOCK, modId,
new TelevatorBlock(FabricBlockSettings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, Televator.MODELID));
Registry.register(Registries.ITEM, modId, new TelevatorBlockItem(new Item.Settings(), block, Televator.MODELID));
}
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()) {
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)) {
teleportWithEffect(player, world, tpPos);
}
}
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);
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);
}
}

View File

@@ -0,0 +1,33 @@
package systems.brn.televator.items;
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;
public class TelevatorBlockItem extends BlockItem implements PolymerItem {
private final PolymerModelData polymerModel;
public TelevatorBlockItem(Settings settings, Block block, String modelId) {
super(block, settings);
this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, new Identifier(Televator.MODID, modelId));
}
@Override
public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
return this.polymerModel.item();
}
@Override
public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
return this.polymerModel.value();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

View File

@@ -0,0 +1,3 @@
{
"block.televator.televator": "Jump Vader"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

View File

@@ -1,3 +0,0 @@
{
"block.jumpvader.jumpvader_block": "Jump Vader"
}

View File

@@ -6,7 +6,7 @@
"entries": [
{
"type": "minecraft:item",
"name": "jumpvader:jumpvader_block"
"name": "televator:televator"
}
],
"conditions": [

View File

@@ -17,7 +17,7 @@
}
},
"result": {
"item": "jumpvader:jumpvader_block",
"item": "televator:televator",
"count": 2
}
}

View File

@@ -1,38 +1,34 @@
{
"schemaVersion": 1,
"id": "jumpvader",
"id": "televator",
"version": "${version}",
"name": "Jump Vader",
"description": "Ender Vaders ServerSide Only",
"authors": [
"VenomCodeDev"
"VenomCodeDev",
"BRNSystems"
],
"contact": {
"homepage": "https://github.com/VenomCodeDev/JumpVaderMod",
"sources": "https://github.com/VenomCodeDev/JumpVaderMod"
"homepage": "https://github.com/VenomCodeDev/TelevatorMod",
"sources": "https://github.com/VenomCodeDev/TelevatorMod"
},
"license": "MIT",
"icon": "assets/jumpvader/icon.png",
"icon": "assets/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"dev.venomcode.jumpvader.JumpVaderMod"
"systems.brn.televator.Televator"
]
},
"mixins": [
"jumpvader.mixins.json"
],
"depends": {
"fabricloader": ">=0.14.21",
"minecraft": "~1.20.1",
"fabricloader": ">=0.15.9",
"minecraft": "~1.20.4",
"java": ">=17",
"fabric-api": "*"
},
"suggests": {
"another-mod": "*"
"fabric-api": "*",
"polymer-core": "0.7.7+1.20.4"
}
}

View File

@@ -1,13 +0,0 @@
{
"required": true,
"minVersion": "0.8",
"package": "dev.venomcode.jumpvader.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
],
"client": [
],
"injectors": {
"defaultRequire": 1
}
}