1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-08-04 12:58:07 +00:00

Merge pull request #154 from SquidDev-CC/hotfix/unborked-patches

Various fixes for 1.9.4
This commit is contained in:
Daniel Ratcliffe 2017-05-01 16:31:14 +01:00 committed by GitHub
commit 5c6369b910
19 changed files with 600 additions and 189 deletions

View File

@ -53,9 +53,10 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property; import net.minecraftforge.common.config.Property;
@ -366,14 +367,14 @@ public class ComputerCraft
player.openGui( instance, ComputerCraft.turtleGUIID, player.getEntityWorld(), pos.getX(), pos.getY(), pos.getZ() ); player.openGui( instance, ComputerCraft.turtleGUIID, player.getEntityWorld(), pos.getX(), pos.getY(), pos.getZ() );
} }
public static void openPrintoutGUI( EntityPlayer player ) public static void openPrintoutGUI( EntityPlayer player, EnumHand hand )
{ {
player.openGui( ComputerCraft.instance, ComputerCraft.printoutGUIID, player.getEntityWorld(), 0, 0, 0 ); player.openGui( ComputerCraft.instance, ComputerCraft.printoutGUIID, player.getEntityWorld(), hand.ordinal(), 0, 0 );
} }
public static void openPocketComputerGUI( EntityPlayer player ) public static void openPocketComputerGUI( EntityPlayer player, EnumHand hand )
{ {
player.openGui( ComputerCraft.instance, ComputerCraft.pocketComputerGUIID, player.getEntityWorld(), 0, 0, 0 ); player.openGui( ComputerCraft.instance, ComputerCraft.pocketComputerGUIID, player.getEntityWorld(), hand.ordinal(), 0, 0 );
} }
public static File getBaseDir() public static File getBaseDir()

View File

@ -0,0 +1,19 @@
/**
* This file is part of ComputerCraft - http://www.computercraft.info
* Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission.
* Send enquiries to dratcliffe@gmail.com
*/
package dan200.computercraft.client.gui.widgets;
public class MousePos
{
public int x;
public int y;
public MousePos( int x, int y )
{
this.x = x;
this.y = y;
}
}

View File

@ -6,8 +6,6 @@
package dan200.computercraft.client.gui.widgets; package dan200.computercraft.client.gui.widgets;
import dan200.computercraftedu.client.gui.widgets.MousePos;
import dan200.computercraftedu.client.gui.widgets.WidgetContainer;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;

View File

