Skip to content

Commit

Permalink
ugh its still not working x2
Browse files Browse the repository at this point in the history
  • Loading branch information
AnAwesomGuy committed Jun 20, 2024
1 parent a5328d2 commit 3cced2c
Show file tree
Hide file tree
Showing 12 changed files with 197 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,40 @@
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.ShapeContext;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.ChestBlockEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.ItemActionResult;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.shape.ArrayVoxelShape;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;

public class CottonCandyMachineBlock extends BlockWithEntity {
public static final int START_SPIN_TIME = 22;
public static final int TIME_TO_MAKE_ONE_LAYER = 28;
public static final int TOTAL_TIME = START_SPIN_TIME + 3 * TIME_TO_MAKE_ONE_LAYER;

protected static final VoxelShape SHAPE = VoxelShapes.union(
createCuboidShape(1, 0, 1, 15, 1, 15), // base
createCuboidShape(0.5, 0, 1, 1.5, 2.5, 15), // outer lower
createCuboidShape(13.5, 0, 1, 15.5, 2.5, 15),
createCuboidShape(1, 0, 0.5, 15, 2.5, 1.5),
createCuboidShape(1, 0, 13.5, 15, 2.5, 15.5),
createCuboidShape(0.1, 2.5, 1, 1.1, 5, 15), // outer upper
createCuboidShape(14.9, 2.5, 1, 15.9, 5, 15),
createCuboidShape(0.1, 2.5, 1, 1.1, 5, 15),
createCuboidShape(1, 2.5, 14.9, 15, 5, 15.9)
createCuboidShape(1, 1, 1, 15, 2, 15), // base
createCuboidShape(2, 0, 2, 4, 2, 4), // feet
createCuboidShape(2, 0, 12, 4, 2, 14),
createCuboidShape(12, 0, 2, 14, 2, 4),
createCuboidShape(12, 0, 12, 14, 2, 14),
createCuboidShape(0.8, 1, 1, 1.8, 3.5, 15), // outer lower
createCuboidShape(14.2, 1, 1, 15.2, 3.5, 15),
createCuboidShape(1, 1, 0.8, 15, 3.5, 1.8),
createCuboidShape(1, 1, 14.2, 15, 3.5, 15.2),
createCuboidShape(0.2 , 3.5, 1, 1.2, 6, 15), // outer upper
createCuboidShape(14.8, 3.5, 1, 15.8, 6, 15),
createCuboidShape(1, 3.5, 0.2, 15, 6, 1.2),
createCuboidShape(1, 3.5, 14.8, 15, 6, 15.8)
);

public CottonCandyMachineBlock(Settings settings) {
Expand All @@ -56,21 +64,31 @@ protected BlockRenderType getRenderType(BlockState state) {

@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (world.isClient)
if (world.isClient || !player.getMainHandStack().isEmpty())
return ActionResult.PASS;
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof CottonCandyMachineBlockEntity machine) {
for (int i = 0; i < 17; i++) {

}
}
if (world.getBlockEntity(pos) instanceof CottonCandyMachineBlockEntity machine)
for (int i = 0; i < 17; i++)
if (!machine.getStack(i).isEmpty())
player.getInventory().offerOrDrop(machine.removeStack(i));

return ActionResult.SUCCESS;
}

@Override
protected ItemActionResult onUseWithItem(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
return super.onUseWithItem(stack, state, world, pos, player, hand, hit);
protected void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
ItemScatterer.onStateReplaced(state, newState, world, pos);
super.onStateReplaced(state, world, pos, newState, moved);
}

@Override
protected boolean hasComparatorOutput(BlockState state) {
return true;
}

@Override
protected int getComparatorOutput(BlockState state, World world, BlockPos pos) {
return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
package net.anawesomguy.carnivalfoods.block.entity;

import net.anawesomguy.carnivalfoods.CarnivalFoods;
import net.fabricmc.fabric.api.transfer.v1.item.InventoryStorage;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.component.ComponentMap;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.DyedColorComponent;
import net.minecraft.inventory.Inventories;
import net.minecraft.item.DyeItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ColorHelper.Argb;
import net.minecraft.util.math.MathHelper;
import org.apache.commons.lang3.math.NumberUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand All @@ -27,7 +29,6 @@ public class CottonCandyMachineBlockEntity extends BlockEntity implements BasicI

protected final DefaultedList<ItemStack> items = DefaultedList.ofSize(17, ItemStack.EMPTY); // 0-15 is dyes, 16 is sugar

public final InventoryStorage inventoryWrapper = InventoryStorage.of(this, null);

public CottonCandyMachineBlockEntity(BlockPos pos, BlockState state) {
super(TYPE, pos, state);
Expand All @@ -49,6 +50,22 @@ public boolean isValid(int slot, ItemStack stack) {
return item instanceof DyeItem || (item == Items.SUGAR && slot == 16);
}

@Override
protected void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) {
super.readNbt(nbt, registryLookup);
Inventories.readNbt(nbt, items, registryLookup);
}

@Override
protected void writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) {
super.writeNbt(nbt, registryLookup);
Inventories.writeNbt(nbt, items, registryLookup);
}

@Override protected void addComponents(ComponentMap.Builder componentMapBuilder) {
super.addComponents(componentMapBuilder);
}

@Nullable
public ItemStack craft(ItemStack stack) {
int reds = 0, greens = 0, blues = 0, i = 0, count = 0;
Expand Down Expand Up @@ -79,14 +96,14 @@ public ItemStack craft(ItemStack stack) {
green = (int)((float)green * f / g);
blue = (int)((float)blue * f / g);
stack = stack.copyComponentsToNewStack(CarnivalFoods.COTTON_CANDY, 1);
stack.setDamage(3 - MathHelper.clamp(sugars, 1, 3));
stack.setDamage(3 - Math.clamp(sugars, 1, 3));
stack.set(DataComponentTypes.DYED_COLOR, new DyedColorComponent(Argb.getArgb(red, green, blue), false));
return stack;
}

private ItemStack setCottonCandy(ItemStack stack, int sugars) {
stack = stack.copyComponentsToNewStack(CarnivalFoods.COTTON_CANDY, 1);
stack.setDamage(3 - MathHelper.clamp(sugars, 1, 3));
stack.setDamage(3 - Math.clamp(sugars, 1, 3));
return stack;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
import net.minecraft.client.item.ModelPredicateProviderRegistry;
import net.minecraft.client.render.block.entity.BlockEntityRendererFactories;
import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.DyedColorComponent;
import net.minecraft.item.Item;
Expand All @@ -22,11 +21,10 @@
import java.util.WeakHashMap;

public final class CarnivalFoodsClient implements ClientModInitializer {
private static final Map<Item, ModelIdentifier> HELD_ITEMS_PRIVATE = new WeakHashMap<>();
public static final Map<Item, ModelIdentifier> HELD_ITEM_MODELS = Collections.unmodifiableMap(HELD_ITEMS_PRIVATE);
public static final Identifier COTTON_CANDY_HELD = CarnivalFoods.id("item/cotton_candy_held");
private static final Map<Item, Identifier> HELD_ITEMS_PRIVATE = new WeakHashMap<>();
public static final Map<Item, Identifier> HELD_ITEM_MODELS = Collections.unmodifiableMap(HELD_ITEMS_PRIVATE);

public static void addHeldItemModel(Item item, ModelIdentifier modelIdentifier) {
public static void addHeldItemModel(Item item, Identifier modelIdentifier) {
HELD_ITEMS_PRIVATE.put(Objects.requireNonNull(item), modelIdentifier);
}

Expand All @@ -41,10 +39,10 @@ public void onInitializeClient() {
return ColorHelper.Argb.withAlpha(99, color.rgb());
return -1;
}, CarnivalFoods.COTTON_CANDY);
ModelLoadingPlugin.register(pluginContext -> pluginContext.addModels(COTTON_CANDY_HELD));
ModelLoadingPlugin.register(pluginContext -> pluginContext.addModels(HELD_ITEMS_PRIVATE.values()));
}

static {
addHeldItemModel(CarnivalFoods.COTTON_CANDY, ModelIdentifier.ofInventoryVariant(COTTON_CANDY_HELD));
addHeldItemModel(CarnivalFoods.COTTON_CANDY, CarnivalFoods.id("item/cotton_candy_held"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.client.util.SpriteIdentifier;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.world.World;

import static net.minecraft.client.model.ModelPartBuilder.create;
import static net.minecraft.util.math.MathHelper.HALF_PI;
import static net.minecraft.util.math.MathHelper.PI;

Expand All @@ -43,38 +43,44 @@ public CottonCandyMachineRenderer(BlockEntityRendererFactory.Context ctx) {
public static TexturedModelData createBodyLayer() {
ModelData modelData = new ModelData();
ModelPartData data = modelData.getRoot();
Dilation dilation = new Dilation(-0.25F);
ModelPartBuilder outer = ModelPartBuilder.create().uv(0, 8).cuboid(-7, -6.2F, -6.89F, 14, 5F, 1F);
ModelPartBuilder inner1 = ModelPartBuilder.create().uv(14, 0).cuboid(-1.5F, -3.8F, 3F, 3F, 5F, 1F, new Dilation(-0.2F));
ModelPartBuilder inner2 = ModelPartBuilder.create().cuboid(-4, -4.1F, -1.5F, 1F, 5F, 3F, dilation);
ModelPartBuilder inner3 = ModelPartBuilder.create().cuboid(3, -4.1F, -1.5F, 1F, 5F, 3F, dilation);
Dilation dilation1 = new Dilation(-0.01F);
Dilation dilation2 = new Dilation(-0.25F);
ModelPartBuilder
outer = create().uv(0, 8).cuboid(-7F, 2F, -6.8F, 14F, 5F, 1F), // north, east, west
inner1 = create().uv(14, 0).cuboid(-1.5F, -0.2F, 3.3F, 3F, 5F, 1F, new Dilation(-0.2F)), // nesw
inner2 = create().cuboid(-4.2F, 0.1F, -1.35F, 1F, 5F, 3F, dilation2).mirrored(), // northeast, southeast
inner3 = create().cuboid(3.2F, 0.1F, -1.65F, 1F, 5F, 3F, dilation2); // northwest, southwest

ModelPartData base = data.addChild("base", ModelPartBuilder.create().uv(-14, 14).cuboid(-7F, -1F, -7F, 14F, 1F, 14F), ModelTransform.pivot(0F, 24F, 0F));
base.addChild("outerN", outer, ModelTransform.rotation(PI / 18, 0F, 0F));
base.addChild("outerS", ModelPartBuilder.create().uv(0, 8).cuboid(-7, -6.2F, 5.89F, 14, 5F, 1F), ModelTransform.rotation(-PI / 18, 0F, 0F));
base.addChild("outerE", outer, ModelTransform.rotation(PI / 18, HALF_PI, 0F));
base.addChild("outerW", outer, ModelTransform.rotation(PI / 18, -HALF_PI, 0F));
base.addChild("innerN", inner1, ModelTransform.rotation(-PI / 1.125F, PI / 180F * 35F, PI));
base.addChild("innerS", inner1, ModelTransform.rotation(PI / 9, -PI / 36F * 7F, 0F));
ModelPartData base = data.addChild("base",
create().uv(-14, 14).cuboid(-7F, 1F, -7F, 14F, 1F, 14F, new Dilation(0.01F))
.uv(19, 4).cuboid(-6F, 0F, -6F, 2F, 2F, 2F, dilation1)
.uv(19, 4).cuboid(-6F, 0F, 4F, 2F, 2F, 2F, dilation1)
.uv(19, 4).cuboid(4F, 0F, 4F, 2F, 2F, 2F, dilation1)
.uv(19, 4).cuboid(4F, 0F, -6F, 2F, 2F, 2F, dilation1),
ModelTransform.NONE);
base.addChild("outerN", outer, ModelTransform.rotation(PI / 180 * 7.8F, 0F, 0F));
base.addChild("outerS", create().uv(0, 8).cuboid(-7F, 2F, 5.8F, 14F, 5F, 1F), ModelTransform.rotation(-PI / 180 * 7.8F, 0F, 0F));
base.addChild("outerE", outer.mirrored(), ModelTransform.rotation(PI / 180 * 7.8F, HALF_PI, 0F));
base.addChild("outerW", outer, ModelTransform.rotation(PI / 180 * 7.8F, -HALF_PI, 0F));
base.addChild("innerE", inner1, ModelTransform.rotation(-PI / 1.125F, -PI / 36F * 11F, PI));
base.addChild("innerW", inner1, ModelTransform.rotation(PI / 9, PI / 36F * 11F, 0F));
base.addChild("innerNE", inner2, ModelTransform.rotation(-0.9727F, -1.2573F, 0.9958F));
base.addChild("innerSE", inner2, ModelTransform.rotation(0.0456F, 0.1685F, 0.2657F));
base.addChild("innerNW", inner3, ModelTransform.rotation(-0.0456F, 0.1685F, -0.2657F));
base.addChild("innerSW", inner3, ModelTransform.rotation(0.9727F, -1.2573F, -0.9958F));
base.addChild("innerN", inner1.mirrored(), ModelTransform.rotation(-PI / 1.125F, PI / 36F * 7F, PI));
base.addChild("innerS", inner1, ModelTransform.rotation(PI / 9, -PI / 36F * 7F, 0F));
base.addChild("innerNE", inner2, ModelTransform.rotation(-1.0601F, -1.2728F, 1.0791F));
base.addChild("innerSE", inner2, ModelTransform.rotation(0.0375F, 0.1391F, 0.2644F));
base.addChild("innerNW", inner3, ModelTransform.rotation(-0.0364F, 0.1348F, -0.2643F));
base.addChild("innerSW", inner3, ModelTransform.rotation(1.0601F, -1.2728F, -1.0791F));

data.addChild("spinning", ModelPartBuilder.create().uv(8, 0).cuboid(-1, -4.3F, -0.5F, 2F, 4F, 1), ModelTransform.rotation(0F, -PI / 8.6F, 0F));
data.addChild("spinning", create().uv(8, 0).cuboid(-1F, 1.3F, -0.5F, 2F, 4F, 1F), ModelTransform.rotation(0F, -PI / 7.9F, 0F));

return TexturedModelData.of(modelData, 32, 32);
}

@Override
public void render(CottonCandyMachineBlockEntity entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
World world = entity.getWorld();
if (world != null) {
spinning.yaw = Math.clamp(spinning.yaw + tickDelta, 0, PI);
VertexConsumer consumer = TEXTURE.getVertexConsumer(vertexConsumers, RenderLayer::getEntityCutout);
base.render(matrices, consumer, light, overlay);
}
spinning.yaw = Math.clamp(spinning.yaw + tickDelta, 0, PI);
VertexConsumer consumer = TEXTURE.getVertexConsumer(vertexConsumers, RenderLayer::getEntityCutout);
base.render(matrices, consumer, light, overlay);
spinning.render(matrices, consumer, light, overlay);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.anawesomguy.carnivalfoods.item;

import net.anawesomguy.carnivalfoods.block.CottonCandyMachineBlock;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
Expand All @@ -9,6 +10,9 @@
import net.minecraft.util.UseAction;
import net.minecraft.world.World;

import static net.anawesomguy.carnivalfoods.block.CottonCandyMachineBlock.START_SPIN_TIME;
import static net.anawesomguy.carnivalfoods.block.CottonCandyMachineBlock.TIME_TO_MAKE_ONE_LAYER;

public class CottonCandyItem extends Item {
public CottonCandyItem(Settings settings) {
super(settings);
Expand All @@ -33,4 +37,12 @@ public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) {
public boolean isItemBarVisible(ItemStack stack) {
return true;
}

@Override
public int getMaxUseTime(ItemStack stack, LivingEntity user) {
int damage = stack.getDamage();
return damage == 0 ?
super.getMaxUseTime(stack, user) :
START_SPIN_TIME + TIME_TO_MAKE_ONE_LAYER * stack.getDamage();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package net.anawesomguy.carnivalfoods.item;

import net.anawesomguy.carnivalfoods.block.CottonCandyMachineBlock;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.TypedActionResult;
import net.minecraft.world.RaycastContext;
import net.minecraft.world.World;

public class ModifiedStickItem extends Item {
public ModifiedStickItem(Settings settings) {
super(settings);
}

@Override
public int getMaxUseTime(ItemStack stack, LivingEntity user) {
return CottonCandyMachineBlock.TOTAL_TIME;
}

@Override
public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) {
super.usageTick(world, user, stack, remainingUseTicks);
}

@Override
public ActionResult useOnBlock(ItemUsageContext context) {
return ActionResult.SUCCESS;
}

@Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
ItemStack stack = user.getStackInHand(hand);
user.setCurrentHand(hand);
return new TypedActionResult<>(
useOnBlock(new ItemUsageContext(world, user, hand, stack,
raycast(world, user, RaycastContext.FluidHandling.NONE)
)), stack);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
import net.minecraft.client.render.item.ItemModels;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(ItemRenderer.class)
public abstract class ItemRendererMixin {
@WrapOperation(method = "getModel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/ItemModels;getModel(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/client/render/model/BakedModel;"))
private BakedModel renderHeldItem(ItemModels models, ItemStack stack, Operation<BakedModel> original) {
ModelIdentifier model = CarnivalFoodsClient.HELD_ITEM_MODELS.get(stack.getItem());
if (model != null)
return models.getModelManager().getModel(model);
Identifier modelId = CarnivalFoodsClient.HELD_ITEM_MODELS.get(stack.getItem());
if (modelId != null)
return models.getModelManager().getModel(modelId);
return original.call(models, stack);
}
}
Loading

0 comments on commit 3cced2c

Please sign in to comment.