Skip to content

Commit

Permalink
almost done with the big (well actually small) H
Browse files Browse the repository at this point in the history
  • Loading branch information
tazercopter committed Oct 20, 2024
1 parent 779ad45 commit 4eae986
Show file tree
Hide file tree
Showing 9 changed files with 137 additions and 41 deletions.
39 changes: 39 additions & 0 deletions src/main/java/galena/oreganized/client/OreganizedClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,38 @@
import galena.oreganized.client.render.entity.ShrapnelBombRender;
import galena.oreganized.client.render.gui.StunningOverlay;
import galena.oreganized.index.OBlocks;
import galena.oreganized.index.OEffects;
import galena.oreganized.index.OEntityTypes;
import galena.oreganized.index.OItems;
import galena.oreganized.world.IDoorProgressHolder;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.FogRenderer;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.CrossbowItem;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.client.event.RegisterGuiOverlaysEvent;
import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.client.event.ViewportEvent;
import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
Expand Down Expand Up @@ -117,6 +125,37 @@ public static void renderThirdPersonArm(ModelPart arm, boolean rightArm) {
@Mod.EventBusSubscriber(modid = Oreganized.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE)
public static class ForgeBusEvents {

public static MobEffectInstance fogEffect;
private static int timer = 0;

@SubscribeEvent
public static void clientTick(TickEvent.ClientTickEvent event) {
if (!(Minecraft.getInstance().gameRenderer.getMainCamera().getEntity() instanceof Player player)) return;
fogEffect = player.getEffect(OEffects.FOG.get());
}

@SubscribeEvent
public static void fogEffectFog(ViewportEvent.RenderFog event) {
if (fogEffect != null && fogEffect.getFactorData().isPresent()) {
LivingEntity entity = (LivingEntity) Minecraft.getInstance().gameRenderer.getMainCamera().getEntity();
float f = Mth.lerp(fogEffect.getFactorData().get().getFactor(entity, (float) event.getPartialTick()), event.getFarPlaneDistance(), 25.0F);
event.setNearPlaneDistance(event.getMode() == FogRenderer.FogMode.FOG_SKY ? -2F : f * -0.5F);
event.setFarPlaneDistance(f);
event.setCanceled(true);
}
}

@SubscribeEvent
public static void fogEffectColor(ViewportEvent.ComputeFogColor event) {
if (fogEffect != null) {
LivingEntity entity = (LivingEntity) Minecraft.getInstance().gameRenderer.getMainCamera().getEntity();
float color = fogEffect.getFactorData().isPresent() ? 1.2F - (fogEffect.getFactorData().get()).getFactor(entity, (float) event.getPartialTick()) : 0.0F;
event.setRed(event.getRed()*color);
event.setGreen(event.getGreen()*color);
event.setBlue(event.getBlue()*color);
}
}

@SubscribeEvent
public static void addTooltips(ItemTooltipEvent event) {
if (event.getItemStack().is(OItems.BUSH_HAMMER.get())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public static LayerDefinition createBodyLayer() {
PartDefinition partdefinition = meshdefinition.getRoot();

PartDefinition head = partdefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-2.5F, -5, -2.5F, 5, 5, 5)
.texOffs(10, 28).addBox(-1.5F, 0, -2.5F, 3, 2, 2)
.texOffs(12, 16).addBox(-2.5F, -5, -2.5F, 5, 5, 5, new CubeDeformation(0.5F)), PartPose.offset(0, 18, 0));

PartDefinition body = partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 10).addBox(-1.5F, 0, -1, 3, 4, 2)
Expand All @@ -41,7 +42,7 @@ public static LayerDefinition createBodyLayer() {
PartDefinition left_arm = partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(22, 26).addBox(-6.25F, -0.5F, 0.9F, 5, 6, 0)
.texOffs(22, 26).addBox(-4.25F, -0.5F, -0.9F, 5, 6, 0)
.texOffs(22, 8).addBox(-1.25F, -0.5F, -1, 2, 6, 2), PartPose.offsetAndRotation(1.75F, 18.5F, 0, 0, 0, -1.5708F));

return LayerDefinition.create(meshdefinition, 32, 32);
}

Expand Down
20 changes: 20 additions & 0 deletions src/main/java/galena/oreganized/content/effect/FogEffect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package galena.oreganized.content.effect;

import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectCategory;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.LivingEntity;

import java.util.function.Supplier;

public class FogEffect extends MobEffect {
public FogEffect() {
super(MobEffectCategory.NEUTRAL, 2696993);
this.setFactorDataFactory(() -> new MobEffectInstance.FactorData(22));
}

@Override
public void applyEffectTick(LivingEntity entity, int amplifier) {

}
}
87 changes: 54 additions & 33 deletions src/main/java/galena/oreganized/content/entity/holler/Holler.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@
import com.google.common.collect.ImmutableList;
import com.mojang.serialization.Dynamic;
import galena.oreganized.index.OBlocks;
import galena.oreganized.index.OEffects;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.protocol.game.DebugPackets;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.util.RandomSource;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffectUtil;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.ai.Brain;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
Expand All @@ -24,10 +29,12 @@
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SnowyDirtBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;

import javax.annotation.Nullable;
import java.time.LocalDate;
import java.time.temporal.ChronoField;

Expand All @@ -53,15 +60,15 @@ public class Holler extends PathfinderMob {

public Holler(EntityType<? extends PathfinderMob> entityType, Level level) {
super(entityType, level);
this.moveControl = new FlyingMoveControl(this, 20, true);
moveControl = new FlyingMoveControl(this, 20, true);
}

protected Brain.Provider<Holler> brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
}

protected Brain<?> makeBrain(Dynamic<?> p_218344_) {
return HollerAi.makeBrain(this.brainProvider().makeBrain(p_218344_));
return HollerAi.makeBrain(brainProvider().makeBrain(p_218344_));
}

@Override
Expand All @@ -76,20 +83,28 @@ public boolean removeWhenFarAway(double p_21542_) {

@Override
protected void customServerAiStep() {
this.level().getProfiler().push("hollerBrain");
this.getBrain().tick((ServerLevel)this.level(), this);
this.level().getProfiler().pop();
this.level().getProfiler().push("hollerActivityUpdate");
level().getProfiler().push("hollerBrain");
getBrain().tick((ServerLevel)level(), this);
level().getProfiler().pop();
level().getProfiler().push("hollerActivityUpdate");
HollerAi.updateActivity(this);
this.level().getProfiler().pop();
level().getProfiler().pop();
super.customServerAiStep();
if ((tickCount + getId()) % 120 == 0) {
applyFogAround((ServerLevel) level(), position(), this, 20);
}
}

public static void applyFogAround(ServerLevel level, Vec3 pos, @Nullable Entity source, int radius) {
MobEffectInstance mobeffectinstance = new MobEffectInstance(OEffects.FOG.get(), 260, 0, false, false);
MobEffectUtil.addEffectToPlayersAround(level, source, pos, radius, mobeffectinstance, 200);
}

@Override
public void aiStep() {
super.aiStep();
if (!this.level().isClientSide && this.isAlive() && this.tickCount % 10 == 0) {
this.heal(1.0F);
if (!level().isClientSide && isAlive() && tickCount % 10 == 0) {
heal(1.0F);
}
}

Expand All @@ -101,10 +116,10 @@ protected void sendDebugPackets() {

@Override
public void tick() {
this.noPhysics = true;
noPhysics = true;
super.tick();
this.noPhysics = false;
this.setNoGravity(true);
noPhysics = false;
setNoGravity(true);
}

public static AttributeSupplier.Builder createAttributes() {
Expand All @@ -127,24 +142,24 @@ protected PathNavigation createNavigation(Level level) {

@Override
public void travel(Vec3 vec3) {
if (this.isControlledByLocalInstance()) {
if (this.isInWater()) {
this.moveRelative(0.02F, vec3);
this.move(MoverType.SELF, this.getDeltaMovement());
this.setDeltaMovement(this.getDeltaMovement().scale(0.800000011920929));
} else if (this.isInLava()) {
this.moveRelative(0.02F, vec3);
this.move(MoverType.SELF, this.getDeltaMovement());
this.setDeltaMovement(this.getDeltaMovement().scale(0.5));
if (isControlledByLocalInstance()) {
if (isInWater()) {
moveRelative(0.02F, vec3);
move(MoverType.SELF, getDeltaMovement());
setDeltaMovement(getDeltaMovement().scale(0.800000011920929));
} else if (isInLava()) {
moveRelative(0.02F, vec3);
move(MoverType.SELF, getDeltaMovement());
setDeltaMovement(getDeltaMovement().scale(0.5));
} else {
this.moveRelative(this.getSpeed(), vec3);
this.move(MoverType.SELF, this.getDeltaMovement());
this.setDeltaMovement(this.getDeltaMovement().scale(0.9100000262260437));
moveRelative(getSpeed(), vec3);
move(MoverType.SELF, getDeltaMovement());
setDeltaMovement(getDeltaMovement().scale(0.9100000262260437));
}
}

this.calculateEntityAnimation(false);
this.tryCheckInsideBlocks();
calculateEntityAnimation(false);
tryCheckInsideBlocks();
}

@Override
Expand Down Expand Up @@ -177,18 +192,24 @@ protected float getSoundVolume() {

@Override
protected void onInsideBlock(BlockState state) {
if (!state.isAir() && isPanicking()) {
if ((state.getBlock() instanceof SnowyDirtBlock || state.is(Blocks.DIRT)) && isPanicking()) {
BlockPos.withinManhattan(blockPosition(), 3, 1, 3).forEach(pos -> {
if (level().getBlockState(pos).getBlock() instanceof SnowyDirtBlock && level().random.nextFloat() < 0.25)
level().setBlockAndUpdate(pos, OBlocks.BURIAL_DIRT.get().withPropertiesOf(state));
if (level().isClientSide) level().addParticle(ParticleTypes.SMOKE, pos.getX(), pos.getY()+1.5, pos.getZ(), 0, 0, 0);
double x = getX()+0.5+random.nextInt(-100, 100)*0.01;
double y = getY()+1+random.nextInt(-100, 100)*0.01;
double z = getZ()+0.5+random.nextInt(-100, 100)*0.01;
if (!level().isClientSide) ((ServerLevel) level()).sendParticles(ParticleTypes.SMOKE, x, y, z, 3, 0, 0, 0, 0);
});

if (level().isClientSide) {
// level().playSound(this, SoundEvents.IT);
level().addParticle(ParticleTypes.SMOKE, getX(), getY(), getZ(), 0, 0, 0);
if (!level().isClientSide) {
ServerLevel level = (ServerLevel) level();
double x = getX()+0.5+random.nextInt(-100, 100)*0.01;
double y = getY()+random.nextInt(-100, 100)*0.01;
double z = getZ()+0.5+random.nextInt(-100, 100)*0.01;
level.sendParticles(ParticleTypes.SMOKE, x, y, z, 3, 0, 0, 0, 0);
}
this.remove(RemovalReason.KILLED);
remove(RemovalReason.KILLED);
}
}

Expand All @@ -197,7 +218,7 @@ public static boolean checkHollerSpawnRules(EntityType<Holler> entityType, Level
}

public boolean isPanicking() {
return this.brain.getMemory(MemoryModuleType.IS_PANICKING).isPresent();
return brain.getMemory(MemoryModuleType.IS_PANICKING).isPresent();
}

private static boolean isHalloween() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ protected static Brain<?> makeBrain(Brain<Holler> hollerBrain) {
}

private static void initCoreActivity(Brain<Holler> hollerBrain) {
hollerBrain.addActivity(Activity.CORE, 0, ImmutableList.of(new Swim(0.8F), new AnimalPanic(3F), new LookAtTargetSink(45, 90), new MoveToTargetSink()));
hollerBrain.addActivity(Activity.CORE, 0, ImmutableList.of(new Swim(0.8F), new HollerPanic(3F), new LookAtTargetSink(45, 90), new MoveToTargetSink()));
}

private static void initIdleActivity(Brain<Holler> hollerBrain) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@

import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.tags.FluidTags;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.PathfinderMob;
import net.minecraft.world.entity.ai.behavior.AnimalPanic;
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
import net.minecraft.world.entity.ai.memory.WalkTarget;
import net.minecraft.world.entity.ai.util.LandRandomPos;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SnowyDirtBlock;
import net.minecraft.world.phys.Vec3;

import java.util.Optional;
Expand All @@ -23,14 +28,21 @@ public HollerPanic(float p_147385_) {
@Override
protected void tick(ServerLevel level, PathfinderMob mob, long p_147405_) {
if (mob.getNavigation().isDone()) {
Vec3 $$3 = this.getPanicPos(level, mob);
if ($$3 != null) {
mob.getBrain().setMemory(MemoryModuleType.WALK_TARGET, new WalkTarget($$3, speedMultiplier, 0));
Vec3 panicPosition = this.getPanicPos(level, (Holler) mob);
if (panicPosition != null) {
mob.getBrain().setMemory(MemoryModuleType.WALK_TARGET, new WalkTarget(panicPosition, speedMultiplier, 0));
}
}
}

private Vec3 getPanicPos(ServerLevel level, PathfinderMob mob) {
return LandRandomPos.getPosTowards(mob, 5, 4, mob.position().subtract(0, 10, 0));
private Vec3 getPanicPos(ServerLevel level, Holler holler) {
Optional<Vec3> dirtPosition = lookForDirt(level, holler).map(Vec3::atBottomCenterOf);
return dirtPosition.orElseGet(() -> LandRandomPos.getPos(holler, 5, 5));
}

private Optional<BlockPos> lookForDirt(BlockGetter blockGetter, Holler holler) {
BlockPos hollerPos = holler.blockPosition();
Predicate<BlockPos> isDirtBlock = (pos) -> (blockGetter.getBlockState(pos).getBlock() instanceof SnowyDirtBlock || blockGetter.getBlockState(pos).is(Blocks.DIRT));
return BlockPos.findClosestMatch(hollerPos, 10, 10, isDirtBlock);
}
}
3 changes: 3 additions & 0 deletions src/main/java/galena/oreganized/index/OEffects.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package galena.oreganized.index;

import galena.oreganized.Oreganized;
import galena.oreganized.content.effect.FogEffect;
import galena.oreganized.content.effect.StunningEffect;
import net.minecraft.world.effect.MobEffect;
import net.minecraftforge.registries.DeferredRegister;
Expand All @@ -12,4 +13,6 @@ public class OEffects {
public static final DeferredRegister<MobEffect> EFFECTS = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, Oreganized.MOD_ID);

public static final RegistryObject<MobEffect> STUNNING = EFFECTS.register("stunning", StunningEffect::new);
public static final RegistryObject<MobEffect> FOG = EFFECTS.register("fog", FogEffect::new);

}
Binary file modified src/main/resources/assets/oreganized/textures/entity/holler.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"biomes": "#minecraft:is_overworld",
"spawners": {
"type": "oreganized:holler",
"weight": 100,
"weight": 10,
"minCount": 1,
"maxCount": 2
}
Expand Down

0 comments on commit 4eae986

Please sign in to comment.