mirror of
https://codeberg.org/moonleay/Gimble.git
synced 2024-11-21 14:22:55 +00:00
refactor: combined Bulldozer and YouInjectButton mixin into one mixin each
Signed-off-by: moonleay <contact@moonleay.net>
This commit is contained in:
parent
b4f46ee703
commit
4c8404d306
5 changed files with 106 additions and 164 deletions
|
@ -20,9 +20,13 @@ package net.moonleay.gimbal.mixin;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.network.ClientPlayerEntity;
|
||||||
|
import net.minecraft.client.network.ClientPlayerInteractionManager;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
import net.moonleay.gimbal.client.editor.ClientEditor;
|
import net.moonleay.gimbal.client.editor.ClientEditor;
|
||||||
import net.moonleay.gimbal.editor.state.mode.Capability;
|
import net.moonleay.gimbal.editor.state.mode.Capability;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
@ -32,30 +36,49 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@Mixin(MinecraftClient.class)
|
|
||||||
public abstract class BulldozerMixin {
|
public abstract class BulldozerMixin {
|
||||||
|
|
||||||
@Shadow protected int attackCooldown;
|
@Mixin(MinecraftClient.class)
|
||||||
|
public static abstract class MinecraftClientMixin {
|
||||||
|
@Shadow
|
||||||
|
@Nullable
|
||||||
|
public ClientPlayerEntity player;
|
||||||
|
@Shadow
|
||||||
|
protected int attackCooldown;
|
||||||
|
|
||||||
@Shadow
|
@Inject(method = "doAttack", at = @At(value = "HEAD"))
|
||||||
@Nullable
|
private void func(CallbackInfoReturnable<Boolean> cir) {
|
||||||
public ClientPlayerEntity player;
|
if (!ClientEditor.INSTANCE.shouldClient(Capability.BULLDOZER) || !Objects.requireNonNull(this.player).isCreative()) {
|
||||||
|
return;
|
||||||
@Inject(method = "doAttack", at = @At(value = "HEAD"))
|
}
|
||||||
private void func(CallbackInfoReturnable<Boolean> cir) {
|
this.attackCooldown = 0;
|
||||||
if (!ClientEditor.INSTANCE.shouldClient(Capability.BULLDOZER) || !Objects.requireNonNull(this.player).isCreative()) {
|
}
|
||||||
return;
|
|
||||||
|
@Inject(method = "handleBlockBreaking", at = @At(value = "HEAD"))
|
||||||
|
private void func2(boolean breaking, CallbackInfo ci) {
|
||||||
|
if (!ClientEditor.INSTANCE.shouldClient(Capability.BULLDOZER) || !breaking || !Objects.requireNonNull(this.player).isCreative()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.attackCooldown = 0;
|
||||||
}
|
}
|
||||||
this.attackCooldown = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "handleBlockBreaking", at = @At(value = "HEAD"))
|
@Mixin(ClientPlayerInteractionManager.class)
|
||||||
private void func2(boolean breaking, CallbackInfo ci) {
|
public static abstract class ClientPlayerInteractionManagerMixin {
|
||||||
if (!ClientEditor.INSTANCE.shouldClient(Capability.BULLDOZER) || !breaking || !Objects.requireNonNull(this.player).isCreative()) {
|
|
||||||
return;
|
@Shadow
|
||||||
|
private int blockBreakingCooldown;
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
@Final
|
||||||
|
private MinecraftClient client;
|
||||||
|
|
||||||
|
@Inject(method = "updateBlockBreakingProgress", at = @At("HEAD"))
|
||||||
|
private void func(BlockPos pos, Direction direction, CallbackInfoReturnable<Boolean> cir) {
|
||||||
|
if (!ClientEditor.INSTANCE.shouldClient(Capability.BULLDOZER) || !Objects.requireNonNull(this.client.player).isCreative()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.blockBreakingCooldown = 0;
|
||||||
}
|
}
|
||||||
this.attackCooldown = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
/*
|
|
||||||
* Gimbal
|
|
||||||
* Copyright (C) 2024 moonleay
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package net.moonleay.gimbal.mixin;
|
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.network.ClientPlayerInteractionManager;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.util.math.Direction;
|
|
||||||
import net.moonleay.gimbal.client.editor.ClientEditor;
|
|
||||||
import net.moonleay.gimbal.editor.state.mode.Capability;
|
|
||||||
import org.spongepowered.asm.mixin.Final;
|
|
||||||
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.CallbackInfoReturnable;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
@Mixin(ClientPlayerInteractionManager.class)
|
|
||||||
public class BulldozerMixin2 {
|
|
||||||
|
|
||||||
@Shadow private int blockBreakingCooldown;
|
|
||||||
|
|
||||||
@Shadow
|
|
||||||
@Final
|
|
||||||
private MinecraftClient client;
|
|
||||||
|
|
||||||
@Inject(method = "updateBlockBreakingProgress", at = @At("HEAD"))
|
|
||||||
private void func(BlockPos pos, Direction direction, CallbackInfoReturnable<Boolean> cir) {
|
|
||||||
if (!ClientEditor.INSTANCE.shouldClient(Capability.BULLDOZER) || !Objects.requireNonNull(this.client.player).isCreative()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.blockBreakingCooldown = 0;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -20,6 +20,7 @@ package net.moonleay.gimbal.mixin;
|
||||||
|
|
||||||
import net.minecraft.client.gui.screen.GameMenuScreen;
|
import net.minecraft.client.gui.screen.GameMenuScreen;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.gui.screen.TitleScreen;
|
||||||
import net.minecraft.client.gui.widget.TexturedButtonWidget;
|
import net.minecraft.client.gui.widget.TexturedButtonWidget;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
@ -33,35 +34,71 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
@Mixin(GameMenuScreen.class)
|
|
||||||
// What is my purpose?
|
// What is my purpose?
|
||||||
public class YouInjectButtonMixin extends Screen {
|
public class YouInjectButtonMixin {
|
||||||
// Go my god.
|
// Go my god.
|
||||||
|
|
||||||
@Unique
|
@Mixin(TitleScreen.class)
|
||||||
private static final Identifier GIMBAL_TEXTURE = new Identifier(BuildConstants.modId, "textures/gimbal_options_texture_button.png");
|
public static abstract class TitleScreenMixin extends Screen {
|
||||||
|
|
||||||
protected YouInjectButtonMixin(Text title) {
|
@Unique
|
||||||
super(title);
|
private static final Identifier GIMBAL_TEXTURE = new Identifier(BuildConstants.modId, "textures/gimbal_options_texture_button.png");
|
||||||
|
|
||||||
|
protected TitleScreenMixin(Text title) {
|
||||||
|
super(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "init", at = @At(value = "RETURN"))
|
||||||
|
private void func(CallbackInfo ci) {
|
||||||
|
int l = this.height / 4 + 48;
|
||||||
|
this.addDrawableChild(
|
||||||
|
new TexturedButtonWidget(
|
||||||
|
this.width / 2 - 124 - 24,
|
||||||
|
l + 72 + 12,
|
||||||
|
20,
|
||||||
|
20,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
20,
|
||||||
|
GIMBAL_TEXTURE,
|
||||||
|
20,
|
||||||
|
40,
|
||||||
|
button -> this.client.setScreen(new GimbalSettingsGui(this, ClientMain.CONFIG)),
|
||||||
|
Text.translatable(TranslationKeys.Gui.Config.SCREEN_NAME)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "initWidgets", at = @At(value = "RETURN"))
|
|
||||||
private void func(CallbackInfo ci) {
|
@Mixin(GameMenuScreen.class)
|
||||||
this.addDrawableChild(
|
public static abstract class GameMenuScreenMixin extends Screen {
|
||||||
new TexturedButtonWidget(
|
@Unique
|
||||||
this.width / 2 - 124,
|
private static final Identifier GIMBAL_TEXTURE = new Identifier(BuildConstants.modId, "textures/gimbal_options_texture_button.png");
|
||||||
this.height / 4 + 96 + -16,
|
|
||||||
20,
|
protected GameMenuScreenMixin(Text title) {
|
||||||
20,
|
super(title);
|
||||||
0,
|
}
|
||||||
0,
|
|
||||||
20,
|
@Inject(method = "initWidgets", at = @At(value = "RETURN"))
|
||||||
GIMBAL_TEXTURE,
|
private void func(CallbackInfo ci) {
|
||||||
20,
|
this.addDrawableChild(
|
||||||
40,
|
new TexturedButtonWidget(
|
||||||
button -> this.client.setScreen(new GimbalSettingsGui(this, ClientMain.CONFIG)),
|
this.width / 2 - 124,
|
||||||
Text.translatable(TranslationKeys.Gui.Config.SCREEN_NAME)
|
this.height / 4 + 96 + -16,
|
||||||
)
|
20,
|
||||||
);
|
20,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
20,
|
||||||
|
GIMBAL_TEXTURE,
|
||||||
|
20,
|
||||||
|
40,
|
||||||
|
button -> this.client.setScreen(new GimbalSettingsGui(this, ClientMain.CONFIG)),
|
||||||
|
Text.translatable(TranslationKeys.Gui.Config.SCREEN_NAME)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
/*
|
|
||||||
* Gimbal
|
|
||||||
* Copyright (C) 2024 moonleay
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package net.moonleay.gimbal.mixin;
|
|
||||||
|
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
|
||||||
import net.minecraft.client.gui.screen.TitleScreen;
|
|
||||||
import net.minecraft.client.gui.widget.TexturedButtonWidget;
|
|
||||||
import net.minecraft.text.Text;
|
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.moonleay.gimbal.build.BuildConstants;
|
|
||||||
import net.moonleay.gimbal.client.ClientMain;
|
|
||||||
import net.moonleay.gimbal.client.screen.GimbalSettingsGui;
|
|
||||||
import net.moonleay.gimbal.constants.TranslationKeys;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
@Mixin(TitleScreen.class)
|
|
||||||
public class YouInjectButtonMixin2 extends Screen {
|
|
||||||
|
|
||||||
@Unique
|
|
||||||
private static final Identifier GIMBAL_TEXTURE = new Identifier(BuildConstants.modId, "textures/gimbal_options_texture_button.png");
|
|
||||||
|
|
||||||
protected YouInjectButtonMixin2(Text title) {
|
|
||||||
super(title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "init", at = @At(value = "RETURN"))
|
|
||||||
private void func(CallbackInfo ci) {
|
|
||||||
int l = this.height / 4 + 48;
|
|
||||||
this.addDrawableChild(
|
|
||||||
new TexturedButtonWidget(
|
|
||||||
this.width / 2 - 124 - 24,
|
|
||||||
l + 72 + 12,
|
|
||||||
20,
|
|
||||||
20,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
20,
|
|
||||||
GIMBAL_TEXTURE,
|
|
||||||
20,
|
|
||||||
40,
|
|
||||||
button -> this.client.setScreen(new GimbalSettingsGui(this, ClientMain.CONFIG)),
|
|
||||||
Text.translatable(TranslationKeys.Gui.Config.SCREEN_NAME)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -11,13 +11,13 @@
|
||||||
"ReplaceStateUpdaterMixin"
|
"ReplaceStateUpdaterMixin"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"BulldozerMixin",
|
"BulldozerMixin$ClientPlayerInteractionManagerMixin",
|
||||||
"BulldozerMixin2",
|
"BulldozerMixin$MinecraftClientMixin",
|
||||||
"HudMixin",
|
"HudMixin",
|
||||||
"NoClipCameraFixMixin",
|
"NoClipCameraFixMixin",
|
||||||
"NormalModeMixin",
|
"NormalModeMixin",
|
||||||
"YouInjectButtonMixin",
|
"YouInjectButtonMixin$GameMenuScreenMixin",
|
||||||
"YouInjectButtonMixin2"
|
"YouInjectButtonMixin$TitleScreenMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
Loading…
Reference in a new issue