Fixed the cuccoon

This commit is contained in:
Sollace 2020-05-05 18:48:24 +02:00
parent 9f8194dc12
commit 136519fb47
4 changed files with 53 additions and 79 deletions

View file

@ -1,17 +1,10 @@
package com.minelittlepony.unicopia.client.render; package com.minelittlepony.unicopia.client.render;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.client.render.model.CuccoonEntityModel; import com.minelittlepony.unicopia.client.render.model.CuccoonEntityModel;
import com.minelittlepony.unicopia.entity.CuccoonEntity; import com.minelittlepony.unicopia.entity.CuccoonEntity;
import com.mojang.blaze3d.systems.RenderSystem;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
public class CuccoonEntityRenderer extends LivingEntityRenderer<CuccoonEntity, CuccoonEntityModel> { public class CuccoonEntityRenderer extends LivingEntityRenderer<CuccoonEntity, CuccoonEntityModel> {
@ -33,21 +26,7 @@ public class CuccoonEntityRenderer extends LivingEntityRenderer<CuccoonEntity, C
} }
@Override @Override
public void render(CuccoonEntity entity, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertices, int light) { protected boolean hasLabel(CuccoonEntity mobEntity) {
if (entity.hasPassengers()) { return super.hasLabel(mobEntity) && (mobEntity.shouldRenderName() || mobEntity.hasCustomName() && mobEntity == renderManager.targetedEntity);
Entity rider = entity.getPassengerList().get(0);
if (!(rider == MinecraftClient.getInstance().player) || InteractionManager.instance().getViewMode() != 0) {
RenderSystem.enableAlphaTest();
RenderSystem.enableBlend();
renderManager.render(rider, rider.getX(), rider.getY() + rider.getMountedHeightOffset(), rider.getZ(), rider.yaw, tickDelta, matrices, vertices, light);
RenderSystem.disableBlend();
RenderSystem.disableAlphaTest();
}
}
super.render(entity, yaw, tickDelta, matrices, vertices, light);
} }
} }

View file

