Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Where are the basic color values coded?


Drachenbauer
 Share

Recommended Posts

Most things that use the colors (excluding leather armor and such) don't use them dynamically; you'd have to actually change the textures, names, etc. to have any effect.

In any case, no. There's no reasonable way to change anything to do with DyeColor. Oh right, reflection duh.

Edited by imacatlolol
I'm dumb

I'm eager to learn and am prone to mistakes. Don't hesitate to tell me how I can improve.

Link to comment
Share on other sites

The sheep has this:

 

public static DyeColor getRandomSheepColor(Random random)
    {
        int i = random.nextInt(100);
        
        if (i < 5)
        {
            return DyeColor.BLACK;
        }
        else if (i < 10)
        {
            return DyeColor.GRAY;
        }
        else if (i < 15)
        {
            return DyeColor.LIGHT_GRAY;
        }
        else if (i < 18)
        {
            return DyeColor.BROWN;
        }
        else if (random.nextInt(500) == 0)
        {
            return DyeColor.PINK;
        }
        else
        {
            return DyeColor.WHITE;
        }
    }

 

Link to comment
Share on other sites

Yes.

I know about theese fields.

Must i extend and override the sheep to replace the stuff, shown above, with such custom colorvalues?

I don´t know, how to put stuff with custom values in theese fields, behind the "return" in this mthod there?

Edited by Drachenbauer
Link to comment
Share on other sites

At searching for "change fields with reflection" i found this:

        Class<?> clazz = Class.forName("Child");
        Object cc = clazz.newInstance();

        Field f1 = cc.getClass().getField("a_field");
        f1.set(cc, "reflecting on life");

 

But if i try to use DyeColors in there, it says things about IllegalAcessExeption.

i hat to put theese exeptionhandlings to the header of the function, i placed this in.

 

another question:

A color-field holds alot of content;

WHITE(0, "white", 16777215, MaterialColor.SNOW, 16777215, 16777215),

how do i put all this into the setter of this reflection-stuff?

Edited by Drachenbauer
Link to comment
Share on other sites

  1. You have to use ObfuscationReflectionHelper with SRG names when reflecting fields from vanilla Minecraft, otherwise your code will not work outside the development enviornment.
  2. If you want to access private fields using reflection, you have to use setAccessible(true). ObfuscationReflecitonHelper already does this for you.
  3. 11 minutes ago, Drachenbauer said:

    A color-field holds alot of content;

    WHITE(0, "white", 16777215, MaterialColor.SNOW, 16777215, 16777215),

    how do i put all this into the setter of this reflection-stuff?

    Look at the DyeColor constructor and how it stores these parameters into fields. The fields are what you want to override. Please learn basic Java.
Link to comment
Share on other sites

        ObfuscationReflectionHelper.setPrivateValue(DyeColor.class, DyeColor.WHITE, 16777215, "colorvalue");
        ObfuscationReflectionHelper.setPrivateValue(DyeColor.class, DyeColor.WHITE, 16777215, "fireworkColor");
        ObfuscationReflectionHelper.setPrivateValue(DyeColor.class, DyeColor.WHITE, 16777215, "textColor");

Is this the way to do it?

 

To repeat for all 16 colors.

