Skip to content

Commit

Permalink
1.0.1
Browse files Browse the repository at this point in the history
- Added easing for the rotation
- Added a check to ignore when there is water on the ground
- Now forces the pitch constantly to avoid you from looking down
- Added descriptions for options
  • Loading branch information
Loxoz committed Jan 23, 2022
1 parent 4594064 commit d0e7a99
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 23 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ Will activate elytras and make you spin automagically when you are falling from

**Mod menu** is recommended to configure the mod.

preview: https://youtu.be/c6JsP-oEdCE
### Preview

[![Video thumbnail](https://i.ytimg.com/vi/c6JsP-oEdCE/hqdefault.jpg)](https://youtu.be/c6JsP-oEdCE)
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ minecraft_version=1.18.1
yarn_mappings=1.18.1+build.22
loader_version=0.12.12
# Mod Properties
mod_version=1.0.0
mod_version=1.0.1
maven_group=fr.loxoz
archives_base_name=autoelytrapanic
# Dependencies
Expand Down
49 changes: 42 additions & 7 deletions src/main/java/fr/loxoz/autoelytrapanic/AutoElytraPanic.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.option.KeyBinding;
Expand All @@ -15,17 +17,24 @@
import net.minecraft.item.ElytraItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Style;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.Heightmap;
import net.minecraft.world.World;
import org.lwjgl.glfw.GLFW;

import java.util.function.BiFunction;
import java.util.function.Function;

@Environment(EnvType.CLIENT)
public class AutoElytraPanic implements ClientModInitializer {
public static KeyBinding keyToggle;
public static KeyBinding keyCancel;

public static Config CONFIG;
public static ModConfig CONFIG;

public static boolean isActive = false;

Expand All @@ -35,6 +44,8 @@ public class AutoElytraPanic implements ClientModInitializer {

static Style chatStyle = Style.EMPTY.withColor(Formatting.GRAY).withItalic(true);

static int easeSteps = 5;

private static KeyBinding registerKey(String name, int def) {
return KeyBindingHelper.registerKeyBinding(new KeyBinding(KEY_PREFIX + name, InputUtil.Type.KEYSYM, def, KEY_CATEG));
}
Expand All @@ -44,13 +55,13 @@ public void onInitializeClient() {
keyToggle = registerKey("toggle", GLFW.GLFW_KEY_KP_6);
keyCancel = registerKey("cancel", GLFW.GLFW_KEY_UNKNOWN);

AutoConfig.register(Config.class, GsonConfigSerializer::new);
CONFIG = AutoConfig.getConfigHolder(Config.class).getConfig();
AutoConfig.register(ModConfig.class, GsonConfigSerializer::new);
CONFIG = AutoConfig.getConfigHolder(ModConfig.class).getConfig();

ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (keyToggle.wasPressed()) {
CONFIG.isEnabled ^= true;
AutoConfig.getConfigHolder(Config.class).save();
AutoConfig.getConfigHolder(ModConfig.class).save();
client.inGameHud.getChatHud().addMessage(new TranslatableText("message." + MODKEY + "." + (CONFIG.isEnabled ? "enabled" : "disabled")).fillStyle(chatStyle));
}
while (keyCancel.wasPressed()) {
Expand All @@ -67,15 +78,21 @@ public void onInitializeClient() {
public static void doCheck(MinecraftClient client) {
ClientPlayerEntity player = client.player;
if (player == null || player.isCreative() || player.isSpectator()) return;
if (!isActive && player.fallDistance >= CONFIG.panicFallDistance && !player.isFallFlying()) {
double fallDist = CONFIG.panicFallDistance <= 0 ? 0.01 : CONFIG.panicFallDistance; // to avoid just always activating when you set a stupid value
if (!isActive && player.fallDistance >= fallDist && !player.isFallFlying()) {
BlockState groundBlock = downwardBlockIterator(player.world, player.getBlockPos(),
(state, pos) -> !state.isOf(Blocks.WATER) && state.getCollisionShape(player.world, pos).isEmpty() // will stop at any solid block or water
);
if (groundBlock == null || groundBlock.isOf(Blocks.WATER)) return;

ItemStack itemStack = player.getEquippedStack(EquipmentSlot.CHEST);
if (itemStack.isOf(Items.ELYTRA) && ElytraItem.isUsable(itemStack)) {
isActive = true;
client.options.keyJump.setPressed(true);
if (CONFIG.chatMessageOnActivate) {
client.inGameHud.getChatHud().addMessage(new TranslatableText("message." + MODKEY + ".onActivate").fillStyle(chatStyle));
}
player.setPitch(CONFIG.activationPitch);
player.setPitch(CONFIG.flyingPitch);
new Thread(() -> {
try {
Thread.sleep(100);
Expand All @@ -89,8 +106,26 @@ else if (isActive) {
isActive = false;
}
else {
player.setYaw(player.getYaw() + CONFIG.additiveYaw);
player.setPitch(CONFIG.flyingPitch);
float yaw = CONFIG.additiveYaw / easeSteps;
new Thread(() -> {
try {
for (int i = 0; i < easeSteps; i++) {
if (i != 0) Thread.sleep(50 / easeSteps);
player.setYaw(player.getYaw() + yaw);
}
} catch (Exception ignored) {}
}).start();
}
}
}

public static BlockState downwardBlockIterator(World world, BlockPos startPos, BiFunction<BlockState, BlockPos, Boolean> skip) {
BlockPos pos = startPos;
while (skip.apply(world.getBlockState(pos), pos) && pos.getY() >= world.getBottomY()) {
pos = pos.add(0,-1,0);
}
if (pos.getY() < world.getBottomY()) return null;
return world.getBlockState(pos);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
public class AutoElytraPanicModMenu implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> AutoConfig.getConfigScreen(Config.class, parent).get();
return parent -> AutoConfig.getConfigScreen(ModConfig.class, parent).get();
}
}
12 changes: 0 additions & 12 deletions src/main/java/fr/loxoz/autoelytrapanic/Config.java

This file was deleted.

19 changes: 19 additions & 0 deletions src/main/java/fr/loxoz/autoelytrapanic/ModConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package fr.loxoz.autoelytrapanic;

import me.shedaniel.autoconfig.ConfigData;
import me.shedaniel.autoconfig.annotation.Config;
import me.shedaniel.autoconfig.annotation.ConfigEntry;

@Config(name = AutoElytraPanic.MODKEY)
public class ModConfig implements ConfigData {
@ConfigEntry.Gui.Tooltip()
boolean isEnabled = false;
@ConfigEntry.Gui.Tooltip()
double panicFallDistance = 10;
@ConfigEntry.Gui.Tooltip()
float flyingPitch = -10;
@ConfigEntry.Gui.Tooltip()
float additiveYaw = 45;
@ConfigEntry.Gui.Tooltip()
boolean chatMessageOnActivate = false;
}
7 changes: 6 additions & 1 deletion src/main/resources/assets/autoelytrapanic/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,15 @@
"message.autoelytrapanic.disabled": "Auto Elytra Panic is now §c§oDisabled",
"text.autoconfig.autoelytrapanic.title": "Auto Elytra Panic Configuration",
"text.autoconfig.autoelytrapanic.option.isEnabled": "Enabled",
"text.autoconfig.autoelytrapanic.option.isEnabled.@Tooltip": "Is this thingy enabled",
"text.autoconfig.autoelytrapanic.option.panicFallDistance": "Panic Fall Distance",
"text.autoconfig.autoelytrapanic.option.activationPitch": "Activation Pitch",
"text.autoconfig.autoelytrapanic.option.panicFallDistance.@Tooltip": "The minimum Fall Distance to check before activating",
"text.autoconfig.autoelytrapanic.option.flyingPitch": "Flying Pitch",
"text.autoconfig.autoelytrapanic.option.flyingPitch.@Tooltip": "The pitch to be looking when active",
"text.autoconfig.autoelytrapanic.option.additiveYaw": "Additive Yaw",
"text.autoconfig.autoelytrapanic.option.additiveYaw.@Tooltip": "The yaw amount added between each Game Tick to make you spin",
"text.autoconfig.autoelytrapanic.option.chatMessageOnActivate": "Chat message on activate",
"text.autoconfig.autoelytrapanic.option.chatMessageOnActivate.@Tooltip": "If you want the mod to send a message in the chat when it activates",
"message.autoelytrapanic.onActivate": "Auto Elytra Panic activated",
"message.autoelytrapanic.cancelled": "Auto Elytra Panic cancelled"
}

0 comments on commit d0e7a99

Please sign in to comment.