Skip to content

Commit d0fddea

Browse files
committed
Update 1.2.12
1 parent b922df1 commit d0fddea

27 files changed

+345
-90
lines changed

client/src/main/java/com/fox2code/foxloader/client/KeyBindingAPI.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ public class KeyBindingAPI {
1111

1212
public static void registerKeyBinding(KeyBinding keyBinding) {
1313
if (loaded) throw new IllegalStateException("Options are already loaded");
14-
if (registeredKeyBindings.size() >= 9) // This limit will be fixed in future update!
15-
throw new IllegalStateException("Cannot register more than 9 custom key-binds!");
14+
if (registeredKeyBindings.size() >= 8) // This limit will be fixed in future update!
15+
throw new IllegalStateException("Cannot register more than 8 custom key-binds!");
1616
registeredKeyBindings.add(keyBinding);
1717
}
1818

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.fox2code.foxloader.client.gui;
2+
3+
import net.minecraft.src.client.gui.Container;
4+
5+
/**
6+
* Tells FoxLoader that the container is a wrapped container.
7+
* <p>
8+
* If your container has client side only inventory slots please use {@link InventoryClientOnly} too
9+
*/
10+
public interface ContainerWrapped {
11+
Container getParentContainer();
12+
13+
static Container getNetworkContainer(Container container) {
14+
int antiSoftLock = 0;
15+
while (container instanceof ContainerWrapped) {
16+
container = ((ContainerWrapped) container).getParentContainer();
17+
if (antiSoftLock++>100) return null;
18+
}
19+
return container;
20+
}
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fox2code.foxloader.client.gui;
2+
3+
import net.minecraft.src.client.inventory.InventoryBasic;
4+
5+
public class InventoryBasicClientOnly extends InventoryBasic implements InventoryClientOnly {
6+
public InventoryBasicClientOnly(String var1, int var2) {
7+
super(var1, var2);
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.fox2code.foxloader.client.gui;
2+
3+
import net.minecraft.src.client.inventory.IInventory;
4+
5+
/**
6+
* Mark a {@link IInventory} as client side only, and to avoid any network inconsistencies
7+
*/
8+
public interface InventoryClientOnly extends IInventory {
9+
}

client/src/main/java/com/fox2code/foxloader/client/mixins/MixinContainer.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package com.fox2code.foxloader.client.mixins;
22

3+
import com.fox2code.foxloader.client.gui.ContainerWrapped;
34
import net.minecraft.src.client.gui.Container;
5+
import net.minecraft.src.client.gui.GuiContainer;
6+
import net.minecraft.src.client.gui.Slot;
47
import net.minecraft.src.game.entity.player.EntityPlayer;
8+
import net.minecraft.src.game.item.ItemStack;
59
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Overwrite;
11+
import org.spongepowered.asm.mixin.Shadow;
612
import org.spongepowered.asm.mixin.injection.At;
713
import org.spongepowered.asm.mixin.injection.Inject;
814
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
15+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
16+
17+
import java.util.List;
918

1019

1120
@Mixin(Container.class)
@@ -16,4 +25,14 @@ public void hotfix_onCraftGuiClosedHook(EntityPlayer var1, CallbackInfo ci) {
1625
ci.cancel();
1726
}
1827
}
28+
29+
/**
30+
* Disable default behaviour on wrapped container for better stability.
31+
*/
32+
@Inject(method = "quickMove", at = @At("HEAD"), cancellable = true)
33+
public void onQuickMove(int var1, CallbackInfoReturnable<ItemStack> cir) {
34+
if (this instanceof ContainerWrapped) {
35+
cir.setReturnValue(null);
36+
}
37+
}
1938
}

client/src/main/java/com/fox2code/foxloader/client/mixins/MixinContainerCreative.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.fox2code.foxloader.client.mixins;
22

33
import com.fox2code.foxloader.client.CreativeItems;
4+
import com.fox2code.foxloader.client.gui.ContainerWrapped;
5+
import net.minecraft.src.client.gui.Container;
46
import net.minecraft.src.client.gui.ContainerCreative;
57
import net.minecraft.src.game.entity.player.EntityPlayer;
68
import net.minecraft.src.game.item.ItemStack;
@@ -14,11 +16,13 @@
1416
import java.util.List;
1517

1618
@Mixin(ContainerCreative.class)
17-
public abstract class MixinContainerCreative {
19+
public abstract class MixinContainerCreative implements ContainerWrapped {
1820
@Shadow public List<ItemStack> itemList;
1921

2022
@Shadow public abstract void addToSlot(ItemStack itemstack);
2123

24+
@Shadow private EntityPlayer player;
25+
2226
@Inject(method = "addItems", at = @At("HEAD"), cancellable = true)
2327
public void onAddItems(EntityPlayer player, CallbackInfo ci) {
2428
List<ItemStack> creativeItemStacks =
@@ -36,4 +40,9 @@ public void onAddItems(EntityPlayer player, CallbackInfo ci) {
3640
public void onItemsAdded(EntityPlayer player, CallbackInfo ci) {
3741
CreativeItems.Internal.markLoadFinished(this.itemList);
3842
}
43+
44+
@Override
45+
public Container getParentContainer() {
46+
return this.player.playerContainer;
47+
}
3948
}

client/src/main/java/com/fox2code/foxloader/client/mixins/MixinGameSettings.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.minecraft.src.client.EnumOptions;
55
import net.minecraft.src.client.GameSettings;
66
import net.minecraft.src.client.KeyBinding;
7+
import org.lwjgl.input.Keyboard;
78
import org.spongepowered.asm.mixin.Mixin;
89
import org.spongepowered.asm.mixin.Shadow;
910
import org.spongepowered.asm.mixin.injection.At;
@@ -27,4 +28,12 @@ public void onLoadOptionInit(GameSettings instance) {
2728
public void onOptionInit(CallbackInfo ci) {
2829
this.keyBindings = KeyBindingAPI.Internal.inject(this.keyBindings);
2930
}
31+
32+
@Redirect(method = "*", at = @At(value = "INVOKE", target =
33+
"Lorg/lwjgl/input/Keyboard;getKeyName(I)Ljava/lang/String;"))
34+
public String getKeyName(int i) {
35+
if (i > Keyboard.KEYBOARD_SIZE || i < 0)
36+
return "#" + i;
37+
return Keyboard.getKeyName(i);
38+
}
3039
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.fox2code.foxloader.client.mixins;
2+
3+
import com.fox2code.foxloader.client.gui.GuiModList;
4+
import com.fox2code.foxloader.client.gui.GuiUpdateButton;
5+
import net.minecraft.src.client.gui.GuiButton;
6+
import net.minecraft.src.client.gui.GuiIngameMenu;
7+
import net.minecraft.src.client.gui.GuiScreen;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Inject;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
12+
13+
@Mixin(GuiIngameMenu.class)
14+
public class MixinGuiIngameMenu extends GuiScreen {
15+
@Inject(method = "initGui", at = @At(value = "RETURN"))
16+
public void onInitGui(CallbackInfo ci) {
17+
this.controlList.add(new GuiUpdateButton(500, this.width - 62, 2, 60, 20, "Mods"));
18+
}
19+
20+
@Inject(method = "actionPerformed", at = @At(value = "HEAD"), cancellable = true)
21+
public void onActionPerformed(GuiButton var1, CallbackInfo ci) {
22+
if (var1.id == 500) {
23+
this.mc.displayGuiScreen(new GuiModList(this));
24+
ci.cancel();
25+
}
26+
}
27+
}

client/src/main/java/com/fox2code/foxloader/client/mixins/MixinItemStack.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import org.spongepowered.asm.mixin.Mixin;
1010
import org.spongepowered.asm.mixin.Shadow;
1111
import org.spongepowered.asm.mixin.Unique;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Inject;
14+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1215

1316
@Mixin(ItemStack.class)
1417
public abstract class MixinItemStack implements RegisteredItemStack, NetworkItemStack {
@@ -22,6 +25,16 @@ public abstract class MixinItemStack implements RegisteredItemStack, NetworkItem
2225
@Shadow public abstract void setItemName(String par1Str);
2326
@Shadow public abstract boolean hasDisplayName();
2427

28+
@Inject(method = "splitStack", at = @At("RETURN"))
29+
public void onSplitStack(int stacksize, CallbackInfoReturnable<ItemStack> cir) {
30+
((NetworkItemStack) (Object) cir.getReturnValue()).setRemoteNetworkId(this.networkId);
31+
}
32+
33+
@Inject(method = "copy", at = @At("RETURN"))
34+
public void onCopy(CallbackInfoReturnable<ItemStack> cir) {
35+
((NetworkItemStack) (Object) cir.getReturnValue()).setRemoteNetworkId(this.networkId);
36+
}
37+
2538
@Override
2639
public RegisteredItem getRegisteredItem() {
2740
return (RegisteredItem) this.getItem();

client/src/main/java/com/fox2code/foxloader/client/mixins/MixinNetClientHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
import net.minecraft.src.client.packets.*;
1111
import net.minecraft.src.game.level.WorldClient;
1212
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.Unique;
1314
import org.spongepowered.asm.mixin.injection.At;
1415
import org.spongepowered.asm.mixin.injection.Inject;
1516
import org.spongepowered.asm.mixin.injection.Redirect;
1617
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1718

1819
@Mixin(NetClientHandler.class)
1920
public class MixinNetClientHandler implements NetClientHandlerExtensions {
20-
boolean isFoxLoader = false;
21+
@Unique boolean isFoxLoader = false;
2122

2223
@Inject(method = "handlePickupSpawn", at = @At("HEAD"))
2324
public void onHandlePickupSpawn(Packet21PickupSpawn packet21, CallbackInfo ci) {

0 commit comments

Comments
 (0)