修改发射器类tooltip

This commit is contained in:
Atsuihsio 2024-12-02 01:00:13 +08:00
parent 433c5b0e05
commit fcc78698f5
17 changed files with 142 additions and 213 deletions

View file

@ -20,6 +20,7 @@ public class ClientRenderHandler {
event.register(BocekImageComponent.class, ClientBocekImageTooltip::new);
event.register(EnergyImageComponent.class, ClientEnergyImageTooltip::new);
event.register(SentinelImageComponent.class, ClientSentinelImageTooltip::new);
event.register(LauncherImageComponent.class, ClientLauncherImageTooltip::new);
}
@SubscribeEvent

View file

@ -1,28 +0,0 @@
package com.atsuishio.superbwarfare.client.layer;
import com.atsuishio.superbwarfare.ModUtils;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.atsuishio.superbwarfare.item.gun.special.TaserItem;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoRenderer;
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
public class TaserLayer extends GeoRenderLayer<TaserItem> {
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/tasergun_e.png");
public TaserLayer(GeoRenderer<TaserItem> itemGeoRenderer) {
super(itemGeoRenderer);
}
@Override
public void render(PoseStack poseStack, TaserItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int light, int packedOverlay) {
RenderType glowRenderType = RenderType.entityTranslucent(LAYER);
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, 255, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
}
}

View file

@ -1,28 +0,0 @@
package com.atsuishio.superbwarfare.client.layer;
import com.atsuishio.superbwarfare.ModUtils;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.atsuishio.superbwarfare.item.gun.special.TaserItem;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoRenderer;
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
public class TaserLayer2 extends GeoRenderLayer<TaserItem> {
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/tasergun_e2.png");
public TaserLayer2(GeoRenderer<TaserItem> itemGeoRenderer) {
super(itemGeoRenderer);
}
@Override
public void render(PoseStack poseStack, TaserItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int light, int packedOverlay) {
RenderType glowRenderType = RenderType.eyes(LAYER);
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, light, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
}
}

View file

@ -1,12 +1,10 @@
package com.atsuishio.superbwarfare.client.renderer.item;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.atsuishio.superbwarfare.client.layer.TaserLayer;
import com.atsuishio.superbwarfare.client.layer.TaserLayer2;
import com.atsuishio.superbwarfare.client.AnimationHelper;
import com.atsuishio.superbwarfare.client.model.item.TaserItemModel;
import com.atsuishio.superbwarfare.item.gun.special.TaserItem;
import com.atsuishio.superbwarfare.client.AnimationHelper;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer;
@ -28,8 +26,6 @@ import java.util.Set;
public class TaserItemRenderer extends GeoItemRenderer<TaserItem> {
public TaserItemRenderer() {
super(new TaserItemModel());
this.addRenderLayer(new TaserLayer(this));
this.addRenderLayer(new TaserLayer2(this));
}
@Override

View file

@ -0,0 +1,28 @@
package com.atsuishio.superbwarfare.client.tooltip;
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
import com.atsuishio.superbwarfare.tools.ItemNBTTool;
import com.atsuishio.superbwarfare.tools.TooltipTool;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import java.text.DecimalFormat;
public class ClientLauncherImageTooltip extends ClientGunImageTooltip {
public ClientLauncherImageTooltip(GunImageComponent tooltip) {
super(tooltip);
}
@Override
protected Component getDamageComponent() {
double damage = ItemNBTTool.getDouble(stack, "damage", 0) * TooltipTool.perkDamage(stack);
double explosionDamage = ItemNBTTool.getDouble(stack, "ExplosionDamage", 0);
return Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(" + " + new DecimalFormat("##.#").format(explosionDamage)).withStyle(ChatFormatting.GOLD)));
}
}

View file

@ -0,0 +1,19 @@
package com.atsuishio.superbwarfare.client.tooltip.component;
import net.minecraft.world.item.ItemStack;
public class LauncherImageComponent extends GunImageComponent {
public int width;
public int height;
public ItemStack stack;
public LauncherImageComponent(int width, int height, ItemStack stack) {
super(width, height, stack);
}
public LauncherImageComponent(ItemStack stack) {
this(32, 16, stack);
}
}

View file

