Skip to content

Commit

Permalink
feat: poisonous to frogs advancement
Browse files Browse the repository at this point in the history
  • Loading branch information
CallMeEchoCodes committed Dec 7, 2024
1 parent 70abbab commit e0528ae
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
pack.addProvider(BlockMetatagProvider::new);
pack.addProvider(BlockTagProvider::new);
pack.addProvider(ClientBlockMetatagProvider::new);
pack.addProvider(AdvancementProvider::new);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package dev.spiritstudios.hollow.mixin.client;

import com.llamalad7.mixinextras.sugar.Local;
import dev.spiritstudios.hollow.HollowConfig;
import dev.spiritstudios.hollow.HollowTags;
import dev.spiritstudios.specter.api.core.math.Easing;
import net.minecraft.block.enums.CameraSubmersionType;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.BackgroundRenderer;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.FogShape;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.MathHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
Expand Down Expand Up @@ -36,34 +39,39 @@ private static void applyCloserFog(
boolean thickFog,
float tickDelta,
CallbackInfo ci,
@Local BackgroundRenderer.FogData fogData
@Local BackgroundRenderer.FogData fogData,
@Local Entity entity
) {
if (!HollowConfig.INSTANCE.closerFog.get()) return;
if (camera.getSubmersionType() == CameraSubmersionType.WATER) return;
boolean closerFog = entity.getWorld().getBiome(entity.getBlockPos()).isIn(HollowTags.CLOSER_FOG);

if (MinecraftClient.getInstance().world != null && MinecraftClient.getInstance().player != null && MinecraftClient.getInstance().world.getBiome(MinecraftClient.getInstance().player.getBlockPos()).isIn(HollowTags.CLOSER_FOG)) {
if (closerFog) {
if (prevStart == 0.0F && prevEnd == 0.0F) {
prevEnd = fogData.fogEnd;
prevStart = fogData.fogStart;
transitionProgress = 0.0F;
}

fogData.fogStart = -8;
fogData.fogEnd = 92.0F;

transitionProgress += tickDelta;
transitionProgress = MathHelper.clamp(transitionProgress, 0.0F, DURATION);
} else if (transitionProgress > 0.0F) transitionProgress -= tickDelta;

fogData.fogStart = (float) Easing.SINE.inOut(transitionProgress, prevStart, fogData.fogStart, DURATION);
fogData.fogEnd = (float) Easing.SINE.inOut(transitionProgress, prevEnd, fogData.fogEnd, DURATION);
} else if (transitionProgress > 0.0F) {
transitionProgress -= tickDelta;
transitionProgress = MathHelper.clamp(transitionProgress, 0.0F, DURATION);
if (transitionProgress > 0.0F) {
fogData.fogStart = (float) Easing.SINE.inOut(
transitionProgress,
prevStart, viewDistance * 0.05F,
DURATION
);

fogData.fogStart = -8;
fogData.fogEnd = 92.0F;
fogData.fogEnd = (float) Easing.SINE.inOut(
transitionProgress,
prevEnd, Math.min(viewDistance, 148) * 0.5F,
DURATION
);

fogData.fogStart = (float) Easing.SINE.inOut(transitionProgress, prevStart, fogData.fogStart, DURATION);
fogData.fogEnd = (float) Easing.SINE.inOut(transitionProgress, prevEnd, fogData.fogEnd, DURATION);
fogData.fogShape = FogShape.SPHERE;
}

transitionProgress = MathHelper.clamp(transitionProgress, 0.0F, DURATION);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"parent": "minecraft:husbandry/root",
"criteria": {
"witnessed_frog_poisoning": {
"trigger": "hollow:frog_poisoned"
}
},
"display": {
"description": {
"translate": "advancements.husbandry.witnessed_frog_poisoning.description"
},
"icon": {
"count": 1,
"id": "hollow:firefly_spawn_egg"
},
"title": {
"translate": "advancements.husbandry.witnessed_frog_poisoning.title"
}
},
"requirements": [
[
"witnessed_frog_poisoning"
]
]
}
4 changes: 3 additions & 1 deletion src/main/java/dev/spiritstudios/hollow/Hollow.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import dev.spiritstudios.specter.api.registry.RegistryHelper;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.minecraft.advancement.criterion.Criterion;
import net.minecraft.loot.function.LootFunctionType;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
Expand All @@ -22,7 +23,7 @@
import java.util.List;


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

Expand All @@ -40,6 +41,7 @@ public void onInitialize() {
RegistryHelper.registerParticleTypes(HollowParticleTypes.class, MODID);
RegistryHelper.registerDataComponentTypes(HollowDataComponentTypes.class, MODID);
RegistryHelper.registerFields(Registries.FOLIAGE_PLACER_TYPE, RegistryHelper.fixGenerics(FoliagePlacerType.class), HollowFoliagePlacerTypes.class, MODID);
RegistryHelper.registerFields(Registries.CRITERION, RegistryHelper.fixGenerics(Criterion.class), HollowCriteria.class, MODID);

HollowGameRules.init();

Expand Down
11 changes: 7 additions & 4 deletions src/main/java/dev/spiritstudios/hollow/HollowConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,21 @@
import dev.spiritstudios.specter.api.config.ConfigHolder;
import dev.spiritstudios.specter.api.config.Value;

public class HollowConfig extends Config<HollowConfig> {
public final class HollowConfig extends Config<HollowConfig> {
public static final ConfigHolder<HollowConfig, ?> HOLDER = ConfigHolder.builder(
Hollow.id("hollow"), HollowConfig.class
).build();
public static final HollowConfig INSTANCE = HOLDER.get();

public Value<Boolean> revertCopperBulb = booleanValue(true)
public final 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();

public Value<Boolean> music = booleanValue(true)
public final Value<Boolean> music = booleanValue(true)
.comment("Whether to enable Hollow's custom music.")
.build();

public final Value<Boolean> closerFog = booleanValue(true)
.comment("Moves the fog closer to the camera in some biomes")
.build();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package dev.spiritstudios.hollow.datagen;

import dev.spiritstudios.hollow.registry.HollowCriteria;
import dev.spiritstudios.hollow.registry.HollowItems;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementProvider;
import net.minecraft.advancement.Advancement;
import net.minecraft.advancement.AdvancementEntry;
import net.minecraft.advancement.AdvancementFrame;
import net.minecraft.advancement.criterion.TickCriterion;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;

import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;

public class AdvancementProvider extends FabricAdvancementProvider {
protected AdvancementProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(output, registryLookup);
}

@SuppressWarnings("removal")
@Override
public void generateAdvancement(RegistryWrapper.WrapperLookup wrapperLookup, Consumer<AdvancementEntry> consumer) {
Advancement.Builder.createUntelemetered()
.display(
HollowItems.FIREFLY_SPAWN_EGG,
Text.translatable("advancements.husbandry.witnessed_frog_poisoning.title"),
Text.translatable("advancements.husbandry.witnessed_frog_poisoning.description"),
null,
AdvancementFrame.TASK,
true,
true,
false
)
.parent(Identifier.ofVanilla("husbandry/root"))
.criterion(
"witnessed_frog_poisoning",
HollowCriteria.FROG_POISONED.create(new TickCriterion.Conditions(Optional.empty()))
)
.build(consumer, "husbandry/witnessed_frog_poisoning");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import dev.spiritstudios.hollow.HollowGameRules;
import dev.spiritstudios.hollow.HollowTags;
import dev.spiritstudios.hollow.registry.HollowCriteria;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.minecraft.entity.Entity;
import net.minecraft.entity.ai.brain.task.FrogEatEntityTask;
import net.minecraft.entity.effect.StatusEffectInstance;
Expand Down Expand Up @@ -32,5 +34,6 @@ private void eat(ServerWorld world, FrogEntity frog, CallbackInfo ci) {
);

frog.addStatusEffect(statusEffectInstance);
PlayerLookup.tracking(frog).forEach(HollowCriteria.FROG_POISONED::trigger);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.spiritstudios.hollow.registry;

import net.minecraft.advancement.criterion.TickCriterion;

public final class HollowCriteria {
public static final TickCriterion FROG_POISONED = new TickCriterion();
}
5 changes: 4 additions & 1 deletion src/main/resources/assets/hollow/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,5 +96,8 @@
"subtitles.copper_horn.sweet": "Sweet",
"subtitles.copper_horn.moon": "Moon",
"subtitles.copper_horn.love": "Love",
"gamerule.doFrogPoisoning": "Allow frog poisoning"
"gamerule.doFrogPoisoning": "Allow Frog poisoning",
"advancements.husbandry.witnessed_frog_poisoning.title": "Poisonous To Frogs",
"advancements.husbandry.witnessed_frog_poisoning.description": "Witness a Frog be poisoned upon eating a Firefly",
"entity.hollow.firefly": "Firefly"
}

0 comments on commit e0528ae

Please sign in to comment.