Iam using two mods and they are crashing
java.lang.ClassCastException: nonamecrackers2.witherstormmod.client.capability.PlayerScreenBlinder cannot be cast to com.bottomtextdanny.dannys_expansion.core.capabilities.player.DannyEntityCap
So iam trying to fix both with mixin, but i legit cant find the reason since i never had a Capability crash on my mods , that is how they registry a capabilitie
@EventBusSubscriber(
modid = "dannys_expansion"
)
public class DannyEntityCap implements INBTSerializable<CompoundNBT>, ICapabilityProvider {
private final AccessoryInventory accessories = new AccessoryInventory(5);
public boolean accessoriesNeedSync;
private float recoil;
private float prevRecoil;
private float recoilSubstract;
private float recoilMultiplier;
private int holdableProgression;
private int prevHoldableProgression;
@Nullable
public ItemStack dannyActiveItemstack;
private int itemSlot;
@CapabilityInject(DannyEntityCap.class)
public static Capability<DannyEntityCap> GUN_STABILITY = null;
public DannyEntityCap() {
}
public float getPrevRecoil() {
return this.prevRecoil;
}
public void setPrevRecoil(float f) {
this.prevRecoil = f;
}
public float getRecoilMult() {
return this.recoilMultiplier;
}
public void setRecoilMult(float f) {
this.recoilMultiplier = f;
}
public float getRecoilSub() {
return this.recoilSubstract;
}
public void setRecoilSub(float f) {
this.recoilSubstract = f;
}
public float getRecoil() {
return this.recoil;
}
public void setRecoil(float f) {
this.recoil = f;
}
public int getHoldableProgression() {
return this.holdableProgression;
}
public void setHoldableProgression(int i) {
this.holdableProgression = i;
}
public int getItemSlot() {
return this.itemSlot;
}
public void setItemSlot(int i) {
this.itemSlot = i;
}
public int getPrevHoldableProgression() {
return this.prevHoldableProgression;
}
public void setPrevHoldableProgression(int i) {
this.prevHoldableProgression = i;
}
public AccessoryInventory getAccessories() {
return this.accessories;
}
public void setAccessory(int index, ItemStack itemStack) {
this.accessories.setItem(index, itemStack);
}
@Nonnull
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
return cap == GUN_STABILITY ? LazyOptional.of(() -> {
return this;
}).cast() : LazyOptional.empty();
}
public CompoundNBT serializeNBT() {
CompoundNBT nbt = new CompoundNBT();
nbt.putInt("player_item_progression", this.getHoldableProgression());
nbt.putInt("player_item", this.getItemSlot());
for(int i = 0; i < this.accessories.getContainerSize(); ++i) {
CompoundNBT itemNBT = this.accessories.getItem(i).serializeNBT();
CompoundNBT accessoryNBT = ((Accessory)this.accessories.getAccessoryInstances().get(i)).write();
nbt.put("accessory_item_" + i, itemNBT);
nbt.put("accessory_" + i, accessoryNBT);
}
return nbt;
}
public void deserializeNBT(CompoundNBT nbt) {
this.setRecoil((float)nbt.getInt("player_item_progression"));
this.setItemSlot(nbt.getInt("player_item"));
for(int i = 0; i < this.accessories.getContainerSize(); ++i) {
ItemStack stack = ItemStack.EMPTY;
INBT itemNBT = nbt.get("accessory_item_" + i);
if (itemNBT != null) {
stack = ItemStack.of((CompoundNBT)itemNBT);
}
this.accessories.setItem(i, stack);
((Accessory)this.accessories.getAccessoryInstances().get(i)).read(nbt.getCompound("accessory_" + i));
}
}
}
And other
@SubscribeEvent
public static void attachEntityCapabilities(AttachCapabilitiesEvent<Entity> event) {
Entity entity = (Entity)event.getObject();
if (entity instanceof ClientPlayerEntity) {
ClientPlayerEntity player = (ClientPlayerEntity)entity;
final LazyOptional<PlayerCameraShaker> cameraShaker = LazyOptional.of(() -> {
return new PlayerCameraShaker(player);
});
event.addCapability(new ResourceLocation("witherstormmod", "camera_shaker"), new ICapabilityProvider() {
public <T> LazyOptional<T> getCapability(Capability<T> capability, Direction side) {
return capability == WitherStormModClientCapabilities.CAMERA_SHAKER ? cameraShaker.cast() : LazyOptional.empty();
}
});
event.addListener(cameraShaker::invalidate);
final LazyOptional<PlayerScreenBlinder> screenBlinder = LazyOptional.of(PlayerScreenBlinder::new);
event.addCapability(new ResourceLocation("witherstormmod", "blinder"), new ICapabilityProvider() {
public <T> LazyOptional<T> getCapability(Capability<T> capability, Direction side) {
return capability == WitherStormModClientCapabilities.SCREEN_BLINDER ? screenBlinder.cast() : LazyOptional.empty();
}
});
event.addListener(screenBlinder::invalidate);
}
}
Erros happens on calls like that
DannyEntityCap capability = (DannyEntityCap)entityIn.getCapability(DannyEntityCap.GUN_STABILITY).orElse((Object)null);
Both codes are open sourced, just want to fix and run on my modpack.