@ -1,13 +1,13 @@
package com.atsuishio.superbwarfare.entity.projectile;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.init.ModDamageTypes;
import com.atsuishio.superbwarfare.init.ModEntities;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
import com.atsuishio.superbwarfare.tools.ParticleTool;
import com.atsuishio.superbwarfare.tools.ProjectileTool;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.init.ModDamageTypes;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.protocol.Packet;
@ -32,15 +32,19 @@ import net.minecraftforge.network.PlayMessages;
public class GunGrenadeEntity extends ThrowableItemProjectile {
private float monsterMultiplier = 0.0f;
private float damage = 80.0f;
private float damage = 40.0f;
private float explosion_damage = 80f;
private float explosion_radius = 5f;
public GunGrenadeEntity(EntityType<? extends GunGrenadeEntity> type, Level world) {
super(type, world);
}
public GunGrenadeEntity(LivingEntity entity, Level level, float damage) {
public GunGrenadeEntity(LivingEntity entity, Level level, float damage, float explosion_damage, float explosion_radius) {
super(ModEntities.GUN_GRENADE.get(), entity, level);
this.damage = damage;
this.explosion_damage = explosion_damage;
this.explosion_radius = explosion_radius;
}
public GunGrenadeEntity(PlayMessages.SpawnEntity spawnEntity, Level level) {
@ -79,9 +83,9 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
}
if (entity instanceof Monster monster) {
monster.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 1.5f * this.damage * damageMultiplier);
monster.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 1.2f * this.damage * damageMultiplier);
} else {
entity.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 1.5f * this.damage);
entity.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), damage);
}
if (entity instanceof LivingEntity) {
@ -92,7 +96,7 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
if (this.level() instanceof ServerLevel) {
ProjectileTool.causeCustomExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
entity, this.damage * 1.2f, 4.5f, this.monsterMultiplier);
entity, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
}
@ -112,7 +116,7 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
if (this.level() instanceof ServerLevel) {
ProjectileTool.causeCustomExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
this, this.damage * 1.4f, 7.5f, this.monsterMultiplier);
this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
}
@ -132,7 +136,7 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
if (this.level() instanceof ServerLevel) {
ProjectileTool.causeCustomExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
this, this.damage * 1.8f, 7.5f, this.monsterMultiplier);
this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
this.discard();
}

View file

@ -55,15 +55,19 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
public static final EntityDataAccessor<Float> TARGET_Z = SynchedEntityData.defineId(JavelinMissileEntity.class, EntityDataSerializers.FLOAT);
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
private float monsterMultiplier = 0.0f;
private float damage = 700.0f;
private float damage = 500.0f;
private float explosion_damage = 140f;
private float explosion_radius = 6f;
public JavelinMissileEntity(EntityType<? extends JavelinMissileEntity> type, Level world) {
super(type, world);
}
public JavelinMissileEntity(LivingEntity entity, Level level, float damage) {
public JavelinMissileEntity(LivingEntity entity, Level level, float damage, float explosion_damage, float explosion_radius) {
super(ModEntities.JAVELIN_MISSILE.get(), entity, level);
this.damage = damage;
this.explosion_damage = explosion_damage;
this.explosion_radius = explosion_radius;
}
public JavelinMissileEntity(PlayMessages.SpawnEntity spawnEntity, Level level) {
@ -125,9 +129,9 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
}
if (entity instanceof Monster monster) {
monster.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), (entityData.get(TOP) ? 1 : 0.7f) * this.damage * damageMultiplier);
monster.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), (entityData.get(TOP) ? 1.3f : 1f) * this.damage * damageMultiplier);
} else {
entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), (entityData.get(TOP) ? 1 : 0.7f) * this.damage);
entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), (entityData.get(TOP) ? 1.3f : 1f) * this.damage);
}
if (entity instanceof LivingEntity) {
@ -138,7 +142,7 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
if (this.level() instanceof ServerLevel) {
ProjectileTool.causeCustomExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
entity, 0.2f * this.damage, 4.0f, this.monsterMultiplier);
entity, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
}
@ -164,7 +168,7 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
if (this.level() instanceof ServerLevel) {
ProjectileTool.causeCustomExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
this, 0.2f * this.damage, 4.0f, this.monsterMultiplier);
this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
}
@ -222,7 +226,7 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
if (this.level() instanceof ServerLevel) {
ProjectileTool.causeCustomExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
this, 0.2f * this.damage, 4.0f, this.monsterMultiplier);
this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
this.discard();
}

View file

