Skip to content

Commit

Permalink
E n d e r c a p e
Browse files Browse the repository at this point in the history
  • Loading branch information
Vatuu committed Mar 3, 2020
1 parent 22c09ea commit 4bf644b
Show file tree
Hide file tree
Showing 30 changed files with 869 additions and 28 deletions.
4 changes: 0 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@ dependencies {
mappings "net.fabricmc:yarn:${project.minecraft_version}+build.${project.yarn_build}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.api_version}"
//modImplementation "net.fabricmc.fabric-api:fabric-api-base:${project.base_version}"
//modImplementation "net.fabricmc.fabric-api:fabric-events-lifecycle-v0:${project.event_version}"
//modImplementation "net.fabricmc.fabric-api:fabric-commands-v0:${project.cmd_version}"
//modImplementation "net.fabricmc.fabric-api:fabric-dimensions-v1:${project.dim_version}"
}

processResources {
Expand Down
14 changes: 5 additions & 9 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,14 @@
org.gradle.jvmargs=-Xmx2G

# Fabric Properties
minecraft_version=1.15.1
yarn_build=1
loader_version=0.7.2+build.175
minecraft_version=20w09a
yarn_build=6
loader_version=0.7.8+build.184

# Mod Properties
mod_version = 0.3
mod_version = 0.4
maven_group = dev.vatuu
archives_base_name = tesseract

# Dependencies
api_version=0.4.24+build.279-1.15
event_version=0.1.2+b7f9825de8
base_version=0.1.2+b7f9825de4
cmd_version=0.1.2+b7f9825de4
dim_version=0.2.2+b7f9825de4
api_version=0.4.33+build.301-1.16
2 changes: 2 additions & 0 deletions src/main/java/dev/vatuu/tesseract/api/DimensionBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ public interface DimensionBuilder {

DimensionBuilder bedsExplode(boolean shouldExplode);

DimensionBuilder beesExplode(boolean shouldExplode);

DimensionBuilder visibleSky(boolean hasVisibleSky);

DimensionBuilder vaporizeWater(boolean vaporizeWater);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import net.minecraft.util.math.Vec3d;

public interface FogColourFunction {
Vec3d apply(float skyAngle, float tickDelta);
Vec3d apply(Vec3d pos, float tickDelta);
}
32 changes: 28 additions & 4 deletions src/main/java/dev/vatuu/tesseract/impl/Tesseract.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,46 @@
package dev.vatuu.tesseract.impl;

import dev.vatuu.tesseract.api.DimensionBuilder;
import dev.vatuu.tesseract.api.DimensionRegistry;
import dev.vatuu.tesseract.impl.cmd.ChangeDimensionCommand;
import dev.vatuu.tesseract.impl.cmd.RegisterTestCommand;
import dev.vatuu.tesseract.impl.cmd.WorldResetCommand;
import dev.vatuu.tesseract.impl.extras.lil.LilTesseractBlockEntity;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.server.ServerStartCallback;
import net.fabricmc.fabric.api.registry.CommandRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.biome.Biomes;
import net.minecraft.world.biome.VoidBiome;
import net.minecraft.world.biome.source.BiomeAccess;
import net.minecraft.world.biome.source.BiomeAccessType;
import net.minecraft.world.biome.source.FixedBiomeSource;
import net.minecraft.world.biome.source.VoronoiBiomeAccessType;
import net.minecraft.world.dimension.OverworldDimension;

public class Tesseract implements ModInitializer {

public static String MOD_ID = "tesseract";

@Override
public void onInitialize() {
ServerStartCallback.EVENT.register((ci) -> {
ChangeDimensionCommand.register(ci.getCommandManager().getDispatcher());
RegisterTestCommand.register(ci.getCommandManager().getDispatcher());
WorldResetCommand.register(ci.getCommandManager().getDispatcher());

DimensionRegistry.getInstance().registerDimensionType(
new Identifier(MOD_ID, "telesis"),
true,
(w, t) -> DimensionBuilder.create().bedsExplode(true).cloudHeight(40).forcedSpawnPoint(new BlockPos(0, 64, 0)).visibleSky(true).build(w, t),
VoronoiBiomeAccessType.INSTANCE
);

CommandRegistry.INSTANCE.register(false, ci -> {
ChangeDimensionCommand.register(ci);
RegisterTestCommand.register(ci);
WorldResetCommand.register(ci);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.fabricmc.fabric.api.dimension.v1.FabricDimensions;
import net.minecraft.block.pattern.BlockPattern;
import net.minecraft.command.arguments.BlockPosArgumentType;
import net.minecraft.command.arguments.DimensionArgumentType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.dimension.DimensionType;

public class ChangeDimensionCommand {
Expand All @@ -29,7 +31,7 @@ public static void register(CommandDispatcher<ServerCommandSource> dispatcher){

private static int activate(CommandContext<ServerCommandSource> context, DimensionType type, BlockPos pos) throws CommandSyntaxException {
PlayerEntity entity = context.getSource().getPlayer();
FabricDimensions.teleport(entity, type);
FabricDimensions.teleport(entity, type, (e, w, dir, pitch, yaw) -> new BlockPattern.TeleportTarget(new Vec3d(pos).add(0.5d, 0d, 0.5d), Vec3d.ZERO, (int)yaw));
entity.teleport(pos.getX(), pos.getY(), pos.getZ());
return 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public static void register(CommandDispatcher<ServerCommandSource> dispatcher){

private static int activate(CommandContext<ServerCommandSource> context, DimensionType type, boolean unregister) throws CommandSyntaxException{
if(!(type instanceof TesseractDimensionType)){
throw INVALID_DIMENSION.create(Registry.DIMENSION.getId(type));
throw INVALID_DIMENSION.create(Registry.DIMENSION_TYPE.getId(type));
}

ServerWorld playerWorld = context.getSource().getPlayer().getServer().getWorld(type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public BeeEntityMixin(EntityType<? extends AnimalEntity> type, World world){
super(type, world);
}

//BeeGoBoom
@Inject(method = "damage", at = @At(value = "RETURN"))
public void damage(DamageSource src, float amount, CallbackInfoReturnable info){
if(amount > 0 && src instanceof EntityDamageSource)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package dev.vatuu.tesseract.impl.extensions.mixins;

import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.block.entity.EndPortalBlockEntityRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.util.List;

@Mixin(EndPortalBlockEntityRenderer.class)
public interface EndPortalBlockEntityRendererAccessor {

@Accessor(value = "field_21732")
static List<RenderLayer> getEndEffectRenderLayers() {
throw new IllegalStateException("Have you heard about Tessentials?");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@
import dev.vatuu.tesseract.api.DimensionState;
import dev.vatuu.tesseract.impl.world.DimensionRegistryImpl;
import dev.vatuu.tesseract.impl.world.TesseractDimension;
import net.minecraft.entity.passive.BeeEntity;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.WorldGenerationProgressListener;
import net.minecraft.server.world.SecondaryServerWorld;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.ProgressListener;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.profiler.DisableableProfiler;
import net.minecraft.world.SessionLockException;
import net.minecraft.world.WorldSaveHandler;
import net.minecraft.world.dimension.DimensionType;
Expand All @@ -35,7 +33,6 @@
public abstract class MinecraftServerMixin {

@Shadow @Final private Map<DimensionType, ServerWorld> worlds;
@Shadow @Final private DisableableProfiler profiler;

@Mutable private WorldSaveHandler saveHandler;
@Mutable private WorldGenerationProgressListener generationProgress;
Expand All @@ -56,7 +53,7 @@ private void getWorld(DimensionType dimensionType, CallbackInfoReturnable<Server
ServerWorld overworld = worlds.get(DimensionType.OVERWORLD);
Validate.notNull(overworld, "Overworld not loaded!");

ServerWorld world = new SecondaryServerWorld(overworld, (MinecraftServer) (Object) this, ((MinecraftServer) (Object) this).getWorkerExecutor(), this.saveHandler, dimensionType, this.profiler, generationProgress);
ServerWorld world = new SecondaryServerWorld(overworld, (MinecraftServer) (Object) this, ((MinecraftServer) (Object) this).getWorkerExecutor(), this.saveHandler, dimensionType, generationProgress);
worlds.put(dimensionType, world);

cir.setReturnValue(world);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dev.vatuu.tesseract.impl.extensions.mixins;

import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(PlayerEntityModel.class)
public interface PlayerEntityModelAccessor {

@Accessor("cape")
ModelPart getPlayerCapeModelPart();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package dev.vatuu.tesseract.impl.extensions.mixins;

import com.sun.org.apache.bcel.internal.generic.ARETURN;
import dev.vatuu.tesseract.impl.extras.fancy.TesseractCapeFeatureRenderer;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.PlayerEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(PlayerEntityRenderer.class)
public abstract class PlayerEntityRendererMixin extends LivingEntityRenderer<AbstractClientPlayerEntity, PlayerEntityModel<AbstractClientPlayerEntity>> {

public PlayerEntityRendererMixin(EntityRenderDispatcher dispatcher, PlayerEntityModel<AbstractClientPlayerEntity> model, float shadowSize) {
super(dispatcher, model, shadowSize);
}

@Inject(at = @At("RETURN"), method = "<init>(Lnet/minecraft/client/render/entity/EntityRenderDispatcher;Z)V")
private void constructor(EntityRenderDispatcher entityRenderDispatcher, boolean bl, CallbackInfo ci) {
this.addFeature(new TesseractCapeFeatureRenderer(this));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package dev.vatuu.tesseract.impl.extras.fancy;

import dev.vatuu.tesseract.impl.extensions.mixins.EndPortalBlockEntityRendererAccessor;
import dev.vatuu.tesseract.impl.extensions.mixins.PlayerEntityModelAccessor;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.block.entity.EndGatewayBlockEntityRenderer;
import net.minecraft.client.render.entity.PlayerModelPart;
import net.minecraft.client.render.entity.feature.FeatureRenderer;
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.math.MathHelper;

import java.util.List;
import java.util.Random;
import java.util.UUID;

public class TesseractCapeFeatureRenderer extends FeatureRenderer<AbstractClientPlayerEntity, PlayerEntityModel<AbstractClientPlayerEntity>> {

private static final UUID YOURS_TRUELY = UUID.fromString("275df345-c3c5-4768-9af8-440d9cdf593e");

private static final Random RANDOM = new Random(31100L);
private static final int LAYER_COUNT = 15;
private static final float LAYER_0_INTENSITY = 0.15F;
private static final List<RenderLayer> RENDER_LAYERS = EndPortalBlockEntityRendererAccessor.getEndEffectRenderLayers();

public TesseractCapeFeatureRenderer(FeatureRendererContext<AbstractClientPlayerEntity, PlayerEntityModel<AbstractClientPlayerEntity>> context) {
super(context);
}

public void render(MatrixStack stack, VertexConsumerProvider provider, int light, AbstractClientPlayerEntity p, float limbAngle, float limbDistance, float tickDelta, float customAngle, float headYaw, float headPitch) {
if (p.getUuid().equals(YOURS_TRUELY) && p.canRenderCapeTexture() && !p.isInvisible() && p.isPartVisible(PlayerModelPart.CAPE)) {
ItemStack itemStack = p.getEquippedStack(EquipmentSlot.CHEST);
if (itemStack.getItem() != Items.ELYTRA) {
stack.push();
stack.translate(0.0D, 0.0D, 0.125D);
double x = MathHelper.lerp(tickDelta, p.field_7524, p.field_7500) - MathHelper.lerp(tickDelta, p.prevX, p.getX());
double y = MathHelper.lerp(tickDelta, p.field_7502, p.field_7521) - MathHelper.lerp(tickDelta, p.prevY, p.getY());
double z = MathHelper.lerp(tickDelta, p.field_7522, p.field_7499) - MathHelper.lerp(tickDelta, p.prevZ, p.getZ());

double o = MathHelper.sin(p.bodyYaw * 0.017453292F);
double pold = (-MathHelper.cos(p.bodyYaw * 0.017453292F));

float rotXPositive = (float)y * 10.0F;
rotXPositive = MathHelper.clamp(rotXPositive, -6.0F, 32.0F);

float rotXNegative = (float)(x * o + z * pold * 100.0F);
rotXNegative = MathHelper.clamp(rotXNegative, 0.0F, 150.0F);

float s = (float)(x * pold - z * o) * 100.0F;
s = MathHelper.clamp(s, -20.0F, 20.0F);

if (rotXNegative < 0.0F) {
rotXNegative = 0.0F;
}

float t = MathHelper.lerp(tickDelta, p.field_7505, p.field_7483);
rotXPositive += MathHelper.sin(MathHelper.lerp(tickDelta, p.prevHorizontalSpeed, p.horizontalSpeed) * 6.0F) * 32.0F * t;
if (p.isInSneakingPose()) {
rotXPositive += 25.0F;
}

stack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(6.0F + rotXNegative / 2.0F + rotXPositive));
stack.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(s / 2.0F));
stack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(180.0F - s / 2.0F));

RANDOM.setSeed(31100L);

float r = (RANDOM.nextFloat() * 0.5F + 0.1F) * LAYER_0_INTENSITY;
float g = (RANDOM.nextFloat() * 0.5F + 0.4F) * LAYER_0_INTENSITY;
float b = (RANDOM.nextFloat() * 0.5F + 0.5F) * LAYER_0_INTENSITY;
((PlayerEntityModelAccessor)getContextModel()).getPlayerCapeModelPart().render(stack, provider.getBuffer(RENDER_LAYERS.get(0)), light, OverlayTexture.DEFAULT_UV, r, g, b, 1.0F);

for(int i = 1; i < LAYER_COUNT; i++) {
VertexConsumer consumer = provider.getBuffer(RENDER_LAYERS.get(i));
float intensity = 2.0F / (float)(18 - i);
r = (RANDOM.nextFloat() * 0.5F + 0.1F) * intensity;
g = (RANDOM.nextFloat() * 0.5F + 0.4F) * intensity;
b = (RANDOM.nextFloat() * 0.5F + 0.5F) * intensity;

((PlayerEntityModelAccessor)getContextModel()).getPlayerCapeModelPart().render(stack, consumer, light, OverlayTexture.DEFAULT_UV, r, g, b, 1.0F);
}

stack.pop();
}
}
}
}
Loading

0 comments on commit 4bf644b

Please sign in to comment.