From d1e292ca25b7987bc4ddf334205238d75f7f29b7 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 22 Dec 2018 13:17:31 +0800 Subject: from aei but like jei now --- .../java/me/shedaniel/mixins/MixinDoneLoading.java | 22 +++++ .../me/shedaniel/mixins/MixinGuiContainer.java | 98 ++++++++++++++++++++++ .../mixins/MixinGuiContainerCreative.java | 93 ++++++++++++++++++++ .../me/shedaniel/mixins/MixinKeyboardListener.java | 27 ++++++ .../me/shedaniel/mixins/MixinMinecraftResize.java | 23 +++++ .../me/shedaniel/mixins/MixinRecipeManager.java | 26 ++++++ .../java/me/shedaniel/mixins/SettingsMixin.java | 44 ++++++++++ 7 files changed, 333 insertions(+) create mode 100755 src/main/java/me/shedaniel/mixins/MixinDoneLoading.java create mode 100755 src/main/java/me/shedaniel/mixins/MixinGuiContainer.java create mode 100644 src/main/java/me/shedaniel/mixins/MixinGuiContainerCreative.java create mode 100755 src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java create mode 100755 src/main/java/me/shedaniel/mixins/MixinMinecraftResize.java create mode 100755 src/main/java/me/shedaniel/mixins/MixinRecipeManager.java create mode 100755 src/main/java/me/shedaniel/mixins/SettingsMixin.java (limited to 'src/main/java/me/shedaniel/mixins') diff --git a/src/main/java/me/shedaniel/mixins/MixinDoneLoading.java b/src/main/java/me/shedaniel/mixins/MixinDoneLoading.java new file mode 100755 index 000000000..df79245db --- /dev/null +++ b/src/main/java/me/shedaniel/mixins/MixinDoneLoading.java @@ -0,0 +1,22 @@ +package me.shedaniel.mixins; + +import me.shedaniel.listenerdefinitions.DoneLoading; +import net.minecraft.init.Bootstrap; +import org.dimdev.riftloader.RiftLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +/** + * Created by James on 7/27/2018. + */ +@Mixin(Bootstrap.class) +public class MixinDoneLoading { + @Inject(method = "register", at = @At("RETURN")) + private static void onBootstrapRegister(CallbackInfo ci) { + for(DoneLoading listener : RiftLoader.instance.getListeners(DoneLoading.class)) { + listener.onDoneLoading(); + } + } +} diff --git a/src/main/java/me/shedaniel/mixins/MixinGuiContainer.java b/src/main/java/me/shedaniel/mixins/MixinGuiContainer.java new file mode 100755 index 000000000..b4c0dbab3 --- /dev/null +++ b/src/main/java/me/shedaniel/mixins/MixinGuiContainer.java @@ -0,0 +1,98 @@ +package me.shedaniel.mixins; + +import me.shedaniel.listenerdefinitions.*; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.IGuiEventListenerDeferred; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import org.dimdev.riftloader.RiftLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * Created by James on 7/27/2018. + */ +@Mixin(GuiContainer.class) +public abstract class MixinGuiContainer implements IGuiEventListenerDeferred, IMixinGuiContainer { + @Shadow + protected Slot hoveredSlot; + @Shadow + private ItemStack draggedStack; + @Shadow + protected int guiLeft; + @Shadow + protected int guiTop; + @Shadow + protected int xSize; + @Shadow + protected int ySize; + + @Inject(method = "render", at = @At("RETURN")) + private void onRender(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_, CallbackInfo ci) { + for(DrawContainer listener : RiftLoader.instance.getListeners(DrawContainer.class)) { + listener.draw(p_drawScreen_1_, p_drawScreen_2_, p_drawScreen_3_, (GuiContainer) Minecraft.getInstance().currentScreen); + } + } + + @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) + private void onMouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_, CallbackInfoReturnable ci) { + boolean handled = false; + for(GuiCickListener listener : RiftLoader.instance.getListeners(GuiCickListener.class)) { + if (listener.onClick((int) p_mouseClicked_1_, (int) p_mouseClicked_3_, p_mouseClicked_5_)) { + ci.setReturnValue(true); + handled = true; + } + } + if (handled) + ci.cancel(); + + } + + @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) + private void onKeyPressed(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_, CallbackInfoReturnable ci) { + boolean handled = false; + for(GuiKeyDown listener : RiftLoader.instance.getListeners(GuiKeyDown.class)) { + if (listener.keyDown(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_)) + handled = true; + } + if (handled) { + ci.setReturnValue(handled); + ci.cancel(); + } + } + + public boolean mouseScrolled(double p_mouseScrolled_1_) { + boolean handled = false; + for(MouseScrollListener listener : RiftLoader.instance.getListeners(MouseScrollListener.class)) { + if (listener.mouseScrolled(p_mouseScrolled_1_)) { + handled = true; + } + } + return handled; + } + + @Override + public ItemStack getDraggedStack() { + return draggedStack; + } + + @Override + public int getGuiLeft() { + return guiLeft; + } + + @Override + public int getXSize() { + return xSize; + } + + @Override + public Slot getHoveredSlot() { + return hoveredSlot; + } +} diff --git a/src/main/java/me/shedaniel/mixins/MixinGuiContainerCreative.java b/src/main/java/me/shedaniel/mixins/MixinGuiContainerCreative.java new file mode 100644 index 000000000..3ea59f768 --- /dev/null +++ b/src/main/java/me/shedaniel/mixins/MixinGuiContainerCreative.java @@ -0,0 +1,93 @@ +package me.shedaniel.mixins; + +import me.shedaniel.listenerdefinitions.GuiKeyDown; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.gui.inventory.GuiContainerCreative; +import net.minecraft.client.renderer.InventoryEffectRenderer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.math.MathHelper; +import org.dimdev.riftloader.RiftLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import javax.annotation.Nullable; +import java.util.Objects; + +@Mixin(GuiContainerCreative.class) +public abstract class MixinGuiContainerCreative extends InventoryEffectRenderer { + + @Shadow + private static int selectedTabIndex = ItemGroup.BUILDING_BLOCKS.getIndex(); + @Shadow + private GuiTextField searchField; + + @Shadow + protected abstract boolean hasTmpInventory(@Nullable Slot p_208018_1_); + + @Shadow + protected abstract void setCurrentCreativeTab(ItemGroup tab); + + @Shadow + protected abstract void updateCreativeSearch(); + + @Shadow + private boolean field_195377_F; + + @Shadow + protected abstract boolean needsScrollBars(); + + @Shadow + private float currentScroll; + + public MixinGuiContainerCreative(Container inventorySlotsIn) { + super(inventorySlotsIn); + } + + @Overwrite + public boolean keyPressed(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_) { + this.field_195377_F = false; + if (selectedTabIndex != ItemGroup.SEARCH.getIndex()) { + if (selectedTabIndex != ItemGroup.INVENTORY.getIndex()) { + if (this.mc.gameSettings.keyBindChat.matchesKey(p_keyPressed_1_, p_keyPressed_2_)) { + this.field_195377_F = true; + this.setCurrentCreativeTab(ItemGroup.SEARCH); + return true; + } + } else for(GuiKeyDown listener : RiftLoader.instance.getListeners(GuiKeyDown.class)) + if (listener.keyDown(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_)) + return true; + } else { + boolean flag = !this.hasTmpInventory(this.hoveredSlot) || this.hoveredSlot != null && this.hoveredSlot.getHasStack(); + + if (flag && this.func_195363_d(p_keyPressed_1_, p_keyPressed_2_)) { + this.field_195377_F = true; + return true; + } else { + String s = this.searchField.getText(); + + if (this.searchField.keyPressed(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_)) { + if (!Objects.equals(s, this.searchField.getText())) + this.updateCreativeSearch(); + return true; + } + } + } + return super.keyPressed(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_); + } + + public boolean mouseScrolled(double p_mouseScrolled_1_) { + if (!this.needsScrollBars()) { + return super.mouseScrolled(p_mouseScrolled_1_); + } else { + int i = (((GuiContainerCreative.ContainerCreative) this.inventorySlots).itemList.size() + 9 - 1) / 9 - 5; + this.currentScroll = (float) ((double) this.currentScroll - p_mouseScrolled_1_ / (double) i); + this.currentScroll = MathHelper.clamp(this.currentScroll, 0.0F, 1.0F); + ((GuiContainerCreative.ContainerCreative) this.inventorySlots).scrollTo(this.currentScroll); + return true; + } + } + +} diff --git a/src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java b/src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java new file mode 100755 index 000000000..bffde5b8d --- /dev/null +++ b/src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java @@ -0,0 +1,27 @@ +package me.shedaniel.mixins; + +import me.shedaniel.listenerdefinitions.CharInput; +import net.minecraft.client.KeyboardListener; +import org.dimdev.riftloader.RiftLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +/** + * Created by James on 8/4/2018. + */ +@Mixin(KeyboardListener.class) +public class MixinKeyboardListener { + @Inject(method = "onCharEvent", at = @At("RETURN"), cancellable = true) + private void onCharEvent(long p_onCharEvent_1_, int p_onCharEvent_3_, int p_onCharEvent_4_, CallbackInfo ci) { + boolean handled = false; + for(CharInput listener : RiftLoader.instance.getListeners(CharInput.class)) { + if (listener.charInput(p_onCharEvent_1_, p_onCharEvent_3_, p_onCharEvent_4_)) { + handled = true; + } + } + if (handled) + ci.cancel(); + } +} diff --git a/src/main/java/me/shedaniel/mixins/MixinMinecraftResize.java b/src/main/java/me/shedaniel/mixins/MixinMinecraftResize.java new file mode 100755 index 000000000..73f93871d --- /dev/null +++ b/src/main/java/me/shedaniel/mixins/MixinMinecraftResize.java @@ -0,0 +1,23 @@ +package me.shedaniel.mixins; + +import me.shedaniel.listenerdefinitions.MinecraftResize; +import net.minecraft.client.MainWindow; +import org.dimdev.riftloader.RiftLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +/** + * Created by James on 7/28/2018. + */ +@Mixin(MainWindow.class) +public class MixinMinecraftResize { + @Inject(method = "updateSize", at = @At("RETURN")) + private void onResize(CallbackInfo ci) { + for(MinecraftResize listener : RiftLoader.instance.getListeners(MinecraftResize.class)) { + listener.resize(); + } + } + +} diff --git a/src/main/java/me/shedaniel/mixins/MixinRecipeManager.java b/src/main/java/me/shedaniel/mixins/MixinRecipeManager.java new file mode 100755 index 000000000..8eddf9d1f --- /dev/null +++ b/src/main/java/me/shedaniel/mixins/MixinRecipeManager.java @@ -0,0 +1,26 @@ +package me.shedaniel.mixins; + +import me.shedaniel.listenerdefinitions.RecipeLoadListener; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.item.crafting.RecipeManager; +import net.minecraft.network.play.server.SPacketUpdateRecipes; +import org.dimdev.riftloader.RiftLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(NetHandlerPlayClient.class) +public class MixinRecipeManager { + + @Shadow + RecipeManager recipeManager; + + @Inject(method = "handleUpdateRecipes", at = @At("RETURN")) + private void onUpdateRecipies(SPacketUpdateRecipes packetIn, CallbackInfo ci) { + for(RecipeLoadListener listener : RiftLoader.instance.getListeners(RecipeLoadListener.class)) { + listener.recipesLoaded(recipeManager); + } + } +} diff --git a/src/main/java/me/shedaniel/mixins/SettingsMixin.java b/src/main/java/me/shedaniel/mixins/SettingsMixin.java new file mode 100755 index 000000000..fa4dee435 --- /dev/null +++ b/src/main/java/me/shedaniel/mixins/SettingsMixin.java @@ -0,0 +1,44 @@ +package me.shedaniel.mixins; + +import me.shedaniel.listenerdefinitions.PreLoadOptions; +import net.minecraft.client.GameSettings; +import net.minecraft.client.settings.KeyBinding; +import org.dimdev.riftloader.RiftLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by James on 8/7/2018. + */ + +@Mixin(GameSettings.class) +public class SettingsMixin { + @Shadow + public KeyBinding[] keyBindings; + + public SettingsMixin() { + System.out.println("loaded"); + } + + @Inject(method = "loadOptions", at = @At("HEAD")) + public void beforeLoadOptions(CallbackInfo ci) { + + RiftLoader.instance.getListeners(PreLoadOptions.class).stream().forEach(f -> processNewBindings(f.loadOptions())); + } + + private void processNewBindings(List newBindings) { + List toAdd = new ArrayList<>(); + toAdd.addAll(newBindings); + for(KeyBinding keyBinding : keyBindings) { + toAdd.add(keyBinding); + } + keyBindings = (KeyBinding[]) toAdd.toArray(new KeyBinding[0]); + } + +} -- cgit