@ -0,0 +1,344 @@
/**
* This file is part of ComputerCraft - http://www.computercraft.info
* Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission.
* Send enquiries to dratcliffe@gmail.com
*/
package dan200.computercraft.client.gui.widgets;
import dan200.computercraft.client.gui.widgets.Widget;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import java.util.ArrayList;
public class WidgetContainer extends Widget
{
private ArrayList<Widget> m_widgets;
private Widget m_modalWidget;
public WidgetContainer( int x, int y, int w, int h )
{
super( x, y, w, h );
m_widgets = new ArrayList<Widget>();
m_modalWidget = null;
}
public void addWidget( Widget widget )
{
m_widgets.add( widget );
widget.setParent( this );
}
public void setModalWidget( Widget widget )
{
m_modalWidget = widget;
if( widget != null )
{
widget.setParent( this );
}
}
public Widget getModalWidget()
{
return m_modalWidget;
}
@Override
public void update()
{
for( int i=0; i<m_widgets.size(); ++i )
{
m_widgets.get( i ).update();
}
if( m_modalWidget != null )
{
m_modalWidget.update();
}
}
@Override
public void draw( Minecraft mc, int xOrigin, int yOrigin, int mouseX, int mouseY )
{
for( int i=0; i<m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
widget.draw(
mc,
xOrigin + getXPosition(),
yOrigin + getYPosition(),
(m_modalWidget == null) ? (mouseX - getXPosition()) : -99,
(m_modalWidget == null) ? (mouseY - getYPosition()) : -99
);
}
}
if( m_modalWidget != null )
{
if( m_modalWidget.isVisible() )
{
GlStateManager.pushMatrix();
try
{
GlStateManager.translate( 0.0f, 0.0f, 200.0f );
m_modalWidget.draw(
mc,
xOrigin + getXPosition(),
yOrigin + getYPosition(),
mouseX - getXPosition(),
mouseY - getYPosition()
);
}
finally
{
GlStateManager.popMatrix();
}
}
}
}
@Override
public void drawForeground( Minecraft mc, int xOrigin, int yOrigin, int mouseX, int mouseY )
{
for( int i=0; i<m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
widget.drawForeground(
mc,
xOrigin + getXPosition(),
yOrigin + getYPosition(),
(m_modalWidget == null) ? (mouseX - getXPosition()) : -99,
(m_modalWidget == null) ? (mouseY - getYPosition()) : -99
);
}
}
if( m_modalWidget != null )
{
if( m_modalWidget.isVisible() )
{
GlStateManager.pushMatrix();
try
{
GlStateManager.translate( 0.0f, 0.0f, 200.0f );
m_modalWidget.drawForeground(
mc,
xOrigin + getXPosition(),
yOrigin + getYPosition(),
mouseX - getXPosition(),
mouseY - getYPosition()
);
}
finally
{
GlStateManager.popMatrix();
}
}
}
}
@Override
public void modifyMousePosition( MousePos pos )
{
pos.x -= getXPosition();
pos.y -= getYPosition();
if( m_modalWidget == null )
{
for( int i = 0; i < m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
widget.modifyMousePosition( pos );
}
}
}
else
{
if( m_modalWidget.isVisible() )
{
m_modalWidget.modifyMousePosition( pos );
}
}
pos.x += getXPosition();
pos.y += getYPosition();
}
@Override
public boolean suppressItemTooltips( Minecraft mc, int xOrigin, int yOrigin, int mouseX, int mouseY )
{
if( m_modalWidget == null )
{
for( int i = 0; i < m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
if( widget.suppressItemTooltips(
mc,
xOrigin + getXPosition(),
yOrigin + getYPosition(),
mouseX - getXPosition(),
mouseY - getYPosition()
) )
{
return true;
}
}
}
}
else
{
if( m_modalWidget.isVisible() && m_modalWidget.suppressItemTooltips(
mc,
xOrigin + getXPosition(),
yOrigin + getYPosition(),
mouseX - getXPosition(),
mouseY - getYPosition()
) )
{
return true;
}
}
return false;
}
public boolean suppressKeyPress( char c, int k )
{
if( m_modalWidget == null )
{
for( int i = 0; i < m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
if( widget.suppressKeyPress( c, k ) )
{
return true;
}
}
}
}
else
{
if( m_modalWidget.isVisible() )
{
if( m_modalWidget.suppressKeyPress( c, k ) )
{
return true;
}
}
}
return false;
}
@Override
public void handleMouseInput( int mouseX, int mouseY )
{
if( m_modalWidget == null )
{
for( int i = 0; i < m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
widget.handleMouseInput(
mouseX - getXPosition(),
mouseY - getYPosition()
);
}
}
}
else
{
if( m_modalWidget.isVisible() )
{
m_modalWidget.handleMouseInput(
mouseX - getXPosition(),
mouseY - getYPosition()
);
}
}
}
@Override
public void handleKeyboardInput()
{
if( m_modalWidget == null )
{
for( int i = 0; i < m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
widget.handleKeyboardInput();
}
}
}
else
{
if( m_modalWidget.isVisible() )
{
m_modalWidget.handleKeyboardInput();
}
}
}
@Override
public void mouseClicked( int mouseX, int mouseY, int mouseButton )
{
if( m_modalWidget == null )
{
for( int i = 0; i < m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
widget.mouseClicked(
mouseX - getXPosition(),
mouseY - getYPosition(),
mouseButton
);
}
}
}
else
{
if( m_modalWidget.isVisible() )
{
m_modalWidget.mouseClicked(
mouseX - getXPosition(),
mouseY - getYPosition(),
mouseButton
);
}
}
}
@Override
public void keyTyped( char c, int k )
{
if( m_modalWidget == null )
{
for( int i = 0; i < m_widgets.size(); ++i )
{
Widget widget = m_widgets.get( i );
if( widget.isVisible() )
{
widget.keyTyped( c, k );
}
}
}
else
{
if( m_modalWidget.isVisible() )
{
m_modalWidget.keyTyped( c, k );
}
}
}
}

View File

