Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/java/mc/duzo/timeless/power/PowerRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public static <T extends Power> T register(T entry) {
})
.build().register();
public static Power SWIFT_SNEAK = Power.Builder.create(new Identifier(Timeless.MOD_ID, "swift_sneak")).build().register();
public static Power SUPER_SPEED = new SpeedPower().register();

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

import mc.duzo.timeless.Timeless;
import mc.duzo.timeless.power.TogglePower;
import mc.duzo.timeless.suit.api.EquipSoundSupplier;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.sound.SoundEvent;
import net.minecraft.util.Identifier;

import java.util.Optional;

public class SpeedPower extends TogglePower<EquipSoundSupplier> {
public SpeedPower(String modid, String key) {
super(modid, key);
}

public SpeedPower() {
this(Timeless.MOD_ID, "speed");
}

@Override
public void tick(ServerPlayerEntity player) {
if (player.getServer().getTicks() % 20 != 0) return; // Run every second
if (!this.getValue(player)) return;
player.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, 22, 10, false, false));
}

@Override
protected Class<EquipSoundSupplier> getSuitClass() {
return EquipSoundSupplier.class;
}

@Override
public Identifier getAnimation(boolean isOpening, EquipSoundSupplier suit) {
return null;
}

@Override
public Optional<SoundEvent> getSound(EquipSoundSupplier suit) {
return Optional.empty();
}
}
9 changes: 2 additions & 7 deletions src/main/java/mc/duzo/timeless/suit/Suit.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import mc.duzo.timeless.datagen.provider.lang.Translatable;
import mc.duzo.timeless.power.Power;
import mc.duzo.timeless.power.PowerList;
import mc.duzo.timeless.suit.api.EquipSoundSupplier;
import mc.duzo.timeless.suit.client.ClientSuit;
import mc.duzo.timeless.suit.client.ClientSuitRegistry;
import mc.duzo.timeless.suit.set.SuitSet;
Expand All @@ -16,7 +17,7 @@

import java.util.Optional;

