Skip to content

Commit

Permalink
fix sound group crash, add spear reach bonus
Browse files Browse the repository at this point in the history
  • Loading branch information
Draylar committed Mar 10, 2021
1 parent b39dacf commit 6d45570
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import draylar.gateofbabylon.GateOfBabylon;
import draylar.gateofbabylon.item.BoomerangItem;
import draylar.gateofbabylon.item.YoyoItem;
import draylar.gateofbabylon.mixin.BlockSoundGroupAccessor;
import draylar.gateofbabylon.registry.GOBEntities;
import io.netty.buffer.Unpooled;
import net.fabricmc.api.EnvType;
Expand Down Expand Up @@ -117,7 +118,7 @@ public void tick() {
BlockPos p = new BlockPos(target);
BlockState blockState = world.getBlockState(p);
if (!blockState.isAir()) {
world.playSound(null, getX(), getY(), getZ(), blockState.getSoundGroup().getHitSound(), SoundCategory.PLAYERS, 0.5f, 1.0f);
world.playSound(null, getX(), getY(), getZ(), ((BlockSoundGroupAccessor) blockState.getSoundGroup()).getHitSound(), SoundCategory.PLAYERS, 0.5f, 1.0f);
}

if (blockState.getMaterial().isReplaceable()) {
Expand Down
37 changes: 23 additions & 14 deletions src/main/java/draylar/gateofbabylon/item/SpearItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import draylar.gateofbabylon.GateOfBabylon;
import com.jamieswhiteshirt.reachentityattributes.ReachEntityAttributes;
import draylar.gateofbabylon.api.EnchantmentHandler;
import draylar.gateofbabylon.entity.SpearProjectileEntity;
import net.minecraft.enchantment.Enchantment;
Expand All @@ -29,21 +29,19 @@

import java.util.Arrays;
import java.util.List;
import java.util.UUID;

public class SpearItem extends ToolItem implements EnchantmentHandler {

private final Multimap<EntityAttribute, EntityAttributeModifier> attributeModifiers;
public static final UUID INCREASE_UUID = UUID.fromString("7b0363d1-7818-44cc-a605-b2847a065548");
private final float effectiveDamage;
private final float effectiveSpeed;

public SpearItem(ToolMaterial material, float effectiveDamage, float effectiveSpeed, Item.Settings settings) {
super(material, settings);

effectiveDamage = effectiveDamage - 1;
effectiveSpeed = -4 + effectiveSpeed;

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Weapon modifier", effectiveDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Weapon modifier", effectiveSpeed, EntityAttributeModifier.Operation.ADDITION));
this.attributeModifiers = builder.build();
this.effectiveDamage = effectiveDamage - 1;
this.effectiveSpeed = -4 + effectiveSpeed;
}

@Override
Expand All @@ -62,11 +60,6 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack
return true;
}

@Override
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
return slot == EquipmentSlot.MAINHAND ? this.attributeModifiers : super.getAttributeModifiers(slot);
}

@Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
ItemStack itemStack = user.getStackInHand(hand);
Expand Down Expand Up @@ -120,4 +113,20 @@ public List<EnchantmentTarget> getEnchantmentTypes() {
public boolean isInvalid(Enchantment enchantment) {
return enchantment == Enchantments.SWEEPING;
}

@Override
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
Multimap<EntityAttribute, EntityAttributeModifier> modifiers = super.getAttributeModifiers(slot);
builder.putAll(modifiers);

if(slot == EquipmentSlot.MAINHAND) {
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Weapon modifier", effectiveDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Weapon modifier", effectiveSpeed, EntityAttributeModifier.Operation.ADDITION));
builder.put(ReachEntityAttributes.REACH, new EntityAttributeModifier(INCREASE_UUID, "Spear reach increase", 1f, EntityAttributeModifier.Operation.ADDITION));
builder.put(ReachEntityAttributes.ATTACK_RANGE, new EntityAttributeModifier(INCREASE_UUID, "Spear reach increase", 1f, EntityAttributeModifier.Operation.ADDITION));
}

return builder.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package draylar.gateofbabylon.mixin;

import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.sound.SoundEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(BlockSoundGroup.class)
public interface BlockSoundGroupAccessor {
@Accessor
SoundEvent getHitSound();
}
1 change: 1 addition & 0 deletions src/main/resources/gate-of-babylon.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"mixins": [
"AreaEffectCloudEntityAccessor",
"AreaEffectCloudEntityMixin",
"BlockSoundGroupAccessor",
"ClientPlayerEntityYoyoUsageMixin",
"EnchantmentHelperMixin",
"EnchantmentMixin",
Expand Down

0 comments on commit 6d45570

Please sign in to comment.