package net.minecraft.world.level.block; import com.google.common.base.Suppliers; import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; import com.mojang.serialization.Codec; import java.util.Optional; import java.util.function.Supplier; import net.minecraft.util.StringRepresentable; import net.minecraft.world.level.block.state.BlockState; public interface WeatheringCopper extends ChangeOverTimeBlock { Supplier> NEXT_BY_BLOCK = Suppliers.memoize( () -> ImmutableBiMap.builder() .put(Blocks.COPPER_BLOCK, Blocks.EXPOSED_COPPER) .put(Blocks.EXPOSED_COPPER, Blocks.WEATHERED_COPPER) .put(Blocks.WEATHERED_COPPER, Blocks.OXIDIZED_COPPER) .put(Blocks.CUT_COPPER, Blocks.EXPOSED_CUT_COPPER) .put(Blocks.EXPOSED_CUT_COPPER, Blocks.WEATHERED_CUT_COPPER) .put(Blocks.WEATHERED_CUT_COPPER, Blocks.OXIDIZED_CUT_COPPER) .put(Blocks.CHISELED_COPPER, Blocks.EXPOSED_CHISELED_COPPER) .put(Blocks.EXPOSED_CHISELED_COPPER, Blocks.WEATHERED_CHISELED_COPPER) .put(Blocks.WEATHERED_CHISELED_COPPER, Blocks.OXIDIZED_CHISELED_COPPER) .put(Blocks.CUT_COPPER_SLAB, Blocks.EXPOSED_CUT_COPPER_SLAB) .put(Blocks.EXPOSED_CUT_COPPER_SLAB, Blocks.WEATHERED_CUT_COPPER_SLAB) .put(Blocks.WEATHERED_CUT_COPPER_SLAB, Blocks.OXIDIZED_CUT_COPPER_SLAB) .put(Blocks.CUT_COPPER_STAIRS, Blocks.EXPOSED_CUT_COPPER_STAIRS) .put(Blocks.EXPOSED_CUT_COPPER_STAIRS, Blocks.WEATHERED_CUT_COPPER_STAIRS) .put(Blocks.WEATHERED_CUT_COPPER_STAIRS, Blocks.OXIDIZED_CUT_COPPER_STAIRS) .put(Blocks.COPPER_DOOR, Blocks.EXPOSED_COPPER_DOOR) .put(Blocks.EXPOSED_COPPER_DOOR, Blocks.WEATHERED_COPPER_DOOR) .put(Blocks.WEATHERED_COPPER_DOOR, Blocks.OXIDIZED_COPPER_DOOR) .put(Blocks.COPPER_TRAPDOOR, Blocks.EXPOSED_COPPER_TRAPDOOR) .put(Blocks.EXPOSED_COPPER_TRAPDOOR, Blocks.WEATHERED_COPPER_TRAPDOOR) .put(Blocks.WEATHERED_COPPER_TRAPDOOR, Blocks.OXIDIZED_COPPER_TRAPDOOR) .put(Blocks.COPPER_GRATE, Blocks.EXPOSED_COPPER_GRATE) .put(Blocks.EXPOSED_COPPER_GRATE, Blocks.WEATHERED_COPPER_GRATE) .put(Blocks.WEATHERED_COPPER_GRATE, Blocks.OXIDIZED_COPPER_GRATE) .put(Blocks.COPPER_BULB, Blocks.EXPOSED_COPPER_BULB) .put(Blocks.EXPOSED_COPPER_BULB, Blocks.WEATHERED_COPPER_BULB) .put(Blocks.WEATHERED_COPPER_BULB, Blocks.OXIDIZED_COPPER_BULB) .build() ); Supplier> PREVIOUS_BY_BLOCK = Suppliers.memoize(() -> NEXT_BY_BLOCK.get().inverse()); static Optional getPrevious(Block p_154891_) { return Optional.ofNullable(PREVIOUS_BY_BLOCK.get().get(p_154891_)); } static Block getFirst(Block p_154898_) { Block block = p_154898_; for (Block block1 = PREVIOUS_BY_BLOCK.get().get(p_154898_); block1 != null; block1 = PREVIOUS_BY_BLOCK.get().get(block1)) { block = block1; } return block; } static Optional getPrevious(BlockState p_154900_) { return getPrevious(p_154900_.getBlock()).map(p_154903_ -> p_154903_.withPropertiesOf(p_154900_)); } static Optional getNext(Block p_154905_) { return Optional.ofNullable(NEXT_BY_BLOCK.get().get(p_154905_)); } static BlockState getFirst(BlockState p_154907_) { return getFirst(p_154907_.getBlock()).withPropertiesOf(p_154907_); } @Override default Optional getNext(BlockState p_154893_) { return getNext(p_154893_.getBlock()).map(p_154896_ -> p_154896_.withPropertiesOf(p_154893_)); } @Override default float getChanceModifier() { return this.getAge() == WeatheringCopper.WeatherState.UNAFFECTED ? 0.75F : 1.0F; } public static enum WeatherState implements StringRepresentable { UNAFFECTED("unaffected"), EXPOSED("exposed"), WEATHERED("weathered"), OXIDIZED("oxidized"); public static final Codec CODEC = StringRepresentable.fromEnum(WeatheringCopper.WeatherState::values); private final String name; private WeatherState(final String p_309663_) { this.name = p_309663_; } @Override public String getSerializedName() { return this.name; } } }