正确注册attribute modifiers
This commit is contained in:
parent
de26447164
commit
8e8431bb89
4 changed files with 89 additions and 66 deletions
|
@ -15,10 +15,14 @@ import net.minecraft.server.level.ServerPlayer;
|
|||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResultHolder;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EquipmentSlotGroup;
|
||||
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.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.component.ItemAttributeModifiers;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
|
@ -27,6 +31,7 @@ import net.neoforged.neoforge.network.PacketDistributor;
|
|||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Monitor extends Item {
|
||||
|
@ -94,19 +99,24 @@ public class Monitor extends Item {
|
|||
return super.use(world, player, hand);
|
||||
}
|
||||
|
||||
// TODO attribute
|
||||
// @Override
|
||||
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
|
||||
// if (slot == EquipmentSlot.MAINHAND) {
|
||||
// ImmutableMultimap.Builder<Attribute, AttributeModifier> builder = ImmutableMultimap.builder();
|
||||
// builder.putAll(super.getAttributeModifiers(slot, stack));
|
||||
// builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Item modifier", 2d, AttributeModifier.Operation.ADDITION));
|
||||
// builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Item modifier", -2.4, AttributeModifier.Operation.ADDITION));
|
||||
// return builder.build();
|
||||
// }
|
||||
//
|
||||
// return super.getAttributeModifiers(slot, stack);
|
||||
// }
|
||||
@Override
|
||||
public @NotNull ItemAttributeModifiers getDefaultAttributeModifiers(@NotNull ItemStack stack) {
|
||||
var list = new ArrayList<>(super.getDefaultAttributeModifiers(stack).modifiers());
|
||||
list.addAll(List.of(
|
||||
new ItemAttributeModifiers.Entry(
|
||||
Attributes.ATTACK_DAMAGE,
|
||||
new AttributeModifier(BASE_ATTACK_DAMAGE_ID, 2, AttributeModifier.Operation.ADD_VALUE),
|
||||
EquipmentSlotGroup.MAINHAND
|
||||
),
|
||||
new ItemAttributeModifiers.Entry(
|
||||
Attributes.ATTACK_SPEED,
|
||||
new AttributeModifier(BASE_ATTACK_SPEED_ID, -2.4, AttributeModifier.Operation.ADD_VALUE),
|
||||
EquipmentSlotGroup.MAINHAND
|
||||
)
|
||||
));
|
||||
|
||||
return new ItemAttributeModifiers(list, true);
|
||||
}
|
||||
|
||||
public static void getDronePos(ItemStack stack, Vec3 vec3) {
|
||||
var tag = NBTTool.getTag(stack);
|
||||
|
|
|
@ -14,12 +14,16 @@ import net.minecraft.core.Position;
|
|||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
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.projectile.Projectile;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemDisplayContext;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.ProjectileItem;
|
||||
import net.minecraft.world.item.component.ItemAttributeModifiers;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
|
@ -32,6 +36,8 @@ import software.bernie.geckolib.animation.AnimatableManager;
|
|||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@EventBusSubscriber(modid = Mod.MODID, bus = EventBusSubscriber.Bus.MOD)
|
||||
public class Rocket extends Item implements GeoItem, ProjectileItem {
|
||||
|
@ -74,17 +80,25 @@ public class Rocket extends Item implements GeoItem, ProjectileItem {
|
|||
return this.cache;
|
||||
}
|
||||
|
||||
// TODO attribute modifier
|
||||
// @Override
|
||||
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
|
||||
// Multimap<Attribute, AttributeModifier> map = super.getAttributeModifiers(slot, stack);
|
||||
// if (slot == EquipmentSlot.MAINHAND) {
|
||||
// map = HashMultimap.create(map);
|
||||
// map.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Item modifier", 6d, AttributeModifier.Operation.ADDITION));
|
||||
// map.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Item modifier", -2.4, AttributeModifier.Operation.ADDITION));
|
||||
// }
|
||||
// return map;
|
||||
// }
|
||||
@Override
|
||||
public @NotNull ItemAttributeModifiers getDefaultAttributeModifiers(@NotNull ItemStack stack) {
|
||||
var list = new ArrayList<>(super.getDefaultAttributeModifiers(stack).modifiers());
|
||||
|
||||
list.addAll(List.of(
|
||||
new ItemAttributeModifiers.Entry(
|
||||
Attributes.ATTACK_DAMAGE,
|
||||
new AttributeModifier(BASE_ATTACK_DAMAGE_ID, 6, AttributeModifier.Operation.ADD_VALUE),
|
||||
EquipmentSlotGroup.MAINHAND
|
||||
),
|
||||
new ItemAttributeModifiers.Entry(
|
||||
Attributes.ATTACK_SPEED,
|
||||
new AttributeModifier(BASE_ATTACK_SPEED_ID, -2.4, AttributeModifier.Operation.ADD_VALUE),
|
||||
EquipmentSlotGroup.MAINHAND
|
||||
)
|
||||
));
|
||||
|
||||
return new ItemAttributeModifiers(list, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hurtEnemy(@NotNull ItemStack stack, LivingEntity entity, @NotNull LivingEntity source) {
|
||||
|
|
|
@ -22,11 +22,15 @@ import net.minecraft.resources.ResourceLocation;
|
|||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
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.inventory.tooltip.TooltipComponent;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.component.ItemAttributeModifiers;
|
||||
import net.minecraft.world.item.enchantment.Enchantment;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
@ -37,6 +41,7 @@ import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsE
|
|||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -121,37 +126,24 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
|||
return false;
|
||||
}
|
||||
|
||||
// TODO attribute modifier
|
||||
// @Override
|
||||
// public @NotNull ItemAttributeModifiers getDefaultAttributeModifiers(@NotNull ItemStack stack) {
|
||||
// ItemAttributeModifiers map = super.getDefaultAttributeModifiers(stack);
|
||||
// map.builder().add(
|
||||
// Attribute.BASE,
|
||||
// new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER,
|
||||
// -0.01f - 0.005f * (GunsTool.getGunDoubleTag(tag, "Weight") + GunsTool.getGunDoubleTag(tag, "CustomWeight")),
|
||||
// AttributeModifier.Operation.ADD_MULTIPLIED_BASE)
|
||||
// )
|
||||
//
|
||||
// map.put(Attributes.MOVEMENT_SPEED,
|
||||
// new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER,
|
||||
// -0.01f - 0.005f * (GunsTool.getGunDoubleTag(tag, "Weight") + GunsTool.getGunDoubleTag(tag, "CustomWeight")),
|
||||
// AttributeModifier.Operation.ADD_MULTIPLIED_BASE));
|
||||
// return map;
|
||||
// }
|
||||
private static final ResourceLocation SPEED_ID = Mod.loc("gun_movement_speed");
|
||||
|
||||
// @Override
|
||||
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
|
||||
// Multimap<Attribute, AttributeModifier> map = super.getAttributeModifiers(slot, stack);
|
||||
// UUID uuid = new UUID(slot.toString().hashCode(), 0);
|
||||
// if (slot == EquipmentSlot.MAINHAND) {
|
||||
// map = HashMultimap.create(map);
|
||||
// map.put(Attributes.MOVEMENT_SPEED,
|
||||
// new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER,
|
||||
// -0.01f - 0.005f * (GunsTool.getGunDoubleTag(tag, "Weight") + GunsTool.getGunDoubleTag(tag, "CustomWeight")),
|
||||
// AttributeModifier.Operation.ADD_MULTIPLIED_BASE));
|
||||
// }
|
||||
// return map;
|
||||
// }
|
||||
@Override
|
||||
public @NotNull ItemAttributeModifiers getDefaultAttributeModifiers(@NotNull ItemStack stack) {
|
||||
var list = new ArrayList<>(super.getDefaultAttributeModifiers(stack).modifiers());
|
||||
var tag = NBTTool.getTag(stack);
|
||||
|
||||
list.add(new ItemAttributeModifiers.Entry(
|
||||
Attributes.MOVEMENT_SPEED,
|
||||
new AttributeModifier(SPEED_ID,
|
||||
-0.01f - 0.005f * (GunsTool.getGunDoubleTag(tag, "Weight") + GunsTool.getGunDoubleTag(tag, "CustomWeight")),
|
||||
AttributeModifier.Operation.ADD_MULTIPLIED_BASE
|
||||
),
|
||||
EquipmentSlotGroup.MAINHAND
|
||||
));
|
||||
|
||||
return new ItemAttributeModifiers(list, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
|
||||
|
|
|
@ -27,10 +27,14 @@ import net.minecraft.server.level.ServerPlayer;
|
|||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EquipmentSlotGroup;
|
||||
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.inventory.tooltip.TooltipComponent;
|
||||
import net.minecraft.world.item.ItemDisplayContext;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.component.ItemAttributeModifiers;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.neoforge.capabilities.Capabilities;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
|
@ -42,6 +46,7 @@ import software.bernie.geckolib.renderer.GeoItemRenderer;
|
|||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
|
||||
public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireWeapon, EnergyStorageItem {
|
||||
|
@ -226,18 +231,20 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
|||
return Optional.of(new SecondaryCataclysmImageComponent(pStack));
|
||||
}
|
||||
|
||||
// TODO attribute
|
||||
// @Override
|
||||
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
|
||||
// Multimap<Attribute, AttributeModifier> map = super.getAttributeModifiers(slot, stack);
|
||||
// UUID uuid = new UUID(slot.toString().hashCode(), 0);
|
||||
// if (slot == EquipmentSlot.MAINHAND) {
|
||||
// map = HashMultimap.create(map);
|
||||
// map.put(Attributes.ATTACK_DAMAGE,
|
||||
// new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, 19, AttributeModifier.Operation.ADDITION));
|
||||
// }
|
||||
// return map;
|
||||
// }
|
||||
private static final ResourceLocation DAMAGE_ID = Mod.loc("secondary_cataclysm_attack_damage");
|
||||
|
||||
@Override
|
||||
public @NotNull ItemAttributeModifiers getDefaultAttributeModifiers(@NotNull ItemStack stack) {
|
||||
var list = new ArrayList<>(super.getDefaultAttributeModifiers(stack).modifiers());
|
||||
|
||||
list.add(new ItemAttributeModifiers.Entry(
|
||||
Attributes.ATTACK_DAMAGE,
|
||||
new AttributeModifier(DAMAGE_ID, 19, AttributeModifier.Operation.ADD_VALUE),
|
||||
EquipmentSlotGroup.MAINHAND
|
||||
));
|
||||
|
||||
return new ItemAttributeModifiers(list, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIterativeReload(ItemStack stack) {
|
||||
|
|
Loading…
Add table
Reference in a new issue