Skip to content

Commit

Permalink
👽 Specter 1.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
CallMeEchoCodes committed Sep 8, 2024
1 parent cfbcf7f commit 32813ab
Show file tree
Hide file tree
Showing 23 changed files with 174 additions and 67 deletions.
9 changes: 5 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ fabricApi {
}

repositories {
maven("https://maven.callmeecho.dev/snapshots/")
maven("https://maven.callmeecho.dev/releases/")
maven("https://maven.terraformersmc.com/releases/")
maven("https://api.modrinth.com/maven/")
}
Expand All @@ -54,14 +54,15 @@ dependencies {
}

specterModule("api")
specterModule("core")
specterModule("block")
specterModule("config")
specterModule("core")
specterModule("entity")
specterModule("item")
specterModule("block")
specterModule("registry")
specterModule("render")

// localRuntime("dev.spiritstudios.specter:specter-debug:${deps.specter}")
modRuntimeOnly("dev.spiritstudios.specter:specter-debug:${deps.specter}")

// will be switched back to lambdynamiclights once it's updated
modCompileOnly("maven.modrinth:ryoamiclights:0.2.9+mc1.21-fabric")
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ deps.loader=0.15.11
deps.yarn=1.21+build.9

deps.fabricapi=0.103.0+1.21.1
deps.specter=1.0.0-SNAPSHOT3
deps.specter=1.0.2
18 changes: 1 addition & 17 deletions src/client/java/dev/spiritstudios/hollow/HollowClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,12 @@ public class HollowClient implements ClientModInitializer {
public void onInitializeClient() {
EntityRendererRegistry.register(HollowEntityTypeRegistrar.FIREFLY, FireflyEntityRenderer::new);

BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.PAEONIA, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.LOTUS_LILYPAD, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.GIANT_LILYPAD, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.TWIG, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.CAMPION, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.POLYPORE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.POTTED_PAEONIA, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.JAR, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.FIREFLY_JAR, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.ROOT_VINES, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.CATTAIL, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.ROOTED_ORCHID, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(HollowBlockRegistrar.POTTED_ROOTED_ORCHID, RenderLayer.getCutout());

ModelPredicateProviderRegistry.register(
HollowItemRegistrar.COPPER_HORN,
Identifier.ofVanilla("tooting"),
(stack, world, entity, seed) -> entity != null && entity.isUsingItem() && entity.getActiveItem() == stack ? 1.0F : 0.0F
);

ReflectionHelper.forEachStaticField(HollowBlockRegistrar.class, HollowLogBlock.class, (block, name, field) -> BlockRenderLayerMap.INSTANCE.putBlock(block, RenderLayer.getCutoutMipped()));

BlockEntityRendererFactories.register(HollowBlockEntityRegistrar.JAR_BLOCK_ENTITY, JarBlockEntityRenderer::new);

ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> world != null && pos != null ? 0x208030 : 0x71C35C, HollowBlockRegistrar.LOTUS_LILYPAD);
Expand All @@ -54,6 +38,6 @@ public void onInitializeClient() {

ParticleFactoryRegistry.getInstance().register(HollowParticleRegistrar.FIREFLY_JAR, FireflyJarParticle.Factory::new);

ModMenuHelper.addConfig(Hollow.MODID, HollowConfig.class);
ModMenuHelper.addConfig(Hollow.MODID, HollowConfig.INSTANCE.getId());
}
}
16 changes: 12 additions & 4 deletions src/main/java/dev/spiritstudios/hollow/Hollow.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package dev.spiritstudios.hollow;

import dev.spiritstudios.hollow.entity.FireflyEntity;
import dev.spiritstudios.hollow.loot.HollowLootTableModifications;
import dev.spiritstudios.hollow.loot.SetCopperInstrumentFunction;
import dev.spiritstudios.hollow.registry.*;
import dev.spiritstudios.hollow.worldgen.HollowBiomeModifications;
import dev.spiritstudios.specter.api.config.ConfigManager;
import dev.spiritstudios.specter.api.registry.registration.Registrar;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.fabricmc.fabric.api.registry.OxidizableBlocksRegistry;
import net.minecraft.loot.function.LootFunctionType;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.sound.SoundEvent;
Expand All @@ -16,12 +17,13 @@
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;


