remove pca
This commit is contained in:
24 files changed
+389
-1070
No files matched your search
@@ -1,55 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.item;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.ShulkerBoxBlock;
|
||||
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
|
||||
import net.minecraft.item.DyeItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemUsageContext;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.DyeColor;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@Mixin(DyeItem.class)
|
||||
public abstract class MixinDyeItem extends Item {
|
||||
public MixinDyeItem(Settings settings) {
|
||||
super(settings);
|
||||
}
|
||||
|
||||
@Shadow
|
||||
public abstract DyeColor getColor();
|
||||
|
||||
@Override
|
||||
public ActionResult useOnBlock(ItemUsageContext context) {
|
||||
if (!SLSCarpetSettings.useDyeOnShulkerBox) {
|
||||
return ActionResult.PASS;
|
||||
}
|
||||
World world = context.getWorld();
|
||||
BlockPos pos = context.getBlockPos();
|
||||
BlockState blockState = world.getBlockState(pos);
|
||||
|
||||
if (blockState.isOf(Blocks.SHULKER_BOX)) {
|
||||
if (!world.isClient()) {
|
||||
ShulkerBoxBlockEntity blockEntity = (ShulkerBoxBlockEntity) world.getBlockEntity(pos);
|
||||
BlockState newBlockState = ShulkerBoxBlock.get(getColor()).getDefaultState().with(ShulkerBoxBlock.FACING, blockState.get(ShulkerBoxBlock.FACING));
|
||||
|
||||
if (world.setBlockState(pos, newBlockState)) {
|
||||
ShulkerBoxBlockEntity newBlockEntity = (ShulkerBoxBlockEntity) world.getBlockEntity(pos);
|
||||
assert blockEntity != null;
|
||||
assert newBlockEntity != null;
|
||||
newBlockEntity.readInventoryNbt(blockEntity.createNbt());
|
||||
newBlockEntity.setCustomName(blockEntity.getCustomName());
|
||||
newBlockEntity.markDirty();
|
||||
context.getStack().decrement(1);
|
||||
}
|
||||
}
|
||||
return ActionResult.success(world.isClient);
|
||||
}
|
||||
return ActionResult.PASS;
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.item;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.ShulkerBoxBlock;
|
||||
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.*;
|
||||
import net.minecraft.potion.PotionUtil;
|
||||
import net.minecraft.potion.Potions;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
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.CallbackInfoReturnable;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Mixin(PotionItem.class)
|
||||
public abstract class MixinPotionItem extends Item {
|
||||
public MixinPotionItem(Settings settings) {
|
||||
super(settings);
|
||||
}
|
||||
|
||||
@Inject(method = "useOnBlock", at = @At(value = "HEAD"), cancellable = true)
|
||||
public void useOnBlock(ItemUsageContext context, CallbackInfoReturnable<ActionResult> cir) {
|
||||
ItemStack itemStack = context.getStack();
|
||||
PlayerEntity player = context.getPlayer();
|
||||
|
||||
if (!SLSCarpetSettings.useDyeOnShulkerBox ||
|
||||
player == null ||
|
||||
itemStack.getItem() != Items.POTION ||
|
||||
PotionUtil.getPotion(itemStack) != Potions.WATER) {
|
||||
return;
|
||||
}
|
||||
|
||||
World world = context.getWorld();
|
||||
BlockPos pos = context.getBlockPos();
|
||||
BlockState blockState = world.getBlockState(pos);
|
||||
Block block = blockState.getBlock();
|
||||
|
||||
if (block instanceof ShulkerBoxBlock && ((ShulkerBoxBlock) block).getColor() != null) {
|
||||
if (!world.isClient()) {
|
||||
ShulkerBoxBlockEntity blockEntity = (ShulkerBoxBlockEntity) world.getBlockEntity(pos);
|
||||
BlockState newBlockState = Blocks.SHULKER_BOX.getDefaultState().
|
||||
with(ShulkerBoxBlock.FACING, blockState.get(ShulkerBoxBlock.FACING));
|
||||
|
||||
if (world.setBlockState(pos, newBlockState)) {
|
||||
ShulkerBoxBlockEntity newBlockEntity = (ShulkerBoxBlockEntity) world.getBlockEntity(pos);
|
||||
assert blockEntity != null;
|
||||
assert newBlockEntity != null;
|
||||
newBlockEntity.readInventoryNbt(blockEntity.createNbt());
|
||||
newBlockEntity.setCustomName(blockEntity.getCustomName());
|
||||
newBlockEntity.markDirty();
|
||||
if (!player.isCreative()) {
|
||||
context.getStack().decrement(1);
|
||||
Objects.requireNonNull(context.getPlayer()).getInventory().insertStack(new ItemStack(Items.GLASS_BOTTLE));
|
||||
}
|
||||
}
|
||||
}
|
||||
cir.setReturnValue(ActionResult.success(world.isClient));
|
||||
}
|
||||
}
|
||||
}
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.player;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
|
||||
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
|
||||
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
|
||||
import net.minecraft.entity.player.PlayerAbilities;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.inventory.Inventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Nameable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
@Restriction(
|
||||
conflict = @Condition("pca")
|
||||
)
|
||||
@Mixin(PlayerInventory.class)
|
||||
public abstract class MixinPlayerInventory implements Inventory, Nameable {
|
||||
@Redirect(method = "insertStack(ILnet/minecraft/item/ItemStack;)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getAbilities()Lnet/minecraft/entity/player/PlayerAbilities;"))
|
||||
private PlayerAbilities insertStack(PlayerEntity instance) {
|
||||
if (SLSCarpetSettings.creativeNoInfinitePickup) {
|
||||
AccessorPlayerAbilities accessor = (AccessorPlayerAbilities) instance.getAbilities();
|
||||
PlayerAbilities abilities = new PlayerAbilities();
|
||||
AccessorPlayerAbilities accessor1 = (AccessorPlayerAbilities) abilities;
|
||||
accessor1.setCreativeMode(false);
|
||||
accessor1.setFlying(accessor.isFlying());
|
||||
accessor1.setFlyingSpeed(accessor.getFlyingSpeed());
|
||||
accessor1.setInvulnerable(accessor.isInvulnerable());
|
||||
accessor1.setAllowFlying(accessor.isAllowFlying());
|
||||
accessor1.setAllowModifyWorld(accessor.isAllowModifyWorld());
|
||||
accessor1.setWalkingSpeed(accessor.getWalkingSpeed());
|
||||
return abilities;
|
||||
}
|
||||
return instance.getAbilities();
|
||||
}
|
||||
|
||||
// 修改潜影盒拾取逻辑,使从地上捡起潜影盒时仍可堆叠
|
||||
@Redirect(method = "canStackAddMore", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isStackable()Z", ordinal = 0))
|
||||
private boolean canStackAddMoreIsStackable(ItemStack itemStack) {
|
||||
return ShulkerBoxItemUtil.isStackable(itemStack);
|
||||
}
|
||||
|
||||
@Redirect(method = "canStackAddMore", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I", ordinal = 0))
|
||||
private int canStackAddMoreGetMaxCount(ItemStack itemStack) {
|
||||
return ShulkerBoxItemUtil.getMaxCount(itemStack);
|
||||
}
|
||||
|
||||
@Redirect(method = "addStack(ILnet/minecraft/item/ItemStack;)I", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I", ordinal = -1))
|
||||
private int addStackGetMaxCount(ItemStack itemStack) {
|
||||
return ShulkerBoxItemUtil.getMaxCount(itemStack);
|
||||
}
|
||||
|
||||
// 避免死循环
|
||||
@Redirect(method = "offer", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I", ordinal = 0))
|
||||
private int offerGetMaxCount(ItemStack itemStack) {
|
||||
return ShulkerBoxItemUtil.getMaxCount(itemStack);
|
||||
}
|
||||
}
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.AbstractFurnaceBlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.LockableContainerBlockEntity;
|
||||
import net.minecraft.inventory.SidedInventory;
|
||||
import net.minecraft.recipe.RecipeInputProvider;
|
||||
import net.minecraft.recipe.RecipeUnlocker;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@Mixin(AbstractFurnaceBlockEntity.class)
|
||||
public abstract class MixinAbstractFurnaceBlockEntity extends LockableContainerBlockEntity implements SidedInventory, RecipeUnlocker, RecipeInputProvider {
|
||||
|
||||
|
||||
protected MixinAbstractFurnaceBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update AbstractFurnaceBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BarrelBlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@Mixin(BarrelBlockEntity.class)
|
||||
public abstract class MixinBarrelBlockEntity extends LootableContainerBlockEntity {
|
||||
|
||||
protected MixinBarrelBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update BarrelBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-62
@@ -1,62 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BeehiveBlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.nbt.NbtCompound;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
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;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Mixin(BeehiveBlockEntity.class)
|
||||
public abstract class MixinBeehiveBlockEntity extends BlockEntity {
|
||||
|
||||
|
||||
public MixinBeehiveBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
||||
@Inject(method = "tickBees", at = @At(value = "INVOKE", target = "Ljava/util/Iterator;remove()V", shift = At.Shift.AFTER))
|
||||
private static void postTickBees(World world, BlockPos pos, BlockState state, List<Object> bees, BlockPos flowerPos, CallbackInfo ci) {
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
if (blockEntity != null) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(blockEntity)) {
|
||||
ServerMain.LOGGER.debug("update BeehiveBlockEntity: {}", pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "tryReleaseBee", at = @At(value = "RETURN"))
|
||||
public void postTryReleaseBee(BlockState state, BeehiveBlockEntity.BeeState beeState, CallbackInfoReturnable<List<Entity>> cir) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this) && cir.getReturnValue() != null) {
|
||||
ServerMain.LOGGER.debug("update BeehiveBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "readNbt", at = @At(value = "RETURN"))
|
||||
public void postFromTag(NbtCompound nbt, CallbackInfo ci) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update BeehiveBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "tryEnterHive(Lnet/minecraft/entity/Entity;ZI)V", at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/entity/Entity;discard()V", ordinal = 0))
|
||||
public void postEnterHive(Entity entity, boolean hasNectar, int ticksInHive, CallbackInfo ci) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update BeehiveBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.BrewingStandBlockEntity;
|
||||
import net.minecraft.block.entity.LockableContainerBlockEntity;
|
||||
import net.minecraft.inventory.SidedInventory;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@Mixin(BrewingStandBlockEntity.class)
|
||||
public abstract class MixinBrewingStandBlockEntity extends LockableContainerBlockEntity implements SidedInventory {
|
||||
|
||||
protected MixinBrewingStandBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update BrewingStandBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.ChestBlockEntity;
|
||||
import net.minecraft.block.entity.LidOpenable;
|
||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
// 由于陷阱箱继承自箱子,因此不用 mixin 陷阱箱
|
||||
// implements ChestAnimationProgress 会出错 不知道为啥
|
||||
@Mixin(ChestBlockEntity.class)
|
||||
public abstract class MixinChestBlockEntity extends LootableContainerBlockEntity implements LidOpenable {
|
||||
|
||||
protected MixinChestBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update ChestBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.ComparatorBlockEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@Mixin(ComparatorBlockEntity.class)
|
||||
public abstract class MixinComparatorBlockEntity extends BlockEntity {
|
||||
public MixinComparatorBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update ComparatorBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-27
@@ -1,27 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.DispenserBlockEntity;
|
||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@Mixin(DispenserBlockEntity.class)
|
||||
public abstract class MixinDispenserBlockEntity extends LootableContainerBlockEntity {
|
||||
|
||||
protected MixinDispenserBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update DispenserBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.Hopper;
|
||||
import net.minecraft.block.entity.HopperBlockEntity;
|
||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
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.CallbackInfoReturnable;
|
||||
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
||||
@Mixin(HopperBlockEntity.class)
|
||||
public abstract class MixinHopperBlockEntity extends LootableContainerBlockEntity implements Hopper {
|
||||
|
||||
protected MixinHopperBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Inject(method = "insertAndExtract", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/HopperBlockEntity;markDirty(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;)V"))
|
||||
private static void onInsertAndExtract(World world, BlockPos pos, BlockState state, HopperBlockEntity blockEntity, BooleanSupplier booleanSupplier, CallbackInfoReturnable<Boolean> cir) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(blockEntity)) {
|
||||
ServerMain.LOGGER.debug("update HopperBlockEntity: {}", pos);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update HopperBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.block;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntityType;
|
||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
|
||||
import net.minecraft.inventory.SidedInventory;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@Mixin(ShulkerBoxBlockEntity.class)
|
||||
public abstract class MixinShulkerBoxBlockEntity extends LootableContainerBlockEntity implements SidedInventory {
|
||||
|
||||
protected MixinShulkerBoxBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
|
||||
super(blockEntityType, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
super.markDirty();
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncBlockEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update ShulkerBoxBlockEntity: {}", this.pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.entity;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.JumpingMount;
|
||||
import net.minecraft.entity.Saddleable;
|
||||
import net.minecraft.entity.passive.AbstractHorseEntity;
|
||||
import net.minecraft.entity.passive.AnimalEntity;
|
||||
import net.minecraft.inventory.Inventory;
|
||||
import net.minecraft.inventory.InventoryChangedListener;
|
||||
import net.minecraft.world.World;
|
||||
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;
|
||||
|
||||
@Mixin(AbstractHorseEntity.class)
|
||||
public abstract class MixinHorseBaseEntity extends AnimalEntity implements InventoryChangedListener, JumpingMount, Saddleable {
|
||||
protected MixinHorseBaseEntity(EntityType<? extends AnimalEntity> entityType, World world) {
|
||||
super(entityType, world);
|
||||
}
|
||||
|
||||
@Inject(method = "onInventoryChanged", at = @At(value = "HEAD"))
|
||||
private void updateEntity(Inventory sender, CallbackInfo ci) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update HorseBaseEntity inventory: onInventoryChanged.");
|
||||
}
|
||||
}
|
||||
}
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.entity;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.Npc;
|
||||
import net.minecraft.entity.passive.MerchantEntity;
|
||||
import net.minecraft.entity.passive.PassiveEntity;
|
||||
import net.minecraft.inventory.Inventory;
|
||||
import net.minecraft.inventory.InventoryChangedListener;
|
||||
import net.minecraft.inventory.SimpleInventory;
|
||||
import net.minecraft.village.Merchant;
|
||||
import net.minecraft.world.World;
|
||||
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.CallbackInfo;
|
||||
|
||||
|
||||
@Mixin(MerchantEntity.class)
|
||||
public abstract class MixinMerchantEntity extends PassiveEntity implements Npc, Merchant, InventoryChangedListener {
|
||||
@Final
|
||||
@Shadow
|
||||
private SimpleInventory inventory;
|
||||
|
||||
protected MixinMerchantEntity(EntityType<? extends PassiveEntity> entityType, World world) {
|
||||
super(entityType, world);
|
||||
}
|
||||
|
||||
|
||||
@Inject(method = "<init>(Lnet/minecraft/entity/EntityType;Lnet/minecraft/world/World;)V", at = @At(value = "RETURN"))
|
||||
private void addInventoryListener(EntityType<? extends MerchantEntity> entityType, World world, CallbackInfo info) {
|
||||
if (this.getWorld().isClient()) {
|
||||
return;
|
||||
}
|
||||
this.inventory.addListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInventoryChanged(Inventory inventory) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update villager inventory: onInventoryChanged.");
|
||||
}
|
||||
}
|
||||
}
|
||||
-29
@@ -1,29 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.protocol.pcaSyncProtocol.entity;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import com.github.zly2006.carpetslsaddition.network.pca.PcaSyncProtocol;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.vehicle.AbstractMinecartEntity;
|
||||
import net.minecraft.entity.vehicle.StorageMinecartEntity;
|
||||
import net.minecraft.inventory.Inventory;
|
||||
import net.minecraft.screen.NamedScreenHandlerFactory;
|
||||
import net.minecraft.world.World;
|
||||
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;
|
||||
|
||||
@Mixin(StorageMinecartEntity.class)
|
||||
public abstract class MixinStorageMinecartEntity extends AbstractMinecartEntity implements Inventory, NamedScreenHandlerFactory {
|
||||
protected MixinStorageMinecartEntity(EntityType<?> entityType, World world) {
|
||||
super(entityType, world);
|
||||
}
|
||||
|
||||
@Inject(method = "markDirty", at = @At(value = "RETURN"))
|
||||
private void updateInventory(CallbackInfo ci) {
|
||||
if (SLSCarpetSettings.pcaSyncProtocol && PcaSyncProtocol.syncEntityToClient(this)) {
|
||||
ServerMain.LOGGER.debug("update StorageMinecartEntity inventory.");
|
||||
}
|
||||
}
|
||||
}
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.screen;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
|
||||
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
|
||||
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.screen.ScreenHandler;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
@Restriction(
|
||||
conflict = @Condition("pca")
|
||||
)
|
||||
@Mixin(ScreenHandler.class)
|
||||
public class MixinScreenHandler {
|
||||
@Redirect(method = "insertItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isStackable()Z", ordinal = 0))
|
||||
private boolean insertItemIsStackable(ItemStack itemStack) {
|
||||
return ShulkerBoxItemUtil.isStackable(itemStack);
|
||||
}
|
||||
|
||||
@Redirect(method = "insertItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I"))
|
||||
private int insertItemGetMaxCount0(ItemStack itemStack) {
|
||||
return ShulkerBoxItemUtil.getMaxCount(itemStack);
|
||||
}
|
||||
|
||||
@Redirect(method = "internalOnSlotClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I", ordinal = -1))
|
||||
private int removeStackGetMaxCount(ItemStack itemStack) {
|
||||
return ShulkerBoxItemUtil.getMaxCount(itemStack);
|
||||
}
|
||||
}
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.server;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.server.PlayerManager;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.util.Identifier;
|
||||
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;
|
||||
|
||||
import java.util.zip.CRC32;
|
||||
|
||||
@Mixin(PlayerManager.class)
|
||||
public class MixinPlayerManager {
|
||||
@Inject(method = "sendWorldInfo", at = @At(value = "RETURN"))
|
||||
public void preOnSendWorldInfo(ServerPlayerEntity player, ServerWorld world, CallbackInfo ci) {
|
||||
if (SLSCarpetSettings.xaeroWorldName.equals("#none")) {
|
||||
return;
|
||||
}
|
||||
Identifier xaeroworldmap = new Identifier("xaeroworldmap", "main");
|
||||
Identifier xaerominimap = new Identifier("xaerominimap", "main");
|
||||
|
||||
CRC32 crc = new CRC32();
|
||||
crc.update(SLSCarpetSettings.xaeroWorldName.getBytes());
|
||||
ByteBuf buf = Unpooled.buffer();
|
||||
buf.writeByte(0);
|
||||
buf.writeInt((int) crc.getValue());
|
||||
|
||||
ServerPlayNetworking.send(player, xaeroworldmap, new PacketByteBuf(buf.duplicate()));
|
||||
ServerPlayNetworking.send(player, xaerominimap, new PacketByteBuf(buf.duplicate()));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user