Changed models loading (Done)
This commit is contained in:
parent
831faeb306
commit
5da634fc73
63 changed files with 490 additions and 729 deletions
|
@ -40,12 +40,12 @@ public class AeterniumAnvil extends EndAnvilBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
int damage = getDamageState(blockState);
|
int damage = getDamageState(blockState);
|
||||||
String modId = resourceLocation.getNamespace();
|
String modId = stateId.getNamespace();
|
||||||
String modelId = "block/" + resourceLocation.getPath() + "_top_" + damage;
|
String modelId = "block/" + stateId.getPath() + "_top_" + damage;
|
||||||
ResourceLocation modelLocation = new ResourceLocation(modId, modelId);
|
ResourceLocation modelLocation = new ResourceLocation(modId, modelId);
|
||||||
registerBlockModel(resourceLocation, modelLocation, blockState, modelCache);
|
registerBlockModel(stateId, modelLocation, blockState, modelCache);
|
||||||
return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false);
|
return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,20 +56,6 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType
|
||||||
return ERenderLayer.CUTOUT;
|
return ERenderLayer.CUTOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
Map<String, String> map = Maps.newHashMap();
|
|
||||||
map.put("%glow%", getGlowTexture());
|
|
||||||
map.put("%metal%", getMetalTexture(blockId));
|
|
||||||
if (block.contains("item") || block.contains("ceil")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, map);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_FLOOR, map);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
Map<String, String> textures = Maps.newHashMap();
|
Map<String, String> textures = Maps.newHashMap();
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
package ru.betterend.blocks;
|
package ru.betterend.blocks;
|
||||||
|
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.client.resources.model.BlockModelRotation;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
@ -16,7 +20,9 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||||
import net.minecraft.world.phys.shapes.Shapes;
|
import net.minecraft.world.phys.shapes.Shapes;
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import ru.betterend.blocks.basis.AttachedBlock;
|
import ru.betterend.blocks.basis.AttachedBlock;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.render.ERenderLayer;
|
import ru.betterend.client.render.ERenderLayer;
|
||||||
import ru.betterend.interfaces.IRenderTypeable;
|
import ru.betterend.interfaces.IRenderTypeable;
|
||||||
import ru.betterend.client.models.BlockModelProvider;
|
import ru.betterend.client.models.BlockModelProvider;
|
||||||
|
@ -40,20 +46,51 @@ public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, B
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
return ModelsHelper.createItemModel(blockId.getPath());
|
||||||
if (block.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath());
|
|
||||||
}
|
}
|
||||||
else if (block.contains("ceil")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_CHANDELIER_CEIL, blockId.getPath());
|
@Override
|
||||||
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
|
Optional<String> pattern;
|
||||||
|
switch (blockState.getValue(FACING)) {
|
||||||
|
case UP:
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_FLOOR, resourceLocation.getPath());
|
||||||
|
break;
|
||||||
|
case DOWN:
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_CEIL, resourceLocation.getPath());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_WALL, resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
else if (block.contains("wall")) {
|
return ModelsHelper.fromPattern(pattern);
|
||||||
return Patterns.createJson(Patterns.BLOCK_CHANDELIER_WALL, blockId.getPath());
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_CHANDELIER_FLOOR, blockId.getPath());
|
@Override
|
||||||
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
|
String state = "_wall";
|
||||||
|
BlockModelRotation rotation = BlockModelRotation.X0_Y0;
|
||||||
|
switch (blockState.getValue(FACING)) {
|
||||||
|
case UP:
|
||||||
|
state = "_floor";
|
||||||
|
break;
|
||||||
|
case DOWN:
|
||||||
|
state = "_ceil";
|
||||||
|
break;
|
||||||
|
case EAST:
|
||||||
|
rotation = BlockModelRotation.X0_Y270;
|
||||||
|
break;
|
||||||
|
case NORTH:
|
||||||
|
rotation = BlockModelRotation.X0_Y180;
|
||||||
|
break;
|
||||||
|
case WEST:
|
||||||
|
rotation = BlockModelRotation.X0_Y90;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
|
"block/" + stateId.getPath() + state);
|
||||||
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
|
return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
@ -25,6 +26,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.material.Material;
|
import net.minecraft.world.level.material.Material;
|
||||||
import net.minecraft.world.level.storage.loot.LootContext;
|
import net.minecraft.world.level.storage.loot.LootContext;
|
||||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
|
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.render.ERenderLayer;
|
import ru.betterend.client.render.ERenderLayer;
|
||||||
import ru.betterend.interfaces.IRenderTypeable;
|
import ru.betterend.interfaces.IRenderTypeable;
|
||||||
import ru.betterend.client.models.BlockModelProvider;
|
import ru.betterend.client.models.BlockModelProvider;
|
||||||
|
@ -87,9 +89,7 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,11 @@ import java.util.Optional;
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
import net.minecraft.client.color.block.BlockColor;
|
import net.minecraft.client.color.block.BlockColor;
|
||||||
import net.minecraft.client.color.item.ItemColor;
|
import net.minecraft.client.color.item.ItemColor;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.interfaces.IColorProvider;
|
import ru.betterend.interfaces.IColorProvider;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
import ru.betterend.util.BlocksHelper;
|
import ru.betterend.util.BlocksHelper;
|
||||||
|
@ -29,9 +34,9 @@ public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements ICo
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
String path = "betterend:block/block_petal_colored";
|
String path = "betterend:block/block_petal_colored";
|
||||||
return Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path);
|
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path);
|
||||||
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,9 @@ import com.google.common.collect.Lists;
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
import net.minecraft.client.color.block.BlockColor;
|
import net.minecraft.client.color.block.BlockColor;
|
||||||
import net.minecraft.client.color.item.ItemColor;
|
import net.minecraft.client.color.item.ItemColor;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.core.Vec3i;
|
import net.minecraft.core.Vec3i;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||||
|
@ -19,6 +21,8 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
import net.minecraft.world.level.block.state.StateDefinition;
|
||||||
import net.minecraft.world.level.block.state.properties.IntegerProperty;
|
import net.minecraft.world.level.block.state.properties.IntegerProperty;
|
||||||
import net.minecraft.world.level.storage.loot.LootContext;
|
import net.minecraft.world.level.storage.loot.LootContext;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.render.ERenderLayer;
|
import ru.betterend.client.render.ERenderLayer;
|
||||||
import ru.betterend.interfaces.IColorProvider;
|
import ru.betterend.interfaces.IColorProvider;
|
||||||
import ru.betterend.interfaces.IRenderTypeable;
|
import ru.betterend.interfaces.IRenderTypeable;
|
||||||
|
@ -65,8 +69,14 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap");
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
|
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap");
|
||||||
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -9,6 +9,7 @@ import com.google.common.collect.Lists;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
@ -67,12 +68,6 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean propagatesSkylightDown(BlockState state, BlockGetter world, BlockPos pos) {
|
public boolean propagatesSkylightDown(BlockState state, BlockGetter world, BlockPos pos) {
|
||||||
return state.getValue(COLOR) > 0;
|
return state.getValue(COLOR) > 0;
|
||||||
|
@ -87,4 +82,9 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,13 +25,7 @@ public class BlockBase extends Block implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
return Patterns.createBlockSimple(blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -58,15 +58,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider {
|
||||||
return Collections.singletonList(stack);
|
return Collections.singletonList(stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
Map<String, String> map = Maps.newHashMap();
|
|
||||||
map.put("%anvil%", blockId.getPath());
|
|
||||||
map.put("%top%", getTop(blockId, block));
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_ANVIL, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getTop(ResourceLocation blockId, String block) {
|
protected String getTop(ResourceLocation blockId, String block) {
|
||||||
if (block.contains("item")) {
|
if (block.contains("item")) {
|
||||||
return blockId.getPath() + "_top_0";
|
return blockId.getPath() + "_top_0";
|
||||||
|
@ -76,7 +67,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,13 +84,13 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
IntegerProperty destructionProperty = getDestructionProperty();
|
IntegerProperty destructionProperty = getDestructionProperty();
|
||||||
int destruction = blockState.getValue(destructionProperty);
|
int destruction = blockState.getValue(destructionProperty);
|
||||||
String modId = resourceLocation.getNamespace();
|
String modId = stateId.getNamespace();
|
||||||
String modelId = "block/" + resourceLocation.getPath() + "_top_" + destruction;
|
String modelId = "block/" + stateId.getPath() + "_top_" + destruction;
|
||||||
ResourceLocation modelLocation = new ResourceLocation(modId, modelId);
|
ResourceLocation modelLocation = new ResourceLocation(modId, modelId);
|
||||||
registerBlockModel(resourceLocation, modelLocation, blockState, modelCache);
|
registerBlockModel(stateId, modelLocation, blockState, modelCache);
|
||||||
return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false);
|
return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,16 +96,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
String texture = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
if (block.contains("open")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BARREL_OPEN, texture, texture);
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,11 +113,11 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
String open = blockState.getValue(OPEN) ? "_open" : "";
|
String open = blockState.getValue(OPEN) ? "_open" : "";
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + open);
|
"block/" + stateId.getPath() + open);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
Direction facing = blockState.getValue(FACING);
|
Direction facing = blockState.getValue(FACING);
|
||||||
BlockModelRotation rotation = BlockModelRotation.X0_Y0;
|
BlockModelRotation rotation = BlockModelRotation.X0_Y0;
|
||||||
switch (facing) {
|
switch (facing) {
|
||||||
|
|
|
@ -37,12 +37,6 @@ public class EndBookshelfBlock extends BlockBase {
|
||||||
return Collections.singletonList(new ItemStack(Items.BOOK, 3));
|
return Collections.singletonList(new ItemStack(Items.BOOK, 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_BOOKSHELF,
|
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_BOOKSHELF,
|
||||||
|
|
|
@ -36,20 +36,7 @@ public abstract class EndButtonBlock extends ButtonBlock implements BlockModelPr
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (block.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
if (block.contains("pressed")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BUTTON_PRESSED, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath());
|
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath());
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
|
@ -66,11 +53,11 @@ public abstract class EndButtonBlock extends ButtonBlock implements BlockModelPr
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
String powered = blockState.getValue(POWERED) ? "_powered" : "";
|
String powered = blockState.getValue(POWERED) ? "_powered" : "";
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + powered);
|
"block/" + stateId.getPath() + powered);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
AttachFace face = blockState.getValue(FACE);
|
AttachFace face = blockState.getValue(FACE);
|
||||||
boolean isCeiling = face == AttachFace.CEILING;
|
boolean isCeiling = face == AttachFace.CEILING;
|
||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
|
|
|
@ -35,16 +35,7 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
if (block.contains("item")) {
|
|
||||||
return Patterns.createItemGenerated(block);
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_CHAIN, blockId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return ModelsHelper.createItemModel(blockId.getPath());
|
return ModelsHelper.createItemModel(blockId.getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,11 +47,11 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
Direction.Axis axis = blockState.getValue(AXIS);
|
Direction.Axis axis = blockState.getValue(AXIS);
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath());
|
"block/" + stateId.getPath());
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createRotatedModel(modelId, axis);
|
return ModelsHelper.createRotatedModel(modelId, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,17 +43,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String path) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (path.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath());
|
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath());
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,14 +32,7 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
String blockName = blockId.getPath();
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_COMPOSTER, blockName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return getBlockModel(resourceLocation, defaultBlockState());
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,28 +43,22 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath());
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath());
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
|
|
||||||
ResourceLocation content_1 = new ResourceLocation("block/composter_contents1");
|
|
||||||
ResourceLocation content_2 = new ResourceLocation("block/composter_contents2");
|
|
||||||
ResourceLocation content_3 = new ResourceLocation("block/composter_contents3");
|
|
||||||
ResourceLocation content_4 = new ResourceLocation("block/composter_contents4");
|
|
||||||
ResourceLocation content_5 = new ResourceLocation("block/composter_contents5");
|
|
||||||
ResourceLocation content_6 = new ResourceLocation("block/composter_contents6");
|
|
||||||
ResourceLocation content_7 = new ResourceLocation("block/composter_contents7");
|
|
||||||
ResourceLocation content_8 = new ResourceLocation("block/composter_contents_ready");
|
|
||||||
|
|
||||||
MultiPartBuilder builder = MultiPartBuilder.create(stateDefinition);
|
MultiPartBuilder builder = MultiPartBuilder.create(stateDefinition);
|
||||||
builder.part(content_1).setCondition(state -> state.getValue(LEVEL) == 1).add();
|
LEVEL.getPossibleValues().forEach(level -> {
|
||||||
builder.part(content_2).setCondition(state -> state.getValue(LEVEL) == 2).add();
|
if (level > 0) {
|
||||||
builder.part(content_3).setCondition(state -> state.getValue(LEVEL) == 3).add();
|
ResourceLocation contentId;
|
||||||
builder.part(content_4).setCondition(state -> state.getValue(LEVEL) == 4).add();
|
if (level > 7) {
|
||||||
builder.part(content_5).setCondition(state -> state.getValue(LEVEL) == 5).add();
|
contentId = new ResourceLocation("block/composter_contents_ready");
|
||||||
builder.part(content_6).setCondition(state -> state.getValue(LEVEL) == 6).add();
|
} else {
|
||||||
builder.part(content_7).setCondition(state -> state.getValue(LEVEL) == 7).add();
|
contentId = new ResourceLocation("block/composter_contents" + level);
|
||||||
builder.part(content_8).setCondition(state -> state.getValue(LEVEL) == 8).add();
|
}
|
||||||
|
builder.part(contentId).setCondition(state -> state.getValue(LEVEL).equals(level)).add();
|
||||||
|
}
|
||||||
|
});
|
||||||
builder.part(modelId).add();
|
builder.part(modelId).add();
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
|
|
@ -30,25 +30,7 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
String blockName = blockId.getPath();
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap<String, String>() {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
{
|
|
||||||
put("%particle%", blockName + "_front");
|
|
||||||
put("%down%", blockName + "_bottom");
|
|
||||||
put("%up%", blockName + "_top");
|
|
||||||
put("%north%", blockName + "_front");
|
|
||||||
put("%south%", blockName + "_side");
|
|
||||||
put("%west%", blockName + "_front");
|
|
||||||
put("%east%", blockName + "_side");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return getBlockModel(resourceLocation, defaultBlockState());
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,24 +45,6 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod
|
||||||
return ERenderLayer.CUTOUT;
|
return ERenderLayer.CUTOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
String blockId = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
if (block.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_GENERATED, block);
|
|
||||||
}
|
|
||||||
if (block.contains("top_hinge")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_DOOR_TOP_HINGE, blockId, blockId);
|
|
||||||
}
|
|
||||||
if (block.contains("bottom_hinge")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM_HINGE, blockId, blockId);
|
|
||||||
}
|
|
||||||
if (block.contains("top")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_DOOR_TOP, blockId, blockId);
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM, blockId, blockId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
String blockName = resourceLocation.getPath();
|
String blockName = resourceLocation.getPath();
|
||||||
|
@ -86,7 +68,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
Direction facing = blockState.getValue(FACING);
|
Direction facing = blockState.getValue(FACING);
|
||||||
DoorType doorType = getDoorType(blockState);
|
DoorType doorType = getDoorType(blockState);
|
||||||
boolean open = blockState.getValue(OPEN);
|
boolean open = blockState.getValue(OPEN);
|
||||||
|
@ -128,9 +110,9 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + "_" + doorType);
|
"block/" + stateId.getPath() + "_" + doorType);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false);
|
return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,20 +36,7 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (block.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
if (block.contains("side")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath());
|
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath());
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
|
@ -57,29 +44,24 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
||||||
ResourceLocation thisId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
ResourceLocation postId = new ResourceLocation(thisId.getNamespace(),
|
String path = blockId.getPath();
|
||||||
"block/" + thisId.getPath() + "_post");
|
Optional<String> pattern = Optional.empty();
|
||||||
ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(),
|
if (path.endsWith("_post")) {
|
||||||
"block/" + thisId.getPath() + "_side");
|
pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath());
|
||||||
if (blockId.equals(postId)) {
|
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath());
|
|
||||||
return ModelsHelper.fromPattern(pattern);
|
|
||||||
}
|
}
|
||||||
if (blockId.equals(sideId)) {
|
if (path.endsWith("_side")) {
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath());
|
pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath());
|
||||||
return ModelsHelper.fromPattern(pattern);
|
|
||||||
}
|
}
|
||||||
return null;
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation postId = new ResourceLocation(blockId.getNamespace(),
|
ResourceLocation postId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + blockId.getPath() + "_post");
|
"block/" + stateId.getPath() + "_post");
|
||||||
ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(),
|
ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + blockId.getPath() + "_side");
|
"block/" + stateId.getPath() + "_side");
|
||||||
registerBlockModel(postId, postId, blockState, modelCache);
|
registerBlockModel(postId, postId, blockState, modelCache);
|
||||||
registerBlockModel(sideId, sideId, blockState, modelCache);
|
registerBlockModel(sideId, sideId, blockState, modelCache);
|
||||||
|
|
||||||
|
|
|
@ -52,23 +52,6 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
Map<String, String> map = Maps.newHashMap();
|
|
||||||
map.put("%top%", blockId.getPath() + "_top");
|
|
||||||
map.put("%side%", blockId.getPath() + "_side");
|
|
||||||
if (block.contains("_on")) {
|
|
||||||
map.put("%front%", blockId.getPath() + "_front_on");
|
|
||||||
map.put("%glow%", blockId.getPath() + "_glow");
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_FURNACE_LIT, map);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
map.put("%front%", blockId.getPath() + "_front");
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_FURNACE, map);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
||||||
String blockName = blockId.getPath();
|
String blockName = blockId.getPath();
|
||||||
|
@ -88,16 +71,16 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return getBlockModel(resourceLocation, defaultBlockState());
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
String lit = blockState.getValue(LIT) ? "_lit" : "";
|
String lit = blockState.getValue(LIT) ? "_lit" : "";
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + lit);
|
"block/" + stateId.getPath() + lit);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true);
|
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,20 +34,8 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (block.contains("wall")) {
|
|
||||||
if (block.contains("open")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_GATE_OPEN_WALL, parentId.getPath(), blockId.getPath());
|
|
||||||
} else {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED_WALL, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (block.contains("open")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_GATE_OPEN, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -67,13 +55,13 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
boolean inWall = blockState.getValue(IN_WALL);
|
boolean inWall = blockState.getValue(IN_WALL);
|
||||||
boolean isOpen = blockState.getValue(OPEN);
|
boolean isOpen = blockState.getValue(OPEN);
|
||||||
String state = "" + (inWall ? "_wall" : "") + (isOpen ? "_open" : "_closed");
|
String state = "" + (inWall ? "_wall" : "") + (isOpen ? "_open" : "_closed");
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + state);
|
"block/" + stateId.getPath() + state);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), true, false);
|
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -143,16 +143,7 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
if (block.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_BLOCK, blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_LADDER, blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return ModelsHelper.createBlockItem(blockId);
|
return ModelsHelper.createBlockItem(blockId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,9 +154,9 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath());
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath());
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true);
|
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,11 +123,11 @@ public class EndLanternBlock extends BlockBaseNotFull implements SimpleWaterlogg
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
String floor = blockState.getValue(IS_FLOOR) ? "_floor" : "";
|
String floor = blockState.getValue(IS_FLOOR) ? "_floor" : "";
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + floor);
|
"block/" + stateId.getPath() + floor);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createBlockSimple(modelId);
|
return ModelsHelper.createBlockSimple(modelId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,9 @@ import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.world.item.enchantment.Enchantments;
|
import net.minecraft.world.item.enchantment.Enchantments;
|
||||||
|
@ -52,12 +54,6 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I
|
||||||
this.sapling = sapling;
|
this.sapling = sapling;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
String blockId = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BASE, blockId, blockId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ERenderLayer getRenderLayer() {
|
public ERenderLayer getRenderLayer() {
|
||||||
return ERenderLayer.CUTOUT;
|
return ERenderLayer.CUTOUT;
|
||||||
|
@ -78,4 +74,9 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I
|
||||||
}
|
}
|
||||||
return MHelper.RANDOM.nextInt(16) == 0 ? Lists.newArrayList(new ItemStack(sapling)) : Lists.newArrayList();
|
return MHelper.RANDOM.nextInt(16) == 0 ? Lists.newArrayList(new ItemStack(sapling)) : Lists.newArrayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,15 @@ package ru.betterend.blocks.basis;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.client.resources.model.BlockModelRotation;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
@ -15,6 +19,8 @@ import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.IronBarsBlock;
|
import net.minecraft.world.level.block.IronBarsBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.storage.loot.LootContext;
|
import net.minecraft.world.level.storage.loot.LootContext;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.render.ERenderLayer;
|
import ru.betterend.client.render.ERenderLayer;
|
||||||
import ru.betterend.interfaces.IRenderTypeable;
|
import ru.betterend.interfaces.IRenderTypeable;
|
||||||
import ru.betterend.client.models.BlockModelProvider;
|
import ru.betterend.client.models.BlockModelProvider;
|
||||||
|
@ -30,7 +36,6 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid
|
||||||
return Collections.singletonList(new ItemStack(this));
|
return Collections.singletonList(new ItemStack(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
public Optional<String> getModelString(String block) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
||||||
if (block.contains("item")) {
|
if (block.contains("item")) {
|
||||||
|
@ -44,6 +49,49 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
|
return ModelsHelper.createBlockItem(resourceLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
||||||
|
ResourceLocation thisId = Registry.BLOCK.getKey(this);
|
||||||
|
String path = blockId.getPath();
|
||||||
|
Optional<String> pattern = Optional.empty();
|
||||||
|
if (path.endsWith("_post")) {
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_BARS_POST, thisId.getPath(), thisId.getPath());
|
||||||
|
}
|
||||||
|
if (path.endsWith("_side")) {
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_BARS_SIDE, thisId.getPath(), thisId.getPath());
|
||||||
|
}
|
||||||
|
return ModelsHelper.fromPattern(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
|
ResourceLocation postId = new ResourceLocation(stateId.getNamespace(),
|
||||||
|
"block/" + stateId.getPath() + "_post");
|
||||||
|
ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(),
|
||||||
|
"block/" + stateId.getPath() + "_side");
|
||||||
|
registerBlockModel(postId, postId, blockState, modelCache);
|
||||||
|
registerBlockModel(sideId, sideId, blockState, modelCache);
|
||||||
|
|
||||||
|
ModelsHelper.MultiPartBuilder builder = ModelsHelper.MultiPartBuilder.create(stateDefinition);
|
||||||
|
builder.part(postId).setCondition(state ->
|
||||||
|
!state.getValue(NORTH) && !state.getValue(EAST) &&
|
||||||
|
!state.getValue(SOUTH) && !state.getValue(WEST)).add();
|
||||||
|
builder.part(sideId).setCondition(state -> state.getValue(NORTH)).setUVLock(true).add();
|
||||||
|
builder.part(sideId).setCondition(state -> state.getValue(EAST))
|
||||||
|
.setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).add();
|
||||||
|
builder.part(sideId).setCondition(state -> state.getValue(SOUTH))
|
||||||
|
.setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).add();
|
||||||
|
builder.part(sideId).setCondition(state -> state.getValue(WEST))
|
||||||
|
.setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).add();
|
||||||
|
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
public boolean skipRendering(BlockState state, BlockState stateFrom, Direction direction) {
|
public boolean skipRendering(BlockState state, BlockState stateFrom, Direction direction) {
|
||||||
if (direction.getAxis().isVertical() && stateFrom.getBlock().is(this) && !stateFrom.equals(state)) {
|
if (direction.getAxis().isVertical() && stateFrom.getBlock().is(this) && !stateFrom.equals(state)) {
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
package ru.betterend.blocks.basis;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
|
||||||
import net.minecraft.core.Registry;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.WeightedPressurePlateBlock;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.storage.loot.LootContext;
|
|
||||||
import ru.betterend.client.models.BlockModelProvider;
|
|
||||||
import ru.betterend.client.models.Patterns;
|
|
||||||
|
|
||||||
public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider {
|
|
||||||
private final Block parent;
|
|
||||||
|
|
||||||
public EndMetalPlateBlock(Block source) {
|
|
||||||
super(15, FabricBlockSettings.copyOf(source).noCollission().noOcclusion().requiresCorrectToolForDrops().strength(0.5F));
|
|
||||||
this.parent = source;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
|
|
||||||
return Collections.singletonList(new ItemStack(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (block.contains("down")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -2,11 +2,10 @@ package ru.betterend.blocks.basis;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
|
@ -21,16 +20,15 @@ import net.minecraft.world.level.material.MaterialColor;
|
||||||
import net.minecraft.world.level.storage.loot.LootContext;
|
import net.minecraft.world.level.storage.loot.LootContext;
|
||||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
|
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
|
||||||
import ru.betterend.client.models.BlockModelProvider;
|
import ru.betterend.client.models.BlockModelProvider;
|
||||||
import ru.betterend.client.models.Patterns;
|
|
||||||
import ru.betterend.util.MHelper;
|
import ru.betterend.util.MHelper;
|
||||||
|
|
||||||
public class EndOreBlock extends OreBlock implements BlockModelProvider {
|
public class EndOreBlock extends OreBlock implements BlockModelProvider {
|
||||||
private final Item dropItem;
|
private final Item dropItem;
|
||||||
private final int minCount;
|
private final int minCount;
|
||||||
private final int maxCount;
|
private final int maxCount;
|
||||||
private final int expirience;
|
private final int experience;
|
||||||
|
|
||||||
public EndOreBlock(Item drop, int minCount, int maxCount, int expirience) {
|
public EndOreBlock(Item drop, int minCount, int maxCount, int experience) {
|
||||||
super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND)
|
super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND)
|
||||||
.hardness(3F)
|
.hardness(3F)
|
||||||
.resistance(9F)
|
.resistance(9F)
|
||||||
|
@ -39,12 +37,12 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider {
|
||||||
this.dropItem = drop;
|
this.dropItem = drop;
|
||||||
this.minCount = minCount;
|
this.minCount = minCount;
|
||||||
this.maxCount = maxCount;
|
this.maxCount = maxCount;
|
||||||
this.expirience = expirience;
|
this.experience = experience;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int xpOnDrop(Random random) {
|
protected int xpOnDrop(Random random) {
|
||||||
return this.expirience > 0 ? random.nextInt(expirience) + 1 : 0;
|
return this.experience > 0 ? random.nextInt(experience) + 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -72,9 +70,7 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,16 +59,7 @@ public class EndPathBlock extends BlockBaseNotFull {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
String name = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
Map<String, String> map = Maps.newHashMap();
|
|
||||||
map.put("%top%", name + "_top");
|
|
||||||
map.put("%side%", name.replace("_path", "") + "_side");
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PATH, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,8 +74,9 @@ public class EndPathBlock extends BlockBaseNotFull {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath());
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath());
|
||||||
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createRandomTopModel(modelId);
|
return ModelsHelper.createRandomTopModel(modelId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,16 +35,10 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
return createBlockPattern(blockId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
||||||
Optional<String> pattern = createBlockPattern(blockId);
|
Optional<String> pattern = createBlockPattern(blockId);
|
||||||
|
@ -52,10 +46,10 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath());
|
"block/" + stateId.getPath());
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createRotatedModel(modelId, blockState.getValue(AXIS));
|
return ModelsHelper.createRotatedModel(modelId, blockState.getValue(AXIS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,12 @@ package ru.betterend.blocks.basis;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
@ -12,7 +15,9 @@ import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.PressurePlateBlock;
|
import net.minecraft.world.level.block.PressurePlateBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.storage.loot.LootContext;
|
import net.minecraft.world.level.storage.loot.LootContext;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import ru.betterend.client.models.BlockModelProvider;
|
import ru.betterend.client.models.BlockModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider {
|
public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider {
|
||||||
|
@ -29,13 +34,28 @@ public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvi
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (block.contains("down")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
|
Optional<String> pattern;
|
||||||
|
if (blockState.getValue(POWERED)) {
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), resourceLocation.getPath());
|
||||||
|
} else {
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), resourceLocation.getPath());
|
||||||
|
}
|
||||||
|
return ModelsHelper.fromPattern(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
|
String state = blockState.getValue(POWERED) ? "_down" : "_up";
|
||||||
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
|
"block/" + stateId.getPath() + state);
|
||||||
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
|
return ModelsHelper.createBlockSimple(modelId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,15 +147,6 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String path) {
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (path.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_GENERATED, path);
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
|
|
|
@ -36,10 +36,8 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -50,11 +48,11 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
SlabType type = blockState.getValue(TYPE);
|
SlabType type = blockState.getValue(TYPE);
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + "_" + type);
|
"block/" + stateId.getPath() + "_" + type);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
if (type == SlabType.TOP) {
|
if (type == SlabType.TOP) {
|
||||||
return ModelsHelper.createMultiVariant(modelId, BlockModelRotation.X180_Y0.getRotation(), true);
|
return ModelsHelper.createMultiVariant(modelId, BlockModelRotation.X180_Y0.getRotation(), true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,21 +38,7 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_STAIR, parentId.getPath(), blockId.getPath());
|
|
||||||
if (block.contains("inner")) {
|
|
||||||
pattern = Patterns.createJson(Patterns.BLOCK_STAIR_INNER, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
if (block.contains("outer")) {
|
|
||||||
pattern = Patterns.createJson(Patterns.BLOCK_STAIR_OUTER, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
return pattern;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return getBlockModel(resourceLocation, defaultBlockState());
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@ package ru.betterend.blocks.basis;
|
||||||
|
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
|
||||||
public class EndStonelateBlock extends EndPlateBlock {
|
public class EndStonePlateBlock extends EndPlateBlock {
|
||||||
public EndStonelateBlock(Block source) {
|
public EndStonePlateBlock(Block source) {
|
||||||
super(Sensitivity.MOBS, source);
|
super(Sensitivity.MOBS, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -97,17 +97,7 @@ public class EndTerrainBlock extends BlockBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
String name = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
Map<String, String> map = Maps.newHashMap();
|
|
||||||
map.put("%top%", "betterend:block/" + name + "_top");
|
|
||||||
map.put("%side%", "betterend:block/" + name + "_side");
|
|
||||||
map.put("%bottom%", "minecraft:block/end_stone");
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,13 +108,14 @@ public class EndTerrainBlock extends BlockBase {
|
||||||
textures.put("%top%", "betterend:block/" + name + "_top");
|
textures.put("%top%", "betterend:block/" + name + "_top");
|
||||||
textures.put("%side%", "betterend:block/" + name + "_side");
|
textures.put("%side%", "betterend:block/" + name + "_side");
|
||||||
textures.put("%bottom%", "minecraft:block/end_stone");
|
textures.put("%bottom%", "minecraft:block/end_stone");
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_PATH, textures);
|
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, textures);
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath());
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath());
|
||||||
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createRandomTopModel(modelId);
|
return ModelsHelper.createRandomTopModel(modelId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,20 +37,7 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
String name = blockId.getPath();
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_TRAPDOOR, new HashMap<String, String>() {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
{
|
|
||||||
put("%block%", name);
|
|
||||||
put("%texture%", name.replace("trapdoor", "door_side"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return getBlockModel(resourceLocation, defaultBlockState());
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,8 +55,9 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath());
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath());
|
||||||
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
boolean isTop = blockState.getValue(HALF) == Half.TOP;
|
boolean isTop = blockState.getValue(HALF) == Half.TOP;
|
||||||
boolean isOpen = blockState.getValue(OPEN);
|
boolean isOpen = blockState.getValue(OPEN);
|
||||||
int y = 0;
|
int y = 0;
|
||||||
|
|
|
@ -37,23 +37,7 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
|
||||||
if (block.contains("item")) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
if (block.contains("side_tall")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
if (block.contains("side")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath());
|
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath());
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
|
@ -61,35 +45,29 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
|
||||||
ResourceLocation thisId = Registry.BLOCK.getKey(this);
|
|
||||||
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
ResourceLocation postId = new ResourceLocation(thisId.getNamespace(),
|
String path = blockId.getPath();
|
||||||
"block/" + thisId.getPath() + "_post");
|
|
||||||
ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(),
|
|
||||||
"block/" + thisId.getPath() + "_side");
|
|
||||||
ResourceLocation sideTallId = new ResourceLocation(thisId.getNamespace(),
|
|
||||||
"block/" + thisId.getPath() + "_side_tall");
|
|
||||||
Optional<String> pattern = Optional.empty();
|
Optional<String> pattern = Optional.empty();
|
||||||
if (blockId.equals(postId)) {
|
if (path.endsWith("_post")) {
|
||||||
pattern = Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath());
|
pattern = Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath());
|
||||||
}
|
}
|
||||||
if (blockId.equals(sideId)) {
|
if (path.endsWith("_side")) {
|
||||||
pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath());
|
pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath());
|
||||||
}
|
}
|
||||||
if (blockId.equals(sideTallId)) {
|
if (path.endsWith("_side_tall")) {
|
||||||
pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath());
|
pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath());
|
||||||
}
|
}
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation postId = new ResourceLocation(blockId.getNamespace(),
|
ResourceLocation postId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + blockId.getPath() + "_post");
|
"block/" + stateId.getPath() + "_post");
|
||||||
ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(),
|
ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + blockId.getPath() + "_side");
|
"block/" + stateId.getPath() + "_side");
|
||||||
ResourceLocation sideTallId = new ResourceLocation(blockId.getNamespace(),
|
ResourceLocation sideTallId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + blockId.getPath() + "_side_tall");
|
"block/" + stateId.getPath() + "_side_tall");
|
||||||
registerBlockModel(postId, postId, blockState, modelCache);
|
registerBlockModel(postId, postId, blockState, modelCache);
|
||||||
registerBlockModel(sideId, sideId, blockState, modelCache);
|
registerBlockModel(sideId, sideId, blockState, modelCache);
|
||||||
registerBlockModel(sideTallId, sideTallId, blockState, modelCache);
|
registerBlockModel(sideTallId, sideTallId, blockState, modelCache);
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
package ru.betterend.blocks.basis;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.WeightedPressurePlateBlock;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.storage.loot.LootContext;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import ru.betterend.client.models.BlockModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
|
public class EndWeightedPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider {
|
||||||
|
private final Block parent;
|
||||||
|
|
||||||
|
public EndWeightedPlateBlock(Block source) {
|
||||||
|
super(15, FabricBlockSettings.copyOf(source).noCollission().noOcclusion().requiresCorrectToolForDrops().strength(0.5F));
|
||||||
|
this.parent = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
|
||||||
|
return Collections.singletonList(new ItemStack(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
|
return getBlockModel(resourceLocation, defaultBlockState());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
|
ResourceLocation parentId = Registry.BLOCK.getKey(parent);
|
||||||
|
Optional<String> pattern;
|
||||||
|
if (blockState.getValue(POWER) > 0) {
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), resourceLocation.getPath());
|
||||||
|
} else {
|
||||||
|
pattern = Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), resourceLocation.getPath());
|
||||||
|
}
|
||||||
|
return ModelsHelper.fromPattern(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
|
String state = blockState.getValue(POWER) > 0 ? "_down" : "_up";
|
||||||
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
|
"block/" + stateId.getPath() + state);
|
||||||
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
|
return ModelsHelper.createBlockSimple(modelId);
|
||||||
|
}
|
||||||
|
}
|
|
@ -110,16 +110,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
if (block.contains("item")) {
|
|
||||||
block = block.split("/")[1];
|
|
||||||
return Patterns.createJson(Patterns.ITEM_BLOCK, block);
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_CROSS, block);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return ModelsHelper.createBlockItem(resourceLocation);
|
return ModelsHelper.createBlockItem(resourceLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,24 +338,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
Map<String, String> textures = createTexturesMap();
|
|
||||||
if (block.contains("column_top")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures);
|
|
||||||
} else if (block.contains("column")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures);
|
|
||||||
} else if (block.contains("top")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures);
|
|
||||||
} else if (block.contains("bottom")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures);
|
|
||||||
} else if (block.contains("pillar")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures);
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,11 +373,11 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
PedestalState state = blockState.getValue(STATE);
|
PedestalState state = blockState.getValue(STATE);
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + "_" + state);
|
"block/" + stateId.getPath() + "_" + state);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
return ModelsHelper.createBlockSimple(modelId);
|
return ModelsHelper.createBlockSimple(modelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,12 +35,6 @@ public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeab
|
||||||
.isViewBlocking((state, world, pos) -> false));
|
.isViewBlocking((state, world, pos) -> false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
String texture = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BASE, texture, texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ERenderLayer getRenderLayer() {
|
public ERenderLayer getRenderLayer() {
|
||||||
return ERenderLayer.CUTOUT;
|
return ERenderLayer.CUTOUT;
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package ru.betterend.blocks.basis;
|
package ru.betterend.blocks.basis;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.client.resources.model.BlockModelRotation;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.BlockPos.MutableBlockPos;
|
import net.minecraft.core.BlockPos.MutableBlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
@ -28,11 +31,14 @@ import net.minecraft.world.level.material.FluidState;
|
||||||
import net.minecraft.world.level.material.Fluids;
|
import net.minecraft.world.level.material.Fluids;
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import ru.betterend.blocks.BlockProperties;
|
import ru.betterend.blocks.BlockProperties;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.render.ERenderLayer;
|
import ru.betterend.client.render.ERenderLayer;
|
||||||
import ru.betterend.interfaces.IRenderTypeable;
|
import ru.betterend.interfaces.IRenderTypeable;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable {
|
public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable {
|
||||||
|
@ -194,12 +200,18 @@ public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterlogg
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
ResourceLocation blockId = Registry.BLOCK.getKey(this);
|
Optional<String> pattern = Patterns.createJson(Patterns.BLOCK_CROSS_SHADED, resourceLocation.getPath());
|
||||||
if (block.contains("item")) {
|
return ModelsHelper.fromPattern(pattern);
|
||||||
return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath());
|
|
||||||
}
|
}
|
||||||
return Patterns.createJson(Patterns.BLOCK_CROSS_SHADED, block);
|
|
||||||
|
@Override
|
||||||
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
|
BlockModelRotation rotation = blockState.getValue(IS_FLOOR) ? BlockModelRotation.X0_Y0 : BlockModelRotation.X180_Y0;
|
||||||
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
|
stateId.getPath() + "_" + blockState.getValue(SIZE));
|
||||||
|
registerBlockModel(modelId, modelId, blockState, modelCache);
|
||||||
|
return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -65,15 +65,6 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider
|
||||||
return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL;
|
return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String block) {
|
|
||||||
String texture = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
if (block.contains("ceil")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_CEIL, texture, texture);
|
|
||||||
}
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, texture, texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
String blockName = resourceLocation.getPath();
|
String blockName = resourceLocation.getPath();
|
||||||
|
|
|
@ -105,20 +105,7 @@ public class TripleTerrainBlock extends EndTerrainBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String block) {
|
public BlockModel getItemModel(ResourceLocation blockId) {
|
||||||
String name = Registry.BLOCK.getKey(this).getPath();
|
|
||||||
if (block.endsWith("_middle")) {
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_BASE, name + "_top", name + "_top");
|
|
||||||
}
|
|
||||||
Map<String, String> map = Maps.newHashMap();
|
|
||||||
map.put("%top%", "betterend:block/" + name + "_top");
|
|
||||||
map.put("%side%", "betterend:block/" + name + "_side");
|
|
||||||
map.put("%bottom%", "minecraft:block/end_stone");
|
|
||||||
return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation blockId) {
|
|
||||||
return getBlockModel(blockId, defaultBlockState());
|
return getBlockModel(blockId, defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,12 +126,12 @@ public class TripleTerrainBlock extends EndTerrainBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
boolean isMiddle = isMiddle(blockState);
|
boolean isMiddle = isMiddle(blockState);
|
||||||
String middle = isMiddle ? "_middle" : "";
|
String middle = isMiddle ? "_middle" : "";
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(),
|
||||||
"block/" + resourceLocation.getPath() + middle);
|
"block/" + stateId.getPath() + middle);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
if (isMiddle) {
|
if (isMiddle) {
|
||||||
List<Variant> variants = Lists.newArrayList();
|
List<Variant> variants = Lists.newArrayList();
|
||||||
for (BlockModelRotation rotation : BlockModelRotation.values()) {
|
for (BlockModelRotation rotation : BlockModelRotation.values()) {
|
||||||
|
|
|
@ -13,7 +13,7 @@ import ru.betterend.blocks.basis.EndPillarBlock;
|
||||||
import ru.betterend.blocks.basis.EndSlabBlock;
|
import ru.betterend.blocks.basis.EndSlabBlock;
|
||||||
import ru.betterend.blocks.basis.EndStairsBlock;
|
import ru.betterend.blocks.basis.EndStairsBlock;
|
||||||
import ru.betterend.blocks.basis.EndStoneButtonBlock;
|
import ru.betterend.blocks.basis.EndStoneButtonBlock;
|
||||||
import ru.betterend.blocks.basis.EndStonelateBlock;
|
import ru.betterend.blocks.basis.EndStonePlateBlock;
|
||||||
import ru.betterend.blocks.basis.EndWallBlock;
|
import ru.betterend.blocks.basis.EndWallBlock;
|
||||||
import ru.betterend.blocks.basis.StoneLanternBlock;
|
import ru.betterend.blocks.basis.StoneLanternBlock;
|
||||||
import ru.betterend.recipe.CraftingRecipes;
|
import ru.betterend.recipe.CraftingRecipes;
|
||||||
|
@ -54,7 +54,7 @@ public class StoneMaterial {
|
||||||
slab = EndBlocks.registerBlock(name + "_slab", new EndSlabBlock(stone));
|
slab = EndBlocks.registerBlock(name + "_slab", new EndSlabBlock(stone));
|
||||||
wall = EndBlocks.registerBlock(name + "_wall", new EndWallBlock(stone));
|
wall = EndBlocks.registerBlock(name + "_wall", new EndWallBlock(stone));
|
||||||
button = EndBlocks.registerBlock(name + "_button", new EndStoneButtonBlock(stone));
|
button = EndBlocks.registerBlock(name + "_button", new EndStoneButtonBlock(stone));
|
||||||
pressure_plate = EndBlocks.registerBlock(name + "_plate", new EndStonelateBlock(stone));
|
pressure_plate = EndBlocks.registerBlock(name + "_plate", new EndStonePlateBlock(stone));
|
||||||
pedestal = EndBlocks.registerBlock(name + "_pedestal", new EndPedestal(stone));
|
pedestal = EndBlocks.registerBlock(name + "_pedestal", new EndPedestal(stone));
|
||||||
lantern = EndBlocks.registerBlock(name + "_lantern", new StoneLanternBlock(stone));
|
lantern = EndBlocks.registerBlock(name + "_lantern", new StoneLanternBlock(stone));
|
||||||
|
|
||||||
|
|
|
@ -12,23 +12,23 @@ import ru.betterend.BetterEnd;
|
||||||
|
|
||||||
import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION;
|
import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION;
|
||||||
|
|
||||||
public interface BlockModelProvider extends ModelProvider {
|
public interface BlockModelProvider extends ItemModelProvider {
|
||||||
default @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
default @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
|
||||||
Optional<String> pattern = Patterns.createBlockSimple(resourceLocation.getPath());
|
Optional<String> pattern = Patterns.createBlockSimple(resourceLocation.getPath());
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
default UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
default UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
|
ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath());
|
||||||
"block/" + resourceLocation.getPath());
|
registerBlockModel(stateId, modelId, blockState, modelCache);
|
||||||
registerBlockModel(resourceLocation, modelId, blockState, modelCache);
|
|
||||||
return ModelsHelper.createBlockSimple(modelId);
|
return ModelsHelper.createBlockSimple(modelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void registerBlockModel(ResourceLocation stateId, ResourceLocation modelId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
default void registerBlockModel(ResourceLocation stateId, ResourceLocation modelId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
|
||||||
if (!modelCache.containsKey(modelId)) {
|
if (!modelCache.containsKey(modelId)) {
|
||||||
UnbakedModel model = getBlockModel(stateId, blockState);
|
BlockModel model = getBlockModel(stateId, blockState);
|
||||||
if (model != null) {
|
if (model != null) {
|
||||||
|
model.name = modelId.toString();
|
||||||
modelCache.put(modelId, model);
|
modelCache.put(modelId, model);
|
||||||
} else {
|
} else {
|
||||||
BetterEnd.LOGGER.warning("Error loading model: {}", modelId);
|
BetterEnd.LOGGER.warning("Error loading model: {}", modelId);
|
||||||
|
|
|
@ -5,10 +5,8 @@ import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public interface ModelProvider {
|
public interface ItemModelProvider {
|
||||||
Optional<String> getModelString(String name);
|
default BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
|
|
||||||
default BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return ModelsHelper.createItemModel(resourceLocation.getPath());
|
return ModelsHelper.createItemModel(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -33,6 +33,11 @@ public class ModelsHelper {
|
||||||
return fromPattern(pattern);
|
return fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BlockModel createHandheldItem(String name) {
|
||||||
|
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_HANDHELD, "item/" + name);
|
||||||
|
return fromPattern(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
public static BlockModel createBlockItem(ResourceLocation resourceLocation) {
|
public static BlockModel createBlockItem(ResourceLocation resourceLocation) {
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath());
|
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath());
|
||||||
return fromPattern(pattern);
|
return fromPattern(pattern);
|
||||||
|
|
|
@ -21,12 +21,7 @@ public class EnchantedPetalItem extends ModelProviderItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return ModelsHelper.createItemModel("hydralux_petal");
|
return ModelsHelper.createItemModel("hydralux_petal");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,13 +9,13 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier;
|
||||||
import net.minecraft.world.entity.ai.attributes.Attributes;
|
import net.minecraft.world.entity.ai.attributes.Attributes;
|
||||||
import net.minecraft.world.item.ArmorItem;
|
import net.minecraft.world.item.ArmorItem;
|
||||||
import net.minecraft.world.item.ArmorMaterial;
|
import net.minecraft.world.item.ArmorMaterial;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class EndArmorItem extends ArmorItem implements ModelProvider {
|
public class EndArmorItem extends ArmorItem implements ItemModelProvider {
|
||||||
|
|
||||||
protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] {
|
protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] {
|
||||||
UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"),
|
UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"),
|
||||||
|
@ -48,9 +48,4 @@ public class EndArmorItem extends ArmorItem implements ModelProvider {
|
||||||
}
|
}
|
||||||
defaultModifiers.put(attribute, modifier);
|
defaultModifiers.put(attribute, modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String name) {
|
|
||||||
return Patterns.createItemGenerated(name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,19 +3,14 @@ package ru.betterend.item;
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.item.FishBucketItem;
|
import net.minecraft.world.item.FishBucketItem;
|
||||||
import net.minecraft.world.level.material.Fluids;
|
import net.minecraft.world.level.material.Fluids;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
import ru.betterend.registry.EndItems;
|
import ru.betterend.registry.EndItems;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EndBucketItem extends FishBucketItem implements ModelProvider {
|
public class EndBucketItem extends FishBucketItem implements ItemModelProvider {
|
||||||
public EndBucketItem(EntityType<?> type) {
|
public EndBucketItem(EntityType<?> type) {
|
||||||
super(type, Fluids.WATER, EndItems.makeItemSettings().stacksTo(1));
|
super(type, Fluids.WATER, EndItems.makeItemSettings().stacksTo(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String name) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_GENERATED, name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
14
src/main/java/ru/betterend/item/EndDiscItem.java
Normal file
14
src/main/java/ru/betterend/item/EndDiscItem.java
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
package ru.betterend.item;
|
||||||
|
|
||||||
|
import net.minecraft.sounds.SoundEvent;
|
||||||
|
import net.minecraft.world.item.RecordItem;
|
||||||
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class EndDiscItem extends RecordItem implements ItemModelProvider {
|
||||||
|
public EndDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) {
|
||||||
|
super(comparatorOutput, sound, settings);
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,24 +4,19 @@ import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.item.SpawnEggItem;
|
import net.minecraft.world.item.SpawnEggItem;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
import ru.betterend.client.models.ModelsHelper;
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider {
|
public class EndSpawnEggItem extends SpawnEggItem implements ItemModelProvider {
|
||||||
public EndSpawnEggItem(EntityType<?> type, int primaryColor, int secondaryColor, Properties settings) {
|
public EndSpawnEggItem(EntityType<?> type, int primaryColor, int secondaryColor, Properties settings) {
|
||||||
super(type, primaryColor, secondaryColor, settings);
|
super(type, primaryColor, secondaryColor, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath());
|
Optional<String> pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath());
|
||||||
return ModelsHelper.fromPattern(pattern);
|
return ModelsHelper.fromPattern(pattern);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
package ru.betterend.item;
|
|
||||||
|
|
||||||
import net.minecraft.sounds.SoundEvent;
|
|
||||||
import net.minecraft.world.item.RecordItem;
|
|
||||||
import ru.betterend.client.models.ModelProvider;
|
|
||||||
import ru.betterend.client.models.Patterns;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class ModelProviderDiscItem extends RecordItem implements ModelProvider {
|
|
||||||
public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) {
|
|
||||||
super(comparatorOutput, sound, settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<String> getModelString(String name) {
|
|
||||||
return Patterns.createJson(Patterns.ITEM_GENERATED, name);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,24 +3,19 @@ package ru.betterend.item;
|
||||||
import net.minecraft.client.renderer.block.model.BlockModel;
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
import ru.betterend.client.models.ModelsHelper;
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class ModelProviderItem extends Item implements ModelProvider {
|
public class ModelProviderItem extends Item implements ItemModelProvider {
|
||||||
public ModelProviderItem(Properties settings) {
|
public ModelProviderItem(Properties settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createItemGenerated(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockModel getModel(ResourceLocation resourceLocation) {
|
|
||||||
return ModelsHelper.createItemModel(resourceLocation.getPath());
|
return ModelsHelper.createItemModel(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package ru.betterend.item.tool;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
||||||
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.tags.Tag;
|
import net.minecraft.tags.Tag;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.item.AxeItem;
|
import net.minecraft.world.item.AxeItem;
|
||||||
|
@ -9,12 +11,13 @@ import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Tier;
|
import net.minecraft.world.item.Tier;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider {
|
public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ItemModelProvider {
|
||||||
public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) {
|
public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) {
|
||||||
super(material, attackDamage, attackSpeed, settings);
|
super(material, attackDamage, attackSpeed, settings);
|
||||||
}
|
}
|
||||||
|
@ -28,7 +31,7 @@ public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelPr
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_HANDHELD, name);
|
return ModelsHelper.createHandheldItem(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,9 @@ import com.google.common.collect.Sets;
|
||||||
|
|
||||||
import io.netty.util.internal.ThreadLocalRandom;
|
import io.netty.util.internal.ThreadLocalRandom;
|
||||||
import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.tags.Tag;
|
import net.minecraft.tags.Tag;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.EquipmentSlot;
|
import net.minecraft.world.entity.EquipmentSlot;
|
||||||
|
@ -27,11 +29,12 @@ import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.material.Material;
|
import net.minecraft.world.level.material.Material;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
import ru.betterend.registry.EndTags;
|
import ru.betterend.registry.EndTags;
|
||||||
|
|
||||||
public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider {
|
public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ItemModelProvider {
|
||||||
public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current());
|
public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current());
|
||||||
|
|
||||||
private final Multimap<Attribute, AttributeModifier> attributeModifiers;
|
private final Multimap<Attribute, AttributeModifier> attributeModifiers;
|
||||||
|
@ -58,9 +61,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
|
public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
|
||||||
stack.hurtAndBreak(1, attacker, ((entity) -> {
|
stack.hurtAndBreak(1, attacker, ((entity) -> entity.broadcastBreakEvent(EquipmentSlot.MAINHAND)));
|
||||||
entity.broadcastBreakEvent(EquipmentSlot.MAINHAND);
|
|
||||||
}));
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -68,9 +69,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M
|
||||||
@Override
|
@Override
|
||||||
public boolean mineBlock(ItemStack stack, Level world, BlockState state, BlockPos pos, LivingEntity miner) {
|
public boolean mineBlock(ItemStack stack, Level world, BlockState state, BlockPos pos, LivingEntity miner) {
|
||||||
if (state.getDestroySpeed(world, pos) != 0.0F) {
|
if (state.getDestroySpeed(world, pos) != 0.0F) {
|
||||||
stack.hurtAndBreak(1, miner, ((entity) -> {
|
stack.hurtAndBreak(1, miner, ((entity) -> entity.broadcastBreakEvent(EquipmentSlot.MAINHAND)));
|
||||||
entity.broadcastBreakEvent(EquipmentSlot.MAINHAND);
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -82,13 +81,13 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M
|
||||||
return this.getTier().getSpeed() * 2.0F;
|
return this.getTier().getSpeed() * 2.0F;
|
||||||
}
|
}
|
||||||
if (isCorrectToolForDrops(state)) {
|
if (isCorrectToolForDrops(state)) {
|
||||||
float mult = 1.0F;
|
float mult;
|
||||||
if (state.is(Blocks.DIAMOND_BLOCK) || state.is(Blocks.EMERALD_BLOCK) || state.is(Blocks.LAPIS_BLOCK) || state.is(Blocks.REDSTONE_BLOCK)) {
|
if (state.is(Blocks.DIAMOND_BLOCK) || state.is(Blocks.EMERALD_BLOCK) || state.is(Blocks.LAPIS_BLOCK) || state.is(Blocks.REDSTONE_BLOCK)) {
|
||||||
mult = this.getTier().getSpeed();
|
mult = this.getTier().getSpeed();
|
||||||
} else {
|
} else {
|
||||||
mult = this.getTier().getSpeed() / 2.0F;
|
mult = this.getTier().getSpeed() / 2.0F;
|
||||||
}
|
}
|
||||||
return mult > 1.0F ? mult : 1.0F;
|
return Math.max(mult, 1.0F);
|
||||||
}
|
}
|
||||||
return 1.0F;
|
return 1.0F;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +135,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_HANDHELD, name);
|
return ModelsHelper.createHandheldItem(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
package ru.betterend.item.tool;
|
package ru.betterend.item.tool;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.HoeItem;
|
import net.minecraft.world.item.HoeItem;
|
||||||
import net.minecraft.world.item.Tier;
|
import net.minecraft.world.item.Tier;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EndHoeItem extends HoeItem implements ModelProvider {
|
public class EndHoeItem extends HoeItem implements ItemModelProvider {
|
||||||
public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
|
public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
|
||||||
super(material, attackDamage, attackSpeed, settings);
|
super(material, attackDamage, attackSpeed, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_HANDHELD, name);
|
return ModelsHelper.createHandheldItem(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
||||||
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
||||||
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl;
|
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl;
|
||||||
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry;
|
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.tags.Tag;
|
import net.minecraft.tags.Tag;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
|
@ -12,12 +14,13 @@ import net.minecraft.world.item.PickaxeItem;
|
||||||
import net.minecraft.world.item.Tier;
|
import net.minecraft.world.item.Tier;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider {
|
public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ItemModelProvider {
|
||||||
public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
|
public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
|
||||||
super(material, attackDamage, attackSpeed, settings);
|
super(material, attackDamage, attackSpeed, settings);
|
||||||
}
|
}
|
||||||
|
@ -25,22 +28,22 @@ public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool,
|
||||||
@Override
|
@Override
|
||||||
public int getMiningLevel(Tag<Item> tag, BlockState state, ItemStack stack, LivingEntity user) {
|
public int getMiningLevel(Tag<Item> tag, BlockState state, ItemStack stack, LivingEntity user) {
|
||||||
if (tag.equals(FabricToolTags.PICKAXES)) {
|
if (tag.equals(FabricToolTags.PICKAXES)) {
|
||||||
return this.getTier().getLevel();
|
return getTier().getLevel();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getDestroySpeed(ItemStack stack, BlockState state) {
|
public float getDestroySpeed(ItemStack stack, BlockState state) {
|
||||||
if (this.getTier().getLevel() > 2 && state.getMaterial().equals(Blocks.END_STONE.defaultBlockState().getMaterial())) {
|
if (getTier().getLevel() > 2 && state.getMaterial().equals(Blocks.END_STONE.defaultBlockState().getMaterial())) {
|
||||||
return this.speed * 3;
|
return speed * 3;
|
||||||
}
|
}
|
||||||
Entry entry = ToolManagerImpl.entryNullable(state.getBlock());
|
Entry entry = ToolManagerImpl.entryNullable(state.getBlock());
|
||||||
return (entry != null && entry.getMiningLevel(FabricToolTags.PICKAXES) >= 0) ? this.speed : super.getDestroySpeed(stack, state);
|
return (entry != null && entry.getMiningLevel(FabricToolTags.PICKAXES) >= 0) ? speed : super.getDestroySpeed(stack, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_HANDHELD, name);
|
return ModelsHelper.createHandheldItem(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
||||||
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
||||||
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl;
|
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl;
|
||||||
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry;
|
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.tags.Tag;
|
import net.minecraft.tags.Tag;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
|
@ -11,12 +13,13 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.ShovelItem;
|
import net.minecraft.world.item.ShovelItem;
|
||||||
import net.minecraft.world.item.Tier;
|
import net.minecraft.world.item.Tier;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider {
|
public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ItemModelProvider {
|
||||||
public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) {
|
public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) {
|
||||||
super(material, attackDamage, attackSpeed, settings);
|
super(material, attackDamage, attackSpeed, settings);
|
||||||
}
|
}
|
||||||
|
@ -32,11 +35,11 @@ public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, M
|
||||||
@Override
|
@Override
|
||||||
public float getDestroySpeed(ItemStack stack, BlockState state) {
|
public float getDestroySpeed(ItemStack stack, BlockState state) {
|
||||||
Entry entry = ToolManagerImpl.entryNullable(state.getBlock());
|
Entry entry = ToolManagerImpl.entryNullable(state.getBlock());
|
||||||
return (entry != null && entry.getMiningLevel(FabricToolTags.SHOVELS) >= 0) ? this.speed : super.getDestroySpeed(stack, state);
|
return (entry != null && entry.getMiningLevel(FabricToolTags.SHOVELS) >= 0) ? speed : super.getDestroySpeed(stack, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_HANDHELD, name);
|
return ModelsHelper.createHandheldItem(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
package ru.betterend.item.tool;
|
package ru.betterend.item.tool;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.SwordItem;
|
import net.minecraft.world.item.SwordItem;
|
||||||
import net.minecraft.world.item.Tier;
|
import net.minecraft.world.item.Tier;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
|
import ru.betterend.client.models.ModelsHelper;
|
||||||
import ru.betterend.client.models.Patterns;
|
import ru.betterend.client.models.Patterns;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider {
|
public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ItemModelProvider {
|
||||||
public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
|
public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
|
||||||
super(material, attackDamage, attackSpeed, settings);
|
super(material, attackDamage, attackSpeed, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<String> getModelString(String name) {
|
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||||
return Patterns.createJson(Patterns.ITEM_HANDHELD, name);
|
return ModelsHelper.createHandheldItem(resourceLocation.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package ru.betterend.mixin.client;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.block.BlockModelShaper;
|
import net.minecraft.client.renderer.block.BlockModelShaper;
|
||||||
import net.minecraft.client.renderer.block.model.BlockModel;
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.client.renderer.block.model.MultiVariant;
|
|
||||||
import net.minecraft.client.renderer.block.model.multipart.MultiPart;
|
import net.minecraft.client.renderer.block.model.multipart.MultiPart;
|
||||||
import net.minecraft.client.resources.model.ModelBakery;
|
import net.minecraft.client.resources.model.ModelBakery;
|
||||||
import net.minecraft.client.resources.model.ModelResourceLocation;
|
import net.minecraft.client.resources.model.ModelResourceLocation;
|
||||||
|
@ -10,6 +9,7 @@ import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.packs.resources.ResourceManager;
|
import net.minecraft.server.packs.resources.ResourceManager;
|
||||||
|
import net.minecraft.world.item.BlockItem;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
@ -20,17 +20,13 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
import ru.betterend.client.models.BlockModelProvider;
|
import ru.betterend.client.models.BlockModelProvider;
|
||||||
import ru.betterend.client.models.ModelProvider;
|
import ru.betterend.client.models.ItemModelProvider;
|
||||||
import ru.betterend.world.generator.GeneratorOptions;
|
import ru.betterend.world.generator.GeneratorOptions;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Mixin(ModelBakery.class)
|
@Mixin(ModelBakery.class)
|
||||||
|
@ -45,11 +41,8 @@ public abstract class ModelLoaderMixin {
|
||||||
@Shadow
|
@Shadow
|
||||||
protected abstract void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel);
|
protected abstract void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel);
|
||||||
|
|
||||||
@Shadow
|
|
||||||
protected abstract BlockModel loadBlockModel(ResourceLocation resourceLocation);
|
|
||||||
|
|
||||||
@Inject(method = "loadModel", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "loadModel", at = @At("HEAD"), cancellable = true)
|
||||||
private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) throws IOException {
|
private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) {
|
||||||
if (resourceLocation instanceof ModelResourceLocation) {
|
if (resourceLocation instanceof ModelResourceLocation) {
|
||||||
String modId = resourceLocation.getNamespace();
|
String modId = resourceLocation.getNamespace();
|
||||||
String path = resourceLocation.getPath();
|
String path = resourceLocation.getPath();
|
||||||
|
@ -60,8 +53,17 @@ public abstract class ModelLoaderMixin {
|
||||||
ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json");
|
ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json");
|
||||||
if (!resourceManager.hasResource(itemModelLoc)) {
|
if (!resourceManager.hasResource(itemModelLoc)) {
|
||||||
Item item = Registry.ITEM.get(clearLoc);
|
Item item = Registry.ITEM.get(clearLoc);
|
||||||
if (item instanceof ModelProvider) {
|
ItemModelProvider modelProvider = null;
|
||||||
BlockModel model = ((ModelProvider) item).getModel(clearLoc);
|
if (item instanceof ItemModelProvider) {
|
||||||
|
modelProvider = (ItemModelProvider) item;
|
||||||
|
} else if (item instanceof BlockItem) {
|
||||||
|
Block block = Registry.BLOCK.get(clearLoc);
|
||||||
|
if (block instanceof ItemModelProvider) {
|
||||||
|
modelProvider = (ItemModelProvider) block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (modelProvider != null) {
|
||||||
|
BlockModel model = modelProvider.getItemModel(clearLoc);
|
||||||
if (model != null) {
|
if (model != null) {
|
||||||
model.name = itemLoc.toString();
|
model.name = itemLoc.toString();
|
||||||
cacheAndQueueDependencies(modelId, model);
|
cacheAndQueueDependencies(modelId, model);
|
||||||
|
@ -103,59 +105,6 @@ public abstract class ModelLoaderMixin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true)
|
|
||||||
private void be_loadModelPattern(ResourceLocation modelId, CallbackInfoReturnable<BlockModel> info) throws IOException {
|
|
||||||
ResourceLocation modelLocation = new ResourceLocation(modelId.getNamespace(), "models/" + modelId.getPath() + ".json");
|
|
||||||
if (!resourceManager.hasResource(modelLocation)) {
|
|
||||||
String[] data = modelId.getPath().split("/");
|
|
||||||
if (data.length > 1) {
|
|
||||||
ResourceLocation itemId = new ResourceLocation(modelId.getNamespace(), data[1]);
|
|
||||||
Optional<Block> block = Registry.BLOCK.getOptional(itemId);
|
|
||||||
if (block.isPresent()) {
|
|
||||||
if (block.get() instanceof ModelProvider) {
|
|
||||||
ModelProvider modelProvider = (ModelProvider) block.get();
|
|
||||||
Optional<BlockModel> model = be_getModel(data, modelId, modelProvider);
|
|
||||||
if (model.isPresent()) {
|
|
||||||
info.setReturnValue(model.get());
|
|
||||||
} else {
|
|
||||||
throw new FileNotFoundException("Error loading model: " + modelId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Optional<Item> item = Registry.ITEM.getOptional(itemId);
|
|
||||||
if (item.isPresent() && item.get() instanceof ModelProvider) {
|
|
||||||
ModelProvider modelProvider = (ModelProvider) item.get();
|
|
||||||
Optional<BlockModel> model = be_getModel(data, modelId, modelProvider);
|
|
||||||
if (model.isPresent()) {
|
|
||||||
info.setReturnValue(model.get());
|
|
||||||
} else {
|
|
||||||
throw new FileNotFoundException("Error loading model: " + modelId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<BlockModel> be_getModel(String[] data, ResourceLocation id, ModelProvider modelProvider) {
|
|
||||||
Optional<String> pattern;
|
|
||||||
if (id.getPath().contains("item")) {
|
|
||||||
pattern = modelProvider.getModelString(id.getPath());
|
|
||||||
} else {
|
|
||||||
if (data.length > 2) {
|
|
||||||
pattern = modelProvider.getModelString(data[2]);
|
|
||||||
} else {
|
|
||||||
pattern = modelProvider.getModelString(data[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pattern.isPresent()) {
|
|
||||||
BlockModel model = BlockModel.fromString(pattern.get());
|
|
||||||
model.name = id.toString();
|
|
||||||
return Optional.of(model);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModifyVariable(method = "loadModel", ordinal = 2, at = @At(value = "INVOKE"))
|
@ModifyVariable(method = "loadModel", ordinal = 2, at = @At(value = "INVOKE"))
|
||||||
public ResourceLocation be_switchModel(ResourceLocation id) {
|
public ResourceLocation be_switchModel(ResourceLocation id) {
|
||||||
if (GeneratorOptions.changeChorusPlant() && id.getNamespace().equals("minecraft") && id.getPath().startsWith("blockstates/") && id.getPath().contains("chorus") && !id.getPath().contains("custom_")) {
|
if (GeneratorOptions.changeChorusPlant() && id.getNamespace().equals("minecraft") && id.getPath().startsWith("blockstates/") && id.getPath().contains("chorus") && !id.getPath().contains("custom_")) {
|
||||||
|
|
|
@ -117,7 +117,7 @@ public class EndItems {
|
||||||
public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F);
|
public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F);
|
||||||
|
|
||||||
public static Item registerDisc(String name, int power, SoundEvent sound) {
|
public static Item registerDisc(String name, int power, SoundEvent sound) {
|
||||||
return registerItem(BetterEnd.makeID(name), new ModelProviderDiscItem(power, sound, makeItemSettings()));
|
return registerItem(BetterEnd.makeID(name), new EndDiscItem(power, sound, makeItemSettings()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Item registerItem(String name) {
|
public static Item registerItem(String name) {
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
{
|
|
||||||
"variants": {
|
|
||||||
"": {
|
|
||||||
"model": "betterend:block/violecite"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue