Skip to content

Commit 3662c29

Browse files
committed
Final touches
1 parent 0884ae9 commit 3662c29

67 files changed

Lines changed: 7198 additions & 14619 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ minecraft_version=1.21.1
88
loader_version=0.16.9
99

1010
# Mod Properties
11-
mod_version=1.0.0
11+
mod_version=1.0.0+fabric.1.21.1
1212
maven_group=com.starfish_studios
13-
archives_base_name=scp_survival
13+
archives_base_name=can_you_survive
1414

1515
# Dependencies
1616
fabric_version=0.110.0+1.21.1
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.starfish_studios.scp;
2+
3+
import eu.midnightdust.lib.config.MidnightConfig;
4+
5+
public class SCPConfig extends MidnightConfig {
6+
7+
@Comment(category = "mobConfig") public static Comment biomeConfig;
8+
// @Comment(category = "mobConfig") public static Comment blacklistConfig;
9+
@Comment(category = "mobConfig") public static Comment spacer;
10+
@Comment(category = "mobConfig") public static Comment spacer2;
11+
12+
@Entry(category = "mobConfig") public static int frankSpawnWeight = 5;
13+
@Entry(category = "mobConfig",isSlider = true, min = 1, max = 8) public static int frankSpawnMinGroupSize = 1;
14+
@Entry(category = "mobConfig",isSlider = true, min = 1, max = 8) public static int frankSpawnMaxGroupSize = 1;
15+
16+
@Entry(category = "mobConfig") public static int smileSpawnWeight = 5;
17+
@Entry(category = "mobConfig",isSlider = true, min = 1, max = 8) public static int smileSpawnMinGroupSize = 1;
18+
@Entry(category = "mobConfig",isSlider = true, min = 1, max = 8) public static int smileSpawnMaxGroupSize = 1;
19+
20+
}

src/main/java/com/starfish_studios/scp/SCPMod.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
package com.starfish_studios.scp;
22

33
import com.google.common.reflect.Reflection;
4+
import com.starfish_studios.scp.item.SmileMaskItem;
45
import com.starfish_studios.scp.registry.SCPEntityType;
56
import com.starfish_studios.scp.registry.SCPItems;
67
import com.starfish_studios.scp.registry.SCPSoundEvents;
8+
import eu.midnightdust.lib.config.MidnightConfig;
79
import net.fabricmc.api.ModInitializer;
810

11+
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
12+
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
913
import net.minecraft.resources.ResourceLocation;
14+
import net.minecraft.server.level.ServerPlayer;
15+
import net.minecraft.world.item.CreativeModeTabs;
16+
import net.minecraft.world.item.Items;
1017
import org.slf4j.Logger;
1118
import org.slf4j.LoggerFactory;
1219

@@ -21,12 +28,23 @@ public static ResourceLocation id(String name) {
2128

2229
@Override
2330
public void onInitialize() {
24-
LOGGER.info("Hello Fabric world!");
31+
MidnightConfig.init(MOD_ID, SCPConfig.class);
2532

2633
Reflection.initialize(
2734
SCPEntityType.class,
2835
SCPSoundEvents.class,
2936
SCPItems.class
3037
);
38+
39+
ServerTickEvents.END_SERVER_TICK.register(server -> {
40+
for (ServerPlayer player : server.getPlayerList().getPlayers()) {
41+
SmileMaskItem.tick(player, player.level());
42+
}
43+
});
44+
45+
ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.COMBAT).register(entries -> {
46+
entries.addAfter(Items.TURTLE_HELMET, SCPItems.SMILE_MASK);
47+
entries.addAfter(Items.TOTEM_OF_UNDYING, SCPItems.RAGE_ESSENCE);
48+
});
3149
}
3250
}

src/main/java/com/starfish_studios/scp/client/SCPClient.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.starfish_studios.scp.client;
22