Edited by Drachenbauer
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • hi, im here againt because i need something, the all my overlays are 256x256, even those from some overlay tutorials, but i've seen some people that uses overlays of 1920x1080 and i tried but it kind of duplicate (my overlays of 256x256 works)   (1920x1080) this is how it should look: https://imgur.com/a/p8pXEzn and this is how IT LOOKS: https://imgur.com/a/4F35AAP mc.getTextureManager().bindTexture(textureLocation); //gui.drawTexturedModalRect(x, y, imageOffsetX, imageOffsetY, imageSizeX, imageSizeY,zLevel); gui.drawTexturedModalRect(x, y, 0, 0, 1920, 1080,100); mc.getTextureManager().bindTexture(AbstractGui.GUI_ICONS_LOCATION);  
    • Piston Block: public class HoneyStickyPistonBlock extends PistonBlock { private final boolean isSticky; public HoneyStickyPistonBlock(boolean sticky, Properties properties) { super(sticky, properties); this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(EXTENDED, Boolean.valueOf(false))); this.isSticky = sticky; } @Override //Nothing edited, put in for checkformove() public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { if (!worldIn.isRemote) { this.checkForMove(worldIn, pos, state); } } @Override //Nothing edited, put in for checkformove() public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { if (!worldIn.isRemote) { this.checkForMove(worldIn, pos, state); } } @Override //Nothing edited, put in for checkformove() public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { if (!oldState.isIn(state.getBlock())) { if (!worldIn.isRemote && worldIn.getTileEntity(pos) == null) { this.checkForMove(worldIn, pos, state); } } } @Override //Nothing edited, may not be necessary public BlockState getStateForPlacement(BlockItemUseContext context) { return this.getDefaultState().with(FACING, context.getNearestLookingDirection().getOpposite()).with(EXTENDED, Boolean.valueOf(false)); } private void checkForMove(World worldIn, BlockPos pos, BlockState state) { Direction direction = state.get(FACING); boolean flag = this.shouldBeExtended(worldIn, pos, direction); if (flag && !state.get(EXTENDED)) { if ((new PistonBlockStructureHelper(worldIn, pos, direction, true)).canMove()) { worldIn.addBlockEvent(pos, this, 0, direction.getIndex()); } } else if (!flag && state.get(EXTENDED)) { BlockPos blockpos = pos.offset(direction, 2); BlockState blockstate = worldIn.getBlockState(blockpos); int i = 1; if (blockstate.isIn(Blocks.MOVING_PISTON) && blockstate.get(FACING) == direction) { TileEntity tileentity = worldIn.getTileEntity(blockpos); if (tileentity instanceof HoneyStickyPistonTileEntity) { HoneyStickyPistonTileEntity pistontileentity = (HoneyStickyPistonTileEntity)tileentity; if (pistontileentity.isExtending() && (pistontileentity.getProgress(0.0F) < 0.5F || worldIn.getGameTime() == pistontileentity.getLastTicked() || ((ServerWorld)worldIn).isInsideTick())) { i = 2; } } } worldIn.addBlockEvent(pos, this, i, direction.getIndex()); } } private boolean shouldBeExtended(World worldIn, BlockPos pos, Direction facing) { for(Direction direction : Direction.values()) { if (direction != facing && worldIn.isSidePowered(pos.offset(direction), direction)) { return true; } } if (worldIn.isSidePowered(pos, Direction.DOWN)) { return true; } else { BlockPos blockpos = pos.up(); for(Direction direction1 : Direction.values()) { if (direction1 != Direction.DOWN && worldIn.isSidePowered(blockpos.offset(direction1), direction1)) { return true; } } return false; } } @Override @Deprecated public boolean eventReceived(BlockState state, World worldIn, BlockPos pos, int id, int param) { Direction direction = state.get(FACING); if (!worldIn.isRemote) { boolean flag = this.shouldBeExtended(worldIn, pos, direction); if (flag && (id == 1 || id == 2)) { worldIn.setBlockState(pos, state.with(EXTENDED, Boolean.valueOf(true)), 2); return false; } if (!flag && id == 0) { return false; } } if (id == 0) { if (net.minecraftforge.event.ForgeEventFactory.onPistonMovePre(worldIn, pos, direction, true)) return false; if (!this.doMove(worldIn, pos, direction, true)) { return false; } worldIn.setBlockState(pos, state.with(EXTENDED, Boolean.valueOf(true)), 67); worldIn.playSound((PlayerEntity)null, pos, SoundEvents.BLOCK_PISTON_EXTEND, SoundCategory.BLOCKS, 0.5F, worldIn.rand.nextFloat() * 0.25F + 0.6F); } else if (id == 1 || id == 2) { if (net.minecraftforge.event.ForgeEventFactory.onPistonMovePre(worldIn, pos, direction, false)) return false; TileEntity tileentity1 = worldIn.getTileEntity(pos.offset(direction)); if (tileentity1 instanceof HoneyStickyPistonTileEntity) { ((HoneyStickyPistonTileEntity)tileentity1).clearPistonTileEntity(); } BlockState blockstate = Blocks.MOVING_PISTON.getDefaultState().with(MovingPistonBlock.FACING, direction).with(MovingPistonBlock.TYPE, PistonType.STICKY); worldIn.setBlockState(pos, blockstate, 20); worldIn.setTileEntity(pos, new HoneyStickyPistonTileEntity(this.getDefaultState().with(FACING, Direction.byIndex(param & 7)), direction, false, true)); worldIn.func_230547_a_(pos, blockstate.getBlock()); blockstate.updateNeighbours(worldIn, pos, 2); if (this.isSticky) { BlockPos blockpos = pos.add(direction.getXOffset() * 2, direction.getYOffset() * 2, direction.getZOffset() * 2); BlockState blockstate1 = worldIn.getBlockState(blockpos); boolean flag1 = false; if (blockstate1.isIn(Blocks.MOVING_PISTON)) { TileEntity tileentity = worldIn.getTileEntity(blockpos); if (tileentity instanceof HoneyStickyPistonTileEntity) { HoneyStickyPistonTileEntity pistontileentity = (HoneyStickyPistonTileEntity)tileentity; if (pistontileentity.getFacing() == direction && pistontileentity.isExtending()) { pistontileentity.clearPistonTileEntity(); flag1 = true; } } } if (!flag1) { if (id != 1 || blockstate1.isAir() || !canPush(blockstate1, worldIn, blockpos, direction.getOpposite(), false, direction) || blockstate1.getPushReaction() != PushReaction.NORMAL && !blockstate1.isIn(BlockInit.HONEY_STICKY_PISTON.get())) { worldIn.removeBlock(pos.offset(direction), false); } else { this.doMove(worldIn, pos, direction, false); } } } else { worldIn.removeBlock(pos.offset(direction), false); } worldIn.playSound((PlayerEntity)null, pos, SoundEvents.BLOCK_PISTON_CONTRACT, SoundCategory.BLOCKS, 0.5F, worldIn.rand.nextFloat() * 0.15F + 0.6F); } net.minecraftforge.event.ForgeEventFactory.onPistonMovePost(worldIn, pos, direction, (id == 0)); return true; } //Static method weirdness? might need to remove because it's not polymorphic public static boolean canPush(BlockState blockStateIn, World worldIn, BlockPos pos, Direction facing, boolean destroyBlocks, Direction direction) { if (pos.getY() >= 0 && pos.getY() <= worldIn.getHeight() - 1 && worldIn.getWorldBorder().contains(pos)) { if (blockStateIn.isAir()) { return true; } else if (!blockStateIn.isIn(Blocks.OBSIDIAN) && !blockStateIn.isIn(Blocks.CRYING_OBSIDIAN) && !blockStateIn.isIn(Blocks.RESPAWN_ANCHOR)) { if (facing == Direction.DOWN && pos.getY() == 0) { return false; } else if (facing == Direction.UP && pos.getY() == worldIn.getHeight() - 1) { return false; } else { if (!blockStateIn.isIn(Blocks.PISTON) && !blockStateIn.isIn(Blocks.STICKY_PISTON) && !blockStateIn.isIn(BlockInit.HONEY_STICKY_PISTON.get())) { if (blockStateIn.getBlockHardness(worldIn, pos) == -1.0F) { return false; } switch(blockStateIn.getPushReaction()) { case BLOCK: return false; case DESTROY: return destroyBlocks; case PUSH_ONLY: return facing == direction; } } else if (blockStateIn.get(EXTENDED)) { return false; } return !blockStateIn.hasTileEntity(); } } else { return false; } } else { return false; } } private boolean doMove(World worldIn, BlockPos pos, Direction directionIn, boolean extending) { BlockPos blockpos = pos.offset(directionIn); if (!extending && worldIn.getBlockState(blockpos).isIn(BlockInit.HONEY_STICKY_PISTON_HEAD.get())) { worldIn.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 20); } PistonBlockStructureHelper pistonblockstructurehelper = new PistonBlockStructureHelper(worldIn, pos, directionIn, extending); if (!pistonblockstructurehelper.canMove()) { return false; } else { Map<BlockPos, BlockState> map = Maps.newHashMap(); List<BlockPos> list = pistonblockstructurehelper.getBlocksToMove(); List<BlockState> list1 = Lists.newArrayList(); for(int i = 0; i < list.size(); ++i) { BlockPos blockpos1 = list.get(i); BlockState blockstate = worldIn.getBlockState(blockpos1); list1.add(blockstate); map.put(blockpos1, blockstate); } List<BlockPos> list2 = pistonblockstructurehelper.getBlocksToDestroy(); BlockState[] ablockstate = new BlockState[list.size() + list2.size()]; Direction direction = extending ? directionIn : directionIn.getOpposite(); int j = 0; for(int k = list2.size() - 1; k >= 0; --k) { BlockPos blockpos2 = list2.get(k); BlockState blockstate1 = worldIn.getBlockState(blockpos2); TileEntity tileentity = blockstate1.hasTileEntity() ? worldIn.getTileEntity(blockpos2) : null; spawnDrops(blockstate1, worldIn, blockpos2, tileentity); worldIn.setBlockState(blockpos2, Blocks.AIR.getDefaultState(), 18); ablockstate[j++] = blockstate1; } for(int l = list.size() - 1; l >= 0; --l) { BlockPos blockpos3 = list.get(l); BlockState blockstate5 = worldIn.getBlockState(blockpos3); blockpos3 = blockpos3.offset(direction); map.remove(blockpos3); worldIn.setBlockState(blockpos3, Blocks.MOVING_PISTON.getDefaultState().with(FACING, directionIn), 68); worldIn.setTileEntity(blockpos3, new HoneyStickyPistonTileEntity(list1.get(l), directionIn, extending, false)); ablockstate[j++] = blockstate5; } if (extending) { PistonType pistontype = PistonType.STICKY; BlockState blockstate4 = BlockInit.HONEY_STICKY_PISTON_HEAD.get().getDefaultState().with(HoneyStickyPistonHeadBlock.FACING, directionIn).with(HoneyStickyPistonHeadBlock.TYPE, pistontype); BlockState blockstate6 = Blocks.MOVING_PISTON.getDefaultState().with(MovingPistonBlock.FACING, directionIn).with(MovingPistonBlock.TYPE, PistonType.STICKY); map.remove(blockpos); worldIn.setBlockState(blockpos, blockstate6, 68); worldIn.setTileEntity(blockpos, new HoneyStickyPistonTileEntity(blockstate4, directionIn, true, true)); } BlockState blockstate3 = Blocks.AIR.getDefaultState(); for(BlockPos blockpos4 : map.keySet()) { worldIn.setBlockState(blockpos4, blockstate3, 82); } for(Entry<BlockPos, BlockState> entry : map.entrySet()) { BlockPos blockpos5 = entry.getKey(); BlockState blockstate2 = entry.getValue(); blockstate2.updateDiagonalNeighbors(worldIn, blockpos5, 2); blockstate3.updateNeighbours(worldIn, blockpos5, 2); blockstate3.updateDiagonalNeighbors(worldIn, blockpos5, 2); } j = 0; for(int i1 = list2.size() - 1; i1 >= 0; --i1) { BlockState blockstate7 = ablockstate[j++]; BlockPos blockpos6 = list2.get(i1); blockstate7.updateDiagonalNeighbors(worldIn, blockpos6, 2); worldIn.notifyNeighborsOfStateChange(blockpos6, blockstate7.getBlock()); } for(int j1 = list.size() - 1; j1 >= 0; --j1) { worldIn.notifyNeighborsOfStateChange(list.get(j1), ablockstate[j++].getBlock()); } if (extending) { worldIn.notifyNeighborsOfStateChange(blockpos, BlockInit.HONEY_STICKY_PISTON_HEAD.get()); } return true; } } @Override public PushReaction getPushReaction(BlockState state) { return PushReaction.NORMAL; } } Piston Head Block: public class HoneyStickyPistonHeadBlock extends PistonHeadBlock{ private static final VoxelShape[] EXTENDED_SHAPES = getShapesForExtension(true); private static final VoxelShape[] UNEXTENDED_SHAPES = getShapesForExtension(false); private static VoxelShape[] getShapesForExtension(boolean extended) { return Arrays.stream(Direction.values()).map((direction) -> { return getShapeForDirection(direction, extended); }).toArray((id) -> { return new VoxelShape[id]; }); } private static VoxelShape getShapeForDirection(Direction direction, boolean shortArm) { switch(direction) { case DOWN: default: return VoxelShapes.or(PISTON_EXTENSION_DOWN_AABB, shortArm ? SHORT_DOWN_ARM_AABB : DOWN_ARM_AABB); case UP: return VoxelShapes.or(PISTON_EXTENSION_UP_AABB, shortArm ? SHORT_UP_ARM_AABB : UP_ARM_AABB); case NORTH: return VoxelShapes.or(PISTON_EXTENSION_NORTH_AABB, shortArm ? SHORT_NORTH_ARM_AABB : NORTH_ARM_AABB); case SOUTH: return VoxelShapes.or(PISTON_EXTENSION_SOUTH_AABB, shortArm ? SHORT_SOUTH_ARM_AABB : SOUTH_ARM_AABB); case WEST: return VoxelShapes.or(PISTON_EXTENSION_WEST_AABB, shortArm ? SHORT_WEST_ARM_AABB : WEST_ARM_AABB); case EAST: return VoxelShapes.or(PISTON_EXTENSION_EAST_AABB, shortArm ? SHORT_EAST_ARM_AABB : EAST_ARM_AABB); } } public HoneyStickyPistonHeadBlock(AbstractBlock.Properties properties) { super(properties); this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(TYPE, PistonType.STICKY).with(SHORT, Boolean.valueOf(false))); } @Override //Nothing changed, may not be necessary public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return (state.get(SHORT) ? EXTENDED_SHAPES : UNEXTENDED_SHAPES)[state.get(FACING).ordinal()]; } private boolean isExtended(BlockState baseState, BlockState extendedState) { return extendedState.isIn(BlockInit.HONEY_STICKY_PISTON.get()) && extendedState.get(HoneyStickyPistonBlock.EXTENDED) && extendedState.get(FACING) == baseState.get(FACING); } @Override //Nothing changed, may not be necessary public void onBlockHarvested(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { if (!worldIn.isRemote && player.abilities.isCreativeMode) { BlockPos blockpos = pos.offset(state.get(FACING).getOpposite()); if (this.isExtended(state, worldIn.getBlockState(blockpos))) { worldIn.destroyBlock(blockpos, false); } } super.onBlockHarvested(worldIn, pos, state, player); } @Override //Nothing changed, may not be necessary public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { BlockState blockstate = worldIn.getBlockState(pos.offset(state.get(FACING).getOpposite())); return this.isExtended(state, blockstate) || blockstate.isIn(Blocks.MOVING_PISTON) && blockstate.get(FACING) == state.get(FACING); } @Override public ItemStack getItem(IBlockReader worldIn, BlockPos pos, BlockState state) { return new ItemStack(BlockInit.HONEY_STICKY_PISTON.get()); } }  
    • ive been trying to install forge 1.18.1 for 2 days now and with no success and i want to ask can some one upload their .minecraft folder with installed forge 1.18.1 ?
    • Hi, I am trying to implement "stun" mob effect which would prevent living entity to move or attack. For prevention of attack I have used LivingAttackEvent like this:   @SubscribeEvent public static void onAttacked(final LivingAttackEvent event) { // Get source of the damage. DamageSource damageSource = event.getSource(); // Get reference to entity that caused the damage. Entity entity = damageSource.getEntity(); // IF: Entity is not alive. if (!(entity instanceof LivingEntity)) { return; } // Cast entity to mob. LivingEntity mob = (LivingEntity)entity; // Get reference to level where entity is living. Level level = entity.getLevel(); // IF: Code is executing on the client side. if (level.isClientSide()) { return; } // IF: Mob does not have stunned effect applied. if(!mob.hasEffect(PlayerMobEffects.STUNNED.get())){ return; } // Cancel the event - prevent mob from doing anything. event.setCanceled(true); } However this does not work as expected as mob still makes the attack but damage is not done so it does not really look like a stun - it's more like its damage is reduced to 0. I have managed to totally block mob by canceling LivingUpdateEvent - but that has other side effects as living entity is not updated with anything - can't be damaged, can't be hit/burn by sun - basically it becomes immortal. I have also tried with LivingSetAttackTargetEvent but this event can't be canceled. Is there a way to just stop entity from making an attack? Same question regarding the movement - is there a way to stop living entity from moving? Thanks!
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.