Skip to content

Commit

Permalink
Update random handshake.
Browse files Browse the repository at this point in the history
Remove some useless data.

Signed-off-by: 秋雨落 <[email protected]>
  • Loading branch information
qyl27 committed Mar 8, 2024
1 parent 5110fe1 commit f5936cb
Show file tree
Hide file tree
Showing 13 changed files with 107 additions and 125 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import cuteneko.catsplus.fabric.mixins.impl.ICatEntityMixin;
import cuteneko.catsplus.data.IGeniusCat;
import net.minecraft.advancement.criterion.Criteria;
import cuteneko.catsplus.mixins.bridge.dancing.IMusicianCat;
import net.minecraft.entity.EntityStatuses;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
import org.jetbrains.annotations.Nullable;

public class GeniusCatFabric implements IGeniusCat {
private final CatEntity cat;
Expand Down Expand Up @@ -58,26 +58,4 @@ public int getLives() {
public void setLives(int lives) {
((ICatEntityMixin) cat).catsplus$setLives(lives);
}

@Override
public boolean isSongPlaying() {
return ((ICatEntityMixin) cat).catsplus$isSongPlaying();
}

@Override
public BlockPos getSongSource() {
return ((ICatEntityMixin) cat).catsplus$getSongSource();
}

@Override
public void songStartPlay(BlockPos source) {
((ICatEntityMixin) cat).catsplus$setSongPlaying(true);
((ICatEntityMixin) cat).catsplus$setSongSource(source);
}

@Override
public void songStopPlay() {
((ICatEntityMixin) cat).catsplus$setSongPlaying(false);
((ICatEntityMixin) cat).catsplus$setSongSource(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,4 @@ public interface ICatEntityMixin {

int catsplus$getLives();
void catsplus$setLives(int lives);

boolean catsplus$isSongPlaying();
void catsplus$setSongPlaying(boolean playing);
BlockPos catsplus$getSongSource();
void catsplus$setSongSource(BlockPos source);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

import cuteneko.catsplus.fabric.mixins.impl.ICatEntityMixin;
import cuteneko.catsplus.utility.Constants;
import cuteneko.catsplus.utility.NBTHelper;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.nbt.NbtList;
import net.minecraft.util.math.BlockPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -26,11 +24,6 @@ public abstract class CatEntityMixin implements ICatEntityMixin {
@Unique
private boolean catsplus$hasTotem = false;

@Unique
private boolean catsplus$songPlaying = false;
@Unique
private BlockPos catsplus$songSource = null;

@Unique
private final Map<UUID, Integer> catsplus$favorability = new HashMap<>();

Expand Down Expand Up @@ -68,38 +61,13 @@ public abstract class CatEntityMixin implements ICatEntityMixin {
catsplus$lives = lives;
}

@Override
public boolean catsplus$isSongPlaying() {
return catsplus$songPlaying;
}

@Override
public void catsplus$setSongPlaying(boolean playing) {
catsplus$songPlaying = playing;
}

@Override
public BlockPos catsplus$getSongSource() {
return catsplus$songSource;
}

@Override
public void catsplus$setSongSource(BlockPos source) {
catsplus$songSource = source;
}

@Inject(method = "writeCustomDataToNbt", at = @At("HEAD"))
private void write(NbtCompound nbt, CallbackInfo ci) {
var tag = new NbtCompound();

tag.putInt(Constants.TAG_GENIUS_CAT_LIVES, catsplus$lives);
tag.putBoolean(Constants.TAG_GENIUS_CAT_TOTEM, catsplus$hasTotem);

var dancing = new NbtCompound();
dancing.putBoolean(Constants.TAG_GENIUS_CAT_DANCING_SOUND_PLAYING, catsplus$songPlaying);
dancing.put(Constants.TAG_GENIUS_CAT_DANCING_SOURCE, NBTHelper.putBlockPos(new NbtCompound(), catsplus$songSource));
tag.put(Constants.TAG_GENIUS_CAT_DANCING, dancing);

var favorability = new NbtList();
for (var entry : catsplus$favorability.entrySet()) {
var f = new NbtCompound();
Expand All @@ -119,10 +87,6 @@ private void read(NbtCompound nbt, CallbackInfo ci) {
catsplus$lives = tag.getInt(Constants.TAG_GENIUS_CAT_LIVES);
catsplus$hasTotem = tag.getBoolean(Constants.TAG_GENIUS_CAT_TOTEM);

var dancing = tag.getCompound(Constants.TAG_GENIUS_CAT_DANCING);
catsplus$songPlaying = dancing.getBoolean(Constants.TAG_GENIUS_CAT_DANCING_SOUND_PLAYING);
catsplus$songSource = NBTHelper.getBlockPos(dancing.getCompound(Constants.TAG_GENIUS_CAT_DANCING_SOURCE));

var favorability = tag.getList(Constants.TAG_GENIUS_CAT_FAVORABILITY, NbtElement.LIST_TYPE);
for (var entry : favorability) {
if (entry instanceof NbtCompound e
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import cuteneko.catsplus.data.IGeniusCat;
import cuteneko.catsplus.utility.Constants;
import cuteneko.catsplus.utility.NBTHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.nbt.NbtList;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.util.INBTSerializable;

import java.util.HashMap;
Expand All @@ -19,9 +17,6 @@ public class GeniusCatCapability implements IGeniusCat, INBTSerializable<NbtComp
private int lives = 0;
private boolean totem = false;

private boolean songPlaying = false;
private BlockPos songSource = null;

private final Map<UUID, Integer> favorability = new HashMap<>();

@Override
Expand Down Expand Up @@ -58,40 +53,13 @@ public void setLives(int lives) {
this.lives = lives;
}

@Override
public boolean isSongPlaying() {
return songPlaying;
}

@Override
public BlockPos getSongSource() {
return songSource;
}

@Override
public void songStartPlay(BlockPos source) {
songPlaying = true;
this.songSource = source;
}

@Override
public void songStopPlay() {
songPlaying = false;
songSource = null;
}

@Override
public NbtCompound serializeNBT() {
var tag = new NbtCompound();

tag.putInt(Constants.TAG_GENIUS_CAT_LIVES, lives);
tag.putBoolean(Constants.TAG_GENIUS_CAT_TOTEM, totem);

var dancing = new NbtCompound();
dancing.putBoolean(Constants.TAG_GENIUS_CAT_DANCING_SOUND_PLAYING, songPlaying);
dancing.put(Constants.TAG_GENIUS_CAT_DANCING_SOURCE, NBTHelper.putBlockPos(new NbtCompound(), songSource));
tag.put(Constants.TAG_GENIUS_CAT_DANCING, dancing);

var favorability = new NbtList();
for (var entry : this.favorability.entrySet()) {
var f = new NbtCompound();
Expand All @@ -109,10 +77,6 @@ public void deserializeNBT(NbtCompound tag) {
lives = tag.getInt(Constants.TAG_GENIUS_CAT_LIVES);
totem = tag.getBoolean(Constants.TAG_GENIUS_CAT_TOTEM);

var dancing = tag.getCompound(Constants.TAG_GENIUS_CAT_DANCING);
songPlaying = dancing.getBoolean(Constants.TAG_GENIUS_CAT_DANCING_SOUND_PLAYING);
songSource = NBTHelper.getBlockPos(dancing.getCompound(Constants.TAG_GENIUS_CAT_DANCING_SOURCE));

var favorability = tag.getList(Constants.TAG_GENIUS_CAT_FAVORABILITY, NbtElement.LIST_TYPE);
for (var entry : favorability) {
if (entry instanceof NbtCompound e
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@
import net.minecraftforge.common.capabilities.CapabilityToken;
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@Mod.EventBusSubscriber(modid = CatsPlus.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE)
public class ModCapabilities {
public static Capability<IGeniusCat> GENIUS_CAT = CapabilityManager.get(new CapabilityToken<>() {});
public static Capability<ICatPlayer> CAT_PLAYER = CapabilityManager.get(new CapabilityToken<>() {});
public static Capability<GeniusCatCapability> GENIUS_CAT = CapabilityManager.get(new CapabilityToken<>() {});
public static Capability<CatPlayerCapability> CAT_PLAYER = CapabilityManager.get(new CapabilityToken<>() {});

@SubscribeEvent
public void registerCaps(RegisterCapabilitiesEvent event) {
Expand All @@ -42,4 +43,17 @@ public void onAttachEntityCaps(AttachCapabilitiesEvent<Entity> event) {
event.addListener(provider::invalidate);
}
}

@SubscribeEvent
public void onPlayerClone(PlayerEvent.Clone event) {
if (!event.isWasDeath()) {
var original = event.getOriginal();
var player = event.getEntity();
player.getCapability(CAT_PLAYER)
.orElse(new CatPlayerCapability(player))
.deserializeNBT(original.getCapability(CAT_PLAYER)
.orElse(new CatPlayerCapability(original))
.serializeNBT());
}
}
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ yarn_mappings=1.20.4+build.3

# Forge
forge_loader_version=49
forge_version=49.0.30
forge_version=49.0.31

# Fabric
fabric_loader_version=0.15.7
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/cuteneko/catsplus/data/IGeniusCat.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.BlockPos;
import org.jetbrains.annotations.Nullable;

public interface IGeniusCat {
boolean hasTotem();
Expand All @@ -23,9 +24,4 @@ default void subFavorability(int value, PlayerEntity player) {

int getLives(); // Todo: qyl27: Give it a purpose?
void setLives(int lives);

boolean isSongPlaying();
BlockPos getSongSource();
void songStartPlay(BlockPos source);
void songStopPlay();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package cuteneko.catsplus.mixins.bridge.dancing;

import net.minecraft.util.math.BlockPos;
import org.jetbrains.annotations.Nullable;

public interface IMusicianCat {
void catsplus$setSoundSource(@Nullable BlockPos pos);

@Nullable
BlockPos catsplus$getSoundSource();
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package cuteneko.catsplus.mixins.mixin.dancing;

import cuteneko.catsplus.CatsPlusData;
import cuteneko.catsplus.mixins.bridge.dancing.IMusicianCat;
import net.minecraft.block.Blocks;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.CatEntity;
Expand All @@ -14,12 +14,12 @@ public abstract class AnimalEntityMixin {
@Inject(method = "tickMovement", at = @At("TAIL"))
private void afterTickMovement(CallbackInfo ci) {
if ((Object) this instanceof CatEntity cat) {
var geniusCat = CatsPlusData.getGeniusCat(cat);
var source = ((IMusicianCat) cat).catsplus$getSoundSource();

if (geniusCat.getSongSource() == null
|| !geniusCat.getSongSource().isWithinDistance(cat.getPos(), 3.46)
|| !cat.getWorld().getBlockState(geniusCat.getSongSource()).isOf(Blocks.JUKEBOX)) {
geniusCat.songStopPlay();
if (source == null
|| !source.isWithinDistance(cat.getPos(), 5)
|| !cat.getWorld().getBlockState(source).isOf(Blocks.JUKEBOX)) {
((IMusicianCat) cat).catsplus$setSoundSource(null);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package cuteneko.catsplus.mixins.mixin.dancing;

import cuteneko.catsplus.CatsPlusData;
import cuteneko.catsplus.mixins.bridge.dancing.IMusicianCat;
import net.minecraft.entity.EntityData;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.data.DataTracker;
import net.minecraft.entity.data.TrackedData;
import net.minecraft.entity.data.TrackedDataHandlerRegistry;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.passive.TameableEntity;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.LocalDifficulty;
import net.minecraft.world.ServerWorldAccess;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
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(CatEntity.class)
public abstract class CatEntityMixin extends TameableEntity implements IMusicianCat {
@Unique
private static final TrackedData<Boolean> CATSPLUS$SOUND_PLAYING = DataTracker.registerData(CatEntity.class, TrackedDataHandlerRegistry.BOOLEAN);
@Unique
private static final TrackedData<BlockPos> CATSPLUS$SOUND_SOURCE = DataTracker.registerData(CatEntity.class, TrackedDataHandlerRegistry.BLOCK_POS);

protected CatEntityMixin(EntityType<? extends TameableEntity> entityType, World world) {
super(entityType, world);
}

@Inject(method = "initDataTracker", at = @At("TAIL"))
private void afterInitDataTracker(CallbackInfo ci) {
dataTracker.startTracking(CATSPLUS$SOUND_PLAYING, false);
dataTracker.startTracking(CATSPLUS$SOUND_SOURCE, BlockPos.ORIGIN);
}

@Override
public @Nullable BlockPos catsplus$getSoundSource() {
if (dataTracker.get(CATSPLUS$SOUND_PLAYING)) {
return dataTracker.get(CATSPLUS$SOUND_SOURCE);
} else {
return null;
}
}

@Override
public void catsplus$setSoundSource(@Nullable BlockPos pos) {
dataTracker.set(CATSPLUS$SOUND_PLAYING, pos != null);

if (pos != null) {
dataTracker.set(CATSPLUS$SOUND_SOURCE, pos);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cuteneko.catsplus.mixins.mixin.dancing;

import cuteneko.catsplus.CatsPlusData;
import cuteneko.catsplus.mixins.bridge.dancing.IMusicianCat;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.entity.model.CatEntityModel;
import net.minecraft.client.render.entity.model.OcelotEntityModel;
Expand All @@ -20,11 +21,12 @@ public CatEntityModelMixin(ModelPart root) {

@Inject(method = "setAngles(Lnet/minecraft/entity/passive/CatEntity;FFFFF)V", at = @At("TAIL"))
public void setAngles(T cat, float f, float g, float h, float i, float j, CallbackInfo ci) {
var geniusCat = CatsPlusData.getGeniusCat(cat);
// Random shake head to left or right.
var bias = cat.getUuid().getLeastSignificantBits() % 2 == 0 ? -1 : 1;

if (geniusCat.isSongPlaying()) {
this.head.pitch = MathHelper.sin(cat.age) * 0.3f;
this.head.yaw = MathHelper.cos(cat.age) * -0.3f;
if (((IMusicianCat) cat).catsplus$getSoundSource() != null) {
this.head.pitch = MathHelper.sin(cat.age * bias) * 0.3f;
this.head.yaw = MathHelper.cos(cat.age * bias) * -0.3f;
}
}
}
Loading

0 comments on commit f5936cb

Please sign in to comment.