Skip to content

Commit

Permalink
feat: crouch + jump to fly ( very simple rn )
Browse files Browse the repository at this point in the history
feat: Power#tick
  • Loading branch information
Duzos committed Aug 27, 2024
1 parent 3739511 commit 0d0db9a
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 16 deletions.
56 changes: 52 additions & 4 deletions src/main/java/mc/duzo/timeless/power/Power.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package mc.duzo.timeless.power;

import java.util.function.Consumer;

import mc.duzo.timeless.datagen.provider.lang.Translatable;
import mc.duzo.timeless.registry.Identifiable;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;

import mc.duzo.timeless.datagen.provider.lang.Translatable;
import mc.duzo.timeless.registry.Identifiable;
import java.util.function.Consumer;

public abstract class Power implements Identifiable, Translatable {
public abstract boolean run(ServerPlayerEntity player);
public abstract void tick(ServerPlayerEntity player);

@Override
public String getTranslationKey() {
Expand All @@ -32,6 +32,54 @@ public boolean run(ServerPlayerEntity player) {
action.accept(player);
return true;
}

@Override
public void tick(ServerPlayerEntity player) {

}
};
}

public static class Builder {
private final Identifier id;
private Consumer<ServerPlayerEntity> run = player -> {};
private Consumer<ServerPlayerEntity> tick = player -> {};

private Builder(Identifier id) {
this.id = id;
}
public static Builder create(Identifier id) {
return new Builder(id);
}

public Builder run(Consumer<ServerPlayerEntity> run) {
this.run = run;
return this;
}

public Builder tick(Consumer<ServerPlayerEntity> tick) {
this.tick = tick;
return this;
}

public Power build() {
return new Power() {
@Override
public Identifier id() {
return id;
}

@Override
public boolean run(ServerPlayerEntity player) {
run.accept(player);
return true;
}

@Override
public void tick(ServerPlayerEntity player) {
tick.accept(player);
}
};
}
}
}
6 changes: 5 additions & 1 deletion src/main/java/mc/duzo/timeless/power/PowerRegistry.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package mc.duzo.timeless.power;

import mc.duzo.timeless.power.impl.FlightPower;
import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder;

import net.minecraft.registry.Registry;
Expand All @@ -17,7 +18,10 @@ public static <T extends Power> T register(T entry) {
return Registry.register(REGISTRY, entry.id(), entry);
}

public static Power TO_CASE = Power.create(new Identifier(Timeless.MOD_ID, "to_case"), player -> MarkFiveCase.toCase(player, false)).register();
public static Power TO_CASE = Power.Builder.create(new Identifier(Timeless.MOD_ID, "to_case"))
.run(player -> MarkFiveCase.toCase(player, false))
.build().register();
public static Power FLIGHT = new FlightPower().register();

public static void init() {}
}
32 changes: 32 additions & 0 deletions src/main/java/mc/duzo/timeless/power/impl/FlightPower.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package mc.duzo.timeless.power.impl;

import mc.duzo.timeless.Timeless;
import mc.duzo.timeless.power.Power;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;

public class FlightPower extends Power {
private final Identifier id;

public FlightPower() {
this.id = new Identifier(Timeless.MOD_ID, "flight");
}

@Override
public boolean run(ServerPlayerEntity player) {
return false;
}

@Override
public void tick(ServerPlayerEntity player) {
if (player.isSneaking() && !player.isOnGround()) {
player.setVelocity(player.getVelocity().add(0, 0.25, 0));
player.velocityModified = true;
}
}

@Override
public Identifier id() {
return this.id;
}
}
4 changes: 4 additions & 0 deletions src/main/java/mc/duzo/timeless/suit/data/SuitData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package mc.duzo.timeless.suit.data;

public class SuitData {
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
package mc.duzo.timeless.suit.ironman.mk5;

import java.util.Optional;

import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;

import net.minecraft.util.Identifier;

import mc.duzo.timeless.power.PowerList;
import mc.duzo.timeless.power.PowerRegistry;
import mc.duzo.timeless.suit.client.ClientSuit;
Expand All @@ -15,14 +8,19 @@
import mc.duzo.timeless.suit.ironman.mk5.client.MarkFiveModel;
import mc.duzo.timeless.suit.set.SetRegistry;
import mc.duzo.timeless.suit.set.SuitSet;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.util.Identifier;

import java.util.Optional;

public class MarkFiveSuit extends IronManSuit {
private final PowerList powers;

public MarkFiveSuit() {
super("mark_five");

this.powers = PowerList.of(PowerRegistry.TO_CASE);
this.powers = PowerList.of(PowerRegistry.TO_CASE, PowerRegistry.FLIGHT);
}

@Override
Expand Down
20 changes: 17 additions & 3 deletions src/main/java/mc/duzo/timeless/suit/item/SuitItem.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
package mc.duzo.timeless.suit.item;

import mc.duzo.timeless.registry.Identifiable;
import mc.duzo.timeless.suit.Suit;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ArmorMaterial;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.TypedActionResult;
import net.minecraft.world.World;

import mc.duzo.timeless.registry.Identifiable;
import mc.duzo.timeless.suit.Suit;

public abstract class SuitItem extends ArmorItem implements Identifiable {
private final Suit parent;

Expand Down Expand Up @@ -41,4 +43,16 @@ public TypedActionResult<ItemStack> equipAndSwap(Item item, World world, PlayerE

return super.equipAndSwap(item, world, user, hand);
}

@Override
public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) {
super.inventoryTick(stack, world, entity, slot, selected);

if (world.isClient()) return;

if (!(entity instanceof ServerPlayerEntity player)) return;
if (!stack.equals(player.getEquippedStack(EquipmentSlot.CHEST))) return; // return if this stack isnt being worn in chest

this.parent.getPowers().forEach(power -> power.tick(player));
}
}

0 comments on commit 0d0db9a

Please sign in to comment.