@ -1,11 +1,8 @@
package com.minelittlepony.unicopia.client.render.model; package com.minelittlepony.unicopia.client.render.model;
import com.minelittlepony.unicopia.entity.CuccoonEntity; import com.minelittlepony.unicopia.entity.CuccoonEntity;
import com.mojang.blaze3d.platform.GlStateManager.DstFactor;
import com.mojang.blaze3d.platform.GlStateManager.SrcFactor;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.model.ModelPart; import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
@ -17,6 +14,7 @@ public class CuccoonEntityModel extends EntityModel<CuccoonEntity> {
private float breatheAmount; private float breatheAmount;
public CuccoonEntityModel() { public CuccoonEntityModel() {
super(RenderLayer::getEntityTranslucentCull);
body = new ModelPart(this, 0, 0); body = new ModelPart(this, 0, 0);
body.setTextureSize(250, 250); body.setTextureSize(250, 250);
@ -35,12 +33,6 @@ public class CuccoonEntityModel extends EntityModel<CuccoonEntity> {
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
matrices.push(); matrices.push();
RenderSystem.enableBlend();
RenderSystem.enableAlphaTest();
RenderSystem.enableRescaleNormal();
RenderSystem.blendFunc(SrcFactor.SRC_ALPHA, DstFactor.ONE_MINUS_SRC_ALPHA);
matrices.scale(1 - breatheAmount, 1 + breatheAmount, 1 - breatheAmount); matrices.scale(1 - breatheAmount, 1 + breatheAmount, 1 - breatheAmount);
matrices.translate(0, -breatheAmount * 1.3F, 0); matrices.translate(0, -breatheAmount * 1.3F, 0);
@ -51,10 +43,6 @@ public class CuccoonEntityModel extends EntityModel<CuccoonEntity> {
body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
RenderSystem.disableRescaleNormal();
RenderSystem.disableAlphaTest();
RenderSystem.disableBlend();
matrices.pop(); matrices.pop();
} }

View file

@ -1,10 +1,9 @@
package com.minelittlepony.unicopia.entity; package com.minelittlepony.unicopia.entity;
import java.util.List; import java.util.Collections;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.google.common.collect.Lists;
import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.EquinePredicates;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.USounds;
@ -12,6 +11,7 @@ import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.particles.UParticles; import com.minelittlepony.unicopia.particles.UParticles;
import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.MagicalDamageSource;
import net.fabricmc.fabric.api.tools.FabricToolTags;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityDimensions;
@ -44,8 +44,6 @@ public class CuccoonEntity extends LivingEntity implements IMagicals, InAnimate
private static final TrackedData<Integer> STRUGGLE_COUNT = DataTracker.registerData(CuccoonEntity.class, TrackedDataHandlerRegistry.INTEGER); private static final TrackedData<Integer> STRUGGLE_COUNT = DataTracker.registerData(CuccoonEntity.class, TrackedDataHandlerRegistry.INTEGER);
private final List<ItemStack> armour = Lists.newArrayList();
private boolean captiveLastSneakState; private boolean captiveLastSneakState;
public CuccoonEntity(EntityType<CuccoonEntity> type, World world) { public CuccoonEntity(EntityType<CuccoonEntity> type, World world) {
@ -81,7 +79,11 @@ public class CuccoonEntity extends LivingEntity implements IMagicals, InAnimate
public boolean damage(DamageSource source, float amount) { public boolean damage(DamageSource source, float amount) {
if (EquinePredicates.PLAYER_CHANGELING.test(source.getSource())) { if (EquinePredicates.PLAYER_CHANGELING.test(source.getSource())) {
amount = 0;
PlayerEntity player = (PlayerEntity)source.getSource();
if (!FabricToolTags.SHOVELS.contains(player.getMainHandStack().getItem())) {
amount = 0;
}
} }
return super.damage(source, amount); return super.damage(source, amount);
@ -93,6 +95,7 @@ public class CuccoonEntity extends LivingEntity implements IMagicals, InAnimate
&& !entity.isSneaking() && !entity.isSneaking()
&& !hasPassengers() && !hasPassengers()
&& entity instanceof LivingEntity && entity instanceof LivingEntity
&& !(entity instanceof CuccoonEntity)
&& !EquinePredicates.PLAYER_CHANGELING.test(entity); && !EquinePredicates.PLAYER_CHANGELING.test(entity);
} }
@ -106,6 +109,12 @@ public class CuccoonEntity extends LivingEntity implements IMagicals, InAnimate
return 0; return 0;
} }
@Override
@Nullable
public Entity getPrimaryPassenger() {
return getPassengerList().isEmpty() ? null : getPassengerList().get(0);
}
@Override @Override
public void tick() { public void tick() {
super.tick(); super.tick();
@ -150,39 +159,36 @@ public class CuccoonEntity extends LivingEntity implements IMagicals, InAnimate
public ActionResult interactAt(PlayerEntity player, Vec3d vec, Hand hand) { public ActionResult interactAt(PlayerEntity player, Vec3d vec, Hand hand) {
if (hand == Hand.MAIN_HAND && EquinePredicates.PLAYER_CHANGELING.test(player)) { if (hand == Hand.MAIN_HAND && EquinePredicates.PLAYER_CHANGELING.test(player)) {
Entity passenger = getPrimaryPassenger();
if (hasPassengers()) { if (passenger != null && (player.canConsume(false) || player.getHealth() < player.getMaximumHealth())) {
Entity passenger = getPrimaryPassenger(); DamageSource d = MagicalDamageSource.causePlayerDamage("feed", player);
if (player.canConsume(false) || player.getHealth() < player.getMaximumHealth()) { Pony.of(player).spawnParticles(UParticles.CHANGELING_MAGIC, 7);
DamageSource d = MagicalDamageSource.causePlayerDamage("feed", player);
Pony.of(player).spawnParticles(UParticles.CHANGELING_MAGIC, 7); if (passenger instanceof LivingEntity) {
if (player.hasStatusEffect(StatusEffects.NAUSEA)) {
if (passenger instanceof LivingEntity) { ((LivingEntity)passenger).addStatusEffect(player.removeStatusEffectInternal(StatusEffects.NAUSEA));
if (player.hasStatusEffect(StatusEffects.NAUSEA)) { } else if (random.nextInt(2300) == 0) {
((LivingEntity)passenger).addStatusEffect(player.removeStatusEffectInternal(StatusEffects.NAUSEA)); ((LivingEntity)passenger).addStatusEffect(new StatusEffectInstance(StatusEffects.WITHER, 20, 1));
} else if (random.nextInt(2300) == 0) {
((LivingEntity)passenger).addStatusEffect(new StatusEffectInstance(StatusEffects.WITHER, 20, 1));
}
} }
if (passenger instanceof PlayerEntity) {
if (!player.hasStatusEffect(StatusEffects.HEALTH_BOOST)) {
player.addStatusEffect(new StatusEffectInstance(StatusEffects.HEALTH_BOOST, 13000, 1));
}
}
passenger.damage(d, 5);
if (player.canConsume(false)) {
player.getHungerManager().add(5, 0);
} else {
player.heal(5);
}
return ActionResult.SUCCESS;
} }
if (passenger instanceof PlayerEntity) {
if (!player.hasStatusEffect(StatusEffects.HEALTH_BOOST)) {
player.addStatusEffect(new StatusEffectInstance(StatusEffects.HEALTH_BOOST, 13000, 1));
}
}
passenger.damage(d, 5);
if (player.canConsume(false)) {
player.getHungerManager().add(5, 0);
} else {
player.heal(5);
}
return ActionResult.SUCCESS;
} }
} }
@ -196,7 +202,7 @@ public class CuccoonEntity extends LivingEntity implements IMagicals, InAnimate
@Override @Override
public boolean isAttackable() { public boolean isAttackable() {
return false; return true;
} }
public boolean attemptDismount(Entity captive) { public boolean attemptDismount(Entity captive) {
@ -284,7 +290,7 @@ public class CuccoonEntity extends LivingEntity implements IMagicals, InAnimate
@Override @Override
public Iterable<ItemStack> getArmorItems() { public Iterable<ItemStack> getArmorItems() {
return armour; return Collections.emptyList();
} }
@Override @Override

View file

@ -165,13 +165,14 @@
"curse.siphon": "Siphoning", "curse.siphon": "Siphoning",
"curse.siphon.tagline": "Energy III", "curse.siphon.tagline": "Energy III",
"entity.racing_cloud.name": "Bucking Bronco", "entity.unicopia.racing_cloud": "Bucking Bronco",
"entity.construction_cloud.name": "Construction Cloud", "entity.unicopia.construction_cloud": "Construction Cloud",
"entity.cloud.name": "Cloud", "entity.unicopia.cloud": "Cloud",
"entity.spell.name": "Magic", "entity.unicopia.spell": "Magic",
"entity.spellbook.name": "Spellbook", "entity.unicopia.spellbook": "Spellbook",
"entity.butterfly.name": "Butterfly", "entity.unicopia.butterfly": "Butterfly",
"entity.spear.name": "Spear", "entity.unicopia.spear": "Spear",
"entity.unicopia.cuccoon": "Cuccoon",
"toxicity.safe.name": "Safe", "toxicity.safe.name": "Safe",
"toxicity.mild.name": "Mildly Toxic", "toxicity.mild.name": "Mildly Toxic",