Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion src/main/java/thebetweenlands/api/item/IExtendedReach.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,35 @@
package thebetweenlands.api.item;

import javax.annotation.Nullable;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;

public interface IExtendedReach {

/**
* Returns the reach modifier in blocks
* @return
*/
double getReachModifier(@Nullable EntityPlayer player, ItemStack stack);

/**
* Returns the reach in blocks that the item will be able to hit
* @return
*/
double getReach();
default double getReach(@Nullable EntityPlayer player, ItemStack stack) {
if(player != null) {
//PlayerController#attackEntity() is called from Minecraft#clickMouse()
//Minecraft#clickMouse() uses Minecraft.objectMouseOver to determine if you're looking at an entity
//EntityRenderer#getMouseOver() is the only place Minecraft.objectMouseOver is assigned
//The raycast distance for Minecraft.objectMouseOver uses PlayerController#getBlockReachDistance()
final double reach = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue();
return (player.isCreative() ? reach : reach - 0.5) + this.getReachModifier(player, stack);
} else {
//Assume survival mode (4.5 was assumed before this was introduced)
return 4.5 + this.getReachModifier(player, stack);
}
}

default void onLeftClick(EntityPlayer player, ItemStack stack) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ private static boolean extendedRayTrace(Consumer<RayTraceResult> consumer) {
ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND);
if (!stack.isEmpty()) {
if (stack.getItem() instanceof IExtendedReach) {
double reach = ((IExtendedReach) stack.getItem()).getReach();
double reach = ((IExtendedReach) stack.getItem()).getReach(player, stack);
RayTraceResult trace = getExtendedRayTrace(reach);
if (trace != null && trace.entityHit != null && trace.entityHit.hurtResistantTime == 0 && trace.entityHit != player) {
consumer.accept(trace);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
Expand Down Expand Up @@ -51,11 +52,16 @@ protected double getAoEReach(EntityLivingBase entityLiving, ItemStack stack) {
return 2.2D;
}

// @Override
// public double getReach() {
// return 3.5D;
// }

@Override
public double getReach() {
return 3.5D;
public double getReachModifier(EntityPlayer player, ItemStack stack) {
return -1.0F;
}

@Override
public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot equipmentSlot, ItemStack stack) {
if(equipmentSlot == EntityEquipmentSlot.MAINHAND && stack.getItemDamage() == stack.getMaxDamage()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.EnumRarity;
Expand Down Expand Up @@ -146,9 +147,14 @@ protected double getAoEReach(EntityLivingBase entityLiving, ItemStack stack) {
return 0;
}

// @Override
// public double getReach() {
// return 2.5D;
// }

@Override
public double getReach() {
return 2.5D;
public double getReachModifier(EntityPlayer player, ItemStack stack) {
return -2.0F;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,9 +250,14 @@ public int getFullRepairLifeCost(ItemStack stack) {
return BLMaterialRegistry.getFullRepairLifeCost(BLMaterialRegistry.TOOL_LEGEND);
}

// @Override
// public double getReach() {
// return 5.5;
// }

@Override
public double getReach() {
return 5.5;
public double getReachModifier(EntityPlayer player, ItemStack stack) {
return 1.0F;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ public IMessage process(MessageContext ctx) {
List<Entity> entities = this.getEntities();
for(Entity entity : entities) {
if (entity != null && entity.isEntityAlive()) {
double reach = ((IExtendedReach) heldItem.getItem()).getReach();
if (reach * reach >= player.getDistanceSq(entity)) {
double reach = ((IExtendedReach) heldItem.getItem()).getReach(player, heldItem);
if (player.isCreative() || entity.getEntityBoundingBox().grow(entity.getCollisionBorderSize() + reach).contains(player.getPositionEyes(1.0F))) {
player.attackTargetEntityWithCurrentItem(entity);
}
}
Expand Down