@ -1,15 +1,15 @@
package com.atsuishio.superbwarfare.entity.projectile;
import com.atsuishio.superbwarfare.init.ModEntities;
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
import com.atsuishio.superbwarfare.tools.ParticleTool;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig;
import com.atsuishio.superbwarfare.entity.AnimatedEntity;
import com.atsuishio.superbwarfare.init.ModDamageTypes;
import com.atsuishio.superbwarfare.init.ModEntities;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
import com.atsuishio.superbwarfare.tools.CustomExplosion;
import com.atsuishio.superbwarfare.tools.ParticleTool;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.protocol.Packet;
@ -54,15 +54,19 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
public String animationprocedure = "empty";
private float monsterMultiplier = 0.0f;
private float damage = 500f;
private float damage = 250f;
private float explosion_damage = 200f;
private float explosion_radius = 10f;
public RpgRocketEntity(EntityType<? extends RpgRocketEntity> type, Level world) {
super(type, world);
}
public RpgRocketEntity(LivingEntity entity, Level level, float damage) {
public RpgRocketEntity(LivingEntity entity, Level level, float damage, float explosion_damage, float explosion_radius) {
super(ModEntities.RPG_ROCKET.get(), entity, level);
this.damage = damage;
this.explosion_damage = explosion_damage;
this.explosion_radius = explosion_radius;
}
public RpgRocketEntity(PlayMessages.SpawnEntity spawnEntity, Level level) {
@ -101,7 +105,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
}
if (entity instanceof Monster monster) {
monster.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), 1.4f * this.damage * damageMultiplier);
monster.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), 1.2f * this.damage * damageMultiplier);
} else {
entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), this.damage);
}
@ -114,7 +118,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
if (this.level() instanceof ServerLevel) {
causeRpgExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
entity, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
entity, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
}
@ -135,7 +139,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
if (this.level() instanceof ServerLevel) {
causeRpgExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
this, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
}
@ -164,7 +168,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
if (this.level() instanceof ServerLevel) {
causeRpgExplode(this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
this, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier);
}
this.discard();
}
@ -181,23 +185,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
}
private PlayState movementPredicate(AnimationState<RpgRocketEntity> event) {
if (this.animationprocedure.equals("empty")) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.idle"));
}
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState<RpgRocketEntity> event) {
if (!animationprocedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationprocedure));
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
this.animationprocedure = "empty";
event.getController().forceAnimationReset();
}
} else if (animationprocedure.equals("empty")) {
return PlayState.STOP;
}
return PlayState.CONTINUE;
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.idle"));
}
@Override
@ -221,7 +209,6 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate));
data.add(new AnimationController<>(this, "procedure", 0, this::procedurePredicate));
}
@Override

View file

@ -1,9 +1,9 @@
package com.atsuishio.superbwarfare.item.gun.launcher;
import com.atsuishio.superbwarfare.tools.*;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.JavelinItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
@ -12,6 +12,7 @@ import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer;
@ -25,10 +26,12 @@ import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
@ -38,6 +41,7 @@ import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
@ -192,4 +196,8 @@ public class JavelinItem extends GunItem implements GeoItem, AnimatedItem {
return PerkHelper.LAUNCHER_PERKS.test(perk);
}
@Override
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new LauncherImageComponent(pStack));
}
}

View file

@ -1,17 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.launcher;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.renderer.item.M79ItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.M79ItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer;
@ -23,12 +24,14 @@ import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.level.Level;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
@ -38,6 +41,7 @@ import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
@ -167,4 +171,8 @@ public class M79Item extends GunItem implements GeoItem, AnimatedItem {
return PerkHelper.LAUNCHER_PERKS.test(perk);
}
@Override
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new LauncherImageComponent(pStack));
}
}

View file

@ -1,17 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.launcher;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.renderer.item.RpgItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.RpgItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer;
@ -23,12 +24,14 @@ import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.level.Level;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
@ -38,6 +41,7 @@ import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
@ -176,5 +180,9 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem {
public boolean canApplyPerk(Perk perk) {
return PerkHelper.LAUNCHER_PERKS.test(perk);
}
@Override
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new LauncherImageComponent(pStack));
}
}

View file

