Merge pull request #12 from KrisHD1337/dev

Remembering to merge the changes on dev to main
This commit is contained in:
KrisHD1337
2026-01-13 08:51:34 +01:00
committed by GitHub
11 changed files with 240 additions and 6 deletions
+2 -2
View File
@@ -36,7 +36,7 @@ mod_name=Stalinium
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=MIT
# The mod version. See https://semver.org/
mod_version=0.3.0
mod_version=1.0.0
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
@@ -44,4 +44,4 @@ mod_group_id=net.krituximon.stalinium
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
mod_authors=Kris HD, Fretux, Gianimon
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
mod_description=Adds Stalinium
mod_description=A mod that adds the strongest material known to man.
@@ -26,5 +26,6 @@ public class ModItemModelProvider extends ItemModelProvider {
handheldItem(ModItems.STALINIUM_SHOVEL.get());
handheldItem(ModItems.STALINIUM_HOE.get());
handheldItem(ModItems.STALINIUM_PICKAXE.get());
handheldItem(ModItems.STALINIUM_MACE.get());
}
}
@@ -36,6 +36,8 @@ public class ModItemTagProvider extends ItemTagsProvider {
.add(ModItems.STALINIUM_HOE.get());
this.tag(ItemTags.PICKAXES)
.add(ModItems.STALINIUM_PICKAXE.get());
this.tag(ItemTags.MACE_ENCHANTABLE)
.add(ModItems.STALINIUM_MACE.get());
this.tag(ItemTags.HEAD_ARMOR)
.add(ModItems.STALINIUM_HELMET.get());
this.tag(ItemTags.CHEST_ARMOR)
@@ -169,5 +169,16 @@ public class ModRecipeProvider extends RecipeProvider implements IConditionBuild
.unlocks("has_netherite", has(Items.NETHERITE_BOOTS))
.save(recipeOutput,
ResourceLocation.fromNamespaceAndPath(Stalinium.MODID, "smithing/stalinium_boots"));
SmithingTransformRecipeBuilder.smithing(
Ingredient.of(ModItems.STALINIUM_SMITHING_TEMPLATE.get()),
Ingredient.of(Items.MACE),
Ingredient.of(ModBlocks.STALINIUM_BLOCK.get()),
RecipeCategory.COMBAT,
ModItems.STALINIUM_MACE.get()
)
.unlocks("has_netherite", has(Items.NETHERITE_BOOTS))
.save(recipeOutput,
ResourceLocation.fromNamespaceAndPath(Stalinium.MODID, "smithing/stalinium_mace"));
}
}
@@ -26,6 +26,7 @@ public class ModCreativeModeTabs {
output.accept(ModBlocks.STALINIUM_ORE.get());
output.accept(ModBlocks.COMPRESSED_BEDROCK.get());
output.accept(ModBlocks.STALINIUM_PRESS.get());
output.accept(ModItems.STALINIUM_MACE.get());
output.accept(ModItems.STALINIUM_SWORD.get());
output.accept(ModItems.STALINIUM_AXE.get());
output.accept(ModItems.STALINIUM_PICKAXE.get());
@@ -6,6 +6,10 @@ import net.krituximon.stalinium.sound.ModSounds;
import net.minecraft.core.component.DataComponents;
import net.minecraft.world.item.*;
import net.minecraft.world.item.component.Unbreakable;
import net.minecraft.world.item.component.ItemAttributeModifiers;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;
@@ -63,6 +67,11 @@ public class ModItems {
() -> new StaliniumBootsItem(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, ArmorItem.Type.BOOTS,
new Item.Properties().component(DataComponents.UNBREAKABLE, new Unbreakable(true)).stacksTo(1)));
public static final DeferredItem<MaceItem> STALINIUM_MACE = ITEMS.register("stalinium_mace",
() -> new StaliniumMaceItem(new Item.Properties()
.component(DataComponents.UNBREAKABLE, new Unbreakable(true))
.attributes(StaliniumMaceItem.createAttributes())));
public static final DeferredItem<Item> STALINIUM_SMITHING_TEMPLATE = ITEMS.register("stalinium_smithing_template",
() -> new Item(new Item.Properties()));
@@ -0,0 +1,150 @@
package net.krituximon.stalinium.item.custom;
import net.krituximon.stalinium.item.ModItems;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.particles.BlockParticleOption;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.EquipmentSlotGroup;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.windcharge.WindCharge;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.MaceItem;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.component.ItemAttributeModifiers;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import java.util.List;
public class StaliniumMaceItem extends MaceItem {
public StaliniumMaceItem(Properties properties) {
super(properties);
}
@Override
public boolean isDamageable(ItemStack stack) {
return false;
}
@Override
public boolean isDamaged(ItemStack stack) {
return false;
}
@Override
public int getEnchantmentValue() {
return 25;
}
public static ItemAttributeModifiers createAttributes() {
return ItemAttributeModifiers.builder().add(Attributes.ATTACK_DAMAGE, new AttributeModifier(
BASE_ATTACK_DAMAGE_ID, (double) 9.0F, AttributeModifier.Operation.ADD_VALUE),
EquipmentSlotGroup.MAINHAND).add(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_ID,
(double) -3F, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND).build();
}
@Override
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
if (!level.isClientSide && player.isCrouching()) {
smash(player);
} else if (!level.isClientSide && !player.isCrouching()) {
WindCharge windCharge = new WindCharge(EntityType.WIND_CHARGE, level);
Vec3 direction = player.getLookAngle();
windCharge.setPos(
player.getX() + direction.x * 1.2,
player.getEyeY() - 0.1,
player.getZ() + direction.z * 1.2
);
windCharge.shoot(direction.x, direction.y, direction.z, 1.5F, 0.0F);
level.addFreshEntity(windCharge);
level.playSound(null, player.getX(), player.getY(), player.getZ(),
SoundEvents.BREEZE_CHARGE, SoundSource.PLAYERS, 1.0F, 1.0F);
player.getCooldowns().addCooldown(this, 15);
}
return InteractionResultHolder.success(player.getItemInHand(usedHand));
}
public static void smash(Player player) {
if (player.level().isClientSide) return;
double radius = 5.0;
double angle = 60.0;
float damage = 4.0f;
ServerLevel level = (ServerLevel) player.level();
Vec3 playerPos = player.position();
Vec3 direction = new Vec3(player.getLookAngle().x, 0, player.getLookAngle().z);
List<Entity> targets = level.getEntities(player, player.getBoundingBox().inflate(radius));
for (Entity entity : targets) {
if (!(entity instanceof LivingEntity) || entity == player) continue;
Vec3 target = entity.position().subtract(playerPos).normalize();
double dot = direction.dot(target);
if (dot > Math.cos(Math.toRadians(angle / 2))) {
entity.hurt(player.damageSources().playerAttack(player), damage);
Vec3 knockback = entity.position().subtract(playerPos).normalize().scale(0.2);
entity.push(knockback.x, 0.2, knockback.z);
}
}
BlockState block = level.getBlockState(player.blockPosition().below());
for (int i = 0; i < 8; i++) {
double distance = (radius / 8) * (i + 1);
for (int j = 0; j < 25; j++) {
double angleOffset = (level.random.nextDouble() - 0.5) * angle;
double radOffset = Math.toRadians(angleOffset);
Vec3 rotated = rotateY(direction, radOffset);
Vec3 particlePos = playerPos.add(rotated.scale(distance).add(0, 1.0 + (level.random.nextDouble() - 0.5) * 0.5, 0));
level.sendParticles(
new BlockParticleOption(ParticleTypes.BLOCK, block),
particlePos.x, particlePos.y, particlePos.z,
3, 0.1, 0.1, 0.1, 0.1
);
}
}
level.playSound(null, player.getX(), player.getY(), player.getZ(),
SoundEvents.EVOKER_FANGS_ATTACK, SoundSource.PLAYERS, 1.0F, 1.0F);
player.getCooldowns().addCooldown(ModItems.STALINIUM_MACE.get(), 100);
}
private static Vec3 rotateY(Vec3 vec, double radians) {
double cos = Math.cos(radians);
double sin = Math.sin(radians);
double x = vec.x * cos - vec.z * sin;
double z = vec.x * sin + vec.z * cos;
return new Vec3(x, vec.y, z);
}
@Override
public void appendHoverText(ItemStack stack,
TooltipContext context,
List<Component> tooltipComponents,
TooltipFlag tooltipFlag) {
if (Screen.hasShiftDown()) {
tooltipComponents.add(Component.translatable("item.stalinium_mace.tooltip_shift"));
} else {
tooltipComponents.add(Component.translatable("item.stalinium_mace.tooltip"));
}
super.appendHoverText(stack, context, tooltipComponents, tooltipFlag);
}
}
@@ -6,6 +6,7 @@
"item.stalinium.stalinium_shovel": "Stalinium Shovel",
"item.stalinium.stalinium_hoe": "Stalinium Hoe",
"item.stalinium.stalinium_pickaxe": "Stalinium Pickaxe",
"item.stalinium.stalinium_mace": "Stalinium Mace",
"advancements.stalinium.stalinium.root.title": "The Start of the Revolution",
"advancements.stalinium.stalinium.root.desc": "Welcome to Stalinium",
@@ -41,7 +42,9 @@
"advancements.stalinium.stalinium.boots_bloc.desc": "Obtain the Stalinium Boots",
"advancements.stalinium.stalinium.comrade_prime.title": "Comrade Prime",
"advancements.stalinium.stalinium.comrade_prime.desc": "Wear a full set of Stalinium Armor",
"advancements.stalinium.stalinium.amacing_hammer.title": "Amacing Hammer",
"advancements.stalinium.stalinium.amacing_hammer.desc": "Obtain the Stalinium Mace",
"item.stalinium.stalinium_helmet": "Stalinium Helmet",
"item.stalinium.stalinium_chestplate": "Stalinium Chestplate",
@@ -75,7 +78,7 @@
"item.stalinium_pickaxe.tooltip": "Pickaxe made out of §cStalinium§0\n\n§l§cVein of Unity§0\n\n§l§cOre for All\n\n§f(Shift to expand)",
"item.stalinium_pickaxe.tooltip_shift": "Pickaxe made out of §cStalinium\n\n§l§cVein of Unity:§f\nInstantly mines all connected ore blocks.\n\n§l§cOre for all:§f\n50% chance nearby comrades also receive your ore drops.",
"item.stalinium_boots.tooltip": "Boots made out of §cStalinium\n\n§l§cMarch of Progress\n\n§fFull Armor Set Bonus:\n§l§cPower of the Many\n\n§f(Shift to expand)",
"item.stalinium_boots.tooltip_shift": "Boots made out of §cStalinium\n\n§l§cMarch of Progress:§f\nSprinting gives you and everyone nearby Speed I.\n\n§fFull Armor Set Bonus:\n§l§cPower of the Many: Gain more hearts the more allies are nearby.",
@@ -87,7 +90,10 @@
"item.stalinium_leggings.tooltip": "Leggings made out of §cStalinium\n\n§l§cIron Will of the Collective\n\n§fFull Armor Set Bonus:\n§l§cPower of the Many\n\n§f(Shift to expand)",
"item.stalinium_leggings.tooltip_shift": "Leggings made out of §cStalinium\n\n§l§cIron Will of the Collective:§f\nWhen wearing the chestplate alongside the leggings, gain Resistance I.\n\n§fFull Armor Set Bonus:\n§l§cPower of the Many: Gain more hearts the more allies are nearby.",
"item.stalinium_mace.tooltip": "Mace made out of §cStalinium\n\n§l§cWinds of Revolution§0\n\n§l§cCrush the Bourgeoisie\n\n§f(Shift to expand)",
"item.stalinium_mace.tooltip_shift": "Mace made out of §cStalinium\n\n§l§cWinds of Revolution§f\nShoots a Wind Charge on regular right-click.\n\n§l§cCrush the Bourgeoisie§f\nWhen right-clicking while sneaking, do a smash attack launching enemies away and dealing damage.",
"item.minecraft.potion.effect.vodka": "Bottle of Vodka",
"item.minecraft.splash_potion.effect.vodka": "Throwable Bottle of Vodka",
"item.minecraft.lingering_potion.effect.vodka": "Lingering Bottle of Vodka",
@@ -0,0 +1,34 @@
{
"parent": "stalinium:stalinium/strike_state",
"criteria": {
"stalinium_mace": {
"conditions": {
"items": [
{
"items": "stalinium:stalinium_mace"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"background": "minecraft:textures/gui/advancements/backgrounds/stone.png",
"description": {
"translate": "advancements.stalinium.stalinium.amacing_hammer.desc"
},
"icon": {
"count": 1,
"id": "stalinium:stalinium_mace"
},
"title": {
"translate": "advancements.stalinium.stalinium.amacing_hammer.title"
}
},
"requirements": [
[
"stalinium_mace"
]
],
"sends_telemetry_event": true
}
@@ -50,6 +50,16 @@
]
},
"trigger": "minecraft:inventory_changed"
},
"stalinium_mace": {
"conditions": {
"items": [
{
"items": "stalinium:stalinium_mace"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
@@ -71,7 +81,8 @@
"stalinium_pickaxe",
"stalinium_shovel",
"stalinium_hoe",
"stalinium_sword"
"stalinium_sword",
"stalinium_mace"
]
],
"sends_telemetry_event": true
@@ -0,0 +1,9 @@
{
"type": "stalinium:stalinium_press",
"nugget": {
"item": "stalinium:compressed_bedrock"
},
"result": {
"id": "stalinium:stalinium_ingot"
}
}