Skip to content

Commit b40a2bb

Browse files
committed
Fixed lightning and oxidation
1 parent ce675b8 commit b40a2bb

File tree

3 files changed

+26
-26
lines changed

3 files changed

+26
-26
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
- Fixed illusioner having invisible bow
77
- Fixed villagers not running from illusioners
88
- Fixed lightning rods lightning bolt attraction
9-
- Fixed lightning rods oxidation
9+
- Fixed all oxidation cases related to lightning bolts and lightning rods
1010
- Corrected multiple data tags
1111

1212
## 4.0.10

common/src/main/java/com/faboslav/friendsandfoes/common/mixin/LightningEntityMixin.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
package com.faboslav.friendsandfoes.common.mixin;
22

3-
import com.faboslav.friendsandfoes.common.FriendsAndFoes;
4-
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
5-
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
6-
import org.spongepowered.asm.mixin.Mixin;
73
import net.minecraft.world.entity.LightningBolt;
4+
import org.spongepowered.asm.mixin.Mixin;
85

96
//? if <=1.21.8 {
10-
import com.faboslav.friendsandfoes.common.block.FriendsAndFoesOxidizable;
11-
import com.faboslav.friendsandfoes.common.tag.FriendsAndFoesTags;
127
import org.spongepowered.asm.mixin.Shadow;
13-
148
import net.minecraft.world.entity.Entity;
159
import java.util.Optional;
1610
import net.minecraft.core.BlockPos;
@@ -19,6 +13,12 @@
1913
import net.minecraft.world.level.block.LightningRodBlock;
2014
import net.minecraft.world.level.block.state.BlockState;
2115
import org.spongepowered.asm.mixin.Unique;
16+
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
17+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
18+
import net.minecraft.world.level.block.Block;
19+
import net.minecraft.world.level.block.WeatheringCopper;
20+
import com.faboslav.friendsandfoes.common.block.FriendsAndFoesOxidizable;
21+
import com.faboslav.friendsandfoes.common.tag.FriendsAndFoesTags;
2222

2323
@Mixin(LightningBolt.class)
2424
public abstract class LightningEntityMixin extends Entity
@@ -40,9 +40,10 @@ public LightningEntityMixin(EntityType<?> type, Level world) {
4040

4141
BlockPos blockPos = this.getStrikePosition();
4242
BlockState blockState = this.level().getBlockState(blockPos);
43+
Block block = blockState.getBlock();
4344

4445
if (blockState.is(FriendsAndFoesTags.LIGHTNING_RODS)) {
45-
((LightningRodBlock) this.level().getBlockState(blockPos).getBlock()).onLightningStrike(blockState, this.level(), blockPos);
46+
((LightningRodBlock)block).onLightningStrike(blockState, this.level(), blockPos);
4647
}
4748
}
4849

@@ -54,12 +55,16 @@ public LightningEntityMixin(EntityType<?> type, Level world) {
5455
BlockPos blockPos,
5556
Operation<Void> original
5657
) {
58+
original.call(level, blockPos);
59+
5760
BlockState blockState = level.getBlockState(blockPos);
61+
Block block = blockState.getBlock();
5862

59-
if (blockState.is(FriendsAndFoesTags.LIGHTNING_RODS)) {
60-
FriendsAndFoes.getLogger().info("should deoxidize to " + FriendsAndFoesOxidizable.getFirst(blockState));
63+
if (blockState.is(FriendsAndFoesTags.LIGHTNING_RODS) || blockState.is(FriendsAndFoesTags.COPPER_BUTTONS)) {
6164
level.setBlockAndUpdate(blockPos, FriendsAndFoesOxidizable.getFirst(level.getBlockState(blockPos)));
65+
}
6266

67+
if((block instanceof WeatheringCopper && !blockState.is(FriendsAndFoesTags.LIGHTNING_RODS)) || blockState.is(FriendsAndFoesTags.COPPER_BUTTONS)) {
6368
BlockPos.MutableBlockPos mutableBlockPos = blockPos.mutable();
6469
int i = level.random.nextInt(3) + 3;
6570

@@ -90,11 +95,19 @@ public LightningEntityMixin(EntityType<?> type, Level world) {
9095
private static Optional<BlockPos> friendsandfoes$randomStepCleaningCopper(Level level, BlockPos pos) {
9196
for(BlockPos blockPos : BlockPos.randomInCube(level.random, 10, pos, 1)) {
9297
BlockState blockState = level.getBlockState(blockPos);
93-
if (blockState.getBlock() instanceof FriendsAndFoesOxidizable) {
98+
Block block = blockState.getBlock();
99+
100+
if (blockState.is(FriendsAndFoesTags.LIGHTNING_RODS) || blockState.is(FriendsAndFoesTags.COPPER_BUTTONS)) {
94101
FriendsAndFoesOxidizable.getPrevious(blockState).ifPresent((blockStatex) -> level.setBlockAndUpdate(blockPos, blockStatex));
95102
level.levelEvent(3002, blockPos, -1);
96103
return Optional.of(blockPos);
97104
}
105+
106+
if (block instanceof WeatheringCopper) {
107+
WeatheringCopper.getPrevious(blockState).ifPresent((blockStatex) -> level.setBlockAndUpdate(blockPos, blockStatex));
108+
level.levelEvent(3002, blockPos, -1);
109+
return Optional.of(blockPos);
110+
}
98111
}
99112

100113
return Optional.empty();

common/src/main/java/com/faboslav/friendsandfoes/common/mixin/ServerWorldMixin.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.faboslav.friendsandfoes.common.FriendsAndFoes;
44
import com.faboslav.friendsandfoes.common.entity.ZombieHorseEntityAccess;
55
import com.faboslav.friendsandfoes.common.tag.FriendsAndFoesTags;
6-
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
76
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
87
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
98
import net.minecraft.core.BlockPos;
@@ -27,10 +26,6 @@
2726
import net.minecraft.world.phys.Vec3;
2827
import org.spongepowered.asm.mixin.Mixin;
2928
import org.spongepowered.asm.mixin.Shadow;
30-
import org.spongepowered.asm.mixin.injection.At;
31-
import org.spongepowered.asm.mixin.injection.Inject;
32-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
33-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
3429

3530
import java.util.Optional;
3631

@@ -143,7 +138,6 @@ protected ServerWorldMixin(
143138
return originalLightningRodPos;
144139
}
145140

146-
FriendsAndFoes.getLogger().info("Trying to find lightning rod at" + pos);
147141
ServerLevel serverWorld = (ServerLevel) (Object) this;
148142

149143
Optional<BlockPos> optional = serverWorld.getPoiManager().findClosest((registryEntry) -> {
@@ -152,13 +146,6 @@ protected ServerWorldMixin(
152146
return posx.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, posx.getX(), posx.getZ()) - 1;
153147
}, pos, 128, PoiManager.Occupancy.ANY);
154148

155-
var value = optional.map((posx) -> posx.above(1));
156-
157-
if(value.isPresent()) {
158-
FriendsAndFoes.getLogger().info("Found: " + value.get());
159-
} else {
160-
FriendsAndFoes.getLogger().info("Cant find");
161-
}
162-
return value;
149+
return optional.map((posx) -> posx.above(1));
163150
}
164151
}

0 commit comments

Comments
 (0)