@ -374,7 +374,7 @@ public class FireMessage {
Level level = player.level();
if (!level.isClientSide()) {
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level,
(float) stack.getOrCreateTag().getDouble("damage"));
(float) stack.getOrCreateTag().getDouble("damage"), (float) stack.getOrCreateTag().getDouble("ExplosionDamage"), (float) stack.getOrCreateTag().getDouble("ExplosionRadius"));
var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
@ -425,7 +425,7 @@ public class FireMessage {
if (!level.isClientSide()) {
RpgRocketEntity rocketEntity = new RpgRocketEntity(player, level,
(float) tag.getDouble("damage"));
(float) tag.getDouble("damage"), (float) tag.getDouble("ExplosionDamage"), (float) tag.getDouble("ExplosionRadius"));
var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
@ -489,7 +489,7 @@ public class FireMessage {
if (!level.isClientSide()) {
JavelinMissileEntity missileEntity = new JavelinMissileEntity(player, level,
(float) tag.getDouble("damage"));
(float) tag.getDouble("damage"), (float) tag.getDouble("ExplosionDamage"), (float) tag.getDouble("ExplosionRadius"));
var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {

View file

@ -211,90 +211,6 @@
"parent": "0",
"pivot": [-0.00238, 0.35352, 0.03753]
},
{
"name": "bluecover",
"parent": "gun",
"pivot": [-0.01562, 0, 0],
"rotation": [22.5, 0, 0],
"cubes": [
{
"origin": [-0.50391, -0.36866, 3.22849],
"size": [1.00781, 0.69109, 0],
"uv": {
"north": {"uv": [30.60938, 18.25391], "uv_size": [1, 1]},
"east": {"uv": [30.60938, 19.75391], "uv_size": [1, 1]},
"south": {"uv": [30.60938, 19.75391], "uv_size": [1, 1]},
"west": {"uv": [30.60938, 19.75391], "uv_size": [1, 1]},
"up": {"uv": [31.60938, 20.75391], "uv_size": [-1, -1]},
"down": {"uv": [31.60938, 20.75391], "uv_size": [-1, -1]}
}
}
]
},
{
"name": "redcover",
"parent": "gun",
"pivot": [-0.01562, 0, 0],
"rotation": [22.5, 0, 0],
"cubes": [
{
"origin": [-0.50391, -0.36866, 3.22849],
"size": [1.00781, 0.69109, 0],
"uv": {
"north": {"uv": [29.35938, 18.50391], "uv_size": [1, 1]},
"east": {"uv": [29.35938, 19.75391], "uv_size": [1, 1]},
"south": {"uv": [29.35938, 19.75391], "uv_size": [1, 1]},
"west": {"uv": [29.35938, 19.75391], "uv_size": [1, 1]},
"up": {"uv": [30.35938, 20.75391], "uv_size": [-1, -1]},
"down": {"uv": [30.35938, 20.75391], "uv_size": [-1, -1]}
}
}
]
},
{
"name": "screen",
"parent": "gun",
"pivot": [-0.01562, 0, 0],
"rotation": [22.5, 0, 0]
},
{
"name": "bar",
"parent": "screen",
"pivot": [0.4656, 0.07321, 3.22067],
"cubes": [
{
"origin": [-0.4656, -0.30648, 3.21677],
"size": [0.9312, 0.57188, 0.00781],
"uv": {
"north": {"uv": [30.60938, 21.73438], "uv_size": [1, 0.75]},
"east": {"uv": [30.60938, 21.73438], "uv_size": [1, 0.75]},
"south": {"uv": [30.60938, 21.73438], "uv_size": [1, 0.75]},
"west": {"uv": [30.60938, 21.73438], "uv_size": [1, 0.75]},
"up": {"uv": [31.60938, 22.48438], "uv_size": [-1, -0.75]},
"down": {"uv": [31.60938, 22.48438], "uv_size": [-1, -0.75]}
}
}
]
},
{
"name": "cover",
"parent": "screen",
"pivot": [-0.01562, 1.11614, 2.90465],
"cubes": [
{
"origin": [-0.50391, -0.36866, 3.22067],
"size": [1.00781, 0.69109, 0.00781],
"uv": {
"north": {"uv": [31.10938, 20.92188], "uv_size": [0.25, 0.25391]},
"east": {"uv": [31.57813, 28.57813], "uv_size": [-0.20312, 0.34375]},
"south": {"uv": [19.10938, 22.75391], "uv_size": [12.75, 8.75]},
"west": {"uv": [31.57813, 28.57813], "uv_size": [-0.23437, 0.34375]},
"up": {"uv": [31.34375, 28.875], "uv_size": [0.23438, -0.29687]},
"down": {"uv": [19.35938, 23.06641], "uv_size": [-0.25, -0.3125]}
}
}
]
},
{
"name": "bone2",
"parent": "gun",
@ -477,8 +393,8 @@
}
},
{
"origin": [-0.52344, 0.76912, 2.58967],
"size": [1.04688, 0.72859, 0.41],
"origin": [-0.52344, 0.86912, 2.58967],
"size": [1.04688, 0.52859, 0.41],
"pivot": [0, 1.13341, 2.79467],
"rotation": [22.5, 0, 0],
"uv": {

View file

@ -5,5 +5,7 @@
"mag": 1,
"weight": 10,
"EmptyReloadTime": 78,
"damage": 700
"damage": 500,
"ExplosionDamage": 140,
"ExplosionRadius": 6
}

View file

@ -2,7 +2,9 @@
"spread": 1.5,
"recoil_x": 0.004,
"recoil_y": 0.023,
"damage": 80,
"damage": 40,
"ExplosionDamage": 80,
"ExplosionRadius": 5,
"velocity": 3.75,
"mag": 1,
"weight": 4,

View file

@ -2,7 +2,9 @@
"spread": 5,
"recoil_x": 0.008,
"recoil_y": 0.018,
"damage": 500,
"damage": 400,
"ExplosionDamage": 200,
"ExplosionRadius": 10,
"velocity": 4,
"mag": 1,
"weight": 7,