Initial commit

This commit is contained in:
tibs 2022-01-04 12:23:14 -05:00
commit 5bd7750177
Signed by untrusted user who does not match committer: tibs
GPG key ID: 047833989F50F88F
24 changed files with 1627 additions and 0 deletions

View file

@ -0,0 +1,22 @@
package me.tibinonest.mods.cauldron_dyeing.mixin;
import me.tibinonest.mods.cauldron_dyeing.block.WaterCauldronBlockEntity;
import net.minecraft.client.color.world.BiomeColors;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockRenderView;
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;
@Mixin(BiomeColors.class)
public class BiomeColorsMixin {
@Inject(method = "getWaterColor", at = @At("RETURN"), cancellable = true)
private static void modifyWaterColor(BlockRenderView world, BlockPos pos, CallbackInfoReturnable<Integer> cir) {
var blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof WaterCauldronBlockEntity waterCauldron && waterCauldron.getColor() != -1) {
cir.setReturnValue(waterCauldron.getColor());
}
}
}

View file

@ -0,0 +1,19 @@
package me.tibinonest.mods.cauldron_dyeing.mixin;
import me.tibinonest.mods.cauldron_dyeing.block.WaterCauldronBlock;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.block.cauldron.CauldronBehavior;
import net.minecraft.util.registry.Registry;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(Blocks.class)
public class BlocksMixin {
@Redirect(method = "<clinit>", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Blocks;register(Ljava/lang/String;Lnet/minecraft/block/Block;)Lnet/minecraft/block/Block;", ordinal = 271))
private static Block redirectWaterCauldron(String id, Block block) {
return Registry.register(Registry.BLOCK, id, new WaterCauldronBlock(AbstractBlock.Settings.copy(Blocks.CAULDRON), WaterCauldronBlock.RAIN_PREDICATE, CauldronBehavior.WATER_CAULDRON_BEHAVIOR));
}
}

View file

@ -0,0 +1,60 @@
package me.tibinonest.mods.cauldron_dyeing.mixin;
import me.tibinonest.mods.cauldron_dyeing.block.CauldronBehaviorExtended;
import me.tibinonest.mods.cauldron_dyeing.block.WaterCauldronBlockEntity;
import net.minecraft.block.BlockState;
import net.minecraft.block.LeveledCauldronBlock;
import net.minecraft.block.cauldron.CauldronBehavior;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.DyeItem;
import net.minecraft.item.DyeableItem;
import net.minecraft.item.ItemStack;
import net.minecraft.stat.Stats;
import net.minecraft.util.ActionResult;
import net.minecraft.util.DyeColor;
import net.minecraft.util.Hand;
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 org.spongepowered.tools.obfuscation.SuppressedBy;
import java.util.Map;
@Mixin(CauldronBehavior.class)
public interface CauldronBehaviorMixin {
@Inject(method = "method_32209", at = @At("HEAD"), cancellable = true)
private static void injectCleanDyeableItem(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, ItemStack stack, CallbackInfoReturnable<ActionResult> cir) {
var blockEntity = world.getBlockEntity(pos);
var item = stack.getItem();
if (item instanceof DyeableItem dyeableItem && blockEntity instanceof WaterCauldronBlockEntity waterCauldron && waterCauldron.getColor() != -1) {
dyeableItem.setColor(stack, waterCauldron.getColor());
if (!world.isClient) {
player.incrementStat(Stats.USE_CAULDRON);
LeveledCauldronBlock.decrementFluidLevel(state, world, pos);
}
cir.setReturnValue(ActionResult.success(world.isClient));
}
}
@Inject(method = "method_32217", at = @At(value = "TAIL"))
private static void injectFillWithWater(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, ItemStack stack, CallbackInfoReturnable<ActionResult> cir) {
var blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof WaterCauldronBlockEntity waterCauldron) {
waterCauldron.resetColor();
}
}
@Inject(method = "registerBehavior", at = @At("TAIL"))
private static void injectRegisterBehavior(CallbackInfo ci) {
var dyeMap = DyeItemAccessor.getDyeMap();
for (Map.Entry<DyeColor, DyeItem> dyeItem : dyeMap.entrySet()) {
CauldronBehavior.WATER_CAULDRON_BEHAVIOR.put(dyeItem.getValue(), CauldronBehaviorExtended.DYE_WATER);
}
}
}

View file

@ -0,0 +1,16 @@
package me.tibinonest.mods.cauldron_dyeing.mixin;
import net.minecraft.item.DyeItem;
import net.minecraft.util.DyeColor;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Map;
@Mixin(DyeItem.class)
public interface DyeItemAccessor {
@Accessor("DYES")
static Map<DyeColor, DyeItem> getDyeMap() {
throw new AssertionError();
}
}

View file

@ -0,0 +1,28 @@
package me.tibinonest.mods.cauldron_dyeing.mixin.sodium;
import me.jellysquid.mods.sodium.client.model.quad.ModelQuadColorProvider;
import me.jellysquid.mods.sodium.client.model.quad.ModelQuadView;
import me.jellysquid.mods.sodium.client.model.quad.blender.BiomeColorBlender;
import me.jellysquid.mods.sodium.client.model.quad.blender.FlatBiomeColorBlender;
import me.jellysquid.mods.sodium.client.render.pipeline.BlockRenderer;
import me.tibinonest.mods.cauldron_dyeing.block.WaterCauldronBlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockRenderView;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(BlockRenderer.class)
public class SodiumBlockRendererMixin {
@Redirect(method = "renderQuad", at=@At(value = "INVOKE", target="Lme/jellysquid/mods/sodium/client/model/quad/blender/BiomeColorBlender;getColors(Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/util/math/BlockPos;Lme/jellysquid/mods/sodium/client/model/quad/ModelQuadView;Lme/jellysquid/mods/sodium/client/model/quad/ModelQuadColorProvider;Ljava/lang/Object;)[I"))
private <T> int[] redirectGetColors(BiomeColorBlender instance, BlockRenderView world, BlockPos pos, ModelQuadView quad, ModelQuadColorProvider<T> handler, T fluidState) {
var blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof WaterCauldronBlockEntity) {
var flatBiomeColorBlender = new FlatBiomeColorBlender();
return flatBiomeColorBlender.getColors(world, pos, quad, handler, fluidState);
}
return instance.getColors(world, pos, quad, handler, fluidState);
}
}