3+
import com.starfish_studios.scp.client.renderer.FrankSCPRenderer;
34
import com.starfish_studios.scp.client.renderer.SmileSCPRenderer;
45
import com.starfish_studios.scp.registry.SCPEntityType;
56
import net.fabricmc.api.ClientModInitializer;
@@ -18,5 +19,6 @@ public void onInitializeClient() {
1819
@SuppressWarnings("all")
1920
public static void registerRenderers() {
2021
EntityRendererRegistry.register(SCPEntityType.SMILE_SCP, SmileSCPRenderer::new);
22+
EntityRendererRegistry.register(SCPEntityType.FRANK_SCP, FrankSCPRenderer::new);
2123
}
2224
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.starfish_studios.scp.client.model;
2+
3+
import com.starfish_studios.scp.SCPMod;
4+
import com.starfish_studios.scp.entity.FrankSCP;
5+
import com.starfish_studios.scp.entity.SmileSCP;
6+
import net.fabricmc.api.EnvType;
7+
import net.fabricmc.api.Environment;
8+
import net.minecraft.client.renderer.RenderType;
9+
import net.minecraft.resources.ResourceLocation;
10+
import net.minecraft.util.Mth;
11+
import org.jetbrains.annotations.Nullable;
12+
import software.bernie.geckolib.animation.AnimationState;
13+
import software.bernie.geckolib.cache.object.GeoBone;
14+
import software.bernie.geckolib.constant.DataTickets;
15+
import software.bernie.geckolib.model.DefaultedEntityGeoModel;
16+
import software.bernie.geckolib.model.data.EntityModelData;
17+
18+
@Environment(EnvType.CLIENT)
19+
public class FrankSCPModel extends DefaultedEntityGeoModel<FrankSCP> {
20+
public FrankSCPModel() {
21+
super(SCPMod.id("smile_scp"), true);
22+
}
23+
24+
@Override
25+
public @Nullable RenderType getRenderType(FrankSCP animatable, ResourceLocation texture) {
26+
return RenderType.entityCutout(texture);
27+
}
28+
29+
@Override
30+
public ResourceLocation getModelResource(FrankSCP animatable) {
31+
return SCPMod.id("geo/entity/frank_scp.geo.json");
32+
}
33+
34+
@Override
35+
public ResourceLocation getTextureResource(FrankSCP animatable) {
36+
return SCPMod.id("textures/entity/frank_scp.png");
37+
}
38+
39+
@Override
40+
public ResourceLocation getAnimationResource(FrankSCP animatable) {
41+
return SCPMod.id("animations/entity/scp_frank.rp_anim.json");
42+
}
43+
44+
@Override
45+
public void setCustomAnimations(FrankSCP animatable, long instanceId, AnimationState<FrankSCP> animationState) {
46+
super.setCustomAnimations(animatable, instanceId, animationState);
47+
if (animationState == null) return;
48+
49+
EntityModelData extraDataOfType = animationState.getData(DataTickets.ENTITY_MODEL_DATA);
50+
GeoBone chest = this.getAnimationProcessor().getBone("chest");
51+
GeoBone head = this.getAnimationProcessor().getBone("head");
52+
53+
head.setRotY(0);
54+
55+
if (animatable.isAggressive()) {
56+
head.setRotX(0);
57+
head.setRotZ(0);
58+
} else {
59+
head.setRotX(extraDataOfType.headPitch() * Mth.DEG_TO_RAD);
60+
head.setRotZ(extraDataOfType.netHeadYaw() * Mth.DEG_TO_RAD);
61+
62+
if (chest == null) return;
63+
64+
float partialTicks = animationState.getPartialTick();
65+
66+
float headPitch = Mth.rotLerp(partialTicks, animatable.xRotO, animatable.getXRot());
67+
68+
double dx = animatable.getDeltaMovement().x;
69+
double dz = animatable.getDeltaMovement().z;
70+
float bodyPitch = (float) Math.toDegrees(Math.atan2(dz, dx));
71+
72+
float diff = Mth.wrapDegrees(bodyPitch - headPitch);
73+
74+
float maxAngle = 22.5F;
75+
if (diff > maxAngle) diff = maxAngle;
76+
if (diff < -maxAngle) diff = -maxAngle;
77+
78+
float oldChest = animatable.getChestRotation();
79+
float newChest = Mth.lerp(0.05F, oldChest, diff);
80+
animatable.setChestRotation(newChest);
81+
//
82+
}
83+
}
84+
85+
86+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.starfish_studios.scp.client.renderer;
2+
3+
import com.mojang.blaze3d.vertex.PoseStack;
4+
import com.starfish_studios.scp.client.model.FrankSCPModel;
5+
import com.starfish_studios.scp.client.model.SmileSCPModel;
6+
import com.starfish_studios.scp.client.renderer.layer.SmileSCPBodyLayer;
7+
import com.starfish_studios.scp.client.renderer.layer.SmileSCPFaceGlowLayer;
8+
import com.starfish_studios.scp.entity.FrankSCP;
9+
import com.starfish_studios.scp.entity.SmileSCP;
10+
import net.fabricmc.api.EnvType;
11+
import net.fabricmc.api.Environment;
12+
import net.minecraft.client.renderer.MultiBufferSource;
13+
import net.minecraft.client.renderer.entity.EntityRendererProvider;
14+
import org.jetbrains.annotations.NotNull;
15+
import software.bernie.geckolib.renderer.GeoEntityRenderer;
16+
import software.bernie.geckolib.renderer.layer.AutoGlowingGeoLayer;
17+
18+
@Environment(EnvType.CLIENT)
19+
public class FrankSCPRenderer extends GeoEntityRenderer<FrankSCP> {
20+
21+
public FrankSCPRenderer(EntityRendererProvider.Context context) {
22+
23+
super(context, new FrankSCPModel());
24+
this.shadowRadius = 1.0F;
25+
this.addRenderLayer(new AutoGlowingGeoLayer<>(this));
26+
}
27+
28+
@Override
29+
public float getMotionAnimThreshold(FrankSCP animatable) {
30+
return 0.001f;
31+
}
32+
33+
34+
@Override
35+
public void render(
36+
FrankSCP animatable,
37+
float entityYaw,
38+
float partialTick,
39+
@NotNull PoseStack poseStack,
40+
@NotNull MultiBufferSource bufferSource,
41+
int packedLight
42+
) {
43+
super.render(animatable, entityYaw, partialTick, poseStack, bufferSource, packedLight);
44+
}
45+
}

src/main/java/com/starfish_studios/scp/client/renderer/layer/SmileSCPBodyLayer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void render(PoseStack poseStack, SmileSCP animatable, BakedGeoModel baked
7171
targetAlpha = 1.0F - rawLightLevel;
7272
}
7373

74-
float transitionSpeed = 0.2F;
74+
float transitionSpeed = 0.05F;
7575
float alpha = previousAlpha + (targetAlpha - previousAlpha) * transitionSpeed;
7676

7777
alpha = Math.max(0.0F, Math.min(1.0F, alpha));
@@ -86,7 +86,7 @@ public void render(PoseStack poseStack, SmileSCP animatable, BakedGeoModel baked
8686
VertexConsumer vertexConsumer = bufferSource.getBuffer(renderType);
8787

8888
poseStack.pushPose();
89-
this.getRenderer().actuallyRender(poseStack, animatable, model, renderType, bufferSource, vertexConsumer, true, partialTick, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, color);
89+
this.getRenderer().actuallyRender(poseStack, animatable, model, renderType, bufferSource, vertexConsumer, true, partialTick, LightTexture.FULL_BRIGHT, packedOverlay, color);
9090
poseStack.popPose();
9191
}
9292
}

0 commit comments

Comments
 (0)