Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@
"block.create_connected.linked_bamboo_button": "uoʇʇnᗺ ooqɯɐᗺ pǝʞuıꞀ",
"block.create_connected.linked_birch_button": "uoʇʇnᗺ ɥɔɹıᗺ pǝʞuıꞀ",
"block.create_connected.linked_cherry_button": "uoʇʇnᗺ ʎɹɹǝɥƆ pǝʞuıꞀ",
"block.create_connected.linked_copycat_stone_button": "uoʇʇnᗺ ǝuoʇS ʇɐɔʎdoƆ pǝʞuıꞀ",
"block.create_connected.linked_copycat_wooden_button": "uoʇʇnᗺ uǝpooM ʇɐɔʎdoƆ pǝʞuıꞀ",
"block.create_connected.linked_crimson_button": "uoʇʇnᗺ uosɯıɹƆ pǝʞuıꞀ",
"block.create_connected.linked_dark_oak_button": "uoʇʇnᗺ ʞɐO ʞɹɐᗡ pǝʞuıꞀ",
"block.create_connected.linked_jungle_button": "uoʇʇnᗺ ǝןbunſ pǝʞuıꞀ",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@
"block.create_connected.linked_bamboo_button": "Linked Bamboo Button",
"block.create_connected.linked_birch_button": "Linked Birch Button",
"block.create_connected.linked_cherry_button": "Linked Cherry Button",
"block.create_connected.linked_copycat_stone_button": "Linked Copycat Stone Button",
"block.create_connected.linked_copycat_wooden_button": "Linked Copycat Wooden Button",
"block.create_connected.linked_crimson_button": "Linked Crimson Button",
"block.create_connected.linked_dark_oak_button": "Linked Dark Oak Button",
"block.create_connected.linked_jungle_button": "Linked Jungle Button",
Expand Down
8 changes: 8 additions & 0 deletions src/generated/resources/data/create/tags/block/safe_nbt.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@
{
"id": "create_connected:linked_throttle_lever",
"required": false
},
{
"id": "create_connected:linked_copycat_wooden_button",
"required": false
},
{
"id": "create_connected:linked_copycat_stone_button",
"required": false
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:air"
}
],
"rolls": 1.0
}
],
"random_sequence": "create_connected:blocks/linked_copycat_stone_button"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:air"
}
],
"rolls": 1.0
}
],
"random_sequence": "create_connected:blocks/linked_copycat_wooden_button"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package com.hlysine.create_connected.compat;

import com.copycatsplus.copycats.content.copycat.button.CopycatButtonModelCore;
import com.copycatsplus.copycats.foundation.copycat.model.CopycatModelCore;
import com.copycatsplus.copycats.foundation.copycat.model.neoforge.CopycatModelCoreImpl;
import com.hlysine.create_connected.CreateConnected;
import com.hlysine.create_connected.content.linkedtransmitter.*;
import com.hlysine.create_connected.datagen.CCBlockStateGen;
import com.hlysine.create_connected.registries.PreciseItemUseOverrides;
import com.simibubi.create.AllTags;
import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.tterrag.registrate.util.entry.BlockEntityEntry;
import com.tterrag.registrate.util.entry.BlockEntry;
import com.tterrag.registrate.util.nullness.NonNullConsumer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.client.model.BakedModelWrapper;
import net.neoforged.neoforge.client.model.data.ModelData;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.function.Supplier;

import static com.copycatsplus.copycats.CCBlocks.onClient;

public class CopycatsCompatButtonRegistry {
private static final CreateRegistrate REGISTRATE = CreateConnected.getRegistrate();

public static final BlockEntry<LinkedCopycatButtonBlock> WOODEN_BUTTON = REGISTRATE
.block("linked_copycat_wooden_button", properties -> new LinkedCopycatButtonBlock(properties, com.copycatsplus.copycats.CCBlocks.COPYCAT_WOODEN_BUTTON))
.initialProperties(() -> Blocks.OAK_BUTTON)
.tag(AllTags.AllBlockTags.SAFE_NBT.tag)
.addLayer(() -> RenderType::cutoutMipped)
.transform(LinkedTransmitterItem.register())
.onRegister(onClient(() -> createBlockModel(CopycatButtonModelCore::new)))
.onRegister(PreciseItemUseOverrides::addBlock)
.blockstate(CCBlockStateGen.linkedLeverNoPower(
// no button blockstates from copycat+
ResourceLocation.withDefaultNamespace("block/air")
))
.asOptional()
.register();

public static final BlockEntry<LinkedCopycatButtonBlock> STONE_BUTTON = REGISTRATE
.block("linked_copycat_stone_button", properties -> new LinkedCopycatButtonBlock(properties, com.copycatsplus.copycats.CCBlocks.COPYCAT_STONE_BUTTON))
.initialProperties(() -> Blocks.STONE_BUTTON)
.tag(AllTags.AllBlockTags.SAFE_NBT.tag)
.addLayer(() -> RenderType::cutoutMipped)
.transform(LinkedTransmitterItem.register())
.onRegister(onClient(() -> createBlockModel(CopycatButtonModelCore::new)))
.onRegister(PreciseItemUseOverrides::addBlock)
.blockstate(CCBlockStateGen.linkedLeverNoPower(
// no button blockstates from copycat+
ResourceLocation.withDefaultNamespace("block/air")
))
.asOptional()
.register();


public static final BlockEntityEntry<LinkedCopycatButtonBlockEntity> LINKED_TRANSMITTER = REGISTRATE
.blockEntity("linked_copycat_button_transmitter", LinkedCopycatButtonBlockEntity::new)
.validBlock(CopycatsCompatButtonRegistry.WOODEN_BUTTON)
.validBlock(CopycatsCompatButtonRegistry.STONE_BUTTON)
.renderer(() -> SmartBlockEntityRenderer::new)
.register();

public static void register() {
}

private static @NotNull <Model extends CopycatModelCore> NonNullConsumer<? super Block> createBlockModel(Supplier<Model> model) {
return CreateRegistrate.blockModel(() -> linkModel ->
new CombinedBakedModel(CopycatModelCoreImpl.createModel(
linkModel, model.get()), linkModel));
}

private static class CombinedBakedModel extends BakedModelWrapper<BakedModel> {
private final BakedModel linkModel;

public CombinedBakedModel(BakedModel baseModel, BakedModel linkModel) {
super(baseModel);
this.linkModel = linkModel;
}

@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) {
List<BakedQuad> baseQuads = super.getQuads(state, side, rand);
List<BakedQuad> linkQuads = this.linkModel.getQuads(state, side, rand);
baseQuads.addAll(linkQuads);

return baseQuads;
}

@Override
public @NotNull List<BakedQuad> getQuads(BlockState state, Direction side, @NotNull RandomSource rand, @NotNull ModelData data, RenderType renderType) {
List<BakedQuad> baseQuads = super.getQuads(state, side, rand, data, renderType);
List<BakedQuad> linkQuads = this.linkModel.getQuads(state, side, rand, data, renderType);
baseQuads.addAll(linkQuads);

return baseQuads;
}
}
}
Loading