Fixed rift remover regression
still need to handle updating the other clients
This commit is contained in:
parent
e421987338
commit
b9bd42a345
1 changed files with 21 additions and 54 deletions
|
@ -37,16 +37,13 @@ public class itemRiftRemover extends Item
|
||||||
@Override
|
@Override
|
||||||
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
|
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
|
||||||
{
|
{
|
||||||
// We invoke PlayerControllerMP.onPlayerRightClick() from here so that Minecraft
|
/**
|
||||||
// will invoke onItemUseFirst() on the client side. We'll tell it to pass the
|
* Im not exactly sure why this was done with onItemFirstUse before, but that is what was causing the issue.
|
||||||
// request to the server, which will make sure that rift-related changes are
|
* OnItemRightClick would only be called if there was no block to be clicked on, and because we never actually click on rifts (instead we raytrace them)
|
||||||
// reflected on the server.
|
* we need a method that is always called. We can update other clients of the visual information using the rift TE, by having it send a packet to all players in a radius.
|
||||||
|
* I will need to look at the new network code first, though.
|
||||||
if (!world.isRemote)
|
*/
|
||||||
{
|
//Raytrace for rift block because they dont have any collision
|
||||||
return stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
MovingObjectPosition hit = this.getMovingObjectPositionFromPlayer(world, player, true);
|
MovingObjectPosition hit = this.getMovingObjectPositionFromPlayer(world, player, true);
|
||||||
if (hit != null)
|
if (hit != null)
|
||||||
{
|
{
|
||||||
|
@ -58,9 +55,19 @@ public class itemRiftRemover extends Item
|
||||||
if (world.getBlockId(hx, hy, hz) == mod_pocketDim.blockRift.blockID && link != null &&
|
if (world.getBlockId(hx, hy, hz) == mod_pocketDim.blockRift.blockID && link != null &&
|
||||||
player.canPlayerEdit(hx, hy, hz, hit.sideHit, stack))
|
player.canPlayerEdit(hx, hy, hz, hit.sideHit, stack))
|
||||||
{
|
{
|
||||||
// Invoke onPlayerRightClick()
|
// Tell the rift's tile entity to do its removal animation
|
||||||
FMLClientHandler.instance().getClient().playerController.onPlayerRightClick(
|
// Handle server client stuff on the rift TE
|
||||||
player, world, stack, hx, hy, hz, hit.sideHit, hit.hitVec);
|
TileEntity tileEntity = world.getBlockTileEntity(hx, hy, hz);
|
||||||
|
if (tileEntity != null && tileEntity instanceof TileEntityRift)
|
||||||
|
{
|
||||||
|
((TileEntityRift) tileEntity).shouldClose = true;
|
||||||
|
}
|
||||||
|
if (!player.capabilities.isCreativeMode)
|
||||||
|
{
|
||||||
|
stack.damageItem(1, player);
|
||||||
|
}
|
||||||
|
player.worldObj.playSoundAtEntity(player, "mods.DimDoors.sfx.riftClose", 0.8f, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return stack;
|
return stack;
|
||||||
|
@ -69,48 +76,8 @@ public class itemRiftRemover extends Item
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
|
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
|
||||||
{
|
{
|
||||||
// We want to use onItemUseFirst() here so that this code will run on the server side,
|
|
||||||
// so we don't need the client to send link-related updates to the server. Still,
|
|
||||||
// check whether we have a rift in sight before passing the request over.
|
|
||||||
|
|
||||||
// On integrated servers, the link won't be removed immediately because of the rift
|
|
||||||
// removal animation. That means we'll have a chance to check for the link before
|
|
||||||
// it's deleted. Otherwise the Rift Remover's durability wouldn't drop.
|
|
||||||
|
|
||||||
NewDimData dimension = PocketManager.getDimensionData(world);
|
|
||||||
DimLink link = dimension.getLink(x, y, z);
|
|
||||||
if (world.getBlockId(x, y, z) == mod_pocketDim.blockRift.blockID && link != null &&
|
|
||||||
player.canPlayerEdit(x, y, z, side, stack))
|
|
||||||
{
|
|
||||||
// Tell the rift's tile entity to do its removal animation
|
|
||||||
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
||||||
if (tileEntity != null && tileEntity instanceof TileEntityRift)
|
|
||||||
{
|
|
||||||
((TileEntityRift) tileEntity).shouldClose = true;
|
|
||||||
}
|
|
||||||
else if (!world.isRemote)
|
|
||||||
{
|
|
||||||
// Only set the block to air on the server side so that we don't
|
|
||||||
// tell the server to remove the rift block before it can use the
|
|
||||||
// Rift Remover. Otherwise, it won't know to reduce durability.
|
|
||||||
world.setBlockToAir(x, y, z);
|
|
||||||
}
|
|
||||||
if (world.isRemote)
|
|
||||||
{
|
|
||||||
// Tell the server about this
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!player.capabilities.isCreativeMode)
|
|
||||||
{
|
|
||||||
stack.damageItem(1, player);
|
|
||||||
}
|
|
||||||
player.worldObj.playSoundAtEntity(player, "mods.DimDoors.sfx.riftClose", 0.8f, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* allows items to add custom lines of information to the mouseover description
|
* allows items to add custom lines of information to the mouseover description
|
||||||
|
|
Loading…
Add table
Reference in a new issue