public class Hollow implements ModInitializer {
public static final String MODID = "hollow";
public static final Logger LOGGER = LoggerFactory.getLogger(MODID);
public static final HollowConfig CONFIG = ConfigManager.getConfig(HollowConfig.class);

public static final LootFunctionType<SetCopperInstrumentFunction> SET_COPPER_INSTRUMENT = new LootFunctionType<>(SetCopperInstrumentFunction.CODEC);

@Override
public void onInitialize() {
Expand All @@ -35,6 +37,12 @@ public void onInitialize() {
Registrar.process(HollowParticleRegistrar.class, MODID);
Registrar.process(HollowDataComponentRegistrar.class, MODID);

Registry.register(
Registries.LOOT_FUNCTION_TYPE,
Identifier.of(MODID, "set_copper_instrument"),
SET_COPPER_INSTRUMENT
);

List.of(
"call",
"melody",
Expand Down
20 changes: 11 additions & 9 deletions src/main/java/dev/spiritstudios/hollow/HollowConfig.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
package dev.spiritstudios.hollow;

import dev.spiritstudios.specter.api.config.Config;
import dev.spiritstudios.specter.api.config.annotations.Comment;
import dev.spiritstudios.specter.api.config.annotations.Sync;
import net.minecraft.util.Identifier;

public class HollowConfig implements Config {
public class HollowConfig extends Config<HollowConfig> {
public static final HollowConfig INSTANCE = create(HollowConfig.class);

@Override
public Identifier getId() { return Identifier.of(Hollow.MODID, "config"); }
public Identifier getId() { return Identifier.of(Hollow.MODID, "hollow"); }

@Sync
@Comment("Whether to revert the Copper Bulb to it's original 1-tick delay. If you aren't a redstoner, you can ignore this.")
public boolean revertCopperBulb = true;
public Value<Boolean> revertCopperBulb = booleanValue(true)
.comment("Whether to revert the Copper Bulb to it's original 1-tick delay. If you aren't a redstoner, you can ignore this.")
.sync()
.build();

@Comment("Whether to enable Hollow's custom music.")
public boolean music = true;
public Value<Boolean> music = booleanValue(true)
.comment("Whether to enable Hollow's custom music.")
.build();
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public void onEntityCollision(BlockState state, World world, BlockPos pos, Entit
}

DamageSource damageSource = new DamageSource(world.getRegistryManager().get(RegistryKeys.DAMAGE_TYPE).entryOf(SCULK_JAW_DAMAGE_TYPE));
entity.damage(damageSource, 2F);
entity.damage(damageSource, 1F);

Vec3d centerPos = pos.toCenterPos();
entity.teleport(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.minecraft.block.Block;
import net.minecraft.component.ComponentChanges;
import net.minecraft.item.Item;
import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryWrapper;
Expand Down Expand Up @@ -45,15 +43,14 @@ protected void configure(BiConsumer<Identifier, DataItemGroup> provider, Registr
}

generate((id, data) -> {
List<ItemStack> itemStacks = new ArrayList<>(data.items().stream().map(ItemConvertible::asItem).map(Item::getDefaultStack).toList());
itemStacks.addAll(items);
items.addAll(data.items());

provider.accept(
id,
new DataItemGroup(
id.toTranslationKey("item_group"),
data.icon(),
itemStacks
items
)
);
},
Expand All @@ -63,17 +60,17 @@ protected void configure(BiConsumer<Identifier, DataItemGroup> provider, Registr

@Override
protected void generate(BiConsumer<Identifier, ItemGroupData> provider, RegistryWrapper.WrapperLookup lookup) {
List<ItemConvertible> items = new ArrayList<>();
List<ItemStack> items = new ArrayList<>();
ReflectionHelper.forEachStaticField(
HollowBlockRegistrar.class,
Block.class,
(block, name, field) -> {
ItemStack stack = new ItemStack(block.asItem());
if (!stack.isEmpty()) items.add(block);
if (!stack.isEmpty()) items.add(stack);
}
);
items.add(HollowItemRegistrar.FIREFLY_SPAWN_EGG);
items.add(HollowItemRegistrar.MUSIC_DISC_POSTMORTEM);
items.add(HollowItemRegistrar.FIREFLY_SPAWN_EGG.getDefaultStack());
items.add(HollowItemRegistrar.MUSIC_DISC_POSTMORTEM.getDefaultStack());

provider.accept(
Identifier.of(MODID, "hollow"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,34 @@
package dev.spiritstudios.hollow;
package dev.spiritstudios.hollow.loot;

import dev.spiritstudios.hollow.registry.HollowItemRegistrar;
import net.fabricmc.fabric.api.loot.v3.LootTableEvents;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTables;
import net.minecraft.loot.condition.RandomChanceLootCondition;
import net.minecraft.loot.entry.ItemEntry;
import net.minecraft.loot.provider.number.UniformLootNumberProvider;

public class HollowLootTableModifications {
public static void init() {
LootTableEvents.MODIFY.register((key, tableBuilder, source, registries) -> {
if (LootTables.ANCIENT_CITY_CHEST == key && source.isBuiltin()) {
if (!source.isBuiltin()) return;

if (LootTables.ANCIENT_CITY_CHEST == key) {
LootPool.Builder lootPoolBuilder = LootPool.builder()
.with(ItemEntry.builder(HollowItemRegistrar.MUSIC_DISC_POSTMORTEM))
.conditionally(RandomChanceLootCondition.builder(0.1F));

tableBuilder.pool(lootPoolBuilder);
}

if (LootTables.PILLAGER_OUTPOST_CHEST == key) {
LootPool.Builder lootPoolBuilder = LootPool.builder()
.rolls(UniformLootNumberProvider.create(0.0F, 1.0F))
.with(ItemEntry.builder(HollowItemRegistrar.COPPER_HORN))
.apply(SetCopperInstrumentFunction.builder());

tableBuilder.pool(lootPoolBuilder);
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package dev.spiritstudios.hollow.loot;

import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import dev.spiritstudios.hollow.item.CopperHornItem;
import dev.spiritstudios.hollow.registry.HollowDataComponentRegistrar;
import net.minecraft.item.Instrument;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.condition.LootCondition;
import net.minecraft.loot.context.LootContext;
import net.minecraft.loot.function.ConditionalLootFunction;
import net.minecraft.loot.function.LootFunctionType;
import net.minecraft.loot.function.LootFunctionTypes;
import net.minecraft.loot.function.SetInstrumentLootFunction;
import net.minecraft.registry.tag.TagKey;

import java.util.List;

public class SetCopperInstrumentFunction extends ConditionalLootFunction {
public static final MapCodec<SetCopperInstrumentFunction> CODEC = RecordCodecBuilder.mapCodec(
instance -> addConditionsField(instance).apply(instance, SetCopperInstrumentFunction::new)
);

private SetCopperInstrumentFunction(List<LootCondition> conditions) {
super(conditions);
}

public static ConditionalLootFunction.Builder<?> builder() {
return builder(SetCopperInstrumentFunction::new);
}

@Override
public LootFunctionType<SetInstrumentLootFunction> getType() {
return LootFunctionTypes.SET_INSTRUMENT;
}

@Override
public ItemStack process(ItemStack stack, LootContext context) {
if (stack.getItem() instanceof CopperHornItem) {
HollowDataComponentRegistrar.CopperInstrument[] values = HollowDataComponentRegistrar.CopperInstrument.values();
stack.set(
HollowDataComponentRegistrar.COPPER_INSTRUMENT,
values[context.getRandom().nextInt(values.length)]
);
}
return stack;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import dev.spiritstudios.hollow.Hollow;
import dev.spiritstudios.hollow.HollowConfig;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.BulbBlock;
Expand All @@ -23,7 +24,7 @@ public BulbBlockMixin(Settings settings) {

@WrapOperation(method = "neighborUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BulbBlock;update(Lnet/minecraft/block/BlockState;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;)V"))
private void updateRedirect(BulbBlock instance, BlockState state, ServerWorld world, BlockPos pos, Operation<Void> original) {
if (Hollow.CONFIG.revertCopperBulb)
if (HollowConfig.INSTANCE.revertCopperBulb.get())
world.scheduleBlockTick(pos, instance, 1);
else
original.call(instance, state, world, pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import dev.spiritstudios.specter.api.registry.registration.MinecraftRegistrar;
import dev.spiritstudios.specter.api.registry.registration.Registrar;
import io.netty.buffer.ByteBuf;
import net.minecraft.component.ComponentType;
import net.minecraft.network.codec.PacketCodec;
Expand Down Expand Up @@ -71,4 +72,9 @@ public int getIndex() {
public Registry<ComponentType<?>> getRegistry() {
return Registries.DATA_COMPONENT_TYPE;
}

@Override
public Class<ComponentType<?>> getObjectType() {
return Registrar.fixGenerics(ComponentType.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import dev.spiritstudios.hollow.worldgen.FallenTreeFeatureConfig;
import dev.spiritstudios.hollow.worldgen.GiantLilypadFeature;
import dev.spiritstudios.specter.api.registry.registration.MinecraftRegistrar;
import dev.spiritstudios.specter.api.registry.registration.Registrar;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
Expand All @@ -20,4 +21,9 @@ public Registry<Feature<?>> getRegistry() {
public static final Feature<FallenTreeFeatureConfig> FALLEN_TREE = new FallenTreeFeature(FallenTreeFeatureConfig.CODEC);
public static final Feature<DefaultFeatureConfig> GIANT_LILYPAD = new GiantLilypadFeature(DefaultFeatureConfig.CODEC);
public static final Feature<DefaultFeatureConfig> CATTAILS = new CattailFeature(DefaultFeatureConfig.CODEC);

@Override
public Class<Feature<?>> getObjectType() {
return Registrar.fixGenerics(Feature.class);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.spiritstudios.hollow.registry;

import dev.spiritstudios.specter.api.registry.registration.MinecraftRegistrar;
import dev.spiritstudios.specter.api.registry.registration.Registrar;
import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes;
import net.minecraft.particle.ParticleType;
import net.minecraft.particle.SimpleParticleType;
Expand All @@ -14,4 +15,9 @@ public class HollowParticleRegistrar implements MinecraftRegistrar<ParticleType<
public Registry<ParticleType<?>> getRegistry() {
return Registries.PARTICLE_TYPE;
}

@Override
public Class<ParticleType<?>> getObjectType() {
return Registrar.fixGenerics(ParticleType.class);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package dev.spiritstudios.hollow.registry;

import dev.spiritstudios.specter.api.registry.registration.MinecraftRegistrar;
import dev.spiritstudios.specter.api.registry.registration.SoundEventRegistrar;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.sound.SoundEvent;
import net.minecraft.util.Identifier;

import static dev.spiritstudios.hollow.Hollow.MODID;

public class HollowSoundEventRegistrar implements MinecraftRegistrar<SoundEvent> {
public class HollowSoundEventRegistrar implements SoundEventRegistrar {
@Name("music_disc.postmortem")
public static final SoundEvent MUSIC_DISC_POSTMORTEM = SoundEvent.of(Identifier.of(MODID, "music_disc.postmortem"));

Expand All @@ -23,7 +24,4 @@ public class HollowSoundEventRegistrar implements MinecraftRegistrar<SoundEvent>

@Name("block.sculk_jaw.bite")
public static final SoundEvent SCULK_JAW_BITE = SoundEvent.of(Identifier.of(MODID, "block.sculk_jaw.bite"));

@Override
public Registry<SoundEvent> getRegistry() { return Registries.SOUND_EVENT; }
}
Loading

0 comments on commit 32813ab

Please sign in to comment.