Merging in master.
This commit is contained in:
commit
7147cdb1c1
25 changed files with 529 additions and 57 deletions
140
client/net/minecraftforge/client/ClientCommandHandler.java
Normal file
140
client/net/minecraftforge/client/ClientCommandHandler.java
Normal file
|
@ -0,0 +1,140 @@
|
|||
package net.minecraftforge.client;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiChat;
|
||||
import net.minecraft.command.CommandException;
|
||||
import net.minecraft.command.CommandHandler;
|
||||
import net.minecraft.command.ICommand;
|
||||
import net.minecraft.command.ICommandSender;
|
||||
import net.minecraft.command.WrongUsageException;
|
||||
import net.minecraft.util.ChatMessageComponent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.CommandEvent;
|
||||
import cpw.mods.fml.client.FMLClientHandler;
|
||||
import static net.minecraft.util.EnumChatFormatting.*;
|
||||
|
||||
/**
|
||||
* The class that handles client-side chat commands. You should register any
|
||||
* commands that you want handled on the client with this command handler.
|
||||
*
|
||||
* If there is a command with the same name registered both on the server and
|
||||
* client, the client takes precedence!
|
||||
*
|
||||
*/
|
||||
public class ClientCommandHandler extends CommandHandler
|
||||
{
|
||||
public static final ClientCommandHandler instance = new ClientCommandHandler();
|
||||
|
||||
public String[] latestAutoComplete = null;
|
||||
|
||||
/**
|
||||
* @return 1 if successfully executed, 0 if wrong usage, it doesn't exist or
|
||||
* it was canceled.
|
||||
*/
|
||||
@Override
|
||||
public int executeCommand(ICommandSender sender, String message)
|
||||
{
|
||||
message = message.trim();
|
||||
|
||||
if (message.startsWith("/"))
|
||||
{
|
||||
message = message.substring(1);
|
||||
}
|
||||
|
||||
String[] args = message.split(" ");
|
||||
String commandName = args[0];
|
||||
System.arraycopy(args, 1, args, 0, args.length - 1);
|
||||
ICommand icommand = (ICommand) getCommands().get(commandName);
|
||||
|
||||
try
|
||||
{
|
||||
if (icommand == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (icommand.canCommandSenderUseCommand(sender))
|
||||
{
|
||||
CommandEvent event = new CommandEvent(icommand, sender, args);
|
||||
if (MinecraftForge.EVENT_BUS.post(event))
|
||||
{
|
||||
if (event.exception != null)
|
||||
{
|
||||
throw event.exception;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
icommand.processCommand(sender, args);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendChatToPlayer(format("commands.generic.permission").setColor(RED));
|
||||
}
|
||||
}
|
||||
catch (WrongUsageException wue)
|
||||
{
|
||||
sender.sendChatToPlayer(format("commands.generic.usage", format(wue.getMessage(), wue.getErrorOjbects())).setColor(RED));
|
||||
}
|
||||
catch (CommandException ce)
|
||||
{
|
||||
sender.sendChatToPlayer(format(ce.getMessage(), ce.getErrorOjbects()).setColor(RED));
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
sender.sendChatToPlayer(format("commands.generic.exception").setColor(RED));
|
||||
t.printStackTrace();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//Couple of helpers because the mcp names are stupid and long...
|
||||
private ChatMessageComponent format(String str, Object... args)
|
||||
{
|
||||
return ChatMessageComponent.createFromTranslationWithSubstitutions(str, args);
|
||||
}
|
||||
|
||||
private ChatMessageComponent format(String str)
|
||||
{
|
||||
return ChatMessageComponent.createFromTranslationKey(str);
|
||||
}
|
||||
|
||||
public void autoComplete(String leftOfCursor, String full)
|
||||
{
|
||||
latestAutoComplete = null;
|
||||
|
||||
if (leftOfCursor.charAt(0) == '/')
|
||||
{
|
||||
leftOfCursor = leftOfCursor.substring(1);
|
||||
|
||||
Minecraft mc = FMLClientHandler.instance().getClient();
|
||||
if (mc.currentScreen instanceof GuiChat)
|
||||
{
|
||||
List<String> commands = getPossibleCommands(mc.thePlayer, leftOfCursor);
|
||||
if (commands != null && !commands.isEmpty())
|
||||
{
|
||||
if (leftOfCursor.indexOf(' ') == -1)
|
||||
{
|
||||
for (int i = 0; i < commands.size(); i++)
|
||||
{
|
||||
commands.set(i, GRAY + "/" + commands.get(i) + RESET);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < commands.size(); i++)
|
||||
{
|
||||
commands.set(i, GRAY + commands.get(i) + RESET);
|
||||
}
|
||||
}
|
||||
|
||||
latestAutoComplete = commands.toArray(new String[commands.size()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -723,12 +723,19 @@ public class GuiIngameForge extends GuiIngame
|
|||
|
||||
protected void renderChat(int width, int height)
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef(0.0F, (float)(height - 48), 0.0F);
|
||||
mc.mcProfiler.startSection("chat");
|
||||
|
||||
RenderGameOverlayEvent.Chat event = new RenderGameOverlayEvent.Chat(eventParent, 0, height - 48);
|
||||
if (MinecraftForge.EVENT_BUS.post(event)) return;
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef((float)event.posX, (float)event.posY, 0.0F);
|
||||
persistantChatGUI.drawChat(updateCounter);
|
||||
mc.mcProfiler.endSection();
|
||||
GL11.glPopMatrix();
|
||||
|
||||
post(CHAT);
|
||||
|
||||
mc.mcProfiler.endSection();
|
||||
}
|
||||
|
||||
protected void renderPlayerList(int width, int height)
|
||||
|
|
|
@ -25,6 +25,7 @@ public class RenderGameOverlayEvent extends Event
|
|||
TEXT,
|
||||
HEALTHMOUNT,
|
||||
JUMPBAR,
|
||||
CHAT,
|
||||
PLAYER_LIST
|
||||
}
|
||||
|
||||
|
@ -80,4 +81,17 @@ public class RenderGameOverlayEvent extends Event
|
|||
this.right = right;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Chat extends Pre
|
||||
{
|
||||
public int posX;
|
||||
public int posY;
|
||||
|
||||
public Chat(RenderGameOverlayEvent parent, int posX, int posY)
|
||||
{
|
||||
super(parent, ElementType.CHAT);
|
||||
this.posX = posX;
|
||||
this.posY = posY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ public class ChestGenHooks
|
|||
{
|
||||
ret = new ItemStack[0];
|
||||
}
|
||||
else if (count > source.getItem().getItemStackLimit())
|
||||
else if (count > source.getMaxStackSize())
|
||||
{
|
||||
ret = new ItemStack[count];
|
||||
for (int x = 0; x < count; x++)
|
||||
|
|
|
@ -12,7 +12,7 @@ public class ForgeVersion
|
|||
//This number is incremented every minecraft release, never reset
|
||||
public static final int minorVersion = 11;
|
||||
//This number is incremented every time a interface changes or new major feature is added, and reset every Minecraft version
|
||||
public static final int revisionVersion = 0;
|
||||
public static final int revisionVersion = 1;
|
||||
//This number is incremented every time Jenkins builds Forge, and never reset. Should always be 0 in the repo code.
|
||||
public static final int buildVersion = 0;
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import net.minecraftforge.event.Event.Result;
|
|||
import net.minecraftforge.event.entity.living.LivingPackSizeEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingSpawnEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingSpawnEvent.AllowDespawn;
|
||||
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||
|
@ -99,4 +100,11 @@ public class ForgeEventFactory
|
|||
MinecraftForge.EVENT_BUS.post(event);
|
||||
return event.dropChance;
|
||||
}
|
||||
|
||||
public static ItemTooltipEvent onItemTooltip(ItemStack itemStack, EntityPlayer entityPlayer, List<String> toolTip, boolean showAdvancedItemTooltips)
|
||||
{
|
||||
ItemTooltipEvent event = new ItemTooltipEvent(itemStack, entityPlayer, toolTip, showAdvancedItemTooltips);
|
||||
MinecraftForge.EVENT_BUS.post(event);
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package net.minecraftforge.event.entity;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.effect.EntityLightningBolt;
|
||||
import net.minecraftforge.event.Cancelable;
|
||||
|
||||
@Cancelable
|
||||
public class EntityStruckByLightningEvent extends EntityEvent
|
||||
{
|
||||
public final EntityLightningBolt lightning;
|
||||
|
||||
public EntityStruckByLightningEvent(Entity entity, EntityLightningBolt lightning)
|
||||
{
|
||||
super(entity);
|
||||
this.lightning = lightning;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package net.minecraftforge.event.entity.player;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ItemTooltipEvent extends PlayerEvent
|
||||
{
|
||||
/**
|
||||
* Whether the advanced information on item tooltips is being shown, toggled by F3+H.
|
||||
*/
|
||||
public final boolean showAdvancedItemTooltips;
|
||||
/**
|
||||
* The {@link ItemStack} with the tooltip.
|
||||
*/
|
||||
public final ItemStack itemStack;
|
||||
/**
|
||||
* The {@link ItemStack} tooltip.
|
||||
*/
|
||||
public final List<String> toolTip;
|
||||
|
||||
/**
|
||||
* This event is fired in {@link ItemStack#getTooltip(EntityPlayer, boolean)}, which in turn is called from it's respective GUIContainer.
|
||||
*/
|
||||
public ItemTooltipEvent(ItemStack itemStack, EntityPlayer entityPlayer, List<String> toolTip, boolean showAdvancedItemTooltips)
|
||||
{
|
||||
super(entityPlayer);
|
||||
this.itemStack = itemStack;
|
||||
this.toolTip = toolTip;
|
||||
this.showAdvancedItemTooltips = showAdvancedItemTooltips;
|
||||
}
|
||||
}
|
|
@ -58,6 +58,7 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
|
|||
this.temperature = fluid.temperature;
|
||||
this.maxScaledLight = fluid.luminosity;
|
||||
this.tickRate = fluid.viscosity / 200;
|
||||
this.densityDir = fluid.density > 0 ? -1 : 1;
|
||||
fluid.setBlockID(id);
|
||||
|
||||
displacementIds.putAll(defaultDisplacementIds);
|
||||
|
|
|
@ -49,15 +49,27 @@ public class OreDictionary
|
|||
registerOre("stickWood", Item.stick);
|
||||
registerOre("treeSapling", new ItemStack(Block.sapling, 1, WILDCARD_VALUE));
|
||||
registerOre("treeLeaves", new ItemStack(Block.leaves, 1, WILDCARD_VALUE));
|
||||
registerOre("oreGold", Block.oreGold);
|
||||
registerOre("oreIron", Block.oreIron);
|
||||
registerOre("oreLapis", Block.oreLapis);
|
||||
registerOre("oreDiamond", Block.oreDiamond);
|
||||
registerOre("oreGold", Block.oreGold);
|
||||
registerOre("oreIron", Block.oreIron);
|
||||
registerOre("oreLapis", Block.oreLapis);
|
||||
registerOre("oreDiamond", Block.oreDiamond);
|
||||
registerOre("oreRedstone", Block.oreRedstone);
|
||||
registerOre("oreEmerald", Block.oreEmerald);
|
||||
registerOre("oreQuartz", Block.oreNetherQuartz);
|
||||
registerOre("stone", Block.stone);
|
||||
registerOre("oreEmerald", Block.oreEmerald);
|
||||
registerOre("oreQuartz", Block.oreNetherQuartz);
|
||||
registerOre("stone", Block.stone);
|
||||
registerOre("cobblestone", Block.cobblestone);
|
||||
registerOre("record", Item.record13);
|
||||
registerOre("record", Item.recordCat);
|
||||
registerOre("record", Item.recordBlocks);
|
||||
registerOre("record", Item.recordChirp);
|
||||
registerOre("record", Item.recordFar);
|
||||
registerOre("record", Item.recordMall);
|
||||
registerOre("record", Item.recordMellohi);
|
||||
registerOre("record", Item.recordStal);
|
||||
registerOre("record", Item.recordStrad);
|
||||
registerOre("record", Item.recordWard);
|
||||
registerOre("record", Item.record11);
|
||||
registerOre("record", Item.recordWait);
|
||||
}
|
||||
|
||||
// Build our list of items to replace with ore tags
|
||||
|
|
Binary file not shown.
2
fml
2
fml
|
@ -1 +1 @@
|
|||
Subproject commit 9b55f1f48f89a5348ac1d58622b71946f310316a
|
||||
Subproject commit 5265e34a350adbb762264379f0134bfa40d33eaa
|
|
@ -1,3 +1,3 @@
|
|||
@echo off
|
||||
.\fml\python\python_fml install.py
|
||||
.\fml\python\python_fml install.py %*
|
||||
pause
|
|
@ -1,2 +1,2 @@
|
|||
#!/bin/bash
|
||||
python install.py
|
||||
python install.py "$@"
|
|
@ -198,7 +198,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -1457,4 +1491,979 @@
|
||||
@@ -1457,4 +1491,993 @@
|
||||
canBlockGrass[0] = true;
|
||||
StatList.initBreakableStats();
|
||||
}
|
||||
|
@ -1174,6 +1174,20 @@
|
|||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Called to determine whether to allow the a block to handle its own indirect power rather than using the default rules.
|
||||
+ * @param world The world
|
||||
+ * @param x The x position of this block instance
|
||||
+ * @param y The y position of this block instance
|
||||
+ * @param z The z position of this block instance
|
||||
+ * @param side The INPUT side of the block to be powered - ie the opposite of this block's output side
|
||||
+ * @return Whether Block#isProvidingWeakPower should be called when determining indirect power
|
||||
+ */
|
||||
+ public boolean shouldCheckWeakPower(World world, int x, int y, int z, int side)
|
||||
+ {
|
||||
+ return !this.isNormalCube(world.getBlockId(x, y, z));
|
||||
+ }
|
||||
+
|
||||
+ @Deprecated //Implemented here as we changed the IFluidBlock interface, and this allows us to do so without breaking exisitng mods.
|
||||
+ // To be removed next MC version {1.6.3+}
|
||||
+ public float getFilledPercentage(World world, int x, int y, int z){ return 1; }
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
par1World.setBlockToAir(par2, par3, par4);
|
||||
}
|
||||
}
|
||||
@@ -177,4 +176,10 @@
|
||||
@@ -177,4 +176,27 @@
|
||||
{
|
||||
return par5 == 1 ? true : super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, par5);
|
||||
}
|
||||
|
@ -62,5 +62,22 @@
|
|||
+ public int quantityDropped(int meta, int fortune, Random random)
|
||||
+ {
|
||||
+ return (meta & 7) + 1;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Determines if a new block can be replace the space occupied by this one,
|
||||
+ * Used in the player's placement code to make the block act like water, and lava.
|
||||
+ *
|
||||
+ * @param world The current world
|
||||
+ * @param x X Position
|
||||
+ * @param y Y position
|
||||
+ * @param z Z position
|
||||
+ * @return True if the block is replaceable by another block
|
||||
+ */
|
||||
+ @Override
|
||||
+ public boolean isBlockReplaceable(World world, int x, int y, int z)
|
||||
+ {
|
||||
+ int meta = world.getBlockMetadata(x, y, z);
|
||||
+ return (meta >= 7 ? false : blockMaterial.isReplaceable());
|
||||
+ }
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
--- ../src_base/minecraft/net/minecraft/client/Minecraft.java
|
||||
+++ ../src_work/minecraft/net/minecraft/client/Minecraft.java
|
||||
@@ -137,6 +137,15 @@
|
||||
@@ -137,6 +137,16 @@
|
||||
|
||||
import com.google.common.collect.MapDifference;
|
||||
|
||||
+import net.minecraftforge.client.ClientCommandHandler;
|
||||
+import net.minecraftforge.client.ForgeHooksClient;
|
||||
+import net.minecraftforge.client.GuiIngameForge;
|
||||
+import net.minecraftforge.client.event.GuiOpenEvent;
|
||||
|
@ -16,7 +17,7 @@
|
|||
@SideOnly(Side.CLIENT)
|
||||
public class Minecraft implements IPlayerUsage
|
||||
{
|
||||
@@ -416,7 +425,7 @@
|
||||
@@ -416,7 +426,7 @@
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -25,7 +26,7 @@
|
|||
}
|
||||
catch (LWJGLException lwjglexception)
|
||||
{
|
||||
@@ -497,7 +506,7 @@
|
||||
@@ -497,7 +507,7 @@
|
||||
this.effectRenderer = new EffectRenderer(this.theWorld, this.renderEngine);
|
||||
FMLClientHandler.instance().finishMinecraftLoading();
|
||||
this.checkGLError("Post startup");
|
||||
|
@ -34,7 +35,7 @@
|
|||
|
||||
if (this.serverName != null)
|
||||
{
|
||||
@@ -679,11 +688,6 @@
|
||||
@@ -679,11 +689,6 @@
|
||||
*/
|
||||
public void displayGuiScreen(GuiScreen par1GuiScreen)
|
||||
{
|
||||
|
@ -46,7 +47,7 @@
|
|||
this.statFileWriter.syncStats();
|
||||
|
||||
if (par1GuiScreen == null && this.theWorld == null)
|
||||
@@ -693,6 +697,20 @@
|
||||
@@ -693,6 +698,20 @@
|
||||
else if (par1GuiScreen == null && this.thePlayer.getHealth() <= 0.0F)
|
||||
{
|
||||
par1GuiScreen = new GuiGameOver();
|
||||
|
@ -67,7 +68,7 @@
|
|||
}
|
||||
|
||||
if (par1GuiScreen instanceof GuiMainMenu)
|
||||
@@ -1300,7 +1318,7 @@
|
||||
@@ -1300,7 +1319,7 @@
|
||||
|
||||
if (this.thePlayer.isCurrentToolAdventureModeExempt(j, k, l))
|
||||
{
|
||||
|
@ -76,7 +77,7 @@
|
|||
this.thePlayer.swingItem();
|
||||
}
|
||||
}
|
||||
@@ -1366,7 +1384,8 @@
|
||||
@@ -1366,7 +1385,8 @@
|
||||
{
|
||||
int j1 = itemstack != null ? itemstack.stackSize : 0;
|
||||
|
||||
|
@ -86,7 +87,7 @@
|
|||
{
|
||||
flag = false;
|
||||
this.thePlayer.swingItem();
|
||||
@@ -1392,7 +1411,8 @@
|
||||
@@ -1392,7 +1412,8 @@
|
||||
{
|
||||
ItemStack itemstack1 = this.thePlayer.inventory.getCurrentItem();
|
||||
|
||||
|
@ -96,7 +97,7 @@
|
|||
{
|
||||
this.entityRenderer.itemRenderer.resetEquippedProgress2();
|
||||
}
|
||||
@@ -1574,6 +1594,8 @@
|
||||
@@ -1574,6 +1595,8 @@
|
||||
|
||||
while (Mouse.next())
|
||||
{
|
||||
|
@ -105,7 +106,7 @@
|
|||
i = Mouse.getEventButton();
|
||||
|
||||
if (isRunningOnMac && i == 0 && (Keyboard.isKeyDown(29) || Keyboard.isKeyDown(157)))
|
||||
@@ -2046,6 +2068,11 @@
|
||||
@@ -2046,6 +2069,11 @@
|
||||
{
|
||||
this.statFileWriter.syncStats();
|
||||
|
||||
|
@ -117,7 +118,7 @@
|
|||
if (par1WorldClient == null)
|
||||
{
|
||||
NetClientHandler netclienthandler = this.getNetHandler();
|
||||
@@ -2063,6 +2090,18 @@
|
||||
@@ -2063,6 +2091,18 @@
|
||||
if (this.theIntegratedServer != null)
|
||||
{
|
||||
this.theIntegratedServer.initiateShutdown();
|
||||
|
@ -136,7 +137,16 @@
|
|||
}
|
||||
|
||||
this.theIntegratedServer = null;
|
||||
@@ -2236,107 +2275,12 @@
|
||||
@@ -2225,7 +2265,7 @@
|
||||
*/
|
||||
public boolean handleClientCommand(String par1Str)
|
||||
{
|
||||
- return false;
|
||||
+ return ClientCommandHandler.instance.executeCommand(thePlayer, par1Str) == 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2236,107 +2276,12 @@
|
||||
if (this.objectMouseOver != null)
|
||||
{
|
||||
boolean flag = this.thePlayer.capabilities.isCreativeMode;
|
||||
|
@ -248,7 +258,7 @@
|
|||
|
||||
if (flag)
|
||||
{
|
||||
@@ -2419,11 +2363,18 @@
|
||||
@@ -2419,11 +2364,18 @@
|
||||
par1PlayerUsageSnooper.addData("gl_max_texture_size", Integer.valueOf(getGLMaximumTextureSize()));
|
||||
}
|
||||
|
||||
|
@ -267,7 +277,7 @@
|
|||
for (int i = 16384; i > 0; i >>= 1)
|
||||
{
|
||||
GL11.glTexImage2D(GL11.GL_PROXY_TEXTURE_2D, 0, GL11.GL_RGBA, i, i, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null);
|
||||
@@ -2431,6 +2382,7 @@
|
||||
@@ -2431,6 +2383,7 @@
|
||||
|
||||
if (j != 0)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
--- ../src_base/minecraft/net/minecraft/client/gui/GuiChat.java
|
||||
+++ ../src_work/minecraft/net/minecraft/client/gui/GuiChat.java
|
||||
@@ -7,8 +7,11 @@
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import net.minecraft.network.packet.Packet203AutoComplete;
|
||||
+import net.minecraft.util.EnumChatFormatting;
|
||||
+import net.minecraftforge.client.ClientCommandHandler;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
+import com.google.common.collect.ObjectArrays;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiChat extends GuiScreen
|
||||
@@ -278,13 +281,14 @@
|
||||
this.mc.ingameGUI.getChatGUI().printChatMessageWithOptionalDeletion(stringbuilder.toString(), 1);
|
||||
}
|
||||
|
||||
- this.inputField.writeText((String)this.field_73904_o.get(this.field_73903_n++));
|
||||
+ this.inputField.writeText(EnumChatFormatting.func_110646_a((String)this.field_73904_o.get(this.field_73903_n++)));
|
||||
}
|
||||
|
||||
private void func_73893_a(String par1Str, String par2Str)
|
||||
{
|
||||
if (par1Str.length() >= 1)
|
||||
{
|
||||
+ ClientCommandHandler.instance.autoComplete(par1Str, par2Str);
|
||||
this.mc.thePlayer.sendQueue.addToSendQueue(new Packet203AutoComplete(par1Str));
|
||||
this.field_73905_m = true;
|
||||
}
|
||||
@@ -347,6 +351,13 @@
|
||||
String[] astring1 = par1ArrayOfStr;
|
||||
int i = par1ArrayOfStr.length;
|
||||
|
||||
+ String[] complete = ClientCommandHandler.instance.latestAutoComplete;
|
||||
+ if (complete != null)
|
||||
+ {
|
||||
+ astring1 = ObjectArrays.concat(complete, astring1, String.class);
|
||||
+ i = astring1.length;
|
||||
+ }
|
||||
+
|
||||
for (int j = 0; j < i; ++j)
|
||||
{
|
||||
String s = astring1[j];
|
|
@ -15,14 +15,14 @@
|
|||
}
|
||||
|
||||
+ /**
|
||||
+ * This applies specifically to applying at the enchanting table. The other method {@link #func_92037_a(ItemStack)}
|
||||
+ * This applies specifically to applying at the enchanting table. The other method {@link #canApply(ItemStack)}
|
||||
+ * applies for <i>all possible</i> enchantments.
|
||||
+ * @param stack
|
||||
+ * @return
|
||||
+ */
|
||||
+ public boolean canApplyAtEnchantingTable(ItemStack stack)
|
||||
+ {
|
||||
+ return this.type.canEnchantItem(stack.getItem());
|
||||
+ return canApply(stack);
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
--- ../src_base/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java
|
||||
+++ ../src_work/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java
|
||||
@@ -10,6 +10,8 @@
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
+import net.minecraftforge.common.MinecraftForge;
|
||||
+import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
|
||||
|
||||
public class EntityLightningBolt extends EntityWeatherEffect
|
||||
{
|
||||
@@ -116,7 +118,10 @@
|
||||
for (int l = 0; l < list.size(); ++l)
|
||||
{
|
||||
Entity entity = (Entity)list.get(l);
|
||||
- entity.onStruckByLightning(this);
|
||||
+ if (!MinecraftForge.EVENT_BUS.post(new EntityStruckByLightningEvent(entity, this)))
|
||||
+ {
|
||||
+ entity.onStruckByLightning(this);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
--- ../src_base/minecraft/net/minecraft/entity/passive/EntityVillager.java
|
||||
+++ ../src_work/minecraft/net/minecraft/entity/passive/EntityVillager.java
|
||||
@@ -205,7 +205,7 @@
|
||||
ItemStack itemstack = par1EntityPlayer.inventory.getCurrentItem();
|
||||
boolean flag = itemstack != null && itemstack.itemID == Item.monsterPlacer.itemID;
|
||||
|
||||
- if (!flag && this.isEntityAlive() && !this.isTrading() && !this.isChild())
|
||||
+ if (!flag && this.isEntityAlive() && !this.isTrading() && !this.isChild() && !par1EntityPlayer.isSneaking())
|
||||
{
|
||||
if (!this.worldObj.isRemote)
|
||||
{
|
|
@ -47,7 +47,15 @@
|
|||
}
|
||||
|
||||
itemsList[256 + par1] = this;
|
||||
@@ -606,6 +616,7 @@
|
||||
@@ -334,6 +344,7 @@
|
||||
/**
|
||||
* Returns the maximum size of the stack for a specific item. *Isn't this more a Set than a Get?*
|
||||
*/
|
||||
+ @Deprecated
|
||||
public int getItemStackLimit()
|
||||
{
|
||||
return this.maxStackSize;
|
||||
@@ -606,6 +617,7 @@
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
|
@ -55,7 +63,16 @@
|
|||
public boolean hasEffect(ItemStack par1ItemStack)
|
||||
{
|
||||
return par1ItemStack.isItemEnchanted();
|
||||
@@ -635,7 +646,7 @@
|
||||
@@ -626,7 +638,7 @@
|
||||
*/
|
||||
public boolean isItemTool(ItemStack par1ItemStack)
|
||||
{
|
||||
- return this.getItemStackLimit() == 1 && this.isDamageable();
|
||||
+ return this.getItemStackLimit(par1ItemStack) == 1 && this.isDamageable();
|
||||
}
|
||||
|
||||
protected MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3)
|
||||
@@ -635,7 +647,7 @@
|
||||
float f1 = par2EntityPlayer.prevRotationPitch + (par2EntityPlayer.rotationPitch - par2EntityPlayer.prevRotationPitch) * f;
|
||||
float f2 = par2EntityPlayer.prevRotationYaw + (par2EntityPlayer.rotationYaw - par2EntityPlayer.prevRotationYaw) * f;
|
||||
double d0 = par2EntityPlayer.prevPosX + (par2EntityPlayer.posX - par2EntityPlayer.prevPosX) * (double)f;
|
||||
|
@ -64,7 +81,7 @@
|
|||
double d2 = par2EntityPlayer.prevPosZ + (par2EntityPlayer.posZ - par2EntityPlayer.prevPosZ) * (double)f;
|
||||
Vec3 vec3 = par1World.getWorldVec3Pool().getVecFromPool(d0, d1, d2);
|
||||
float f3 = MathHelper.cos(-f2 * 0.017453292F - (float)Math.PI);
|
||||
@@ -645,6 +656,10 @@
|
||||
@@ -645,6 +657,10 @@
|
||||
float f7 = f4 * f5;
|
||||
float f8 = f3 * f5;
|
||||
double d3 = 5.0D;
|
||||
|
@ -75,7 +92,7 @@
|
|||
Vec3 vec31 = vec3.addVector((double)f7 * d3, (double)f6 * d3, (double)f8 * d3);
|
||||
return par1World.rayTraceBlocks_do_do(vec3, vec31, par3, !par3);
|
||||
}
|
||||
@@ -753,4 +768,534 @@
|
||||
@@ -753,4 +769,546 @@
|
||||
{
|
||||
StatList.initStats();
|
||||
}
|
||||
|
@ -608,5 +625,17 @@
|
|||
+ public boolean hasEffect(ItemStack par1ItemStack, int pass)
|
||||
+ {
|
||||
+ return hasEffect(par1ItemStack) && (pass == 0 || itemID != Item.potion.itemID);
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Gets the maximum number of items that this stack should be able to hold.
|
||||
+ * This is a ItemStack (and thus NBT) sensitive version of Item.getItemStackLimit()
|
||||
+ *
|
||||
+ * @param stack The ItemStack
|
||||
+ * @return THe maximum number this item can be stacked to
|
||||
+ */
|
||||
+ public int getItemStackLimit(ItemStack stack)
|
||||
+ {
|
||||
+ return this.getItemStackLimit();
|
||||
+ }
|
||||
}
|
||||
|
|
|
@ -1,6 +1,32 @@
|
|||
--- ../src_base/minecraft/net/minecraft/item/ItemStack.java
|
||||
+++ ../src_work/minecraft/net/minecraft/item/ItemStack.java
|
||||
@@ -252,7 +252,9 @@
|
||||
@@ -29,6 +29,7 @@
|
||||
import net.minecraft.util.Icon;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraft.world.World;
|
||||
+import net.minecraftforge.event.ForgeEventFactory;
|
||||
|
||||
public final class ItemStack
|
||||
{
|
||||
@@ -223,7 +224,7 @@
|
||||
*/
|
||||
public int getMaxStackSize()
|
||||
{
|
||||
- return this.getItem().getItemStackLimit();
|
||||
+ return this.getItem().getItemStackLimit(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -239,7 +240,7 @@
|
||||
*/
|
||||
public boolean isItemStackDamageable()
|
||||
{
|
||||
- return Item.itemsList[this.itemID].getMaxDamage() > 0;
|
||||
+ return Item.itemsList[this.itemID].getMaxDamage(this) > 0;
|
||||
}
|
||||
|
||||
public boolean getHasSubtypes()
|
||||
@@ -252,7 +253,9 @@
|
||||
*/
|
||||
public boolean isItemDamaged()
|
||||
{
|
||||
|
@ -11,7 +37,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -260,6 +262,10 @@
|
||||
@@ -260,6 +263,10 @@
|
||||
*/
|
||||
public int getItemDamageForDisplay()
|
||||
{
|
||||
|
@ -22,7 +48,7 @@
|
|||
return this.itemDamage;
|
||||
}
|
||||
|
||||
@@ -268,6 +274,10 @@
|
||||
@@ -268,6 +275,10 @@
|
||||
*/
|
||||
public int getItemDamage()
|
||||
{
|
||||
|
@ -33,7 +59,7 @@
|
|||
return this.itemDamage;
|
||||
}
|
||||
|
||||
@@ -276,6 +286,12 @@
|
||||
@@ -276,6 +287,12 @@
|
||||
*/
|
||||
public void setItemDamage(int par1)
|
||||
{
|
||||
|
@ -46,7 +72,7 @@
|
|||
this.itemDamage = par1;
|
||||
|
||||
if (this.itemDamage < 0)
|
||||
@@ -289,7 +305,7 @@
|
||||
@@ -289,7 +306,7 @@
|
||||
*/
|
||||
public int getMaxDamage()
|
||||
{
|
||||
|
@ -55,7 +81,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -327,8 +343,8 @@
|
||||
@@ -327,8 +344,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -66,7 +92,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -396,7 +412,7 @@
|
||||
@@ -396,7 +413,7 @@
|
||||
*/
|
||||
public boolean canHarvestBlock(Block par1Block)
|
||||
{
|
||||
|
@ -75,7 +101,12 @@
|
|||
}
|
||||
|
||||
public boolean func_111282_a(EntityPlayer par1EntityPlayer, EntityLivingBase par2EntityLivingBase)
|
||||
@@ -737,10 +753,16 @@
|
||||
@@ -733,14 +750,21 @@
|
||||
{
|
||||
arraylist.add("Durability: " + (this.getMaxDamage() - this.getItemDamageForDisplay()) + " / " + this.getMaxDamage());
|
||||
}
|
||||
+ ForgeEventFactory.onItemTooltip(this, par1EntityPlayer, arraylist, par2);
|
||||
|
||||
return arraylist;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
--- ../src_base/minecraft/net/minecraft/tileentity/TileEntityHopper.java
|
||||
+++ ../src_work/minecraft/net/minecraft/tileentity/TileEntityHopper.java
|
||||
@@ -453,17 +453,28 @@
|
||||
|
||||
if (itemstack1 == null)
|
||||
{
|
||||
- par0IInventory.setInventorySlotContents(par2, par1ItemStack);
|
||||
- par1ItemStack = null;
|
||||
+ int max = Math.min(par1ItemStack.getMaxStackSize(), par0IInventory.getInventoryStackLimit());
|
||||
+ if (max >= par1ItemStack.stackSize)
|
||||
+ {
|
||||
+ par0IInventory.setInventorySlotContents(par2, par1ItemStack);
|
||||
+ par1ItemStack = null;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ par0IInventory.setInventorySlotContents(par2, par1ItemStack.splitStack(max));
|
||||
+ }
|
||||
flag = true;
|
||||
}
|
||||
else if (areItemStacksEqualItem(itemstack1, par1ItemStack))
|
||||
{
|
||||
- int k = par1ItemStack.getMaxStackSize() - itemstack1.stackSize;
|
||||
- int l = Math.min(par1ItemStack.stackSize, k);
|
||||
- par1ItemStack.stackSize -= l;
|
||||
- itemstack1.stackSize += l;
|
||||
- flag = l > 0;
|
||||
+ int max = Math.min(par1ItemStack.getMaxStackSize(), par0IInventory.getInventoryStackLimit());
|
||||
+ if (max > itemstack1.stackSize)
|
||||
+ {
|
||||
+ int l = Math.min(par1ItemStack.stackSize, max - itemstack1.stackSize);
|
||||
+ par1ItemStack.stackSize -= l;
|
||||
+ itemstack1.stackSize += l;
|
||||
+ flag = l > 0;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (flag)
|
|
@ -748,7 +748,31 @@
|
|||
{
|
||||
block = null;
|
||||
}
|
||||
@@ -3914,7 +4083,7 @@
|
||||
@@ -3744,14 +3913,20 @@
|
||||
*/
|
||||
public int getIndirectPowerLevelTo(int par1, int par2, int par3, int par4)
|
||||
{
|
||||
- if (this.isBlockNormalCube(par1, par2, par3))
|
||||
+ Block block = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
||||
+
|
||||
+ if (block == null)
|
||||
+ {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (!block.shouldCheckWeakPower(this, par1, par2, par3, par4))
|
||||
{
|
||||
return this.getBlockPowerInput(par1, par2, par3);
|
||||
}
|
||||
else
|
||||
{
|
||||
- int i1 = this.getBlockId(par1, par2, par3);
|
||||
- return i1 == 0 ? 0 : Block.blocksList[i1].isProvidingWeakPower(this, par1, par2, par3, par4);
|
||||
+ return block.isProvidingWeakPower(this, par1, par2, par3, par4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3914,7 +4089,7 @@
|
||||
*/
|
||||
public long getSeed()
|
||||
{
|
||||
|
@ -757,7 +781,7 @@
|
|||
}
|
||||
|
||||
public long getTotalWorldTime()
|
||||
@@ -3924,7 +4093,7 @@
|
||||
@@ -3924,7 +4099,7 @@
|
||||
|
||||
public long getWorldTime()
|
||||
{
|
||||
|
@ -766,7 +790,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -3932,7 +4101,7 @@
|
||||
@@ -3932,7 +4107,7 @@
|
||||
*/
|
||||
public void setWorldTime(long par1)
|
||||
{
|
||||
|
@ -775,7 +799,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -3940,13 +4109,13 @@
|
||||
@@ -3940,13 +4115,13 @@
|
||||
*/
|
||||
public ChunkCoordinates getSpawnPoint()
|
||||
{
|
||||
|
@ -791,7 +815,7 @@
|
|||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@@ -3970,7 +4139,10 @@
|
||||
@@ -3970,7 +4145,10 @@
|
||||
|
||||
if (!this.loadedEntityList.contains(par1Entity))
|
||||
{
|
||||
|
@ -803,7 +827,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -3978,6 +4150,11 @@
|
||||
@@ -3978,6 +4156,11 @@
|
||||
* Called when checking if a certain block can be mined or not. The 'spawn safe zone' check is located here.
|
||||
*/
|
||||
public boolean canMineBlock(EntityPlayer par1EntityPlayer, int par2, int par3, int par4)
|
||||
|
@ -815,7 +839,7 @@
|
|||
{
|
||||
return true;
|
||||
}
|
||||
@@ -4098,8 +4275,7 @@
|
||||
@@ -4098,8 +4281,7 @@
|
||||
*/
|
||||
public boolean isBlockHighHumidity(int par1, int par2, int par3)
|
||||
{
|
||||
|
@ -825,7 +849,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -4174,7 +4350,7 @@
|
||||
@@ -4174,7 +4356,7 @@
|
||||
*/
|
||||
public int getHeight()
|
||||
{
|
||||
|
@ -834,7 +858,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -4182,7 +4358,7 @@
|
||||
@@ -4182,7 +4364,7 @@
|
||||
*/
|
||||
public int getActualHeight()
|
||||
{
|
||||
|
@ -843,7 +867,7 @@
|
|||
}
|
||||
|
||||
public IUpdatePlayerListBox getMinecartSoundUpdater(EntityMinecart par1EntityMinecart)
|
||||
@@ -4225,7 +4401,7 @@
|
||||
@@ -4225,7 +4407,7 @@
|
||||
*/
|
||||
public double getHorizon()
|
||||
{
|
||||
|
@ -852,7 +876,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -4294,30 +4470,28 @@
|
||||
@@ -4294,30 +4476,28 @@
|
||||
|
||||
public void func_96440_m(int par1, int par2, int par3, int par4)
|
||||
{
|
||||
|
@ -904,7 +928,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
@@ -4363,4 +4537,115 @@
|
||||
@@ -4363,4 +4543,115 @@
|
||||
|
||||
return MathHelper.clamp_float(f, 0.0F, flag ? 1.5F : 1.0F);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue