mirror of
https://codeberg.org/moonleay/Gimbal.git
synced 2025-07-06 23:25:46 +02:00
feat: added multiplayer support
This commit is contained in:
parent
136bd78f00
commit
60ceb1b3ae
22 changed files with 183 additions and 42 deletions
|
@ -6,8 +6,8 @@ import net.minecraft.client.gui.hud.InGameHud;
|
|||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.moonleay.gimble.client.editor.ClientEditor;
|
||||
import net.moonleay.gimble.client.editor.modes.Mode;
|
||||
import net.moonleay.gimble.client.editor.modes.ModeModifier;
|
||||
import net.moonleay.gimble.editor.state.mode.Mode;
|
||||
import net.moonleay.gimble.editor.state.mode.ModeModifier;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
|
|
@ -2,7 +2,7 @@ package net.moonleay.gimble.mixin;
|
|||
|
||||
import net.minecraft.client.render.Camera;
|
||||
import net.moonleay.gimble.client.editor.ClientEditor;
|
||||
import net.moonleay.gimble.client.editor.modes.ModeModifier;
|
||||
import net.moonleay.gimble.editor.state.mode.ModeModifier;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
|
|
@ -1,32 +1,59 @@
|
|||
package net.moonleay.gimble.mixin;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import net.minecraft.entity.EntityPose;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerAbilities;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.moonleay.gimble.client.editor.ClientEditor;
|
||||
import net.moonleay.gimble.client.editor.modes.ModeModifier;
|
||||
import net.minecraft.world.World;
|
||||
import net.moonleay.gimble.editor.ServerEditorManager;
|
||||
import net.moonleay.gimble.editor.state.mode.ModeModifier;
|
||||
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(Entity.class)
|
||||
public class NoClipMixin {
|
||||
import java.util.UUID;
|
||||
|
||||
@Shadow public boolean noClip;
|
||||
@Mixin(PlayerEntity.class)
|
||||
public abstract class NoClipMixin extends LivingEntity {
|
||||
@Shadow public abstract GameProfile getGameProfile();
|
||||
|
||||
@Inject(method = "tick", at = @At(value = "HEAD"))
|
||||
private void enoClip(CallbackInfo ci) {
|
||||
// TODO: Add player check, add multiplayer compat
|
||||
if(!((Entity)(Object)this instanceof PlayerEntity)) // Only check on player
|
||||
@Shadow public abstract PlayerAbilities getAbilities();
|
||||
|
||||
protected NoClipMixin(EntityType<? extends LivingEntity> entityType, World world) {
|
||||
super(entityType, world);
|
||||
} // Server side
|
||||
|
||||
|
||||
@Inject(method = "tick", at = @At(value = "FIELD",
|
||||
target = "Lnet/minecraft/entity/player/PlayerEntity;noClip:Z", shift = At.Shift.AFTER)
|
||||
) private void enoClip(CallbackInfo ci) {
|
||||
UUID uuid = this.getGameProfile().getId();
|
||||
|
||||
if (!ServerEditorManager.INSTANCE.playerHasModifier(uuid, ModeModifier.NO_CLIP)) {
|
||||
return; // NoClip is not enabled
|
||||
}
|
||||
if (!this.getAbilities().flying) {
|
||||
return;
|
||||
|
||||
if (!ClientEditor.INSTANCE.containsModifier(ModeModifier.NO_CLIP))
|
||||
return;
|
||||
PlayerEntity thePlayer = (PlayerEntity)(Object)this;
|
||||
if (!thePlayer.getAbilities().flying)
|
||||
return;
|
||||
|
||||
}
|
||||
// Enable NoClip
|
||||
this.noClip = true;
|
||||
}
|
||||
|
||||
@Inject(method = "updatePose", at = @At("HEAD"))
|
||||
private void onUpdatePose(CallbackInfo ci) {
|
||||
UUID uuid = this.getGameProfile().getId();
|
||||
|
||||
if (!ServerEditorManager.INSTANCE.playerHasModifier(uuid, ModeModifier.NO_CLIP))
|
||||
return; // NoClip is not enabled
|
||||
if (!this.getAbilities().flying)
|
||||
return;
|
||||
|
||||
// Force standing pose in NoClip mode
|
||||
|
||||
this.setPose(EntityPose.STANDING);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package net.moonleay.gimble.mixin;
|
|||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.GameOptions;
|
||||
import net.moonleay.gimble.client.editor.modes.Mode;
|
||||
import net.moonleay.gimble.editor.state.mode.Mode;
|
||||
import net.moonleay.gimble.client.editor.ClientEditor;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
|
|
@ -12,7 +12,7 @@ import net.minecraft.util.hit.HitResult;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.moonleay.gimble.client.editor.ClientEditor;
|
||||
import net.moonleay.gimble.client.editor.modes.Mode;
|
||||
import net.moonleay.gimble.editor.state.mode.Mode;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue