diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java index 6cd9f209f..f02c41413 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java @@ -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 diff --git a/src/main/java/com/atsuishio/superbwarfare/client/layer/TaserLayer.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/TaserLayer.java deleted file mode 100644 index d9a77dfa6..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/client/layer/TaserLayer.java +++ /dev/null @@ -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 { - private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/tasergun_e.png"); - - public TaserLayer(GeoRenderer 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); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/layer/TaserLayer2.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/TaserLayer2.java deleted file mode 100644 index b14cbb5c6..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/client/layer/TaserLayer2.java +++ /dev/null @@ -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 { - private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/tasergun_e2.png"); - - public TaserLayer2(GeoRenderer 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); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/TaserItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/TaserItemRenderer.java index 3fdddd811..67b4df356 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/TaserItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/TaserItemRenderer.java @@ -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 { public TaserItemRenderer() { super(new TaserItemModel()); - this.addRenderLayer(new TaserLayer(this)); - this.addRenderLayer(new TaserLayer2(this)); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientLauncherImageTooltip.java b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientLauncherImageTooltip.java new file mode 100644 index 000000000..6fd5f264c --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientLauncherImageTooltip.java @@ -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))); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/component/LauncherImageComponent.java b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/component/LauncherImageComponent.java new file mode 100644 index 000000000..5e9bed042 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/component/LauncherImageComponent.java @@ -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); + } + +} \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java index 093f721db..ddf900ba6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java @@ -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 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(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java index c2572f5ce..e8c011d3d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java @@ -55,15 +55,19 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo public static final EntityDataAccessor 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 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(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java index 0c61a081d..cb7705a34 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java @@ -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 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 event) { - if (this.animationprocedure.equals("empty")) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.idle")); - } - return PlayState.STOP; - } - - private PlayState procedurePredicate(AnimationState 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 diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java index d45e2244d..f59de3a66 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java @@ -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 getTooltipImage(@NotNull ItemStack pStack) { + return Optional.of(new LauncherImageComponent(pStack)); + } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java index c819c6a6c..4f9e878c4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java @@ -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 getTooltipImage(@NotNull ItemStack pStack) { + return Optional.of(new LauncherImageComponent(pStack)); + } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java index 0f34a3664..21a3fa6e0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java @@ -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 getTooltipImage(@NotNull ItemStack pStack) { + return Optional.of(new LauncherImageComponent(pStack)); + } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java index 6ce69a279..887c71543 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java @@ -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()) { diff --git a/src/main/resources/assets/superbwarfare/geo/taser.geo.json b/src/main/resources/assets/superbwarfare/geo/taser.geo.json index 8e01307f9..529d45dce 100644 --- a/src/main/resources/assets/superbwarfare/geo/taser.geo.json +++ b/src/main/resources/assets/superbwarfare/geo/taser.geo.json @@ -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": { diff --git a/src/main/resources/data/superbwarfare/guns/javelin.json b/src/main/resources/data/superbwarfare/guns/javelin.json index 041b6eba0..3b453fbc1 100644 --- a/src/main/resources/data/superbwarfare/guns/javelin.json +++ b/src/main/resources/data/superbwarfare/guns/javelin.json @@ -5,5 +5,7 @@ "mag": 1, "weight": 10, "EmptyReloadTime": 78, - "damage": 700 + "damage": 500, + "ExplosionDamage": 140, + "ExplosionRadius": 6 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_79.json b/src/main/resources/data/superbwarfare/guns/m_79.json index 9b6e99d9b..0d32d5003 100644 --- a/src/main/resources/data/superbwarfare/guns/m_79.json +++ b/src/main/resources/data/superbwarfare/guns/m_79.json @@ -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, diff --git a/src/main/resources/data/superbwarfare/guns/rpg.json b/src/main/resources/data/superbwarfare/guns/rpg.json index a786cc02d..9c6e75957 100644 --- a/src/main/resources/data/superbwarfare/guns/rpg.json +++ b/src/main/resources/data/superbwarfare/guns/rpg.json @@ -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,