@ -14,6 +14,7 @@ import dan200.computercraft.shared.computer.core.ClientComputer;
import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ComputerFamily;
import dan200.computercraft.shared.computer.items.ItemComputer; import dan200.computercraft.shared.computer.items.ItemComputer;
import dan200.computercraft.shared.media.inventory.ContainerHeldItem; import dan200.computercraft.shared.media.inventory.ContainerHeldItem;
import dan200.computercraft.shared.media.items.ItemDiskLegacy;
import dan200.computercraft.shared.media.items.ItemPrintout; import dan200.computercraft.shared.media.items.ItemPrintout;
import dan200.computercraft.shared.network.ComputerCraftPacket; import dan200.computercraft.shared.network.ComputerCraftPacket;
import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive; import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive;
@ -28,15 +29,16 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer; import net.minecraft.util.EnumHand;
import net.minecraft.util.IThreadListener;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.IThreadListener;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderHandEvent;
@ -47,6 +49,8 @@ import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import java.io.File; import java.io.File;
@ -172,6 +176,10 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon
"advanced_pocket_computer_off", "advanced_pocket_computer_on", "advanced_pocket_computer_blinking", "advanced_pocket_computer_on_modem_on", "advanced_pocket_computer_blinking_modem_on", "advanced_pocket_computer_off", "advanced_pocket_computer_on", "advanced_pocket_computer_blinking", "advanced_pocket_computer_on_modem_on", "advanced_pocket_computer_blinking_modem_on",
} ); } );
// Setup
mc.getItemColors().registerItemColorHandler(new DiskColorHandler(ComputerCraft.Items.disk), ComputerCraft.Items.disk);
mc.getItemColors().registerItemColorHandler(new DiskColorHandler(ComputerCraft.Items.diskExpanded), ComputerCraft.Items.diskExpanded);
// Setup renderers // Setup renderers
ClientRegistry.bindTileEntitySpecialRenderer( TileMonitor.class, new TileEntityMonitorRenderer() ); ClientRegistry.bindTileEntitySpecialRenderer( TileMonitor.class, new TileEntityMonitorRenderer() );
@ -304,9 +312,9 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon
} }
@Override @Override
public Object getPrintoutGUI( InventoryPlayer inventory ) public Object getPrintoutGUI( EntityPlayer player, EnumHand hand )
{ {
ContainerHeldItem container = new ContainerHeldItem( inventory ); ContainerHeldItem container = new ContainerHeldItem( player, hand );
if( container.getStack() != null && container.getStack().getItem() instanceof ItemPrintout ) if( container.getStack() != null && container.getStack().getItem() instanceof ItemPrintout )
{ {
return new GuiPrintout( container ); return new GuiPrintout( container );
@ -315,9 +323,9 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon
} }
@Override @Override
public Object getPocketComputerGUI( InventoryPlayer inventory ) public Object getPocketComputerGUI( EntityPlayer player, EnumHand hand )
{ {
ContainerHeldItem container = new ContainerHeldItem( inventory ); ContainerHeldItem container = new ContainerHeldItem( player, hand );
if( container.getStack() != null && container.getStack().getItem() instanceof ItemPocketComputer ) if( container.getStack() != null && container.getStack().getItem() instanceof ItemPocketComputer )
{ {
return new GuiPocketComputer( container ); return new GuiPocketComputer( container );
@ -491,4 +499,21 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon
} }
} }
} }
@SideOnly(Side.CLIENT)
private static class DiskColorHandler implements IItemColor
{
private final ItemDiskLegacy disk;
private DiskColorHandler(ItemDiskLegacy disk)
{
this.disk = disk;
}
@Override
public int getColorFromItemstack(ItemStack stack, int layer)
{
return layer == 0 ? 0xFFFFFF : disk.getColor(stack);
}
}
} }

View File

@ -12,7 +12,9 @@ import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive;
import dan200.computercraft.shared.peripheral.printer.TilePrinter; import dan200.computercraft.shared.peripheral.printer.TilePrinter;
import dan200.computercraft.shared.proxy.ComputerCraftProxyCommon; import dan200.computercraft.shared.proxy.ComputerCraftProxyCommon;
import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtle;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -88,13 +90,13 @@ public class ComputerCraftProxyServer extends ComputerCraftProxyCommon
} }
@Override @Override
public Object getPrintoutGUI( InventoryPlayer inventory ) public Object getPrintoutGUI( EntityPlayer player, EnumHand hand )
{ {
return null; return null;
} }
@Override @Override
public Object getPocketComputerGUI( InventoryPlayer inventory ) public Object getPocketComputerGUI( EntityPlayer player, EnumHand hand )
{ {
return null; return null;
} }