public abstract class Suit implements Identifiable, Translatable {
public abstract class Suit implements Identifiable, Translatable, EquipSoundSupplier {
public static Optional<Suit> findSuit(LivingEntity entity, EquipmentSlot slot) {
if (!(entity.getEquippedStack(slot).getItem() instanceof SuitItem item)) return Optional.empty();
return Optional.ofNullable(item.getSuit());
Expand All @@ -37,12 +38,6 @@ public boolean hasPower(Power power) {
return this.getPowers().contains(power);
}
public abstract SoundEvent getStepSound();
public Optional<SoundEvent> getEquipSound() {
return Optional.empty();
}
public Optional<SoundEvent> getUnequipSound() {
return Optional.empty();
}

/**
* whether this suit is always visible on the player
Expand Down
56 changes: 56 additions & 0 deletions src/main/java/mc/duzo/timeless/suit/flash/FlashSuit.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package mc.duzo.timeless.suit.flash;

import mc.duzo.timeless.Timeless;
import mc.duzo.timeless.datagen.provider.lang.AutomaticSuitEnglish;
import mc.duzo.timeless.power.PowerList;
import mc.duzo.timeless.suit.Suit;
import net.minecraft.sound.SoundEvent;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Identifier;

public abstract class FlashSuit extends Suit implements AutomaticSuitEnglish {
private final Identifier id;
protected final PowerList powers;

protected FlashSuit(Identifier id, PowerList powers) {
this.id = id;
this.powers = powers;
}

protected FlashSuit(String mark, String modid, PowerList powers) {
this(new Identifier(modid, "flash_" + mark), powers);
}

/**
* For Timeless heroes ONLY
* Addon mods should use other constructor
*/
protected FlashSuit(String mark, PowerList powers) {
this(mark, Timeless.MOD_ID, powers);
}

@Override
public PowerList getPowers() {
return powers;
}

@Override
public boolean isBinding() {
return false;
}

@Override
public boolean isAlwaysVisible() {
return false;
}

@Override
public Identifier id() {
return this.id;
}

@Override
public SoundEvent getStepSound() {
return SoundEvents.BLOCK_WOOL_STEP;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package mc.duzo.timeless.suit.flash.generic;

import mc.duzo.animation.generic.AnimationInfo;
import mc.duzo.timeless.power.PowerList;
import mc.duzo.timeless.power.PowerRegistry;
import mc.duzo.timeless.suit.client.ClientSuit;
import mc.duzo.timeless.suit.client.render.SuitModel;
import mc.duzo.timeless.suit.client.render.generic.SteveSuitModel;
import mc.duzo.timeless.suit.flash.FlashSuit;
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.entity.LivingEntity;
import net.minecraft.util.Identifier;

import java.util.Optional;
import java.util.function.Supplier;

// todo - i dont know any flash lore so this is just generic placeholder
public class GenericFlashSuit extends FlashSuit {
public GenericFlashSuit() {
super("generic", PowerList.of(PowerRegistry.SUPER_SPEED));
}

@Override
public SuitSet getSet() {
return SetRegistry.FLASH;
}

@Environment(EnvType.CLIENT)
@Override
protected ClientSuit createClient() {
AnimationInfo info = new AnimationInfo(AnimationInfo.RenderType.TORSO_HEAD, null, AnimationInfo.Movement.ALLOW, null);

return new ClientSuit(this) {
@Override
public Supplier<SuitModel> model() {
return () -> new SteveSuitModel(this);
}

@Override
public Optional<Identifier> emission() {
return Optional.empty();
}

@Override
public AnimationInfo getAnimationInfo(LivingEntity entity) {
if (!(getSet().isWearing(entity))) return null;
return info;
}
};
}
}
38 changes: 38 additions & 0 deletions src/main/java/mc/duzo/timeless/suit/flash/item/FlashSuitItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package mc.duzo.timeless.suit.flash.item;

import mc.duzo.timeless.core.items.SuitItem;
import mc.duzo.timeless.core.items.SuitMaterial;
import mc.duzo.timeless.datagen.provider.lang.AutomaticSuitEnglish;
import mc.duzo.timeless.datagen.provider.model.AutomaticModel;
import mc.duzo.timeless.suit.Suit;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraft.recipe.Ingredient;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Util;

import java.util.EnumMap;

public class FlashSuitItem extends SuitItem implements AutomaticModel, AutomaticSuitEnglish {
public FlashSuitItem(Suit suit, Type type) {
super(suit, FlashMaterial.INSTANCE, type, new FabricItemSettings().maxCount(1));
}

private static class FlashMaterial extends SuitMaterial {
public FlashMaterial(Item repair) {
super("flash", 33, Util.make(new EnumMap(Type.class), map -> {
map.put(Type.BOOTS, 3);
map.put(Type.LEGGINGS, 6);
map.put(Type.CHESTPLATE, 8);
map.put(Type.HELMET, 3);
}), 10, SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, 2.0F, 0.0F, () -> Ingredient.ofItems(repair));
}

public FlashMaterial() {
this(Items.LEATHER); // todo
}

public static FlashMaterial INSTANCE = new FlashMaterial();
}
}
6 changes: 6 additions & 0 deletions src/main/java/mc/duzo/timeless/suit/set/SetRegistry.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package mc.duzo.timeless.suit.set;

import mc.duzo.timeless.suit.flash.generic.GenericFlashSuit;
import mc.duzo.timeless.suit.flash.item.FlashSuitItem;
import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder;

import net.minecraft.registry.Registry;
Expand Down Expand Up @@ -28,6 +30,7 @@ public static <T extends SuitSet> T register(T suit) {
public static SuitSet MARK_THREE;
public static SuitSet MARK_TWO;
public static SuitSet BATMAN_66;
public static SuitSet FLASH;

public static void init() {
// Iron Man
Expand All @@ -38,5 +41,8 @@ public static void init() {

// Batman
BATMAN_66 = register(new RegisteringSuitSet(new Batman66Suit(), BatmanSuitItem::new));

// Flash
FLASH = register(new RegisteringSuitSet(new GenericFlashSuit(), FlashSuitItem::new));
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading