mirror of
https://github.com/TeamMidnightDust/Decorative.git
synced 2025-12-15 12:35:10 +01:00
Safety first
- Fire Hydrants and Guardrails are now working on Polymer!
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package eu.midnightdust.motschen.decorative.block;
|
||||
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayDirectionalModel;
|
||||
import eu.pb4.factorytools.api.block.FactoryBlock;
|
||||
import eu.pb4.polymer.virtualentity.api.ElementHolder;
|
||||
import net.minecraft.block.AbstractBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
@@ -13,6 +15,8 @@ import net.minecraft.item.ItemPlacementContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUsage;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
@@ -27,6 +31,7 @@ import net.minecraft.util.shape.VoxelShapes;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldView;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class FireHydrant extends HorizontalFacingBlock implements FactoryBlock {
|
||||
private static final VoxelShape NORTH_SHAPE;
|
||||
@@ -104,4 +109,13 @@ public class FireHydrant extends HorizontalFacingBlock implements FactoryBlock {
|
||||
public BlockState getPolymerBlockState(BlockState state) {
|
||||
return Blocks.BARRIER.getDefaultState();
|
||||
}
|
||||
@Override
|
||||
public BlockState getPolymerBreakEventBlockState(BlockState state, ServerPlayerEntity player) {
|
||||
return Blocks.RED_TERRACOTTA.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ElementHolder createElementHolder(ServerWorld world, BlockPos pos, BlockState initialBlockState) {
|
||||
return new ItemDisplayDirectionalModel(initialBlockState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package eu.midnightdust.motschen.decorative.block;
|
||||
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayDirectionalModel;
|
||||
import eu.pb4.factorytools.api.block.FactoryBlock;
|
||||
import eu.pb4.polymer.virtualentity.api.ElementHolder;
|
||||
import net.minecraft.block.AbstractBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
@@ -9,6 +11,8 @@ import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.HorizontalFacingBlock;
|
||||
import net.minecraft.block.ShapeContext;
|
||||
import net.minecraft.item.ItemPlacementContext;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.state.StateManager;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@@ -17,6 +21,7 @@ import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.util.shape.VoxelShapes;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.WorldView;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class Guardrail extends HorizontalFacingBlock implements FactoryBlock {
|
||||
private static final VoxelShape NORTH_SHAPE;
|
||||
@@ -83,4 +88,13 @@ public class Guardrail extends HorizontalFacingBlock implements FactoryBlock {
|
||||
public BlockState getPolymerBlockState(BlockState state) {
|
||||
return Blocks.BARRIER.getDefaultState();
|
||||
}
|
||||
@Override
|
||||
public BlockState getPolymerBreakEventBlockState(BlockState state, ServerPlayerEntity player) {
|
||||
return Blocks.IRON_BLOCK.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ElementHolder createElementHolder(ServerWorld world, BlockPos pos, BlockState initialBlockState) {
|
||||
return new ItemDisplayDirectionalModel(initialBlockState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayCeilingFanMo
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayChristmasLightsModel;
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayChristmasTreeModel;
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayDigitalClockModel;
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayDirectionalModel;
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayDoubleLampModel;
|
||||
import eu.midnightdust.motschen.decorative.polymer.model.ItemDisplayLampModel;
|
||||
|
||||
@@ -17,5 +18,6 @@ public class PolymerSupport {
|
||||
ItemDisplayDigitalClockModel.initModels();
|
||||
ItemDisplayDoubleLampModel.initModels();
|
||||
ItemDisplayLampModel.initModels();
|
||||
ItemDisplayDirectionalModel.initModels();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package eu.midnightdust.motschen.decorative.polymer.model;
|
||||
|
||||
import eu.midnightdust.motschen.decorative.block.FireHydrant;
|
||||
import eu.midnightdust.motschen.decorative.block.Guardrail;
|
||||
import eu.midnightdust.motschen.decorative.config.DecorativeConfig;
|
||||
import eu.pb4.factorytools.api.resourcepack.BaseItemProvider;
|
||||
import eu.pb4.factorytools.api.virtualentity.BlockModel;
|
||||
import eu.pb4.factorytools.api.virtualentity.ItemDisplayElementUtil;
|
||||
import eu.pb4.polymer.virtualentity.api.attachment.BlockAwareAttachment;
|
||||
import eu.pb4.polymer.virtualentity.api.attachment.HolderAttachment;
|
||||
import eu.pb4.polymer.virtualentity.api.elements.ItemDisplayElement;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.RotationAxis;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
import static eu.midnightdust.motschen.decorative.DecorativeMain.id;
|
||||
|
||||
public class ItemDisplayDirectionalModel extends BlockModel {
|
||||
private final ItemDisplayElement main;
|
||||
public static ItemStack FIRE_HYDRANT;
|
||||
public static ItemStack GUARDRAIL;
|
||||
|
||||
public static void initModels() {
|
||||
FIRE_HYDRANT = BaseItemProvider.requestModel(id("block/fire_hydrant"));
|
||||
GUARDRAIL = BaseItemProvider.requestModel(id("block/guardrail"));
|
||||
}
|
||||
|
||||
public ItemDisplayDirectionalModel(BlockState state) {
|
||||
this.main = ItemDisplayElementUtil.createSimple(getModel(state));
|
||||
this.main.setDisplaySize(1, 1);
|
||||
this.main.setScale(new Vector3f(2));
|
||||
this.main.setRightRotation(RotationAxis.POSITIVE_Y.rotationDegrees(getRotation(state)));
|
||||
this.main.setViewRange((DecorativeConfig.viewDistance / 100f));
|
||||
this.addElement(this.main);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyUpdate(HolderAttachment.UpdateType updateType) {
|
||||
if (updateType == BlockAwareAttachment.BLOCK_STATE_UPDATE) {
|
||||
var state = this.blockState();
|
||||
this.main.setRightRotation(RotationAxis.POSITIVE_Y.rotationDegrees(getRotation(state)));
|
||||
|
||||
this.tick();
|
||||
}
|
||||
}
|
||||
public ItemStack getModel(BlockState state) {
|
||||
if (state.getBlock() instanceof FireHydrant) return FIRE_HYDRANT;
|
||||
else return GUARDRAIL;
|
||||
}
|
||||
public float getRotation(BlockState state) {
|
||||
if (state.getBlock() instanceof FireHydrant) return state.get(FireHydrant.FACING).getHorizontal() * -90;
|
||||
else return state.get(Guardrail.FACING).getHorizontal() * -90;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user