View File

@ -152,7 +152,7 @@ public abstract class BlockGeneric extends Block implements
} }
@Override @Override
public final void onNeighborChange( IBlockAccess world, BlockPos pos, BlockPos neighborPos ) public final void neighborChanged( IBlockState state, World world, BlockPos pos, Block block )
{ {
TileEntity tile = world.getTileEntity( pos ); TileEntity tile = world.getTileEntity( pos );
if( tile != null && tile instanceof TileGeneric ) if( tile != null && tile instanceof TileGeneric )
@ -204,7 +204,7 @@ public abstract class BlockGeneric extends Block implements
TileGeneric generic = (TileGeneric)tile; TileGeneric generic = (TileGeneric)tile;
return generic.getBounds(); return generic.getBounds();
} }
return NULL_AABB; return FULL_BLOCK_AABB;
} }
@Override @Override
@ -237,7 +237,7 @@ public abstract class BlockGeneric extends Block implements
return aabb; return aabb;
} }
} }
return NULL_AABB; return FULL_BLOCK_AABB;
} }
@Override @Override

View File

@ -65,9 +65,11 @@ public abstract class TileGeneric extends TileEntity
public final void updateBlock() public final void updateBlock()
{ {
markDirty();
BlockPos pos = getPos(); BlockPos pos = getPos();
IBlockState state = worldObj.getBlockState( pos );
worldObj.markBlockRangeForRenderUpdate( pos, pos ); worldObj.markBlockRangeForRenderUpdate( pos, pos );
worldObj.markChunkDirty( pos, this ); worldObj.notifyBlockUpdate( getPos(), state, state, 3 );
} }
protected final void setBlockState( IBlockState newState ) protected final void setBlockState( IBlockState newState )
@ -208,4 +210,19 @@ public abstract class TileGeneric extends TileEntity
} }
} }
} }
@Override
public NBTTagCompound getUpdateTag ()
{
NBTTagCompound tag = super.getUpdateTag();
writeDescription( tag );
return tag;
}
@Override
public void handleUpdateTag (NBTTagCompound tag)
{
super.handleUpdateTag(tag);
readDescription( tag );
}
} }

View File

@ -8,19 +8,19 @@ package dan200.computercraft.shared.media.inventory;
import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.InventoryUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
public class ContainerHeldItem extends Container public class ContainerHeldItem extends Container
{ {
private final ItemStack m_stack; private final ItemStack m_stack;
private final int m_slot; private final EnumHand m_hand;
public ContainerHeldItem( InventoryPlayer player ) public ContainerHeldItem( EntityPlayer player, EnumHand hand )
{ {
m_slot = player.currentItem; m_hand = hand;
m_stack = InventoryUtil.copyItem( player.getStackInSlot( m_slot ) ); m_stack = InventoryUtil.copyItem( player.getHeldItem( hand ) );
} }
public ItemStack getStack() public ItemStack getStack()
@ -33,7 +33,7 @@ public class ContainerHeldItem extends Container
{ {
if( player != null && player.isEntityAlive() ) if( player != null && player.isEntityAlive() )
{ {
ItemStack stack = player.inventory.getStackInSlot( m_slot ); ItemStack stack = player.getHeldItem( m_hand );
if( (stack == m_stack) || (stack != null && m_stack != null && stack.getItem() == m_stack.getItem()) ) if( (stack == m_stack) || (stack != null && m_stack != null && stack.getItem() == m_stack.getItem()) )
{ {
return true; return true;

View File

@ -85,10 +85,9 @@ public class ItemPrintout extends Item
{ {
if( !world.isRemote ) if( !world.isRemote )
{ {
ComputerCraft.openPrintoutGUI( player ); ComputerCraft.openPrintoutGUI( player, hand );
return new ActionResult<ItemStack>( EnumActionResult.SUCCESS, stack );
} }
return new ActionResult<ItemStack>( EnumActionResult.PASS, stack ); return new ActionResult<ItemStack>( EnumActionResult.SUCCESS, stack );
} }
private static ItemStack createFromTitleAndText( Type type, String title, String[] text, String[] colours ) private static ItemStack createFromTitleAndText( Type type, String title, String[] text, String[] colours )

View File

@ -13,6 +13,7 @@ import net.minecraft.item.ItemRecord;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
// An implementation of IMedia for ItemRecord's // An implementation of IMedia for ItemRecord's
public class RecordMedia implements IMedia public class RecordMedia implements IMedia
@ -43,7 +44,7 @@ public class RecordMedia implements IMedia
public SoundEvent getAudio( ItemStack stack ) public SoundEvent getAudio( ItemStack stack )
{ {
ItemRecord itemRecord = (ItemRecord)stack.getItem(); ItemRecord itemRecord = (ItemRecord)stack.getItem();
return itemRecord.getSound(); return ObfuscationReflectionHelper.getPrivateValue(ItemRecord.class, itemRecord, "field_185076_b");
} }
@Override @Override

View File

@ -89,7 +89,7 @@ public class ItemCable extends ItemPeripheralBase
if( stack.stackSize > 0 ) if( stack.stackSize > 0 )
{ {
world.setBlockState( pos, existingState.withProperty( BlockCable.Properties.CABLE, true ), 3 ); world.setBlockState( pos, existingState.withProperty( BlockCable.Properties.CABLE, true ), 3 );
world.playSound( null, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, ComputerCraft.Blocks.cable.getSoundType().getBreakSound(), SoundCategory.BLOCKS, (ComputerCraft.Blocks.cable.getSoundType().getVolume() + 1.0F ) / 2.0F, ComputerCraft.Blocks.cable.getSoundType().getPitch() * 0.8F); world.playSound( null, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, ComputerCraft.Blocks.cable.getSoundType().getPlaceSound(), SoundCategory.BLOCKS, (ComputerCraft.Blocks.cable.getSoundType().getVolume() + 1.0F ) / 2.0F, ComputerCraft.Blocks.cable.getSoundType().getPitch() * 0.8F);
stack.stackSize--; stack.stackSize--;
TileEntity tile = world.getTileEntity( pos ); TileEntity tile = world.getTileEntity( pos );
@ -119,7 +119,7 @@ public class ItemCable extends ItemPeripheralBase
if( stack.stackSize > 0 ) if( stack.stackSize > 0 )
{ {
world.setBlockState( offset, offsetExistingState.withProperty( BlockCable.Properties.MODEM, BlockCableModemVariant.fromFacing( side.getOpposite() ) ), 3 ); world.setBlockState( offset, offsetExistingState.withProperty( BlockCable.Properties.MODEM, BlockCableModemVariant.fromFacing( side.getOpposite() ) ), 3 );
world.playSound( null, offset.getX() + 0.5, offset.getY() + 0.5, offset.getZ() + 0.5, ComputerCraft.Blocks.cable.getSoundType().getBreakSound(), SoundCategory.BLOCKS, (ComputerCraft.Blocks.cable.getSoundType().getVolume() + 1.0F ) / 2.0F, ComputerCraft.Blocks.cable.getSoundType().getPitch() * 0.8F); world.playSound( null, offset.getX() + 0.5, offset.getY() + 0.5, offset.getZ() + 0.5, ComputerCraft.Blocks.cable.getSoundType().getPlaceSound(), SoundCategory.BLOCKS, (ComputerCraft.Blocks.cable.getSoundType().getVolume() + 1.0F ) / 2.0F, ComputerCraft.Blocks.cable.getSoundType().getPitch() * 0.8F);
stack.stackSize--; stack.stackSize--;
TileEntity tile = world.getTileEntity( offset ); TileEntity tile = world.getTileEntity( offset );
@ -139,7 +139,7 @@ public class ItemCable extends ItemPeripheralBase
if( stack.stackSize > 0 ) if( stack.stackSize > 0 )
{ {
world.setBlockState( offset, offsetExistingState.withProperty( BlockCable.Properties.CABLE, true ), 3 ); world.setBlockState( offset, offsetExistingState.withProperty( BlockCable.Properties.CABLE, true ), 3 );
world.playSound( null, offset.getX() + 0.5, offset.getY() + 0.5, offset.getZ() + 0.5, ComputerCraft.Blocks.cable.getSoundType().getBreakSound(), SoundCategory.BLOCKS, (ComputerCraft.Blocks.cable.getSoundType().getVolume() + 1.0F ) / 2.0F, ComputerCraft.Blocks.cable.getSoundType().getPitch() * 0.8F); world.playSound( null, offset.getX() + 0.5, offset.getY() + 0.5, offset.getZ() + 0.5, ComputerCraft.Blocks.cable.getSoundType().getPlaceSound(), SoundCategory.BLOCKS, (ComputerCraft.Blocks.cable.getSoundType().getVolume() + 1.0F ) / 2.0F, ComputerCraft.Blocks.cable.getSoundType().getPitch() * 0.8F);
stack.stackSize--; stack.stackSize--;
TileEntity tile = world.getTileEntity( offset ); TileEntity tile = world.getTileEntity( offset );

View File

@ -30,11 +30,13 @@ import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.text.translation.I18n;; import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.List; import java.util.List;
;
public class ItemPocketComputer extends Item implements IComputerItem, IMedia public class ItemPocketComputer extends Item implements IComputerItem, IMedia
{ {
public ItemPocketComputer() public ItemPocketComputer()
@ -169,10 +171,9 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
{ {
computer.turnOn(); computer.turnOn();
} }
ComputerCraft.openPocketComputerGUI( player ); ComputerCraft.openPocketComputerGUI( player, hand );
return new ActionResult<ItemStack>( EnumActionResult.SUCCESS, stack );
} }
return new ActionResult<ItemStack>( EnumActionResult.PASS, stack ); return new ActionResult<ItemStack>( EnumActionResult.SUCCESS, stack );
} }
@Override @Override

View File

@ -15,7 +15,6 @@ import dan200.computercraft.shared.computer.blocks.BlockCommandComputer;
import dan200.computercraft.shared.computer.blocks.BlockComputer; import dan200.computercraft.shared.computer.blocks.BlockComputer;
import dan200.computercraft.shared.computer.blocks.TileCommandComputer; import dan200.computercraft.shared.computer.blocks.TileCommandComputer;
import dan200.computercraft.shared.computer.blocks.TileComputer; import dan200.computercraft.shared.computer.blocks.TileComputer;
import dan200.computercraft.shared.computer.core.ClientComputer;
import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ComputerFamily;
import dan200.computercraft.shared.computer.core.ServerComputer; import dan200.computercraft.shared.computer.core.ServerComputer;
import dan200.computercraft.shared.computer.inventory.ContainerComputer; import dan200.computercraft.shared.computer.inventory.ContainerComputer;
@ -63,16 +62,16 @@ import net.minecraft.item.ItemRecord;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumHand;
import net.minecraft.util.IThreadListener;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.IThreadListener; import net.minecraft.util.text.translation.I18n;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.network.FMLNetworkEvent; import net.minecraftforge.fml.common.network.FMLNetworkEvent;
@ -128,7 +127,8 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
if (item instanceof ItemRecord) if (item instanceof ItemRecord)
{ {
ItemRecord record = (ItemRecord) item; ItemRecord record = (ItemRecord) item;
return record.getRecordNameLocal(); String key = ObfuscationReflectionHelper.getPrivateValue( ItemRecord.class, record, "field_185077_c" );
return I18n.translateToLocal( key );
} }
return null; return null;
} }
@ -149,10 +149,10 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
public abstract Object getTurtleGUI( InventoryPlayer inventory, TileTurtle turtle ); public abstract Object getTurtleGUI( InventoryPlayer inventory, TileTurtle turtle );
@Override @Override
public abstract Object getPrintoutGUI( InventoryPlayer inventory ); public abstract Object getPrintoutGUI( EntityPlayer player, EnumHand hand );
@Override @Override
public abstract Object getPocketComputerGUI( InventoryPlayer inventory ); public abstract Object getPocketComputerGUI( EntityPlayer player, EnumHand hand );
public abstract File getWorldDir( World world ); public abstract File getWorldDir( World world );
@ -165,8 +165,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
if (listener.isCallingFromMinecraftThread()) if (listener.isCallingFromMinecraftThread())
{ {
processPacket( packet, player ); processPacket( packet, player );
} } else
else
{ {
listener.addScheduledTask( new Runnable() listener.addScheduledTask( new Runnable()
{ {
@ -547,11 +546,11 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
} }
case ComputerCraft.printoutGUIID: case ComputerCraft.printoutGUIID:
{ {
return new ContainerHeldItem( player.inventory ); return new ContainerHeldItem( player, x == 0 ? EnumHand.MAIN_HAND : EnumHand.MAIN_HAND );
} }
case ComputerCraft.pocketComputerGUIID: case ComputerCraft.pocketComputerGUIID:
{ {
return new ContainerHeldItem( player.inventory ); return new ContainerHeldItem( player, x == 0 ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND );
} }
} }
return null; return null;
@ -605,11 +604,11 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
} }
case ComputerCraft.printoutGUIID: case ComputerCraft.printoutGUIID:
{ {
return getPrintoutGUI( player.inventory ); return getPrintoutGUI( player, x == 0 ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND );
} }
case ComputerCraft.pocketComputerGUIID: case ComputerCraft.pocketComputerGUIID:
{ {
return getPocketComputerGUI( player.inventory ); return getPocketComputerGUI( player, x == 0 ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND );
} }
} }
return null; return null;

View File

@ -14,6 +14,7 @@ import dan200.computercraft.shared.turtle.blocks.TileTurtle;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -38,8 +39,8 @@ public interface IComputerCraftProxy
public Object getComputerGUI( TileComputer computer ); public Object getComputerGUI( TileComputer computer );
public Object getPrinterGUI( InventoryPlayer inventory, TilePrinter printer ); public Object getPrinterGUI( InventoryPlayer inventory, TilePrinter printer );
public Object getTurtleGUI( InventoryPlayer inventory, TileTurtle turtle ); public Object getTurtleGUI( InventoryPlayer inventory, TileTurtle turtle );
public abstract Object getPrintoutGUI( InventoryPlayer inventory ); public abstract Object getPrintoutGUI( EntityPlayer player, EnumHand hand );
public abstract Object getPocketComputerGUI( InventoryPlayer inventory ); public abstract Object getPocketComputerGUI( EntityPlayer player, EnumHand hand );
public File getWorldDir( World world ); public File getWorldDir( World world );
public void handlePacket( ComputerCraftPacket packet, EntityPlayer player ); public void handlePacket( ComputerCraftPacket packet, EntityPlayer player );

View File

@ -505,7 +505,7 @@ public class TurtleBrain implements ITurtleAccess
} }
// Create a new turtle // Create a new turtle
if( world.isBlockLoaded( pos ) && world.setBlockState( pos, oldBlock.getDefaultState(), 3 ) ) if( world.isBlockLoaded( pos ) && world.setBlockState( pos, oldBlock.getDefaultState(), 0 ) )
{ {
Block block = world.getBlockState( pos ).getBlock(); Block block = world.getBlockState( pos ).getBlock();
if( block == oldBlock ) if( block == oldBlock )
@ -525,6 +525,7 @@ public class TurtleBrain implements ITurtleAccess
oldWorld.setBlockToAir( oldPos ); oldWorld.setBlockToAir( oldPos );
// Make sure everybody knows about it // Make sure everybody knows about it
newTurtle.updateBlock();
newTurtle.updateInput(); newTurtle.updateInput();
newTurtle.updateOutput(); newTurtle.updateOutput();
return true; return true;

View File

@ -240,6 +240,10 @@ public class TurtlePlaceCommand implements ITurtleCommand
placed = true; placed = true;
turtlePlayer.loadInventory( stackCopy ); turtlePlayer.loadInventory( stackCopy );
} }
else if( hitEntity.processInitialInteract( turtlePlayer, stackCopy, EnumHand.MAIN_HAND ) )
{
placed = true;
}
else if( hitEntity instanceof EntityLivingBase ) else if( hitEntity instanceof EntityLivingBase )
{ {
placed = item.itemInteractionForEntity( stackCopy, turtlePlayer, (EntityLivingBase)hitEntity, EnumHand.MAIN_HAND ); placed = item.itemInteractionForEntity( stackCopy, turtlePlayer, (EntityLivingBase)hitEntity, EnumHand.MAIN_HAND );

View File

@ -281,8 +281,7 @@ public class TurtleTool implements ITurtleUpgrade
// Destroy the block // Destroy the block
IBlockState previousState = world.getBlockState( newPosition ); IBlockState previousState = world.getBlockState( newPosition );
Block previousBlock = previousState.getBlock(); world.playEvent(2001, newPosition, Block.getStateId(previousState));
world.playSound( null, newPosition, previousBlock.getSoundType().getBreakSound(), SoundCategory.BLOCKS, (previousBlock.getSoundType().getVolume() + 1.0F) / 2.0F, previousBlock.getSoundType().getPitch() * 0.8F );
world.setBlockToAir( newPosition ); world.setBlockToAir( newPosition );
// Remember the previous block // Remember the previous block

View File

@ -1,3 +1,3 @@
{ {
"parent": "computercraft:block/advanced_computer_blinking", "parent": "computercraft:block/advanced_computer_blinking"
} }